ca65 V2.19 - Git e5f4ca6 Main file : RM65CRT.ca65 Current file: RM65CRT.ca65 000000r 1 ; 000000r 1 ; RM65-5102 CRT Controller (CRTC) Module Program ROM (R14B4) 000000r 1 ; 000000r 1 ; Reformatted for CA65 Assembler 000000r 1 ; Chris Oddy December 2025 000000r 1 ; 000000r 1 .setcpu "6502" 000000r 1 ; 000000r 1 ; *** Zero Page *** 000000r 1 BSTART := $DB 000000r 1 CURSOR := $DD 000000r 1 ; 000000r 1 COLUMN := $F0 000000r 1 EQFLG := $F1 000000r 1 CRFLG := $F2 000000r 1 SAVA := $F3 000000r 1 SAVX := $F4 000000r 1 SMFLG := $F5 000000r 1 COMCOL := $F6 000000r 1 COMCR := $F7 000000r 1 ; 000000r 1 ; *** CRT Variables *** 000000r 1 SCRMAX := $0347 000000r 1 ROWMAX := $0349 000000r 1 COLMAX := $034A 000000r 1 END := $034B 000000r 1 DLE := $034D 000000r 1 INCH := $034E 000000r 1 EFLG := $034F 000000r 1 GRAPH := $0350 000000r 1 INVERS := $0351 000000r 1 DSTARL := $0352 000000r 1 DSTARH := $0353 000000r 1 YSAV := $0354 000000r 1 XSAV := $0355 000000r 1 ASAV := $0356 000000r 1 AIM65 := $0357 000000r 1 ROW := $0358 000000r 1 COL := $0359 000000r 1 TABLE := $035A 000000r 1 CURP2 := $035B 000000r 1 ECHO := $035C 000000r 1 CMAX := $035E 000000r 1 PRFLG := $035F 000000r 1 XXX := $0360 000000r 1 YYY := $0361 000000r 1 XX2 := $0362 000000r 1 XADDR := $0363 000000r 1 COL2 := $0365 000000r 1 DBUFF := $0366 000000r 1 ; 000000r 1 DILINK := $A406 ; AIM Display Echo 000000r 1 CURPO2 := $A415 ; AIM Display Pointer 000000r 1 CURPOS := $A416 ; AIM Printer Pointer 000000r 1 DIBUFF := $A438 ; AIM Display Buffer 000000r 1 ; 000000r 1 RS := $9800 ; 6545 Base Address 000000r 1 ; 000000r 1 STATUS := $9880 ; Display Enable Status 000000r 1 ; 000000r 1 ; *** Monitor Subroutines *** 000000r 1 COMIN := $E1A1 ; Re-enter command interpreter 000000r 1 OUTDIS := $EF05 ; Output A to display 000000r 1 ; 000000r 1 ; *** ASCII Characters *** 000000r 1 CR := $0D 000000r 1 DELETE := $7F 000000r 1 ; 000000r 1 .org $9800 009800 1 ; 009800 1 43 4F 50 59 RKWELL: .byte "COPYRIGHT 1981ROCKWELL INTERNATIONAL ;GET CURRENT ROW",CR 009804 1 52 49 47 48 009808 1 54 20 31 39 009836 1 20 4C 44 58 .byte " LDX ROWMAX ;GET #ROWS/SCREEN",CR 00983A 1 20 52 4F 57 00983E 1 4D 41 58 20 009854 1 20 44 45 58 .byte " DEX ;DECR.",CR 009858 1 20 3B 44 45 00985C 1 43 52 2E 0D 009860 1 20 43 50 58 .byte " CPX ROW ;CURRENT=LAST ?",CR 009864 1 20 52 4F 57 009868 1 20 3B 43 55 009879 1 20 42 45 51 .byte " BEQ WRBLNK ;YES, JUST BLANK IT",CR 00987D 1 20 57 52 42 009881 1 4C 4E 4B 20 009899 1 20 44 45 58 .byte " DEX ;ROWMAX-2 NOW",CR 00989D 1 20 3B 52 4F 0098A1 1 57 4D 41 58 0098AC 1 20 53 54 58 .byte " STX ROW ;ROW=ROWMAX-2",CR 0098B0 1 20 52 4F 57 0098B4 1 20 3B 52 4F 0098C3 1 20 53 54 59 .byte " STY YSAV ;SAVE ORIGINAL ROW",CR 0098C7 1 20 59 53 41 0098CB 1 56 20 3B 53 0098E0 1 20 4C 44 41 .byte " LDA COLMAX ;GET #COLS/SCREEN",CR 0098E4 1 20 43 4F 4C 0098E8 1 4D 41 58 20 0098FE 1 20 41 .byte " A" 009900 1 ; 009900 1 20 06 99 MONENT: jsr INIT ; Initialisation Entry Point 009903 1 4C A1 E1 jmp COMIN ; Re-enter command interpreter 009906 1 ; 009906 1 AD 5A 03 INIT: lda TABLE 009909 1 C9 04 cmp #$04 00990B 1 90 0D bcc OKTAB 00990D 1 D0 09 bne NOTOWN 00990F 1 AC 63 03 ldy XADDR 009912 1 AD 64 03 lda XADDR+1 009915 1 4C 22 99 jmp SETUP 009918 1 A9 01 NOTOWN: lda #$01 00991A 1 0A OKTAB: asl a 00991B 1 AA tax 00991C 1 BC AA 9F ldy SIZE,x 00991F 1 BD AB 9F lda SIZE+1,x 009922 1 85 DC SETUP: sta BSTART+1 009924 1 84 DB sty BSTART 009926 1 ; 009926 1 A0 07 ldy #$07 009928 1 8C 00 98 TABLES: sty RKWELL 00992B 1 B1 DB lda (BSTART),y 00992D 1 8D 01 98 sta RS+1 009930 1 A9 00 lda #$00 009932 1 99 4D 03 sta DLE,y 009935 1 88 dey 009936 1 10 F0 bpl TABLES 009938 1 ; 009938 1 A0 0F ldy #$0F 00993A 1 A2 07 ldx #$07 00993C 1 8C 00 98 NXPRM: sty RKWELL 00993F 1 BD B2 9F lda MID8,x 009942 1 8D 01 98 sta RS+1 009945 1 88 dey 009946 1 CA dex 009947 1 10 F3 bpl NXPRM 009949 1 ; 009949 1 A0 08 ldy #$08 00994B 1 A2 03 ldx #$03 00994D 1 B1 DB NLSTB: lda (BSTART),y 00994F 1 9D 47 03 sta SCRMAX,x 009952 1 C8 iny 009953 1 BD BA 9F lda IVALS,x 009956 1 9D 5C 03 sta ECHO,x 009959 1 CA dex 00995A 1 10 F1 bpl NLSTB 00995C 1 A9 90 lda #$90 00995E 1 8D 53 03 sta DSTARH 009961 1 20 54 9C jsr CALEND 009964 1 ; 009964 1 AE 57 03 WARM: ldx AIM65 009967 1 F0 03 beq NDAIM 009969 1 20 43 9D jsr CRT 00996C 1 20 6E 9A NDAIM: jsr CLRHOM 00996F 1 60 SKIPIT: rts 009970 1 ; 009970 1 90 FD USERQ: bcc SKIPIT 009972 1 68 pla 009973 1 C9 0A SKIPOA: cmp #$0A 009975 1 F0 F8 beq SKIPIT 009977 1 D8 OUTD: cld 009978 1 48 pha 009979 1 8E 60 03 stx XXX 00997C 1 8C 61 03 sty YYY 00997F 1 AD 5F 03 lda PRFLG 009982 1 D0 0E bne SK3 009984 1 20 8F 9D jsr BSPACE 009987 1 20 8F 9D jsr BSPACE 00998A 1 20 8F 9D jsr BSPACE 00998D 1 A9 03 lda #$03 00998F 1 8D 5F 03 sta PRFLG 009992 1 BA SK3: tsx 009993 1 BC 03 01 ldy $0103,x 009996 1 C0 D1 cpy #$D1 009998 1 D0 07 bne NASSM 00999A 1 BC 02 01 ldy $0102,x 00999D 1 C0 09 cpy #$09 00999F 1 F0 61 beq DONE 0099A1 1 68 NASSM: pla 0099A2 1 48 pha 0099A3 1 8D 56 03 sta ASAV 0099A6 1 AE 4D 03 ldx DLE 0099A9 1 F0 05 beq SPECAL 0099AB 1 CE 4D 03 dec DLE 0099AE 1 F0 3A beq OUTIT 0099B0 1 C9 7F SPECAL: cmp #DELETE 0099B2 1 D0 05 bne N2DEL 0099B4 1 20 8F 9D jsr BSPACE 0099B7 1 D0 49 bne DONE 0099B9 1 29 7F N2DEL: and #DELETE 0099BB 1 8D 56 03 sta ASAV 0099BE 1 AE 4F 03 ldx EFLG 0099C1 1 F0 23 beq NESC 0099C3 1 CA dex 0099C4 1 F0 08 beq EFLQ1 0099C6 1 CA dex 0099C7 1 F0 15 beq EFLQ2 0099C9 1 20 F0 9C jsr CONVRT 0099CC 1 D0 34 bne DONE 0099CE 1 C9 3D EFLQ1: cmp #'=' 0099D0 1 F0 0F beq INFLQ 0099D2 1 C9 47 cmp #'G' 0099D4 1 D0 03 bne NVALID 0099D6 1 20 BC 9C jsr GRPHON 0099D9 1 CE 4F 03 NVALID: dec EFLG 0099DC 1 F0 24 beq DONE 0099DE 1 8D 54 03 EFLQ2: sta YSAV 0099E1 1 EE 4F 03 INFLQ: inc EFLG 0099E4 1 D0 1C bne DONE 0099E6 1 ; 0099E6 1 C9 20 NESC: cmp #$20 0099E8 1 90 06 bcc CNTL 0099EA 1 20 97 9D OUTIT: jsr CHAR 0099ED 1 4C 02 9A jmp DONE 0099F0 1 ; 0099F0 1 0A CNTL: asl a 0099F1 1 AA tax 0099F2 1 BD BE 9F lda JTBL,x 0099F5 1 85 DB sta BSTART 0099F7 1 BD BF 9F lda JTBL+1,x 0099FA 1 85 DC sta BSTART+1 0099FC 1 20 01 9C jsr RDCUR 0099FF 1 20 68 9E jsr INDIR 009A02 1 68 DONE: pla 009A03 1 AE 60 03 ldx XXX 009A06 1 AC 61 03 ldy YYY 009A09 1 60 NOECHO: rts 009A0A 1 ; 009A0A 1 20 6E 9A STEST: jsr CLRHOM 009A0D 1 20 01 9C jsr RDCUR 009A10 1 A9 00 lda #$00 009A12 1 85 DB sta BSTART 009A14 1 20 92 9C ROWOUT: jsr INCUR2 009A17 1 A5 DB lda BSTART 009A19 1 20 A0 9C jsr WRITE 009A1C 1 E6 DB inc BSTART 009A1E 1 A5 DB lda BSTART 009A20 1 29 0F and #$0F 009A22 1 D0 F0 bne ROWOUT 009A24 1 A5 DB lda BSTART 009A26 1 F0 32 beq HOMECU 009A28 1 20 A2 9B jsr CARTN 009A2B 1 D0 E7 bne ROWOUT 009A2D 1 ; 009A2D 1 AD 58 03 DELINE: lda ROW 009A30 1 48 pha 009A31 1 20 15 9C jsr LNSTRT 009A34 1 EE 58 03 LOOP: inc ROW 009A37 1 AE 58 03 ldx ROW 009A3A 1 EC 49 03 cpx ROWMAX 009A3D 1 D0 07 bne COPY 009A3F 1 68 pla 009A40 1 8D 58 03 sta ROW 009A43 1 4C 2C 9B jmp BLANK 009A46 1 20 2B 9C COPY: jsr ADCOLS 009A49 1 20 6A 9C jsr READLN 009A4C 1 20 3D 9B jsr SMAX2 009A4F 1 20 79 9C jsr WRITLN 009A52 1 F0 E0 beq LOOP 009A54 1 ; 009A54 1 20 15 9C CLINE: jsr LNSTRT 009A57 1 4C 27 9B jmp WRBLNK 009A5A 1 ; 009A5A 1 AD 52 03 HOMECU: lda DSTARL 009A5D 1 85 DD sta CURSOR 009A5F 1 AD 53 03 lda DSTARH 009A62 1 85 DE sta CURSOR+1 009A64 1 A2 00 ldx #$00 009A66 1 8E 58 03 stx ROW 009A69 1 8E 59 03 ZERCOL: stx COL 009A6C 1 F0 3B beq XFR 009A6E 1 ; 009A6E 1 20 5A 9A CLRHOM: jsr HOMECU 009A71 1 ; 009A71 1 20 92 9D CLREND: jsr WRITBL 009A74 1 A6 DD ldx CURSOR 009A76 1 EC 4B 03 cpx END 009A79 1 D0 F6 bne CLREND 009A7B 1 A5 DE lda $DE 009A7D 1 29 DF and #$DF 009A7F 1 CD 4C 03 cmp END+1 009A82 1 D0 ED bne CLREND 009A84 1 60 rts 009A85 1 ; 009A85 1 20 01 9C CURBCK: jsr RDCUR 009A88 1 CE 59 03 dec COL 009A8B 1 10 12 bpl NCOL1 009A8D 1 CE 58 03 dec ROW 009A90 1 10 06 bpl COL1 009A92 1 ; 009A92 1 20 2B 9C jsr ADCOLS 009A95 1 20 68 9B jsr TOPROW 009A98 1 AE 4A 03 COL1: ldx COLMAX 009A9B 1 CA dex 009A9C 1 8E 59 03 stx COL 009A9F 1 ; 009A9F 1 A6 DD NCOL1: ldx CURSOR 009AA1 1 D0 04 bne DDEC 009AA3 1 18 clc 009AA4 1 20 1D 9C jsr BOUND0 009AA7 1 C6 DD DDEC: dec CURSOR 009AA9 1 4C 78 9B XFR: jmp XFERCU 009AAC 1 ; 009AAC 1 20 B2 9A CURFWD: jsr CURFW2 009AAF 1 B0 A9 bcs HOMECU 009AB1 1 60 rts 009AB2 1 ; 009AB2 1 20 01 9C CURFW2: jsr RDCUR 009AB5 1 EE 65 03 inc COL2 009AB8 1 AE 59 03 ldx COL 009ABB 1 E8 inx 009ABC 1 EC 4A 03 cpx COLMAX 009ABF 1 D0 13 bne NTLCOL 009AC1 1 AE 58 03 ldx ROW 009AC4 1 E8 inx 009AC5 1 EC 49 03 cpx ROWMAX 009AC8 1 D0 02 bne NTLROW 009ACA 1 38 sec 009ACB 1 60 rts 009ACC 1 ; 009ACC 1 A2 FF NTLROW: ldx #$FF 009ACE 1 8E 59 03 stx COL 009AD1 1 EE 58 03 inc ROW 009AD4 1 EE 59 03 NTLCOL: inc COL 009AD7 1 20 92 9C INCUR: jsr INCUR2 009ADA 1 20 78 9B jsr XFERCU 009ADD 1 18 clc 009ADE 1 60 rts 009ADF 1 ; 009ADF 1 20 15 9C INSLIN: jsr LNSTRT 009AE2 1 AC 58 03 ldy ROW 009AE5 1 AE 49 03 ldx ROWMAX 009AE8 1 CA dex 009AE9 1 EC 58 03 cpx ROW 009AEC 1 F0 39 beq WRBLNK 009AEE 1 CA dex 009AEF 1 8E 58 03 stx ROW 009AF2 1 8C 54 03 sty YSAV 009AF5 1 AD 4A 03 lda COLMAX 009AF8 1 0A asl a 009AF9 1 8D 55 03 sta XSAV 009AFC 1 38 sec 009AFD 1 AD 4B 03 lda END 009B00 1 ED 55 03 sbc XSAV 009B03 1 85 DD sta CURSOR 009B05 1 AD 4C 03 lda END+1 009B08 1 20 1F 9C jsr BOUND5 009B0B 1 20 6A 9C LOOP1: jsr READLN 009B0E 1 20 79 9C jsr WRITLN 009B11 1 AE 58 03 ldx ROW 009B14 1 EC 54 03 cpx YSAV 009B17 1 F0 0B beq WRBL2 009B19 1 20 3D 9B jsr SMAX2 009B1C 1 20 40 9B jsr CONTIN 009B1F 1 CE 58 03 dec ROW 009B22 1 10 E7 bpl LOOP1 009B24 1 009B24 1 20 3D 9B WRBL2: jsr SMAX2 009B27 1 A2 00 WRBLNK: ldx #$00 009B29 1 20 69 9A jsr ZERCOL 009B2C 1 ; 009B2C 1 A2 00 BLANK: ldx #$00 009B2E 1 20 92 9D BLANK1: jsr WRITBL 009B31 1 E8 inx 009B32 1 EC 4A 03 cpx COLMAX 009B35 1 D0 F7 bne BLANK1 009B37 1 60 rts 009B38 1 ; 009B38 1 AE 59 03 CLREOL: ldx COL 009B3B 1 10 F1 bpl BLANK1 009B3D 1 ; 009B3D 1 20 40 9B SMAX2: jsr CONTIN 009B40 1 A5 DD CONTIN: lda CURSOR 009B42 1 38 sec 009B43 1 ED 4A 03 sbc COLMAX 009B46 1 4C 1B 9C jmp BOUND1 009B49 1 ; 009B49 1 EE 58 03 CURDWN: inc ROW 009B4C 1 AE 58 03 ldx ROW 009B4F 1 EC 49 03 cpx ROWMAX 009B52 1 F0 08 beq BOTROW 009B54 1 20 2B 9C jsr ADCOLS 009B57 1 D0 1F bne XFERCU 009B59 1 20 40 9B TOTOP: jsr CONTIN 009B5C 1 CE 58 03 BOTROW: dec ROW 009B5F 1 D0 F8 bne TOTOP 009B61 1 F0 15 beq XFERCU 009B63 1 ; 009B63 1 CE 58 03 CURUP: dec ROW 009B66 1 10 0D bpl UP2 009B68 1 AE 49 03 TOPROW: ldx ROWMAX 009B6B 1 CA dex 009B6C 1 8E 58 03 stx ROW 009B6F 1 20 2B 9C TOBOT: jsr ADCOLS 009B72 1 CA dex 009B73 1 10 FA bpl TOBOT 009B75 1 20 40 9B UP2: jsr CONTIN 009B78 1 ; 009B78 1 38 XFERCU: sec 009B79 1 A5 DD lda CURSOR 009B7B 1 ED 52 03 sbc DSTARL 009B7E 1 A5 DE lda CURSOR+1 009B80 1 AA tax 009B81 1 ED 53 03 sbc DSTARH 009B84 1 10 05 bpl NOBIT 009B86 1 8A txa 009B87 1 09 08 ora #$08 009B89 1 D0 01 bne NOBIT2 009B8B 1 8A NOBIT: txa 009B8C 1 AE 51 03 NOBIT2: ldx INVERS 009B8F 1 F0 02 beq NOTSET 009B91 1 09 20 ora #$20 009B93 1 A2 0E NOTSET: ldx #$0E 009B95 1 20 9B 9B jsr S6545 009B98 1 A5 DD lda CURSOR 009B9A 1 E8 inx 009B9B 1 8E 00 98 S6545: stx RKWELL 009B9E 1 8D 01 98 sta RS+1 009BA1 1 60 rts 009BA2 1 ; 009BA2 1 AD 57 03 CARTN: lda AIM65 009BA5 1 F0 0A beq CLOOP 009BA7 1 A9 0D lda #$0D 009BA9 1 20 05 EF jsr OUTDIS ; Output A to display 009BAC 1 A9 00 lda #$00 009BAE 1 8D 01 AC sta $AC01 009BB1 1 8D 5B 03 CLOOP: sta CURP2 009BB4 1 8D 65 03 sta COL2 009BB7 1 EE 58 03 inc ROW 009BBA 1 20 01 9C jsr RDCUR 009BBD 1 20 2B 9C jsr ADCOLS 009BC0 1 20 15 9C jsr LNSTRT 009BC3 1 AE 58 03 ldx ROW 009BC6 1 EC 49 03 cpx ROWMAX 009BC9 1 D0 20 bne ZCOL 009BCB 1 CE 58 03 dec ROW 009BCE 1 18 SCROLL: clc 009BCF 1 AD 52 03 lda DSTARL 009BD2 1 6D 4A 03 adc COLMAX 009BD5 1 8D 52 03 sta DSTARL 009BD8 1 AD 53 03 lda DSTARH 009BDB 1 69 00 adc #$00 009BDD 1 29 97 and #$97 009BDF 1 8D 53 03 sta DSTARH 009BE2 1 20 2C 9B jsr BLANK 009BE5 1 20 3C 9C jsr XDSTAR 009BE8 1 20 40 9B jsr CONTIN 009BEB 1 A2 00 ZCOL: ldx #$00 009BED 1 4C 69 9A jmp ZERCOL 009BF0 1 ; 009BF0 1 AD 51 03 VIDEO: lda INVERS 009BF3 1 49 FF eor #$FF 009BF5 1 8D 51 03 sta INVERS 009BF8 1 20 3C 9C jsr XDSTAR 009BFB 1 20 01 9C jsr RDCUR 009BFE 1 4C 78 9B jmp XFERCU 009C01 1 ; 009C01 1 A2 0E RDCUR: ldx #$0E 009C03 1 20 0C 9C jsr R6545 009C06 1 09 90 ora #$90 009C08 1 20 37 9C jsr MASK 009C0B 1 E8 inx 009C0C 1 8E 00 98 R6545: stx RKWELL 009C0F 1 AD 01 98 lda RS+1 009C12 1 85 DD sta CURSOR 009C14 1 60 rts 009C15 1 ; 009C15 1 38 LNSTRT: sec 009C16 1 A5 DD lda CURSOR 009C18 1 ED 59 03 sbc COL 009C1B 1 85 DD BOUND1: sta CURSOR 009C1D 1 ; 009C1D 1 A5 DE BOUND0: lda $DE 009C1F 1 E9 00 BOUND5: sbc #$00 009C21 1 85 DE sta $DE 009C23 1 C9 90 cmp #$90 009C25 1 B0 14 bcs SKCAR 009C27 1 A9 97 lda #$97 009C29 1 D0 0E bne MM2 009C2B 1 ; 009C2B 1 18 ADCOLS: clc 009C2C 1 A5 DD lda CURSOR 009C2E 1 6D 4A 03 adc COLMAX 009C31 1 85 DD STCUR: sta CURSOR 009C33 1 A5 DE INCMSB: lda CURSOR+1 009C35 1 69 00 adc #$00 009C37 1 29 97 MASK: and #$97 009C39 1 85 DE MM2: sta $DE 009C3B 1 60 SKCAR: rts 009C3C 1 ; 009C3C 1 AD 53 03 XDSTAR: lda DSTARH 009C3F 1 09 20 ora #$20 009C41 1 AE 51 03 ldx INVERS 009C44 1 D0 02 bne STORE 009C46 1 29 D7 and #$D7 009C48 1 A2 0C STORE: ldx #$0C 009C4A 1 20 9B 9B jsr S6545 009C4D 1 E8 inx 009C4E 1 AD 52 03 lda DSTARL 009C51 1 20 9B 9B jsr S6545 009C54 1 ; 009C54 1 18 CALEND: clc 009C55 1 AD 52 03 lda DSTARL 009C58 1 6D 47 03 adc SCRMAX 009C5B 1 8D 4B 03 sta END 009C5E 1 AD 53 03 lda DSTARH 009C61 1 6D 48 03 adc SCRMAX+1 009C64 1 29 D7 and #$D7 009C66 1 8D 4C 03 sta END+1 009C69 1 60 rts 009C6A 1 ; 009C6A 1 A2 00 READLN: ldx #$00 009C6C 1 20 88 9C READ1: jsr READ 009C6F 1 9D 66 03 sta DBUFF,x 009C72 1 E8 inx 009C73 1 EC 4A 03 cpx COLMAX 009C76 1 D0 F4 bne READ1 009C78 1 60 rts 009C79 1 ; 009C79 1 A2 00 WRITLN: ldx #$00 009C7B 1 BD 66 03 WRIT1: lda DBUFF,x 009C7E 1 20 A0 9C jsr WRITE 009C81 1 E8 inx 009C82 1 EC 4A 03 WRIT2: cpx COLMAX 009C85 1 D0 F4 bne WRIT1 009C87 1 60 rts 009C88 1 ; 009C88 1 20 AC 9C READ: jsr SDELAY 009C8B 1 AE 80 98 ENAB7: ldx STATUS 009C8E 1 30 FB bmi ENAB7 009C90 1 B1 DD lda (CURSOR),y 009C92 1 48 INCUR2: pha 009C93 1 E6 DD inc CURSOR 009C95 1 D0 04 bne NOCA 009C97 1 38 sec 009C98 1 20 33 9C jsr INCMSB 009C9B 1 68 NOCA: pla 009C9C 1 AE 62 03 ldx XX2 009C9F 1 60 rts 009CA0 1 ; 009CA0 1 20 AC 9C WRITE: jsr SDELAY 009CA3 1 AE 80 98 ENAB2: ldx STATUS 009CA6 1 30 FB bmi ENAB2 009CA8 1 91 DD sta (CURSOR),y 009CAA 1 10 E6 bpl INCUR2 009CAC 1 ; 009CAC 1 8E 62 03 SDELAY: stx XX2 009CAF 1 A0 00 ldy #$00 009CB1 1 AE 80 98 ENAB5: ldx STATUS 009CB4 1 30 FB bmi ENAB5 009CB6 1 AE 80 98 DLY5: ldx STATUS 009CB9 1 10 FB bpl DLY5 009CBB 1 60 rts 009CBC 1 ; 009CBC 1 20 C8 9C GRPHON: jsr B32CUR 009CBF 1 D0 03 bne GRTN 009CC1 1 ; 009CC1 1 20 CC 9C GRPHOF: jsr DCURS 009CC4 1 8D 50 03 GRTN: sta GRAPH 009CC7 1 60 rts 009CC8 1 ; 009CC8 1 A9 60 B32CUR: lda #$60 009CCA 1 D0 06 bne CMODE 009CCC 1 ; 009CCC 1 A9 00 DCURS: lda #$00 009CCE 1 F0 02 beq CMODE 009CD0 1 A9 20 BLKCUR: lda #$20 009CD2 1 A2 0A CMODE: ldx #$0A 009CD4 1 4C 9B 9B jmp S6545 009CD7 1 ; 009CD7 1 AD 4E 03 INSTOQ: lda INCH 009CDA 1 49 FF eor #$FF 009CDC 1 8D 4E 03 sta INCH 009CDF 1 60 rts 009CE0 1 ; 009CE0 1 A2 01 ESC: ldx #$01 009CE2 1 8E 4F 03 stx EFLG 009CE5 1 60 rts 009CE6 1 ; 009CE6 1 20 36 9D DELCHR: jsr RDEOL 009CE9 1 E8 inx 009CEA 1 20 7B 9C jsr WRIT1 009CED 1 4C 92 9D jmp WRITBL 009CF0 1 ; 009CF0 1 20 5A 9A CONVRT: jsr HOMECU 009CF3 1 AD 54 03 lda YSAV 009CF6 1 38 sec 009CF7 1 E9 20 sbc #$20 009CF9 1 A8 tay 009CFA 1 F0 12 beq ROWZ 009CFC 1 CC 49 03 cpy ROWMAX 009CFF 1 90 04 bcc ADDCOL 009D01 1 AC 49 03 ldy ROWMAX 009D04 1 88 dey 009D05 1 20 2B 9C ADDCOL: jsr ADCOLS 009D08 1 EE 58 03 inc ROW 009D0B 1 88 dey 009D0C 1 D0 F7 bne ADDCOL 009D0E 1 8C 4F 03 ROWZ: sty EFLG 009D11 1 AD 56 03 lda ASAV 009D14 1 38 sec 009D15 1 E9 20 sbc #$20 009D17 1 AA tax 009D18 1 EC 4A 03 cpx COLMAX 009D1B 1 90 04 bcc DKCOL 009D1D 1 AE 4A 03 ldx COLMAX 009D20 1 CA dex 009D21 1 8E 59 03 DKCOL: stx COL 009D24 1 A5 DD lda CURSOR 009D26 1 18 clc 009D27 1 6D 59 03 adc COL 009D2A 1 20 31 9C jsr STCUR 009D2D 1 4C 78 9B jmp XFERCU 009D30 1 ; 009D30 1 A9 01 DLESC: lda #$01 009D32 1 8D 4D 03 sta DLE 009D35 1 60 rts 009D36 1 ; 009D36 1 AE 59 03 RDEOL: ldx COL 009D39 1 20 6C 9C jsr READ1 009D3C 1 20 01 9C jsr RDCUR 009D3F 1 AE 59 03 ldx COL 009D42 1 60 rts 009D43 1 ; 009D43 1 CA CRT: dex 009D44 1 D0 0F bne CRT2 009D46 1 A9 73 lda #$73 009D48 1 D0 0D bne PL65 009D4A 1 A9 04 AIMD: lda #$04 009D4C 1 8D 01 AC sta $AC01 009D4F 1 A9 05 lda #$05 009D51 1 A2 EF ldx #$EF 009D53 1 D0 04 bne STDEST 009D55 1 A9 77 CRT2: lda #$77 009D57 1 A2 99 PL65: ldx #$99 009D59 1 8D 06 A4 STDEST: sta DILINK 009D5C 1 8E 07 A4 stx DILINK+1 009D5F 1 60 DONE2: rts 009D60 1 ; 009D60 1 AD 5B 03 DEELET: lda CURP2 009D63 1 C9 14 cmp #$14 009D65 1 90 02 bcc LTN20 009D67 1 A9 13 lda #$13 009D69 1 8D 15 A4 LTN20: sta CURPO2 009D6C 1 AD 5B 03 lda CURP2 009D6F 1 F0 0B beq DEL2 009D71 1 AD 65 03 lda COL2 009D74 1 CD 5E 03 cmp CMAX 009D77 1 F0 03 beq DEL2 009D79 1 CE 5B 03 dec CURP2 009D7C 1 A9 E8 DEL2: lda #$E8 009D7E 1 9D 05 01 sta $0105,x 009D81 1 CE 65 03 dec COL2 009D84 1 A9 04 lda #$04 009D86 1 9D 04 01 sta $0104,x 009D89 1 AD 5B 03 lda CURP2 009D8C 1 9D 03 01 sta $0103,x 009D8F 1 20 85 9A BSPACE: jsr CURBCK 009D92 1 A9 20 WRITBL: lda #$20 009D94 1 4C A0 9C jmp WRITE 009D97 1 ; 009D97 1 AE 50 03 CHAR: ldx GRAPH 009D9A 1 F0 08 beq NOGRPH 009D9C 1 AD 56 03 lda ASAV 009D9F 1 09 80 ora #$80 009DA1 1 8D 56 03 sta ASAV 009DA4 1 AE 57 03 NOGRPH: ldx AIM65 009DA7 1 F0 68 beq STCH00 009DA9 1 20 01 9C jsr RDCUR 009DAC 1 BA tsx 009DAD 1 BD 08 01 ONOFF: lda $0108,x 009DB0 1 C9 EC cmp #$EC 009DB2 1 D0 0F bne TAPECK 009DB4 1 BD 07 01 lda $0107,x 009DB7 1 C9 CF cmp #$CF 009DB9 1 D0 08 bne TAPECK 009DBB 1 EE 15 A4 inc CURPO2 009DBE 1 CE 5F 03 dec PRFLG 009DC1 1 10 6A bpl NOINS 009DC3 1 AD 12 A4 TAPECK: lda $A412 009DC6 1 C9 54 cmp #$54 009DC8 1 D0 03 bne DELCK 009DCA 1 4C 56 9E jmp SCR0 009DCD 1 ; 009DCD 1 BD 05 01 DELCK: lda $0105,x 009DD0 1 BC 04 01 ldy $0104,x 009DD3 1 C9 E7 cmp #$E7 009DD5 1 D0 1D bne STORE2 009DD7 1 C0 F2 cpy #CRFLG 009DD9 1 F0 85 beq DEELET 009DDB 1 C0 B7 CKMSQ: cpy #$B7 009DDD 1 D0 15 bne STORE2 009DDF 1 AC 61 03 ldy YYY 009DE2 1 C0 72 cpy #$72 009DE4 1 F0 09 beq EMSQ 009DE6 1 C0 3B cpy #$3B 009DE8 1 D0 6C bne SCR0 009DEA 1 A0 03 ldy #$03 009DEC 1 8C 5F 03 sty PRFLG 009DEF 1 20 A2 9B EMSQ: jsr CARTN 009DF2 1 D0 62 bne SCR0 009DF4 1 AD 56 03 STORE2: lda ASAV 009DF7 1 AC 15 A4 ldy CURPO2 009DFA 1 C8 iny 009DFB 1 C0 14 cpy #$14 009DFD 1 90 02 bcc LT20 009DFF 1 A0 13 ldy #$13 009E01 1 8C 15 A4 LT20: sty CURPO2 009E04 1 AC 5B 03 ldy CURP2 009E07 1 C0 3B cpy #$3B 009E09 1 B0 06 bcs STCH00 009E0B 1 99 38 A4 sta DIBUFF,y 009E0E 1 EE 5B 03 inc CURP2 009E11 1 ; 009E11 1 20 01 9C STCH00: jsr RDCUR 009E14 1 AE 4E 03 ldx INCH 009E17 1 F0 14 beq NOINS 009E19 1 20 36 9D jsr RDEOL 009E1C 1 AD 56 03 lda ASAV 009E1F 1 20 A0 9C jsr WRITE 009E22 1 CE 4A 03 dec COLMAX 009E25 1 20 82 9C jsr WRIT2 009E28 1 EE 4A 03 inc COLMAX 009E2B 1 D0 2F bne SCR2 009E2D 1 AE 57 03 NOINS: ldx AIM65 009E30 1 F0 24 beq SCR0 009E32 1 AE 5B 03 ldx CURP2 009E35 1 EC 5E 03 cpx CMAX 009E38 1 D0 1C bne SCR0 009E3A 1 A2 3A ldx #$3A 009E3C 1 8E 61 03 stx YYY 009E3F 1 8E 5B 03 stx CURP2 009E42 1 A2 12 ldx #$12 009E44 1 8E 16 A4 stx CURPOS 009E47 1 AE 65 03 ldx COL2 009E4A 1 E8 inx 009E4B 1 EC 5E 03 cpx CMAX 009E4E 1 F0 06 beq SCR0 009E50 1 CE 65 03 dec COL2 009E53 1 20 85 9A jsr CURBCK 009E56 1 AD 56 03 SCR0: lda ASAV 009E59 1 20 A0 9C jsr WRITE 009E5C 1 ; 009E5C 1 20 B2 9A SCR2: jsr CURFW2 009E5F 1 90 06 bcc NOTSCR 009E61 1 20 D7 9A jsr INCUR 009E64 1 4C CE 9B jmp SCROLL 009E67 1 60 NOTSCR: rts 009E68 1 ; 009E68 1 6C DB 00 INDIR: jmp (BSTART) 009E6B 1 ; 009E6B 1 B0 08 ENTRY: bcs ASOUT 009E6D 1 A2 00 ldx #$00 009E6F 1 86 F5 stx SMFLG 009E71 1 E8 inx 009E72 1 86 F7 stx COMCR 009E74 1 60 rts 009E75 1 ; 009E75 1 D8 ASOUT: cld 009E76 1 86 F4 stx SAVX 009E78 1 A2 28 ldx #$28 009E7A 1 86 F6 stx COMCOL 009E7C 1 68 pla 009E7D 1 85 F3 sta SAVA 009E7F 1 C9 20 cmp #$20 009E81 1 90 04 bcc NO 009E83 1 C9 5E cmp #$5E 009E85 1 90 0B bcc N1 009E87 1 A2 01 NO: ldx #$01 009E89 1 86 F2 stx CRFLG 009E8B 1 A6 F5 ldx SMFLG 009E8D 1 10 02 bpl SKIP 009E8F 1 06 F5 asl SMFLG 009E91 1 60 SKIP: rts 009E92 1 ; 009E92 1 A6 F5 N1: ldx SMFLG 009E94 1 10 03 bpl N1A 009E96 1 4C 28 9F jmp NEXT 009E99 1 C9 3D N1A: cmp #$3D 009E9B 1 D0 1B bne N6 009E9D 1 A6 F2 ldx CRFLG 009E9F 1 F0 0B beq N2 009EA1 1 20 3B 9F jsr CRLF 009EA4 1 86 F7 stx COMCR 009EA6 1 E8 inx 009EA7 1 86 F1 stx EQFLG 009EA9 1 4C 38 9F jmp R1 009EAC 1 A6 F1 N2: ldx EQFLG 009EAE 1 D0 03 bne N3 009EB0 1 4C 28 9F CRSP: jmp NEXT 009EB3 1 46 F1 N3: lsr EQFLG 009EB5 1 4C 38 9F jmp R1 009EB8 1 A6 F2 N6: ldx CRFLG 009EBA 1 F0 57 beq N10 009EBC 1 C9 3B cmp #$3B 009EBE 1 D0 36 bne N8 009EC0 1 A5 29 lda $29 009EC2 1 D0 0B bne NOTZ 009EC4 1 20 3B 9F jsr CRLF 009EC7 1 A9 80 lda #$80 009EC9 1 85 F5 sta SMFLG 009ECB 1 85 F7 sta COMCR 009ECD 1 D0 53 bne SEMI 009ECF 1 46 F2 NOTZ: lsr CRFLG 009ED1 1 A2 01 ldx #$01 009ED3 1 86 F5 stx SMFLG 009ED5 1 D0 61 bne R1 009ED7 1 A6 F0 NC: ldx COLUMN 009ED9 1 E0 22 cpx #$22 009EDB 1 90 05 bcc SP1 009EDD 1 8A txa 009EDE 1 69 02 adc #$02 009EE0 1 85 F6 sta COMCOL 009EE2 1 A6 F0 SP1: ldx COLUMN 009EE4 1 E4 F6 cpx COMCOL 009EE6 1 F0 06 beq N7 009EE8 1 20 26 9F jsr SPACE 009EEB 1 4C E2 9E jmp SP1 009EEE 1 A9 3B N7: lda #$3B 009EF0 1 20 28 9F jsr NEXT 009EF3 1 4C 0B 9F jmp NN 009EF6 1 A6 F0 N8: ldx COLUMN 009EF8 1 E0 0C cpx #$0C 009EFA 1 B0 14 bcs N9 009EFC 1 A5 F7 lda COMCR 009EFE 1 C9 80 cmp #$80 009F00 1 D0 04 bne SKCR 009F02 1 06 F7 asl COMCR 009F04 1 F0 0A beq N9 009F06 1 46 F2 SKCR: lsr CRFLG 009F08 1 20 57 9F jsr COUNT 009F0B 1 A5 F3 NN: lda SAVA 009F0D 1 4C 28 9F jmp NEXT 009F10 1 20 4A 9F N9: jsr RESET 009F13 1 A5 F3 N10: lda SAVA 009F15 1 A6 F5 ldx SMFLG 009F17 1 F0 0F beq NEXT 009F19 1 46 F5 lsr SMFLG 009F1B 1 C9 2E cmp #$2E 009F1D 1 D0 B8 bne NC 009F1F 1 20 4A 9F jsr RESET 009F22 1 A9 3B SEMI: lda #$3B 009F24 1 D0 02 bne NEXT 009F26 1 A9 20 SPACE: lda #$20 009F28 1 A6 F0 NEXT: ldx COLUMN 009F2A 1 E0 47 cpx #$47 009F2C 1 B0 08 bcs IN1 009F2E 1 20 77 99 jsr OUTD 009F31 1 48 pha 009F32 1 20 77 9F jsr INDR2 009F35 1 68 pla 009F36 1 E6 F0 IN1: inc COLUMN 009F38 1 A6 F4 R1: ldx SAVX 009F3A 1 60 rts 009F3B 1 ; 009F3B 1 A9 0D CRLF: lda #$0D 009F3D 1 20 77 99 jsr OUTD 009F40 1 20 77 9F jsr INDR2 009F43 1 A2 00 ldx #$00 009F45 1 86 F0 stx COLUMN 009F47 1 86 F2 stx CRFLG 009F49 1 60 rts 009F4A 1 ; 009F4A 1 20 3B 9F RESET: jsr CRLF 009F4D 1 A5 33 lda $33 009F4F 1 20 61 9F jsr NUMA 009F52 1 A5 32 lda $32 009F54 1 20 61 9F jsr NUMA 009F57 1 20 26 9F COUNT: jsr SPACE 009F5A 1 A6 F0 ldx COLUMN 009F5C 1 E0 0C cpx #$0C 009F5E 1 D0 F7 bne COUNT 009F60 1 60 rts 009F61 1 ; 009F61 1 48 NUMA: pha 009F62 1 4A lsr a 009F63 1 4A lsr a 009F64 1 4A lsr a 009F65 1 4A lsr a 009F66 1 20 6C 9F jsr NOUT 009F69 1 68 pla 009F6A 1 29 0F and #$0F 009F6C 1 18 NOUT: clc 009F6D 1 69 30 adc #$30 009F6F 1 C9 3A cmp #$3A 009F71 1 90 02 bcc LT10 009F73 1 69 06 adc #$06 009F75 1 D0 B1 LT10: bne NEXT 009F77 1 6C 5C 03 INDR2: jmp (ECHO) 009F7A 1 ; 009F7A 1 6C 50 59 59 T25806: .byte $6C,$50,$59,$59,$1F,$02,$19,$1C 009F7E 1 1F 02 19 1C 009F82 1 50 19 07 D0 .byte $50,$19,$07,$D0 009F86 1 009F86 1 6C 48 55 59 T22725: .byte $6C,$48,$55,$59,$1A,$02,$16,$18 009F8A 1 1A 02 16 18 009F8E 1 48 16 06 30 .byte $48,$16,$06,$30 009F92 1 ; 009F92 1 36 28 2D 55 T16405: .byte $36,$28,$2D,$55,$1A,$02,$10,$15 009F96 1 1A 02 10 15 009F9A 1 28 10 02 80 .byte $28,$10,$02,$80 009F9E 1 36 28 2C 55 T25406: .byte $36,$28,$2C,$55,$1F,$02,$19,$1C 009FA2 1 1F 02 19 1C 009FA6 1 28 19 03 E8 .byte $28,$19,$03,$E8 009FAA 1 ; 009FAA 1 7A 9F 86 9F SIZE: .word T25806,T22725,T25406,T16405 009FAE 1 9E 9F 92 9F 009FB2 1 30 09 00 0A MID8: .byte $30,$09,$00,$0A,$90,$00,$90,$00 009FB6 1 90 00 90 00 009FBA 1 09 9A 3B 03 IVALS: .byte $09,$9A,$3B,$03 009FBE 1 ; 009FBE 1 5F 9D 54 9A JTBL: .word DONE2,CLINE,CLREOL,CLRHOM,CLREND 009FC2 1 38 9B 6E 9A 009FC6 1 71 9A 009FC8 1 6E 9A 71 9A .word CLRHOM,CLREND,DONE2,CURBCK,CURFWD 009FCC 1 5F 9D 85 9A 009FD0 1 AC 9A 009FD2 1 49 9B 63 9B .word CURDWN,CURUP,DONE2,CARTN,HOMECU 009FD6 1 5F 9D A2 9B 009FDA 1 5A 9A 009FDC 1 5A 9A 30 9D .word HOMECU,DLESC,DONE2,DONE2,INSTOQ,DELCHR 009FE0 1 5F 9D 5F 9D 009FE4 1 D7 9C E6 9C 009FE8 1 DF 9A 2D 9A .word INSLIN,DELINE,DCURS,BLKCUR,AIMD 009FEC 1 CC 9C D0 9C 009FF0 1 4A 9D 009FF2 1 5F 9D E0 9C .word DONE2,ESC,B32CUR,GRPHOF,STEST 009FF6 1 C8 9C C1 9C 009FFA 1 0A 9A 009FFC 1 F0 9B BLAST: .word VIDEO 009FFE 1 ; 009FFE 1 42 4F .byte $42,$4F 009FFF 1