Copy Link
Add to Bookmark
Report
Demo News 111
.Start.of.DemoNews.111..............................................Size:44,955
______/\___________________________ __ ________________ ___ /\_______
\____ \ ________ _ _ ______ \ / \| \ ________ | \/ ______/
/ | \ _) \ \_/ \ | \ / \ \ _) \ | \______ \
/ | \ \ | \ | \ / \ \ /~\ \ / \
\_____ /_______/___| /________/ \____\_____/_______/_________/________/
\_____/ |____/
| Subscribers : 1830
DemoNews Issue #111 - December 19, 1995 | Last Week : 1794
------------- | Change : +36
DemoNews is a newsletter for the demo scene. | Archive Size : 1477M
It is produced by Hornet at the site ftp.cdrom.com. | Last Week : 1546M
Our demo archive is located under /pub/demos. | Remaining : 449M
|
=-[Contents]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Calendar
Uploads
Articles
Introduction................................Snowman
VGA Hardware Tricks, Part 3/6...............Trixter
United Kingdom Coder Needed.................Robin Green
Australian Demo Party (OZ96)................Random
Subscribing
Closing
=-[Calendar]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Date Event Location Description
--------- ----------------------- --------- ---------------------------------
24 Dec 95 Movement Party Israel info: /party/1995/MOV95
mail: scorpios@mail.snunit.k12.il
27 Dec 95 The Party Denmark info: /party/1995/TP95
mail: theparty@cybernet.dk
12 Jan 96 Juhla Pi Party Finland info: /party/1996/JUH96
mail: mhyvonen@ratol.fi
17 Jan 96 Australian Party Australia info: /party/1996/OZ96
mail: random@geko.com.au
28 Jan 96 General Probe 2 Party Poland info: /party/1996/GP96
mail: s146630@ire.pw.edu.pl
1 Feb 96 8086 Compo Deadline [n/a] info: /hornet/8086
mail: trixter@ftp.cdrom.com
29 May 96 Naid Party Canada <no information available yet>
=-[Uploads]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=----------------------------------------------------------[File Information]-=
All files listed below are on ftp.cdrom.com under /pub/demos.
Please keep in mind that all ratings are subjective.
If your file transfers are too slow, there are several alternatives:
Use our european mirror at ftp://ftp.uni-paderborn.de/pub/pc-demos
Try getting files from the web at http://www.cdrom.com/pub/demos
See /hornet/demonews/101-120/demonews.102 for details about ftpmail.
You may also wish to check out a couple of other good demo sites:
ftp://ftp.arosnet.se/e:\demo maintained by Zodiak / Cascada
ftp://hagar.arts.kuleuven.ac.be/demos maintained by Sleeping Dog / Natives
=-------------------------------------------------------------[Demos:General]-=
Location /demos/alpha Size Rated Description
=-------------------------------- ---- ----- ---------------------------------=
/1995/s/sck-2clx.zip 615 *** Too Complex by Shock
/1995/z/z_x-mas.zip 21 *** X-mas Intro by Zorlim
The Party '94 Demos (TP94:demo:)
/1994/v/vertox.zip 1526 *** 07: Vertox by Taurus PC
/1994/b/black.zip 1423 ***+ 11: Black Ice by Success
/1995/m/mb-paec.zip 1402 [n/a] XX: Explict Coding by Mystic Bytes
/1994/r/regress.zip 295 **+ XX: Regression by Yodel
/1994/s/strange.zip 201 ***+ XX: Strange Feelings by Extreme
/1994/z/zero.zip 280 *** XX: Zero Pulse by Nuclear Threat
The Party '94 Intros (TP94:in64:)
/1995/e/e_jade.zip 62 **** EE: Jade by Eclipse
/1994/r/rising.zip 61 *** 05: Rising by Blank
/1994/v/vomit.zip 27 [n/a] 07: Vomit by Cryonics
/1994/r/revenge.zip 64 **+ 09: Revenge by Realtime
/1994/i/i.zip 51 ** 15: I by Information
=--------------------------------------------------------[Demos:Non-Reviewed]-=
Location /demos/alpha Size Description
=-------------------------------- ---- ---------------------------------------=
/bbs/d/devsite.zip 649 Developers Site by Waterlogic
=-------------------------------------------------------------[Music:General]-=
Location /demos/music Size Rated Description
=-------------------------------- ---- ----- ---------------------------------=
/disks/1994/helltune.zip 560 *** Hell Songs by CC Catch
/disks/1995/e/ex-v-13.zip 660 ** Exclamation Vol. 13 by Excl.
/disks/1995/e/ex-v-14.zip 603 ** Exclamation Vol. 14 by Excl.
/disks/1995/e/ex-v-15.zip 615 **+ Exclamation Vol. 15 by Excl.
/disks/1995/n/noisepk5.zip 1408 **+ Noise music pack #5
/disks/1995/p/ph-1295a.zip 1359 ***+ [1/2] pHluid 12/95 by Acid
/disks/1995/p/ph-1295b.zip 1360 ***+ [2/2] pHluid 12/95 by Acid
/disks/1995/r/radpaq3a.zip 982 *+ [1/3] Donde Ici by Radiance
/disks/1995/r/radpaq3b.zip 1029 *+ [2/3] Donde Ici by Radiance
/disks/1995/r/radpaq3c.zip 213 *+ [3/3] Donde Ici by Radiance
/disks/1995/s/sky_mc12.zip 1422 **+ [1/2] The Mind Cage by Skyjump
/disks/1995/s/sky_mc22.zip 1249 **+ [2/2] The Mind Cage by Skyjump
/songs/1995/mod/e/evolved.zip 153 ***+ Semi-Evolved by Caramel
/songs/1995/mod/i/infrstrc.zip 181 * Infrastructure by T.U.O.
/songs/1995/mod/l/lw_rabbi.zip 171 ** Rabbit on the Moon by Luna
/songs/1995/mod/m/mcgyver2.zip 151 ** MacGyver Theme 2 by Dempsey
/songs/1995/mod/r/rabbit.zip 175 + Rabbit on The Moon by Luna
/songs/1995/mod/r/rb-crygn.zip 224 + Cryogen by Raphael Blackwolf
/songs/1995/mod/r/rb-dncry.zip 99 * Don't Cry by Raphael Blackwolf
/songs/1995/mod/r/rb-drmsp.zip 316 *+ Dreamtime Spirit by R. Blackwolf
/songs/1995/mod/r/rb-kth95.zip 131 + Katharsis 1995 by R. Blackwolf
/songs/1995/mod/r/rb-pjuta.zip 218 * Pejuta by Raphael Blackwolf
/songs/1995/mtm/k/k_north.zip 115 *** Northern .. by Quarex & theHacker
/songs/1995/s3m/f/fox-ang.zip 246 * A Dragon's Anguish by Fox
/songs/1995/s3m/h/h_r.zip 54 *** Hit & Run by F. Ashraf
/songs/1995/s3m/h/hod_miz.zip 143 *** Hero of Dreams by Mizery
/songs/1995/s3m/hd-uchip.zip 3 ** Underchip by Undertaker
/songs/1995/s3m/i/interact.arj 94 **+ Interactive Force by PsychoTron
/songs/1995/s3m/j/j_glad.zip 24 ** Gladrow Happiness by Alphabitz
/songs/1995/s3m/j/j_lomein.zip 51 ** Lo Mein City by Alphabitz
/songs/1995/s3m/j/jbgrrrrr.zip 73 ** Grrrrrrr! by Schizoid
/songs/1995/s3m/j/jbsphous.zip 167 **+ South Pacific House by Schizoid
/songs/1995/s3m/j/jbtrance.zip 168 **+ Trance w/o Your Pants by Schizoid
/songs/1995/s3m/j/jjj-angl.zip 456 **** Call Me an Angel by JJJ
/songs/1995/s3m/j/jjj-dick.zip 198 ** Short Dick Man by JJJ
/songs/1995/s3m/j/jjj-love.zip 254 ****+ Burning Love by JJJ
/songs/1995/s3m/j/jl-elixx.zip 8 *** Elixxer's 32k Funhouse by Joll
/songs/1995/s3m/j/julia.zip 336 ***+ Julia by Thanatos
/songs/1995/s3m/j/just1fix.zip 789 *+ Ministry-Just One Fix by Bedlamite
/songs/1995/s3m/k/k_joy.zip 260 *** Dance Your Joy by Karl
/songs/1995/s3m/k/k_numb.zip 239 *** Cold, Evil and Numb by B00mer
/songs/1995/s3m/k/kx_pkngz.zip 175 ** Party Kingz by Kaotix
/songs/1995/s3m/l/liberty.zip 547 ****+ Liberty by The Zapper!
/songs/1995/s3m/l/lid.zip 158 ** Lost in the Darkness by Anodyne
/songs/1995/s3m/m/moonbow.zip 651 *** Moonbow by Stephano
/songs/1995/s3m/n/nb-td.zip 294 **+ Thunderdoom remix by Hard-C
/songs/1995/s3m/n/newcore3.zip 148 ** New Core 3 by Brutac
/songs/1995/s3m/o/oq-flowr.zip 81 **** Flower Drizzle by Octoque
/songs/1995/s3m/p/paella.zip 352 **** Paella by Caramel
/songs/1995/s3m/p/progress.zip 187 *** Progression by Miracle
/songs/1995/s3m/s/sck-pia.zip 282 *+ Pianoslave by DeansDale/Shock
/songs/1995/s3m/s/sck-rpe3.zip 295 * Mindraper 3 Armageddon by TSC
/songs/1995/s3m/s/socirc.zip 238 **+ Circuitry...Society by P. Richard
/songs/1995/s3m/s/somtimes.zip 256 *** Sometimes by Darkwolf
/songs/1995/s3m/t/taz-sa.zip 77 + Simply Arlo by Taz/Arlos
/songs/1995/s3m/z/zirkon.zip 146 ** Zirkon Spheres by Petador
/songs/1995/s3m/z/znc-at.zip 79 **+ Arabian Tights by Zinc/RADiANCE
/songs/1995/s3m/z/znc-auto.zip 69 **+ Semi Automatic Vampire by Zinc
/songs/1995/s3m/z/znc-dimx.zip 200 ** Dimension-X by Zinc
/songs/1995/s3m/z/znc-elas.zip 74 **+ Elasticity by Zinc/RADiANCE
/songs/1995/s3m/z/znc-epic.zip 81 *+ Epicolor by Zinc/RADiANCE
/songs/1995/s3m/z/znc-phat.zip 129 **+ Phatty Acids by Zinc
/songs/1995/s3m/z/znc-wow.zip 25 *+ Wowee! by Zinc
/songs/1995/s3m/z/zoloft.zip 52 ** Zoloft Squared by Loki/Spice
/songs/1995/s3m/z/zoned.zip 190 *** Zoned by Malakai/Neophyte
/songs/1995/xm/c/cb-apart.arj 100 *+ Never Tear Us Apart(rmx) by Pedro
/songs/1995/xm/c/cb-brutl.arj 156 ** Brutal Sounds by Truxx
/songs/1995/xm/c/cb-chrly.arj 214 *** Charly Says... by Pedro
/songs/1995/xm/c/cb-dnat.arj 461 ***+ D-Nation by Logos
/songs/1995/xm/c/cb-dream.arj 344 *** DreamScapes by Logos
/songs/1995/xm/c/cb-dummy.arj 190 *** Dummy (Dub version) by Pedro
/songs/1995/xm/c/cb-elude.arj 72 **+ Eluded Dreams by Logos
/songs/1995/xm/c/cb-fctry.arj 101 ** Just Another Factory by Pedro
/songs/1995/xm/c/cb-fdrum.arj 109 ** Funky Drum by TruxX
/songs/1995/xm/c/cb-fpeas.arj 104 *** Falling peas by Logos
/songs/1995/xm/c/cb-frogs.arj 314 *** Frogs! by Pedro
/songs/1995/xm/c/cb-gaijn.arj 185 *** Gaijin by Pedro
/songs/1995/xm/c/cb-groln.arj 103 **+ Grolin by Logos
/songs/1995/xm/c/cb-hday1.arj 62 **+ Holiday Demo #1 by Logos
/songs/1995/xm/c/cb-ihate.arj 154 *** I Hate You by Logos
/songs/1995/xm/c/cb-jnaut.arj 97 ** Juggernaut by Pedro
/songs/1995/xm/c/cb-jshep.arj 72 ** Jungle Sheepward by Guy
/songs/1995/xm/c/cb-just.arj 149 **+ I'm Just Hangin' by Guy
/songs/1995/xm/c/cb-loser.arj 115 ** Loser (rmx) by Pedro
/songs/1995/xm/c/cb-lost.arj 86 ***+ Lost Child by Logos
/songs/1995/xm/c/cb-lsong.arj 141 * Love Song by TruxX
/songs/1995/xm/c/cb-nineo.arj 78 *** Nine-one-one by Logos
/songs/1995/xm/c/cb-nuera.arj 35 *** New Era by Logos
/songs/1995/xm/c/cb-oddst.arj 101 **** Odd Steps by Logos
/songs/1995/xm/c/cb-rbrth.arj 86 ** Rebirth of Slick (rmx) by Pedro
/songs/1995/xm/c/cb-sky.arj 386 ***+ Lost in the Sky by Pedro
/songs/1995/xm/c/cb-slang.arj 145 *** Slang Language by Logos
/songs/1995/xm/c/cb-sucks.arj 57 *+ Life Sucks by Pedro
/songs/1995/xm/c/cb-tribl.arj 123 **+ Tribal Noise by TruxX
/songs/1995/xm/c/cb-trmrs.arj 314 *** Tremors by Pedro
/songs/1995/xm/c/cb-truth.arj 97 **+ Gate of Truth by Logos
/songs/1995/xm/c/cb-wings.arj 322 ** Brian's Wings by Caligola
/songs/1995/xm/c/cb-works.arj 193 *** The Works by Logos
/songs/1995/xm/c/cb-wwild.arj 261 **+ Wicked and Wild by Pedro
/songs/1995/xm/o/o_kyra.zip 478 *** Kyra's dream by Otis
/songs/1995/xm/p/philadel.zip 432 **+ Streets of Phila. by Dempsey
/songs/1995/xm/r/raf-town.zip 333 ***+ Slow Town by Trifid/R.A.F
/songs/1995/xm/s/sl-fbms.zip 337 * Fly By My Side by Slog
/songs/1995/xm/s/slowburn.zip 496 **+ Slow Burn By Scirocco
/songs/1995/xm/s/sol-mind.zip 331 **+ Mindstate by Solaris/Nearly Gods
=----------------------------------------------------------[Graphics:General]-=
Location /demos/graphics Size Rated Description
=-------------------------------- ---- ----- ---------------------------------=
/disks/1995/s1p-artd.zip 470 *** Artdisk by Surprise Productions
/disks/1995/zanybird.arj 610 ***+ Pics from Zany Bird by Eclipse
/images/1994/f/fish-s1p.zip 244 ***+ TP94:grfx:EE: Fish by J.O.E.
=-----------------------------------------------------[Graphics:Non-Reviewed]-=
Location /demos/graphics Size Description
=-------------------------------- ---- ---------------------------------------=
/people/a/addict.gif 22 Addict
/people/a/ae.gif 63 AE
/people/a/ambient.gif 84 Ambient
/people/a/atlantic.gif 48 Atlantic
/people/a/azure.gif 25 Azure
/people/b/beandip.gif 9 Bean Dip
/people/b/bigjim.gif 22 Big Jim / Valhalla
/people/b/bone.gif 35 Bone
/people/b/brainsto.gif 84 Brainstorm
/people/b/bwolf.gif 34 B. Wolf
/people/c/char.gif 39 Charlatan?
/people/d/denthor.gif 35 Denthor / Asphyxia
/people/d/dynabyte.gif 27 Dynabyte
/people/g/godhead.gif 28 GodHead
/people/g/gooroo.gif 7 GooRoo / KFMF
/people/h/hadji.gif 30 Hadji
/people/h/hench.gif 21 Henchman / Future Crew
/people/h/henrix.gif 42 Henrix
/people/i/ink.gif 4 Ink
/people/j/jailcode.gif 22 Jailcode
/people/j/jayntrev.jpg 24 Jay and Trev?
/people/k/karl1.jpg 33 Karl
/people/k/karl3.jpg 41 Karl
/people/l/lb1.jpg 36 LB
/people/m/maelcum.gif 8 Maelcum / KFMF
/people/m/matrix.gif 20 Matrix
/people/m/moomin.gif 32 Moomin
/people/m/mrfanati.gif 22 Mr. Fanatic?
/people/m/muuma.jpg 69 Muuma
/people/n/necros.gif 28 Necros / Legend Design
/people/n/nexus.gif 98 Nexus
/people/o/oc.gif 31 OC
/people/p/phire.jpg 8 Phire
/people/p/phurion.gif 59 Phurion
/people/p/pitbull.gif 2 Pitbull
/people/p/popcorn.jpg 80 Popcorn
/people/q/quarlaur.gif 90 Quarex
/people/r/reebok.jpg 97 Reebok
/people/r/rpenguin.gif 14 Red Penguin
/people/s/saigon.gif 64 Miss Saigon / Threesome
/people/s/sandman.gif 9 Sandman / Valhalla
/people/s/saracen.gif 7 Saracen / EMF
/people/s/sasqatch.gif 12 Sasqatch
/people/s/shadowh.gif 21 Shadow Hunter?
/people/s/sinister.gif 40 Sinister
/people/s/skaven.gif 37 Skaven / Future Crew
/people/t/thefaker.gif 20 The Faker
/people/t/trug.gif 28 Trug / Future Crew
/people/v/volt.gif 10 Volt
/people/w/wwizard.gif 23 White Wizard?
/people/z/zab.jpg 58 Zab / KFMF
=------------------------------------------------[Miscellaneous:Non-Reviewed]-=
Location /demos Size Description
=-------------------------------- ---- ---------------------------------------=
/hornet/d..s/101-120/demonews.108 48 DemoNews 108
/hornet/d..s/101-120/demonews.109 47 DemoNews 109
/info/traxw/traxweek.034 34 TraxWeekly 34
/info/traxw/traxweek.035 46 TraxWeekly 35
/info/traxw/traxweek.036 20 TraxWeekly 36
/party/1995/MOV95/movtro2.zip 247 The Movement 1995 Invitation Intro
/party/1995/NAID95/hrn-nr95.zip 1134 The NAID 1995 Report by Hornet
/party/1995/TP95/btrip95f.zip 142 Bustrip Invitation to The Party 1995
/party/1995/WIR95/e_wired.arj 1456 [1/2] The Wired 1995 Report by Eclipse
/party/1995/WIR95/e_wired.a01 1016 [2/2] The Wired 1995 Report by Eclipse
/party/1996/GP96/gp2-inv.zip 194 General Probe 1996 Invitation Intro
/party/1996/GP96/gp2-nfo.zip 9 General Probe 1996 Info File
/party/1996/OZ96/oz96inv.zip 173 Australian Party 1996 Invitation Intro
=-[Articles]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=---------------------------------------------------[Introduction]--[Snowman]-=
Hello all, and welcome to DemoNews issue 111.
This will be my last DemoNews introduction in the year 1995. I will be
moving in one week, and Diablo will bring you DemoNews issue 112. This
issue should come out around 30 December 1995.
If you would like to us to post information about an upcoming party,
diskmag voting, or job offer, please write a 3-5 paragraph summary
of the event and send it to us. It is beyond our current ability now
to post entire .nfo files in this newsletter.
For reference, we are _intentionally_ keeping the size of this newsletter
between 40k and 50k. The reason for this is two-fold. First, some mailers
bomb on mail larger than 50k. Yes, there are those out there who can not
even handle a full 64k. :( Second, keeping our newsletter at a consistent
size seems to provide a more stable image.
Mercator of Illicit wanted me to mention that a new Austrian diskmag called
"Inside" is starting up. Please write to e9225889@fbma.tuwien.ac.at for
more information and a voting charts form.
We have added a new section to DemoNews this week called "Calendar." Feel
free to send us information about your own party so that we can post it.
If you are an organizer of a new demo party, please take a second to fill
out the form /demos/incoming/forms/newparty.frm so that we can better
handle your party's uploads.
Last but not least, I would like to take a moment to recognize one of the
most dedicated members of Hornet: Diablo. Each and every week, Diablo
must deal with all the hassles associated with /music on our site. He
coordinates a team of music reviewers (not an easy task) and is responsible
for assembling the pretty lists of music uploads (see above). I look
forward to having him produce an issue of DemoNews while I'm gone.
See you all in 1996!
Snowman / Hornet - r3cgm@ftp.cdrom.com
=----------------------------------[VGA Hardware Tricks, Part 3/6]--[Trixter]-=
_____Preface
Welcome to VGA Hardware Tricks, a six-part series written by
Trixter/Hornet. In this series, I'll be exploring ways you can push VGA
harder to achieve new effects. The emphasis of this series is twofold:
The techniques discussed will work on any *standard* VGA card. (No SVGA or
VESA video cards are necessary, but these techniques will work on those
cards as well.)
The techniques discussed require very little calculation, so they will work
on slower computers. (Some techniques, however, requires a lot of CPU
*attention*, which means that while the effects are happening, they can't
be disturbed by other calculations, etc. Good Assembler programmers might
be able to get around this, however.)
This series is for intermediate to advanced coders, so there are a couple
of prerequisites you should meet: Example code will be given in assembler
and Pascal, so familiarity with those languages will be helpful when
looking at the example code; also, a familiarity with Mode X (unchained
VGA) is required, as procedures like changing video resolutions will be
discussed.
This series covers six topics:
1. Crossfading 16-color pictures
2. Crossfading 256-color pictures
3. More than 256 colors: 12-bit color (this article)
4. More than 256 colors: 18-bit color
5. Copper effects in text mode
6. Displaying graphics in text mode
_____Introduction
Displaying more than 256 colors on a standard VGA card isn't technically
possible, and yet it has been achieved in such productions as Xography's
Party 93 report and Orange's X14 demo. But how? The answer, oddly enough,
is through our own human weaknesses--our brain.
Our eyes, retina, and optic nerves are not as fast as a computer monitor.
While this fact is obvious, think of the implications: Images happen in
our real world much faster than our eyes can process the information. If
this is so, why don't we see black areas all the time where our eyes are
failing to see things? The answer is a phenomenon called "persistence of
vision."
Persistence of Vision is our brain's ability to "fill-in" missing
information that the eyes aren't providing. Without it, we'd see black
areas all the time. :-) In attempting to display more than 256 colors at
a time, we're going to take advantage of persistence of vision to fool us
into seeing more colors than are actually displayed.
_____Overview
This week, we'll discuss "12-bit" color. (That term is slightly
misleading; the number of colors that we'll actually be displaying is 3840
colors. 256 colors isn't much of a difference, though, so we'll be calling
it 12-bit color anyway.) This mode is achieved by quickly changing the
color of all the pixels in a picture between two different colors very
quickly. If they change quickly enough, persistence of vision "blends" the
two colors into a single color.
If you stopped reading right now to try this, you'd quickly find that only
Pentiums are fast enough to change every single pixel in a picture once per
frame. Obviously there's an easier way to do this, and it works on slower
386's as well:
- Switch into Mode X (we need two video pages)
- Set up the palette in a special way
- Draw two slightly different versions of the same picture onto
two different video pages
- Quickly flip between both video pages
Yaka / Xography first used this particular technique in Xography's The
Party '93 report. Later, he released an explanation of how he achieved the
mode. Excerpts of his excellent documentation in FAKEMODE.ZIP illustrate
what's involved in making it work:
(Documentation excerpt begins------------------------------)
FakeMode is achieved by combination of several means:
- Use Y-mode (320x400 at 256 colors and 2 pages)
- Flip between the 2 pages at every vertical retrace
- select the palette colors wisely
- set pixel data in a special way.
*** 2.1 Y-Mode
Y-Mode (similar to X-mode) is a video mode for register compatible VGA
cards, that pushes resolution up to 320x400 at still 256 colors and 2
pages! The disadvantage compared to standard mode 13h (320x200, 256col, 1
page) is that memory access is not so easy anymore (the pixels are split up
in bitplanes). Here's the code I use to setup Y-Mode for FakedMode (in TASM
3.1) [1]:
********************************************
_F_initgraph PROC
push di ;//save DI because of BC (I call from BC)
mov ax,0f00h ;//Get old videomode...
int 10h
mov oldvideomode,al ;//...and save it (define oldvideomode!)
mov ax,0013h ;//initialize normal Mode 13h
int 10h
mov dx,3ceh ;//select Graphics Controller...
mov al,5 ;//...Graphics Mode Register
out dx,al
inc dx
in al,dx
and al,11101111b ;//switch off ODD/EVEN mode
out dx,al
dec dx
mov al,6 ;//...Miscellaneous Register
out dx,al
inc dx
in al,dx
and al,11111101b ;//switch off ODD/EVEN mode here, too
out dx,al
mov dx,3c4h ;//select Sequencer Controller...
mov al,4 ;//...Memory Mode Register
out dx,al
inc dx
in al,dx
and al,11110111b ;//use linear adressing
or al,4
out dx,al
mov ax,0a000h ;//access Video Memory
mov es,ax
xor di,di
mov ax,di
mov cx,8000h
rep stosw ;//clear Screen
mov dx,3d4h ;//select CRT Controller...
mov al,9 ;//...Maximum Scan Line Register
out dx,al
inc dx
in al,dx
and al,01110000b ;//select 400 lines
out dx,al
dec dx
mov al,14h ;//...Underline Location Register
out dx,al
inc dx
in al,dx
and al,10111111b ;//switch off Doubleword-Mode
out dx,al
dec dx
mov al,17h ;//...Mode Control Register
out dx,al
inc dx
in al,dx ;//select Word-Mode (normally: Bytemode)
and al,10111111b ;//normally: or al,01000000b
out dx,al
call initpalette ;//call to palette setup routine (for FakeMode)
call inittimer ;//call to timer setup routine (for FakeMode)
pop di ;//restore value of di
ret
_F_initgraph ENDP
************************************
That's it. I modified the original routine a bit as I keep WordMode; it's
because it is easier to write FakeMode pixels in WordMode. You can return
to textmode or other graphics modes by normal BIOS function call (int 10h,
Fkt 0). The calls to 'initpalette' and 'inittimer' are necessary to
install FakeMode and are not part of Y-Mode installation.
*** 2.2 Page Flipping
This is best done (I think) by synchronizing the timer interrupt with the
screen. Just before the vertical retrace appears, the interrupt is called.
The interrupt handler routine should now set the screen offset address to
its new value and wait for the vertical retrace. Then it should reprogram
the timer and return to the main program. When the vertical retrace occurs,
the new offset address is loaded in the internal registers of the VGA card
and invokes the next screen update. See [1], ([2]), [3].
So we'll just have to:
- hook the timer interrupt
- write our own interrupt handler
- synchronize the timer interrupt with the screen
- still call system timer routine at 18.2 Hz from interrupt handler
- program the timer chip to achieve MonoFlop mode.
What could be simpler? :)
*** 2.2.1 Hooking/Dehooking the timer interrupt,
Synchronization with the screen
Hooking an interrupt is quite easy; DOS interupt 21h has got functions to
handle interrupt hooking (see below, routine inittimer). To synchronize
the timer int with the screen, I first set the interrupt speed much faster
than the screen (256 Hz) and use a handler that counts up a variable
'count'. Then I wait for a vertical retrace and let the timer run.
When 'count' has changed at next vertical retrace, the timer still is too
fast. I lower speed and try again, until 'count' doesn't change between
start of timer and next vertical retrace. Then I know that with this speed,
I'm just below the minimal speed. I increase it a little and now I know how
long I have to wait aproximately between 2 timer int calls.
Of course the value isn't exact, so I have to synchronize every interrupt
call for new; that's done by the interrupt handler discussed below. The
routine 'closetimer' should be called when you leave FakeMode; it stops the
timer int and puts everything back to normal.
************************************
synchroint PROC ;// This interrupt handler is used for
push ax ;// screen synchronization.
mov ax,counter
inc ax ;// just count up 'counter'...
mov counter,ax
mov al,20h ;// send EOI to interrupt controller...
out 20h,al
pop ax
iret ;// return from interrupt handler
synchroint ENDP
inittimer PROC ;// This routine is called when FakeMode is
push di ;// installed. initializes & synchronizes
mov ax,1234h ;// the timer
mov currentfloptime,ax ;// start with 256 Hz
mov ax,3508h ;//save old Interrupt 08
int 21h
mov alterint08,bx
mov alterint08+2,es
xor ax,ax ;//redirect Int. 08 to Synchronisation Rout.
mov es,ax
mov di,08h*4 ;// this is the other method to access
cli ;// interrupt vectors: via interrupt table
cld
mov ax,offset synchroint
stosw
mov ax,cs
stosw
sti
;//------ synchronize timer with screen
mov dx,3dah ;//Wait for End of Retrace
s1endretjmp:
in al,dx
and al,00001000b
jnz s1endretjmp
s1retjmp: ;//Wait for Retrace
in al,dx
and al,00001000b
jz s1retjmp
synchroback: ;//now we can start measurement...
mov al,36h ;//start Systemtimer in Rectangle Mode
out 43h,al
mov ax,currentfloptime
out 40h,al
mov al,ah
out 40h,al
mov ax,0 ;//reset counter. counter is increased
mov counter, ax ;//by interrupt routine
mov dx,3dah ;//Wait for End of Retrace
s2endretjmp:
in al,dx
and al,00001000b
jnz s2endretjmp
s2retjmp: ;//Wait for Retrace
in al,dx
and al,00001000b
jz s2retjmp
mov ax,counter ;//did interrupt still occur?
cmp ax,0
je fertig ;//no -> ready
mov ax,currentfloptime
add ax,250 ;//yes -> lower speed and try again
mov currentfloptime,ax
jmp synchroback
fertig:
mov al,34h ;//set Systemtimer right (Monoflop)
out 43h,al
mov ax, currentfloptime
sub ax,800 ;//...we need time for the handler
mov currentfloptime,ax
out 40h,al
mov al,ah
out 40h,al
xor ax,ax ;//redirect Int. 08 to Screenswitch Routine
mov es,ax
mov di,08h*4
cli
cld
mov ax,offset switchpageint ;//interrupt handler routine see below
stosw
mov ax,cs
stosw
sti
pop di
ret
inittimer ENDP
closetimer PROC ;// this routine de-installs the timer handler
push ds
push di
push si
cli
mov al,36h ;//Systemtimer back to normal speed
out 43h,al
xor al,al
out 40h,al
out 40h,al
push cs ;//restore Interrupt Vector back to normal
pop ds
mov si,offset alterint08
xor ax,ax
mov es,ax
mov di,08h*4
cld
movsw
movsw
sti
pop si
pop di
pop ds
ret
closetimer ENDP
************************************
*** 2.2.2 The interrupt Handler routine
This is the main timer interrupt routine which is called after every screen
update and performs the page flipping. There are three necessary things
when you write a hardware interrupt handler:
1. be sure to preserve ALL registers you use (push them and pop them later)!
2. don't forget to acknowledge the hardware interrupt controller
(mov al,20h out 20h,al)!
3. return from Interrupt with IRET, not with RET!
Read the comments; they should explain everything.
Literature used for this: [2], [3]
************************************
switchpageint PROC
push ax ;//interrupt handlers must push all registers
push bx ;//they use!
push dx
inc word ptr systimer ;//set system timer (this is my own timer;
;//i use it for timing in the main program)
mov bx,currentpage
add bx,32768
mov currentpage,bx
mov dx,3d4h
mov al,0ch ;//set Start Adresse High (0Ch) to flip pages
mov ah,bh
out dx,ax
mov dx,3dah ;//Wait for Retrace
swretjmp: ;//(this is done to keep synchronization)
in al,dx
and al,00001000b
jz swretjmp
mov al,34h ;//start Monoflop for new
out 43h,al ;//(let the timer run for new)
mov ax,currentfloptime
out 40h,al
mov al,ah
out 40h,al
mov bx,currentsystimer ;//do Systemtimer call at 18.2 Hz
add ax,bx
mov currentsystimer,ax
cmp ax,bx
ja short nosysroutine ;//No --> continue
pop dx
pop bx
pop ax
jmp dword ptr alterint08 ;//call Systemtimer Routine
nosysroutine:
mov al,20h ;//OK to Interrupt Controller
out 20h,al
pop dx
pop bx
pop ax
iret ;//return from interrupt
switchpageint ENDP
************************************
There may be timing problems when you use your own hardware interrupt
handler. Especially the INT 13h calls are very time-sensitive, if a timer
interrupt routine is called just when the processor is in INT13 handler,
and the computing of the timer int takes too long, the computer may
crash. In such cases it may help to check if the computer is just in the
INT13 handler when the timer interrupt is called (You have to hook int 13
and set a variable; then continue with int13 handler.
After the handler has finished, reset the variable. So the timer int can
check this variable to see if INT13 handler is active or not.) Well, I
never had problems with INT13 and FakeMode, so I didn't implement this. :)
*** 2.3 Palette Setup
The palette is static; that means I don't change it when I flip pages. To
achieve the 3840 color mode, I split up the colors to green and red/blue.
The palette contains 16*15 values red/blue and 16 values green
(16*15+16=256). (16 colors red * 16 colors green * 15 colors blue = 3840
different colors)
To get harmonic greys, I set blue to the same values as red and green, but
just leave out the darkest blue value (you can't see that one, anyway). So
when you set pixels later, you have to decrement the blue value if it isn't
zero to get the right color. (The H_setsmallpixel routine of the example
file included does that, for example.) The palette values are stored
directly to DAC, but are also buffered in 'palette' to make later changes
possible (fadein/out, setluminance).
Here comes the palette setup routine:
************************************
palette db 768 dup (?) ;//buffer for palette
initpalette PROC
push di
push cs
pop es
mov di, offset palette
cld
mov dx,3c8h
xor ax,ax
xor bx,bx
out dx,al
inc dx ;//ah=red, bh=green, bl=blue
mov cx,15
initpal_outer: ;//setup red/blue part of palette (0..239)
push cx
mov cx,16
initpal_inner:
mov al,ah
out dx,al
stosb
mov al,bh
out dx,al
stosb
mov al,bl
out dx,al
stosb
add ah,4
loop initpal_inner
mov ah,0
add bl,4
cmp bl,4
jne goon
add bl,4
goon:
pop cx
loop initpal_outer
mov cx,16
xor ax,ax
xor bx,bx
initpal_second: ;//setup green part of palette (240..255)
mov al,ah
out dx,al
stosb
mov al,bh
out dx,al
stosb
mov al,bl
out dx,al
stosb
add bh,4
loop initpal_second
pop di
ret
initpalette ENDP
************************************
*** How to set pixels in FakeMode
The main purpose of the way I set pixels is to minimize the flicker. One
pixel on the screen consists of 2 pixels, one on page 1 and one on page 2.
On one of the pages the green value is displayed, on the other the red/blue
value. Imagine I would set all pixels green values on page 1 and all
red/blue values on page 2. I would get horrible flicker. To prevent this, I
set the values like follows:
if xpos+ypos=odd, then set red/blue on page 1 and green on page 2
else set green on page 1 and red/blue on page 2.
So I get a 1/1 raster, and each of the 2 pages contain both red/blue and
green values.
Look at the following routine to see how it is done exactly:
************************************
_F_putsmallpixel PROC
;//values: x=0..319, y=0..399, red=0..15, green=0..15, blue=0..15
ARG x:word, y:word, red:byte, green:byte, blue:byte
push bp
mov bp,sp
push di
mov bx,x
mov cx,bx
and cl,00000011b ;//calculate bitplane...
mov dx,3c4h
mov ax,0102h
shl ah,cl
out dx,ax ;//...and set it
mov ax,0a000h ;//set destination segment
mov es,ax
mov ax,160 ;//set destination offset
mov dx,y
mul dx
shr bx,1
and bl,11111110b
add bx,ax ;//bx contains basic offset
mov di,bx
mov al,blue ;//calculate red-blue value
mov ah,16
mul ah
cmp ax,0
je short smallpixgoon
sub ax,16 ;// perform blue adjustment
smallpixgoon:
add al,red
add cx,y
and cl,00000001b ;// select if green value on page 1 or 2
jz short stypetwo
mov ah,al
mov al,green
add al,240
mov es:[di],ax ;// set both pixels (on page 1 & 2)
jmp short send
stypetwo:
mov ah,green
add ah,240
mov es:[di],ax ;// set both pixels (on page 1 & 2)
send:
pop di
pop bp
ret
_F_putsmallpixel ENDP
************************************
In FakeMode the video memory is built up like this:
Bitplane 0| rb 0 | g 0 | g 4 | rb 4 | ...
Bitplane 1| g 1 | rb 1 | rb 5 | g 5 | ...
Bitplane 2| rb 2 | g 2 | g 6 | rb 6 | ...
Bitplane 3| g 3 | rb 3 | rb 7 | g 7 | ...
Offset | 0 | 1 | 2 | 3 | ...
So one line on the screen uses 160 bytes of data in each Bitplane. The
colors values for one pixel are stored besides each other (this is because
I use wordmode).
Literature references:
[1]: Michael Tischer: PC intern 3.0; Data Becker
(a german book) Contains useful information about VGA programming
(Although the Ferraro book might be better)
[2]: DOS international, issue 3/89 p.170 ff; Everts&Hagedorn
(german computer magazine). This is an article about how sample
output with PC internal speaker is done. That's where I got timer /
interrupt programming from
[3]: A huge stack of copied sheets from several books I don't remember. :)
(Documentation excerpt ends------------------------------)
_____Code
Code that achieves this effect in both C and Pascal is available on
ftp.cdrom.com in the directory /pub/demos/hornet/demonews/vgahard in the
file vgahard3.zip. This article is stored there as well. To compile the
code directly, you'll need Turbo Pascal 7.0 or Borland C 3.1 or later.
(The code can be compiled on earlier compilers as well, but some slight
modification might be necessary.)
_____Notes
Mr. Data was kind enough to point out that Atari coders have known about
these kind of tricks for years, because the Atari had more limited graphics
hardware than the Amiga. Unfortunately, many of the techniques he
described to me that were used on the Atari can't really be applied to
today's VGA hardware, because some of the techniques oscillated between
video pages and colors too slowly.
The older monitors of the time had slow phosphors, so the *monitor itself*
"blended" the colors, but today's monitors have very fast phosphors, which
results in terrible flickering if trying to use an Atari technique.
_____Conclusion
12-bit color displays very solid results, but you've probably noticed its
major weakness by now: It requires so much CPU time ensuring that the
video pages keep flipping that it's not really useful for animation. Next
week, we'll tackle a different solution to this--and gain over 250,000 more
colors in the process! Have fun until then!
Trixter / Hornet - trixter@ftp.cdrom.com
=--------------------------------[United Kingdom Coder Needed]--[Robin Green]-=
Electronic Arts UK are expanding their European Development Studio. We are
expanding in Europe at a huge rate (EA Nordic, EA GmbH, EA France, etc.),
we understand European programming talent, we're avid followers of the
European Demo Scene and we're always looking for the best people. We want
programmers with broad areas of expertise and interest:
- video compression and high quality image processing.
- 3D animation, physics modeling, motion capture filtering.
- 2D effects, re-mapping, warping, resizing, z-buffer CSG.
- 3D mathematics, scan conversion, lighting, texture mapping.
- interactive audio and data streaming from CD.
- high speed, real-time C and C++ programming with assembler.
- opportunities to specialize on PSX, Saturn, Nintendo64, 3DO M2,
Windows95 DirectDraw and Direct3D.
You will be working as part of a support and R&D team of around 5 people
who are trying to turn around how EA produces games and add stunning
effects to all our titles. Benefits include:
- 24 hour access to a T1 link to the Internet.
- Rock Hard PC's (Pentium Pro anyone?) and best software tools.
- Access to top-secret research and inside information.
- Medical insurance, share options, relocation help and good pay.
If you think you understand the games industry, how games are produced, the
bleeding edge of games research and think you are the *BEST*, send a CV
and, if possible, demo disks to:
Robin Green
Electronic Arts
Meadfield Road
Langley
BERKS SL3 8AA
ENGLAND
tel : +44 1753 772353
fax : +44 1753 595603
Robin Green / Technical Specialist, Electronic Arts - rgreen@ea.com
=------------------------------------[Australian Demo Party (OZ96)]--[Random]-=
The idea for Oz96 was formed around mid-year 1995 on Bloodnet, one of
Australia's demoscene networks. It seemed that the Australian demoscene
has flourished enough to a point where a party could be held with great
attendance - this seems to mirror the circumstances around NAID, North
America's demoparty (except that Oz96 will hopefully have better
organization :-).
Oz96 is not *truly* the first Australian demo party. There have been some
other small gatherings, such as Coven'95, but Oz96 will be the first party
involving the majority of the Australian Scene.
Oz96 is a party for the demoscene, a gathering of all those demofreaks out
there as well as other demo-related occults such as the underground music
and art scenes. As such, in the spirit of the scene, it is a friendly and
most importantly non-profit venture.
The party will start at about 5:00pm on Wednesday the 17th of January 1996,
and finishes around midday on Friday the 19th of January. Of course, if you
want to leave earlier, FINE! ;) We were originally planning a weekend, but
well, you can't have everything!
[more information on OZ96 can be found under /party/1996/OZ96]
Random - random@geko.com.au
=-[Subscribing]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
_____How to subscribe to DemoNews
Mail to : listserver@unseen.aztec.co.za
Body : subscribe demuan-list [first_name] [last_name]
The listserver will send DemoNews to your e-mail's return address.
_____Back Issues
Older issues of DemoNews can be located under /demos/hornet/demonews.
Newly released issues of DemoNews are posted to /demos/incoming/news.
=-[Closing]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
For questions and comments, you can contact us at r3cgm@ftp.cdrom.com
Your mail will be forwarded to the appropriate individual.
...........................................................End.of.DemoNews.111.