43 lines
598 B
ArmAsm
43 lines
598 B
ArmAsm
.define .sts
|
|
.sect .text
|
|
.sect .rom
|
|
.sect .data
|
|
.sect .bss
|
|
.sect .text
|
|
! 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)
|