From d17d49c5f0be05b76544bf85d519aea709aac7e9 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Mon, 15 May 2023 19:54:22 +0200 Subject: [PATCH] Code cleanup and native graphics routines for C64 (almost). --- Atari/gr_basics.asm | 355 +++++++++++++++++++++++++ C64/gr_basics.asm | 358 +++++++++++++++++++++++++ C64/gr_basics.lab | 6 + C64/gr_basics.lst | 622 ++++++++++++++++++++++++++++++++++++++++++++ grafproc.asm | 357 ------------------------- scorch.bin | Bin 32768 -> 32768 bytes scorch.xex | Bin 56625 -> 56625 bytes scorchC64.asm | 2 +- scorchC64.prg | Bin 39679 -> 39807 bytes 9 files changed, 1342 insertions(+), 358 deletions(-) create mode 100644 C64/gr_basics.lab create mode 100644 C64/gr_basics.lst diff --git a/Atari/gr_basics.asm b/Atari/gr_basics.asm index 71cf658..26ec81c 100644 --- a/Atari/gr_basics.asm +++ b/Atari/gr_basics.asm @@ -189,6 +189,361 @@ ClearPlot and bittable,x rts .endp +;-------------------------------------------------- +.proc drawmountains +;-------------------------------------------------- + mwa #0 xdraw + mwa #mountaintable modify + mva #1 color + +drawmountainsloop + ldy #0 + lda (modify),y + cmp #screenheight + beq NoMountain + sta ydraw + sty ydraw+1 +.IF FASTER_GRAF_PROCS = 1 +; there was Drawline proc + lda #screenheight + sec + sbc ydraw + sta tempbyte01 + jsr plot.MakePlot + ; after plot we have: (xbyte),y - addres of screen byte; X - index in bittable (number of bit) +; jmp IntoDraw ; jumps inside Draw routine + ; because one pixel is already plotted (and who cares? :) ) +@ + lda (xbyte),y + and bittable2,x + sta (xbyte),y +;IntoDraw + adw xbyte #screenBytes + dec tempbyte01 + bne @- +; end of Drawline proc +.ELSE +; there was Drawline proc +drawline + jsr plot.MakePlot + inc ydraw + lda ydraw + cmp #screenheight + bne drawline +; end of Drawline proc +.ENDIF +NoMountain + inw modify + inw xdraw + cpw xdraw #screenwidth + bne drawmountainsloop + rts +.endp +;-------------------------------------------------- +.proc TypeChar +; puts char on the graphics screen +; in: CharCode +; in: left LOWER corner of the char coordinates (xdraw, ydraw) +;-------------------------------------------------- + ; char to the table + lda CharCode + sta fontind + lda #$00 + sta fontind+1 + ; char intex times 8 + aslw fontind + rolw fontind + rolw fontind + + adw fontind #TankFont + + ; and 8 bytes to the table + ldy #7 +CopyChar + lda (fontind),y + eor #$ff + sta char1,y + lda #$ff + sta char2,y + dey + bpl CopyChar + ; and 8 subsequent bytes as a mask + adw fontind #8 + ldy #7 +CopyMask + lda (fontind),y + eor #$ff + sta mask1,y + lda #$00 + sta mask2,y + dey + bpl CopyMask + +.IF FASTER_GRAF_PROCS = 1 + ; calculating coordinates from xdraw and ydraw + mwa xdraw xbyte + + lda xbyte + and #$7 + sta ybit + + lsrw xbyte ; div 8 + rorw xbyte + rorw xbyte +;--- + ldy xbyte + + lda ydraw ; y = y - 7 because left lower. shouldn't it be 8? + sec + sbc #7 + tax + + lda linetableL,x + sta xbyte + lda linetableH,x + sta xbyte+1 + ; mask preparation and character shifting + ldx ybit + beq MaskOK00 +MakeMask00 + .rept 8 + lsr mask1+# + ror mask2+# + .endr + sec + .rept 8 + ror char1+# ; in second (and next) lines we have C=1 - one SEC enough + ror char2+# + .endr + dex + bne MakeMask00 +MaskOK00 + ; here x=0 + lda Erase + beq CharLoopi ; it works, because x=0 + lda #$ff + ldx #7 +EmptyChar + sta char1,x + sta char2,x + dex + bpl EmptyChar + ldx #0 +CharLoopi + lda (xbyte),y + ora mask1,x + and char1,x + sta (xbyte),y + iny + lda (xbyte),y + ora mask2,x + and char2,x + sta (xbyte),y + dey + adw xbyte #screenBytes + inx + cpx #8 + bne CharLoopi +.ELSE + mvx #7 temp ; line counter (Y) +CharLoop1 + mva #7 temp+1 ; pixel counter (X) +CharLoop2 + mva #0 color + rol mask1,x + bcc NoMaskNoPlot + rol char1,x + bcs NoPlot +MakeCharPlot + lda Erase + bne ErasingChar + inc color +ErasingChar +NoPlot + jsr plot.MakePlot +AfterCharPlot + inw xdraw + ldx temp + dec temp+1 + bpl CharLoop2 + sec + sbw xdraw #8 + dec ydraw + ldx temp + dex + stx temp + bpl CharLoop1 + clc + lda ydraw + adc #8 + sta ydraw + bne EndPutChar +NoMaskNoPlot + rol char1,x + jmp AfterCharPlot +.ENDIF +EndPutChar + rts +.endp + +;-------------------------------------------------- +.proc PutChar4x4 +; puts 4x4 pixels char on the graphics screen +; in: dx, dy (LOWER left corner of the char) +; in: CharCode4x4 (.sbyte) +; in: plot4x4color (0/255) +; all pixels are being drawn +; (empty and not empty) +;-------------------------------------------------- + cpw dy #(screenheight-1) + jcs TypeChar.EndPutChar ;nearest RTS + cpw dy #(4) + jcc TypeChar.EndPutChar ;nearest RTS + cpw dx #(screenwidth-4) + jcs TypeChar.EndPutChar ;nearest RTS + ; checks ommited. + ; char to the table + lda CharCode4x4 + and #%00000001 + beq Upper4bits + lda #$ff ; better option to check (nibbler4x4 = $00 or $ff) +Upper4bits + sta nibbler4x4 + lda CharCode4x4 + lsr + sta fontind + lda #$00 + sta fontind+1 + + adw fontind #font4x4 + + ; and 4 bytes to the table + ldy #0 + ldx #3 +CopyChar + lda (fontind),y ; Y must be 0 !!!! + bit nibbler4x4 + bpl GetUpper4bits + :4 rol +GetUpper4bits + ora #$0f + sta char1,x + lda #$ff + sta char2,x + ; and 4 bytes as a mask + lda #$f0 + sta mask1,x + lda #$00 + sta mask2,x + adw fontind #32 ; next byte of 4x4 font + dex + bpl CopyChar + +.IF FASTER_GRAF_PROCS = 1 + ; calculating coordinates from xdraw and ydraw + mwa dx xbyte + + lda xbyte + and #$7 + sta ybit + + :3 lsrw xbyte ; div 8 +; rorw xbyte +; rorw xbyte +;--- + ldy xbyte ; horizontal byte offet stored in Y + lda dy ; y = y - 3 because left lower. + sec + sbc #3 + tax + + lda linetableL,x + sta xbyte + lda linetableH,x + sta xbyte+1 + ; mask preparation and character shifting + ldx ybit + beq MaskOK01 +MakeMask01 + .rept 4 + lsr mask1+# + ror mask2+# + .endr + sec + .rept 4 + ror char1+# ; in second (and next) lines we have C=1 - one SEC enough + ror char2+# + .endr + dex + bne MakeMask01 +MaskOK01 + ldx #0 +CharLoopi4x4 + lda (xbyte),y + ora mask1,x + bit plot4x4color + bpl PutInColor0_1 ; only mask - no char + and char1,x +PutInColor0_1 + sta (xbyte),y + iny + lda (xbyte),y + ora mask2,x + bit plot4x4color + bpl PutInColor0_2 ; only mask - no char + and char2,x +PutInColor0_2 + sta (xbyte),y + dey + adw xbyte #screenBytes + inx + cpx #4 + bne CharLoopi4x4 +.ELSE + mwa xdraw char2 + mwa ydraw mask2 + mva color mask2+2 + mwa dx xdraw + mwa dy ydraw + mvx #3 temp ; line counter (Y) +CharLoop1 + mva #3 temp+1 ; pixel counter (X) +CharLoop2 + mva #0 color + rol mask1,x + bcc NoMaskNoPlot + rol char1,x + bcs NoPlot +MakeCharPlot + lda plot4x4color + beq ErasingChar + inc color +ErasingChar +NoPlot + jsr plot.MakePlot +AfterCharPlot + inw xdraw + ldx temp + dec temp+1 + bpl CharLoop2 + sec + sbw xdraw #4 + dec ydraw + ldx temp + dex + stx temp + bpl CharLoop1 + mwa char2 xdraw + mwa mask2 ydraw + mva mask2+2 color + bpl EndPut4x4 +NoMaskNoPlot + rol char1,x + jmp AfterCharPlot +.ENDIF +EndPut4x4 + rts +.endp ;-------------------------------------------------- .proc ClearScreen diff --git a/C64/gr_basics.asm b/C64/gr_basics.asm index 5c29ac6..a6fcdcc 100644 --- a/C64/gr_basics.asm +++ b/C64/gr_basics.asm @@ -176,6 +176,364 @@ ClearPlot and bittable,x rts .endp +;-------------------------------------------------- +.proc drawmountains +;-------------------------------------------------- + mwa #0 xdraw + mwa #mountaintable modify + mva #1 color + +drawmountainsloop + ldy #0 + lda (modify),y + cmp #screenheight + beq NoMountain + sta ydraw + sty ydraw+1 +.IF FASTER_GRAF_PROCS = 1 +; there was Drawline proc + lda #screenheight + sec + sbc ydraw + sta tempbyte01 + jsr plot.MakePlot + ; X - index in bittable (number of bit) and nothing more (for use) in C64 :) +; jmp IntoDraw ; jumps inside Draw routine + ; because one pixel is already plotted (and who cares? :) ) +@ + lda (xbyte),y + and bittable2,x + sta (xbyte),y +;IntoDraw + inc ydraw + lda xdraw + and #%11111000 + ;sta xbyte + ;--- + ldy ydraw + clc + adc linetableL,y + sta xbyte + lda linetableH,y + adc xdraw+1 + sta xbyte+1 + ldy #0 + dec tempbyte01 + bne @- +; end of Drawline proc +.ELSE +; there was Drawline proc +drawline + jsr plot.MakePlot + inc ydraw + lda ydraw + cmp #screenheight + bne drawline +; end of Drawline proc +.ENDIF +NoMountain + inw modify + inw xdraw + cpw xdraw #screenwidth + bne drawmountainsloop + rts +.endp +;-------------------------------------------------- +.proc TypeChar +; puts char on the graphics screen +; in: CharCode +; in: left LOWER corner of the char coordinates (xdraw, ydraw) +;-------------------------------------------------- + ; char to the table + lda CharCode + sta fontind + lda #$00 + sta fontind+1 + ; char intex times 8 + aslw fontind + rolw fontind + rolw fontind + + adw fontind #TankFont + + ; and 8 bytes to the table + ldy #7 +CopyChar + lda (fontind),y + eor #$ff + sta char1,y + lda #$ff + sta char2,y + dey + bpl CopyChar + ; and 8 subsequent bytes as a mask + adw fontind #8 + ldy #7 +CopyMask + lda (fontind),y + eor #$ff + sta mask1,y + lda #$00 + sta mask2,y + dey + bpl CopyMask + +.IF FASTER_GRAF_PROCS = 1 + ; mask preparation and character shifting + lda xdraw + and #$7 + tax + beq MaskOK00 +MakeMask00 + .rept 8 + lsr mask1+# + ror mask2+# + .endr + sec + .rept 8 + ror char1+# ; in second (and next) lines we have C=1 - one SEC enough + ror char2+# + .endr + dex + bne MakeMask00 +MaskOK00 + lda ydraw + sec + sbc #7 + sta ydraw + ; X = 0 ! + lda Erase + beq CharLoopi ; it works, because x=0 + lda #$ff + ldx #7 +EmptyChar + sta char1,x + sta char2,x + dex + bpl EmptyChar + ldx #0 +CharLoopi + ; calculating coordinates from xdraw and ydraw + ldy ydraw + lda xdraw + and #%11111000 + clc + adc linetableL,y + sta xbyte + lda linetableH,y + adc xdraw+1 + sta xbyte+1 +;-- + ldy #0 + lda (xbyte),y + ora mask1,x + and char1,x + sta (xbyte),y + ldy #8 + lda (xbyte),y + ora mask2,x + and char2,x + sta (xbyte),y + inc ydraw + inx + cpx #8 + bne CharLoopi +.ELSE + mvx #7 temp ; line counter (Y) +CharLoop1 + mva #7 temp+1 ; pixel counter (X) +CharLoop2 + mva #0 color + rol mask1,x + bcc NoMaskNoPlot + rol char1,x + bcs NoPlot +MakeCharPlot + lda Erase + bne ErasingChar + inc color +ErasingChar +NoPlot + jsr plot.MakePlot +AfterCharPlot + inw xdraw + ldx temp + dec temp+1 + bpl CharLoop2 + sec + sbw xdraw #8 + dec ydraw + ldx temp + dex + stx temp + bpl CharLoop1 + clc + lda ydraw + adc #8 + sta ydraw + bne EndPutChar +NoMaskNoPlot + rol char1,x + jmp AfterCharPlot +.ENDIF +EndPutChar + rts +.endp + +;-------------------------------------------------- +.proc PutChar4x4 +; puts 4x4 pixels char on the graphics screen +; in: dx, dy (LOWER left corner of the char) +; in: CharCode4x4 (.sbyte) +; in: plot4x4color (0/255) +; all pixels are being drawn +; (empty and not empty) +;-------------------------------------------------- + cpw dy #(screenheight-1) + jcs TypeChar.EndPutChar ;nearest RTS + cpw dy #(4) + jcc TypeChar.EndPutChar ;nearest RTS + cpw dx #(screenwidth-4) + jcs TypeChar.EndPutChar ;nearest RTS + ; checks ommited. + ; char to the table + lda CharCode4x4 + and #%00000001 + beq Upper4bits + lda #$ff ; better option to check (nibbler4x4 = $00 or $ff) +Upper4bits + sta nibbler4x4 + lda CharCode4x4 + lsr + sta fontind + lda #$00 + sta fontind+1 + + adw fontind #font4x4 + + ; and 4 bytes to the table + ldy #0 + ldx #3 +CopyChar + lda (fontind),y ; Y must be 0 !!!! + bit nibbler4x4 + bpl GetUpper4bits + :4 rol +GetUpper4bits + ora #$0f + sta char1,x + lda #$ff + sta char2,x + ; and 4 bytes as a mask + lda #$f0 + sta mask1,x + lda #$00 + sta mask2,x + adw fontind #32 ; next byte of 4x4 font + dex + bpl CopyChar + +.IF FASTER_GRAF_PROCS = 1 + ; mask preparation and character shifting + lda dx + and #$7 + tax + beq MaskOK01 +MakeMask01 + .rept 4 + lsr mask1+# + ror mask2+# + .endr + sec + .rept 4 + ror char1+# ; in second (and next) lines we have C=1 - one SEC enough + ror char2+# + .endr + dex + bne MakeMask01 +MaskOK01 + lda dy + sec + sbc #3 + sta dy + ldx #0 +CharLoopi4x4 + ; calculating coordinates from xdraw and ydraw + ldy dy + lda dx + and #%11111000 + clc + adc linetableL,y + sta xbyte + lda linetableH,y + adc dx+1 + sta xbyte+1 +;-- + ldy #0 + lda (xbyte),y + ora mask1,x + bit plot4x4color + bpl PutInColor0_1 ; only mask - no char + and char1,x +PutInColor0_1 + sta (xbyte),y + ldy #8 + lda (xbyte),y + ora mask2,x + bit plot4x4color + bpl PutInColor0_2 ; only mask - no char + and char2,x +PutInColor0_2 + sta (xbyte),y + inc dy + inx + cpx #4 + bne CharLoopi4x4 +.ELSE + mwa xdraw char2 + mwa ydraw mask2 + mva color mask2+2 + mwa dx xdraw + mwa dy ydraw + mvx #3 temp ; line counter (Y) +CharLoop1 + mva #3 temp+1 ; pixel counter (X) +CharLoop2 + mva #0 color + rol mask1,x + bcc NoMaskNoPlot + rol char1,x + bcs NoPlot +MakeCharPlot + lda plot4x4color + beq ErasingChar + inc color +ErasingChar +NoPlot + jsr plot.MakePlot +AfterCharPlot + inw xdraw + ldx temp + dec temp+1 + bpl CharLoop2 + sec + sbw xdraw #4 + dec ydraw + ldx temp + dex + stx temp + bpl CharLoop1 + mwa char2 xdraw + mwa mask2 ydraw + mva mask2+2 color + bpl EndPut4x4 +NoMaskNoPlot + rol char1,x + jmp AfterCharPlot +.ENDIF +EndPut4x4 + rts +.endp ;-------------------------------------------------- .proc ClearScreen diff --git a/C64/gr_basics.lab b/C64/gr_basics.lab new file mode 100644 index 0000000..11e4cb2 --- /dev/null +++ b/C64/gr_basics.lab @@ -0,0 +1,6 @@ +mads 2.1.5 build 3 (21 Feb 22) +Label table: +00 FFFF0001 0@ +00 FFFF0001 1@ +00 FFFF0001 2@ +00 FFFF0001 3@ diff --git a/C64/gr_basics.lst b/C64/gr_basics.lst new file mode 100644 index 0000000..4cf64c6 --- /dev/null +++ b/C64/gr_basics.lst @@ -0,0 +1,622 @@ +mads 2.1.5 build 3 (21 Feb 22) +Source: gr_basics.asm + 1 .IF *>0 ;this is a trick that prevents compiling this file alone + 2 + 3 ; Basic hardware-dependent graphics routines. + 4 + 5 ; ----------------------------------------- + 6 .proc unPlot + 7 ; plots a point and saves the plotted byte, reverts the previous plot. + 8 ; ----------------------------------------- + 9 ldx #0 ; only one pixel + 10 unPlotAfterX + 11 stx WhichUnPlot + 12 + 13 ; first remake the oldie + 14 lda oldplotL,x + 15 sta oldplot + 16 lda oldplotH,x + 17 sta oldplot+1 + 18 + 19 ldy #0 + 20 lda oldora,x + 21 sta (oldplot),y + 22 + 23 + 24 ; is it not out of the screen ???? + 25 cpw ydraw #screenheight + 26 jcc CheckX + 27 mwa #0 ydraw + 28 CheckX + 29 cpw xdraw #screenwidth + 30 jcs EndOfUnPlot + 31 MakeUnPlot + 32 ; let's count coordinates taken from xdraw and ydraw + 33 lda xdraw + 34 and #%11111000 + 35 ;sta xbyte + 36 ;--- + 37 ldx ydraw + 38 clc + 39 adc linetableL,x + 40 sta xbyte + 41 sta oldplot + 42 lda linetableH,x + 43 adc xdraw+1 + 44 sta xbyte+1 + 45 sta oldplot+1 + 46 + 47 lda xdraw + 48 and #$7 + 49 tax + 50 ldy #0 + 51 + 52 lda color + 53 bne ClearUnPlot + 54 + 55 ;plotting here + 56 lda (xbyte),y + 57 sta OldOraTemp + 58 ora bittable,x + 59 sta (xbyte),y + 60 bne ContinueUnPlot ; allways <>0 + 61 ClearUnPlot + 62 lda (xbyte),y + 63 sta OldOraTemp + 64 and bittable2,x + 65 sta (xbyte),y + 66 ContinueUnPlot + 67 ldx WhichUnPlot + 68 lda OldOraTemp + 69 sta oldora,x + 70 lda oldplot + 71 sta oldplotL,x + 72 lda oldplot+1 + 73 sta oldplotH,x + 74 ; and now we must solve the problem of several plots + 75 ; in one byte + 76 ldx #4 + 77 ldy WhichUnPlot + 78 LetsCheckOverlapping + 79 cpx WhichUnPlot + 80 beq SkipThisPlot + 81 lda oldplotL,x + 82 cmp oldplotL,y + 83 bne NotTheSamePlot + 84 lda oldplotH,x + 85 cmp oldplotH,y + 86 bne NotTheSamePlot + 87 ; the pixel is in the same byte so let's take correct contents + 88 lda oldora,x + 89 sta oldora,y + 90 NotTheSamePlot + 91 SkipThisPlot + 92 dex + 93 bpl LetsCheckOverlapping + 94 EndOfUnPlot + 95 rts + 96 .endp + 97 + 98 ; ----------------------------------------- + 99 .proc plot ;plot (xdraw, ydraw, color) + 100 ; color == 1 --> put pixel + 101 ; color == 0 --> erase pixel + 102 ; this is one of the most important routines in the whole + 103 ; game. If you are going to speed up the game, start with + 104 ; plot - it is used by every single effect starting from explosions + 105 ; through line drawing and small text output!!! + 106 ; + 107 ; Optimized by 0xF (Fox) THXXXX!!! + 108 + 109 ; ----------------------------------------- + 110 ; is it not over the screen ??? + 111 cpw ydraw #(screenheight+1); changed for one additional line. cpw ydraw #(screenheight-1) + 112 bcs unPlot.EndOfUnPlot ;nearest RTS + 113 CheckX02 + 114 cpw xdraw #screenwidth + 115 bcs EndOfPlot + 116 MakePlot + 117 ; let's calculate coordinates from xdraw and ydraw + 118 + 119 lda xdraw + 120 and #%11111000 + 121 ;sta xbyte + 122 ;--- + 123 ldx ydraw + 124 clc + 125 adc linetableL,x + 126 sta xbyte + 127 lda linetableH,x + 128 adc xdraw+1 + 129 sta xbyte+1 + 130 + 131 lda xdraw + 132 and #$7 + 133 tax + 134 ldy #0 + 135 lda color + 136 bne ClearPlot + 137 + 138 lda (xbyte),y + 139 ora bittable,x + 140 sta (xbyte),y + 141 EndOfPlot + 142 rts + 143 ClearPlot + 144 lda (xbyte),y + 145 and bittable2,x + 146 sta (xbyte),y + 147 rts + 148 .endp + 149 + 150 ; ----------------------------------------- + 151 .proc point_plot + 152 ; ----------------------------------------- + 153 ; checks state of the pixel (coordinates in xdraw and ydraw) + 154 ; result is in A (zero or appropriate bit is set) + 155 + 156 ; let's calculate coordinates from xdraw and ydraw + 157 + 158 lda xdraw + 159 and #%11111000 + 160 ;sta xbyte + 161 ;--- + 162 ldx ydraw + 163 clc + 164 adc linetableL,x + 165 sta xbyte + 166 lda linetableH,x + 167 adc xdraw+1 + 168 sta xbyte+1 + 169 + 170 lda xdraw + 171 and #$7 + 172 tax + 173 ldy #0 + 174 lda (xbyte),y + 175 eor #$ff + 176 and bittable,x + 177 rts + 178 .endp + 179 ;-------------------------------------------------- + 180 .proc drawmountains + 181 ;-------------------------------------------------- + 182 mwa #0 xdraw + 183 mwa #mountaintable modify + 184 mva #1 color + 185 + 186 drawmountainsloop + 187 ldy #0 + 188 lda (modify),y + 189 cmp #screenheight + 190 beq NoMountain + 191 sta ydraw + 192 sty ydraw+1 + 193 .IF FASTER_GRAF_PROCS = 1 + 194 ; there was Drawline proc + 195 lda #screenheight + 196 sec + 197 sbc ydraw + 198 sta tempbyte01 + 199 jsr plot.MakePlot + 200 ; X - index in bittable (number of bit) and nothing more (for use) in C64 :) + 201 ; jmp IntoDraw ; jumps inside Draw routine + 202 ; because one pixel is already plotted (and who cares? :) ) + 203 @ + 204 lda (xbyte),y + 205 and bittable2,x + 206 sta (xbyte),y + 207 ;IntoDraw + 208 inc ydraw + 209 lda xdraw + 210 and #%11111000 + 211 ;sta xbyte + 212 ;--- + 213 ldy ydraw + 214 clc + 215 adc linetableL,y + 216 sta xbyte + 217 lda linetableH,y + 218 adc xdraw+1 + 219 sta xbyte+1 + 220 ldy #0 + 221 dec tempbyte01 + 222 bne @- + 223 ; end of Drawline proc + 224 .ELSE + 225 ; there was Drawline proc + 226 drawline + 227 jsr plot.MakePlot + 228 inc ydraw + 229 lda ydraw + 230 cmp #screenheight + 231 bne drawline + 232 ; end of Drawline proc + 233 .ENDIF + 234 NoMountain + 235 inw modify + 236 inw xdraw + 237 cpw xdraw #screenwidth + 238 bne drawmountainsloop + 239 rts + 240 .endp + 241 ;-------------------------------------------------- + 242 .proc TypeChar + 243 ; puts char on the graphics screen + 244 ; in: CharCode + 245 ; in: left LOWER corner of the char coordinates (xdraw, ydraw) + 246 ;-------------------------------------------------- + 247 ; char to the table + 248 lda CharCode + 249 sta fontind + 250 lda #$00 + 251 sta fontind+1 + 252 ; char intex times 8 + 253 aslw fontind + 254 rolw fontind + 255 rolw fontind + 256 + 257 adw fontind #TankFont + 258 + 259 ; and 8 bytes to the table + 260 ldy #7 + 261 CopyChar + 262 lda (fontind),y + 263 eor #$ff + 264 sta char1,y + 265 lda #$ff + 266 sta char2,y + 267 dey + 268 bpl CopyChar + 269 ; and 8 subsequent bytes as a mask + 270 adw fontind #8 + 271 ldy #7 + 272 CopyMask + 273 lda (fontind),y + 274 eor #$ff + 275 sta mask1,y + 276 lda #$00 + 277 sta mask2,y + 278 dey + 279 bpl CopyMask + 280 + 281 .IF FASTER_GRAF_PROCS = 1 + 282 ; mask preparation and character shifting + 283 lda xdraw + 284 and #$7 + 285 tax + 286 beq MaskOK00 + 287 MakeMask00 + 288 .rept 8 + 289 lsr mask1+# + 290 ror mask2+# + 291 .endr + 292 sec + 293 .rept 8 + 294 ror char1+# ; in second (and next) lines we have C=1 - one SEC enough + 295 ror char2+# + 296 .endr + 297 dex + 298 bne MakeMask00 + 299 MaskOK00 + 300 lda ydraw + 301 sec + 302 sbc #8 + 303 sta ydraw + 304 ; X = 0 ! + 305 lda Erase + 306 beq CharLoopi ; it works, because x=0 + 307 lda #$ff + 308 ldx #7 + 309 EmptyChar + 310 sta char1,x + 311 sta char2,x + 312 dex + 313 bpl EmptyChar + 314 ldx #0 + 315 CharLoopi + 316 ; calculating coordinates from xdraw and ydraw + 317 ldy ydraw + 318 lda xdraw + 319 and #%11111000 + 320 clc + 321 adc linetableL,y + 322 sta xbyte + 323 lda linetableH,y + 324 adc xdraw+1 + 325 sta xbyte+1 + 326 ;-- + 327 ldy #0 + 328 lda (xbyte),y + 329 ora mask1,x + 330 and char1,x + 331 sta (xbyte),y + 332 ldy #8 + 333 lda (xbyte),y + 334 ora mask2,x + 335 and char2,x + 336 sta (xbyte),y + 337 inc ydraw + 338 inx + 339 cpx #8 + 340 bne CharLoopi + 341 .ELSE + 342 mvx #7 temp ; line counter (Y) + 343 CharLoop1 + 344 mva #7 temp+1 ; pixel counter (X) + 345 CharLoop2 + 346 mva #0 color + 347 rol mask1,x + 348 bcc NoMaskNoPlot + 349 rol char1,x + 350 bcs NoPlot + 351 MakeCharPlot + 352 lda Erase + 353 bne ErasingChar + 354 inc color + 355 ErasingChar + 356 NoPlot + 357 jsr plot.MakePlot + 358 AfterCharPlot + 359 inw xdraw + 360 ldx temp + 361 dec temp+1 + 362 bpl CharLoop2 + 363 sec + 364 sbw xdraw #8 + 365 dec ydraw + 366 ldx temp + 367 dex + 368 stx temp + 369 bpl CharLoop1 + 370 clc + 371 lda ydraw + 372 adc #8 + 373 sta ydraw + 374 bne EndPutChar + 375 NoMaskNoPlot + 376 rol char1,x + 377 jmp AfterCharPlot + 378 .ENDIF + 379 EndPutChar + 380 rts + 381 .endp + 382 + 383 ;-------------------------------------------------- + 384 .proc PutChar4x4 + 385 ; puts 4x4 pixels char on the graphics screen + 386 ; in: dx, dy (LOWER left corner of the char) + 387 ; in: CharCode4x4 (.sbyte) + 388 ; in: plot4x4color (0/255) + 389 ; all pixels are being drawn + 390 ; (empty and not empty) + 391 ;-------------------------------------------------- + 392 cpw dy #(screenheight-1) + 393 jcs TypeChar.EndPutChar ;nearest RTS + 394 cpw dy #(4) + 395 jcc TypeChar.EndPutChar ;nearest RTS + 396 cpw dx #(screenwidth-4) + 397 jcs TypeChar.EndPutChar ;nearest RTS + 398 ; checks ommited. + 399 ; char to the table + 400 lda CharCode4x4 + 401 and #%00000001 + 402 beq Upper4bits + 403 lda #$ff ; better option to check (nibbler4x4 = $00 or $ff) + 404 Upper4bits + 405 sta nibbler4x4 + 406 lda CharCode4x4 + 407 lsr + 408 sta fontind + 409 lda #$00 + 410 sta fontind+1 + 411 + 412 adw fontind #font4x4 + 413 + 414 ; and 4 bytes to the table + 415 ldy #0 + 416 ldx #3 + 417 CopyChar + 418 lda (fontind),y ; Y must be 0 !!!! + 419 bit nibbler4x4 + 420 bpl GetUpper4bits + 421 :4 rol + 422 GetUpper4bits + 423 ora #$0f + 424 sta char1,x + 425 lda #$ff + 426 sta char2,x + 427 ; and 4 bytes as a mask + 428 lda #$f0 + 429 sta mask1,x + 430 lda #$00 + 431 sta mask2,x + 432 adw fontind #32 ; next byte of 4x4 font + 433 dex + 434 bpl CopyChar + 435 + 436 .IF FASTER_GRAF_PROCS = 1 + 437 ; calculating coordinates from xdraw and ydraw + 438 mwa dx xbyte + 439 + 440 lda xbyte + 441 and #$7 + 442 sta ybit + 443 + 444 :3 lsrw xbyte ; div 8 + 445 ; rorw xbyte + 446 ; rorw xbyte + 447 ;--- + 448 ldy xbyte ; horizontal byte offet stored in Y + 449 lda dy ; y = y - 3 because left lower. + 450 sec + 451 sbc #3 + 452 tax + 453 + 454 lda linetableL,x + 455 sta xbyte + 456 lda linetableH,x + 457 sta xbyte+1 + 458 ; mask preparation and character shifting + 459 ldx ybit + 460 beq MaskOK01 + 461 MakeMask01 + 462 .rept 4 + 463 lsr mask1+# + 464 ror mask2+# + 465 .endr + 466 sec + 467 .rept 4 + 468 ror char1+# ; in second (and next) lines we have C=1 - one SEC enough + 469 ror char2+# + 470 .endr + 471 dex + 472 bne MakeMask01 + 473 MaskOK01 + 474 ldx #0 + 475 CharLoopi4x4 + 476 lda (xbyte),y + 477 ora mask1,x + 478 bit plot4x4color + 479 bpl PutInColor0_1 ; only mask - no char + 480 and char1,x + 481 PutInColor0_1 + 482 sta (xbyte),y + 483 iny + 484 lda (xbyte),y + 485 ora mask2,x + 486 bit plot4x4color + 487 bpl PutInColor0_2 ; only mask - no char + 488 and char2,x + 489 PutInColor0_2 + 490 sta (xbyte),y + 491 dey + 492 adw xbyte #screenBytes + 493 inx + 494 cpx #4 + 495 bne CharLoopi4x4 + 496 .ELSE + 497 mwa xdraw char2 + 498 mwa ydraw mask2 + 499 mva color mask2+2 + 500 mwa dx xdraw + 501 mwa dy ydraw + 502 mvx #3 temp ; line counter (Y) + 503 CharLoop1 + 504 mva #3 temp+1 ; pixel counter (X) + 505 CharLoop2 + 506 mva #0 color + 507 rol mask1,x + 508 bcc NoMaskNoPlot + 509 rol char1,x + 510 bcs NoPlot + 511 MakeCharPlot + 512 lda plot4x4color + 513 beq ErasingChar + 514 inc color + 515 ErasingChar + 516 NoPlot + 517 jsr plot.MakePlot + 518 AfterCharPlot + 519 inw xdraw + 520 ldx temp + 521 dec temp+1 + 522 bpl CharLoop2 + 523 sec + 524 sbw xdraw #4 + 525 dec ydraw + 526 ldx temp + 527 dex + 528 stx temp + 529 bpl CharLoop1 + 530 mwa char2 xdraw + 531 mwa mask2 ydraw + 532 mva mask2+2 color + 533 bpl EndPut4x4 + 534 NoMaskNoPlot + 535 rol char1,x + 536 jmp AfterCharPlot + 537 .ENDIF + 538 EndPut4x4 + 539 rts + 540 .endp + 541 + 542 ;-------------------------------------------------- + 543 .proc ClearScreen + 544 ;-------------------------------------------------- + 545 mwa #displayC64 temp + 546 ldy #0 + 547 @ lda #$ff + 548 sta (temp),y + 549 inw temp + 550 cpw temp #displayC64+screenheight*screenBytes+1 + 551 bne @- + 552 rts + 553 .endp + 554 + 555 ;-------------------------------------------------- + 556 .proc GenerateLineTable + 557 + 558 mwa #displayC64 temp + 559 mwa #linetableL temp2 + 560 mwa #linetableH modify + 561 ldy #0 + 562 ldx #0 + 563 @ lda temp + 564 sta (temp2),y + 565 lda temp+1 + 566 sta (modify),y + 567 cpx #7 + 568 bne NotChar + 569 ldx #0 + 570 adw temp #(320-7) + 571 jmp next8lines + 572 NotChar + 573 inw temp + 574 inx + 575 next8lines + 576 iny + 577 cpy #screenheight+1 + 578 bne @- + 579 rts + 580 .endp + 581 ;-------------------------------------------------- + 582 .proc SetMainScreen + 583 lda #$b ; Grey background and border + 584 lda WallsType + 585 :4 rol + 586 sta $d020 + 587 sta $d021 + 588 + 589 lda $dd00 ; Set video bank to start at 0 + 590 and #252 + 591 ora #3 + 592 sta $dd00 + 593 lda #$18 + 594 sta $d018 + 595 + 596 ; SwitchVICBank(0) + 597 ; SetScreenMemory($2000) + 598 SetHiresBitmapMode ; Hires mode on + 599 lda #$00 + 600 sta 53281 + 601 ; clear color RAM + 602 ldx #0 + 603 @ lda #1 + 604 sta $d800,x + 605 sta $d900,x + 606 sta $da00,x + 607 sta $db00,x + 608 lda #$0f + 609 sta $0400,x + 610 sta $0500,x + 611 sta $0600,x + 612 sta $0700,x + 613 inx + 614 bne @- + 615 + 616 + 617 rts + 618 .endp + 619 + 620 .ENDIF diff --git a/grafproc.asm b/grafproc.asm index 59e0da5..062817a 100644 --- a/grafproc.asm +++ b/grafproc.asm @@ -1266,55 +1266,6 @@ ThereWasNoParachute rts .endp -;-------------------------------------------------- -.proc drawmountains -;-------------------------------------------------- - mwa #0 xdraw - mwa #mountaintable modify - mva #1 color - -drawmountainsloop - ldy #0 - lda (modify),y - cmp #screenheight - beq NoMountain - sta ydraw - sty ydraw+1 -.IF FASTER_GRAF_PROCS = 1 -; there was Drawline proc - lda #screenheight - sec - sbc ydraw - sta tempbyte01 - jsr plot.MakePlot - ; after plot we have: (xbyte),y - addres of screen byte; X - index in bittable (number of bit) -; jmp IntoDraw ; jumps inside Draw routine - ; because one pixel is already plotted (and who cares? :) ) -@ - lda (xbyte),y - and bittable2,x - sta (xbyte),y -;IntoDraw - adw xbyte #screenBytes - dec tempbyte01 - bne @- -; end of Drawline proc -.ELSE -; there was Drawline proc -drawline - jsr plot.MakePlot - inc ydraw - lda ydraw - cmp #screenheight - bne drawline -; end of Drawline proc -.ENDIF -NoMountain - inw modify - inw xdraw - cpw xdraw #screenwidth - bne drawmountainsloop - rts /* ;-------------------------------------------------- drawmountainspixel ; never used ? @@ -1333,7 +1284,6 @@ drawmountainspixelloop bne drawmountainspixelloop rts */ -.endp ;-------------------------------------------------- .proc SoilDown2 ;-------------------------------------------------- @@ -1630,313 +1580,6 @@ NotHigher rts .endp - -;-------------------------------------------------- -.proc TypeChar -; puts char on the graphics screen -; in: CharCode -; in: left LOWER corner of the char coordinates (xdraw, ydraw) -;-------------------------------------------------- - ; char to the table - lda CharCode - sta fontind - lda #$00 - sta fontind+1 - ; char intex times 8 - aslw fontind - rolw fontind - rolw fontind - - adw fontind #TankFont - - ; and 8 bytes to the table - ldy #7 -CopyChar - lda (fontind),y - eor #$ff - sta char1,y - lda #$ff - sta char2,y - dey - bpl CopyChar - ; and 8 subsequent bytes as a mask - adw fontind #8 - ldy #7 -CopyMask - lda (fontind),y - eor #$ff - sta mask1,y - lda #$00 - sta mask2,y - dey - bpl CopyMask - -.IF FASTER_GRAF_PROCS = 1 - ; calculating coordinates from xdraw and ydraw - mwa xdraw xbyte - - lda xbyte - and #$7 - sta ybit - - lsrw xbyte ; div 8 - rorw xbyte - rorw xbyte -;--- - ldy xbyte - - lda ydraw ; y = y - 7 because left lower. shouldn't it be 8? - sec - sbc #7 - tax - - lda linetableL,x - sta xbyte - lda linetableH,x - sta xbyte+1 - ; mask preparation and character shifting - ldx ybit - beq MaskOK00 -MakeMask00 - .rept 8 - lsr mask1+# - ror mask2+# - .endr - sec - .rept 8 - ror char1+# ; in second (and next) lines we have C=1 - one SEC enough - ror char2+# - .endr - dex - bne MakeMask00 -MaskOK00 - ; here x=0 - lda Erase - beq CharLoopi ; it works, because x=0 - lda #$ff - ldx #7 -EmptyChar - sta char1,x - sta char2,x - dex - bpl EmptyChar - ldx #0 -CharLoopi - lda (xbyte),y - ora mask1,x - and char1,x - sta (xbyte),y - iny - lda (xbyte),y - ora mask2,x - and char2,x - sta (xbyte),y - dey - adw xbyte #screenBytes - inx - cpx #8 - bne CharLoopi -.ELSE - mvx #7 temp ; line counter (Y) -CharLoop1 - mva #7 temp+1 ; pixel counter (X) -CharLoop2 - mva #0 color - rol mask1,x - bcc NoMaskNoPlot - rol char1,x - bcs NoPlot -MakeCharPlot - lda Erase - bne ErasingChar - inc color -ErasingChar -NoPlot - jsr plot.MakePlot -AfterCharPlot - inw xdraw - ldx temp - dec temp+1 - bpl CharLoop2 - sec - sbw xdraw #8 - dec ydraw - ldx temp - dex - stx temp - bpl CharLoop1 - clc - lda ydraw - adc #8 - sta ydraw - bne EndPutChar -NoMaskNoPlot - rol char1,x - jmp AfterCharPlot -.ENDIF -EndPutChar - rts -.endp - -;-------------------------------------------------- -.proc PutChar4x4 -; puts 4x4 pixels char on the graphics screen -; in: dx, dy (LOWER left corner of the char) -; in: CharCode4x4 (.sbyte) -; in: plot4x4color (0/255) -; all pixels are being drawn -; (empty and not empty) -;-------------------------------------------------- - cpw dy #(screenheight-1) - jcs TypeChar.EndPutChar ;nearest RTS - cpw dy #(4) - jcc TypeChar.EndPutChar ;nearest RTS - cpw dx #(screenwidth-4) - jcs TypeChar.EndPutChar ;nearest RTS - ; checks ommited. - ; char to the table - lda CharCode4x4 - and #%00000001 - beq Upper4bits - lda #$ff ; better option to check (nibbler4x4 = $00 or $ff) -Upper4bits - sta nibbler4x4 - lda CharCode4x4 - lsr - sta fontind - lda #$00 - sta fontind+1 - - adw fontind #font4x4 - - ; and 4 bytes to the table - ldy #0 - ldx #3 -CopyChar - lda (fontind),y ; Y must be 0 !!!! - bit nibbler4x4 - bpl GetUpper4bits - :4 rol -GetUpper4bits - ora #$0f - sta char1,x - lda #$ff - sta char2,x - ; and 4 bytes as a mask - lda #$f0 - sta mask1,x - lda #$00 - sta mask2,x - adw fontind #32 ; next byte of 4x4 font - dex - bpl CopyChar - -.IF FASTER_GRAF_PROCS = 1 - ; calculating coordinates from xdraw and ydraw - mwa dx xbyte - - lda xbyte - and #$7 - sta ybit - - :3 lsrw xbyte ; div 8 -; rorw xbyte -; rorw xbyte -;--- - ldy xbyte ; horizontal byte offet stored in Y - lda dy ; y = y - 3 because left lower. - sec - sbc #3 - tax - - lda linetableL,x - sta xbyte - lda linetableH,x - sta xbyte+1 - ; mask preparation and character shifting - ldx ybit - beq MaskOK01 -MakeMask01 - .rept 4 - lsr mask1+# - ror mask2+# - .endr - sec - .rept 4 - ror char1+# ; in second (and next) lines we have C=1 - one SEC enough - ror char2+# - .endr - dex - bne MakeMask01 -MaskOK01 - ldx #0 -CharLoopi4x4 - lda (xbyte),y - ora mask1,x - bit plot4x4color - bpl PutInColor0_1 ; only mask - no char - and char1,x -PutInColor0_1 - sta (xbyte),y - iny - lda (xbyte),y - ora mask2,x - bit plot4x4color - bpl PutInColor0_2 ; only mask - no char - and char2,x -PutInColor0_2 - sta (xbyte),y - dey - adw xbyte #screenBytes - inx - cpx #4 - bne CharLoopi4x4 -.ELSE - mwa xdraw char2 - mwa ydraw mask2 - mva color mask2+2 - mwa dx xdraw - mwa dy ydraw - mvx #3 temp ; line counter (Y) -CharLoop1 - mva #3 temp+1 ; pixel counter (X) -CharLoop2 - mva #0 color - rol mask1,x - bcc NoMaskNoPlot - rol char1,x - bcs NoPlot -MakeCharPlot - lda plot4x4color - beq ErasingChar - inc color -ErasingChar -NoPlot - jsr plot.MakePlot -AfterCharPlot - inw xdraw - ldx temp - dec temp+1 - bpl CharLoop2 - sec - sbw xdraw #4 - dec ydraw - ldx temp - dex - stx temp - bpl CharLoop1 - mwa char2 xdraw - mwa mask2 ydraw - mva mask2+2 color - bpl EndPut4x4 -NoMaskNoPlot - rol char1,x - jmp AfterCharPlot -.ENDIF -EndPut4x4 - rts -.endp - ;-------------------------------------------------------- .proc DisplayOffensiveTextNr ; ldx TextNumberOff diff --git a/scorch.bin b/scorch.bin index 6c33f79787b5610723549ed89d1376d7c4137729..698c2d39dab4abc1e5b81f0df254c6a78af7520d 100644 GIT binary patch delta 1302 zcmZ`(ZA@EL816mD#Fl;xI)&)UL07(%(ZMLN5*cbXr>*ie9h+pgw^@Yj2Q(4dd&_D~ zc0e*aU?;Lo!ZdVliBdJg4b75eStFSyU35-EVth|KmWVNF^7K6K z^M0Q5-cSgILTG9@6NwU~nJ*jKBwQNABi(p!7e3cRf62^CZ!f3NyGmo49Y9|?U|!K`Fz5HPX_U)-8A1& zf<}GRW$0vZ-jKuKs^JS16x9!m9H$i}B|rT59Bz};Q>G^nCjLaeqQlV^p`#zm(dwG}VVdwZ>4vM+vFPxvVmWnHDb!|2;1lg3M?A?${_lpoVr-OsI8Bj}KK<(dZ<+AWf7pQpR zCIa!K)JN@4(i*$|vDqH501MiLZcHN!!-s~w&JDE9-m$SS5ZkD*bgh9g&9s*Y(_V-@ z?1ejM4bYqRX>Kolzp5Ht@1YA-#nig(EDHPSjctYKD<9Q5ijn0It#oWbxgu?M*dEOl zqeHP@`L(ZnGNriT$YH`22Q~)9NS~1mME01;IF?0PQY)bfiH_G6!d%pa+Wj1zs4PHG z!<9;#`e#)sQcIuJatM~NrtWnB^;q2n4rzMT-SyulvFLd#2YU6@7uF*bmZ-2}CxcIR zTxOH@?ffun-oI(lbXnO>7WqrsSO%W=t0gbKiC~9S`qCt_ge7P8d-5E-+6%-z@jH9u zcj1w58tF>I5NW?F4+5$o*CIlL65Z3_vJ6U-7E>b4`PLx(QsY-HrY;p6>Ea6cf`>-@Mo?#1-*5pKIx@lvR%=zfOrcyNErv=Ri&=Efk jH|MkFr<$K(HGc;-_3IWLn~b`&yP)JB;EWw6Dt z!req&1aE?g*#e7u+g=m~yt(LN3DcxxOVp|nH#9Cv*4Rv!E;@%^*(8oA8PTZ$G@p|FjZe{FXJXqy`th!|7hd8T?<)Gp_d_5&E}F(CZ|;6r%fT zzPBue#yCYyajy-W!i5suS^H@7oU90O6br(UP{d^$^yATmz-T^vLXJ@IrTZb8ZQs-dsL!D#O zN@V6)QCql5!?kjboVuG4g!lzKFadRLZqGAI;I^=f1HUY5bwAsnglTD@QicI58 zu6%sE2M9dz6M+OW#F>Yx?=^=&3KF2CjAL1fFf0!Ty)RK+eb)w4e|&?=qF#~5vZjJW zm3t!e)vwl=eum49rnA4D|BU5S-toLrBVc_;QVyjMy9<-9d=pH*c zfj3F?cw-oSEK$6r6uPFhY}w0cRS&P_5S(OV^KJm`?dJ0wS_)~q9{DPbWsf;I=!f>y z<9P_#WGZam!QlPv7g^s!JC5ah#EtX07u9WKp1)v-=U|VhRXp(mf{WJZlM~2clfAY# zm08%~^Ta>?2V41@u<{#6da^Ni+S^(L4z)<@JVFIB-P6|UD3B){xv6aL%WuIiGXZrj zGky#vpS9I9%iC>@V5v;A;~;+J3_BVUIKCeU3)mTEpP7#K)9gI5JG>~TkG6LxT%6wO us6?eeGf9>kG}hmN2GuGz6PE4d8d(eMqAibQt=O<*f8J# diff --git a/scorch.xex b/scorch.xex index 74c25563b12c9e873246230a1f3e0b2005c4c90d..6d8d41fa30ca78e57fb592e0be279721f7691ea0 100644 GIT binary patch delta 1265 zcmZ`(Z%kWN6z5(33?ckmHrGrjmpSanU~G#T3?^IR2jjxBF_iGZ#Mf6fw#CqjqwRYu zcA0mx3as@Efx#9Q`jEGc($~jKBe)pdH^toJpE;sg-opj4^%YLx5U8a^^I&hS>y69{V)H|y4tuno!z+uM$vcm^s zj$Ne93tu=aB;kd7jv8*6ocoK1JnGf7nU40-2-uuE$&d#^&Mpo@r-{R3o%6)wGk)qM zLQ%J@)%14}+AbS+->f9W?}bNPl^iUtMh+dW;~W-Udw2M~+KVi%wKGEtu-jS=`@RKT zuK&2;DfdN!1%Gzu7x4z9KS`)nhO|=4Rjo@xEym-=&Iz14?;p+Q_{xbTlHV;O+cTmiY9d0 z36t;=ZIBn<#7Eg0rW~FPn>oB3Ht$^T%qy$f3qnKD*L4D$dN2{TSjGz60cyClBH+Wa zCcA)j3vrf!Vr=-ZR@g{aUC0udl}XH&WtX1W2A@L7mdiaDK`(OC#p5}u6!wSREhX?H z*sB6cs!HSS+LZAe-OVK3jkUvWyn{9cY-e=g2y7l~A`3lmXs`~{p*h05U>&xQYaV!i zxQ>|oaAkN8sqn$_@a{(|e92JiS8;uHRh@lDaj|!e?5(WuWvsW`@Nz<09@Di?vP(@d z_t*$6^Y{`c%UCecv58I6^FFvVB9nR1i`Uhg58F9uz?seqosln zfvaO3Ld4i|ZeAd3im`b9RtBTvwF0t@Z!c63a!Q8fiRU@&iG0qF{-4Oi#)NnKLir7C zKU)xQR;CJR!fV9U0Kw;LJUJC5=2LP@eV=*_*Z4DLo&JMw{XN|J?H{>vDOM_vRAWJ- z=F$QoK^gv@K4=cgQFD1Zx269ye%brbu4gxZBIVWS)0{aLeWofXt8xB5m{pzS?}phT zPE7cL4temGvKo!?2NIcSAs-)w)tO153r1oMBd;|u6p`TuE5 S{{}iz{mdMs}M delta 1242 zcmZ`(VQ5=b6z;oe(k>xQJEjY>NpGH3W_5`J4E_pu$LDdCaE+LW-#x) zSao+;Xu8DPC6sp3(Y(^YF65zC|>3nA}zy$eJ5W z!T*@(^Pw*hB>XL;H?jgKRzUc!L@Q!9Q?(-rv}jLD7daNXEKlkgp8B+e^xG0dYsbzR z3}{KFCq|DjprhAaOLDJr_09+pl&{JS#EaQEe`kpBiUwy7oaeVJM411_QghOg7=FkZ zdW`PzP0#G^6T4PhSJb0qmA}zmY{q?}mRE)myi@JDxeT(K zW%q$mixm3h%-k(E4q2*jgYWe|>?NeHxKYCgbo0tA vw?ZefJ*Y{fE7^C@E|I!&ouIrwSF;W0_OTz)RPIM`Y47JvFcmGTY0iHE1R*TN diff --git a/scorchC64.asm b/scorchC64.asm index 71c6606..2b6e315 100644 --- a/scorchC64.asm +++ b/scorchC64.asm @@ -10,7 +10,7 @@ ;--------------------------------------------------- .def XCORRECTION_FOR_PM = 0 ; if 1 - active x position of tanks correction fo PMG -.def FASTER_GRAF_PROCS = 0 +.def FASTER_GRAF_PROCS = 1 ; if 1 - activates faster graphics routines ; (direct writes to screen memory - atari only :) ) ;--------------------------------------------------- diff --git a/scorchC64.prg b/scorchC64.prg index 1dbe01dc76ad678ec2cd6551e5ff88c1e0800b31..8d73a66b459137072c1d17cabf2e5159af2f5a9a 100644 GIT binary patch delta 4454 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