BBS: Inland Empire Archive Date: 11-19-92 (22:42) Number: 349 From: BRETT LEVIN Refer#: NONE To: ALL Recvd: NO Subj: Tweaked 320x400x256 M 1/2 Conf: (2) Quik_Bas
Here's my 320x400 mode code, for any and all who are intersted. It
should work on all 100% compat. VGAs (F.L.W. <g>).. Have Fun!
Begin------------------------------------------
' tweakvga.bas by Brett Levin 11/13/92 (Friday the 13th! <g>)
' (latest update 11/19/92)
' You are free to use, destory, mangle, and pass on these routines as
' you wish. All I ask is that if you use it in a program, please give credit
' where credit is due. Thanks!
'
' Try this both compiled and in the environment, and at any different
' speeds your computer supports..
' I wrote this from a text file posted by Earl Montgomery (thanx!), and
' my VGA reference.. I took a few risks while getting this to work but
' as far as I know, it should do fine on any register-compatible VGA.
' Just in case, though, I am not liable for any damages incurred by
' use or modification of this program.. :-)
' Otherwise, enjoy the show! -Brett
DECLARE SUB BL.TweakMode ()
DEFINT A-Z
DIM Red(256), Green(256), Blue(256)
DEF SEG = &HA000 ' VGA segment
BL.TweakMode ' Enter 320x400x256 mode..
' First, clear the screen of any junk...
OUT &H3C4, 2 ' This code sets the write plane enable register to all
OUT &H3C5, 15 ' four planes..
'FOR q = 0 TO 31999 ' 32k per plane, 128k total = 2 pages for a 256k vga
' POKE q, 0 ' This'll clear the screen, but not necessary now
'NEXT q
' ***** This is part I
linecolor = 1
FOR x = 0 TO 79
FOR y = 0 TO 399
POKE (y * 80) + x, linecolor
IF linecolor = 128 THEN linecolor = 1 ELSE linecolor = linecolor + 1
NEXT y
NEXT x
' Set up the palette
FOR a = 0 TO 63
Red(a) = SQR(a) * 5
Green(a) = SQR(a) * 2
Blue(a) = SQR(a) * 1
NEXT
q = 64
FOR a = 63 TO 0 STEP -1
Red(q) = SQR(a) * 5
Green(q) = SQR(a) * 2
Blue(q) = SQR(a) * 1
q = q + 1
NEXT
Red(129) = 50
Blue(129) = 50
GOSUB out.pal
COLOR 129
PRINT "Lava" ' Screwed up because of planar mapping, but looks cool <g>
GOSUB rotate
' ***** This is part II
' Set up the palette
FOR a = 0 TO 63
Red(a) = SQR(a) * 1
Green(a) = SQR(a) * 2
Blue(a) = SQR(a) * 5
NEXT
q = 64
FOR a = 63 TO 0 STEP -1
Red(q) = SQR(a) * 1
Green(q) = SQR(a) * 2
Blue(q) = SQR(a) * 5
q = q + 1
NEXT
GOSUB out.pal
linecolor = 1
FOR x = 0 TO 79 STEP 2
FOR y = 0 TO 399
POKE (y * 80) + x, linecolor
IF linecolor > 127 THEN linecolor = 1 ELSE linecolor = linecolor + 1
NEXT y
FOR y = 399 TO 0 STEP -1
POKE (y * 80) + (x + 1), linecolor
IF linecolor > 127 THEN linecolor = 1 ELSE linecolor = linecolor + 1
NEXT y
NEXT x
COLOR 129
LOCATE 1, 1
PRINT "Cool, huh?"
GOSUB rotate
SCREEN 9
DO
FOR t! = 0 TO 12.55 STEP .1
PRINT TAB(INT(37 + 30 * SIN(t!))); "See Ya!": IF LEN(INKEY$) <> 0 THEN END
NEXT t!
LOOP
rotate:
DO 'cycle through colors
FOR a = 127 TO 0 STEP -1
FOR B = 0 TO 127
OUT &H3C7, B + 1: OUT &H3C8, B + 1
D = (a + B) MOD 128
OUT &H3C9, Red(D)
OUT &H3C9, Green(D)
OUT &H3C9, Blue(D)
NEXT
IF INKEY$ <> "" THEN EXIT DO
NEXT
LOOP
RETURN
out.pal:
FOR a = 0 TO 255
OUT &H3C7, a: OUT &H3C8, a 'send colors directly for speed
OUT &H3C9, Red(a): OUT &H3C9, Green(a): OUT &H3C9, Blue(a)
NEXT
RETURN
SUB BL.TweakMode
' Yes, I have taken on Rich Geldreich's sub/func naming conventions.. :-)
' (perhaps from messing around with his code so much! <g>)
SCREEN 13 ' Set normal 320x200x256
OUT &H3D4, 9 ' Maximum scan line/text character height
OUT &H3D5, &H40
>>> Continued to next message
* SLMR 2.1a * Dammit, Jim! I'm a doctor, not a tagline!
--- WM v2.04/91-0049

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET