Copy Link
Add to Bookmark
Report
disC=overy special edition 1
__ _____
`--' / _ \ _/\ /\_ __ _
: : __ | | | | \ \ / / /\_\ __
| ||__| | | |__| \ \ / / \/_/_
___| | __ ______ | | _____ __\__\ /__/___ ______ __ ___
/ _| || | / _| || ||____// _ \\ // _| | / _| || | / /
| | | || || |_|__|| ||____\ | | |\ /| | | || | | || | / /
| | | || |`\___ \ | | __ | | | | \/ | |_|__|| | |__|| | / /
| | | || |.--. | || | | || | | | | | .--.| | | |/ /
| |_| || || |_| || |_| || |_| |\ /| |_| || | | / /
`\___|__||__|`\_____/'`\_____/'`\_____/' \/ `\_____/'| | `\/ / :
: _ _ __ __|__|______/ / \ |
\ | ...the Journal of the Commodore Enthusiast _ __ ____________/ \ | /
\|/ August 28, 1997 |__| \|/
-=+-------------------------------------------------------------------------+=-
/|\ .: /\_/\_: Special Edition 1 /\_/\_ /|\
/ | \ /\\ / \_\- ~~~~~~~~~~~~~~~~~~~~~~~~~~ /\\ / \_\ / | \
: .:. \ ... / <-- ..En eterno descanso.. --> \ ... / .:. :
--Logo by Wendell "WaD" Davis III
P R E A M B L E
Welcome to this special issue of disC=overy, the Journal of the Commodore
Enthusiast. This one is dedicated to John Kaiser (AKA Waveform), a coding
dynamo and good friend to the NTSC C64 demo scene. John passed away
last April, but his works live on. This edition presents a compilation of
his best efforts for the enjoyment of all C64 fans worldwide.
- Mike Gordillo
:::::::::::d:i:s:C=:o:v:e:r:y:::::::::::::::::s:p:e:c:i:a:l::1::::::::::::::::
::::::::::::::::::::::T A B L E O F C O N T E N T S:::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-Software Section-
/S01 - "The Collected Works of John Kaiser"
$WAVE by XmikeX
:::::::::::d:i:s:C=:o:v:e:r:y:::::::::::::::::s:p:e:c:i:a:l::1::::::::::::::::
/S01::$WAVE:::::::::::::::::::S O F T W A R E:::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
The Collected Works of John Kaiser (aka Waveform)
by XmikeX
This article includes the best of John Kaiser's creations for the C64.
(One special jewel, Venturia, makes its public debut here). All files
have been uuencoded for ease of transmission and require uudecoding into
executable C64 binaries. A short description of the files, as seen below,
is followed by the uuencoded versions.
disc-demo
---------
The disC=overy demo was first published in disC=overy, issue 2, along
with accompanying article -- a tutorial on 2D rotation. In its original
release, it was split up into several files. It is presented here as a
single, fully packed, executable file.
vectorwave
----------
Vectorwave initially found itself into a millenium demo. Further plans
included using it in a follow-up to the disc-demo expose' on rotation
techniques. It is presented here as executable and source.
waveness 1 and 2
----------------
Waveness 1 was John's first public C64 demo. Waveness 2 included a
morphing sequence whose data was derived from an x86 PC program, but the
result was all C64 :).
wavestorm.mlm
-------------
Wavestorm was John's last C64 demo page. It was either going to be a
stand-alone demo or bundled in an MLM production. Unfortunately, John
never got to finish it. As a bit of trivia, I can claim credit for its
name, as John indulged my suggestion of "Wavestorm" in deferrence to the
kind of thunderous impact a 'Waveform demo' should make :). This version
of Wavestorm has been enhanced by Roy Batty/MLM, and originally released
by Roy Batty/MLM.
XwaveX
------
The XwaveX demo was part of the 1996 NTSC 4k contest and named after
yours truly for reasons mentioned in the demo :).
Venturia
--------
Venturia is an Ultima-style game that John was working on since at least
1993 (when I first met him). I first saw Venturia only a few months
before his passing, about 3-4 years into development. The long term scale
of this project was simply due to "real-world" concerns which got in the
way of his programming. However, despite having little time to work on
this game, there is a level of sophistication in Venturia that could
easily make one believe it is a finished product.
Venturia documentary (brief)
--
Please note that "venturia-intro" is a standalone introduction file. It will
not chain "venturia_snap", which is the boot file for Venturia. Load and run
"venturia_snap" to start the game.
The documentation on Venturia, following the (C)opyright disclaimer, was
originally provided by John via email. As far as I know, this is the only
documentation for the program that is available. It must be stressed that
John never finished Venturia and therefore options illustrated may or
may not work as intended.
Remember, Venturia is (C)opyright 1993-1997 John Kaiser (AKA Waveform). It is
NOT in the public domain. The following stipulations concerning distribution
apply (from the estate of J. Kaiser) :
A) Venturia may only be copied and distributed in its entirety, unchanged.
Under NO conditions shall it be modified or incorporated into other works.
B) Venturia may only be copied and distributed freely, without charge.
Under NO conditions shall it be distributed for the purposes of sale NOR
shall it be distributed on any media: electronic, magnetic, print, or
otherwise upon which receipt of said media involves either a monetary fee,
credit charge, handling and shipping charge, or participation in a barter
system.
--
[...Excerpt begins...]
Hey Xman,
Can't find the great big drawn out doc file I had originally made for
this but here are some keys to quickly get you started with checking out
that preview:
Movement Keys: (ala Ultima or Questron)
@
: ;
/
Misc Keys:
F7 will abort/exit/end virtually any action from inside any window
SPACE usually toggles between windows, if there are more than one
C - Open Spell Book
SPACE flips between "scribed scrolls" and the contents of your bag
of reagents
I - Open Inventory
E - Equip Toggle
S - Scribe a scroll to your spell book
B - Move reagents to your reagents bag
D - Drop Item (permanent drop)
L - Bring Up Look Targetting
Use the movement keys to place the target on the object/icon you wish
to look at... space/enter to examine it, F7 to abort.
S - Open Statistics Windows
space toggles the attributes display and the shards recovered display
T - Time/Date
something to look at. =)
F1 - Brings up Game Utilities Window.
Only a few of the utilities even show up on this list, and currently
only one is even active. You can utilize the key repeat toggle function
from here... the load and save game functions are disabled for the time
being.
Well, that should be enough for you to get a good look at what is sort of
a rough draft for how some of the game play works.
One final note... Unix mangled the filenames of the "?posi.xx" files. The
first character should be a "<-" (cbm left arrow)... but then again,
since the load and save game functions should be disabled, I guess it
doesn't make much difference. =) Hahahaha. =)
[...Excerpt ends...]
--
[: Source file for Vectorwave and UUencoded binaries for all files
mentioned in this article are reproduced below :]
* Vectorwave source file (for TASM) *
-------------------------------------
*= $3400
;---------------------------------------
sintab = $4000;3400
costab = $4100;3500
sqrtab = $4200;3600
lobasetab0 = $4300;3700
hibasetab0 = $4380;3780
lobasetab1 = $4400;3800
hibasetab1 = $4480;3880
masktable = $4500;3900
rotsinus = $4600;4000
expsinus = $4700;4100
scnmat0 = $4800;5000
scnmat1 = scnmat0+640
scnmat2 = scnmat0+1280
scnmat3 = scnmat0+1920
scnmat4 = scnmat0+2560
scrolltext = $5500;$4200
matpos = 1396
scrlpos1 = 1024
scrlpos2 = scrlpos1+40
raster000 = 48
raster001 = 65
raster002 = 121
raster003 = 250
char = $02 ;used by screen
screen = $03 ; matrix setup
;$04 ;
getxytemp = $02 ;used by getxy
tx0 = $03 ; routine
ty0 = $04 ;
xpos = $05 ;calc'd x coord
ypos = $06 ;calc'd y coord
gr = $07 ;radius
gt = $08 ;theta
x1 = $09 ;used mainly by
x2 = $0a ; drawline
xdir = $0b ; routine
dx = $0c ;
y1 = $0d ;
y2 = $0e ;
ydir = $0f ;
dy = $10 ;
pa = $11 ;used by plot
bitx = $12 ;
scrn = $13 ;
;$14 ;
mly = $15 ;mainloop temp
increment = $16
scrollpix = $18
saved018 = $19
scrlind = $1a
;$1b
ctrlscroll = $1c
irq002col = $1d
points = $1f
theta = $20
radius = $40
initrad = $60
;---------------------------------------
startup lda #"" ;clear screen
jsr $ffd2 ;
lda #$01 ;color vector
ldy #$00 ; area white
startup01 sta 55656,y ;
sta 55870,y ;
sta 56084,y ;
iny ;
cpy #214 ;
bne startup01 ;
ldy #39 ;color scroll
startup02 lda #14 ; text
sta 55296,y ;
lda #3 ;
sta 55336,y ;
dey ;
bpl startup02 ;
sei ;setup first
lda #<irq000 ; irq
sta $0314
lda #>irq000
sta $0315
lda $d011
and #%01111111
sta $d011
lda #raster000
sta $d012
lda #$7f
sta $dc0d
lda #%00000001
sta $d01a
lda #$00
jsr $1000
cli
;----------------------------
lda #<scrolltext;init scroll
sta scrlind ; text
lda #>scrolltext; pointer
sta scrlind+1 ;
lda #$08 ;init fine
sta scrollpix ; scroll
lda #$00 ;disable
sta ctrlscroll ; scroller
;----------------------------
lda #$00 ;start out
sta irq002col ; black
;----------------------------
lda $d018 ;point VIC to
and #%11110000 ; c-set
ora #%00001000 ; staring at
sta $d018 ; $2000
;----------------------------
jsr blank1 ;clear out
jsr blank2 ; buffers
jsr matrix00 ;first matrix
;----------------------------
lda #$00
sta increment
jsr initobj00
;---------------------------------------
runtime lda #$00
sta ctrlscroll
lda #<scrolltext
sta scrlind
lda #>scrolltext
sta scrlind+1
;----------------------------
inc ctrlscroll
runtime01 lda scrlind ;"shoooom..."
cmp #120 ;
bcc runtime01 ;
;----------------------------
dec ctrlscroll
jsr whtfade
jsr blufade
;----------------------------
inc ctrlscroll
runtime04 lda scrlind ;"lets start
cmp #197 ; with..."
bcc runtime04 ;
;----------------------------
dec ctrlscroll
jsr mainloop ;put triangle
;----------------------------
inc ctrlscroll
runtime05 lda scrlind+1 ;"give it a
cmp #$56 ; spin..."
bne runtime05 ;
lda scrlind ;
cmp #16 ;
bcc runtime05 ;
;----------------------------
lda #$01
sta increment
ldy #$00
runtime06 lda #$10
sta rtl2
runtime07 dec rtl1
bne runtime07
dec rtl2
bne runtime07
sty rtty
jsr mainloop
ldy rtty
iny
cpy #124
bne runtime06
;----------------------------
; do black area thing here
;----------------------------
runtime20 jsr doplain
;----------------------------
jsr whtfade
jsr initobj10
jsr mainloop
jsr blufade
jsr doplain
;----------------------------
jsr whtfade
jsr initobj20
jsr mainloop
jsr blufade
jsr doplain
;----------------------------
jsr whtfade
jsr initobj30
jsr mainloop
jsr blufade
jsr doplain
;----------------------------
runtime30 jsr whtfade
jsr initobj00
jsr mainloop
jsr blufade
lda #15
sta doresub
jsr dore
;----------------------------
jsr whtfade
jsr initobj10
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj20
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj30
jsr mainloop
jsr blufade
lda #10
sta doresub
jsr dore
;----------------------------
runtime40 jsr whtfade
jsr matrix10
jsr initobj00
jsr mainloop
jsr blufade
lda #15
sta doresub
jsr dore
;----------------------------
jsr whtfade
jsr initobj10
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj20
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj30
jsr mainloop
jsr blufade
lda #10
sta doresub
jsr dore
;----------------------------
runtime50 jsr whtfade
jsr matrix20
jsr initobj00
jsr mainloop
jsr blufade
lda #15
sta doresub
jsr dore
;----------------------------
jsr whtfade
jsr initobj10
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj20
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj30
jsr mainloop
jsr blufade
lda #10
sta doresub
jsr dore
;----------------------------
runtime60 jsr whtfade
jsr matrix30
jsr initobj00
jsr mainloop
jsr blufade
lda #15
sta doresub
jsr dore
;----------------------------
jsr whtfade
jsr initobj10
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj20
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj30
jsr mainloop
jsr blufade
lda #10
sta doresub
jsr dore
;----------------------------
runtime70 jsr whtfade
jsr matrix40
jsr initobj00
jsr mainloop
jsr blufade
lda #15
sta doresub
jsr dore
;----------------------------
jsr whtfade
jsr initobj10
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj20
jsr mainloop
jsr blufade
jsr dore
;----------------------------
jsr whtfade
jsr initobj30
jsr mainloop
jsr blufade
lda #10
sta doresub
jsr dore
;----------------------------
jmp runtime40
;---------------------------------------
doplain lda #$00
sta rtl1
doplain1 ldy rtl1
lda rotsinus,y
sec
sbc #10
sta increment
jsr mainloop
inc rtl1
bne doplain1
rts
;---------------------------------------
dore lda #$00
sta rtl1
sta rtl2
dore1 ldy rtl1
lda rotsinus,y
sec
sbc #10
sta increment
ldy rtl2
ldx #$00
dore2 sec
lda expsinus,y
sbc doresub
clc
adc initrad,x
cmp #62
bcc dore3
lda #62
dore3 sta radius,x
inx
cpx points
bne dore2
jsr mainloop
inc rtl1
inc rtl2
bne dore1
rts
doresub .byte $00
;---------------------------------------
rtty .byte $00
rtl1 .byte $00
rtl2 .byte $00
rtl3 .byte $00
rtcolind .byte 4,6,14,3,13,1
.byte 13,3,14,6
;---------------------------------------
mainloop ; jsr $ff9f
; lda $cb
; cmp #$04
; bne mainloop00
; inc increment
; jmp mainloop02
mainloop00 ; cmp #$05
; bne mainloop01
; dec increment
; jmp mainloop02
mainloop01 ; cmp #$06
; bne mainloop02
; lda #$00
; sta increment
mainloop02 ldx #$00 ;rotate all
rotallpnts lda theta,x ; points
clc
adc increment
sta theta,x
inx
cpx points
bne rotallpnts
;----------------------------
lda theta ;set up
sta gt ; first
lda radius ; start point
sta gr ; to prevent
jsr getxy ; the first
lda xpos ; line from
clc ; having
adc #64 ; "garbage"
sta x1 ; initial
lda ypos ; values
clc ;
adc #64 ;
sta y1 ;
ldy #$01 ;put current
mainloop1 lda theta,y ; points
sta gt ; r,theta in
lda radius,y ; work regs.
sta gr
jsr getxy ;calc. coord
lda xpos ;center polar
clc ; coords over
adc #64 ; matrix
sta x2
lda ypos
clc
adc #64
sta y2
sty mly ;draw a line
jsr drawline ;
ldy mly ;
lda x2 ;endpoint
sta x1 ; into
lda y2 ; startpoint
sta y1 ;
iny ;draw all
cpy points ; lines
bne mainloop1
lda $d018 ;show the
eor #%00000010 ; work
sta $d018 ;
lda $d018 ;prepare the
and #%00000010 ; next buffer
beq mainloop2 ; for drawing
jsr blank1 ;
jmp mainloop3 ;
mainloop2 jsr blank2 ;
mainloop3 rts
;---------------------------------------
getxy stx tx0
sty ty0
ldy gt
lda sintab,y ;f(a-b)
sec ;
sbc gr ;
tax ;
lda sqrtab,x ;
sta getxytemp ;
lda sintab,y ;f(a+b)
clc ;
adc gr ;
tax ;
lda sqrtab,x ;
sec ;
sbc getxytemp ;
sta ypos ;y=sin(@)*r
lda costab,y ;f(a-b)
sec ;
sbc gr ;
tax ;
lda sqrtab,x ;
sta getxytemp ;
lda costab,y ;f(a+b)
clc ;
adc gr ;
tax ;
lda sqrtab,x ;
sec ;
sbc getxytemp ;
sta xpos ;x=cos(@)*r
ldx tx0
ldy ty0
rts
;---------------------------------------
drawline lda x2
cmp x1
beq dlf
bcc dlc
lda y2
cmp y1
bcc dlb
jmp drawline0 ;dx=+ dy=+
dlb jmp drawline1 ;dx=+ dy=-
dlc lda y2
cmp y1
bcc dle
jmp drawline2 ;dx=- dy=+
dle jmp drawline3 ;dx=- dy=-
dlf jmp drawline4 ;straight
;---------------------------------------
drawline0 sec
lda x2 ;get dx
sbc x1
sta dx
lda y2 ;get dy
sbc y1
sta dy
ldx x1 ;initial
ldy y1 ; coords
lda #$00 ;plot 1st
sbc dx ; pixel
jsr plot
loop0 clc
adc dy
bcc notyet0 ;don't iny
fix0 iny
sec
sbc dx
bcc notyet0
jsr plot
jmp fix0 ;loop back
notyet0 inx
jsr plot ;plot pixel
cpx x2
bne loop0 ;finish line
rts
;---------------------------------------
drawline1 sec
lda x2
sbc x1
sta dx
lda y1
sbc y2
sta dy
ldx x1
ldy y1
lda #$00
sbc dx
jsr plot
loop1 clc
adc dy
bcc notyet1
fix1 dey
sec
sbc dx
bcc notyet1
jsr plot
jmp fix1
notyet1 inx
jsr plot
cpx x2
bne loop1
rts
;---------------------------------------
drawline2 sec
lda x1
sbc x2
sta dx
lda y2
sbc y1
sta dy
ldx x1
ldy y1
lda #$00
sbc dx
jsr plot
loop2 clc
adc dy
bcc notyet2
fix2 iny
sec
sbc dx
bcc notyet2
jsr plot
jmp fix2
notyet2 dex
jsr plot
cpx x2
bne loop2
rts
;---------------------------------------
drawline3 sec
lda x1
sbc x2
sta dx
lda y1
sbc y2
sta dy
ldx x1
ldy y1
lda #$00
sbc dx
jsr plot
loop3 clc
adc dy
bcc notyet3
fix3 dey
sec
sbc dx
bcc notyet3
jsr plot
jmp fix3
notyet3 dex
jsr plot
cpx x2
bne loop3
rts
;---------------------------------------
drawline4 lda y2
cmp y1
bcc drawline5
ldx x1 ;draw
ldy y1 ; straight
drawline4a jsr plot ; downwards
iny ;
cpy y2 ;
bne drawline4a ;
rts ;
drawline5 ldx x1 ;draw
ldy y1 ; straight
drawline5a jsr plot ; upwards
dey ;
cpy y2 ;
bcs drawline5a ;
rts
;---------------------------------------
plot sta pa
lda $d018
and #%00000010
beq plot1
lda lobasetab0,x
sta $fa
lda hibasetab0,x
sta $fb
lda ($fa),y
ora masktable,x
sta ($fa),y
lda pa
rts
plot1 lda lobasetab1,x
sta $fa
lda hibasetab1,x
sta $fb
lda ($fa),y
ora masktable,x
sta ($fa),y
lda pa
rts
;---------------------------------------
; MISC SIMPLE†ROUTINES
;---------------------------------------
whtfade ldy #$01 ;fade to
whtfade1 lda #$00 ; white in
sta rtl1 ; vector
lda #$08 ; area
sta rtl2 ;
lda rtcolind,y ;
sta irq002col ;
whtfade2 dec rtl1 ;
bne whtfade2 ;
dec rtl2 ;
bne whtfade2 ;
iny ;
cpy #5 ;
bne whtfade1 ;
rts
;---------------------------------------
blufade ldy #$05 ;fade to
blufade1 lda #$00 ; blue in
sta rtl1 ; vector
lda #$08 ; area
sta rtl2 ;
lda rtcolind,y ;
sta irq002col ;
blufade2 dec rtl1 ;
bne blufade2 ;
dec rtl2 ;
bne blufade2 ;
iny ;
cpy #10 ;
bne blufade1 ;
rts
;---------------------------------------
blank1 sty blanky
lda #$00
ldy #$00
blank1a sta $2000,y
sta $2080,y
sta $2100,y
sta $2180,y
sta $2200,y
sta $2280,y
sta $2300,y
sta $2380,y
sta $2400,y
sta $2480,y
sta $2500,y
sta $2580,y
sta $2600,y
sta $2680,y
sta $2700,y
sta $2780,y
iny
bpl blank1a
ldy blanky
rts
;---------------------------------------
blank2 sty blanky
lda #$00
ldy #$00
blank2a sta $2800,y
sta $2880,y
sta $2900,y
sta $2980,y
sta $2a00,y
sta $2a80,y
sta $2b00,y
sta $2b80,y
sta $2c00,y
sta $2c80,y
sta $2d00,y
sta $2d80,y
sta $2e00,y
sta $2e80,y
sta $2f00,y
sta $2f80,y
iny
bpl blank2a
ldy blanky
rts
;---------------------------------------
; INIT OBJECT†ROUTINES
;---------------------------------------
initobj00 ldx #$00 ;00=triangle
initobj01 lda itheta00,x ;
sta theta,x ;
lda iradius00,x ;
sta radius,x ;
inx ;
cpx #$04 ;
bne initobj01 ;
lda #$04 ;4 endpoints
sta points ;
jmp initobjend
;---------------------------------------
initobj10 ldx #$00 ;10=triangle
initobj11 lda itheta10,x ;
sta theta,x ;
lda iradius10,x ;
sta radius,x ;
inx ;
cpx #$05 ;
bne initobj11 ;
lda #$05 ;5 endpoints
sta points ;
jmp initobjend
;---------------------------------------
initobj20 ldx #$00 ;20=4pt star
initobj21 lda itheta20,x ;
sta theta,x ;
lda iradius20,x ;
sta radius,x ;
inx ;
cpx #$09 ;
bne initobj21 ;
lda #$09 ;9 endpoints
sta points ;
jmp initobjend
;---------------------------------------
initobj30 ldx #$00 ;20=4pt star
initobj31 lda itheta30,x ;
sta theta,x ;
lda iradius30,x ;
sta radius,x ;
inx ;
cpx #21 ;
bne initobj31 ;
lda #21 ;21 endpoints
sta points ;
jmp initobjend
;---------------------------------------
initobjend ldx #$00
initobjen1 lda radius,x
sta initrad,x
inx
cpx points
bne initobjen1
rts
;---------------------------------------
; DISPLAY MATRIX ROUTINES
;---------------------------------------
matrix00 ldy #$00
matrix01 lda scnmat0,y
sta 1384,y
lda scnmat0+128,y
sta 1384+128,y
lda scnmat0+256,y
sta 1384+256,y
lda scnmat0+384,y
sta 1384+384,y
lda scnmat0+512,y
sta 1384+512,y
iny
bpl matrix01
rts
;---------------------------------------
matrix10 ldy #$00
matrix11 lda scnmat1,y
sta 1384,y
lda scnmat1+128,y
sta 1384+128,y
lda scnmat1+256,y
sta 1384+256,y
lda scnmat1+384,y
sta 1384+384,y
lda scnmat1+512,y
sta 1384+512,y
iny
bpl matrix11
rts
;---------------------------------------
matrix20 ldy #$00
matrix21 lda scnmat2,y
sta 1384,y
lda scnmat2+128,y
sta 1384+128,y
lda scnmat2+256,y
sta 1384+256,y
lda scnmat2+384,y
sta 1384+384,y
lda scnmat2+512,y
sta 1384+512,y
iny
bpl matrix21
rts
;---------------------------------------
matrix30 ldy #$00
matrix31 lda scnmat3,y
sta 1384,y
lda scnmat3+128,y
sta 1384+128,y
lda scnmat3+256,y
sta 1384+256,y
lda scnmat3+384,y
sta 1384+384,y
lda scnmat3+512,y
sta 1384+512,y
iny
bpl matrix31
rts
;---------------------------------------
matrix40 ldy #$00
matrix41 lda scnmat4,y
sta 1384,y
lda scnmat4+128,y
sta 1384+128,y
lda scnmat4+256,y
sta 1384+256,y
lda scnmat4+384,y
sta 1384+384,y
lda scnmat4+512,y
sta 1384+512,y
iny
bpl matrix41
rts
;---------------------------------------
; DEMO†IRQ's
;---------------------------------------
irq000 inc $d019
dec $03ff
dec $03ff
nop
lda #$01
sta $d020
lda scrollpix
sta $d016
lda $d018
sta saved018
lda #$1c
sta $d018
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
lda #$0b
sta $d021
sta $d020
lda #raster001
irq001a cmp $d012
bne irq001a
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
lda #$01
sta $d020
sta $d021
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
lda #$00
sta $d021
sta $d020
lda saved018
sta $d018
lda #%00001000
sta $d016
;----------------------------
sei
lda #<irq002
sta $0314
lda #>irq002
sta $0315
lda #raster002
sta $d012
cli
pla
tay
pla
tax
pla
rti
;---------------------------------------
irq002 inc $d019
dec $03ff ;minor start
dec $03ff ; delay
lda #$01 ;white line
sta $d021 ;
sta $d020 ;
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
lda irq002col
sta $d021
sta $d020
;----------------------------
jsr $1003 ;play tune
;----------------------------
lda ctrlscroll ;scroll text
beq irq002c ; enabled?
dec scrollpix ;fine scroll
dec scrollpix ;
bpl irq002c ; left
lda #$07 ;reinit
sta scrollpix ; fine scroll
inc scrlind ;increment
bne irq002a ; text
inc scrlind+1 ; pointer
irq002a ldy #$01 ;course
irq002b lda scrlpos1,y ; scroll text
sta scrlpos1-1,y; over 1 char
lda scrlpos2,y ;
sta scrlpos2-1,y;
iny ;
cpy #40 ;
bne irq002b ;
ldy #$00 ;tack on the
lda (scrlind),y ; next scroll
sta scrlpos1+39 ; character
clc ; to end of
adc #64 ; scroll text
sta scrlpos2+39 ;
lda scrlind
cmp #$78
bne irq002c
lda scrlind+1
cmp #$59
bne irq002c
lda #$84
sta scrlind
lda #$57
sta scrlind+1
;----------------------------
irq002c sei ;setup next
lda #<irq003 ; irq
sta $0314
lda #>irq003
sta $0315
lda #raster003
sta $d012
cli
pla
tay
pla
tax
pla
rti
;----------------------------
irq003 inc $d019
dec $03ff
dec $03ff
dec $03ff
lda #$01
sta $d020
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
dec $03ff
lda #$00
sta $d020
sta $d021
;----------------------------
sei
lda #<irq000
sta $0314
lda #>irq000
sta $0315
lda #raster000
sta $d012
cli
pla
tay
pla
tax
pla
rti
;---------------------------------------
; OBJECT†DEFINITIONS
;---------------------------------------
;TRIANGLE
itheta00 .byte $00,85,170
.byte $00
iradius00 .byte 40,40,40
.byte 40
;----------------------------
;SQUARE
itheta10 .byte $00,$40,$80,$c0
.byte $00
iradius10 .byte 40,40,40,40
.byte 40
;----------------------------
;4 POINTED STAR
itheta20 .byte $00,$20,$40,$60
.byte $80,$a0,$c0,$e0
.byte $00
iradius20 .byte 62,15,62,15
.byte 62,15,62,15
.byte 62
;----------------------------
;20 POINTED†STAR
itheta30 .byte 13,26,38,51,64
.byte 77,90,102,115,128
.byte 141,154,166,179,192
.byte 205,218,230,243,0
.byte 13
iradius30 .byte 60,30,60,10,60
.byte 30,60,10,60,30
.byte 60,10,60,30,60
.byte 10,60,30,60,10
.byte 60
;---------------------------------------
blanky .byte $00
* The disC=overy demo, single-file version *
--------------------------------------------
begin 644 disc-demo.wav
M`0@-",X'GB`H,C`V-"D```!XJ32%`:(%O4((G2T`RA#WFJ``QC+.+`BQ,9D`
M`,C0^*4RR0C0[;E(")D``<C0]TP``0`$W/)=%K$O*BHJ*BD'JKT:`8T8`;$O
...
M`F@1`H(/`J,.`H(/!H(/`@H-`@H-`:,.`8(/`K,4`K,4`HD3`F@1`H(/`:,.
M`8(/!@H-!@H-"8(/`Z,.!@H-!A,G"=`B`P0?!A0:`Q0:`A0:`1,G!F8I`]`B
A`@0?`48=!A0:`Q0:`XH3!K,4!`0?!=`B`Q0:HR$@W@``
`
end
* Vectorwave *
--------------
begin 644 vectorwave.wav
M`0@+"`H`GC(P-C$```!XJ7^-#=R-#=VI-(4!H@R@^+EQH)D'_XC`_]#USB,(
MSB`(["`(T.KF`:+JFLB,#MR,#]R,#MV,#]VY``J9``&Y``N9`-A*2DI*F0#:
...
MD?(.\E#R,_-7\<KQ[?8^\2_S9OZE].WU`;"[`0$`NP$!`+L:&AH:&AH:&AH:
+&AH:&AH:&AH:&AH`
`
end
* Waveness 1 & 2 *
------------------
begin 644 waveness-1n2.sfx
M`1PH',8'ES(P+#`ZB\(H,C`ILC"G_@(P.I["*#0V*:PR-3:J-C8Z@``\'-`'
MGL(H-#0IK#(U-JHV-CJ``````$Q"`:D.C0#_J6"%_"#\`+J.U@/*FF@XZ0&%
...
M?62VQI[Q?YE0=[X;>-`T^GFR$[QZH"`%$`+C/>.N&,G"GA2/K6MU+V8#;I.S
MMI9>M]$CO*RF41U-O/6MK]H*$CQM:>V'A@9W2'W(^3[Q![JA)<9KN(&S`YPO
.YPM73?3ITZU>ZC;F````
`
end
* Wavestorm/MLM *
-----------------
begin 644 wavestorm.mlm
M`0@0",<'GB`R,#8V(%@M4@```'BB_YKHCB#0CB'0O3X(X"NP`R#2_[UH")TM
M!+UG"9TL!>C0YWBI.(4!3"X$D),>(S`V-B!7059%4U1/4DT@("`@(%=!5D5&
...
M&!"_$+@3[QPH(4"_`+]0GU"O`*_6O_>$&AH:&AH:&AH:&AH:&AH:&AH:&AH:
M&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
&&AH:&AH:
`
end
* XwaveX *
----------
begin 644 xwavex.wav
M`0@:"`H`GC(P.#`@6S1+(%=!5D5.15-3(5T`````````H`"I"LT2T-#[N9X*
MC2#0C2'0A`J@$*(`RM#]B-#XI`K(P`O0W:F3(-+_H`"Y=0^9`""Y=1"9`"'(
...
M&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
D&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
`
end
* Venturia *
------------
begin 644 venturia.sfx
M`1PH',8'ES(P+#`ZB\(H,C`ILC"G_@(P.I["*#0V*:PR-3:J-C8Z@``\'-`'
MGL(H-#0IK#(U-JHV-CJ``````$Q"`:D.C0#_J6"%_"#\`+J.U@/*FF@XZ0&%
...
M30````$"````"$P4```*7W!O<VDN,#0`4+K?QB9K\/)9#&X&+=O1>1C`!K;\
M>`+JRY"3'S?%T>_X+7L6'5[?:JN*83SD:&L=36%THPS@`P9``7K4`,]1`#ME
.1C`!/`"&`)P`@`$]8\``
`
end