| |
Trifox Account closed
Registered: Mar 2006 Posts: 108 |
is there a putpixel example ?
Hi, i wonder if there is a easy to read example wich plots exactly one pixel in a particular gfx mode? on to a given coordinate? |
|
| |
WVL
Registered: Mar 2002 Posts: 902 |
you really should read the 'Programmers Reference Guide' or 'Mapping the C64'..
http://www.unusedino.de/ec64/technical/project64/programmers_re..
http://www.unusedino.de/ec64/technical/project64/mapping_c64.ht..
|
| |
Frantic
Registered: Mar 2003 Posts: 1648 |
@trifox
Generally, this is not the way to go if you want to code demo effects on the C64 since it will be very slow (too slow!). If demo effects is what you want to do, then half the work is figuring out how to put several "pixels" at once, in a way that suits the particular effect you are trying to achieve. But, of course, there may be other cases when a putpixel routine is needed, so I'm not trying to be "smart" here. Just telling you, in case you didn't know. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
trifox, here is the easyest way:
set up a 16x16 character "matrix" on the screen. a little explanation how it would look like:
@p..............
aq..............
br..............
cs..............
dt..............
e...............
f...............
g...............
h...............
i...............
j...............
k...............
l...............
m...............
n...............
o...............
(ofcourse you have to fill up the whole matrix according to the rule you see above)
what you have won with this ? we have plotted consecutive characters under eachother on the screen, so we can adress each column of the matrix like this:
ldy ycoord
sta column,y
as simple as that.
we will need the following tables (first look at the code, then the tables will be more straightforward)
mul128low/high, are two tables containing:
for t=0 to 128
column=((x/8)*128)+adressofyourcharacterset
mul128low(t)= low8bit(column)
mul128high(t)=high8bit(column)
next t
mask table is :
for t=0 to 128
mask(t)=2^7-(t and 7)
next t
(in general mask should contain this data:
%10000000
%01000000
%00100000
%00010000
%00001000
%00000100
%00000010
%00000001
and starting now over from %100000000)
how to plot to a given x,y coordinate ?
ldy ycoord
ldx xcoord
lda mul128low,x
sta $fe
lda mul128high,x
sta !ff
lda mask,x
ora ($fe),y
sta ($fe),y
plotting to a bitmap is not much more complicated (if we restrict the screen to 32x25), wanna see an example for that too ? ;)
also there's a method invented by graham which uses 3 character sets to cover 32x25 chars, its slightly faster then plotting into a bitmap. but the fastest is the above 16x16 char stuff. |
| |
Trifox Account closed
Registered: Mar 2006 Posts: 108 |
aha, 16x16 charachters = 128x128 pixels?
i have some particular effects in mind which rely in pixel access ... ;( |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
in hires mode, yes. |
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
If you want to do bitmap plotting, it's best to use address tables for each rasterline. This routine will calculate the addresses of each rasterline on a bitmap:
LDX #$00
loop:
TXA
AND #$07
ASL
ASL
STA $FC
TXA
LSR
LSR
LSR
STA $FD
LSR
ROR $FC
LSR
ROR $FC
ADC $FD
ORA #$20 ; bitmap address $2000
STA YTABHI,X
LDA $FC
STA YTABLO,X
INX
CPX #200
BNE loop
For horizontal access, you need these tables for hires pixels:
LDA #$80
STA $FC
LDX #$00
loop:
TXA
AND #$F8
STA XTAB,X
LDA $FC
STA BITTAB,x
LSR
BCC skip
LDA #$80
skip:
STA $FC
INX
BNE loop
Plotting a pixel would be:
LDA YTABLO,Y
STA $FC
LDA YTABHI,Y
STA $FD
LDY XTAB,X
LDA ($FC),Y
ORA BITTAB,X
STA ($FC),Y
Lores (160x200) ofcourse needs different XTAB and BITTAB. |
| |
Cruzer
Registered: Dec 2001 Posts: 1048 |
@Frantic: You gotta be able to crawl before you can walk. I think learning how to plot single pixels is a good place to start for a n00b, then layer, when Trifox he gets annoyed that it's so slow, he might get motivated for learning how to optimize his code. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
cruzer, how true. the learning curve always goes from slow routines -> fast routines. Without understanding the slow way, you have not much chance to understand the fast way. |
| |
Radiant
Registered: Sep 2004 Posts: 639 |
Yeah, you won't exactly break any world records by ORA single pixel plotting, but it's a nice way to start. All my plotters this far have been one pixel at a time. |
| |
Trifox Account closed
Registered: Mar 2006 Posts: 108 |
thank you for tips, i have not finished yet exploring the pixelset stuff, but i made my first sprite multiplexer:
http://www.digitalgott.com/c64/sprites_dotflag.prg
and source:
http://www.digitalgott.com/c64/sprites_dotflag.a
what you think ;)it is all done with sprites, display is not switched off, but turned black ... what is now the best way to put a ~stable raster line on the top or bottom ?
har har, and i can even put text on the right side ...
|
... 7 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 - Next |