1000 ;******************************** 1002 ;* SOURCE CODE FOR BASIC RELOC. * 1004 ;* BY JAMES HOSEK * 1006 ;******************************** 1008 ; 1020 *= 2063; ASSEMBLE PROGRAM INTO REM STATEMENT 1021 J = 25; OFFSET FOR NEW LOCATION 1023 K = 27; TEMP. ZERO PAGE POINTER 1024 L = 29; TEMP. ZERO PAGE POINTER 1025 TXTTAB = 43; POINTER TO START OF BASIC PROGRAM 1026 VARTAB = 45; POINTER TO END OF PROGRAM 1040 LDY 41082; GET A ZERO FROM ROM 1060 SEC: LDA MEMTO: STA TXTTAB+1; POINT TXTTAB TO NEW LOCATION 1065 SBC #8: STA J; CALCULATE OFFSET 1070 CLC: LDA VARTAB: STA K: STA L; GET LO BYTE OF TOP OF PROGRAM 1075 LDA VARTAB+1: STA K+1: ADC J: STA L+1; SET UP TRANSFER POINTERS 1077 STA VARTAB+1; POINT VARTAB TO NEW LOCATION 1080 LOOP LDA K: BNE CONT1: DEC K+1: DEC L+1 1090 CONT1 DEC K: DEC L; DECREMENT POINTERS 1100 LDA (K),Y: STA (L),Y; TRANSFER ONE BYTE OF MEMORY 1110 LDA K: BNE CONT1: LDA K+1: CMP #8: BNE LOOP; CHECK IF DONE (K = $0800) 1120 INC L; SET UP 'L' TO LOOK AT POINTER TO NEXT BASIC LINE, IN THE FIRST LINE 1160 LOOP2 LDA (L),Y: INY: ORA (L),Y: BEQ OUT; CHECK FOR END OF PROGRAM 1170 CLC: LDA (L),Y: ADC J: STA (L),Y: STA 2; RECALCULATE POINTER WITH OFFSET 1180 DEY: LDA (L),Y: STA L: LDA 2: STA L+1: JMP LOOP2; POINT TO THE NEXT LINE 1200 OUT LDX 41070; GET A $0D FROM ROM 1205 STX 632: STX 635: LDX #49: STX 631; SET UP KEYBOARD QUEUE 1210 LDX #82: STX 633: LDX #117: STX 634: LDX #5: STX 198: RTS 1220 MEMTO .BYTE 16; PAGE TO TRANSFER TO 1230 .BYTE 34 0 0 0; SET UP END OF LINE 1300 .END RELOCATER.SRC