.ifndef __ATARIXL__
-.import __CARTFLAGS__, cartinit, cartstart
-.export __CART_HEADER__: absolute = 1
+.import __CARTFLAGS__, cartinit, cartstart
+.export __CART_HEADER__: absolute = 1
-.include "atari.inc"
+.include "atari.inc"
- .segment "CARTHDR"
+ .segment "CARTHDR"
- .word cartstart ; start routine
- .byte 0 ; must be zero
- .byte <__CARTFLAGS__
- .word cartinit ; init routine
+ .word cartstart ; start routine
+ .byte 0 ; must be zero
+ .byte <__CARTFLAGS__
+ .word cartinit ; init routine
-.endif ; .ifndef __ATARIXL__
+.endif ; .ifndef __ATARIXL__
.ifndef __ATARIXL__
-.export cartstart
+.export cartstart
-.import start
-.import __DATA_LOAD__, __DATA_SIZE__, __DATA_RUN__
-.importzp ptr1, ptr2, tmp1, tmp2
+.import start
+.import __DATA_LOAD__, __DATA_SIZE__, __DATA_RUN__
+.importzp ptr1, ptr2, tmp1, tmp2
-.include "atari.inc"
+.include "atari.inc"
-.segment "STARTUP"
+.segment "STARTUP"
; start routine of cartridge
; copy data segment to RAM and chain to entry point of crt0.s
-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
+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
; routine taken from http://www.obelisk.demon.co.uk/6502/algorithms.html
;
; copy memory
-; ptr1 - source
-; ptr2 - destination
+; ptr1 - source
+; ptr2 - destination
; tmp2:tmp1 - len
-.proc memcopy
+.proc memcopy
- 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
+ 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
.endproc
-.endif ; .ifndef __ATARIXL__
+.endif ; .ifndef __ATARIXL__