| |
crl
Registered: Mar 2020 Posts: 19 |
Lda $d012 And #$07 ora #18 sta $d011
The title says it all. I learned this raster timing trick in 1988, but I never understood why and how it works.
I understand that we in step 1 take the current raster line and AND it by %00000111. In step 2, we OR by %00011000. And then, we store that in $d011.
But when I look at the specific bits in d011, I get confused.
In step 1, we shift the screen downwards by x lines, x being equal to $d012 and %00000111.
But why do we then turn bits 4 and 5 on in d011 in step 2?
Bit 5 = high resolution graphics on
Bit 4 = screen area is visible or not
Can someone explain this 32 years old mystery to me? |
|
... 9 posts hidden. Click here to view all posts.... |
| |
crl
Registered: Mar 2020 Posts: 19 |
Mr. Sid, correct. Somewhere in the process, I confused 0-7 with 1-8.
I played a bit my code again, and it seems that bit 3 isn't important to the intended outcome, which in this case is to make some nicely timed rasterbars without badlines.
But what I still don't understand is why I need to keep setting bit 4 (enable screen) every rasterline in order to ensure timing.
Another question I would like to ask is why I get a chessboard pattern on top of my rasterbards when I do this.
I'm sorry if these are stupid questions but I haven't coded for 30 years :-) |
| |
oziphantom
Registered: Oct 2014 Posts: 488 |
are you in default font? probably because you are messing with the bad lines and the VIC is getting char FF which is the checkerboard char in the default font. Change the last byte in the bank ($3fff probably for you at the moment) and see if the pattern changes. |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
crl, have a look at the VIC-article:
VIC Article [english]
Sections 3.5-3.7 and 3.14 are particularly interesting for what you are doing.
It is not that you have to keep setting bit 4, but rather that you don't want to set it to 0. |
| |
tlr
Registered: Sep 2003 Posts: 1762 |
In my earliest side border stuff I used things like this:
.C:464b A0 2F LDY #$2F
.C:464d EE 16 D0 INC $D016
.C:4650 CE 16 D0 DEC $D016
.C:4653 AE 11 D0 LDX $D011
.C:4656 E8 INX
.C:4657 8A TXA
.C:4658 29 07 AND #$07
.C:465a 09 00 ORA #$18
.C:465c 8D 11 D0 STA $D011
.C:465f EA NOP
.C:4660 EA NOP
.C:4661 EA NOP
.C:4662 EA NOP
.C:4663 EA NOP
.C:4664 24 FC BIT $FC
.C:4666 88 DEY
.C:4667 10 E4 BPL $464D
.C:4669 A9 1B LDA #$1B
.C:466b 8D 11 D0 STA $D011 Changing the ORA #$18 -> ORA #$00 makes no difference. I guess I just added it because you're "supposed" to set those bits. |
| |
Krill
Registered: Apr 2002 Posts: 2940 |
Actually, doing INC $d011 once per rasterline is sufficient to avoid badlines in that scenario (with a proper initial value).
They are "shoved" to the next line continuously. |
| |
tlr
Registered: Sep 2003 Posts: 1762 |
Quote: Actually, doing INC $d011 once per rasterline is sufficient to avoid badlines in that scenario (with a proper initial value).
They are "shoved" to the next line continuously.
Yes, or modify it to use the loop counter. I wasn't really looking for optimizations here I guess. I remember being quite content just making it work. :) |
| |
Krill
Registered: Apr 2002 Posts: 2940 |
Quoting tlrYes, or modify it to use the loop counter. I wasn't really looking for optimizations here I guess. I remember being quite content just making it work. :) Wasn't quite aiming at your old code but at OP's educational benefit. :) |
| |
tlr
Registered: Sep 2003 Posts: 1762 |
Another approach is to just change Y-scroll when absolutely necessary to avoid a bad line. No need to change it every line. |
| |
Krill
Registered: Apr 2002 Posts: 2940 |
Quoting tlrAnother approach is to just change Y-scroll when absolutely necessary to avoid a bad line. No need to change it every line. Yes, or open the Y-border but actually clear DEN ($d011 bit 4). Screen remains on, but without any badlines at all! \=D/ |
| |
tlr
Registered: Sep 2003 Posts: 1762 |
Quote: Quoting tlrAnother approach is to just change Y-scroll when absolutely necessary to avoid a bad line. No need to change it every line. Yes, or open the Y-border but actually clear DEN ($d011 bit 4). Screen remains on, but without any badlines at all! \=D/
Good point, forgot about that. Though then you are restricted to idle fetch and sprites only for the full screen. |
Previous - 1 | 2 - Next |