; Use macros for better readability
.macpack generic
+ .macpack cpu
-.code
; ----------------------------------------------------------------------------
; Initialization code. This is a constructor, so it is called on startup if
; the linker has detected references to this module.
+.segment "INIT"
+
.proc initstkchk
- lda sp
- sta initialsp
- sub #<__STACKSIZE__
- sta lowwater
- lda sp+1
- sta initialsp+1
- sbc #>__STACKSIZE__
- add #1 ; Add 256 bytes safety area
- sta lowwater+1
- rts
+ lda sp
+ sta initialsp
+ sub #<__STACKSIZE__
+ sta lowwater
+ lda sp+1
+ sta initialsp+1
+ sbc #>__STACKSIZE__
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+ ina ; Add 256 bytes safety area
+.else
+ add #1 ; Add 256 bytes safety area
+.endif
+ sta lowwater+1
+ rts
.endproc
; ----------------------------------------------------------------------------
; 6502 stack checking routine. Does not need to save any registers.
-; Safety zone for the hardware stack is 10 bytes.
+; Safety zone for the hardware stack is 12 bytes.
+
+.code
stkchk: tsx
- cpx #10
+ cpx #12
bcc Fail ; Jump on stack overflow
- rts ; Return if ok
+ rts ; Return if ok
; ----------------------------------------------------------------------------
; C stack checking routine. Does not need to save any registers.
+.code
+
cstkchk:
; Check the high byte of the software stack
; difficult, since we're operating at a lower level here.
Fail: lda #4
- jsr pusha0
+ ldx #0
jmp _exit
; ----------------------------------------------------------------------------
lowwater: .word 0
+