12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- mes 2,4,4
- exp $top_size
- pro $top_size, 20
- lol 0 ; s_brk
- lor 1 ; s_brk SP
- sbs 4 ; s_brk-SP
- ret 4 ; return size of block to be saved
- end 20
- exp $top_save
- pro $top_save, 0
- lde 0 ; load line number and file name
- lim ; ignore mask
- lor 0 ; LB
- lol 0 ; size of block
- lor 1 ; SP (the SP BEFORE pushing)
- lor 1 ; SP (address of stack top to save)
- lol 4 ; area
- lol 0 ; size
- bls 4 ; move whole block
- asp 24 ; remove the lot from the stack
- loc 1
- ret 4 ; return 1
- end 0
- exp $top_load
- pro $top_load, 0
- lol 0
- dup 4
- ste area ; copy area pointer from argument 0
- loi 4 ; load indirect to
- str 1 ; restore sp
- loe area ; load area, note that the SP is now correct
- lor 1 ; SP (the SP AFTER, see above)
- loe area
- lof 4 ; size of block
- bls 4 ; move block back (SP becomes the SP BEFORE again!)
- asp 4 ; drop size
- str 0 ; LB
- sim ; ignore mask
- sde 0 ; line and file
- loc 0
- ret 4 ; return 0
- end 0
- area
- bss 4,0,0
|