"Katja Woywood"
Vice snapshot with Vice palette
Made with the GIMP from a KW photo
and converted to C64 320x200
Hires Mode Bitmap
by Stefano Tognon
in 2007
"Late is late'
Team
Free Software Group
version 1.00
24 May 2008
SIDin Contents
General Index
Editorials 4
News 5
SID chip distortion simulation efforts 5
Polly Tracker vl. 2+ 6
X-SIDvl.OO 7
Goattracker stereo 2.59 7
Goattracker 2.6-2.67 8
CRD-Tracker64 Alpha 8
DMC Music Compo 2007 9
HVSC update 47 9
C64.sk SID Compo 7 10
Java SID Player Music Library V2 11
XSIDPLAY2 11
Rockbox 12
C64.sk Music Cover Compo 12
HVSC update 48 13
HERMIT 3SID-TRACKER 2008 13
HardSID4U 14
Mihaly Horvath (Hermit) Interview! 15
Tiny Sid 2 (part 3) 18
Plaster 512b 18
Back To Basics 23
Conclusion 25
Ripping Trivia Arcade 26
Starting 26
SID file 32
Conclusion 32
Editorials
Stefano Tognon < iceOO@libero.it >
Hi, again.
In this number of SIDin there are the final two analysis of the entry to Tiny Sid Compo II.
The second article is about ripping a tune. This time I not disassembly and reassembly it as I
done in the past, but simple use the common way to isolate the music part and add the proper irq
routine. As usual I describe all the steps involved, so you can learn a complete way for ripping and
so you can try yourself with other tunes.
This is a very delayed issue and a very soft one. Sorry for that, but I have too many activity run-
ning. Lot of this activities are Sid related, for example I'm developing XSidplay2 at Sourceforge:
this is the second version of the historical Sid Linux player that was no more developed for some
years. Now it's time to make it growing (it already recognizes the player used by the song, sup-
ports SDL sound and is available for Windows system too).
HVMEC (High Voltage Music Engine Collection) is still active and with some contributions in the
last year it growing very well- Lot of new material to release is being processed.
Finally I'm developing a Java Tracker for composing music for the Sid. For sure it will be very
rastertime consuming, but I want to have the possibility to control all the sound in details (for ex-
ample an instrument definition can reach up to 2KB of data). More about this will be available in
the next number.
Bye
ST.
News
Some various news of players, programs, and competitions:
SID chip distortion simulation efforts
Polly Tracker v1 .2+
X-SIDvl.OO
Goattracker stereo 2.59
Goattracker 2.6-2.67
CRD-Tracker64 Alpha
DMC Music Compo 2007
HVSC update 47
C64.sk SID Compo 7
Java SID Player Music Library V2
XSidplay2
Rockbox
C64.sk Cover Compo
HVSC update 48
HERMIT 3SID-TRACKER 2008
HARDSID 4U
SID chip distortion simulation efforts
In February 2007 Antii Lankila released a patch against ReSID engine in Iibsidplay2-2.1.1 to
make its sound closer to 6581 R4 chip. Here it is reported lot of information about the project taken
from the main page:
Patch status:
• Applying the patch will break 8580 simulation because it modifies it like it was a 6581.
Solution: I need to extend resid internals + sidplay2 to bring all distortion tunables into
some kind of configuration file. 8580 can just have settings that make no distortion, then.
• The distortion term is not quite right. Brutal distortion is well emulated on some songs
(Mechanicus) but badly with some others (Filter). Lead sounds, as rule, seems to come out
alright (Cybernoid and Spijkerhoek). On the other hand, something is wrong with Land of Il-
lusions, the initial bass is maybe too distorted. Vendetta, Miami Vice and Gloria do not dis-
tort enough. / predict the largest difficulties are with combined filters.
• The delicate filter interplay in David Dunn's songs is only partially emulated. This is a
difficult case. I believe that I need to allow the distortion terms to permute the filter state in
order to emulate the effects and instruments on Dunn's songs.
• CPU usage does not increase much: the current situation is tolerable. The distortion now
eats some 20% of CPU or so of an AMD64 3200+. Because resid synthesises audio at 1
MHz frequency, only very cheap algorithms ought to be used. We'll see if the system can
be optimised as it nears completion.
Known nonlinearities in the SID chip:
• Filter distorts high volume sounds a LOT. I believe that this effect is caused by abrupt
nonlinear behaviour by the SID chip op-amps. I have modelled this by approximating the
voltage difference between the input and output of two main sid-chip op-amps, and distort-
ing the lowpass, bandpass and highpass outputs if the difference goes above a certain
threshold.
• Filter resonance frequency shifts up if the intensity of sound grows, up to roughly 1
full octave, or 2x the frequency. This is responsible for the sound of the initial "drums" in
Jeffs Hard Track. Jeff keeps filter CF value (Center Frequency) as constant for the dura-
tion of each hit, but the audible effect is still a filter sweep down as these hits fade. A simi-
lar case is Elite, which simply will never be emulated correctly unless the filter is made to
properly respond to these changes in sound intensity.
The linear filtering equation is as follows:
Vhp = Vbp / Q - Vlp - Vi
Vlp -= wO * Vbp
Vbp -= wO * Vhp
I suspect that the filtering may be simulated by correcting the wO terms with a term de-
rived from the absolute difference of the outputs, for instance the middle equation should
be something like:
Vlp -= wO * Vbp * distortion function (Vlp, Vbp) ;
My current approximation of the distortion function calculates the absolute difference in
output, and then scales that (with clipping) to to range 1 .. 3.
Known bugs in sidplay2 removed by this patch:
• 6581 CF-to-frequency mapping is rather wrong for 6581 R4. A replacement that match-
es closely with my 6581 R4 is substituted instead. For instance, ReSID tables claim that CF
value of 1024 selects approximately 4.6 kHz resonance frequency, but my measurements
indicate it's approximately 1.1 kHz instead! This is a difference of roughly 2 octaves, and
needs to be corrected for 6581R4-like sound. This CF-to-frequency mapping is not better
than the one in resid in absolute terms (except that it has been sampled with higher accura-
cy), because there exists considerable variation between chips. The stock ReSID curve +
distortion patch seems quite appropriate for Terra Cresta, for instance.
• Filtered outputs are 4.5 to 6 dB quieter than unfiltered outputs. This difference can be
seen on any FFT plot from the chip when a low-volume sound is played without routing to
filter, and then with any of the filters enabled. The output level difference may arise from
the nonlinear properties of the filter itself.
• Filter calculation was done in incorrect order, resulting in excess treble for highpass
output. This bug has been confirmed by Dag Lem and fixed in ReSID upstream.
Check and download the patch from: http://bel.fi/~alankila/c64-sw/
Polly Tracker v1.2-
Aleksi Eeben in March 2007 has released a plus version on Polly Tracker with new 3 disks of
demo modules and an alternate Digimax version with 8-bit output:
x 4 sample channels
x 4-9 kHz sample rate on each channel (C-2 = 8000 Hz)
x 8-bit internal mixing
x 4-bit output on stock C-64 or 8-bit output with Digimax version
x Dynamic mixing based on polling the hardware timers, never skips a sample
x 48K reserved for sample data
x Loads 8-bit unsigned raw samples
x Edit options to adjust sample volume, trim sample end and octave upsample
x 6581/8580 ok, NTSC/PAL compatible and IDE64 friendly
x No SID voices used (except voice 3 output as sequencer sync)
x Standalone player, module-to-executable and module-to-SID tools included
Download at: http://noname.c64.org/csdb/release/?id=47686
*
-SIDvl.OO
After a lamer had released some
incomplete and not to spread Jeff's
editors, Soeren Lund had decided to
release in April a more usable version
of X-SID, but that it still incomplete.
However, due to the action done by
the lamer, no further develop will be
done to this editor.
The editor looks very promising
and it's very sad it will not improved
anymore.
You will find the editor to download
here http://noname.c64.org/csdb/re-
lease/?id=47985 , and a thirty part relocator here http://noname.c64.org/csdb/release/?id=48017 .
.59
On 12 April Cadaver had released a stereo experimental version of Goattracker 2.59
Download from http://covertbitops.c64.org/tools/gt2stereo.zip
.-" GoatTracker Stereo
GoatStereo uZ.59 - sleepualk.s
CHM1 PATT03
10 A-100000
11 . . .00000
1Z A-ZOOOOO
13 . . .00000
14 A-ZOOOOO
15 . . .00000
16 G-100000
17 . . .00000
18 G-100000
19 . . .00000
ZO G-Z00000
Zl . . .00000
ZZ G-Z00000
Z3 . . .00000
Z4 G-100000
Z5 . . .00000
Z6 G-100000
Z7 . . .00000
Z8 G-Z00000
Z9 . . .00000
30 G-Z00000
31 . . .00000
3Z D-100000
33 . . .00000
34 D-100000
i . . .00000
36 D-Z00000
37 . . .00000
38 D-Z00000
39 . . .00000
40 D-100000
DCTrWE Z FLAY IMG
EDITMUDE 0Z:44
CHMZ PATTOC
10 . ..00000
16 B-400000
17 . ..00000
18 . ..00000
3Z A-400000
33 . ..00000
34 . ..00000
CHM3 FATT1Z
10 A-510000
11 . . .00000
1Z A-510000
13 . . .00000
14 A-510000
15 . . .00000
16 G-511000
17 G-511000
18 G-511000
19 . . .00000
ZO G-511000
Zl . . .00000
ZZ G-511000
Z3 G-511000
Z4 . . .00000
Z5 G-511000
Z6 G-511000
Z7 . . .00000
28 G-511000
Z9 . . .00000
30 G-511000
31 . . .00000
3Z D-51Z000
33 D-51Z000
34 D-51Z000
35 . . .00000
36 D-51Z000
37 . . .00000
38 D-51Z000
39 D-51Z000
40 . . .00000
CHM4 PATT19
10 F-60D000
11 F-60D000
1Z C-60D000
13 F-60D000
14 F-50F000
15 F-60D000
16 F-50F000
17 F-60D000
18 F-60D000
19 F-60D000
ZO C-60D000
Zl F-60D000
ZZ F-50F000
Z3 F-60D000
Z4 E-60E000
Z5 F-60D000
Z6 F-60D000
Z7 F-60D000
Z8 C-60D000
Z9 F-60D000
30 F-50F000
31 F-60D000
3Z F-50F000
33 F-60D000
34 F-60D000
35 F-60D000
36 C-60D000
37 F-60D000
38 F-50F000
39 F-60D000
40 E-60E000
D PAL 8580 HR:0F00 IX F1Z=HELP|
CHM6 PATTOO CHM 8RDERLIST (SUBTUNE 00, PBS 15)
10 . . .00000 1 07 05 05 06 06 07 07 08 08 04 |3
11 . . .00000 Z 10 OE OE OF OF 10 10 11 11 OD OC
1Z . . .00000 3 16 14 14 15 15 16 16 17 17 13 1Z
1 19 19 19 19 19 19 19 1A 1A 19 19
INSTRUMENT MUM. 01
Attack/Decay 03
Sustain/Release AA
Uauetable Fos 01
Fulsetable Fos 01
Filter-table Pos 00
UAUE TBL
01:41 00
0Z:40 00
03:FF 00
04:Z1 00
05:FF 00
06:11 00
07:FF 00
08:41 00
09:FF 00
0A:41 74
OB: 40 74
0C:01 00
0D:01 74
0E:FF OC
FULSETBL
01:8Z 00
0Z:Z0 30
03:Z5 DO
04:05 30
05:FF OZ
06:8Z 00
07:18 40
08:1C CO
09:04 40
0A:FF 07
OB: 80 80
0C:Z6 60
0D:Z4 AO
0E:Z4 60
NAME sleepualk
This nod is on
Uibrato Param 00
Uibrato Delay 00
HR/Gate Timer OZ
IstFrame Uaue 09
FILT.TBL
01:00 00
0Z:00 00
03:00 00
04:00 00
05:00 00
06:00 00
07:00 00
08:00 00
09:00 00
OA:00 00
OB: 00 00
0C:00 00
0D:00 00
0E:00 00
SFEEDTBL
01:03 10
0Z:00 ZO
03:03 ZO
04:00 40
05:00 3C
06:00 80
07:00 00
08:00 00
09:00 00
0A:00 00
OB: 00 00
0C:00 00
0D:00 00
0E:00 00
CHN1 CHMZ CHN3 CHM4 CHN5 CHM6
0Z1/Z5 0Z1/Z5 0Z1/Z5 0Z1/Z5 000/Z5 000/Z5
Goattracker 2.6-2.6:
Still in April news versions of Goattracker come out (and in May 2008 the last version):
v2.6
• Fixed pattern default length selection display when decrementing from a length of 100 or
higher.
• Fixed mouse selection of pattern when adjusting an adjacent channel.
• Fixed help screen instructions.
• Changed resolution to 800x600.
• Changed all songname rows to be displayed at the same time.
• Changed mouse control to allow pattern column selection even when left mouse button is
held down.
• Changed speed of PageUp/PageDown scrolling to be faster.
• Optimized graphics output.
• BME library is no longer needed.
v2.61
• Added the backquote key (top-left on keyboard) to select channel in pattern edit mode, and
to select table in table edit mode. Use with SHIFT to go backwards.
• Added SHIFT+channel number to mute channels in pattern edit mode.
V2.62
• Added possibility for realtime calculated note independent (hifi) portamento & vibrato.
Warning: has potential for huge rastertime increase.
V2.63
• Fixed note independent portamento & vibrato to use the last note set in wavetable for cal-
culations, instead of the last note in patterndata.
V2.64
• Fixed paste in table (SHIFT+V) working also without SHIFT pressed.
V2.65
• Fixed raw keycodes over 51 1 interpreted as some other keys in the 0-51 1 range.
v2.66beta
• Initial cycle-exact HardSID support (Win32 only)
• Permit running without sound.
v2.67
• Configurable cycle-exact HardSID buffer length (separate for inter-active and playback
mode, see /T and /U command line options)
CRD-Tracker64 Alpha
On 9 May 2007, Owen Crowley
had released his alpha version of a
music tracker: CRD-Tracker64.
You can event read the history of
this not finished editor by looking at
the creator Readme file that it in the
disk.
Download from cdsb:
http://noname.c64.org/csdb/get-
internalfile.php/39695/CRDTRACK-
ER64 ALPHA.D64
CRD-TRACKER64 (C) OUEN CROWLEY
F7=MENU
"I TRACK:3 BLOCK :$B1
J SAA:$0O POS: «-=LC : $2000
S01:SB1 S56: $04 SAB : S06 SGO : A-l : OC
S02:SB2 S57:S03 SAC : SOG S8G : A-l : 07
S03:SB1 S58:S05 SAD : S07 SBC : :
S04:SOO $59:563 SAE : S8G S92 : Ct*4 : 0C120204
$05 $66 S5A:S04 SAF : SAB S98 :
SOGiSOO S5B:S03 SBO : SOO S9E :
$02:00
$03: 09
$04: 01
$05: 41
$06:00
$07: 09
■C2
■C3
f
PULSE
SHI:
: HH:
rnT
HI
SB2:
HI :
:^H
HH
$83
: HH:
Hi*
HI
SB4
: HI :
HH
HH
SB5:
: HH:
H4
Hb
$86
HH
HH
HH
$87:
: HH:
HH
|C6
t4:6C120204
i03
SLIDE
$01:00:02
$02:00:00
$03:00 :02
$04:00 :05
$05:90 :00
$06:03:20
$07:06 :EO
FILTER
$O1:OF:O0
$02:80:00
$03 00 : 02
$04:00 : 00
$05 :00 : 00
$06:00:00
$07 00 : 60
F6 F0=SPEED(1XJ RASTER : SOD,
DMC Music Compo 2007
In 2007 Richard lanch a music compo for DMC
editors (all the versions were allowed):
http://www.redesign.sk/tnd64/DMCcompo.html
Here the result:
1:
Name of song: Wot Da Funk
Author : Marcin Majdzik (Psycho)
Version : DMC V4 (Modified by Glover/Samar)
Duration :2:15
SID Type :8580 (New)
Name of song: Extreme - Part 2
Author : Surgeon/Vulture Design
Version : DMC V7.0 (Modified version of DMC V4.0 ;o))
Duration : 2:54
SID Type :8580 (New)
Name of song: Tanker
Author : Rio/Rattenrudel
Version : DMC V7.0 (Modified version of DMC V4.0 IDE 64 Version)
Duration : 2:09
SID Type :8580 (New)
2:
3:
HVSC update 4
In July the new version of HVSC was released at http://www.hvsc.c64.org
After this update, the collection should contain 34,127 SID files! This update features (all ap-
proximates):
x 1127 new SIDs
x 19 fixed/better rips
x 8 fixes of PlaySID/Sidplayl specific SIDs
x 8 repeats/bad rips eliminated
x 773 SID credit fixes
x 700 tunes assigned a sidmodel flag
x 15 UNKNOWN demo tunes identified
x 29 UNKNOWN game tunes identified
Main Composers featured in this update:
(Artists marked with NEW are either completely new to the HVSC or they get their own directory
in this update)
A-Man - venturing into the Pollytracker domain now! Bart
Richard Bayliss Bernhard Burgstaller (NEW)
CRD - kindly donated his complete collection to us Chantal Goret (NEW)
Dexter (NEW) Eco
Fanta - make sure to have a listen to his Desert Dream conversion!
Fox Gop
Greg Gregfeel
Harlequin Heinmuck
Hukka
MAC2
Merman
Nastiness Inc.
Pernet
Raze
Sax
Skam (NEW)
STP Sound System
Topaz
Zeta (NEW)
Image
Mac / Radical
Moogle Charm (NEW)
Omoroca (NEW)
Q-Man
Rio
Sharp
Slayer
Tonid (NEW)
Vintaque
HVSC News
• Motion joined the HVSC Crew
• Steppe retired from the HVSC admin post. Rambones will take over, good luck!
• The new directory structure requires a new update tool. It got updated for Linux and Win-
dows, so we feel the majority of users won't have a problem. For the exotic platform users:
The source code of update tool 2.8.4 is on the HVSC website in the Downloads section. If
you manage to compile it on your specific platform, feel free to send it over! And by the
way: You can still run update #47 with update tool 2.8.3. It will complain heavily that the
/Hubbard_Rob/ directory is not where it expects it to be, thus assuming you did something
fundamentally wrong. Just ignore the warning, nod away the next "y/n are you sure you're
sure?" question and it will work anyway.
C64.sk SID Compo 7
J
The annual C64.sk compo was performed even this year, with lot of tunes:
Place Release / Scener
1 Darkening by Cadaver
2 There was a Light That Went Out by Randall
3 Autumn Symphony by Orcan
4 Danger Zone by Conrad
5 His Pearl by _V_
6 Unsophisticated by Peace
7 Unforgivable by Dane
8 Not A Jazz by Jammer
9 immoral coil by dalezy
10 y Little Daughter by PCH
1 1 6581 Destinations by Stainless Steel
12 November Echoes by The Syndrom
13 The Sexy Hardrestart by Hein
14 Girls'n Ghosts Ate Kleve by Linus
15 The Sweet Odour Of Jesus Christ by Intensity
1 6 Saturday (Laid Back) Weirdness by No-XS
17 I Died Defending the Mothership by Uneksija
18 Volcanoes of Passion by Sidder
19 Unstoppable by PsycHo
20 Mix 'Em Up 64 Style by Richard
21 Sorry For The Delay by Peter Bergstrand
22 Story About F Sharp by Jakim
23 Ready by Surgeon
24 Jammed With Arpeggios by Falciparum
Points
(1314 PTS)
(1167 PTS)
(1152 PTS)
(1150 PTS)
(1087.5 PTS)
(101 1.5 PTS)
(999 PTS)
(995 PTS)
(950 PTS)
(930 PTS)
(926 PTS)
(910.5 PTS)
(887.5 PTS)
(863 PTS)
(863 PTS)
(813.5 PTS)
(799 PTS)
(788.5 PTS)
(732 PTS)
(694 PTS)
(662 PTS)
(628.5 PTS)
(594 PTS)
(560.5 PTS)
10
25 Gold Lux by Xiny6581
26 Print All Your Crap by Ed
(412 PTS)
(409 PTS)
Visit the event here: http://www.c64.sk/files/sidcompo7/sidcompo7-results.html
Java SID Player Music Library V2
On December, kenchis released a port in Java of sidplay2 library and sidplay2 console player.
The library is very promising for all the Java fan. It improves day by day and it uses a even a
graphical interfaces over the classical console.
+ +
Java SIDPLAY - Music Player & C64 SID Chip Emulator |
Sidplay V2.0.8, libsidplay V2 . 1 . 1 |
+
+ -
Title
Author
Released
File format
Filename (s )
Condition
Playlist
Song Length
Against My Enemy |
Kjell Nordb0 |
1996 SHAPE/Blues Muz' |
+
PlaySID one-file format (PSID) |
Against_My_Enemy . sid |
I
No errors |
1/1 (tune 1/1[1]) I
UNKNOWN |
+
Download from http://sourceforge.net/projects/jsidplay2/
XSIDPLAY2
Developed at http://www.sourceforge.net/projects/xsidplay2 , this is the second version of XSid-
lay (the historical Sid Linux player), that was no more developed by the author.
Version 2.0.0
Based onto xsidplay 1.6.5.2
• Sidld v1. 7 support
• Remove some memory related bug into TSID2 patch
• Remove a time related bug (about time resolution) when using Iibsidplay2
Version 2.0.1
• Clear list in Sidld before
load a configure file
• Allow to compile correctly if
TSID2 is disable
• Add experimental support
for SDL sound library
Version 2.0.2
• Add LCD display for
songlength
• Allow to compile correctly
with libsidplayl
File Config Playlist Hotlist Extra About
Name
Author
Copyright
Songs
Song speed
SID model
Addresses
Format
Player
Petersburg
Oliver Mohr (Zounds)
1992 Zounds
1 (Startsong: 1)
50 Hz VBI (PAL)
MDS 6581
$1000, $1048, $1021
PlaySID one-file format (PSID)
Music_ Assembler
f" playlist enablec |~~ loop playlist I - random play
11
Rockbo
Rockbox is an open source firmware for mp3 players, written from scratch. It runs on a wide
range of players:
• Apple: 1st through 5.5th generation iPod, iPod Mini and 1st generation iPod Nano
(not the Shuffle, 2nd/3rd gen Nano, Classic or Touch)
• Archos: Jukebox 5000, 6000, Studio, Recorder, FM Recorder, Recorder V2 and Ondio
• Cowon: iAudio X5, X5V, X5L, M5 and M5L
• iriver: H 1 00, H300 and H 1 series
• SanDisk: Sansa c200, e200 and e200R series {not the v2 models)
• Toshiba: Gigabeat X and F series (not the S series)
The interesting things about this project is that it play Sid file. Look at http://www.rockbox.org/
i O U f c
J u k * b o x
r m w a r *
C64.sk Music Cover Compo
This was the first cover compo organized by www.64.sk
1 Elysion by Steven Diemer (A-Man/Xenon) (3:36) (738 PTS)
2 Cauldron II Sinus Milieu Studie by Linus (Sascha Zeidler) (4:05) (725.5 PTS)
3 Englishman In New York by Josep Barwick (Stainless Steel) (717.5 PTS)
4 Atlantic Reloaded Italo Disco by Randall (2:16) (650.5 PTS)
5 Galaxy Bounce (Tomb Raider Mix) by Kamil Wolnikowski (Jammer) (631 PTS)
6 Everybody Everybody by MSK Fanta Mitch (3:19) (626 PTS)
7 Dreamlights by Freedom (Marcello Marsetti) (2:43) (592.5 PTS)
8 Blitzzurueck Wahlmoeglichkeitenl by Vincent Merken (_V_) (3:20) (584.5 PTS)
9 Mama by Stefan Uram (Orcan) (3:10) (520 PTS)
10 metroid_tune_5.sid by dalezy/triad (514 PTS)
1 1 The Great Destroyer by Stellan Andersson (Dane) (3:16) (502.5 PTS)
1 2 Burning Heat by Aegis501 .5 PTS)
13 Could_You_Be_Loved by Rafal (Surgenon) (500.5 PTS)
14 Queen of Rain by Lars Hutzelmann (The Blue Ninja/DOS) (3:32) (488 PTS)
15 Nowhereland by Richard Bayliss (The New Dimension) (3:40) (470.5 PTS)
16 Daup of Pink Paint by Hein/Focus (Hein Holt) (0:55) (437.5 PTS)
17 Kate and Martin by Peter Bergstrand (3:40) (428 PTS)
18 Magnum Theme by Nico van der Zijden (Vai/Slash Design) (2:48) (379.5 PTS)
1 9 Chasing Cars by Andrew Fisher (Merman/POL/ROLE) (6. : 1 0) (375.5 PTS)
20 Diamond in the Night by hukka (Joel Toivonen) (370.5 PTS)
21 Assault On Precint 1 3 by Andrew Lemon (Ne7/Triad) (350.5 PTS)
22 Intro A-team by Tim (bordeaux) (279.5 PTS)
23 Over The Rainbow by deizi (Tommi Lehtimaki) (1 :32) (208.5 PTS)
More information can be found at http://www.c64.sk
12
HVSC update 48
Update 48 of HVSC ( www.hvsc.c64.org ) was released in March 2008.
This time we have music from:
Vandalism News 49
Silesia party
The 82 Ditties demo by Bluez Muz
unreleased tunes by Adam Gilmore
John Stormont (NEW)
C64.sk SIDcompo 7
Aegis (aged sweet 13 years old!) Jeroen Tel
Linus
Dwayne Bakewell
Richard Bayliss
Conrad (CRD)
Froyd
Adam Gilmore
Goto80
After this update, the collection should contain 35,030 SID files!
This update features (all approximates):
918 new SIDs
42 fixed/better rips
fixes of PlaySID/Sidplayl specific SIDs
12 repeats/bad rips eliminated
370 SID credit fixes
101 SID model/clock infos
11 tunes from /DEMOS/UNKNOWN/ identified :-)
37 tunes moved out of /DEMOS/ to their composers' directories
15 tunes moved out of /GAMES/ to their composers' directories
IERMIT 3SID-TRACKER 2008
Hermit Soft releases in May 2008 a
new tracker that can handle 3 sid
chips.
It can control 3 SIDs simultaneously
on $d400,$de00,$df00 (yet). 9
polyphony, 3 filters, (no need arpeggio
to have chords)
The tracker itself is a modern fast-
tracker-like editor, which has addition-
al functions (for example: the edit cur-
sor and play-cursor,loop-play with
F7,etc).
You can get it from here:
http://noname.c64.org/csdb/release/?id=66065
13
lardSID 4U
The HardSID 4U is the most powerful SID
synthesizer since the legendary C64!
• Two CPUs and main memory
• Updateable firmware over USB
• Full automation of all VSTi parameters
• USB connection (compatible with both
2.0& 1.1)
• Isochronous USB endpoint for low-la-
tency audio
• VSTi interface with 8000Hz update rate
on all SID registers (free)
• Wave-in VSTi pin for routing 8000Hz
signals to any registers (example: playing other VSTi's sound on the volume register)
• Superior sound quality (..it is a HardSID!)
• Support for up to four SID chips (6581/8580/6582 in any combination)
• Microsoft Vista compatible (drivers for Win2000/XP/Vista)
..and if you're a C64 fan
• Cycle-accurate playback of your favorite SID tunes
• Digitized sound + high-speed playback with low CPU utilization
• Seamless playback of .sid tunes while you work on your PC by providing a huge playback
buffer for non-VSTi applications
The HardSID 4U Studio Edition
• Full physical separation of the SIDs from the USB driven circuits
• 100% elimination of EMI (Electromagnetic interference) noise that may come from your PC
via USB
View all at: http://www.hardsid.com/hardsid_4u.php
14
Mihaly Horvath (Hermit) Interview!
by Stefano Tognon
This time I go to interview Hermit, that has released a tracker that can control 3 sid chips. Some-
thing very interesting...
Hello Hermit, could you introducing yourself and what you do in real life?
Hello, My real name is Mihaly Horvath, I'm a 25 years old hungarian. I got electrical qualifications
in secondary school, and I'm a communications-technician. But I was always interested in arts, mu-
sic, painting, writing, and managed to get good competition results. Now the music is the first thing
(after my Telecommunication Operator job) in my life, and I play live music with bassguitar and
solo-singing in my Band. Any kind of music is preferred. In my free time I'm listening SID music and
Seal, Sting, MJ, Jazz... music. I love nature, I have a girlfriend.
When and how did you discover the Commodore great machine called C64?
When I was 14, my primary school started computer education with 386 machines. I wanted a
computer, and one of my friends sold me his C64 with a datasette. Lack of lot games made me to
entertain myself with BASIC program-writing, even I wrote a GHOSTBUSTER-game and utils in
BASIC in 1997. Then I started to learn the much more faster machine-code, and until 2000 I wrote
many other user programmes, games, music collections (Mirage l,ll,lll).And the Mortal Kombat that
is in the D64, wasn't completed... These "good times" ended, when I got my first 386 from a com-
puter-service for my work. Later I sold my C64 with the new floppy-drive. I then wrote music with
Fasttracker, then for some years I used IBM PC family to make music. On my last P4 is used
SONAR and many VST and recorded live instruments, but had always problems wit WL.ws. So af-
ter 5 years I bought back my first C64 to compose my music with it. Started to write the HMT-
SYNTH,then the TRACKER.. Now I have 8 pieces of C64 already, and collect them ...
What is your actual way for creating programs for the commodore? Cross-develop into pc
or directly coding in it?
I prefer the real machine with cartridge and floppy-drive for program-developing, especially in mu-
sic editors, but if there isn't C64 near me I sometimes use the Vice to develop my programs.
Your 3-SID tracker is very amazing. When did your start to think to realize such a big chal-
lenge? It is very beautiful to have 2 sids into the C64, but 3 is absolutely fantastic.
Thanks. As I said before, I wanted to compose my live-musics on this safe-running C64 machine,
but the first problem was the only 3 tracks, so I was searching 2SID composers, but there is only
two yet: DMC 4.3 and Prophet64. DMC wasn't easy to make 2SID zaks, because of switching be-
tween SIDs. Prophet64 is a good thing, but I didn't manage to get it already, only the free demo
without sequencer-part. And double framespeed was important too for me. So I decided to write a
composer that's all in one for these desires. 3SID was the main new idea, and why not do it, if this
great C64 can cope with it. I started it in Januray this year, finished this version in only 4 months.
Was you inspired by some existing tracker when you think of how to realize the your one?
I preferred the trackers because of my Fasttracker experiences. So Cybertracker, Odintracker,
DMC and JCH's editor were the trackers that inspired me, and I downloaded many others to get
ideas.. I invented some new things too: separate cursors for play and edit, all in one screen, ad-
vanced play-stop functions, pattern-play mode, loop-play mode...
15
What can you say about your future plan of releasing a 1-sid/ 2 sid version of the tracker?
I think than many composers will be interesting into this.
Now it can be used as an 1SID or 2SID composer as in Cybertracker, but not specialized. Only
leave the other SID-tracks empty. As the fixed new version will be ready with new functions, then
1SID and 2SID specialized versions will be ready too. I see it is worth it to spend more time with
programming the tracker....
Have you some other interesting projects not jet released of just planned that you can talk
to us?
Yes, I don't want to use IBM PC in the future as possible, so I'm developing Commodore 64 hard-
ware and software to use it in my everydays.. Some other fanatic people does too. I now use for
example 64HDD, want to use netcard-expansion later, to write e-mail from real c64, and so on..
The in USA-developed Commodore One is a good solution, it's all in one C64 expansion-mother-
board with card-OS (Wings)... My actual work is the Hermit C64 Commander (HC), that will handle
64HDD.1541 and later pen drive as the Star Commander. My aim is to fanatically rise up again
this good machine. What would be now, if its great line was continued? It only died because of
wrong final leading of the firm... As I heard Tulip will manufacture C64 again with new logo.. I will
seriously buy one....
Now some quick final (standard) questions:
Real machine vs emulator: what do you think about?
Vice is a very good emulator, but SID emulation isn't as fully good as the real. Analogue filter is im-
portant, the other important is the note-frequency dependent samplerate of the SID (44100 Hz is
weak for pure analogue).
6581 vs 8580 chip: any (musical) preference?
I have a 3X8580 SID new machine and also an old 2X6581 SID machine. I tried both SID types,
and I think that the 8580 is more accurate, but 6581 has good bass-filter behavior for older compo-
sitions. I prefer 8580.
What is the worst and the better sid you composed?
I didn't compose lots of SIDs yet, first I used Light Voices, and made very weakly composed mu-
sics (they are in my zak-collections called Mirage) 8 years ago. Today with my tracker I last com-
posed the Earmind, which is my best SIDmusic now. But I have to train myself on SID a lot.
Who are your best sid authors?
The best for me is Jeroen Tel.
I think, he is one of the very-best composers in the world. I started to live-remix his composition
and play them with my band in Hungary. But all Maniacs Of Noise members are nearly good too:
Reyn Ouwehand, DRAX, Laxity, ... I also love Rob Hubbard music, and the best sounding and
strange feelings of Shogoon zaks.
On C64 there are lots of extra-good authors too: Thomas Detert, Mark Cooksey, Martin Galway,
Richard Joseph, David Whittaker, SLD, and so on.... SID (3 track) makes everyone to do his best
to keep interest and quality..
16
What are the best sids ever in your opinion?
Jeroen Tel: Rubicon, Wiz, Aspar Grand Prix , Myth, Poseidon, Supre Macy, Golden Axe, Elimina-
tor, Cybernoid 1,11, Savage, ... Rob Hubbard: Zoids, Commando, Intern. Karate, Monty on Run, Star
Paws, ...
Shogoon: Fun Factory, Zone of Darkness, lllmatic End, Muza do Dema, Love 2 ....
Other great SIDs: Barbarian, Last Ninja, BTTF3, Solitax end, Mysterious World, Stack Up, Krakout,
Jackal, Dazzler, ....
And many-many very sophisticated compositions!!!!
(Todays pop-music is weak in good melodies, so the before mentioned zaks are much better and
various for me...)
Finally, many thanks for the time you give for this interview, and now would you say some-
thing else to the our readers?
Everybody! Help us keep C64 alive, and make the feeling of a better world!!! READY.
17
Tiny Sid 2 (part 3)
by Stefano Tognon < ice00(5>libero.it >
With this article I finally ending to analysis of the last two entries of the Tiny Sid Compo II. All the
engines present here are done by reverse engineering the code.
Plaster 512b
Plaster is the 512b entries of GRG and is the tune that take more points over all the others.
Here a description of the player:
• Autostarting at $0326 by setting the IRQ
• It disables IRQ and made a synchronization onto raster position
• It fills the zero page data all with 0, and copy some data to zero page while initializing
• It uses filter and cut frequency that varies from $3F to $FF up and down during the playing
• Song is based onto 2 tracks, one for voice 1 and one for voice 2 and 3
• One value in a track is a index to a pattern table of commands to execute, and if this value
is negative, the absolute value is the transpose value to add for the next pattern.
• Each pattern command has this meanings:
• value < 8 = set an instrument to use
• 7 lower bit = note to play (if not an instrument)
• negative = this is the last command (7 bit =command)
• One instrument is made by:
• Control index value to use: an index to a series of control values to use for
making timbre effect to the instrument
• Attack/Decay value
• Sustain/Release value
• Pulse is varied by the player for making better effect
• Hardrestart of note is performed by the player
• Note frequencies are built using the values of an octave
• Other effects are made inside the player for let voice 2 and 3 to be different (they play the
same track)
; memory usage
84 note duration voice 1
86 pattern offset voice 1
87 freq low to add voice 1 (not used)
88 pattern index voice 1
89 track pattern index voice 1
8A note to play voice 1
8B note duration voice 2
3D pattern offset voice 2
8E freq low to add voice 2 (not used)
8F pattern index voice 2
90 track pattern index voice 2
91 note to play voice 2
92 note duration voice 3
94 pattern offset voice 3
95 freq low to add voice 3 (used)
96 pattern index voice 3
97 track pattern index voice 3
98 note to play voice 3
A0 pattern low address voice 1
A2 control reg. index vol ce 1
A3 instrument voice 1
A4 note transpose value voice 1
A5 note duration for control voice 1
A6 control reg. value voice 1
A7 pattern low address voice 2
A9 control reg. index voice 2
AA instrument voice 2
AB note transpose value voice 2
AC note duration for control voice 2
AD control reg. value voice 2
18
AE pattern low address voice 3
Bl control reg. index voice 3
B2 instrument voice 3
B3 note transpose value voice 3
B4 note duration for control voice 3
B5 control reg. value voice 3
BE actual wave low byte voice 1
CO direction 0=dec l=inc
CI actual low freq.
C2 actual high freq.
C5 actual wave low byte voice 2
CC actual wave low byte voice 3
D8 actual cut freq. hi byte
.org $0326
.byte $2A, $03
.byte $ED, $F6
.org $032A
sei
tya
loop:
sta
$0002, y
iny
bne
loop
ldx
#$0E
ldy
#$02
looplnit :
Ida
#$01
sta
$84, x
Ida
track, y
sta
$A0,x
Ida
wave hi , y
sta
$D403, x
dey
Ida
#$FF
sbx
#$07
bpl
looplnit
Ida
#$03
sta
$92
Ida
#$1E
sta
$95
Ida
#$F1
sta
$D417
Ida
#$3F
sta
$D418
playLoop :
ldy
$D8
ldx
$C0
beq
setDec
iny
cpy
#$FF
bne
setCut
dex
beq
setCut
setDec
dey
cpy
#$3F
bne
setCut
inx
setCut:
stx
$C0
sty
$D8
sty
$D416
ldx
#$0E
nextVoice :
dec
$84, x
bne
durNotZero
ldy
$88, x
bne
patNotZero
ldy
$86, x
Ida
$A0,x
sta
trPos+1
notVoicel :
trPos:
Ida
track, y
bne
skipVEffect
empty zero page variables
; note duration
; pattern low address
; Voice 1: Wave form pulsation amplitude (hi byte)
undocumen t operation
note duration voice 3
freq low to add voice 3
Filter resonance control/voice input control
Select volume and filter mode
made the cut freq goes from 3F to FF and back
actual cut freq. hi byte
direction 0=dec l=inc
direction 0=dec l=inc
actual cut freq. hi byte
Filter cut frequency : hi byte
voice 3
dec note duration
pattern index
pattern offset
pattern low address
load value of pattern
19
tay
cpx #S07
bne notVoice2
Ida $AB
eor #SF0
sta $AB
notVoice2 :
cpx #$00
bne notVoicel
Ida #305
sta patlns
bne notVoicel
is voice 2?
skipVEffec
t:
bpl
skipTranspose
and
#$1F
sta
$A4,x
iny
bne
notVoicel
skipTranspose:
sta
$89, x
iny
sty
$86, x
patNotZero
ldy
$89, x
Ida
patTable-l,y
sta
patPos+1
ldy
$88, x
cpx
#$00
beq
skipVEffect2
Ida
$A3,x
eor
#$07
sta
$A3,x
skipVEffec
t2:
patPos :
Ida
$049E,y
iny
cmp
#$08
bcs
isNote
sta
$A3,x
bne
skipVEffect2
isNote:
pha
and
#$7F
clc
adc
$A4,x
sta
$8A,x
pla
bpl
notLast
ldy
#$00
notLast :
sty
$88, x
decNextVoice :
Ida
#$FF
sbx
#$07
bpl
nextVoice
loopSync:
cmp $D012
bne loopSync
jmp playLoop
durNotZero :
Ida S84,x
pha
cmp #$01
bne skipHR
sta
Ida
sta
dec
SkipHR:
pla
bpl
$D406,x
#$0F
$D405,x
$A5,x
sta $A5,x
Ida #$07
sta $84, x
sta $BE,x
transpose effect for voice 2
note transpose value voice 2
note transpose value voice 2
is voice 1 ?
instrument 5
change pattern
note transpose value
track pattern index
pattern offset
track pattern index
pattern index
voice 1
instrument
instrument
is an instrument ?
store instrument
isolate the note
note transpose value
note to play
restart pattern as it is finished
pattern index
undocumen t operation
Reading/Writing IRQ balance value
note duration
test for hardrestart
Generator It Sustain/Release
Generator It Attack/Decay
note duration for control voice
note duration for control
note duration
actual wave low byte
20
ldy $A3,x
Ida controllndex-l ,y
sta $A2,x
Ida AD_inst-l,y
Sta $D405,x
Ida SR_inst-l,y
sta $D406,x
setCtrl:
ldy $A2,x
Ida control, y
bne notZeroCtrl
dey
Ida $A6,x
.byte $2C ; BIT $A2F6
notZeroCtrl:
inc $A2 , x
sta SA6,x
and $ A5 , x
sta $D404,x
Ida useFreq, y
bpl ignoreFreq
and #S7F
bpl outHiFreq
ignoreFreq:
Ida $8A, x
pha
and #$0F
tay
Ida hiFreq,y
sta $C2
Ida loFreq,y
sta $C1
pla
lsr
lsr
lsr
lsr
tay
beq s kipDouble
doubleF:
lsr $C2
ror SCI
dey
bne doubleF
read instrument
control reg. index
Generator 1: Attack/Decay
Generator 1: Sustain/Release
control reg. index
read control reg
control reg. value
control reg. index
control reg. value
note duration for control voice
Voice 1 : Control registers
use freq. for effect
isolate low 7 bits of high freq
note to play
take base note
actual high freq.
actual low freq.
take octave
y=octave
double the frequency
actual high freq.
actual low freq.
skipDouble :
Ida $C1
clc
adc S87,x
sta $D400,x
Ida $C2
adc #$00
actual low freq.
freq low to add
Voice 1: Frequency control (lo byte)
actual high freq.
outHiFreq:
sta $D401,x
Ida $BE,x
adc #$18
sta $BE,x
sta $D402,x
jmp decNextVoice
,- Voice 1: Frequency control (hi byte)
; actual wave low byte
; actual wave low byte
; Voice 1 : Wave form pulsation amplitude (lo byte)
track:
.byte <track79, <track8F, <track8F
track79:
.byte $83, $01, $01, $01
.byte $01, $8A, $01, $01
.byte $01, $01, $8B, $01
.byte $01, $01, $01, $86
.byte $01, $01, $85, $01
.byte $06, $00
track8F:
.byte $02, $02, $03, $03
.byte $04, $04, $05, $05
.byte $00
patTable:
.byte <pat9E, <patAC, <patB6, <patC0, <patCA, <patA6
21
/ value <8 - instrument
; negative - last
; 7 low bit = note {if not instrument)
pat9E:
.byte $02, $60, $01, $60
patlns :
.byte $02, $60, $01, $E0
patA6 :
.byte $02, $60, $60, $05
.byte $60, $E0
patAC :
.byte $03, $3A, $33, $3A
.byte $03, $36, $3A, $35
.byte $36, $B3
patB6:
.byte $03, $21, $35, $21
.byte $03, $3A, $21, $38
.byte $3A, $B5
patCO:
.byte $03, $3B, $33, $3B
.byte $03, $3A, $3B, $36
.byte $3A, $B3
patCA:
.byte $03, $3A, $4A, $3A
.byte $03, $36, $3A, $33
.byte $36, $CA
wave_hi :
.byte $08, $08, $04
AD_inst:
.byte $00, $0F, $02, $E0, $08
SR_inst:
.byte $A4, $FA, $8A, $8A, $E8
wave high value for each voice
attack/decay of instruments
sustain/release of instruments
loFreq:
.byte $1E, $18, $8B, $7E, $FA, $06, $AC, $F3, $E6, $8F, $F8, $2E
hiFreq:
.byte $86, $8E, $96, $9F, $A8, $B3, $BD, $C8, $D4, $E1, $EE, $FD
control :
.byte $09, $81, $41, $00
.byte $09, $81, $11, $11, $11, $11, $11, $00
.byte $09, $81, $41, $40, $40, $80
controllndex:
.byte $00, $04, $02, $02, $0C
/ if <0 , 7bits=high freq. to use for effect
useFreq:
.byte $00, $FF, $00, $02, $00
.byte $FF, $8B, $89, $86, $84
.byte $00, $0A, $00, $FD, $8E
.byte $8C, $8A, $FF, $00, $00
22
Back To Basic
This is the 256 bytes tune wrote by Jaymz Julian.
Here a description of the player:
• Autostarting at $0326 by setting the IRQ
• It synchronization onto raster position
• It copies some data to zero page while initializing for access them with short instructions
• High byte of filter cut of frequency and high byte of wave pulse (that will be used a little
shifted for each voices) are changed every fixed time
• Voice 2 use tables of values for high frequencies and control register to use
• Pattern of values are used for Voice 1 and 3 frequencies low or high)
• Note duration are triggered between 2 values during the play
.org $0326
.byte $2A, $03
.byte $ED, $F6
.org $032A
Ida #$1F
sta $D418
ldx #$46
set volume
loopCopy:
Ida
sta
dex
bne
data,x
$01, x
loopCopy
copy data to zero pages
mainLoop :
ldx #$00
jsr play
dec $3A
bne skiplnc
Ida #$04
sta $3A
inc $47
dec delay for continue effect
restore delay for continue effect
inc Wave form pulsation amplitude (hi byte)/ Filter cut frequency: hi byte
skiplnc:
ldx #$07
jsr play
ldx #$0E
jsr play
voice 2
voice 3
Ida
sta
raster:
cmp
bne
beq
#$F4
$D417
$D012
raster
mainLoop
Filter resonance control/voice input control
Reading/Writing IRQ balance value
play:
txa
adc $47
sta $D403,x
sta $D416
differentiate the effect for the 3 voices
Wave form pulsation amplitude (hi byte)/ Filter cut frequency : hi byte
Voice 1: Wave form pulsation amplitude (hi byte)
Filter cut frequency: hi byte
Ida #$80
sta $D402,x
ldy $36, x
dec $38, x
beq readPat
Voice 1: Wave form pulsation amplitude (lo byte)
read actual pattern index
actual duration (delay)
cpx
bne
#$07
quit
Voice 2
ldx $3B
Ida $lA,x
bne notZeroVal
pattern value (-index starting from $1A)
Ida $lB,x
tax
Ida $1A, x
load restarting position
use value of new position
notZeroVal :
23
quit:
sta $D408
Ida $28, x
sta $D40B
inx
Stx $3B
rts
Voice 2: Frequency control (hi byte)
Voice 2: Control registers
pattern value (-index starting from $1A)
readPat :
Ida $0002, y
bpl notEndPattern
Ida #$E9
sta $D406,x
Ida #$41
sta $D404,x
inc $2E
Ida $2E
and #$0F
bne notl6
read pattern value
Generator 1: Sustain/Release
Voice 1: Control registers
counter
test for every 16 ticks
sta $D406,x
sta $D404,x
Ida $1C
eor #$0C
sta $1C
Generator 1: Sustain/Release
Voice 1: Control registers
Voice 2 frequency high byte
make effect
ldy $37, x
sty $36, x
bpl readPat
notEndPattern :
cpx #$07
bne notV2
restore pattern index
actual pattern index
voice 2
sta $3B
bne notJump
pattern value (-index starting from $1A)
notV2 :
isV3:
bcc isVl
inc $ 4 1
bne isV3
inc $42
sta $D400,x
and #$0F
sta $D401,x
not Jump : .
Ida $35, x
sta $38, x
eor $39
sta $35, x
Ida ($33, x)
and #$07
sta $36
inc $36,x
data:
rts
Voice 1: Frequency control (lo byte)
Voice 1: Frequency control (hi byte)
load duration (delay)
store actual duration (delay)
change duration length
store duration (delay)
actual pattern index position
; $02:
.byte $00, $0F, $14, $22
.byte $24, $28, $1E, $FF
; $0A
.byte $01, $07, $0B, $0B
.byte $07, $01, $01, $0B
.byte $FF
/ $13:
.byte $05, $0A, $05, $09
.byte $05, $68, $05
;$1A Voice 2 frequency high byte
.byte $77, $FF, $28, $2F, $3C, $00 $02
.byte $FF
.byte $0B, $0B
.byte $B5, $FF
.byte $0A
.byte $00
; $28 Voice 2 control register
.byte $0C, $81, $41, $41, $41, $00
,- $2E
-byte $00 ; counter
.byte $81, $41, $40, $80, $81
/ $34
24
.byte
315
$35
.byte
$06
$36
.byte
$00
$37
.byte
$00
$38
.byte
$01
$39
.byte
$08
$3A
.byte
$04
$3B
.byte
$00
.byte
$06
.byte
$08
.byte
$08
.byte
$01
.byte
$08
$41
.byte
$10
$42
.byte
$A0
.byte
$06
.byte
s:i
.byte
s:i
.byte
$01
$47
duration (delay)
Voice 1 actual pattern index position
Voice 1 restore pattern index position
actual duration (delay)
for changing the duration length
delay for continue effect
pattern value (=index starting from $1A)
duration (delay)
Voice 2 actual pattern index position
Voice 2 restore pattern index position
actual duration (delay)
duration (delay)
Voice 3 actual pattern index position
Voice 3 restore pattern index position
Wave form pulsation amplitude (hi byte)/ Filter cut frequency: hi byte
Conclusion
Finally we had seen all the Tiny Sid 2 entries.
Remember that writing tiny music is a sort of programming art: you have to customize your play-
er according to the instruments to use, with the music effect you want to achieve and the melody
of your tune, arranging all the code in a manner that must be the smallest one. The work behind
this task could be very hard, and maybe with all the examples we showed during this and the other
issues you now have a precise idea of what this means.
25
Ripping Trivia Arcad
In this article I go to describe all the
steps involved in ripping the music of
The Trivia Arcade game.
The program comes with 2 disks:
• TRIVIAA0.D64
• TRIVIAA1.D64
that are full of files used by the pro-
gram.
But lets starts with the ripping ac-
tion...
Starting
When you start the program, a presentation screen appears an some files from the disk are
loaded during this process. Maybe the best things is to look at those files present in the disk, as
they could give us some information about this program.
_|M \ce<&> local ho st:/tmp - Shell n.7- Konsole
■ tx
Sessione Modifies Visualizza Segnalibri Impostazioni Aiuro
''data disk
*
1 "trivia arcade" prg
2 "strivia.ob u
prg
67 "treels.obj'
prg
3 "trname.obj'
prg
17 "triirius.obj
prg
41 "trivpic"
W%
17 "sprites. ob L
prg
7 "cata00.dat
P?g
7 "cata01.dat
prg
8 "cata02.dat
W%
7 "cata03.dat'
prg
7 "cata04.dat
prg
7 "cata05.dat
prg
7 "cata06.dat'
prg
8 "cata07.dat'
prg
8 "cata08.dat
prg
7 "cata09.dat
prg
7 "catb00.dat'
P^g
7 "catb01.dat'
prg
6 "catb02.dat
P^g
7 "catbD3.dat
prg
7 "catb04.dat
prg
6 "catb05.dat'
prg
7 "catb06.dat
P^g
7 "catb07.dat
prg
7 "catb08.dat'
Pig
7 "catb09.dat
prg
7 "catbOa.dat
Prg
7 "catc00.dat
P*g
8 "catc01.dat'
P^g
8 "catc02.dat
P*g
8 "catc03.dat
P^g
7 "catc04.dat
P^g
7 "catc05.dat 1
prg
7 "catc06.dat -
prg
7 "catc07.dat" prg
Type <return> to continue, or q <return> to quit |
V
^| ■iShell [ J|Shelln.2 [ -JShell n.3 [ A Shell n.4 [ A Shell n. 5 * Shell n.7 [ #;shell n.9
[ fl|Sheil n.e | 4 Shell n.8 [ J Shell n.10
■to
1
26
That's an easy task, from a console just type:
• c1541 TRIVIAA0.D64
• list
• extract
• quit
With the list command we see that there is a file called trimus.obj that can be a Trivia Music Ob-
ject file, or in other word the music data non embedded into the program, but a separate file to
load.
With extract we then have all the files extracted from the disk as PRG separated programs, so
we can better manage them.
•»-M SIDedit- SID data display
mm
1003
4 '"J
20
50
JHP
$5020
1006
4'"J
a?
55
JHP
$59A7
1009
00
ERK
100ft
01
00
OKA
($00, X)
100C
01
00
ORA
($00, X)
100E
00
BRK
100F
02
ILL
TILT
1010
00
BRK
1011
00
EEK
1012
00
EEK
1013
:-.?.
IS
LDX
#$1S
1015
A 9
00
LBA
#$00
1017
?■['
00
H'4
STA
$D400,X
101 A
■;_-.
DEX
101B
10
F.-.
BPL
$
1017
101D
4C
99
50
JHP
$
5099
1020
.-.0
00
LDY
#$00
1022
.-.[■
09
50
LDft
$5009
1025
CD
□ft
50
CHP
$500A
102S
FO
7D
EEQ
$10A7
102A
;.[■
□ft
50
STA
$500A
102D
C9
00
CHP
#$00
102F
DO
OC
EWE
$
103D
1031
20
90
5^
JSR
$
5790
1034
20
4.-.
5^
JSR
$
574A
1037
20
55
50
JSR
$
5099
103A
4 '"J
ft?
50
JHP
$
50A7
103D
C9
01
CHP
#$01
103F
DO
OC
EtIE
$
104D
1041
20
FF
5^
JSR
$
57FF
1044
20
A 9
5^
JSR
$
57A9
1047
20
99
50
JSR
$
5099
104 A
4 '"J
ft 7
50
JHP
$
50A7
104D
C9
02
CHP
#$02
104F
DO
OC
EtIE
$
105D
1051
20
CF
5S
JSR
$
5£CF
1054
20
5 3
sa
JSR
$
5£93
1057
20
55
50
JSR
$
5099
105ft
4
A 7
50
JHP
$
50A7
105D
C9
3
CHP
*
$03
Data display options-
r
Format:
f~ Hex dump
f Assembly
jj. AssembliJ with
illegal instructions
Starting from:
C Load address ($1 000)
C initAddress ($0000)
C playAddress ($00
C ther (range is $1 000-$1 FFF)
| $1000
Save data —
(* as binary
C as 64 KB memory image
C as displayed (ASCII text)
Save data to file
- Trim/pad data —
Trim or pad the SID data
to the new range below.
New range: | $1000 -
Trim/'pad data
$1FFF
p Modify data —
Modify the byte(s) starting
at the given address.
At address: $1000
change bytes to: |00 00
Modify bytes
OK
27
Now just run LaLa's SIDedit perl program to the trimus extracted files and go to data display:
• Load address of the files is $1000
• There are 3 jumps at the start of the code
• The code seems to be relocated at $5000 and not to the address the files comes with.
With this simple analysis we can hypothesize that the music code must be loaded to $5000 and
that it not uses a standard IRQ calling (+0=init, +3=play), as there are 3 pointers in the beginning
of music data. That also means that our task that with the presence of a obj file with music
seemed easy, is now more difficult.
Now run vice and set some breakpoints to 5000, 5003, 5006 before loading the program.
(C:$eeac) break 5000
BREAK: 1 C:$5000 enabled
(C:$eeac) break 5003
BREAK: 2 C:$5003 enabled
(C:$eeac) break 5006
BREAK: 3 C:$5006 enabled
We will see these sequence of break:
#1
'Break) .C:5000
4C 13 50
JMP$5013
#2(
Break) .C:5003
4C 20 50
JMP $5020
#3
'Break) .C:5006
4C A7 59
J MP $59 A7
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
#2(
Break) .C:5003
4C 20 50
JMP $5020
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
#3
'Break) .C:5006
4C A7 59
JMP $59 A7
5000 is called only one time, so it must be a music player initialization.
5003 is called one time, then 5006 is called 4 times before 5003 is called again.
But how is the sequence regarding to the irq? Just see what there is at $314:
(C:$5003)m314
>C:0314 3f2e66fe 08 2f4af3 91f2 0ef2 50 f2 33 f3 ?.f../J P.3.
So the irq call location is at $2e3f, and here we set a new breakpoint:
#4 (Break) .C:2e3f
78
SEI
#2 (Break) .C:5003
4C 20 50
JMP $5020
#3 (Break) .C:5006
4C A7 59
JMP $59 A7
#4 (Break) .C:2e3f
78
SEI
#3 (Break) .C:5006
4C A7 59
JMP $59 A7
#4 (Break) .C:2e3f
78
SEI
#3 (Break) .C:5006
4C A7 59
JMP $59 A7
#4 (Break) .C:2e3f
78
SEI
#3 (Break) .C:5006
4C A7 59
JMP $59 A7
...(restart)
Now we
see that 5006 is called ad each tick, and 500
5006.
and 5003 is called one time over 4 before the
28
So, I try this simply player, but no one note were played:
/ player for trivia
processor 6502
I NIT = $5000
PLAY1 = $5003
PLAY2 = $5006
.org 2049
.byte $0b,$08,$e8, $03, $9e, "20 61", 0, 0,
.org 2061
Ida
#0
jsr
INIT
sei
Ida
#<raster
sta
$0314
Ida
#>raster
sta
$0315
Ida
#50
sta
$d012
Ida
$d011
and
#$7f
sta
$d011
Ida
#$7f
sta
$dc0d
Ida
#$01
sta
$d01a
Ida
$dc0d
cli
aaa : jmp
aaa
.org $2000
raster:
inc
tick
Ida
tick
and
#$03
bne
skip
jsr
PLAY1
skip
jsr
PLAY 2
dec
$d019
jmp
$ea31
tick:
.byte $FF
.org $4FFE
. incbin
trimus . dat
/Set low bits of raster
/position
Set high bit of raster
position (0)
Set timer interrupt off
/Set raster interrupt on
/Acknowledge timer interrupt
play first only one time over 4
So it is the case to see some part of the music code to understand how it work:
4C 13 50 JMP $5013
5013
A2
18
LDX
#$18
5015
A9
00
LDA
#$00
5017
9D
00
D4
STA
$D400,X
501A
CA
DEX
501B
10
FA
BPL
$5017
501D
4C
99
50
JMP
$5099
5099
A9
01
LDA
#$01
509B
A0
00
LDY
#$00
509D
8D
10
50
STA
$5010
50A0
8D
11
50
STA
$5011
50 A3
8D
12
50
STA
$5012
50A6
60
RTS
It only cleans some memory area, no one passed value is taken, so this is an init that simple
clear memory, and it is not related to sub-tune initialization.
29
So, we try to look at 5003 first, as it is called less time.
5003
4C
20
50
JMP
$5020
5020
A0
00
LDY
#$00
5022
AD
09
50
LDA
$5009
5025
CD
0A
50
CMP
$500A
5028
i'O
7D
BEQ
$50A7
502A
8D
0A
50
STA
$500A
502D
C9
00
CMP
#$00
502F
DO
OC
BNE
$503D
Here we see that location 5009 is compared to location 500A and if different the value is stored.
Maybe location 5009 is for sub-tune selection and 500A is the value of the current being played
tune. So we can made a little test: run vice of the player we build, then enter the monitor and write:
• > 5009 2
• x
Now we heart something: the notes seems the right one, only the velocity is very low compared
to the expected one. Maybe the IRQ frequency of call is not 1 per frame (multispeed tune), or it is
done by CIA programming.
So now it is the case to see the IRQ routine more carefully:
2DE5
78
SEI
2DE6
A9
08
LDA
#$08
2DE8
8D
18
03
STA
$0318
2 DEB
A9
2F
LDA
#$2F
2DED
8D
19
03
STA
$0319
2DF0
A9
7F
LDA
#$7F
2DF2
8D
0D
DC
STA
$DC0D
2DF5
A9
3F
LDA
#$3F
2DF7
8D
14
03
STA
$0314
2DFA
A9
2E
LDA
#$2E
2DFC
8D
15
03
STA
$0315
2DFF
A9
01
LDA
#$01
2E01
8D
12
DO
STA
$D012
2E04
AD
11
DO
LDA
$D011
2E07
29
7F
AND
#$7F
2E09
8D
11
DO
STA
$D011
2E0C
A9
01
LDA
#$01
2E0E
8D
1A
DO
STA
$D01A
2E11
A9
DF
LDA
#$DF
2E13
8D
76
oc
STA
$0C76
2E16
20
00
50
JSR
$5000
2E19
58
CLI
2E1A
60
RTS
Vector: Not maskerable Interrupt (NMI)
Vector: Not maskerable Interrupt (NMI)
Interrupt control register CIA #1
Vector : Hardware Interrupt (IRQ)
Vector : Hardware Interrupt (IRQ)
Reading/Writing IRQ balance value
VIC control register
VIC control register
IRQ mask register
Normal space for BASIC programs
Normal space for BASIC programs
It uses raster interrupt, so we must analyze the irq routine even more:
2E3F
2E40
2E41
2E44
2E46
2E48
2E4B
2E4D
2E4F
2E52
2E54
2E56
2E59
2E5B
2E5D
2E60
2E62
2E64
2E67
2E6A
2E6C
2E6F
2E71
2E74
2E76
2E79
2E7B
7 8
D8
AD 12 DO
C9 01
DO 03
4C 6A 2E
C9 41
DO 03
4C 6F 2E
C9 6E
DO 03
4C 74 2E
C9 C3
DO 03
4C 79 2E
C9 D2
DO 03
4C 7E 2E
4C Al 2E
2E
A9 41
4C D2
A9 6E
4C D2 2E
A9 C3
4C D2 2E
A9 D2
4C D2 2E
SEI
CLD
LDA
CMP
BNE
JMP
CMP
BNE
JMP
CMP
BNE
JMP
CMP
BNE
JMP
CMP
BNE
JMP
JMP
LDA
JMP
LDA
JMP
LDA
JMP
LDA
JMP
$D012
#$01
$2E4B
$2E6A
#$41
$2E52
$2E6F
#$6E
$2E59
$2E74
#$C3
$2E60
$2E79
#$D2
$2E67
$2E7E
$2EA1
#$41
$2ED2
#$6E
$2ED2
#$C3
$2ED2
#$D2
$2ED2
Reading/Writing IRQ balance value
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
Normal space for BASIC programs
30
2ED0 A9 01 LDA #$01
2ED2 8D 12 DO STA SD012 Reading/Writing IRQ balance value
2ED5 AD 11 DO LDA SD011 VIC control register
2ED8 29 7F AND #$7F
2EDA 8D 11 DO STA $D011 VIC control register
2EDD AD 19 DO LDA SD019 Interrupt indicator register
2EE0 8D 19 DO STA SD019 Interrupt indicator register
I do not report all the irq routine, but the point we need is that this is a multispeed tune and the
vie raster position interested are:
$01,$41,$6E, $C3, $D2
As, however, we see before that there is 4 irq call for restarting the music cycle, so maybe one
of this raster line is not actually used. In this case we just need to run vice again and set a break-
point to 2E3F that is the irq. Looking at the raster line when there is the break, we see:
tune #1:001 065 110 196
tune #2: 001 065 110 196
tune #3: 001 065 110 196
tune #4: 001 065 110 196
tune #5: 001 065 110 196
So $D2 is not actually used.
Combining the above information, we could make our player as:
; player for trivia
processor 6502
I NIT = $5000
PLAY1 = $5003
PLAY2 = $5006
.org 2049
.byte $0b,$08,$e8, $03, $9e, "20 61", 0, 0,
.org 2061
/ a-number of tune to paly
; store subtune to play
tax
inx
stx
$5009
inx
stx
$500a
jsr
INIT
sei
Ida
#<raster
sta
$0314
Ida
#>raster
sta
$0315
LDA
#$7F
STA
$DC0D
LDA
#$01
STA
$D012
LDA
$D011
AND
#$7F
STA
$D011
LDA
#$01
STA
$D01A
cli
aaa : jmp
aaa
.org $2000
raster:
Ida
$d012
emp
#01
bne
nextl
jsr
PLAY1
Ida
#$41
sta
$d012
jmp
skip
nextl :
emp
#$41
; Interrupt control register CIA #1
; Reading/Writing IRQ balance value
; VIC control register
; VIC control register
; IRQ mask register
; play first only one time over 4
31
bne
next2
Ida
#$6E
sta
$d012
]mp
skip
next2 :
cmp
#$6E
bne
next3
Ida
#$C3
sta
$d012
]mp
skip
next3 :
Ida
#$01
sta
$d012
skip
]sr
PLAY 2
dec
$d019
]mp
$ea31
.org $4FFE
. incbin
trimus . dat
SIP fil.
Now we want to create the sid file of
the above sid tune that was in binary
format.
First of all we need to know the num-
ber of tunes that are present. Testing
with the value of 5009, we see that:
• #0 it plays a tune with some
strange sound at beginning and
after it play good sound, only if
this is not the first tune to be
played, otherwise it is with no
sound.
• #1 ..#4 they play good tune
• #5 a tune similar to previous
• >=#6 seems to play one of the
above tune in every case
That is why I put inx into the code
(skip tune 0).
So, now it simple: our player must be
compacted for saving space in memo-
ry, by move the code near 5000 where
there is the music data (e.g 4f95), and
the SYS basic call can be removed too.
After that, just run SIDedit and let him
create a standard sidplay header, then
fill the options like in the image (Real
C64 tune, init address, 4 subtunes).
Save the sid file and the task is fin-
ished.
File info ■
Filename: |Trivia_Arcade.sid W
File size: 4329 V
MD5 fingerprint: 951584209bec8baa94ebce5388c5c4ff W
Create HVSC
compliant filename
Display SID data
Show credits only
Environment: <~ PlaySID
version: i v1
P* RealC64
P" v2/v2NG
LLLL LLLLLLLLLLLL
dataOffset: 0x007C
loadAddress: | $0000
Load range: $4F95 - $5FFF
initAddress: $4F95
playAddress: $0000
songs: |5
startSong: |l
speed: 1 0x00000000
Edit speed bits
name: The Trivia Arcade
author: |Flandall Don Masteller
released: 1987 Hotline
flags: 1 0x0000
Edit the flags
startPage: |$00
pageLength: |$00
reserved: 1 0x0000
5
onclusion
Ripping is alway a way to make you enjoy a sid tune into your sidplayer, so
even at how this is done is a good way for new rippers to learn how to do that.
hope that looking
32
QSc^ocjfe 12 end
33