123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- .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
|