interruptor support by Stefan Haubenthal
git-svn-id: svn://svn.cc65.org/cc65/trunk@5055 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -5,18 +5,19 @@
|
|||||||
; Mark Keates
|
; Mark Keates
|
||||||
; Freddy Offenga
|
; Freddy Offenga
|
||||||
; Christian Groessler
|
; Christian Groessler
|
||||||
|
; Stefan Haubenthal
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _exit
|
.export _exit
|
||||||
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
||||||
|
|
||||||
.import initlib, donelib, callmain
|
.import initlib, donelib
|
||||||
.import zerobss, pushax
|
.import callmain, zerobss, callirq
|
||||||
.import _main, __filetab, getfd
|
.import __INTERRUPTOR_COUNT__
|
||||||
.import __STARTUP_LOAD__, __ZPSAVE_LOAD__
|
.import __STARTUP_LOAD__, __ZPSAVE_LOAD__
|
||||||
.import __RESERVED_MEMORY__
|
.import __RESERVED_MEMORY__
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
.include "atari.inc"
|
.include "atari.inc"
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
@@ -41,7 +42,7 @@
|
|||||||
|
|
||||||
; Save the zero page locations we need
|
; Save the zero page locations we need
|
||||||
|
|
||||||
ldx #zpspace-1
|
ldx #zpspace-1
|
||||||
L1: lda sp,x
|
L1: lda sp,x
|
||||||
sta zpsave,x
|
sta zpsave,x
|
||||||
dex
|
dex
|
||||||
@@ -51,12 +52,12 @@ L1: lda sp,x
|
|||||||
|
|
||||||
jsr zerobss
|
jsr zerobss
|
||||||
|
|
||||||
; setup the stack
|
; Setup the stack
|
||||||
|
|
||||||
tsx
|
tsx
|
||||||
stx spsave
|
stx spsave
|
||||||
|
|
||||||
; report memory usage
|
; Report memory usage
|
||||||
|
|
||||||
lda APPMHI
|
lda APPMHI
|
||||||
sta appmsav ; remember old APPMHI value
|
sta appmsav ; remember old APPMHI value
|
||||||
@@ -73,18 +74,31 @@ L1: lda sp,x
|
|||||||
sta APPMHI+1
|
sta APPMHI+1
|
||||||
sta sp+1 ; setup runtime stack part 2
|
sta sp+1 ; setup runtime stack part 2
|
||||||
|
|
||||||
|
; If we have IRQ functions, chain our stub into the IRQ vector
|
||||||
|
|
||||||
|
lda #<__INTERRUPTOR_COUNT__
|
||||||
|
beq NoIRQ1
|
||||||
|
lda VVBLKI
|
||||||
|
ldx VVBLKI+1
|
||||||
|
sta IRQInd+1
|
||||||
|
stx IRQInd+2
|
||||||
|
lda #6
|
||||||
|
ldy #<IRQStub
|
||||||
|
ldx #>IRQStub
|
||||||
|
jsr SETVBV
|
||||||
|
|
||||||
; Call module constructors
|
; Call module constructors
|
||||||
|
|
||||||
jsr initlib
|
NoIRQ1: jsr initlib
|
||||||
|
|
||||||
; set left margin to 0
|
; Set left margin to 0
|
||||||
|
|
||||||
lda LMARGN
|
lda LMARGN
|
||||||
sta old_lmargin
|
sta old_lmargin
|
||||||
ldy #0
|
ldy #0
|
||||||
sty LMARGN
|
sty LMARGN
|
||||||
|
|
||||||
; set keyb to upper/lowercase mode
|
; Set keyb to upper/lowercase mode
|
||||||
|
|
||||||
ldx SHFLOK
|
ldx SHFLOK
|
||||||
stx old_shflok
|
stx old_shflok
|
||||||
@@ -92,7 +106,7 @@ L1: lda sp,x
|
|||||||
|
|
||||||
; Initialize conio stuff
|
; Initialize conio stuff
|
||||||
|
|
||||||
dey ; Set X to $FF
|
dey ; Set X to $FF
|
||||||
sty CH
|
sty CH
|
||||||
|
|
||||||
; Push arguments and call main
|
; Push arguments and call main
|
||||||
@@ -103,22 +117,32 @@ L1: lda sp,x
|
|||||||
|
|
||||||
_exit: jsr donelib ; Run module destructors
|
_exit: jsr donelib ; Run module destructors
|
||||||
|
|
||||||
|
; Reset the IRQ vector if we chained it.
|
||||||
|
|
||||||
|
pha ; Save the return code on stack
|
||||||
|
lda #<__INTERRUPTOR_COUNT__
|
||||||
|
beq NoIRQ2
|
||||||
|
lda #6
|
||||||
|
ldy IRQInd+1
|
||||||
|
ldx IRQInd+2
|
||||||
|
jsr SETVBV
|
||||||
|
|
||||||
; Restore system stuff
|
; Restore system stuff
|
||||||
|
|
||||||
ldx spsave
|
NoIRQ2: ldx spsave
|
||||||
txs ; Restore stack pointer
|
txs ; Restore stack pointer
|
||||||
|
|
||||||
; restore left margin
|
; Restore left margin
|
||||||
|
|
||||||
lda old_lmargin
|
lda old_lmargin
|
||||||
sta LMARGN
|
sta LMARGN
|
||||||
|
|
||||||
; restore kb mode
|
; Restore kb mode
|
||||||
|
|
||||||
lda old_shflok
|
lda old_shflok
|
||||||
sta SHFLOK
|
sta SHFLOK
|
||||||
|
|
||||||
; restore APPMHI
|
; Restore APPMHI
|
||||||
|
|
||||||
lda appmsav
|
lda appmsav
|
||||||
sta APPMHI
|
sta APPMHI
|
||||||
@@ -133,7 +157,7 @@ L2: lda zpsave,x
|
|||||||
dex
|
dex
|
||||||
bpl L2
|
bpl L2
|
||||||
|
|
||||||
; turn on cursor
|
; Turn on cursor
|
||||||
|
|
||||||
inx
|
inx
|
||||||
stx CRSINH
|
stx CRSINH
|
||||||
@@ -142,11 +166,26 @@ L2: lda zpsave,x
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; The IRQ vector jumps here, if condes routines are defined with type 2.
|
||||||
|
|
||||||
|
IRQStub:
|
||||||
|
cld ; Just to be sure
|
||||||
|
jsr callirq ; Call the functions
|
||||||
|
jmp IRQInd ; Jump to the saved IRQ vector
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Data
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
IRQInd: jmp $0000
|
||||||
|
|
||||||
; *** end of main startup code
|
; *** end of main startup code
|
||||||
|
|
||||||
.segment "ZPSAVE"
|
.segment "ZPSAVE"
|
||||||
|
|
||||||
zpsave: .res zpspace
|
zpsave: .res zpspace
|
||||||
|
|
||||||
.bss
|
.bss
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user