cool. i've toyed around a bit with a damage bar, but it's far from being any good yet.
something else: we're doing f8 bank switching, and the adresses that trigger the bankswitches are 1ff8/1ff9. so why do you reserve 4 bytes
from 1ff6-1ff9 ? as a reserve in case we run out of rom space, so that we can change to a 16k game ?
and again something else:
SEG.U vars
ORG $80
; Both Banks:
gameState ds 1
bcdScore ds 1
frameCounter ds 1
rnd ds 1
tempVar1 ds 1
tempVar2 ds 1
tempVar3 ds 1
tempVar4
...
SEG.U variables
ORG $80
; Both Banks:
gameState ds 1
bcdScore ds 1
frameCounter ds 1
rnd ds 1
tempVar1 ds 1
tempVar2 ds 1
tempVar3 ds 1
tempVar4
so this are variables that are needed by both banks. but why do you duplicate them in the source code ? imo this shouldn't be necessary,
i mean, the ram doesn't have to do anything with bankswitching, that is, it's always there, no matter which bank is switched in...
wouldn't something like this be better (since no code is duplicated) ?
; variables for both banks
seg.u commondata
org $80
gameState ds 1
bcdScore ds 1
frameCounter ds 1
rnd ds 1
tempVar1 ds 1
tempVar2 ds 1
tempVar3 ds 1
tempVar4
COMMONDATA_END = .
; variables for bank 0
seg.u bank0data
ORG COMMONDATA_END
; define variables for bank0 here
; variables for bank 1
seg.u bank1data
ORG COMMONDATA_END
; define variables for bank1 here
as you can see, the segment commondata starts at 0x80.
then we have two segments, bank0data and bank1data.
those start both at COMMONDATA_END (right after commondata),
and they share the same address space, so it's actually
an overlay.
that's btw the mechanism i use in my own 2600 coding experiments to create overlays. so far it has always worked fine for me =)
probably you can't have it more convenient with dasm, but with ca65/ld65 you could of course write yourself a neat linker script and let the linker sort it out for you.
(note that i'm NOT suggesting to switch to ca65, i just said it could be even more convenient)