Long (generated) bittables for fastest plot and point

This commit is contained in:
Pecusx
2023-06-21 09:43:29 +02:00
parent 884a74c573
commit 189d3ed593
10 changed files with 83 additions and 46 deletions
+31 -16
View File
@@ -52,23 +52,24 @@ MakeUnPlot
sta xbyte+1 sta xbyte+1
sta oldplot+1 sta oldplot+1
lda xdraw ; lda xdraw
and #$7 ; and #$7
tax ; tax
ldx xdraw ; optimization (256 bytes long bittable)
lda color lda color
bne ClearUnPlot bne ClearUnPlot
;plotting here ;plotting here
lda (xbyte),y lda (xbyte),y
sta OldOraTemp sta OldOraTemp
ora bittable,x ora bittable1_long,x
sta (xbyte),y sta (xbyte),y
bne ContinueUnPlot ; allways <>0 bne ContinueUnPlot ; allways <>0
ClearUnPlot ClearUnPlot
lda (xbyte),y lda (xbyte),y
sta OldOraTemp sta OldOraTemp
and bittable2,x and bittable2_long,x
sta (xbyte),y sta (xbyte),y
ContinueUnPlot ContinueUnPlot
ldx WhichUnPlot ldx WhichUnPlot
@@ -140,20 +141,22 @@ MakePlot
lda linetableH,x lda linetableH,x
sta xbyte+1 sta xbyte+1
lda xdraw ; lda xdraw
and #$7 ; and #$7
tax ; tax
ldx xdraw ; optimization (256 bytes long bittable)
lda color lda color
bne ClearPlot bne ClearPlot
lda (xbyte),y lda (xbyte),y
ora bittable,x ora bittable1_long,x
sta (xbyte),y sta (xbyte),y
EndOfPlot EndOfPlot
rts rts
ClearPlot ClearPlot
lda (xbyte),y lda (xbyte),y
and bittable2,x and bittable2_long,x
sta (xbyte),y sta (xbyte),y
rts rts
.endp .endp
@@ -180,13 +183,14 @@ ClearPlot
lda linetableH,x lda linetableH,x
sta xbyte+1 sta xbyte+1
lda xdraw ; lda xdraw
and #$7 ; and #$7
tax ; tax
ldx xdraw ; optimization (256 bytes long bittable)
lda (xbyte),y lda (xbyte),y
eor #$ff eor #$ff
and bittable,x and bittable1_long,x
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
@@ -247,7 +251,7 @@ MinCalculated
; because one pixel is already plotted (and who cares? :) ) ; because one pixel is already plotted (and who cares? :) )
@ @
lda (xbyte),y lda (xbyte),y
and bittable2,x and bittable2_long,x
sta (xbyte),y sta (xbyte),y
;IntoDraw ;IntoDraw
adw xbyte #screenBytes adw xbyte #screenBytes
@@ -752,6 +756,17 @@ loop sta (temp),y
iny iny
cpy #screenheight+1 cpy #screenheight+1
bne @- bne @-
; and bittables for fastes plot and point
ldy #0
@ tya
and #%00000111
tax
lda bittable,x
sta bittable1_long,y
eor #%11111111
sta bittable2_long,y
iny
bne @-
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
+32 -15
View File
@@ -44,9 +44,11 @@ MakeUnPlot
sta xbyte+1 sta xbyte+1
sta oldplot+1 sta oldplot+1
lda xdraw ; lda xdraw
and #$7 ; and #$7
tax ; tax
ldx xdraw ; optimization (256 bytes long bittable)
ldy #0 ldy #0
lda color lda color
@@ -55,13 +57,13 @@ MakeUnPlot
;plotting here ;plotting here
lda (xbyte),y lda (xbyte),y
sta OldOraTemp sta OldOraTemp
ora bittable,x ora bittable1_long,x
sta (xbyte),y sta (xbyte),y
bne ContinueUnPlot ; allways <>0 bne ContinueUnPlot ; allways <>0
ClearUnPlot ClearUnPlot
lda (xbyte),y lda (xbyte),y
sta OldOraTemp sta OldOraTemp
and bittable2,x and bittable2_long,x
sta (xbyte),y sta (xbyte),y
ContinueUnPlot ContinueUnPlot
ldx WhichUnPlot ldx WhichUnPlot
@@ -128,21 +130,23 @@ MakePlot
adc xdraw+1 adc xdraw+1
sta xbyte+1 sta xbyte+1
lda xdraw ; lda xdraw
and #$7 ; and #$7
tax ; tax
ldx xdraw ; optimization (256 bytes long bittable)
ldy #0 ldy #0
lda color lda color
bne ClearPlot bne ClearPlot
lda (xbyte),y lda (xbyte),y
ora bittable,x ora bittable1_long,x
sta (xbyte),y sta (xbyte),y
EndOfPlot EndOfPlot
rts rts
ClearPlot ClearPlot
lda (xbyte),y lda (xbyte),y
and bittable2,x and bittable2_long,x
sta (xbyte),y sta (xbyte),y
rts rts
.endp .endp
@@ -167,13 +171,15 @@ ClearPlot
adc xdraw+1 adc xdraw+1
sta xbyte+1 sta xbyte+1
lda xdraw ; lda xdraw
and #$7 ; and #$7
tax ; tax
ldx xdraw ; optimization (256 bytes long bittable)
ldy #0 ldy #0
lda (xbyte),y lda (xbyte),y
eor #$ff eor #$ff
and bittable,x and bittable1_long,x
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
@@ -228,7 +234,7 @@ MinCalculated
clc ; and faster clc ; and faster
@ @
lda (xbyte),y lda (xbyte),y
and bittable2,x and bittable2_long,x
sta (xbyte),y sta (xbyte),y
;IntoDraw ;IntoDraw
inc ydraw inc ydraw
@@ -653,6 +659,17 @@ next8lines
iny iny
cpy #screenheight+1 cpy #screenheight+1
bne @- bne @-
; and bittables for fastes plot and point
ldy #0
@ tya
and #%00000111
tax
lda bittable,x
sta bittable1_long,y
eor #%11111111
sta bittable2_long,y
iny
bne @-
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
+8 -8
View File
@@ -872,10 +872,10 @@ PurchaseAIRoutines
sta temp+1 sta temp+1
:3 lsr ; A=A/8 :3 lsr ; A=A/8
sta temp sta temp
tya ; tya ; optimization (256 bytes long bittable)
and #%00000111 ; and #%00000111
tay ; tay
lda bittable,y lda bittable1_long,y
ldy temp ldy temp
and PurchaseMeTable2,y and PurchaseMeTable2,y
beq TryToPurchaseOnePiece.SorryNoPurchase beq TryToPurchaseOnePiece.SorryNoPurchase
@@ -890,10 +890,10 @@ PurchaseAIRoutines
sta temp+1 sta temp+1
:3 lsr ; A=A/8 :3 lsr ; A=A/8
sta temp sta temp
tya ; tya ; optimization (256 bytes long bittable)
and #%00000111 ; and #%00000111
tay ; tay
lda bittable,y lda bittable1_long,y
ldy temp ldy temp
and PurchaseMeTable,y and PurchaseMeTable,y
beq SorryNoPurchase beq SorryNoPurchase
+3 -2
View File
@@ -199,10 +199,11 @@ sintable
;linetableH ;linetableH
; :screenheight+1 .by >(display+screenBytes*#) ; :screenheight+1 .by >(display+screenBytes*#)
;---------------------------- ;----------------------------
; now long (256 bytes) bittables are generated in RAM based on one bittable:
bittable bittable
.by $80,$40,$20,$10,$08,$04,$02,$01 .by $80,$40,$20,$10,$08,$04,$02,$01
bittable2 ;bittable2
.by $7f,$bf,$df,$ef,$f7,$fb,$fd,$fe ; .by $7f,$bf,$df,$ef,$f7,$fb,$fd,$fe
;---------------------------- ;----------------------------
disktance ;tanks distance disktance ;tanks distance
.by 0,0 .by 0,0
+1 -1
View File
@@ -810,7 +810,7 @@ deletePtr = temp
@ tya @ tya
sta (deletePtr),y sta (deletePtr),y
inw deletePtr inw deletePtr
cpw deletePtr #variablesEnd cpw deletePtr #ClearedvariablesEnd
bne @- bne @-
tya tya
jsr SetJoystickPort jsr SetJoystickPort
+1 -4
View File
@@ -207,7 +207,7 @@ FirstZpageVariable = $54
;----------------------------------------------- ;-----------------------------------------------
; variable declarations in RAM (no code) ; variable declarations in RAM (no code)
;----------------------------------------------- ;-----------------------------------------------
ORG PMGraph + $0300 - (variablesEnd - OneTimeZeroVariables + 1) ORG PMGraph + $0300 - (variablesEnd - OneTimeZeroVariables)
icl 'variables.asm' icl 'variables.asm'
; Game loading address ; Game loading address
@@ -755,9 +755,6 @@ EndofBFGDLI
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.if variablesEnd > (PMGraph + $300)
.ERROR 'Variables too long'
.endif
.IF * > MODUL-1 .IF * > MODUL-1
.ECHO * .ECHO *
.ERROR 'Code and data too long' .ERROR 'Code and data too long'
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+7
View File
@@ -450,6 +450,13 @@ trackn_audctl .ds TRACKS
v_aspeed .ds 1 v_aspeed .ds 1
track_endvariables track_endvariables
ClearedvariablesEnd
; These tebles are at the beginning of memory pages becouse ....
bittable1_long
.ds $100
bittable2_long
.ds $100
; .... variablesEnd is aligned to PMGraph + $0300 in scorch.asm (before include this file)
variablesEnd variablesEnd
;---------------------------------------------------- ;----------------------------------------------------