]> git.sur5r.net Git - cc65/blobdiff - libsrc/lynx/crt0.s
CMOS optimisation
[cc65] / libsrc / lynx / crt0.s
index a49902c4aea63c986891677169b7345d37451b73..da2162b470d2d8400d27dc43237300f97d992090 100644 (file)
@@ -9,43 +9,29 @@
 ;
 ; ***
 ;
-; Startup code for cc65 (Lynx version).  Based on Atari 8-bit startup
+; Startup code for cc65 (Lynx version).  Based on the Atari 8-bit startup
 ; 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
+; segment, and grows downward.  Bastian Schick's executable header is put
 ; on the front of the fully linked binary (see EXEHDR segment.)
 ;
 
-       .include        "lynx.inc"
-       .export         _exit
+        .export         _exit
         .export         __STARTUP__ : absolute = 1      ; Mark as startup
 
-       .import         callirq, initlib, donelib
-       .import         zerobss
-       .import         callmain
-       .import         _main
-       .import         __BSS_LOAD__
-       .import         __INTERRUPTOR_COUNT__
-       .import         __RAM_START__, __RAM_SIZE__
+        .import         initlib, donelib
+        .import         zerobss
+        .import         callmain
+        .import         _main
+        .import         __MAIN_START__, __MAIN_SIZE__, __STACKSIZE__
 
-       .include        "zeropage.inc"
+        .include        "zeropage.inc"
         .include        "extzp.inc"
-
-
-; ------------------------------------------------------------------------
-; EXE header (BLL header)
-
-       .segment "EXEHDR"
-       .word   $0880
-       .dbyt   __RAM_START__
-               .dbyt   __BSS_LOAD__ - __RAM_START__ + 10
-       .byte   $42,$53
-       .byte   $39,$33
-
+        .include        "lynx.inc"
 
 ; ------------------------------------------------------------------------
 ; Mikey and Suzy init data, reg offsets and data
 
-       .rodata
+        .rodata
 
 SuzyInitReg:    .byte $28,$2a,$04,$06,$92,$83,$90
 SuzyInitData:   .byte $7f,$7f,$00,$00,$24,$f3,$01
@@ -53,126 +39,97 @@ SuzyInitData:   .byte $7f,$7f,$00,$00,$24,$f3,$01
 MikeyInitReg:   .byte $00,$01,$08,$09,$20,$28,$30,$38,$44,$50,$8a,$8b,$8c,$92,$93
 MikeyInitData:  .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$29
 
-
 ; ------------------------------------------------------------------------
 ; Actual code
 
-       .segment "STARTUP"
+        .segment "STARTUP"
 
-; set up system
+; Set up the system.
 
-       sei
-       cld
-       ldx     #$FF
-       txs
+        sei
+        ldx     #$FF
+        txs
 
-; init bank switching
+; Init the bank switching.
 
-               lda     #$C
-               sta     MAPCTL                  ; $FFF9
+        lda     #$C
+        sta     MAPCTL          ; $FFF9
 
-; disable all timer interrupts
+; Disable all timer interrupts.
 
-               lda     #$80
-               trb     TIM0CTLA
-               trb     TIM1CTLA
-               trb     TIM2CTLA
-               trb     TIM3CTLA
-               trb     TIM5CTLA
-               trb     TIM6CTLA
-               trb     TIM7CTLA
+        lda     #$80
+        trb     TIM0CTLA
+        trb     TIM1CTLA
+        trb     TIM2CTLA
+        trb     TIM3CTLA
+        trb     TIM5CTLA
+        trb     TIM6CTLA
+        trb     TIM7CTLA
 
-; disable TX/RX IRQ, set to 8E1
+; Disable the TX/RX IRQ; set to 8E1.
 
-               lda     #%11101
-               sta     SERCTL
+        lda     #%11101
+        sta     SERCTL
 
-; clear all pending interrupts
+; Clear all pending interrupts.
 
-               lda     INTSET
-               sta     INTRST
+        lda     INTSET
+        sta     INTRST
 
-; setup the stack
+; Set up the stack.
 
-       lda     #<(__RAM_START__ + __RAM_SIZE__)
-       sta     sp
-       lda     #>(__RAM_START__ + __RAM_SIZE__)
-       sta     sp+1
+        lda     #<(__MAIN_START__ + __MAIN_SIZE__ + __STACKSIZE__)
+        ldx     #>(__MAIN_START__ + __MAIN_SIZE__ + __STACKSIZE__)
+        sta     sp
+        stx     sp+1
 
-; Init Mickey
+; Init Mickey.
 
-       ldx     #.sizeof(MikeyInitReg)-1
+        ldx     #.sizeof(MikeyInitReg)-1
 mloop:  ldy     MikeyInitReg,x
-       lda     MikeyInitData,x
-       sta     $fd00,y
-       dex
-       bpl     mloop
+        lda     MikeyInitData,x
+        sta     $fd00,y
+        dex
+        bpl     mloop
 
-; these are RAM-shadows of read only regs
+; These are RAM-shadows of read-only regs.
 
-       ldx     #$1b
-       stx     __iodat
-       dex                             ; $1A
-               stx     __iodir
-       ldx     #$d
-       stx     __viddma
+        ldx     #$1b
+        stx     __iodat
+        dex                     ; $1A
+        stx     __iodir
+        ldx     #$d
+        stx     __viddma
 
-; Init Suzy
+; Init Suzy.
 
-       ldx     #.sizeof(SuzyInitReg)-1
+        ldx     #.sizeof(SuzyInitReg)-1
 sloop:  ldy     SuzyInitReg,x
-       lda     SuzyInitData,x
-       sta     $fc00,y
-       dex
-       bpl     sloop
+        lda     SuzyInitData,x
+        sta     $fc00,y
+        dex
+        bpl     sloop
 
-       lda     #$24
-       sta     __sprsys
+        lda     #$24
+        sta     __sprsys
+        cli
 
-; Clear the BSS data
+; Clear the BSS data.
 
-       jsr     zerobss
+        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
+; Call the module constructors.
 
-        lda     #<__INTERRUPTOR_COUNT__
-       beq     NoIRQ1
-       lda     #<IRQStub
-       ldx     #>IRQStub
-       sei
-       sta     INTVECTL
-       stx     INTVECTH
-       cli
+        jsr     initlib
 
-; Call module constructors
-
-NoIRQ1: jsr     initlib
-
-; Push arguments and call main
+; Push the command-line arguments; and, call main().
 
         jsr     callmain
 
-; Call module destructors. This is also the _exit entry.
+; Call the module destructors. This is also the exit() entry.
 
 _exit:  jsr     donelib         ; Run module destructors
 
 ; Endless loop
 
 noret:  bra     noret
-
-
-       .segment "CODE"
-IRQStub:
-       phy
-       phx
-       pha
-       cld
-               jsr     callirq
-       lda     INTSET
-       sta     INTRST
-       pla
-       plx
-       ply
-       rti
-