franklin/u2_disasm.s

1605 lines
31 KiB
ArmAsm
Raw Normal View History

2021-11-06 00:44:04 +00:00
; da65 V2.19 - Git 59c58acbe
; Created: 2021-11-02 17:43:56
; Input file: Franklin_Ace2000_ROM_U2_P2_Rev6.bin
; Page: 1
.setcpu "65C02"
2021-11-06 01:21:23 +00:00
.include "opcodes.inc"
2021-11-06 00:44:04 +00:00
WNDLFT := $20
WNDWDTH := $21
WNDTOP := $22
WNDBTM := $23
CH := $24
CV := $25
BASL := $28
BASH := $29
BAS2L := $2A
BAS2H := $2B
2021-11-06 01:21:23 +00:00
INVFLG := $32
A1L := $3C
A1H := $3D
A2L := $3E
A2H := $3F
A4L := $42
A4H := $43
RNDL := $4E
RNDH := $4F
SAVEA := $4F8
SAVEX := $578
SAVEY := $478
2021-11-06 00:44:04 +00:00
OLDCH := $47B
MODE := $4FB
OURCH := $57B
OURCV := $5FB
CHAR := $67B ; Unused
XCOORD := $6FB
TEMP1 := $77B ; Unused
OLDBASL := $77B
TEMP2 := $7FB
OLDBASH := $7FB
KBD := $C000
CLR80COL:= $C000
SET80COL:= $C001
RDMAINRAM := $C002
RDCARDRAM := $C003
WRMAINRAM := $C004
WRCARDRAM := $C005
ALTZPOFF:= $C008
ALTZPON := $C009
CLR80VID:= $C00C
SET80VID:= $C00D
CLRALTCHAR := $C00E
SETALTCHAR := $C00F
KBDSTRB := $C010
RDLCBNK2:= $C011
RDLCRAM := $C012
RDRAMRD := $C013
RDRAMWRT:= $C014
RD80COL := $C018
RDTEXT := $C01A
ALTCHARSET := $C01E
RD80VID := $C01F
TXTPAGE1:= $C054
TXTPAGE2:= $C055
ROMIN := $C081
ROMIN2 := $C082
LCBANK2 := $C083
LCBANK1 := $C08B
BELLB := $FBE2
SETWND := $FB4B
SETKBD := $FE89
SETVID := $FE93
MON_VTAB:= $FC22
CLREOP := $FC42
HOME := $FC58
CLREOL := $FC9C
AUXMOVE := $C311
XFER := $C314
;;; ============================================================
.org $C300
2021-11-06 01:21:23 +00:00
;; Init
2021-11-06 00:44:04 +00:00
LC300: bit SETV ; V = init
bra LC33A
2021-11-06 01:21:23 +00:00
;; Input
2021-11-06 00:44:04 +00:00
LC305: sec
2021-11-06 01:21:23 +00:00
.byte OPC_BCC ; never taken; skip next byte
;; Output
;; C3COut1
LC307: clc
2021-11-06 00:44:04 +00:00
clv
bra LC33A
;; Signature bytes
.byte $01, $88
;; Pascal 1.1 Firmware Protocol Table
.byte <JPINIT
.byte <JPREAD
.byte <JPWRITE
.byte <JPSTAT
;; AUXMOVE
.assert * = AUXMOVE, error, "Entry point mismatch"
jmp LC334
;; XFER
.assert * = XFER, error, "Entry point mismatch"
php
bit LCFFF
plp
jmp LCC98
2021-11-06 01:21:23 +00:00
;;; ============================================================
;;; Pascal Entry Points
2021-11-06 00:44:04 +00:00
JPINIT: bit LCFFF
jmp LCB44
JPREAD: bit LCFFF
jmp LCB52
JPWRITE:bit LCFFF
jmp LCB5D
JPSTAT: bit LCFFF
jmp LCB81
LC334: bit LCFFF
jmp LCCC3
2021-11-06 01:21:23 +00:00
;;; ============================================================
;;; Main Entry Points
2021-11-06 00:44:04 +00:00
LC33A: sta LCFFF
2021-11-06 01:21:23 +00:00
sta SAVEA
stx SAVEX
sty SAVEY
2021-11-06 00:44:04 +00:00
pha
bvc LC35B
lda #<LC305
sta $38
ldx #>LC305
stx $39
lda #$07
sta $36
stx $37
jsr LC800
clc
LC35B: php
bit RD80VID
bpl LC36D
lsr WNDWDTH
asl WNDWDTH
sta SET80COL
lda OURCH
sta CH
LC36D: plp
pla
bcs LC376
jsr LC8B1
bra LC3B7
2021-11-06 01:21:23 +00:00
LC376: ldx SAVEX
2021-11-06 00:44:04 +00:00
beq LC38B
dex
lda $0678
cmp #$88 ; left?
beq LC38B
cmp $0200,x
bne LC3AF
sta $0200,x
LC38B: jsr LC877
cmp #$9B ; escape?
beq LC3C6
cmp #$8D ; return?
bne LC39B
pha
jsr DoClearEOL
pla
LC39B: cmp #$95 ; right?
bne LC3AA
jsr LCEBE
ora #$80
cmp #$A0 ; non-control char
bcs LC3AA
ora #$40
LC3AA: sta $0678
bra LC3B5
LC3AF: jsr LC850
stz $0678
LC3B5: bra LC3BA
2021-11-06 01:21:23 +00:00
LC3B7: lda SAVEA
LC3BA: ldx SAVEX
2021-11-06 00:44:04 +00:00
ldy CH
sty OURCH
2021-11-06 01:21:23 +00:00
ldy SAVEY
2021-11-06 00:44:04 +00:00
SETV: rts ; has V flag set
LC3C6: lda #$80
2021-11-06 01:21:23 +00:00
tsb MODE ; set high bit
2021-11-06 00:44:04 +00:00
jsr LC850
jsr LC933
cmp #$98 ; ctrl-x (clear)
beq LC3AA
2021-11-06 01:21:23 +00:00
lda MODE
2021-11-06 00:44:04 +00:00
bmi LC3C6 ; test high bit
bra LC38B
bit LCFFF
jmp LCEE7
2021-11-06 01:21:23 +00:00
2021-11-06 00:44:04 +00:00
brk
brk
brk
brk
brk
brk
bit LCFFF
jmp LCE18
bit LCFFF
jmp LCDF7
bit LCFFF
jmp LCD09
bit LCFFF
jmp LCD35
2021-11-06 01:21:23 +00:00
;;; ==================================================
.assert * = $C400, error, "Mismatch"
.scope
LF813 := $F813 ; Not an Apple II entry point
LF981 := $F981 ; Not an Apple II entry point
LFA37 := $FA37 ; Not an Apple II entry point
LFA52 := $FA52 ; Not an Apple II entry point
LFC45 := $FC45 ; Not an Apple II entry point
LFEEB := $FEEB ; Not an Apple II entry point
2021-11-06 00:44:04 +00:00
ldx #$00
eor #$20
beq LC419
and #$9F
beq LC41B
asl a
eor #$12
beq LC41A
and #$1A
eor #$02
beq LC41B
and #$10
bne LC41A
LC419: inx
LC41A: inx
LC41B: stx $2F
jmp LF813
lda KBD
eor #$93
bne LC439
lda KBDSTRB
LC42A: jsr LFA37
lda KBD
bpl LC42A
eor #$83
beq LC439
sta KBDSTRB
LC439: jmp LF813
lda $2E
eor #$FF
and ($26),y
sta ($26),y
lda $2E
and $30
ora ($26),y
sta ($26),y
jmp LF813
LC44F: ldx #$3C
jsr LFC45
beq LC463
jsr LC469
jsr LFA52
ldx #$42
jsr LFA52
bra LC44F
LC463: jsr LC469
jmp LF813
LC469: lda ($00,x)
sta ($06,x)
rts
and #$0F
asl a
tax
lda LC47E,x
pha
2021-11-06 01:21:23 +00:00
lda LC47E+1,x
2021-11-06 00:44:04 +00:00
tax
pla
jmp LF813
2021-11-06 01:21:23 +00:00
;; Jump Table (target address-1)
2021-11-06 00:44:04 +00:00
LC47E: .byte $F0
2021-11-06 01:21:23 +00:00
sbc $C100,x
2021-11-06 00:44:04 +00:00
brk
.byte $C2
brk
.byte $C3
brk
cpy $00
cmp $00
dec $00
smb4 $1B
sbc a:$A9,x
2021-11-06 01:21:23 +00:00
stz A2L
stz A2H
2021-11-06 00:44:04 +00:00
stz $2C
2021-11-06 01:21:23 +00:00
LC498: ora A2L
sta A2L
2021-11-06 00:44:04 +00:00
lda $0200,y
iny
jsr LFEEB
bmi LC4B2
dec $2C
ldx #$04
2021-11-06 01:21:23 +00:00
LC4A9: asl A2L
LC4AB: rol A2H
2021-11-06 00:44:04 +00:00
dex
bne LC4A9
bra LC498
LC4B2: jmp LF813
lsr a
phx
php
ldx #$26
jsr LF981
plp
php
lda #$00
adc #$00
tax
lda LC4CE,x
sta $2E
plp
plx
LC4CB: jmp LF813
2021-11-06 01:21:23 +00:00
;; Data table
2021-11-06 00:44:04 +00:00
LC4CE: bbr0 $F0,LC4AB
and #$0F
tax
2021-11-06 01:21:23 +00:00
lda $C4DD,x
2021-11-06 00:44:04 +00:00
sta $30
plx
jmp LF813
2021-11-06 01:21:23 +00:00
brk
2021-11-06 00:44:04 +00:00
ora ($22),y
.byte $33
.byte $44
eor $66,x
rmb7 $88
sta $BBAA,y
cpy $EEDD
.byte $FF
tya
2021-11-06 01:21:23 +00:00
ldy $C4FD,x
2021-11-06 00:44:04 +00:00
beq * + (8)
cmp $C000,y
inx
2021-11-06 01:21:23 +00:00
bra $C4EE
2021-11-06 00:44:04 +00:00
tay
jmp LF813
eor ($54)
lsr $00,x
lsr $50,x
.byte $53
brk
.byte $9B
trb $88FA
ora #$FA
tya
adc ($FD,x)
sta $21,x
plx
sta $FA16
brk
sta $FC3A
txa
adc $FC
smb0 $E1
.byte $FB
dey
.byte $42
plx
brk
eor #$F5
.byte $FC
lsr a
.byte $5B
plx
.byte $4B
sbc $FB,x
eor $FCBC
brk
sta $FEBE
ldy #$C9
inc $AAAE,x
sbc $47BA,x
sbc $12BC,x
inc $80C7,x
sed
dec $FE8C
.byte $82
bbs7 $DF,LC4CB
.byte $02
cpx #$99
smb7 $03
bcc $C574
sbc a:$00,x
2021-11-06 01:21:23 +00:00
.endscope
2021-11-06 00:44:04 +00:00
;;; ============================================================
.res $C800 - *, 0
;;; ============================================================
LC800: lda #$30 ; set to normal state (%00110000)
2021-11-06 01:21:23 +00:00
sta MODE
2021-11-06 00:44:04 +00:00
jsr LCBBD
jsr LCE3C
jmp DoHomeAndClear
LC80E: ldy #$00
ldx #$00
LC812: cpy WNDWDTH
bcs LC820
jsr LCEC0
sta $0200,x
inx
iny
bra LC812
LC820: dey
sty CH
2021-11-06 01:21:23 +00:00
stx SAVEX
2021-11-06 00:44:04 +00:00
lda #$8D
2021-11-06 01:21:23 +00:00
rts1: rts
2021-11-06 00:44:04 +00:00
Do40Col:
bit RD80VID
php
jsr LCBB6
jsr LCADA
jsr LCE3C
plp
2021-11-06 01:21:23 +00:00
bpl rts1
2021-11-06 00:44:04 +00:00
jmp LCC4E
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
2021-11-06 01:21:23 +00:00
2021-11-06 00:44:04 +00:00
jsr LCB95
LC850: jsr LCBC7
2021-11-06 01:21:23 +00:00
LC853: inc RNDL
bne :+
inc RNDH
:
jsr LCD09
2021-11-06 00:44:04 +00:00
bcc LC853
jsr LCD35
cmp #$06
bcc LC86E
and #$7F
sta CHAR
ora #$80
bra LC871
LC86E: sta CHAR
LC871: pha
jsr LCBDE
pla
2021-11-06 01:21:23 +00:00
rts2: rts
2021-11-06 00:44:04 +00:00
LC877: jsr LC850
cmp #$00
beq LC89F
cmp #$02
beq LC80E
cmp #$05
2021-11-06 01:21:23 +00:00
bne rts2
2021-11-06 00:44:04 +00:00
ldy CH
LC888: iny
cpy WNDWDTH
beq LC897
jsr LCEC0
dey
jsr LCECB
iny
bra LC888
LC897: dey
LC898: lda #$A0
jsr LCECB
bra LC877
LC89F: ldy WNDWDTH
dey
LC8A2: cpy CH
beq LC898
dey
jsr LCEC0
iny
jsr LCECB
dey
bra LC8A2
LC8B1: sta CHAR
LC8B4: jsr LC992
2021-11-06 01:21:23 +00:00
lda MODE
2021-11-06 00:44:04 +00:00
and #$03 ; test low 3 bits
beq LC8C1
jmp LCA11
LC8C1: lda CHAR
and #$7F
cmp #$20
bcc LC8F7
ldy CH
cpy WNDWDTH
bcc LC8D3
jsr DoReturn
LC8D3: lda CHAR ; char to be printed
2021-11-06 01:21:23 +00:00
bit INVFLG
2021-11-06 00:44:04 +00:00
bmi LC8F0
and #$7F
2021-11-06 01:21:23 +00:00
bit MODE
2021-11-06 00:44:04 +00:00
bvs LC8F0 ; test bit 6 (MouseText active)
bit ALTCHARSET
bpl LC8F0
cmp #$40
bcc LC8F0
cmp #$60
bcs LC8F0
and #$1F
LC8F0: jsr LCBF9
jmp DoForwardSpace
DoNothing:
rts
;;; ============================================================
;; Input is char, < $20
LC8F7: sec
sbc #$07
bcc DoNothing
asl a
tax
2021-11-06 01:21:23 +00:00
jmp (jt1,x)
2021-11-06 00:44:04 +00:00
2021-11-06 01:21:23 +00:00
jt1:
2021-11-06 00:44:04 +00:00
.addr DoBell ; $07 Ctrl-G Bell
2021-11-06 01:21:23 +00:00
.addr DoBackspace ; $08 Ctrl-H Backspace
.addr DoNothing ; $09 Ctrl-I
2021-11-06 00:44:04 +00:00
.addr DoLineFeed ; $0A Ctrl-J Line feed
.addr DoClearEOS ; $0B Ctrl-K Clear EOS
.addr DoHomeAndClear ; $0C Ctrl-L Home and clear
.addr DoReturn ; $0D Ctrl-M Return
.addr DoNormal ; $0E Ctrl-N Normal
.addr DoInverse ; $0F Ctrl-O Inverse
2021-11-06 01:21:23 +00:00
.addr DoNothing ; $10 Ctrl-P
2021-11-06 00:44:04 +00:00
.addr Do40Col ; $11 Ctrl-Q 40-column
.addr Do80Col ; $12 Ctrl-R 80-column
2021-11-06 01:21:23 +00:00
.addr DoNothing ; $13 Ctrl-S
.addr DoNothing ; $14 Ctrl-T
2021-11-06 00:44:04 +00:00
.addr DoQuit ; $15 Ctrl-U Quit
.addr DoScroll ; $16 Ctrl-V Scroll
.addr DoScrollUp ; $17 Ctrl-W Scroll-up
.addr DoDisableMouseText ; $18 Ctrl-X Disable MouseText
.addr DoHome ; $19 Ctrl-Y Home
.addr DoClearLine ; $1A Ctrl-Z Clear line
.addr DoEnableMouseText ; $1B Ctrl-[ Enable MouseText
.addr DoForwardSpace ; $1C Ctrl-\ Forward space
.addr DoClearEOL ; $1D Ctrl-] Clear EOL
.addr LC9F8 ; $1E Ctrl-^ ???
.addr DoUp ; $1F Ctrl-_ Up
;;; ============================================================
LC933: pha
lda #$80
2021-11-06 01:21:23 +00:00
trb MODE ; clear high bit
2021-11-06 00:44:04 +00:00
pla
and #$7F
cmp #'a'
bcc LC946
cmp #'z'+1
bcs LC946
and #$DF ; convert to uppercase
;; Scan table for match
LC946: ldx #$00
2021-11-06 01:21:23 +00:00
LC948: ldy code_table,x
2021-11-06 00:44:04 +00:00
beq DoNothing
2021-11-06 01:21:23 +00:00
cmp code_table,x
2021-11-06 00:44:04 +00:00
beq LC955
inx
bra LC948
LC955: txa
asl a
tax
2021-11-06 01:21:23 +00:00
jmp (jt2,x)
2021-11-06 00:44:04 +00:00
;; Character match table
2021-11-06 01:21:23 +00:00
code_table:
2021-11-06 00:44:04 +00:00
.byte '@'
.byte 'A'
.byte 'B'
.byte 'C'
.byte 'D'
.byte 'E'
.byte 'F'
.byte 'I'
.byte 'J'
.byte 'K'
.byte 'M'
.byte $0b ; up
.byte $0a ; down
.byte $08 ; left
.byte $15 ; right
.byte '4' ; 40 col
.byte '8' ; 80 col
.byte $11 ; Ctrl+Q
.byte $00 ; sentinel
;; Jump table
2021-11-06 01:21:23 +00:00
jt2:
.addr DoHomeAndClear ; '@'
2021-11-06 00:44:04 +00:00
.addr DoForwardSpace ; 'A'
.addr DoBackspace ; 'B'
.addr DoLineFeed ; 'C'
.addr DoUp ; 'D'
.addr DoClearEOL ; 'E'
.addr DoClearEOS ; 'F'
.addr LC9AD ; 'I'
.addr LC9BC ; 'J'
.addr LC9B7 ; 'K'
.addr LC9B2 ; 'M'
.addr LC9AD ; up
.addr LC9B2 ; down
.addr LC9BC ; left
.addr LC9B7 ; right
.addr Do40Col ; 40 col
.addr Do80Col ; 80 col
.addr DoQuit ; Ctrl+Q
;;; ============================================================
LC992: lda KBD
cmp #$93 ; Ctrl-S
2021-11-06 01:21:23 +00:00
bne rts3
2021-11-06 00:44:04 +00:00
bit KBDSTRB
2021-11-06 01:21:23 +00:00
: lda KBD
bpl :-
2021-11-06 00:44:04 +00:00
cmp #$83 ; Ctrl-C
2021-11-06 01:21:23 +00:00
beq rts3
2021-11-06 00:44:04 +00:00
bit KBDSTRB
2021-11-06 01:21:23 +00:00
rts3: rts
2021-11-06 00:44:04 +00:00
nop
jmp LCB60
LC9AD: jsr DoUp
bra LC9BF
LC9B2: jsr DoLineFeed
bra LC9BF
LC9B7: jsr DoForwardSpace
bra LC9BF
LC9BC: jsr DoBackspace
LC9BF: lda #$80 ; set mode bits %1xxxxxxx
jmp LCA0A
DoInverse:
ldy #$3F
bra LC9CA
DoNormal:
ldy #$FF
2021-11-06 01:21:23 +00:00
LC9CA: sty INVFLG
rts4: rts
2021-11-06 00:44:04 +00:00
Do80Col:
bit RD80VID
php
jsr LCBBD
jsr LCADA
jsr LCE3C
plp
2021-11-06 01:21:23 +00:00
bmi rts4
2021-11-06 00:44:04 +00:00
jmp LCBFE
DoQuit:
jsr Do40Col
jsr LCE51
jsr LCE4B
lda #$17
ldx #$00
jsr LCA80
lda #$FF
sta MODE ; set all mode bits (???)
lda #$98
rts
LC9F8: lda #$FC ; clear mode bits %xxxxxx00
jsr LCA03
lda #$32 ; set mode bits %xx11xx1x
bra LCA0A
DoDisableMouseText:
lda #$40 ; clear mode bits %0x00000
LCA03: and MODE
bra LCA0D
DoEnableMouseText:
lda #$40 ; set mode bits %x1xxxxxx - enable MT mode
LCA0A: ora MODE
LCA0D: sta MODE
rts
LCA11: lda CHAR ; character to read/print
sec
sbc #$20
and #$7F
pha
2021-11-06 01:21:23 +00:00
dec MODE ; clear low bit???
2021-11-06 00:44:04 +00:00
lda MODE
2021-11-06 01:21:23 +00:00
and #$03 ; test low 2 bits
2021-11-06 00:44:04 +00:00
bne LCA36
pla
cmp #$18 ; +$20 is $38 = '8' ???
bcs LCA2C
jsr LCA82
LCA2C: lda $05F8
cmp WNDWDTH
bcs LCA35
sta CH
LCA35: rts
LCA36: pla
sta $05F8
rts
DoForwardSpace:
inc CH
lda CH
cmp WNDWDTH
bcs DoReturn
rts
DoBackspace:
lda CH
beq LCA4B
dec CH
LCA4A: rts
LCA4B: lda CV
beq LCA4A
lda WNDWDTH
dec a
sta CH
DoUp:
lda CV
beq LCA4A
dec CV
bra LCA84
DoReturn:
stz CH
DoLineFeed:
lda CV
cmp #$17 ; 23
bcs DoScrollUp
inc CV
bra LCA84
DoHome:
lda WNDTOP
ldx #$00
bra LCA80
DoClearLine:
lda CH
pha
stz CH
jsr DoClearEOL
pla
sta CH
rts
LCA7A: lda $06F8
ldx $0778
LCA80: stx CH
LCA82: sta CV
LCA84: jmp LCE57
DoScrollUp:
lda CH
pha
jsr DoHome
LCA8D: ldy BASH
sty BAS2H
ldy BASL
sty BAS2L
lda WNDBTM
beq LCACF
dec a
cmp CV
beq LCACF
bcc LCACF
inc CV
jsr LCA84
ldy WNDWDTH
dey
bit RD80VID
bmi LCAB6
LCAAD: lda (BASL),y
sta (BAS2L),y
dey
bpl LCAAD
bra LCA8D
LCAB6: tya
lsr a
tay
LCAB9: bit TXTPAGE1
lda (BASL),y
sta (BAS2L),y
bit TXTPAGE2
lda (BASL),y
sta (BAS2L),y
dey
bpl LCAB9
bit TXTPAGE1
bra LCA8D
LCACF: stz CH
jsr DoClearEOL
plx
lda CV
jmp LCA80
LCADA: lda CV
sta $06F8
lda CH
sta $0778
rts
.macro LDXY addr
ldx #.hibyte(addr-1)
ldy #.lobyte(addr-1)
.endmacro
DoBell:
LDXY BELLB
jmp LCE6D
DoScroll:
jsr LCADA
lda WNDBTM
dec a
dec a
sta $05F8
LCAF6: lda $05F8
jsr LCA82
lda BASL
sta BAS2L
lda BASH
sta BAS2H
lda $05F8
inc a
jsr LCA82
ldy WNDWDTH
dey
LCB0E: phy
bit TXTPAGE1
bit RD80VID
bpl LCB1F
tya
lsr a
tay
bcs LCB1F
bit TXTPAGE2
LCB1F: lda (BAS2L),y
sta (BASL),y
ply
dey
bpl LCB0E
bit TXTPAGE1
lda $05F8
cmp WNDTOP
beq LCB36
dec $05F8
bra LCAF6
LCB36: lda #$00
jsr LCA82
jsr DoClearLine
bit TXTPAGE1
jmp LCA7A
LCB44: jsr LC800
LCB47: jsr LCBC7
LCB4A: ldx CH
stx OURCH
ldx #$00
rts
LCB52: jsr LCB95
jsr LC850
lda CHAR
bra LCB4A
LCB5D: sta CHAR
LCB60: jsr LCB95
jsr LCBDE
lda CHAR
ora #$80
sta CHAR
and #$7F
cmp #$15 ; right?
beq LCB4A
cmp #$0D ; return?
beq LCB7D
jsr LC8B4
bra LCB47
LCB7D: stz CH
bra LCB47
LCB81: cmp #$00
beq LCB8E
cmp #$01
bne LCB91
jsr LCD09
bra LCB4A
LCB8E: sec
bra LCB4A
LCB91: ldx #$03
clc
rts
LCB95: pha
lda OLDBASL
sta BASL
lda OLDBASH
sta BASH
stz WNDTOP
stz WNDLFT
lda #80
sta WNDWDTH
lda #24
sta WNDBTM
lda OURCH
sta CH
pla
rts
sta CLRALTCHAR
LCBB6: sta CLR80COL
sta CLR80VID
rts
LCBBD: sta SET80COL
sta SET80VID
sta SETALTCHAR
rts
LCBC7: lda MODE ; all mode bits set?
cmp #$FF
beq LCBEA
and #$80 ; test high bit
beq LCBEA
jsr LCEBE
sta OLDCH
and #$80
eor #$AB
bra LCBF9
2021-11-06 01:21:23 +00:00
LCBDE: lda MODE ; test high bit
2021-11-06 00:44:04 +00:00
and #$80
beq LCBEA
lda OLDCH
bra LCBF9
LCBEA: jsr LCEBE
eor #$80
cmp #$40
bcc LCBF9
cmp #$60
bcs LCBF9
and #$1F
LCBF9: ldy CH
jmp LCECB
LCBFE: php
sei
lda WNDTOP
sta $05F8
LCC05: lda $05F8
jsr LCA82
lda BASL
sta BAS2L
lda BASH
sta BAS2H
ldy #$00
LCC15: bit TXTPAGE1
lda (BAS2L)
bit TXTPAGE2
sta (BASL),y
bit TXTPAGE1
inc BAS2L
lda (BAS2L)
sta (BASL),y
iny
inc BAS2L
cpy #$14
bcc LCC15
lda #$A0
LCC31: bit TXTPAGE2
sta (BASL),y
bit TXTPAGE1
sta (BASL),y
iny
cpy #$28
bcc LCC31
inc $05F8
lda $05F8 ; vertical position
cmp #24
bcc LCC05
LCC4A: plp
jmp LCA7A
LCC4E: php
sei
sta SET80COL
lda WNDTOP
sta $05F8
LCC58: lda $05F8
jsr LCA82
ldy #$13
bit TXTPAGE1
LCC63: lda (BASL),y
pha
dey
bpl LCC63
ldy #$00
lda BASL
sta BAS2L
lda BASH
sta BAS2H
LCC73: bit TXTPAGE2
lda (BASL),y
bit TXTPAGE1
sta (BAS2L)
inc BAS2L
pla
sta (BAS2L)
inc BAS2L
iny
cpy #$14
bcc LCC73
inc $05F8 ; vertical position
lda $05F8
cmp #24
bcc LCC58
sta CLR80COL
bra LCC4A
LCC98: pha
lda $03ED
pha
lda $03EE
pha
sta RDMAINRAM
sta WRMAINRAM
bcc LCCAF
sta RDCARDRAM
sta WRCARDRAM
LCCAF: pla
sta $03EE
pla
sta $03ED
pla
sta ALTZPOFF
bvc LCCC0
sta ALTZPON
LCCC0: jmp ($03ED)
LCCC3: pha
bit RDRAMRD
php
bit RDRAMWRT
php
sta WRMAINRAM
sta RDCARDRAM
bcc LCCDA
sta RDMAINRAM
sta WRCARDRAM
2021-11-06 01:21:23 +00:00
LCCDA: lda (A1L)
sta (A4L)
inc A4L
2021-11-06 00:44:04 +00:00
bne LCCE4
2021-11-06 01:21:23 +00:00
inc A4H
LCCE4: lda A1L
cmp A2L
lda A1H
sbc A2H
inc A1L
2021-11-06 00:44:04 +00:00
bne LCCF2
2021-11-06 01:21:23 +00:00
inc A1H
2021-11-06 00:44:04 +00:00
LCCF2: bcc LCCDA
sta WRCARDRAM
plp
bmi LCCFD
sta WRMAINRAM
LCCFD: sta RDCARDRAM
plp
bmi LCD06
sta RDMAINRAM
LCD06: pla
sec
rts
LCD09: bit $0579
bmi LCD17
LCD0E: bit KBD
bmi LCD15
clc
rts
LCD15: sec
rts
LCD17: jsr LCDB3
beq LCD21
LCD1C: stz $0579
bra LCD0E
LCD21: phx
ldx $0479
jsr LCE1F
lda $0200,x
jsr LCE2E
plx
cmp #$00
beq LCD1C
bra LCD15
LCD35: bit $0579
bmi LCD90
lda KBD
bit KBDSTRB
bit $C027 ; ???
bpl LCD4C
LCD45: cmp #$06
bcc LCD4B
ora #$80
LCD4B: rts
LCD4C: and #$7F
cmp #$01
bne LCD56
lda #$1A
bra LCD45
LCD56: cmp #$03
bne LCD5E
lda #$0C
bra LCD45
LCD5E: cmp #$04
bne LCD66
lda #$19
bra LCD45
LCD66: cmp #$06
bne LCD6E
lda #$2C
bra LCD7E
LCD6E: cmp #$1F
bne LCD76
lda #$2D
bra LCD7E
LCD76: cmp #$20 ; space?
bcc LCD45
cmp #$2C ; comma?
bcs LCD45
LCD7E: pha
jsr LCDB3
beq LCD87
pla
bra LCD45
LCD87: lda #$FF
sta $0579
pla
jsr LCDC9
LCD90: jsr LCDB3
beq LCD9C
LCD95: stz $0579
lda #$A0
bra LCD45
LCD9C: phx
ldx $0479
jsr LCE1F
lda $0200,x
jsr LCE2E
plx
inc $0479
cmp #$00
beq LCD95
bra LCD45
LCDB3: jsr LCE1F
lda #$00
phx
tax
clc
LCDBB: adc $0200,x
inx
bne LCDBB
plx
jsr LCE2E
cmp $04F9
rts
LCDC9: phx
phy
jsr LCE1F
sec
sbc #$20
ldy #$00
tax
beq LCDE2
LCDD6: lda $0200,y
beq LCDDE
iny
bra LCDD6
LCDDE: iny
LCDDF: dex
bne LCDD6
LCDE2: jsr LCE2E
sty $0479
ply
plx
rts
;; bad disasm
eor ($55)
lsr a:$0D
jmp $5349
.byte $54
ora $FF00
LCDF7: sta WRCARDRAM
lda #$00
tax
LCDFD: sta $0200,x
inx
cpx #$0C
bcc LCDFD
LCE05: lda LCDDF,x
cmp #$FF
beq LCE12
sta $0200,x
inx
bra LCE05
LCE12: sta WRMAINRAM
stz $0579
LCE18: jsr LCDB3
sta $04F9
rts
LCE1F: pha
lda RDRAMRD
sta RDMAINRAM
sta $07F8
sta RDCARDRAM
pla
rts
LCE2E: pha
sta RDMAINRAM
lda $07F8
bpl LCE3A
sta RDCARDRAM
LCE3A: pla
rts
LCE3C: lda #$00
bit RDTEXT
bmi LCE45
lda #$14
LCE45: LDXY SETWND
bra LCE6D
LCE4B: LDXY SETKBD
bra LCE6D
LCE51: LDXY SETVID
bra LCE6D
LCE57: LDXY MON_VTAB
bra LCE6D
DoClearEOS:
LDXY CLREOP
bra LCE6D
DoHomeAndClear:
LDXY HOME
bra LCE6D
DoClearEOL:
LDXY CLREOL
;;; A = character, X,Y = ROM address-1 (return value to push to stack)
LCE6D: sta TEMP2
bit RDLCRAM
php
bit RDLCBNK2
php
lda #$CE
pha
lda #$86
pha
phx
phy
bit ROMIN2
lda TEMP2
rts
;;; ============================================================
plp
bpl LCE9D
plp
bpl LCE95
bit LCBANK2
bit LCBANK2
bra LCEAE
LCE95: bit ROMIN
bit ROMIN
bra LCEAE
LCE9D: plp
bpl LCEA8
bit LCBANK1
bit LCBANK1
bra LCEAE
LCEA8: bit $C089 ; ???
bit $C089 ; ???
LCEAE: lda BASL
sta OLDBASL
lda BASH
sta OLDBASH
lda CH
sta OURCH
rts
LCEBE: ldy CH
LCEC0: phy
jsr LCED5
lda (BASL),y
LCEC6: ply
bit TXTPAGE1
rts
LCECB: phy
pha
jsr LCED5
pla
sta (BASL),y
bra LCEC6
LCED5: bit RD80VID
bpl LCEDF
tya
lsr a
tay
bcc LCEE3
LCEDF: bit TXTPAGE1
rts
LCEE3: bit TXTPAGE2
rts
LCEE7: bit RD80COL
php
sta CLR80COL
bit RDRAMRD
php
bit RDRAMWRT
php
phx
plx
beq LCEFD
jmp LCF83
LCEFD: bcc LCF35
sta RDMAINRAM
sta WRCARDRAM
2021-11-06 01:21:23 +00:00
lda A4L
ldx A4H
2021-11-06 00:44:04 +00:00
sta ALTZPON
2021-11-06 01:21:23 +00:00
sta A4L
stx A4H
2021-11-06 00:44:04 +00:00
sta ALTZPOFF
2021-11-06 01:21:23 +00:00
LCF13: lda (A1L)
2021-11-06 00:44:04 +00:00
sta ALTZPON
2021-11-06 01:21:23 +00:00
sta (A4L)
inc A4L
2021-11-06 00:44:04 +00:00
bne LCF20
2021-11-06 01:21:23 +00:00
inc A4H
2021-11-06 00:44:04 +00:00
LCF20: sta ALTZPOFF
2021-11-06 01:21:23 +00:00
lda A1L
cmp A2L
lda A1H
sbc A2H
inc A1L
2021-11-06 00:44:04 +00:00
bne LCF31
2021-11-06 01:21:23 +00:00
inc A1H
2021-11-06 00:44:04 +00:00
LCF31: bcc LCF13
bra LCF67
LCF35: sta RDCARDRAM
sta WRMAINRAM
2021-11-06 01:21:23 +00:00
lda A1L
ldx A1H
2021-11-06 00:44:04 +00:00
sta ALTZPON
2021-11-06 01:21:23 +00:00
sta A1L
stx A1H
2021-11-06 00:44:04 +00:00
LCF46: sta ALTZPON
2021-11-06 01:21:23 +00:00
lda (A1L)
ldx A1L
ldy A1H
inc A1L
2021-11-06 00:44:04 +00:00
bne LCF55
2021-11-06 01:21:23 +00:00
inc A1H
2021-11-06 00:44:04 +00:00
LCF55: sta ALTZPOFF
2021-11-06 01:21:23 +00:00
sta (A4L)
inc A4L
2021-11-06 00:44:04 +00:00
bne LCF60
2021-11-06 01:21:23 +00:00
inc A4H
LCF60: cpx A2L
2021-11-06 00:44:04 +00:00
tya
2021-11-06 01:21:23 +00:00
sbc A2H
2021-11-06 00:44:04 +00:00
bcc LCF46
LCF67: sta ALTZPOFF
sta WRCARDRAM
plp
bmi LCF73
sta WRMAINRAM
LCF73: sta RDCARDRAM
plp
bmi LCF7C
sta RDMAINRAM
LCF7C: plp
bpl LCF82
sta SET80COL
LCF82: rts
LCF83: bcc LCFB7
sta RDMAINRAM
sta WRCARDRAM
2021-11-06 01:21:23 +00:00
lda A4L
ldy A4H
2021-11-06 00:44:04 +00:00
sta ALTZPON
2021-11-06 01:21:23 +00:00
sta A4L
sty A4H
2021-11-06 00:44:04 +00:00
sta ALTZPOFF
ldy #$00
2021-11-06 01:21:23 +00:00
LCF9B: lda (A1L),y
2021-11-06 00:44:04 +00:00
sta ALTZPON
2021-11-06 01:21:23 +00:00
sta (A4L),y
2021-11-06 00:44:04 +00:00
sta ALTZPOFF
iny
bne LCF9B
2021-11-06 01:21:23 +00:00
inc A1H
2021-11-06 00:44:04 +00:00
.byte $8D
LCFAB: ora #$C0
2021-11-06 01:21:23 +00:00
inc A4H
2021-11-06 00:44:04 +00:00
sta ALTZPOFF
dex
bne LCF9B
bra LCFE4
LCFB7: sta RDCARDRAM
sta WRMAINRAM
2021-11-06 01:21:23 +00:00
lda A1L
ldy A1H
2021-11-06 00:44:04 +00:00
sta ALTZPON
2021-11-06 01:21:23 +00:00
sta A1L
sty A1H
2021-11-06 00:44:04 +00:00
ldy #$00
LCFCA: sta ALTZPON
2021-11-06 01:21:23 +00:00
lda (A1L),y
2021-11-06 00:44:04 +00:00
sta ALTZPOFF
2021-11-06 01:21:23 +00:00
sta (A4L),y
2021-11-06 00:44:04 +00:00
iny
bne LCFCA
2021-11-06 01:21:23 +00:00
inc A4H
2021-11-06 00:44:04 +00:00
sta ALTZPON
LCFDC: .byte $E6
LCFDD: and $088D,x
cpy #$CA
bne LCFCA
LCFE4: jmp LCF67
brk
brk
brk
brk
2021-11-06 01:21:23 +00:00
brk
2021-11-06 00:44:04 +00:00
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
LCFFF: brk