148 lines
2.6 KiB
ArmAsm
148 lines
2.6 KiB
ArmAsm
OP_EXEC:
|
|
;DE contains pointer
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE
|
|
ld b,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc HL
|
|
inc HL
|
|
call DHEX_TO_BYTE
|
|
ld c,a
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
ld h,b
|
|
ld l,c
|
|
jp (hl)
|
|
OP_CALL:
|
|
;DE contains pointer
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE
|
|
ld b,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc HL
|
|
inc HL
|
|
call DHEX_TO_BYTE
|
|
ld c,a
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
ld h,b
|
|
ld l,c
|
|
call _OP_CALL
|
|
call print_newLine
|
|
ret
|
|
_OP_CALL
|
|
jp (hl)
|
|
|
|
OP_DUMP:
|
|
;DE contains pointer
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE ;parse start address
|
|
ld b,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc HL
|
|
inc HL
|
|
call DHEX_TO_BYTE
|
|
ld c,a
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc HL
|
|
inc HL
|
|
ld a,(HL)
|
|
cp ' '
|
|
jp nz, ERR_SYNTAX
|
|
inc HL
|
|
call DHEX_TO_BYTE
|
|
push af
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
pop af
|
|
|
|
ld h,b
|
|
ld l,c
|
|
ld b,a
|
|
|
|
call dump_pretty
|
|
ret
|
|
|
|
OP_SET:
|
|
;DE contains pointer
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE ;parse start address
|
|
ld b,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc HL
|
|
inc HL
|
|
call DHEX_TO_BYTE
|
|
ld c,a
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
;bc now contains the start address
|
|
INC HL
|
|
INC HL
|
|
;hl now cointains start addr of data bytes
|
|
_OP_SET_LOOP:
|
|
ld a,(hl)
|
|
cp 0 ;if 0 then end
|
|
RET Z
|
|
cp ' '
|
|
jp nz, ERR_SYNTAX
|
|
inc hl ;next byte
|
|
call DHEX_TO_BYTE
|
|
ld (bc),a ;load byte to
|
|
ld a,e
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc bc
|
|
inc hl
|
|
inc hl
|
|
jp _OP_SET_LOOP
|
|
|
|
OP_DASM:
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE
|
|
ld b,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
inc hl
|
|
call DHEX_TO_BYTE
|
|
ld c,a
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
inc hl
|
|
ld a,(HL)
|
|
cp ' '
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
call DHEX_TO_BYTE
|
|
push af
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
ld h,b
|
|
ld l,c
|
|
pop af ;restore af
|
|
ld b,a
|
|
call disassemble
|
|
ret |