2 ; Startup code for cc65 (CreatiVision version)
6 .export __STARTUP__ : absolute = 1 ; Mark as startup
8 .import zerobss, copydata
9 .import initlib, donelib, callmain
10 .import __VECTORS_LOAD__, __VECTORS_RUN__, __VECTORS_SIZE__
11 .import __ZP_LAST__, __STACKSIZE__, __RAM_START__
13 .include "creativision.inc"
14 .include "zeropage.inc"
16 ; ------------------------------------------------------------------------
23 ; Copy the IRQ vectors
24 ldx #<__VECTORS_SIZE__ - 1
25 : lda __VECTORS_LOAD__,x
30 ; Setup the CPU stack ptr
31 ldx #<__RAM_START__ - 1
37 ; Copy data from ROM to RAM
40 ; Setup the argument stack ptr
41 lda #<(__ZP_LAST__ + __STACKSIZE__)
42 ldx #>(__ZP_LAST__ + __STACKSIZE__)
46 ; Call module constructors
49 ; enable vertical blank interrupts in the display controller
50 lda #$E0 ; 16K RAM, Active Display, Mode 1, VBI enabled
52 jsr BIOS_WRITE_VDP_REG
60 ; Call module destructors. This is also the _exit entry.
63 ; A Creativision program isn't supposed to exit.
66 ; ------------------------------------------------------------------------
67 ; Define the IRQ vectors.
71 irq1: jmp BIOS_IRQ1_ADDR
72 irq2: jmp BIOS_IRQ2_ADDR
74 ; ------------------------------------------------------------------------
75 ; Define CART setup values for BIOS.
80 ; This is where the entry point of the program needs to be
87 ; This sets to Graphics Mode 1
88 .byte $00 ; Register 0
89 .byte $C0 ; Register 1 16K RAM, Active Display, Mode 1, VBI disabled
90 .byte $04 ; Register 2 Name Table at $1000 - $12FF
91 .byte $60 ; Register 3 Colour Table at $1800 - $181F
92 .byte $00 ; Register 4 Pattern Table at $0000 - $07FF
93 .byte $10 ; Register 5 Sprite Attribute at $0800 - $087F
94 .byte $01 ; Register 6 Sprite Pattern
95 .byte $F1 ; Register 7 Text colour Foreground / background
99 ; BIOS Vector after NMI or RESET
100 ; Keeping with retail cartridges, we jump back to BIOS ROM and have it
101 ; setup zeropage etc, and show the Creativision logo and copyright.
102 .addr BIOS_NMI_RESET_ADDR
104 ; BIOS Short Interrupt Handler
105 ; Vectored from BIOS ROM:FE2C. This should contain a pointer to the user's
106 ; BIOS interrupt handler.
109 ; ------------------------------------------------------------------------