59 lines
629 B
ArmAsm
59 lines
629 B
ArmAsm
|
.sect .text
|
||
|
.sect .rom
|
||
|
.sect .data
|
||
|
.sect .bss
|
||
|
.sect .text
|
||
|
|
||
|
.define .proword, .probyte
|
||
|
.define .pro0, .pro2, .pro4
|
||
|
|
||
|
! BC is used as the frame pointer, but HL and DE can be corrupted.
|
||
|
|
||
|
.proword:
|
||
|
pop h
|
||
|
push b
|
||
|
mov e, m
|
||
|
inx h
|
||
|
mov d, m
|
||
|
inx h
|
||
|
jmp .pron
|
||
|
|
||
|
.probyte:
|
||
|
pop h
|
||
|
push b
|
||
|
mvi e, 0xff
|
||
|
mov d, m
|
||
|
inx h
|
||
|
jmp .pron
|
||
|
|
||
|
.pro4:
|
||
|
pop h
|
||
|
push b
|
||
|
lxi d, -4
|
||
|
jmp .pron
|
||
|
|
||
|
.pro2:
|
||
|
pop h
|
||
|
push b
|
||
|
lxi d, -2
|
||
|
jmp .pron
|
||
|
|
||
|
.pro0:
|
||
|
pop h
|
||
|
push b
|
||
|
lxi d, 0
|
||
|
! fall through
|
||
|
.pron:
|
||
|
shld .retadr
|
||
|
! Copy the current stack pointer to BC.
|
||
|
lxi h, 0
|
||
|
dad sp
|
||
|
mov b, h
|
||
|
mov c, l
|
||
|
! Calculate the new stack pointer.
|
||
|
dad d
|
||
|
sphl
|
||
|
lhld .retadr
|
||
|
pchl
|
||
|
|