Sparse_Invaders_Source_ _Relocate.txt - simondotm/stardot-wiki GitHub Wiki
;-------------------------------------------------------------------------------
; Relocate
; Written by Steve O'Leary
;
; Copyright 2008,2009 Neil Beresford
;
; This file is part of Sparse Invaders.
; Sparse Invaders is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; Sparse Invaders is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with Sparse Invaders. If not, see <
http://www.gnu.org/licenses/
>.
;
;
; Notes:
;
;-------------------------------------------------------------------------------
.org $880 ; printer buffer
Main:
; we have loaded the code at 1900 but it's been assembled to run from E00, so just copy
; the code from 1900 down to 900. We know it's length of the block we've loaded as Swift
; will tell you this from the properties of Sparse Invaders source file. You can
; also find it out by exmaining the disk image created.
.alias LastAddress $1900+ $2200 ; 2200 is the size of our code,just setting address
; that we stop copying at when we reach it.
CopyFrom:
lda $1900
CopyTo:
sta $900
inc CopyFrom+1 ; lo byte
bne NoCarry ; Not gone to zeror, so effectivly no carry
; If we get here however....
inc CopyFrom+2 ; add in the effective carry (note we use BEQ above to
; detect for rolling over from 255 to 0 as the command
; INC does not effect the carry flag.
NoCarry:
; we now do the same increment for the copyto position
inc CopyTo+1 ; lo byte
bne NoCarry2 ; Not gone to zeror, so effectivly no carry
; If we get here however....
inc CopyTo+2 ; add in the effective carry (note we use BEQ above to
; detect for rolling over from 255 to 0 as the command
; INC does not effect the carry flag.
NoCarry2:
; now wecheck if we've copied all the bytes
lda CopyFrom+2 ; check hi byte first
cmp #>LastAddress
BNE CopyFrom ; Go back to start of loop if not equal
; high byte is equal, check lo byte
lda CopyFrom+1
cmp #<LastAddress
BNE CopyFrom ; if no equal, carry on copying
; we've finished copying all the bytes, run the code at the new address
JSR $0900 ; start of code to run
RTS