Jump to content
IGNORED

lda #NUMBER in three cycles?


vdub_bobby

Recommended Posts

Can someone tell me if there is a way to load A with an absolute value in three cycles instead of two?

 

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 ;+3

But it burns me up to waste a variable like this. Is there another way?

Link to comment
Share on other sites

Hi there!

 

Can you post some more of the surrounding code?

 

Sure.

	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	75

It 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).

Link to comment
Share on other sites

Hi there!

 

Well, if you'd use the illegal opcade version of skipdraw, your problem would go away:

 


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!)

 

Greetings,

Manuel

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...