'=========================================================================== ' Subject: WRITING PIXELS IN MODE 12H Date: 06-22-96 (00:00) ' Author: Kurt Kuzba Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: EGAVGA.ABC '=========================================================================== ' I also worked out a pixel location algorithm for 4-plane 'graphics memory and designed a mode 12h putpixel with it. 'Notice that there is a four-step process in the pix12 routine 'which could be served by a FOR/NEXT loop. Unrolling such loops 'is a standard method of speed optimization. '_|_|_| PUTPIX12.BAS '_|_|_| An example of writing pixels in video mode 12h. '_|_|_| No warrantees or guarantees are given or implied. '_|_|_| Released to PUBLIC DOMAIN by Kurt Kuzba. (6/22/96) DEFINT A-Z DECLARE SUB pix12 (vertical%, horizontal%, c%) DIM SHARED bitfield(7) AS INTEGER bitfield(0) = 128: bitfield(1) = 64: bitfield(2) = 32 bitfield(3) = 16: bitfield(4) = 8: bitfield(5) = 4 bitfield(6) = 2: bitfield(7) = 1 SCREEN 12 FOR y = 0 TO 639: pix12 y / 1.3, y, 5: NEXT FOR y = 0 TO 639: pix12 479 - (y / 1.3), y, 14: NEXT FOR y = 0 TO 639: pix12 y / 1.3, y, 14: NEXT FOR y = 0 TO 639: pix12 479 - (y / 1.3), y, 5: NEXT FOR c = 15 TO 0 STEP -1 FOR y = 308 - 5 * c TO 316 + 5 * c FOR x = 234 - 5 * c TO 242 + 5 * c pix12 x, y, c: IF INKEY$ <> "" THEN SCREEN 0: END NEXT NEXT NEXT: WHILE INKEY$ = "": WEND: SCREEN 0 SUB pix12 (vertical%, horizontal%, c%) IF (vertical% < 0) OR (horizontal% < 0) THEN EXIT SUB IF (vertical% > 479) OR (horizontal% > 639) THEN EXIT SUB DEF SEG = &HA000: OUT &H3CE, 4: OUT &H3C4, 2 P& = vertical%: P& = P& * 80 + horizontal% \ 8 bit% = bitfield(horizontal% AND 7): bitmask% = 255 - bit% OUT &H3CF, 0: OUT &H3C5, 1: B% = PEEK(P&) AND bitmask% IF (c% AND 1) <> 0 THEN B% = B% OR bit% POKE P&, B% OUT &H3CF, 1: OUT &H3C5, 2: B% = PEEK(P&) AND bitmask% IF (c% AND 2) <> 0 THEN B% = B% OR bit% POKE P&, B% OUT &H3CF, 2: OUT &H3C5, 4: B% = PEEK(P&) AND bitmask% IF (c% AND 4) <> 0 THEN B% = B% OR bit% POKE P&, B% OUT &H3CF, 3: OUT &H3C5, 8: B% = PEEK(P&) AND bitmask% IF (c% AND 8) <> 0 THEN B% = B% OR bit% POKE P&, B% END SUB '_|_|_| end PUTPIX12.BAS