Subject: Re: [stella] Death Derby, new build From: Thomas Jentzsch <tjentzsch@xxxxxx> Date: Sun, 7 Oct 2001 10:52:19 +0100 |
Glenn Saunders wrote: > In this build a lot of the stuff is laid out in memory, the sprites et. al. Your demo is showing a lot of flickering crap at the top. I guess that is intentional for now. When I tried to adjust this with Page-Up/Down in z26, the flickering crap seems to move(!) further down. Can't explain this, there seems something to be completely broken in your code. > I actually have a car showing up, but I don't like the routines that handle > the logic. Too much RAM and cycles. I agree, but here optimizations will make the explanations quite difficult. I'm giving you the same suggestions, that I gave to Manuel (s. Gunfight 2600, Feb, 13. 2001). The first step, you should try, is to use Y as THE universal rowcounter. Try not to use Y for anything else, and do all loading of the graphics (cars, later the pedestrians) with this rowcounter. That way you save a lot of cycles during the kernel and some RAM space. You have a two-line kernel, so let Y countdown every 2nd row. The kernel code for the car could look like this: P0Loop TYA SEC SBC SpriteStart ; contains the line where the car starts+1 ADC #SPRITEHEIGHT ; assuming the height is constant (i.E. 8) BCC .skipDraw LDA (P0_CurrentFramePtr),Y STA GRP0 .skipDraw: This requires, that you must do some a bit more complicated setup calculations for the pointers (i.E. P0_CurrentFramePtr). Currently this pointer is directly pointing to CarRotation0..4. For the code above, we must subtract the y-position, or: the value of the rowcounter Y when the car is drawn (i.E. 50). LDA #<CarRotation0 SEC SBC #50 STA P0_CurrentFramePtr LDA #>CarRotation0 SBC #0 STA P0_CurrentFramePtr+1 and LDA #51 STA SpriteStart And you have to arrange your data very carefully, if you want to avoid additional cycles for crossing a page. If your kernel is 180 lines tall, you countdown Y every 2nd line and the car can be displayed in every row, then your data must be inside 256*n+180/2 and 256*(n+1)-1. I hope, this makes sense to you. But my english is limited and here the kernel is starting to get complex. Maybe Manuel can explain this better. > I tried to use indirect addressing to set up pointers to the start of car > sprite ROM in order to handle the rotations but I don't think I understand > how to do this properly. I had to go back to hardcoding it to one car shape. > Please assist :) That's easier :) Replace LDX P0_CurrentRowCounter LDA (P0_CurrentFramePtr,X) ; indexed, indirect with LDY P0_CurrentRowCounter LDA (P0_CurrentFramePtr),Y ; indirect, indexed Another tip: InitializeTombstones ... DEX BPL InitializeTombstones ; replaces BNE ; remove the next 8 instructions Have fun! Thomas _______________________________________________________ Thomas Jentzsch | *** Every bit is sacred ! *** tjentzsch at web dot de | - 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 -> |
---|---|---|
Re: [stella] Death Derby, new build, B. Watson | Thread | Re: [stella] Death Derby, new build, Manuel Polik |
Re: [stella] Death Derby, new build, B. Watson | Date | [stella] Supercharger and the 7800, Oliver Scholz |
Month |