; code structure. The C stack is located at the end of the RAM memory
; segment and grows downward. Bastian Schick's executable header is put
; on the front of the fully linked binary (see EXEHDR segment.)
-;
-; This must be the *first* file on the linker command line
;
.include "lynx.inc"
.export _exit
- .exportzp __iodat,__iodir,__viddma,__sprsys
+ .export __STARTUP__ : absolute = 1 ; Mark as startup
- .import initlib, donelib
+ .import callirq, initlib, donelib
.import zerobss
.import callmain
.import _main
- .import __CODE_LOAD__, __BSS_LOAD__
- .import __RAM_START__, __RAM_SIZE__
+ .import __INTERRUPTOR_COUNT__
+ .import __RAM_START__, __RAM_SIZE__, __STACKSIZE__
.include "zeropage.inc"
-
-
-; ------------------------------------------------------------------------
-; EXE header (BLL header)
-
- .segment "EXEHDR"
- .word $0880
- .byte >__CODE_LOAD__, <__CODE_LOAD__
- .byte >__BSS_LOAD__, <(__BSS_LOAD__ - 1)
- .byte $42,$53
- .byte $39,$33
-
+ .include "extzp.inc"
; ------------------------------------------------------------------------
; Mikey and Suzy init data, reg offsets and data
MikeyInitData: .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$29
-; ------------------------------------------------------------------------
-; mikey and suzy shadow registers
-
- .segment "EXTZP" : zeropage
-
-__iodat: .res 1
-__iodir: .res 1
-__viddma: .res 1
-__sprsys: .res 1
-
-
; ------------------------------------------------------------------------
; Actual code
- .code
+ .segment "STARTUP"
; set up system
; setup the stack
- lda #<(__RAM_START__ + __RAM_SIZE__)
+ lda #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
sta sp
- lda #>(__RAM_START__ + __RAM_SIZE__)
+ lda #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
sta sp+1
; Init Mickey
jsr zerobss
+; If we have IRQ functions, set the IRQ vector
+; as Lynx is a console there is not much point in releasing the IRQ
+
+ lda #<__INTERRUPTOR_COUNT__
+ beq NoIRQ1
+ lda #<IRQStub
+ ldx #>IRQStub
+ sei
+ sta INTVECTL
+ stx INTVECTH
+ cli
+
; Call module constructors
- jsr initlib
+NoIRQ1: jsr initlib
; Push arguments and call main
noret: bra noret
+ .segment "CODE"
+IRQStub:
+ phy
+ phx
+ pha
+ cld
+ jsr callirq
+ lda INTSET
+ sta INTRST
+ pla
+ plx
+ ply
+ rti
+