48 lines
		
	
	
	
		
			960 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			960 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define Ret
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! This subroutine stores the returnvalue in the return area.
 | |
| ! This area is in zeropage.
 | |
| ! The size of the object to be returned is in zeropage location
 | |
| ! RETSIZE.
 | |
| ! It also restores the localbases and the stackpointer of the
 | |
| ! invoking procedure.
 | |
| 
 | |
| 
 | |
| Ret:
 | |
| 	sty RETSIZE	! save returnsize
 | |
| 	beq 1f		! the return size is zero
 | |
| 	lda #0		! address of returnvalue area (highbyte)
 | |
| 	ldx #RETURN	! address of returnvalue area (lowbyte)
 | |
| 	cpy #2
 | |
| 	bne 2f
 | |
| 	jsr Sti		! store word
 | |
| 	jmp 1f
 | |
|     2:	cpy #4
 | |
| 	jsr Sdi		! store fourbyte word
 | |
|     1:	ldx LB		! get old stackpointer (lowbyte)
 | |
| 	stx SP+2
 | |
| 	lda LB+1	! get old stackpointer (highbyte)
 | |
| 	sta SP+1
 | |
| 	inc LB
 | |
| 	inc LB
 | |
| 	bne 1f
 | |
| 	inc LB+1
 | |
|     1:	jsr Pop		! get old localbase
 | |
| 	stx LB		! localbase (lowbyte)
 | |
| 	sta LB+1	! localbase (highbyte)
 | |
| 	pha
 | |
| 	sec
 | |
| 	txa
 | |
| 	sbc #BASE
 | |
| 	sta LBl		! second localbase (lowbyte)
 | |
| 	pla
 | |
| 	sbc #0
 | |
| 	sta LBl+1	! second localbase (highbyte)
 | |
| 	rts
 | |
| 
 | |
| 
 |