2014-01-06 20:24:29 +01:00
|
|
|
; Cartridge start routine
|
|
|
|
;
|
|
|
|
; Christian Groessler, 06-Jan-2014
|
|
|
|
|
|
|
|
.ifndef __ATARIXL__
|
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
.export cartstart
|
2014-01-06 20:24:29 +01:00
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
.import start
|
|
|
|
.import __DATA_LOAD__, __DATA_SIZE__, __DATA_RUN__
|
|
|
|
.importzp ptr1, ptr2, tmp1, tmp2
|
2014-01-06 20:24:29 +01:00
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
.include "atari.inc"
|
2014-01-06 20:24:29 +01:00
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
.segment "STARTUP"
|
2014-01-06 20:24:29 +01:00
|
|
|
|
|
|
|
; start routine of cartridge
|
|
|
|
; copy data segment to RAM and chain to entry point of crt0.s
|
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
cartstart: lda #<__DATA_LOAD__
|
|
|
|
sta ptr1
|
|
|
|
lda #>__DATA_LOAD__
|
|
|
|
sta ptr1+1
|
|
|
|
lda #<__DATA_RUN__
|
|
|
|
sta ptr2
|
|
|
|
lda #>__DATA_RUN__
|
|
|
|
sta ptr2+1
|
|
|
|
lda #>__DATA_SIZE__
|
|
|
|
sta tmp2
|
|
|
|
lda #<__DATA_SIZE__
|
|
|
|
sta tmp1
|
|
|
|
jsr memcopy
|
|
|
|
jsr start ; run program
|
|
|
|
jmp (DOSVEC) ; return to DOS
|
2014-01-06 20:24:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
; routine taken from http://www.obelisk.demon.co.uk/6502/algorithms.html
|
|
|
|
;
|
|
|
|
; copy memory
|
2014-01-14 23:12:35 +01:00
|
|
|
; ptr1 - source
|
|
|
|
; ptr2 - destination
|
2014-01-06 20:24:29 +01:00
|
|
|
; tmp2:tmp1 - len
|
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
.proc memcopy
|
2014-01-06 20:24:29 +01:00
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
ldy #0
|
|
|
|
ldx tmp2
|
|
|
|
beq last
|
|
|
|
pagecp: lda (ptr1),y
|
|
|
|
sta (ptr2),y
|
|
|
|
iny
|
|
|
|
bne pagecp
|
|
|
|
inc ptr1+1
|
|
|
|
inc ptr2+1
|
|
|
|
dex
|
|
|
|
bne pagecp
|
|
|
|
last: cpy tmp1
|
|
|
|
beq done
|
|
|
|
lda (ptr1),y
|
|
|
|
sta (ptr2),y
|
|
|
|
iny
|
|
|
|
bne last
|
|
|
|
done: rts
|
2014-01-06 20:24:29 +01:00
|
|
|
|
|
|
|
.endproc
|
|
|
|
|
2014-01-14 23:12:35 +01:00
|
|
|
.endif ; .ifndef __ATARIXL__
|