ORG 1536 STMTAB EQU 136 STMCUR EQU 138 MEMTOP EQU 144 HIADR EQU 203 LOADR EQU 205 ; ;GET FIRST LINE NUMBER ; CLD PLA PLA STA LINNBR+1 PLA STA LINNBR ; ;LOCATE ADDRESS OF ;FIRST LINE NUMBER ; LDA STMTAB STA HIADR LDA STMTAB+1 STA HIADR+1 JSR SRCHLN ; ;SAVE ADDRESS OF FIRST ;LINE NUMBER ; LDA HIADR STA LOADR LDA HIADR+1 STA LOADR+1 ; ;GET LAST LINE NUMER ;PLUS 1 ;AND IT'S ADDRESS ; PLA STA LINNBR+1 PLA CLC ADC #1 STA LINNBR BCC GETTO INC LINNBR+1 GETTO JSR SRCHLN ; ;LENGTH TO MOVE = ;MEMTOP - ;ADDRESS OF LAST LINE ; SEC LDA MEMTOP SBC HIADR STA MOVLEN LDA MEMTOP+1 SBC HIADR+1 STA MOVLEN+1 ; ;LENGTH OF POINTER ;ADJUSTMENT = ;HIADR - LOADR ; SEC LDA HIADR SBC LOADR STA MEMADJ LDA HIADR+1 SBC LOADR+1 STA MEMADJ+1 ; ;REMOVE DELETED SPACE ; LDY #0 LDX MOVLEN+1 BEQ NOPG NXT256 LDA (HIADR),Y STA (LOADR),Y INY BNE NXT256 INC HIADR+1 INC LOADR+1 DEX BNE NXT256 NOPG CPY MOVLEN BEQ ADJPNT LDA (HIADR),Y STA (LOADR),Y INY BNE NOPG ; ;ADJUST BASIC POINTERS ; ADJPNT LDX #0 LDY #4 ADJLOP SEC LDA STMCUR,X SBC MEMADJ STA STMCUR,X LDA STMCUR+1,X SBC MEMADJ+1 STA STMCUR+1,X INX INX DEY BNE ADJLOP ; ;RETURN TO USER ; RTS ; ;SEARCH BASIC'S ;STATEMENT TABLE FOR A ;LINE NUMBER => LINNBR ; SRCHLN LDY #2 LDA (HIADR),Y STA LINLEN DEY LDA (HIADR),Y DEY CMP #128 BEQ LINRET CMP LINNBR+1 BEQ LOOKLO BCS LINRET BCC BMPLIN LOOKLO LDA (HIADR),Y CMP LINNBR BCS LINRET BMPLIN CLC LDA LINLEN ADC HIADR STA HIADR BCC SRCHLN INC HIADR+1 BNE SRCHLN LINRET RTS ; MOVLEN DB 0 DB 0 LINNBR DB 0 DB 0 MEMADJ DB 0 DB 0 LINLEN DB 0 ;;; .END
Back to previous page