Now i'm working on some 2 part games (especially games that load characters in the first part via DATA & POKE) to single file and crunch them.
To do some work i need a short assembler routine to move some bytes from a location to another:
Example: move 74 bytes ($4a) from location $1b50 to $1c70
I've a Carlsson's routine used to move 8192 bytes ($2000) from location $2000 to $a000 but since my assembler is not so good, i don't know how to modify it for my purpose.
Code: Select all
1400 A2 20 LDX #$20 from $2000
1402 86 FC STX $FC
1404 A9 A0 LDA #$A0 to $A000
1406 85 FE STA $FE
1408 A0 00 LDY #$00
140a 84 FB STY $FB
140c 84 FD STY $FD
140e B1 FB LDA ($FB),Y
1410 91 FD STA ($FD),Y
1412 C8 INY
1413 D0 F9 BNE $140E
1415 E6 FC INC $FC
1417 E6 FE INC $FE
1419 CA DEX
141a D0 F2 BNE $140E
141c 4C 22 FD JMP $FD22 RESET
Code: Select all
; Move memory down
;
; FROM = source start address
; TO = destination start address
; SIZE = number of bytes to move
;
MOVEDOWN LDY #0
LDX SIZEH
BEQ MD2
MD1 LDA (FROM),Y ; move a page at a time
STA (TO),Y
INY
BNE MD1
INC FROM+1
INC TO+1
DEX
BNE MD1
MD2 LDX SIZEL
BEQ MD4
MD3 LDA (FROM),Y ; move the remaining bytes
STA (TO),Y
INY
DEX
BNE MD3
MD4 RTS
Code: Select all
1100 A0 00 LDY #$00
1102 A6 00 LDX $00 <--- bytes to move HI
1104 F0 0E BEQ $1114
1106 B1 FB LDA ($FB),Y
1108 91 FD STA ($FD),Y
110a C8 INY
110b D0 F9 BNE $1106
110d E6 FC INC $FC
110f E6 FE INC $FE
1111 CA DEX
1112 D0 F2 BNE $1106
1114 A6 4A LDX $4A <--- bytes to move LO
1116 F0 08 BEQ $1120
1118 B1 FB LDA ($FB),Y
111a 91 FD STA ($FD),Y
111c C8 INY
111d CA DEX
111e D0 F8 BNE $1118
1120 60 RTS