Mastering Machine Code on Your ZX81
By Toni Baker

Sinclair ZX Spectrum
DUMP

NEW ROM

This program can dump memory in hex or Sinclair character codes or a combination of both. There's not a lot to it but it's really useful and is a by-product of work I'm doing elsewhere and I thought it would be a nice little program for machine code students to play around with.

Program Organisation
This should be written with HEXLD3D (chapter11-hexld3d.p) which has its machine code located between 4A82 and 4B77 (RAMTOP should be set to 4A00). As LENSLIST2 is basically HEXLD3D+LENSLIST2 you could use that instead as it's better for checking code and tracking down errors. This should be written to a line 1 REM statement of size 151 characters, although I always add a few more just in case a key press doesn't register properly. I've placed a few spares bytes in the initial type check so that you can JP to the bottom and add your own types if you feel adventurous. Program Listing
4082: 0000 ADDRESS DEFB 00 00 4084: 00 DUMPTYPE DEFB 00 4085: F5 HPRINT PUSH AF E6F0 AND F0 1F RRA 1F RRA 1F RRA 1F RRA C61C ADD A,1C D7 RST 10 F1 POP AF E60F AND 0F C61C ADD A,1C D7 RST 10 C9 RET 20 bytes. 4096: 2A8240 DUMP LD HL,(ADDRESS) 7C LD A,H CD8540 CALL HPRINT 7D LD A,L CD8540 CALL HPRINT AF XOR A D7 RST 10 3A8440 LD A,(DUMPTYPE) FE00 CP 00 2814 JR Z,DUMPTYPE0 40AA: FE03 CP 03 281D JR Z,DUMPTYPE1 40AE: FEF5 CP F5 282F JR Z,DUMPTYPE2 40B2: FEF6 CP F6 2847 JR Z,DUMPTYPE3 40B6: 00 * 8 NOPS DEFB 00 * 8 Spare. 40 bytes. 40BE: 0608 DUMPTYPE0 LD B,08 7E DT0LOOP LD A,(HL) CD8540 CALL HPRINT AF XOR A D7 RST 10 23 INC HL 10F7 DJNZ DT0LOOP 40C9: 180D JR END 13 bytes. 40CB: 0618 DUMPTYPE1 LD B,18 7E DT1LOOP LD A,(HL) CB77 BIT 6,A 2802 JR Z,PRINTABLE 3E1B LD A,1B D7 PRINTABLE RST 10 23 INC HL 10F5 DJNZ DT1LOOP 13 bytes. 40D8: 3E75 END LD A,75 3C INC A D7 RST 10 228240 LD (ADDRESS),HL 18B5 JR DUMP 9 bytes. 40E1: 0606 DUMPTYPE2 LD B,06 C5 PUSH BC E5 PUSH HL 7E DT2LOOP1 LD A,(HL) CD8540 CALL HPRINT AF XOR A D7 RST 10 23 INC HL 10F7 DJNZ DT2LOOP1 E1 POP HL C1 POP BC 40F0: 7E DT2LOOP2 LD A,(HL) CB77 BIT 6,A 2802 JR Z,PRINTABLE 3E1B LD A,1B D7 PRINTABLE RST 10 23 INC HL 10F5 DJNZ DT2LOOP2 40FB: 18DB JR END 28 bytes. 40FD: 0608 DUMPTYPE3 LD B,08 C5 PUSH BC E5 PUSH HL 7E DT3LOOP1 LD A,(HL) CD8540 CALL HPRINT 23 INC HL 10F9 DJNZ DT3LOOP1 AF XOR A D7 RST 10 E1 POP HL C1 POP BC 410C: 7E DT3LOOP2 LD A,(HL) CB77 BIT 6,A 2802 JR Z,PRINTABLE 3E1B LD A,1B D7 PRINTABLE RST 10 23 INC HL 10F5 DJNZ DT3LOOP2 4117: 18BF JR END 28 bytes. Total 151 bytes. The BASIC Part
Once you've finished entering the machine code above, delete all the BASIC lines except the line 1 REM statement and then add these lines: 10 CLS 20 PRINT "TYPE M/P/B/C AND AN ADDRESS E.G." 30 PRINT "M407D. Q QUITS, CONT CONTINUES." 40 INPUT A$ 50 IF A$(1)="M" OR A$(1)="P" OR A$(1)="B" OR A$(1)="C" THEN GOTO 70 60 STOP 70 POKE 16516,(CODE A$(1))-50 80 POKE 16515,16*CODE A$(2)+CODE A$(3)-476 90 POKE 16514,16*CODE A$(4)+CODE A$(5)-476 100 RAND USR 16534 Don't forget to manually type SAVE "DUMP" as there's no fancy save option anymore. Operating Instructions
Type RUN and follow the instructions within the program.

Download available for 16K ZX81 -> sif-dump.p

Sinclair ZX Spectrum

  Previous Page Back Next Page