This commit is contained in:
Joshua Bell 2021-11-07 21:16:34 -08:00
parent 36aff42b39
commit 3c5bd1296a
2 changed files with 194 additions and 114 deletions

View File

@ -21,6 +21,10 @@ BASH := $29
BAS2L := $2A BAS2L := $2A
BAS2H := $2B BAS2H := $2B
INVFLG := $32 INVFLG := $32
CSWL := $36
CSWH := $37
KSWL := $38
KSWH := $39
A1L := $3C A1L := $3C
A1H := $3D A1H := $3D
A2L := $3E A2L := $3E
@ -121,7 +125,7 @@ CLREOL := $FC9C
;; Init ;; Init
LC300: bit SETV ; V = init LC300: bit SETV ; V = init
bra LC33A bra MainEntry
;; Input ;; Input
.assert * = C3KeyIn, error, "Entry point mismatch" .assert * = C3KeyIn, error, "Entry point mismatch"
@ -132,7 +136,7 @@ LC305: sec
.assert * = C3COut1, error, "Entry point mismatch" .assert * = C3COut1, error, "Entry point mismatch"
LC307: clc LC307: clc
clv clv
bra LC33A bra MainEntry
;; Signature bytes ;; Signature bytes
.byte $01, $88 .byte $01, $88
@ -176,7 +180,8 @@ JumpAuxMove:
;;; ============================================================ ;;; ============================================================
;;; Main Entry Points ;;; Main Entry Points
LC33A: sta CLRROM MainEntry:
sta CLRROM
sta SAVEA sta SAVEA
stx SAVEX stx SAVEX
sty SAVEY sty SAVEY
@ -184,12 +189,12 @@ LC33A: sta CLRROM
bvc LC35B bvc LC35B
lda #<LC305 lda #<LC305
sta $38 sta KSWL
ldx #>LC305 ldx #>LC305
stx $39 stx KSWH
lda #$07 lda #<LC307
sta $36 sta CSWL
stx $37 stx CSWH
jsr LC800 jsr LC800
clc clc
LC35B: php LC35B: php

View File

