This is accomplished by a different setup of the color-RAM. See the following table:
Code: Select all
Cycles
1 2 3 4 5 6 7
12345678901234567890123456789012345678901234567890123456789012345678901
00112233445566778899aabb
************************
rrrrrrhhhhhhssssss0000001111112222223333334444445555556666667777 Line 0 (pre-set during VBLANK) $9400
77rrrrhhhhhh888888999999aaaaaabbbbbb00000011111122222233333344444455555 Line 1 Begin Update Line 4
5666666777777rrrrhhhhhhtttttt000000111111222222333333444444555555666666 Line 2 (pre-set during VBLANK) $9600
777777rrrrhhhhhh888888999999aaaaaabbbbbb888888999999aaaaaabbbbbb0000001 Line 3 finish Upd Line 4/Begin Upd Line 6
11111222222rrrrhhhhhhssssss00000011111122222233333344444455555566666677 Line 4 (pre-set by L1/L3 Updates) $9400
7777rrrrhhhhhh888888999999aaaaaabbbbbb333333444444555555666666777777rrr Line 5 finish Update Line 6
rhhhhhh888888999999ttttttaaaaaabbbbbb0000001111112222223333334444445555 Line 6 (pre-set by L3/L5 Updates) $9600
55666666777777rrrrhhhhhh888888999999aaaaaabbbbbb Line 7
s/t = switch $9002
r = Auxiliary $900e
h = background/border
0-b = byte in color-ram
(6 cycles each)
Still with all these tricks I was initially coming a little short of just a few cycles to increase the width to 12 bytes (=96 pixels). But there is one more trick to be used which is combining the update of a color-ram byte (#7 in my case) with the update for $900e. This is possible because color-RAM only uses the low nibble of a byte while the auxiliary color only uses the high nibble. This saves one LDA#-instruction = 2 cycles per line, which was what I needed. The side-effect of this trick however is that the volume-register which resides in the lower nibble of $900e is set to the same value as byte #7 of each color-RAM line and this is why you can hear the buzzing noise when these pictures are being displayed, since volume-register change always will create a short cracking noise.
Questions?