New target c16
git-svn-id: svn://svn.cc65.org/cc65/trunk@1563 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
109
libsrc/c16/crt0.s
Normal file
109
libsrc/c16/crt0.s
Normal file
@@ -0,0 +1,109 @@
|
||||
;
|
||||
; Startup code for cc65 (C16 version)
|
||||
;
|
||||
; This must be the *first* file on the linker command line
|
||||
;
|
||||
; Note: The C16 is actually the Plus/4 with just 16KB of memory. So many
|
||||
; things are similar here, and we even use the plus4.inc include file.
|
||||
;
|
||||
|
||||
.export _exit
|
||||
.import initlib, donelib
|
||||
.import push0, _main, zerobss
|
||||
.import MEMTOP, RESTOR, BSOUT, CLRCH
|
||||
|
||||
.include "zeropage.inc"
|
||||
.include "../plus4/plus4.inc"
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; BASIC header with a SYS call
|
||||
|
||||
.code
|
||||
|
||||
.org $0FFF
|
||||
.word Head ; Load address
|
||||
Head: .word @Next
|
||||
.word 1000 ; Line number
|
||||
.byte $9E,"4109" ; SYS 4109
|
||||
.byte $00 ; End of BASIC line
|
||||
@Next: .word 0 ; BASIC end marker
|
||||
.reloc
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Actual code
|
||||
|
||||
ldx #zpspace-1
|
||||
L1: lda sp,x
|
||||
sta zpsave,x ; save the zero page locations we need
|
||||
dex
|
||||
bpl L1
|
||||
|
||||
; Close open files
|
||||
|
||||
jsr CLRCH
|
||||
|
||||
; Switch to second charset
|
||||
|
||||
lda #14
|
||||
jsr BSOUT
|
||||
|
||||
; Clear the BSS data
|
||||
|
||||
jsr zerobss
|
||||
|
||||
; Save system stuff and setup the stack
|
||||
|
||||
tsx
|
||||
stx spsave ; save system stk ptr
|
||||
|
||||
sec
|
||||
jsr MEMTOP ; Get top memory
|
||||
cpy #$80 ; We can only use the low 32K :-(
|
||||
bcc MemOk
|
||||
ldy #$80
|
||||
ldx #$00
|
||||
MemOk: stx sp
|
||||
sty sp+1 ; set argument stack ptr
|
||||
|
||||
; Call module constructors
|
||||
|
||||
jsr initlib
|
||||
|
||||
; Pass an empty command line
|
||||
|
||||
jsr push0 ; argc
|
||||
jsr push0 ; argv
|
||||
|
||||
ldy #4 ; Argument size
|
||||
jsr _main ; call the users code
|
||||
|
||||
; Call module destructors. This is also the _exit entry.
|
||||
|
||||
_exit: jsr donelib ; Run module destructors
|
||||
|
||||
; Restore system stuff
|
||||
|
||||
ldx spsave
|
||||
txs
|
||||
|
||||
; Copy back the zero page stuff
|
||||
|
||||
ldx #zpspace-1
|
||||
L2: lda zpsave,x
|
||||
sta sp,x
|
||||
dex
|
||||
bpl L2
|
||||
|
||||
; Reset changed vectors
|
||||
|
||||
jmp RESTOR
|
||||
|
||||
|
||||
.data
|
||||
zpsave: .res zpspace
|
||||
|
||||
.bss
|
||||
spsave: .res 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user