| |
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? |
|
| |
Krill
Registered: Apr 2002 Posts: 2825 |
The value only becomes effective with the actual sta $d011.
Bits 4 and 5 need to be set (and bit 6 clear in your case), well, because those control the display mode.
You may change them mid-screen, but the result might not be what you want.
And what you want appears to be display on (bit 4) and bitmap mode enabled (bit 5) and ECM off (bit 6).
You can use other combinations for different screen modes, some of them invalid (black pixels).
Actually i'm not quite sure where your confusion lies. |
| |
crl
Registered: Mar 2020 Posts: 19 |
Ok, so the part that allows me to do raster splits is part 1, i.e. skipping bad linea? |
| |
Copyfault
Registered: Dec 2001 Posts: 466 |
Hmm, looks like setting up a badline condition for the current rasterline. Assuming this "trick" is repeated (in some kind of loop with fixed timing), it should make up FLI = flexible line interpretation.
Short explanation (as addon to Krill's lines;)): a badline is created whenever the lower 3 bits of $D011 match with the lower three bits of $D012 (=current rasline). So your opcodes basically "cut out" the lower bits of $D012, set up some other bits relevant for the gfx mode you want to display (see Krill's post above) and write this to $D011 to "force" the badline condition.
Maybe it was used for smth else, but I strongly guess this was a FLI-routine. |
| |
crl
Registered: Mar 2020 Posts: 19 |
I used this when I did raster splits, meaning that it did occur in a loop |
| |
Krill
Registered: Apr 2002 Posts: 2825 |
Sort of. You prevent a bad line condition, effectively turning them off.
However, the bad line condition is precisely that the low 3 bits of $d012 (current rasterline) and $d011 (YSCROLL) match.
So for this to be stable (and not depend on the beam's position within the current rasterline), better add 1 or so before the AND. |
| |
Copyfault
Registered: Dec 2001 Posts: 466 |
Yes;) Wanted to wait for the reply of crl to add this: depending on the timing this "trick" could also be used to _avoid_ badlines: if you made sure that the STA $D011 happens not before the rasterline in which the LDA $D011 was executed, you'd make sure that the rasterline in which the STA $D011 is executed is not a badline. Putting this in a loop makes the VIC continously avoiding a badline.
As always in c64 coding, it all depends on the timing;) |
| |
crl
Registered: Mar 2020 Posts: 19 |
Interesting. Thanks for explaining |
| |
Mr. SID
Registered: Jan 2003 Posts: 421 |
And btw, it's bit 3 and bit 4 that are turned on when or-ing with $18. Which are:
Bit 4 = enable screen
Bit 3 = 25 rows
Those are pretty essential, in most cases, so it's a good idea to have them set... :) |
| |
Krill
Registered: Apr 2002 Posts: 2825 |
Hah, good catch.
But both bits don't mean much until you get close to the lower border and then vertical blank.
Meaning if you set them only some way down the screen, no problem. :) |
| |
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 :-) |
... 9 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 - Next |