Subject: Re: [stella] zero-read From: "Andrew Davie" <adavie@xxxxxxxxxxxxx> Date: Sun, 11 Feb 2001 21:04:49 +1100 |
> From: "Erik Mooney" <emooney@xxxxxxxxxxxxxxxx> > I suppose you want zeropage, because if that wasn't a requirement, you > could just use a ROM location. And I suppose you don't just want to > dedicate one byte of RAM to the task of holding 0. And I'm not quite sure > why an immediate LDA #00 wouldn't work. But here goes anyway: Thanks Erik, just what I needed. Your assumptions are essentially correct. I *HAD* one byte of RAM allocated for this task (a guaranteed 0), but I figured this was wasteful. The code below shows what I'm doing... I use x (the line index) to lookup the address of the variable containing the data for a line. Some lines ("GUARANTEED0READ) require 0-byte data. With this setup (below), I don't need to reserve a byte of precious RAM - provided I can find a location (GUARANTEED0READ) which returns 0. The "lda 0,y" loads the data from the correct data area for each line being drawn (or, 0). ---------------------------------------------------- ldy TargetIndex,x ; 3 lda 0,y ; 4 sta TargetL ; 3 TargetIndex ; Points to the correct line in the TargetDisplay playfield ; Indexed by the scanline (0-18) being drawn. ; This allows the single kernel to draw the entire playfield (!) .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 0 blank .byte TargetDisplay+0,TargetDisplay+0,TargetDisplay+0 ; 1 top row target .byte TargetDisplay+0,TargetDisplay+0,TargetDisplay+0 ; 2 top row target .byte TargetDisplay+1,TargetDisplay+1,TargetDisplay+1 ; 3 top middle row target .byte TargetDisplay+1,TargetDisplay+1,TargetDisplay+1 ; 4 top middle row target .byte TargetDisplay+2,TargetDisplay+2,TargetDisplay+2 ; 5 bottom middle row target .byte TargetDisplay+2,TargetDisplay+2,TargetDisplay+2 ; 6 bottom middle row target .byte TargetDisplay+3,TargetDisplay+3,TargetDisplay+3 ; 7 bottom row target .byte TargetDisplay+3,TargetDisplay+3,TargetDisplay+3 ; 8 bottom row target .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 9 blank .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 10 " .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 11 " .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 12 " .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 13 " .byte GUARANTEED0READ,GUARANTEED0READ,GUARANTEED0READ ; 14 " .byte TargetDisplay+4,TargetDisplay+4,TargetDisplay+4 ; 15 cube sliding on bottom .byte TargetDisplay+4,TargetDisplay+4,TargetDisplay+4 ; 16 " .byte TargetDisplay+4,TargetDisplay+4,TargetDisplay+4 ; 17 " .byte TargetDisplay+4,TargetDisplay+4,TargetDisplay+4 ; 18 " ---------------------------------------------------- I can put a CXCLR just before the ldy, so that'll do nicely. Thanks again. Cheers A -- _ _ _| _ _ _| _ * _ _ , (_|| )(_|( (/_\/\/ (_|(_|\/(_(/_ ,~' L_|\ ,-' \ see my Museum of Soviet Calculators at ( \ http://www.taswegian.com/MOSCOW/soviet.html \ __ / L,~' "\__/ @--> v ----- Original Message ----- From: "Erik Mooney" <emooney@xxxxxxxxxxxxxxxx> To: <stella@xxxxxxxxxxx> Sent: Sunday, February 11, 2001 8:39 PM Subject: Re: [stella] zero-read > On Sun, 11 Feb 2001 11:47:57 +1100, you wrote: > > >I need a register location which, upon read, is ALWAYS guaranteed 0. > >Can anybody suggest any/the best register or location to use? > >Thanks > >A > > I suppose you want zeropage, because if that wasn't a requirement, you > could just use a ROM location. And I suppose you don't just want to > dedicate one byte of RAM to the task of holding 0. And I'm not quite sure > why an immediate LDA #00 wouldn't work. But here goes anyway: > > The collision registers map to $x0 through $x7, the paddles are at $x8 - > $xB, and the joystick button inputs are at $xC and $xD, for all values of > x 0-7. I _think_ $xE and $xF always return $FF, but I'm not sure. > > If you can do a CXCLR (clear all collision collision latches) closely > before this routine so that you can ensure that no collisions of any one > particular type will occur between the CXCLR and this routine, you can use > that collision register. (example: $x4 contains the collision latches for > missile 0 - playfield and missile 0 - ball. You can use $x4 to always > return 0 upon read, if you can ensure that such a collision will not > happen between a STA CXCLR instruction and this routine, which will be > true if either you're not using missile 0, you're not using PF or ball, or > you're in vblank.) > > - > Archives (includes files) at http://www.biglist.com/lists/stella/archives/ > Unsub & more at http://www.biglist.com/lists/stella/ > - 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] zero-read, Erik Mooney | Thread | [stella] Horizontal Positioning of , Andrew Davie |
Re: [stella] zero-read, Erik Mooney | Date | [stella] Horizontal Positioning of , Andrew Davie |
Month |