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.
