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 d, 0xff
|
|
mov e, 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
|
|
|