.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 =-[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.