Files
Z8C-Homebrew-Computer/OperatingSystem/monitor_v2/include/.old/disassembler copy.s
2024-01-12 13:29:20 +01:00

322 lines
4.9 KiB
ArmAsm

; 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