I don't know how, but I I'm still having the SNES crash, and I found out that it's doing it on "jml [LongJumpLocation]", even though it worked perfectly before.
Code: Select all
.proc object_identifier
rep #$20
lda .LOWORD(ObjectTable)
sta a:ObjectTableOffset
object_identifier_loop:
tcd
lda ObjectSlot::Identity
beq next_object
sta a:LongJumpLocation
lda ObjectSlot::Identity+1
sta a:LongJumpLocation+1
jml [LongJumpLocation]
next_object:
lda a:ObjectTableOffset ;says how many objects have been identified
clc
adc #ObjectSlotSize
sta a:ObjectTableOffset ;store the result for the next time we go through the loop
cmp .LOWORD(ObjectTable)+ObjectTableSize
bne object_identifier_loop ;if so, quit searching
rts
.endproc
Just incase I did something wrong in creating the memory map, here it is:
Code: Select all
# ca65 linker config for 256 KiB (2 Mbit) sfc file
# Physical areas of memory
MEMORY {
ZEROPAGE: start = $000000, size = $0100; # $0000-00ff -- zero page
# $0100-01ff -- stack
BSS: start = $000200, size = $1e00; # $0200-1fff -- RAM
BSS7E: start = $7e2000, size = $e000; # SNES work RAM, $7e2000-7effff
BSS7F: start = $7f0000, size = $10000; # SNES work RAM, $7f0000-$7ffff
ROM0: start = $808000, size = $8000, fill = yes;
ROM1: start = $818000, size = $8000, fill = yes;
ROM2: start = $828000, size = $8000, fill = yes;
ROM3: start = $838000, size = $8000, fill = yes;
ROM4: start = $848000, size = $8000, fill = yes;
ROM5: start = $858000, size = $8000, fill = yes;
ROM6: start = $868000, size = $8000, fill = yes;
ROM7: start = $878000, size = $8000, fill = yes;
}
# Logical areas code/data can be put into.
SEGMENTS {
CODE: load = ROM0, align = $100;
RODATA: load = ROM0, align = $100;
SNESHEADER: load = ROM0, start = $80ffc0;
CODE1: load = ROM1, align = $100, optional = yes;
RODATA1: load = ROM1, align = $100, optional = yes;
CODE2: load = ROM2, align = $100, optional = yes;
RODATA2: load = ROM2, align = $100, optional = yes;
CODE3: load = ROM3, align = $100, optional = yes;
RODATA3: load = ROM3, align = $100, optional = yes;
CODE4: load = ROM4, align = $100, optional = yes;
RODATA4: load = ROM4, align = $100, optional = yes;
CODE5: load = ROM5, align = $100, optional = yes;
RODATA5: load = ROM5, align = $100, optional = yes;
CODE6: load = ROM6, align = $100, optional = yes;
RODATA6: load = ROM6, align = $100, optional = yes;
CODE7: load = ROM7, align = $100, optional = yes;
RODATA7: load = ROM7, align = $100, optional = yes;
ZEROPAGE: load = ZEROPAGE, type = zp;
BSS: load = BSS, type = bss, align = $100, optional = yes;
BSS7E: load = BSS7E, type = bss, align = $100, optional = yes;
BSS7F: load = BSS7F, type = bss, align = $100, optional = yes;
}