ZX81/TS1000 Tips

See all articles from SINCUS v6 n4

5. A machine code routine that allows you to insert a BASIC line at any unused line number. If by chance you pick a line number that is already in use the routine returns a report code “U”. The routine may be relocated by changing the addresses, relative to the three STORE locations and the B_LINE address, to the appropriate addresses.

4082  0000 STORES: STORE 1          4088  0083 B_LINE: LINE # 131
4084 0000 STORE 2 0200 LINE LENGTH; 2
4086 0000 STORE 3 E3 STOP
                                 76           N/L
6 bytes                             6 bytes

ENTRY POINT:
(16525)d

408E CD230F BAS_IN: CALL 0F23, FAST              40BA 228640 STOR: LD(STORE 3), HL
D9 EXX EB EX DE, HL
228240 LD(STORE 1), HL' CD9E09 CALL 099E,MAKE_ROOM
D9 EXX A7 AND A
010600 LD BC, 0006 ED52 SBC HL, DE
C5 PUSH BC 19 ADD HL, DE
2A0C40 LD HL,(D.FILE) 3801 JR C, 40BA, STOR
09 ADD HL,BC 09 ADD HL, BC
228440 LD(STORE 2),HL D1 POP DE;DESTINATION
408300 LD HL,0083;NEW LINE # C1 POP BC;NO. OF BYTES
CDD809 CALL 09D8,LINE_ADDR. 218840 LD HL, 4088;SOURCE
2003 JR NZ, 40AC, N_OK EDB0 LDIR;MOVE IN B_LINE
C1 POP BC D9 RESTOR: EXX
CF1D RST 08 DEFB:"U" 2A8440 LD(STORE 2)
40AC C1 N-OK: POP BC 220C40 LD (D.FILE), HL
C5 PUSH BC 2A8640 LD HL, (STORE 3)
E5 PUSH HL 222940 LD(NXTLIN), HL
EB EX DE, HL 40D9 CALL 0F2B, SLOW
2A2940 LD HL,(NXTLIN) C9 RET

91 bytes total

6. A short routine to delete one or more lines of BASIC from your machine code. To delete a single line, use the line # both as the 1st. line and the last line to be deleted. This routine is completely relocatable.

(16514)d              Lines 920 and 950 are for example.
4082  219803  DELETE: LD HL, 0398;Line 920 1st line.       CDF209   CALL 09F2, NEXT_ONE
CDD809 CALL 09D8, LINE_ADDR. EB EX DE, HL
E5 PUSH HL D1 POP DE
21B603 LD HL, 03B6;Line 950 last line. CD5D0A CALL 0A5D, RECLAIM_1
CDD809 CALL 09D8, LINE_ADDR. C9 RET