;
.export _exit
- .export __STARTUP__ : absolute = 1 ; Mark as startup
+ .export __STARTUP__ : absolute = 1 ; Mark as startup
.import initlib, donelib
- .import callmain, zerobss
- .import __RAM_START__, __RAM_SIZE__
- .import __BSS_LOAD__, __STACKSIZE__
+ .import callmain, zerobss
+ .import __RAM_START__, __RAM_SIZE__
+ .import __BSS_LOAD__, __STACKSIZE__
- .include "zeropage.inc"
- .include "atmos.inc"
+ .include "zeropage.inc"
+ .include "atmos.inc"
; ------------------------------------------------------------------------
; Oric tape header
-.segment "TAPEHDR"
+.segment "TAPEHDR"
- .byte $16, $16, $16 ; Sync bytes
- .byte $24 ; End of header marker
+ .byte $16, $16, $16 ; Sync bytes
+ .byte $24 ; End of header marker
- .byte $00 ; $2B0
- .byte $00 ; $2AF
- .byte $80 ; $2AE Machine code flag
- .byte $C7 ; $2AD Autoload flag
- .dbyt __BSS_LOAD__ ; $2AB
- .dbyt __RAM_START__ ; $2A9
- .byte $00 ; $2A8
- .byte $00 ; Zero terminated name
+ .byte $00 ; $2B0
+ .byte $00 ; $2AF
+ .byte $80 ; $2AE Machine code flag
+ .byte $C7 ; $2AD Autoload flag
+ .dbyt __BSS_LOAD__ ; $2AB
+ .dbyt __RAM_START__ ; $2A9
+ .byte $00 ; $2A8
+ .byte ((.VERSION >> 8) & $0F) + '0'
+ .byte ((.VERSION >> 4) & $0F) + '0'
+ .byte (.VERSION & $0F) + '0'
+ .byte $00 ; Zero terminated compiler version
; ------------------------------------------------------------------------
; Place the startup code in a special segment.
-.segment "STARTUP"
+.segment "STARTUP"
; Save the zero page area we're about to use
- ldx #zpspace-1
+ ldx #zpspace-1
L1: lda sp,x
- sta zpsave,x ; Save the zero page locations we need
+ sta zpsave,x ; Save the zero page locations we need
dex
- bpl L1
+ bpl L1
; Clear the BSS data
; Unprotect columns 0 and 1
- lda STATUS
- sta stsave
- and #%11011111
- sta STATUS
+ lda STATUS
+ sta stsave
+ and #%11011111
+ sta STATUS
; Save system stuff and setup the stack
- tsx
- stx spsave ; save system stk ptr
+ tsx
+ stx spsave ; Save system stk ptr
- lda #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
+ lda #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
sta sp
lda #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
- sta sp+1 ; Set argument stack ptr
+ sta sp+1 ; Set argument stack ptr
; Call module constructors
; Push arguments and call main()
- jsr callmain
+ jsr callmain
; Call module destructors. This is also the _exit entry.
ldx spsave
txs
- lda stsave
- sta STATUS
+ lda stsave
+ sta STATUS
; Copy back the zero page stuff
- ldx #zpspace-1
+ ldx #zpspace-1
L2: lda zpsave,x
sta sp,x
dex
- bpl L2
+ bpl L2
; Back to BASIC
; ------------------------------------------------------------------------
; Data
-.segment "ZPSAVE"
+.segment "ZPSAVE"
-zpsave: .res zpspace
+zpsave: .res zpspace
.bss
-spsave: .res 1
-stsave: .res 1
-
-
+spsave: .res 1
+stsave: .res 1
}
MEMORY {
ZP: file = "", define = yes, start = $00E2, size = $001A;
- TAPEHDR: file = %O, type = ro, start = $0000, size = $000E;
+ TAPEHDR: file = %O, type = ro, start = $0000, size = $0011;
RAM: file = %O, define = yes, start = $0500, size = $9300 - __STACKSIZE__;
}
SEGMENTS {
CODE: load = RAM, type = ro;
RODATA: load = RAM, type = ro;
DATA: load = RAM, type = rw;
- ZPSAVE: load = RAM, type = bss;
BSS: load = RAM, type = bss, define = yes;
+ ZPSAVE: load = RAM, type = bss;
ZEROPAGE: load = ZP, type = zp;
}
FEATURES {