started work on disassemble command integration

This commit is contained in:
FeralChild64 committed 2021-01-09 19:09:16 +01:00
1 parent 6dd3a6d5b2
commit b0cc5dc503
5 files changed
+109 -91

No files matched your search

+1 -1
View File
@@ -11,7 +11,7 @@
; ********************
!addr Bank = 2 ; XXX remove this
!addr Adr_Mode = 2 ; $00 = C64 address, $80 = M65 flat address ; XXX adapt the implementation
!addr Adr_Mode = 2 ; $00 = 64K address, $80 = M65 flat address ; XXX adapt the implementation
!addr PCH = 3
!addr PCL = 4
!addr SR = 5
+10 -49
View File
@@ -15,14 +15,19 @@ Mon_Call:
JSR Print_Commands
; clear register for monitor call
; set default addressing mode to 64K
LDA #0
STA Adr_Mode
; clear register for monitor call
LDX #6
@loop STA AC,X
DEX
BPL @loop
; set default PC to monitor exit point
LDA #<monitor_exit
@@ -386,7 +391,7 @@ Dec_LDA:
RTS
; ****
Fetch:
Fetch: ; XXX get rid of this, use helper!
; ****
PHZ
@@ -426,7 +431,7 @@ Mon_Bits:
BCS @lab
JSR LAC_To_LPC ; Long_PC = start address
@lab JSR Print_CR
LDA #KEY_WHITE
LDA #KEY_WHITE ; XXX adapt colors
STA Long_DA+1
LDX #8
@@ -503,11 +508,6 @@ Mon_Go:
; XXX to be rewritten for Open ROMs!
jmp Main
; JSR Get_LAC ; get 1st. parameter
; JSR LAC_To_PC
; LDX SPL
; TXS
; JMP JMPFAR
; ******
Mon_JSR:
@@ -515,14 +515,6 @@ Mon_JSR:
; XXX to be rewritten for Open ROMs!
jmp Main
; JSR Get_LAC ; get 1st. parameter
; JSR LAC_To_PC
; LDX SPL
; TXS
; JSR JSRFAR
; TSX
; STX SPL
; JMP Main
; ***********
Dump_4_Bytes: ; XXX to be adapted
@@ -1275,35 +1267,6 @@ Size_To_Mode:
LDX #0
RTS
; **************
Mon_Disassemble:
; **************
JSR Get_LAC ; get 1st. parameter
BCS @nopar
JSR LAC_To_LPC ; Long_PC = start address
JSR Get_LAC ; Long_AC = end address
BCC @range
@nopar LDA #32 ; disassemble 32 bytes
STA Long_CT
BRA @loop
@range JSR LAC_Minus_LPC ; Long_CT = range
LBCC Mon_Error ; -> negative
@loop JSR CR_Erase ; prepare empty line
JSR STOP
LBEQ Main
JSR Dis_Code ; disassemble one line
INC Op_Size
LDA Op_Size
JSR Add_LPC ; advance address
LDA Long_CT
SEC
SBC Op_Size
STA Long_CT
BCS @loop
JMP Main
; *******
Dis_Code:
; *******
@@ -1397,8 +1360,7 @@ Print_Code:
; detect long branches
@long LDA #KEY_YELLOW
JSR CHROUT
@long JSR Print_Attr_Bold
LDX Op_Code
LDA LEN_ADM,X
CMP #%10100000 ; long branch mode
@@ -1475,8 +1437,7 @@ Print_Code:
@mne4 JSR Print_Blank
@mne5 JSR Print_Blank
LDA #KEY_WHITE
JSR CHROUT
JSR Print_Attr_NoBold
; check for accumulator operand
+50
View File
@@ -0,0 +1,50 @@
; Based on BSM (Bit Shifter's Monitor)
Mon_Disassemble:
lda Adr_Mode
pha ; store addressing mode, in case no parameter is given
lda #$00
sta Adr_Mode ; by default use C64-style addressing
jsr Get_Addr_To_LAC ; get 1st parameter (start address)
beq @nopar
pla ; drop previous addressing mode
jsr LAC_To_LPC ; Long_PC = start address
jsr Get_Addr_To_LAC ; get 2nd parameter (end address)
bne @range
@nopar:
pla ; retrieve old addressing mode
sta Adr_Mode
lda #$20 ; by default disassemble 32 addresses
sta Long_CT+0
lda #$00
sta Long_CT+1
sta Long_CT+2
sta Long_CT+3
bra @loop
@range:
jsr LAC_Minus_LPC ; Long_CT = range
+bcc Mon_Error ; -> negative
@loop:
jsr CR_Erase ; prepare empty line
jsr STOP
+beq Main
jsr Dis_Code ; disassemble one line
inc Op_Size
lda Op_Size
jsr Add_LPC ; advance address
lda Long_CT
sec
sbc Op_Size
sta Long_CT
bcs @loop
jmp Main
+38 -31
View File
@@ -4,6 +4,9 @@
Get_From_Memory:
; XXX consider temporarily switching off $C000-$CFFF ROM
; XXX consider using long mode for addresses below $8000 always
phx
phy
phz
@@ -12,59 +15,63 @@ Get_From_Memory:
clc
tza
adc Long_PC+0
sta Long_TMP+0
adc Long_PC+0
sta Long_TMP+0
ldx #$01
ldx #$01
@1:
lda Long_PC+0,x
adc #$00
sta Long_TMP+0,x
lda Long_PC+0,x
adc #$00
sta Long_TMP+0,x
inx
cpx #$04
bne @1
cpx #$04
bne @1
ldz #$00
ldz #$00
; Check addressing mode
bbs7 Adr_Mode, @mode_flat
bbs7 Adr_Mode, @mode_flat
@mode_64k:
lda Long_TMP+1
bne @read ; branch if no need to handle shadow memory (not zero page)
lda Long_TMP+0
lda #$00 ; make sure this is 64K address
sta Long_TMP+2
sta Long_TMP+3
lda Long_TMP+1
bne @read ; branch if no need to handle shadow memory (not zero page)
lda Long_TMP+0
dec
dec
cmp #$8E
bcs @read ; branch if no need to handle shadow memory (0, 1, or above $8F)
cmp #$8E
bcs @read ; branch if no need to handle shadow memory (0, 1, or above $8F)
@2:
sta Long_TMP+0
bra @read_shadow
sta Long_TMP+0
bra @read_shadow
@mode_flat:
lda Long_TMP+3
ora Long_TMP+2
ora Long_TMP+1
bne @read_flat
lda Long_TMP+3
ora Long_TMP+2
ora Long_TMP+1
bne @read_flat
lda Long_TMP+0
lda Long_TMP+0
dec
dec
cmp #$8E
bcs @read_flat
bra @2
cmp #$8E
bcs @read_flat
bra @2
@read_shadow:
lda #MEMCONF_SHADOW_BZP_1
sta Long_TMP+1
lda #MEMCONF_SHADOW_BZP_2
sta Long_TMP+2
lda #MEMCONF_SHADOW_BZP_3
sta Long_TMP+3
lda #MEMCONF_SHADOW_BZP_1
sta Long_TMP+1
lda #MEMCONF_SHADOW_BZP_2
sta Long_TMP+2
lda #MEMCONF_SHADOW_BZP_3
sta Long_TMP+3
@read_flat:
+nop
+10 -10
View File
@@ -4,24 +4,24 @@
Print_Attr_Bold:
jsr Print_Attr_Common1
lda #'s'
bra Print_Attr_Common2
jsr Print_Attr_Common1
lda #'s'
bra Print_Attr_Common2
Print_Attr_NoBold:
jsr Print_Attr_Common1
lda #'u'
jsr Print_Attr_Common1
lda #'u'
; FALLTROUGH
Print_Attr_Common2:
jmp CHROUT
jmp CHROUT
Print_Attr_Common1:
lda #$00
sta QTSW ; make sure quote mode is disabled
lda #KEY_ESC
jmp CHROUT
lda #$00
sta QTSW ; make sure quote mode is disabled
lda #KEY_ESC
jmp CHROUT