A83: Buffer Draw Routines... (As seen on Dim-TI TCPA)
[Prev][Next][Index][Thread]
A83: Buffer Draw Routines... (As seen on Dim-TI TCPA)
I think that are great but the PIXEL routine which is the basis for most
of the routines is extremely unoptimized... I made it much quicker and
smaller (I believe someone mention this before on the list) So I made
the following:
;-----------------------------------------------------------------------;
; Pixel Plotting Routine - By Jason Kovacs, with ZLIB's GetPix Routine.
;
; Revision by Scott Dial
;
; All clock times are + GETPIX
;
; Original - 44 Bytes
;
; White - 182 Clocks ;
; Black - 175 Clocks ;
; Xor - 172 Clocks ;
; Revision - 36 Bytes
;
; White - 136 Clocks ;
; Black - 143 Clocks
;
; Xor - 126 Clocks
;
; This increase in speed and shorting in size makes almost every other
;
; routine increase in speed and shorten in size.
;
;-----------------------------------------------------------------------;
; Input: D = X, E = Y, C = Pixel Color (0-Clear, 1-Plot, 2-XOR Pixel).
;
; Output: Pixel is Plotted to Graph Buffer according to Command in 'C'.
;
;-----------------------------------------------------------------------;
PIXEL:
push bc ; [11] Save Loop Value and Color
push de ; [11] Save the Coordinates
push hl ; [11] Save these Values
ld a, c ; [ 4] Load this to check which Color
or a ; [ 4] CP 0
jr z, PIXEL_WHITE ; [12/7] Execute PIXEL_WHITE if C=0
dec a ; [ 4] CP 1
jr z, PIXEL_BLACK ; [12/7] Execute PIXEL_BLACK if C=1
ld a, d ; [ 4] 'a' now has X Coordinate
call GETPIX ; [17] Call the Pixel Routine from ZLIB
xor (hl) ; [ 7] 'XOR' to Toggle the Pixel
PIXEL_RET:
ld (hl), a ; [ 7] Write the new byte to Graph
Buffer
pop de ; [11] Retrieve the Coords for Other
Routines
pop bc ; [11] Retrieve the Loop Value and Color
ret ; [10] Return
PIXEL_WHITE:
ld a, d ; [ 4] 'a' now has X Coordinate
call GETPIX ; [17] Call the Pixel Routine from ZLIB
CPL ; [ 4] Compliment 'a' for the correct
Bit Mask
and (hl) ; [ 7] 'AND' to Clear the Pixel
jr PIXEL_RET ; [12]
PIXEL_BLACK:
ld a, d ; [ 4] 'a' now has X Coordinate
call GETPIX ; [17] Call the Pixel Routine from ZLIB
or (hl) ; [ 7] 'OR' to Plot the Pixel
jr PIXEL_RET ; [12]
--
Scott "_Wrath_" Dial
homosapian@geocities.com
ICQ#3608935
http://www.geocities.com/~homosapian/