38 lines
540 B
ArmAsm
38 lines
540 B
ArmAsm
|
.define .sts
|
||
|
! use trp.z
|
||
|
|
||
|
! object size given by 2-byte integer on
|
||
|
! top of stack.
|
||
|
! parameters:
|
||
|
! on stack
|
||
|
! checks if #bytes is even or 1,
|
||
|
! else traps
|
||
|
|
||
|
|
||
|
|
||
|
.sts:
|
||
|
pop ix ! save return address
|
||
|
pop de ! # bytes to transfer
|
||
|
pop hl ! destination address
|
||
|
srl d ! divide de by 2
|
||
|
rr e
|
||
|
jr nc,1f ! see if it was odd
|
||
|
ld a,e ! yes, must be 1
|
||
|
or d
|
||
|
jr nz,.trp.z ! no, error
|
||
|
pop de ! transfer 1 byte,
|
||
|
! padded with zeroes
|
||
|
ld (hl),e
|
||
|
jp (ix)
|
||
|
1:
|
||
|
pop bc
|
||
|
ld (hl), c
|
||
|
inc hl
|
||
|
ld (hl),b
|
||
|
inc hl
|
||
|
dec de
|
||
|
ld a,e
|
||
|
or d
|
||
|
jr nz,1b
|
||
|
jp (ix)
|