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

123 lines
1.5 KiB
Plaintext

PAGE
SBTTL "--- DEBUGGER: CBM PLUS/4 ---"
; -------------------
; CBM PLUS/4 DEBUGGER
; -------------------
; ENTRY: BREAKPOINT ID IN [A]
BLINE: DB "B: OP: PC: B: S: V:"
BLINL EQU $-BLINE
BUGLIN EQU SCREEN+960
DOBUG: PHA ; SAVE BREAKPOINT ID
LDA SHFLAG
AND #%00000100 ; CTRL KEY PRESSED?
BEQ BUGIT ; CONTINUE IF NOT
PLA ; ELSE RESET STACK
RTS ; AND EXIT
BUGIT: LDX #39
DBG0: LDA #SPACE
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 BUFSIZ
JSR HEX
LDX #34 ; CURSOR FOR [MPC]
LDA MPCH
JSR HEX
LDA MPCM
JSR HEX
LDA MPCL
JSR HEX
WAITT: LDA SHFLAG ; LOGO KEY PRESSED?
AND #%00000010
BEQ WAITT
LETGO: LDA SHFLAG ; WAIT FOR RELEASE
AND #%00000010
BNE LETGO
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