I need to set A to zero and use three cycles, so right now I have a variable that is always set to zero, so I do this:
lda Zero ;+3But it burns me up to waste a variable like this. Is there another way?
Posted Fri Dec 10, 2004 11:53 AM
lda Zero ;+3But it burns me up to waste a variable like this. Is there another way?
Posted Fri Dec 10, 2004 11:54 AM
Posted Fri Dec 10, 2004 12:28 PM
Cybergoth said:
ldx #BAND1HEIGHT;+2 72 jmp BeginBand1 ;+3 75 ;---Draw Second Band (Band1): SkipDrawP0Band1 lda Zero ;+3 63 bcc ReturnFromSkipDrawP0Band1;+3 66 LoopBand1 nop ;+2 73 nop ;+2 75 BeginBand1 sta GRP0 ;+3 2 lda (P0DataColorPtr),Y;+5 7 sta COLUP0 ;+3 10 dey ;+2 12 decrement absolute scanline value by one here sec ;+2 14 ;---Next 12 lines (machine cycles 15-50) draw an asymmetrical playfield--- lda PF0Data+1;+3 17 sta PF0 ;+3 20 PF0 drawn to screen at machine cycle (MC) 22.7 lda PF1Data+1;+3 23 sta PF1 ;+3 26 PF1 drawn to screen at MC 28 lda PF2Data+1;+3 29 sta PF2 ;+3 32 PF2 drawn to screen at MC 38.7 lda PF3Data+1;+3 35 sta PF0 ;+3 38 PF0 finished at MC 28, drawn to screen again at MC 49.3 lda PF4Data+1;+3 41 sta PF1 ;+3 44 PF1 finished at MC 38, drawn to screen again at MC 54.7 lda PF5Data+1;+3 47 sta PF2 ;+3 50 PF2 finished at MC 49.3, drawn to screen again at MC 65.3 ;---End draw of asym playfield--- ;------!!carry must be set!!--- tya ;+2 52 sbc P0Top ;+3 55 adc #P0HEIGHT ;+2 57 bcc SkipDrawP0Band1;+2/3 59/60 Branch to SkipDraw must not cross page boundary. lda (P0DataPtr),Y;+5 64 nop ;+2 66 Draw at beginning of next line. ReturnFromSkipDrawP0Band1 dex ;+2 68 bne LoopBand1 ;+2/3 70/71 ;---Initialization between bands: ldx #BAND2HEIGHT;+2 72 jmp BeginBand2 ;+3 75It isn't really "wasting" a variable, since I only need it to equal zero during the Kernel, so I could reuse it for something else when I'm not drawing the screen...but I'd still prefer not to use any RAM. This is one of 10 "bands" in my kernel - so my program is already pretty RAM-intensive (60 bytes for the playfield data).
Posted Fri Dec 10, 2004 1:29 PM
lda #C_P0_HEIGHT-1; 2 dcp P0_Y; 5 (DEC and CMP) bcs .doDraw0; 2/3 lda #0; 2 .byte $2c;-1 (BIT ABS to skip next 2 bytes) .doDraw0: lda (P0_Ptr),y; 5 sta GRP0; 3 = 18 cycles (constant, if drawing or not!)
Posted Fri Dec 10, 2004 2:13 PM
0 members, 0 guests, 0 anonymous users