Difference between revisions of "Programming:Fast plot"
From CPCWiki - THE Amstrad CPC encyclopedia!
(Changed &X into % - (old code which I used with another compiler)) |
m (Sorted routines by mode) |
||
Line 1: | Line 1: | ||
− | == Fast plotting routine for MODE | + | == Fast plotting routine for MODE 0 == |
− | + | Converted from the Mode 1 routine by [[User:Executioner|The Executioner]] | |
− | '''Input:''' DE = ''X (0.. | + | '''Input:''' DE = ''X (0..159)'', HL = ''Y (0..199)'' |
<pre> | <pre> | ||
Line 22: | Line 22: | ||
ADD HL, HL ;of the raster line | ADD HL, HL ;of the raster line | ||
− | + | SRL D ;calculate X\2, because | |
− | SRL D ;calculate X\ | + | RR E ;2 pixel per byte, Carry is X MOD 2 |
− | RR E ; | + | |
− | + | ||
− | + | ||
− | LD C, % | + | LD C, %10101010 ;Bitmask for MODE 1 |
− | + | JR NC, NSHIFT ;-> = 0, no shift | |
− | JR | + | SHIFT LD C, %01010101 ;other bitmask for right pixel |
− | SHIFT | + | |
− | + | ||
− | + | ||
− | NSHIFT LD A, (CMASK) ;get color mask | + | NSHIFT ADD HL, DE ;+ HL = Screenaddress |
+ | LD A, (CMASK) ;get color mask | ||
XOR (HL) ;XOR screenbyte | XOR (HL) ;XOR screenbyte | ||
AND C ;AND bitmask | AND C ;AND bitmask | ||
Line 44: | Line 39: | ||
− | == Fast plotting routine for MODE | + | == Fast plotting routine for MODE 1 == |
− | + | This routine is approx. 6 times faster than the OS routine GRA PLOT, because it is dpendent to MODE 1 and doesn't perform range checks. It can draw 10500 pixels per second. | |
− | '''Input:''' DE = ''X (0.. | + | '''Input:''' DE = ''X (0..319)'', HL = ''Y (0..199)'' |
<pre> | <pre> | ||
Line 67: | Line 62: | ||
ADD HL, HL ;of the raster line | ADD HL, HL ;of the raster line | ||
− | SRL D ;calculate X\ | + | LD A, E ;Lowbyte X to A |
− | RR E ; | + | SRL D ;calculate X\4, because |
+ | RR E ;4 pixel per byte | ||
+ | SRL E | ||
+ | ADD HL, DE ;+ HL = Screenaddress | ||
− | LD C, % | + | LD C, %10001000 ;Bitmask for MODE 1 |
− | JR | + | AND %00000011 ;A = X MOD 4 |
− | SHIFT | + | JR Z, NSHIFT ;-> = 0, no shift |
+ | SHIFT SRL C ;move bitmask to pixel | ||
+ | DEC A ;loop counter | ||
+ | JR NZ,SHIFT ;-position | ||
− | NSHIFT | + | NSHIFT LD A, (CMASK) ;get color mask |
− | + | ||
XOR (HL) ;XOR screenbyte | XOR (HL) ;XOR screenbyte | ||
AND C ;AND bitmask | AND C ;AND bitmask |
Revision as of 04:16, 24 August 2006
Fast plotting routine for MODE 0
Converted from the Mode 1 routine by The Executioner
Input: DE = X (0..159), HL = Y (0..199)
CMASK EQU &B338 ;Adress for colormask ;664/6128: &B6A3 FPLOT LD A, L ;A = Lowbyte Y AND %00000111 ;isolate Bit 0..2 LD H, A ;= y MOD 8 to H XOR L ;A = Bit 3..7 of Y LD L, A ;= (Y\8)*8 to L LD C, A ;store in C LD B, &60 ;B = &C0\2 = Highbyte Screenstart\2 ADD HL, HL ;HL * 2 ADD HL, HL ;HL * 4 ADD HL, BC ;+ BC = Startaddress ADD HL, HL ;of the raster line SRL D ;calculate X\2, because RR E ;2 pixel per byte, Carry is X MOD 2 LD C, %10101010 ;Bitmask for MODE 1 JR NC, NSHIFT ;-> = 0, no shift SHIFT LD C, %01010101 ;other bitmask for right pixel NSHIFT ADD HL, DE ;+ HL = Screenaddress LD A, (CMASK) ;get color mask XOR (HL) ;XOR screenbyte AND C ;AND bitmask XOR (HL) ;XOR screenbyte LD (HL), A ;new screenbyte RET ;done
Fast plotting routine for MODE 1
This routine is approx. 6 times faster than the OS routine GRA PLOT, because it is dpendent to MODE 1 and doesn't perform range checks. It can draw 10500 pixels per second.
Input: DE = X (0..319), HL = Y (0..199)
CMASK EQU &B338 ;Adress for colormask ;664/6128: &B6A3 FPLOT LD A, L ;A = Lowbyte Y AND %00000111 ;isolate Bit 0..2 LD H, A ;= y MOD 8 to H XOR L ;A = Bit 3..7 of Y LD L, A ;= (Y\8)*8 to L LD C, A ;store in C LD B, &60 ;B = &C0\2 = Highbyte Screenstart\2 ADD HL, HL ;HL * 2 ADD HL, HL ;HL * 4 ADD HL, BC ;+ BC = Startaddress ADD HL, HL ;of the raster line LD A, E ;Lowbyte X to A SRL D ;calculate X\4, because RR E ;4 pixel per byte SRL E ADD HL, DE ;+ HL = Screenaddress LD C, %10001000 ;Bitmask for MODE 1 AND %00000011 ;A = X MOD 4 JR Z, NSHIFT ;-> = 0, no shift SHIFT SRL C ;move bitmask to pixel DEC A ;loop counter JR NZ,SHIFT ;-position NSHIFT LD A, (CMASK) ;get color mask XOR (HL) ;XOR screenbyte AND C ;AND bitmask XOR (HL) ;XOR screenbyte LD (HL), A ;new screenbyte RET ;done