ack/lang/a68s/liba68s/hoist.e
1988-10-04 13:41:01 +00:00

36 lines
1.1 KiB
Plaintext

#include "e.h"
exp $HOIST
pro $HOIST,SZADDR ; used to balance the amount of space on the stack
; for a call to PUT or PRINT. This is done by
; loading an amount of dummy data (-1).
; The parameter is the amount of dummy space needed.
lxa 0 ; base address of params
lol SZADDR ; param, after static link, the difference
loc SZADDR+SZWORD ; diff calculated from after param and static link
adu SZWORD ; add last two
ads SZWORD ; add total to arg base
dup SZADDR ; this is the address of 'count'
SFL -SZADDR ; save for later use
loi SZWORD ; load count
lol SZADDR ; load difference
adu SZWORD ; new count
stl SZADDR+SZWORD ; store in new place, at bottom of dummy data
1
loc -1 ; dummy data to PRINT
LFL -SZADDR ; address to place data, initialy where count was
dup SZADDR
adp -SZWORD ; reduce pointer by SZWORD ready for next time
SFL -SZADDR ; re-save
sti SZWORD ; place -1 in target address
lol SZADDR ; use difference as a loop counter now
loc SZWORD
sbi SZWORD ; reduce loop counter by SZWORD
dup SZWORD ; need one to store and one to test
stl SZADDR ; re-save
zgt *1 ; do next SZWORD block
ret 0
end SZADDR