@ -19,6 +19,10 @@ BASH := $29
BAS2L := $2A BAS2L := $2A
BAS2H := $2B BAS2H := $2B
INVFLG := $32 INVFLG := $32
CSWL := $36
CSWH := $37
KSWL := $38
KSWH := $39
A1L := $3C A1L := $3C
A1H := $3D A1H := $3D
A2L := $3E A2L := $3E
@ -116,46 +120,76 @@ CLREOL := $FC9C
;;; ============================================================ ;;; ============================================================
.org $C300 .org $C300
LC300: bit LC3D4 ;; Init
bra LC341 LC300: bit SETV ; V = init
sec bra MainEntry
bcc LC320
;; Input
.assert * = C3KeyIn, error, "Entry point mismatch"
LC305: sec
.byte OPC_BCC ; never taken; skip next byte
;; Output
.assert * = C3COut1, error, "Entry point mismatch"
LC307: clc
clv clv
bra LC341 bra MainEntry
ora ($88,x)
inc a
.byte $23
.byte $2B
.byte $33
jmp LC33B
jsr extra_LC5FA ;; 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 JumpAuxMove
;; XFER
.assert * = XFER, error, "Entry point mismatch"
jsr extra_DoBankC5
jmp LCC03 jmp LCC03
jsr LC3C4 ;;; ============================================================
jsr LCB5D ;;; Pascal Entry Points
LC320: jmp extra_LC5FA
jsr LC3C4
jsr LCB6E JPINIT: jsr ClearROM
jsr PascalInit
LC320: jmp extra_DoBankC5
JPREAD: jsr ClearROM
jsr PascalRead
bra LC320 bra LC320
jsr LC3C4
jsr LCB79 JPWRITE:jsr ClearROM
jsr PascalWrite
bra LC320 bra LC320
jsr LC3C4
jsr LCB9D JPSTAT: jsr ClearROM
jsr PascalStatus
bra LC320 bra LC320
LC33B: jsr extra_LC5FA
JumpAuxMove:
jsr extra_DoBankC5
jmp LCC06 jmp LCC06
LC341: jsr LC3C4 ;;; ============================================================
;;; Main Entry Points
MainEntry:
jsr ClearROM
sta SAVEA sta SAVEA
stx SAVEX stx SAVEX
sty SAVEY sty SAVEY
pha pha
bvc LC354 bvc LC354
jsr LC806 jsr LC806
clc clc
LC354: php LC354: php
@ -167,20 +201,21 @@ LC354: php
beq LC371 beq LC371
dex dex
lda $0678 lda $0678
cmp #$88 cmp #$88 ; left?
beq LC371 beq LC371
cmp $0200,x cmp $0200,x
bne LC38F bne LC38F
sta $0200,x sta $0200,x
LC371: jsr LC96F LC371: jsr LC96F
cmp #$9B cmp #$9B ; escape?
beq EscapeMode beq EscapeMode
cmp #$8D cmp #$8D ; return?
bne LC381 bne LC381
pha pha
jsr DoClearEOL jsr DoClearEOL
pla pla
LC381: cmp #$95 LC381: cmp #$95 ; right?
bne LC38A bne LC38A
ldy CH ldy CH
jsr LC9A8 jsr LC9A8
@ -196,7 +231,7 @@ LC39D: ldx SAVEX
sty OURCH sty OURCH
sty XCOORD sty XCOORD
ldy SAVEY ldy SAVEY
jmp extra_LC5FA jmp extra_DoBankC5
;;; ============================================================ ;;; ============================================================
;;; Escape Mode ;;; Escape Mode
@ -214,16 +249,19 @@ EscapeMode:
;;; ============================================================ ;;; ============================================================
LC3C4: php ClearROM:
php
sei sei
pha pha
sta $C0BA ; ??? sta $C0BA ; ???
sta LCFFF sta CLRROM
lda #$C3 lda #$C3
sta $07F8 sta $07F8
pla pla
plp plp
LC3D4: rts SETV: rts
;;; ============================================================
brk brk
brk brk
@ -232,7 +270,7 @@ LC3D4: rts
brk brk
brk brk
brk brk
jsr extra_LC5FA jsr extra_DoBankC5
jmp LCC00 jmp LCC00
LC3E2: plx LC3E2: plx
@ -240,16 +278,16 @@ LC3E2: plx
rti rti
brk brk
jsr LC3C4 jsr ClearROM
jmp LCE0D jmp LCE0D
jsr LC3C4 jsr ClearROM
jmp LCDEC jmp LCDEC
LC3F4: jsr LC3C4 LC3F4: jsr ClearROM
jmp LCCB2 jmp LCCB2
LC3FA: jsr LC3C4 LC3FA: jsr ClearROM
jmp LCCF5 jmp LCCF5
;;; ============================================================ ;;; ============================================================
@ -278,7 +316,7 @@ LFF4A := $FF4A
eor $5953 eor $5953
.byte $2C .byte $2C
.byte $5F .byte $5F
LC41C: jsr LC5FA LC41C: jsr DoBankC5
.byte $50 .byte $50
LC420: .byte $03 LC420: .byte $03
jsr LC806 jsr LC806
@ -290,35 +328,35 @@ LC429: jmp LC825
ldx #$03 ldx #$03
LC42E: rts LC42E: rts
jsr LC5FA jsr DoBankC5
jmp $C8D4 jmp $C8D4
jsr LC5FA jsr DoBankC5
jmp $C916 jmp $C916
jsr LC5FA jsr DoBankC5
jmp $C922 jmp $C922
jsr LC5FA jsr DoBankC5
jmp $C958 jmp $C958
jsr LC5FA jsr DoBankC5
jmp $C967 jmp $C967
jsr LC5FA jsr DoBankC5
jmp $C969 jmp $C969
jsr LC5FA jsr DoBankC5
jmp $C93E jmp $C93E
LC459: jsr LC5FA LC459: jsr DoBankC5
jmp $C8AC jmp $C8AC
ldx $C066 ldx $C066
ldy $C067 ldy $C067
jmp $C220 jmp $C220
LC468: jsr LC5FA LC468: jsr DoBankC5
jmp $C9A0 jmp $C9A0
brk brk
@ -429,7 +467,7 @@ LC4F8: jmp LC468
dec $00,x dec $00,x
jmp LC459 jmp LC459
jsr LC594 jsr BankC5
sta $067A sta $067A
phx phx
phy phy
@ -444,66 +482,72 @@ LC516: jsr $C83B
pla pla
LC51A: ply LC51A: ply
plx plx
jmp LC5A8 jmp BankC8
jsr LC594 jsr BankC5
jsr $C8C7 jsr $C8C7
jmp LC5A8 jmp BankC8
jsr LC594 jsr BankC5
jsr $C8CD ; ??? jsr $C8CD ; ???
bra LC5A8 bra BankC8
jsr LC594 jsr BankC5
jsr $C8D2 jsr $C8D2
bra LC5A8 bra BankC8
jsr LC594 jsr BankC5
jsr $C8DA jsr $C8DA
bra LC5A8 bra BankC8
jsr LC5A8 jsr BankC8
ora #$80 ora #$80
jsr LFDF0 jsr LFDF0
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
ora #$80 ora #$80
jsr LFDED jsr LFDED
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LC3F4 jsr LC3F4
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LC3FA jsr LC3FA
and #$7F and #$7F
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LFC9E jsr LFC9E
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LFC58 jsr LFC58
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LC300 jsr LC300
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LC4F8 jsr LC4F8
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LC7FD jsr LC7FD
bra LC594 bra BankC5
jsr LC5A8 jsr BankC8
jsr LFC24 jsr LFC24
LC594: php ;; Fall through
;;; ============================================================
;;; Hypothesis: This banks in a special "C5" C800-CFFF
BankC5: php
sei sei
pha pha
lda #$C5 lda #$C5
@ -515,7 +559,11 @@ LC594: php
plp plp
rts rts
LC5A8: php ;;; ============================================================
;;; Hypothesis: This banks in a special "C8" C800-CFFF
BankC8: php
sei sei
pha pha
lda #$C8 lda #$C8
@ -526,14 +574,17 @@ LC5A8: php
plp plp
rts rts
jsr LC5A8 ;;; ============================================================
jsr BankC8
LC5BC: bit $C1C1 LC5BC: bit $C1C1
bmi LC5BC bmi LC5BC
sta $C090 sta $C090
bra LC594 bra BankC5
LC5C6: jsr LC594
LC5C6: jsr BankC5
jsr $C9A5 jsr $C9A5
bra LC5A8 bra BankC8
brk brk
brk brk
brk brk
@ -577,7 +628,12 @@ LC5F5: plx
bit LCFFF bit LCFFF
rti rti
LC5FA: jmp LC5A8 ;;; ============================================================
DoBankC5:
jmp BankC8
;;; ============================================================
jmp LC5C6 jmp LC5C6
@ -585,7 +641,7 @@ LC5FA: jmp LC5A8
cpy $00 cpy $00
ldx #$03 ldx #$03
asl A1L asl A1L
jsr LC5FA jsr DoBankC5
ldy #$69 ldy #$69
LC60D: lda LCF26,y LC60D: lda LCF26,y
sta $036C,y sta $036C,y
@ -684,7 +740,7 @@ LC62D: dec $27
nop nop
nop nop
LC683: pla LC683: pla
LC684: jsr LC5FA LC684: jsr DoBankC5
jsr LCE00 jsr LCE00
bra LC6EA bra LC6EA
brk brk
@ -932,7 +988,7 @@ LC7E5: sta WRCARDRAM
brk brk
LC7FD: jmp LC792 LC7FD: jmp LC792
.endscope .endscope
extra_LC5FA := extra::LC5FA extra_DoBankC5 := extra::DoBankC5
;;; ============================================================ ;;; ============================================================
@ -944,13 +1000,13 @@ LC800: .byte $C3
eor $AA,x eor $AA,x
jmp $C4A0 ; bad disasm? jmp $C4A0 ; bad disasm?
LC806: lda #$05 LC806: lda #<LC305
sta $38 sta KSWL
ldx #$C3 ldx #>LC305
stx $39 stx KSWH
lda #$07 lda #<LC307
sta $36 sta CSWL
stx $37 stx CSWH
LC814: lda #$30 ; ??? LC814: lda #$30 ; ???
sta MODE sta MODE
jsr LCBD7 jsr LCBD7
@ -1505,7 +1561,10 @@ LCB4F: lda #$00
bit TXTPAGE1 bit TXTPAGE1
jmp LCA9B jmp LCA9B
LCB5D: jsr LC814 ;;; ============================================================
PascalInit:
jsr LC814
LCB60: jsr LCBE1 LCB60: jsr LCBE1
LCB63: ldx CH LCB63: ldx CH
stx OURCH stx OURCH
@ -1513,11 +1572,18 @@ LCB63: ldx CH
ldx #$00 ldx #$00
rts rts
LCB6E: jsr LCBB1 ;;; ============================================================
PascalRead:
jsr LCBB1
jsr LC822 jsr LC822
lda CHAR lda CHAR
bra LCB63 bra LCB63
LCB79: sta CHAR
;;; ============================================================
PascalWrite:
sta CHAR
jsr LCBB1 jsr LCBB1
jsr LCBF8 jsr LCBF8
lda CHAR lda CHAR
@ -1527,23 +1593,29 @@ LCB79: sta CHAR
cmp #$15 cmp #$15
beq LCB63 beq LCB63
cmp #$0D cmp #$0D
beq LCB99 beq @l1
jsr LC84C jsr LC84C
bra LCB60 bra LCB60
LCB99: stz CH @l1: stz CH
bra LCB60 bra LCB60
LCB9D: cmp #$00
beq LCBAA ;;; ============================================================
PascalStatus:
cmp #$00
beq @l1
cmp #$01 cmp #$01
bne LCBAD bne @l2
jsr LCCB8 jsr LCCB8
bra LCB63 bra LCB63
LCBAA: sec @l1: sec
bra LCB63 bra LCB63
LCBAD: ldx #$03 @l2: ldx #$03
clc clc
rts rts
;;; ============================================================
LCBB1: pha LCBB1: pha
lda OLDBASL lda OLDBASL
sta BASL sta BASL
@ -1588,6 +1660,9 @@ LCC00: .byte $7B
LCC03: .byte $0F LCC03: .byte $0F
LCC04: .byte $20 LCC04: .byte $20
.byte $BB .byte $BB
;;; ============================================================
LCC06: dec $8049 LCC06: dec $8049
cmp #$40 cmp #$40
bcc LCC13 bcc LCC13
@ -1671,7 +1746,7 @@ LCC8D: bit TXTPAGE2
sta CLR80COL sta CLR80COL
bra LCC64 bra LCC64
LCCB2: jsr LCCB8 LCCB2: jsr LCCB8
jmp extra::LC5FA ; bad disasm or ...? jmp extra::DoBankC5 ; bad disasm or ...?
LCCB8: bit $0579 LCCB8: bit $0579
bmi LCCD7 bmi LCCD7
@ -1704,7 +1779,7 @@ LCCE1: phx
beq LCCDC beq LCCDC
bra LCCD5 bra LCCD5
LCCF5: jsr LCCFB LCCF5: jsr LCCFB
jmp extra::LC5FA jmp extra::DoBankC5
LCCFB: bit $0579 LCCFB: bit $0579
bpl LCD03 bpl LCD03
@ -1850,7 +1925,7 @@ LCE00: asl $9D
stz $0579 stz $0579
LCE0D: jsr LCDA8 LCE0D: jsr LCDA8
sta $04F9 sta $04F9
jmp extra::LC5FA jmp extra::DoBankC5
LCE16: pha LCE16: pha
lda RDRAMRD lda RDRAMRD