Subject: Re: [stella] Climber5 source and binary From: "Andrew Davie" <atari2600@xxxxxxxxxxxxx> Date: Thu, 17 Apr 2003 15:18:40 +1000 |
Hi Dennis Thanks for distributing the code. Had a very brief look and noticed.... SetClimberSpeed SUBROUTINE ldy level ; get the current level number dey ; it's used as a table index cpy #MAX_LEVEL ; if less than MAX_LEVEL set game speed bcc .setClimberSpeed ldy #$02 You should change that last line to ldy #MAX_LEVEL-1 at some point :) Since we're already looking at this bit of code, let's see what we can do.... First, you don't really need that "dey" in there Just access and compare with address-1 or value-1 eg: ldy level cpy #MAX_LEVEL-1 ; instead of dey/cpy #MAX_LEVEL bcc .setClimberSpeed ldy #MAX_LEVEL-1 ; ditto, we've taken 1 off the comparison .setClimberSpeed lda NTSCGameSpeedTable-1,y ; and access the table 1 byte earlier, etc... The level is assumed to run from 1 to MAX_LEVEL So there are MAX_LEVEL actual levels, and the table is indexed using the y register less 1 In the same routine, there's a branch/check for NTSC/PAL. Assuming you're using D7 of SWCHB for your switch, you could interleave (mmh, my favourite Atari-word) the NTSC and PAL tables by rolling the PAL/NTSC onto the low bit of the table index, and use code like this... SetClimberSpeed SUBROUTINE lda level cmp #MAX_LEVEL bcc lOK lda #MAX_LEVEL lOK asl SWCHB ; yes, SWCHB is read-only - will an ASL on this correctly set the C? I'm assuming so rol ; CARRY -> d0 of accumulator, simultaneously multiplying level * 2 tay ; now indexes via (level*2) + TV_TYPE lda GameSpeedTable-2,y ; interleaved PAL/NTSC table sta climberMotion ; set the climber speed rts GameSpeedTable .byte NTSC_LEVEL_1_SPEED, PAL_LEVEL_1_SPEED .byte NTSC_LEVEL_2_SPEED, PAL_LEVEL_2_SPEED .byte NTSC_LEVEL_3_SPEED, PAL_LEVEL_3_SPEED .byte NTSC_LEVEL_4_SPEED, PAL_LEVEL_4_SPEED The same thing could be done for SetGirderSpeed The above (assuming the asl SWCHB works) would be 18 bytes of ROM The original is 22 bytes of ROM. BTW, it's very odd defining tables with the # in front of equated values like this.... .byte #PAL_LEVEL_3_SPEED that # is at best superfluous - on most assemblers it would generate an error, I think. While we're playing with MAX_LEVEL stuff, the following code is *incredibly* dangerous... ldy level ; use the level number as a read offset to dey ; get an and value for the start count tya ; this is used to change the frequency the and #MAX_LEVEL-1 ; girders start to move tay That ONLY works because MAX_LEVEL currently happens to be a power of 2. If you added one more level, the whole thing would fall over. This needs to be changed - if you don't see why, I'll explain - just ask. That's all for now. Have fun :) Cheers A ---------------------------------------------------------------------------------------------- Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://www.biglist.com/lists/stella/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[stella] Climber5 source and binary, Dennis Debro | Thread | RE: [stella] Climber5 source and bi, Dennis Debro |
[stella] Climber5 source and binary, Dennis Debro | Date | RE: [stella] Climber5 source and bi, Dennis Debro |
Month |