2023-11-16 18:19:54 -05:00

125 lines
1.5 KiB
Plaintext

PAGE
SBTTL "--- DEBUGGER: CBM64 ---"
; --------------
; CBM64 DEBUGGER
; --------------
; ENTRY: BREAKPOINT ID IN [A]
BLINE: DB "B: OP: PC: B: S: V:"
BLINL EQU $-BLINE
BUGLIN EQU SCREEN+40
DOBUG: LDX CONSOL ; CHECK CONSOLE
CPX #5 ; "SELECT" PRESSED?
BNE BUGIT ; IF SO,
RTS ; EXIT
BUGIT: PHA ; ELSE SAVE BREAK ID
LDX #39
DBG0: LDA #0
STA BUGLIN,X ; CLEAR SCREEN LINE
DEX
BPL DBG0
LDX #0
DBG1: LDA BLINE,X ; PRINT DEBUGGER TEXT
STA BUGLIN,X
INX
CPX #BLINL
BCC DBG1
LDX #2 ; INIT "CURSOR"
PLA
JSR HEX ; SHOW BREAKPOINT
LDA OPCODE
BMI ITQ0
LDA #'2'
BNE SHOWOP
ITQ0: CMP #$B0
BCS ITQ1
LDA #'1'
BNE SHOWOP
ITQ1: CMP #$C0
BCS ITQ2
LDA #'0'
BNE SHOWOP
ITQ2: CMP #$E0
BCS ITQ3
LDA #'E'
BNE SHOWOP
ITQ3: LDA #'X'
SHOWOP: LDX #5 ; SET CURSOR
STA BUGLIN,X
LDX #9 ; CURSOR FOR OP ID
LDA OPCODE
JSR HEX
LDX #15 ; CURSOR FOR PC
LDA ZPCH
JSR HEX
LDA ZPCM
JSR HEX
LDA ZPCL
JSR HEX
LDX #24 ; CURSOR FOR BYTE
LDA MBYTE
JSR HEX
LDX #29 ; CURSOR FOR [ZSP]
LDA ZSP
JSR HEX
LDX #34 ; CURSOR FOR [MPC]
LDA MPCH
JSR HEX
LDA MPCM
JSR HEX
LDA MPCL
JSR HEX
LDA CONSOL
CMP #6 ; "START" PRESSED?
BNE LETEX ; EXIT IF NOT
LETGO: LDA CONSOL ; ELSE WAIT FOR
CMP #6 ; "START" TO BE RELEASED
BEQ LETGO
LETEX: RTS
; CONVERT [A] TO HEX & PRINT
HEX: PHA
LSR A
LSR A
LSR A
LSR A
JSR NIB
PLA
NIB: AND #%00001111
TAY
LDA HCHARS,Y
STA BUGLIN,X
INX
RTS
HCHARS: DB "0123456789ABCDEF"
MBYTE: DB 0
END