]> git.sur5r.net Git - cc65/blobdiff - libsrc/lynx/crt0.s
The spans do now contain the size of a span, no longer the end offset.
[cc65] / libsrc / lynx / crt0.s
index 7f0967b1b6c1b3abec1aae734ba4896de5d6e208..a7252f84792400b771de3c972f685994fe5296cf 100644 (file)
 ; 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
+        .export         __STARTUP__ : absolute = 1      ; Mark as startup
 
-       .import         initlib, donelib
+       .import         callirq, initlib, donelib
        .import         zerobss
        .import         callmain
        .import         _main
-       .import         __BSS_LOAD__
-       .import         __RAM_START__, __RAM_SIZE__
+       .import         __INTERRUPTOR_COUNT__
+       .import         __RAM_START__, __RAM_SIZE__, __STACKSIZE__
 
        .include        "zeropage.inc"
         .include        "extzp.inc"
 
-
-; ------------------------------------------------------------------------
-; EXE header (BLL header)
-
-       .segment "EXEHDR"
-       .word   $0880
-       .dbyt   __RAM_START__
-               .dbyt   __BSS_LOAD__ - 1
-       .byte   $42,$53
-       .byte   $39,$33
-
-
 ; ------------------------------------------------------------------------
 ; Mikey and Suzy init data, reg offsets and data
 
@@ -94,9 +81,9 @@ MikeyInitData:  .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$2
 
 ; 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
@@ -133,9 +120,21 @@ sloop:  ldy     SuzyInitReg,x
 
        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
 
@@ -150,3 +149,17 @@ _exit:  jsr     donelib         ; Run module destructors
 noret:  bra     noret
 
 
+       .segment "CODE"
+IRQStub:
+       phy
+       phx
+       pha
+       cld
+               jsr     callirq
+       lda     INTSET
+       sta     INTRST
+       pla
+       plx
+       ply
+       rti
+