Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2 > #26026
| Newsgroups | comp.sys.apple2 |
|---|---|
| Date | 2015-10-20 22:53 -0700 |
| Message-ID | <3bcddc0a-ae8d-43d9-a8cd-9bcbe52e64ce@googlegroups.com> (permalink) |
| Subject | Hires screen clear |
| From | John Brooks <jbrooks@blueshiftinc.com> |
On Tuesday, October 20, 2015 at 9:22:53 AM UTC-7, fadden wrote: > On Monday, October 19, 2015 at 7:50:09 PM UTC-7, jamesiw...@gmail.com wrote: > > I know this is an old thread, but I just thought I'd post my solution to this problem, in case anyone would like to see it. > > Since anything worth doing is worth overdoing... > > Discussion: > https://github.com/fadden/fdraw/blob/master/docs/manual.md#notes > > Screen clear code, written two different ways (size vs. speed): > https://github.com/fadden/fdraw/blob/master/FDRAW.S#L271 > > The hi-res screen is a quirky beast... which is what makes it so much fun to play with. > > It's always fun to solve something then see how other people have solved it. Having gone through the process yourself, you appreciate the subtleties in the other solutions. For example: nice job switching the graphics screen on *after* the clear -- looks much better that way. > Since anything worth doing is worth overdoing... > Screen clear code, written two different ways (size vs. speed): > https://github.com/fadden/fdraw/blob/master/FDRAW.S#L271 > It's always fun to solve something then see how other people have solved it. I like it! Here's another approach: *------------------------------------------------- * Fast, small, right-to-left hires screen clear * By John Brooks 10/20/2015 * Size: 136 bytes * Speed: ~5.4 cycles per hires byte. Unrolled 32x. * >5x faster than ROM HGR * Inputs: A=color byte for even columns * Y=color byte for odd columns *------------------------------------------------- Clear sta :_EvenColor+1 sty :_OddColor+1 ldy #3*40-1 ;3x 40-byte rows in a half-page: 128/40=3 :OddColorClc clc ;c=0 on odd columns :_OddColor lda #$DD ;MOD color for odd columns :ClearEven ]Offset equ 31*$400 lup 32 ;# of pages in hires screen: 8k/256 sta ]Offset/$2000*$100+]Offset&$1fff+$2000,y ]Offset equ ]Offset-$400 --^ bcs :NextHalfPage :_EvenColor lda #$DD ;MOD color for even columns dey sec ;c=1 during even columns bcs :ClearEven ;always :NextHalfPage tya bmi :NextRow adc #$80+1-1 ;$80=to 2nd half-page. +1 goes back to odd column. -1 due to c=1 tay bmi :OddColorClc ;always :NextRow adc #$80+1-40-1 ;$80=to 1st half-page. +1 goes back to odd column. -40=next row. -1 due to c=1 tay bpl :OddColorClc ;branch if in same page adc #3*40-2 ;3*40=# of rows in a half-age. -2 decrements to prev odd/even column tay cmp #2*40 ;loop if we're not done with all 40 bytes in all the 3rd row bcs :OddColorClc rts And here's the Merlin32 listing: +-----------------------+------------------------------------------------------------------- | Address Object Code | Source Code +-----------------------+------------------------------------------------------------------- | 00/8000 | *------------------------------------------------- | 00/8000 | * Fast, small, right-to-left hires screen clear | 00/8000 | * By John Brooks 10/20/2015 | 00/8000 | * Size: 136 bytes | 00/8000 | * Speed: ~5.4 cycles per hires byte. Unrolled 32x. | 00/8000 | * >5x faster than ROM HGR | 00/8000 | * Inputs: A=color byte for even columns | 00/8000 | * Y=color byte for odd columns | 00/8000 | *------------------------------------------------- | 00/8000 | | 00/8000 | org $300 | 00/0300 | Clear | 00/0300 : 8D 6E 03 | sta __EvenColor+1 | 00/0303 : 8C 0A 03 | sty __OddColor+1 | 00/0306 | | 00/0306 : A0 77 | ldy #3*40-1 ;3x 40-byte rows in a half-page: 128/40=3 | 00/0308 : 18 | _OddColorClc clc ;c=0 on odd columns | 00/0309 : A9 DD | __OddColor lda #$DD ;MOD color for odd columns | 00/030B | _ClearEven | 00/030B | ]Offset equ 31*$400 | 00/030B : 99 00 3F | sta 31744/$2000*$100+31744&$1fff+$2000,y | 00/030E : 99 00 3B | sta 30720/$2000*$100+30720&$1fff+$2000,y | 00/0311 : 99 00 37 | sta 29696/$2000*$100+29696&$1fff+$2000,y | 00/0314 : 99 00 33 | sta 28672/$2000*$100+28672&$1fff+$2000,y | 00/0317 : 99 00 2F | sta 27648/$2000*$100+27648&$1fff+$2000,y | 00/031A : 99 00 2B | sta 26624/$2000*$100+26624&$1fff+$2000,y | 00/031D : 99 00 27 | sta 25600/$2000*$100+25600&$1fff+$2000,y | 00/0320 : 99 00 23 | sta 24576/$2000*$100+24576&$1fff+$2000,y | 00/0323 : 99 00 3E | sta 23552/$2000*$100+23552&$1fff+$2000,y | 00/0326 : 99 00 3A | sta 22528/$2000*$100+22528&$1fff+$2000,y | 00/0329 : 99 00 36 | sta 21504/$2000*$100+21504&$1fff+$2000,y | 00/032C : 99 00 32 | sta 20480/$2000*$100+20480&$1fff+$2000,y | 00/032F : 99 00 2E | sta 19456/$2000*$100+19456&$1fff+$2000,y | 00/0332 : 99 00 2A | sta 18432/$2000*$100+18432&$1fff+$2000,y | 00/0335 : 99 00 26 | sta 17408/$2000*$100+17408&$1fff+$2000,y | 00/0338 : 99 00 22 | sta 16384/$2000*$100+16384&$1fff+$2000,y | 00/033B : 99 00 3D | sta 15360/$2000*$100+15360&$1fff+$2000,y | 00/033E : 99 00 39 | sta 14336/$2000*$100+14336&$1fff+$2000,y | 00/0341 : 99 00 35 | sta 13312/$2000*$100+13312&$1fff+$2000,y | 00/0344 : 99 00 31 | sta 12288/$2000*$100+12288&$1fff+$2000,y | 00/0347 : 99 00 2D | sta 11264/$2000*$100+11264&$1fff+$2000,y | 00/034A : 99 00 29 | sta 10240/$2000*$100+10240&$1fff+$2000,y | 00/034D : 99 00 25 | sta 9216/$2000*$100+9216&$1fff+$2000,y | 00/0350 : 99 00 21 | sta 8192/$2000*$100+8192&$1fff+$2000,y | 00/0353 : 99 00 3C | sta 7168/$2000*$100+7168&$1fff+$2000,y | 00/0356 : 99 00 38 | sta 6144/$2000*$100+6144&$1fff+$2000,y | 00/0359 : 99 00 34 | sta 5120/$2000*$100+5120&$1fff+$2000,y | 00/035C : 99 00 30 | sta 4096/$2000*$100+4096&$1fff+$2000,y | 00/035F : 99 00 2C | sta 3072/$2000*$100+3072&$1fff+$2000,y | 00/0362 : 99 00 28 | sta 2048/$2000*$100+2048&$1fff+$2000,y | 00/0365 : 99 00 24 | sta 1024/$2000*$100+1024&$1fff+$2000,y | 00/0368 : 99 00 20 | sta 0/$2000*$100+0&$1fff+$2000,y | 00/036B | | 00/036B : B0 06 | bcs _NextHalfPage | 00/036D | __EvenColor | 00/036D : A9 DD | lda #$DD ;MOD color for even columns | 00/036F : 88 | dey | 00/0370 : 38 | sec ;c=1 during even columns | 00/0371 : B0 98 | bcs _ClearEven ;always | 00/0373 | _NextHalfPage | 00/0373 : 98 | tya | 00/0374 : 30 05 | bmi _NextRow | 00/0376 : 69 80 | adc #$80+1-1 ;$80=to 2nd half-page. +1 goes back to odd column. -1 due to c=1 | 00/0378 : A8 | tay | 00/0379 : 30 8D | bmi _OddColorClc ;always | 00/037B | _NextRow | 00/037B : 69 58 | adc #$80+1-40-1 ;$80=to 1st half-page. +1 goes back to odd column. -40=next row. -1 due to c=1 | 00/037D : A8 | tay | 00/037E : 10 88 | bpl _OddColorClc ;branch if in same page | 00/0380 : 69 76 | adc #3*40-2 ;3*40=# of rows in a half-age. -2 decrements to prev odd/even column | 00/0382 : A8 | tay | 00/0383 : C9 50 | cmp #2*40 ;loop if we're not done with all 40 bytes in all the 3rd row | 00/0385 : B0 81 | bcs _OddColorClc | 00/0387 | | 00/0387 : 60 | rts +-----------------------+------------------------------------------------------------------- -JB @JBrooksBSI
Back to comp.sys.apple2 | Previous | Next — Next in thread | Find similar
Hires screen clear John Brooks <jbrooks@blueshiftinc.com> - 2015-10-20 22:53 -0700
Re: Hires screen clear mwillegal <mike@willegal.net> - 2015-10-21 08:59 -0700
Re: Hires screen clear fadden <thefadden@gmail.com> - 2015-10-21 09:45 -0700
Re: Hires screen clear qkumba <peter.ferrie@gmail.com> - 2015-10-21 11:11 -0700
Re: Hires screen clear qkumba <peter.ferrie@gmail.com> - 2015-10-21 11:29 -0700
Re: Hires screen clear qkumba <peter.ferrie@gmail.com> - 2015-10-21 11:54 -0700
Re: Hires screen clear qkumba <peter.ferrie@gmail.com> - 2015-10-21 15:32 -0700
Re: Hires screen clear qkumba <peter.ferrie@gmail.com> - 2015-10-21 17:53 -0700
Re: Hires screen clear John Brooks <jbrooks@blueshiftinc.com> - 2015-10-21 21:46 -0700
Re: Hires screen clear fadden <thefadden@gmail.com> - 2015-10-21 22:11 -0700
Re: Hires screen clear John Brooks <jbrooks@blueshiftinc.com> - 2015-10-21 23:29 -0700
Re: Hires screen clear qkumba <peter.ferrie@gmail.com> - 2015-10-21 22:17 -0700
Re: Hires screen clear Antoine Vignau <antoine.vignau@laposte.net> - 2015-10-21 18:06 -0700
Re: Hires screen clear mmphosis <mmphosis@macgui.com> - 2015-10-22 03:54 +0000
Re: Hires screen clear John Brooks <jbrooks@blueshiftinc.com> - 2015-10-21 22:59 -0700
Re: Hires screen clear mmphosis <mmphosis@macgui.com> - 2015-10-22 06:29 +0000
Re: Hires screen clear John Brooks <jbrooks@blueshiftinc.com> - 2015-10-23 18:26 -0700
csiph-web