Updated
This commit is contained in:
322
OperatingSystem/monitor_v2/include/disassembler copy.s
Normal file
322
OperatingSystem/monitor_v2/include/disassembler copy.s
Normal file
@@ -0,0 +1,322 @@
|
||||
; HL contains start address
|
||||
; B contains length
|
||||
disassemble:
|
||||
call dasm_print16hex_addr ;print address (HL)
|
||||
call disassemble_table_seek
|
||||
xor a
|
||||
or b
|
||||
or c
|
||||
jr z, disassemble_err ;if bc==0000h
|
||||
|
||||
ld a,(hl) ;load first byte
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
call dasm_print8hex ;print value
|
||||
ld a,(hl)
|
||||
cp 0xC3 ;C3 JPnn
|
||||
jp z, dasm_C3
|
||||
|
||||
;start getting value
|
||||
|
||||
disassemble_err:
|
||||
ld a,(hl)
|
||||
call dasm_print8hex ;print value
|
||||
push hl
|
||||
ld hl, [dasm_UU]
|
||||
call print_str
|
||||
pop hl
|
||||
disassemble_continue:
|
||||
call print_newLine
|
||||
inc hl
|
||||
dec b
|
||||
jp nz, disassemble
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;A contains char
|
||||
;BC contains returned position
|
||||
disassemble_table_seek:
|
||||
push hl
|
||||
ld c,a
|
||||
disassemble_table_seek_loop:
|
||||
ld a,(hl)
|
||||
cp c ; if match
|
||||
jr z, disassemble_table_found
|
||||
or a ; if null
|
||||
jp z, disassemble_table_notfound
|
||||
ld b,0
|
||||
ld c,4
|
||||
add hl,bc
|
||||
ld a,(hl)
|
||||
ld c,a
|
||||
add hl,bc
|
||||
inc hl
|
||||
jr disassemble_table_seek_loop
|
||||
|
||||
|
||||
disassemble_table_found
|
||||
ld b,H
|
||||
ld c,l
|
||||
pop hl
|
||||
ret
|
||||
|
||||
disassemble_table_notfound
|
||||
ld b,0
|
||||
ld c,0
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
||||
|
||||
dasm_C3: ;JP nn (276)
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
ld d, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_C3_str]
|
||||
call print_str
|
||||
ld h,d
|
||||
ld l,e
|
||||
call dasm_print16hex_addr
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_C3_str:
|
||||
db "JP ",0x00
|
||||
|
||||
dasm_JPccnn: ;JP nn (276)
|
||||
rra
|
||||
rra
|
||||
rra
|
||||
and 0x07
|
||||
call dasm_printFlags
|
||||
ld a, ","
|
||||
call print_char
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
ld d, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_C3_str]
|
||||
call print_str
|
||||
ld h,d
|
||||
ld l,e
|
||||
call dasm_print16hex_addr
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
|
||||
dasm_18: ;JR e
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_18_str]
|
||||
call print_str
|
||||
ld a,e
|
||||
call dasm_print8relhex
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_18_str:
|
||||
db "JR ",0x00
|
||||
|
||||
dasm_38: ;JR C,e
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_38_str]
|
||||
call print_str
|
||||
ld a,e
|
||||
call dasm_print8relhex
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_38_str:
|
||||
db "JR C, ",0x00
|
||||
|
||||
dasm_30: ;JR NC,e
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_30_str]
|
||||
call print_str
|
||||
ld a,e
|
||||
call dasm_print8relhex
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_30_str:
|
||||
db "JR NC, ",0x00
|
||||
|
||||
dasm_28: ;JR Z,e
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_28_str]
|
||||
call print_str
|
||||
ld a,e
|
||||
call dasm_print8relhex
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_28_str:
|
||||
db "JR Z, ",0x00
|
||||
|
||||
dasm_20: ;JR NZ,e
|
||||
inc hl
|
||||
ld e, (HL)
|
||||
inc hl
|
||||
;de now has jmp value
|
||||
push hl
|
||||
ld hl, [dasm_20_str]
|
||||
call print_str
|
||||
ld a,e
|
||||
call dasm_print8relhex
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_20_str:
|
||||
db "JR NZ, ",0x00
|
||||
|
||||
dasm_E9: ;JR NZ,e
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, [dasm_20_str]
|
||||
call print_str
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_E9_str:
|
||||
db "JP (HL), ",0x00
|
||||
|
||||
dasm_E9: ;JP (HL)
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, [dasm_E9_str]
|
||||
call print_str
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_E9_str:
|
||||
db "JP (HL)",0x00
|
||||
|
||||
dasm_E9: ;JP (IX)
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, [dasm_E9_str]
|
||||
call print_str
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_E9_str:
|
||||
db "JP (IX)",0x00
|
||||
|
||||
dasm_E9: ;JP (IY)
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, [dasm_E9_str]
|
||||
call print_str
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_E9_str:
|
||||
db "JP (IY)",0x00
|
||||
|
||||
|
||||
dasm_00: ;JP nn (276)
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, [dasm_00_str]
|
||||
call print_str
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_00_str:
|
||||
db "NOP",0x00
|
||||
|
||||
dasm_FF: ;JP nn (276)
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, [dasm_FF_str]
|
||||
call print_str
|
||||
pop hl
|
||||
jp disassemble_continue
|
||||
dasm_FF_str:
|
||||
db "---",0x00
|
||||
|
||||
|
||||
dasm_print16hex_addr:
|
||||
ld a,"$"
|
||||
call print_char
|
||||
ld a,h
|
||||
call print_a_hex
|
||||
ld a,l
|
||||
call print_a_hex
|
||||
ld a,"h"
|
||||
call print_char
|
||||
ld a," "
|
||||
call print_char
|
||||
ret
|
||||
|
||||
dasm_print8hex:
|
||||
call print_a_hex
|
||||
ld a,"h"
|
||||
call print_char
|
||||
ld a," "
|
||||
call print_char
|
||||
ret
|
||||
|
||||
dasm_print8relhex:
|
||||
push af
|
||||
and 0x80
|
||||
jp nz, dasm_print8relhex_neg
|
||||
ld a,"$"
|
||||
call print_char
|
||||
ld a,"+"
|
||||
call print_char
|
||||
pop af
|
||||
call print_a_hex
|
||||
ld a,"h"
|
||||
call print_char
|
||||
ret
|
||||
|
||||
dasm_print8relhex_neg:
|
||||
ld a,"$"
|
||||
call print_char
|
||||
ld a,"-"
|
||||
call print_char
|
||||
pop af
|
||||
neg
|
||||
call print_a_hex
|
||||
ld a,"h"
|
||||
call print_char
|
||||
ret
|
||||
|
||||
|
||||
dasm_printFlags:
|
||||
push hl
|
||||
ld hl, [dasm_printFlags_table]
|
||||
rlca
|
||||
ld b,0
|
||||
ld c,a
|
||||
add hl,bc
|
||||
call print_str
|
||||
ld a, " "
|
||||
call print_char
|
||||
pop hl
|
||||
ret
|
||||
|
||||
dasm_printFlags_table:
|
||||
db "NZ",0
|
||||
db "Z",0,0
|
||||
db "NC"
|
||||
db "C",0,0
|
||||
db "PO",0
|
||||
db "PE",0
|
||||
db "P",0,0
|
||||
db "M",0,0
|
||||
Reference in New Issue
Block a user