cc65/libsrc/atari/cartstart.s

68 lines
1.6 KiB
ArmAsm
Raw Normal View History

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
.segment "CODE"
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__