' ' ANDXOR v1.2, A pure QB custom PUT routine, with new extended functions! ' ' (C)opyright 2005, Pure QB Innovations ' ' Email any questions, comments, or suggestions to... Nemesis2473@yahoo.com ' ' THIS PROGRAM IS BEING RELEASED AS FREEWARE SOFTWARE AND MAY BE DISTRIBUTED ' FREELY AS LONG AS ANY PART OF THIS FILE IS NOT ALTERED IN ANY WAY. ' THE AUTHOR OF THIS PROGRAM IS BY NO MEANS RESPONSIBLE FOR ANY DAMMAGES ' THAT HAVE EITHER OCCURED OR MAY OCCUR WHILE USING ANY PART OF THIS PROGRAM. ' IF YOU DO WISH TO USE THESE ROUTINES IN YOUR OWN PROGRAMS ' THEN PLEASE GIVE CREDIT TO THE AUTHOR -=- Mario LaRosa -=- ' '$DYNAMIC ' DEFINT A-Z ' COMMON SHARED VGA(), VXL, VYT, VXR, VYB ' DECLARE SUB VGAPUT (ARRAY(), xxLEFT, yyTOP, frame) DECLARE SUB VGASEE () DECLARE SUB VGASET () ' DIM SHARED VGA(32007) ' VGASET ' '...DEMO... ' CLS ' FOR x = 1 TO 1000 PSET (INT(RND(1) * 319 + 1), INT(RND(1) * 199 + 1)), INT(RND(1) * 255 + 1) NEXT ' VGASEE ' PRINT "ANDXOR v1.2, now has extra features..." PRINT PRINT "All QB's own graphical commands," PRINT "like CLS, PSET, LINE, etc..." PRINT "and the VGAPUT subroutine now" PRINT "outputs to a video buffer!" PRINT PRINT "See... 1,OOO random PSET's 8)" ' DO: LOOP UNTIL INKEY$ <> INKEY$ ' CLS ' FOR s = 32 TO 1 STEP -1 c = 32 - (s \ 2) CIRCLE (32, 32), s, c PAINT (32, 32), c NEXT s CIRCLE (32, 32), 1, 15 PSET (32, 32), 15 ' DIM ball(((5 + (64 * 64)) \ 2) - 1) ' GET (1, 1)-(64, 64), ball(0) ' CLS ' VGAPUT ball(), 128, 68, 1 ' VGASEE ' PRINT "ANDXOR, displays images transparently," PRINT "so no masked image is ever needed." PRINT "Plus, it's fast and supports clipping!" ' DO: LOOP UNTIL INKEY$ <> INKEY$ ' CLS ' a = 1 d = 1 ' DO ' DO ' FOR y = 0 TO 199 LINE (0, y)-(319, y), y NEXT ' h = h + a v = v + d ' IF (h < (0 - 64)) OR (h > 319) THEN a = -a IF (v < (0 - 63)) OR (v > 199) THEN d = -d ' VGAPUT ball(), h, v, 1 ' VGASEE ' LOOP UNTIL INKEY$ <> INKEY$ ' IF f THEN EXIT DO ' VXL = 32 VXR = 288 VYT = 32 VYB = 168 ' PRINT "You can even set the clipping boundries!" PRINT PRINT "VXL = 32 '(Left)" PRINT "VXR = 288 '(Right)" PRINT "VYT = 32 '(Top)" PRINT "VYB = 168 '(Bottom)" ' DO: LOOP UNTIL INKEY$ <> INKEY$ ' f = NOT f ' LOOP UNTIL INKEY$ <> INKEY$ ' PRINT "ANDXOR, also supports multiple frames," PRINT "so you can have multiple tiles an array!" PRINT PRINT "Noticed any flicker?" PRINT PRINT "Now try all that without ANDXOR," PRINT "and you'll encounter many problems..." PRINT "including horrible flicker :(" PRINT PRINT "Have fun :)" ' DO: LOOP UNTIL INKEY$ <> INKEY$ ' SYSTEM ' SUB VGAPUT (ARRAY(), xxLEFT, yyTOP, frame) ' IF frame THEN ' segVGA& = 1& + VARSEG(VGA(0)) segPUT& = VARSEG(ARRAY(0)) ' TW = ARRAY(0) \ 8 TH = ARRAY(1) TP& = TW * TH TI = ((5 + TP&) \ 2) * (frame - 1) ' XR = (xxLEFT + TW) - 1 YB = (yyTOP + TH) - 1 ' IF xxLEFT < VXL THEN IF XR < VXL THEN EXIT SUB LD = (VXL - xxLEFT): XD = LD XL = VXL ELSE XL = xxLEFT END IF ' IF yyTOP < VYT THEN IF YB < VYT THEN EXIT SUB YD = VYT - yyTOP YT = VYT ELSE YT = yyTOP END IF ' IF XR > VXR THEN IF XL > VXR THEN EXIT SUB XD = XD + (XR - VXR) XR = VXR END IF ' IF YB > VYB THEN IF YT > VYB THEN EXIT SUB YB = VYB END IF ' aB& = (4 + (TI * 2&)) + ((YD * TW) + LD) ' DIM AC(XL TO XR) ' bSUM = (TW - XD) bDIV = (bSUM \ &H10) bMOD = (bSUM MOD &H10) ' DIM BT(&H0 TO &HF) DIM BD(&H0 TO &HF) ' FOR x = &H0 TO &HF BD(x) = (x + XL) NEXT ' FOR VY = (YT * 20) TO (YB * 20) STEP 20 ' TS& = segPUT& DS& = segVGA& + VY ' BT(&H0) = (&H0 + aB&) BT(&H1) = (&H1 + aB&) BT(&H2) = (&H2 + aB&) BT(&H3) = (&H3 + aB&) BT(&H4) = (&H4 + aB&) BT(&H5) = (&H5 + aB&) BT(&H6) = (&H6 + aB&) BT(&H7) = (&H7 + aB&) BT(&H8) = (&H8 + aB&) BT(&H9) = (&H9 + aB&) BT(&HA) = (&HA + aB&) BT(&HB) = (&HB + aB&) BT(&HC) = (&HC + aB&) BT(&HD) = (&HD + aB&) BT(&HE) = (&HE + aB&) BT(&HF) = (&HF + aB&) ' GSR = 0 ' FOR x = &H1 TO bDIV ' DEF SEG = TS& ' BF: BF = PEEK(BT(&HF)) BE: BE = PEEK(BT(&HE)) BD: BD = PEEK(BT(&HD)) BC: BC = PEEK(BT(&HC)) BB: BB = PEEK(BT(&HB)) BA: BA = PEEK(BT(&HA)) B9: B9 = PEEK(BT(&H9)) B8: B8 = PEEK(BT(&H8)) B7: B7 = PEEK(BT(&H7)) B6: B6 = PEEK(BT(&H6)) B5: B5 = PEEK(BT(&H5)) B4: B4 = PEEK(BT(&H4)) B3: B3 = PEEK(BT(&H3)) B2: B2 = PEEK(BT(&H2)) B1: B1 = PEEK(BT(&H1)) B0: B0 = PEEK(BT(&H0)) ' IF GSR THEN RETURN ' DEF SEG = DS& ' TF: IF BF THEN POKE BD(&HF), BF TE: IF BE THEN POKE BD(&HE), BE TD: IF BD THEN POKE BD(&HD), BD TC: IF BC THEN POKE BD(&HC), BC TB: IF BB THEN POKE BD(&HB), BB TA: IF BA THEN POKE BD(&HA), BA T9: IF B9 THEN POKE BD(&H9), B9 T8: IF B8 THEN POKE BD(&H8), B8 T7: IF B7 THEN POKE BD(&H7), B7 T6: IF B6 THEN POKE BD(&H6), B6 T5: IF B5 THEN POKE BD(&H5), B5 T4: IF B4 THEN POKE BD(&H4), B4 T3: IF B3 THEN POKE BD(&H3), B3 T2: IF B2 THEN POKE BD(&H2), B2 T1: IF B1 THEN POKE BD(&H1), B1 T0: IF B0 THEN POKE BD(&H0), B0 ' IF GSR THEN RETURN ' TS& = TS& + &H1 DS& = DS& + &H1 ' NEXT ' GSR = -1 ' SELECT CASE bMOD CASE &H1 DEF SEG = TS& GOSUB B0 DEF SEG = DS& GOSUB T0 CASE &H2 DEF SEG = TS& GOSUB B1 DEF SEG = DS& GOSUB T1 CASE &H3 DEF SEG = TS& GOSUB B2 DEF SEG = DS& GOSUB T2 CASE &H4 DEF SEG = TS& GOSUB B3 DEF SEG = DS& GOSUB T3 CASE &H5 DEF SEG = TS& GOSUB B4 DEF SEG = DS& GOSUB T4 CASE &H6 DEF SEG = TS& GOSUB B5 DEF SEG = DS& GOSUB T5 CASE &H7 DEF SEG = TS& GOSUB B6 DEF SEG = DS& GOSUB T6 CASE &H8 DEF SEG = TS& GOSUB B7 DEF SEG = DS& GOSUB T7 CASE &H9 DEF SEG = TS& GOSUB B8 DEF SEG = DS& GOSUB T8 CASE &HA DEF SEG = TS& GOSUB B9 DEF SEG = DS& GOSUB T9 CASE &HB DEF SEG = TS& GOSUB BA DEF SEG = DS& GOSUB TA CASE &HC DEF SEG = TS& GOSUB BB DEF SEG = DS& GOSUB TB CASE &HD DEF SEG = TS& GOSUB BC DEF SEG = DS& GOSUB TC CASE &HE DEF SEG = TS& GOSUB BD DEF SEG = DS& GOSUB TD CASE &HF DEF SEG = TS& GOSUB BE DEF SEG = DS& GOSUB TE END SELECT ' aB& = aB& + TW ' NEXT ' END IF ' END SUB SUB VGASEE ' DEF SEG POKE VGA(0), VGA(2) POKE VGA(1), VGA(3) PUT (0, 0), VGA(6), PSET POKE VGA(0), VGA(4) POKE VGA(1), VGA(5) ' END SUB SUB VGASET ' DEF SEG SCREEN 13: CLS VIDEOseg& = 1& + VARSEG(VGA(0)) n = &H7 FOR b& = 0 TO 63999 STEP 2 n = n + 1 l = PEEK(b&) h = PEEK(b& + 1) IF h > &H7F THEN VGA(n) = l + ((&HFF00 + h) * &H100) ELSE VGA(n) = l + (&H100 * h) END IF IF VGA(n - 1) = &H7DA0 AND VGA(n) = &HA000 THEN VGA(0) = b& VGA(1) = VGA(0) + 1 VGA(2) = PEEK(VGA(0)) VGA(3) = PEEK(VGA(1)) VGA(4) = VIDEOseg& AND &HFF IF (VIDEOseg& AND &H8000) THEN VGA(5) = ((VIDEOseg& AND &HFF00) \ &HFF) + &H100 ELSE VGA(5) = (VIDEOseg& AND &HFF00) \ &HFF END IF VGA(6) = 2560 VGA(7) = 200 POKE VGA(0), VGA(4) POKE VGA(1), VGA(5) EXIT FOR END IF NEXT ' VXL = 0 VYT = 0 VXR = 319 VYB = 199 ' END SUB