46 lines
		
	
	
	
		
			978 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			978 B
		
	
	
	
		
			Text
		
	
	
	
	
	
 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
 |