36 lines
1.1 KiB
Plaintext
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
|