The SOASC= project was an automated recording technique invented by me (Stone Oakvalley) in order to mass record music from the legendary Commodore 64 and its SID chips (6581 and 8580).
Realizing this project needed unique hardware solutions and software to back it all up. I spent approx 180 hours on research and how to figure out a plan that would help me automatically record this massive amount of Commodore 64 music. Here is a more or less complete detailed description of all the problems and solutions I encountered.
Note: All references to software and hardware is listed on the LINKS page.
01 - Introduction
First download the whole HVSC SID Collection and unpack :-)
02 - PREPARING MADNESS
I then programmed a tool in PureBasic to interpret and extract out the Path+Filename i.e. "/20CC/Conquestador.sid" and then all the subtunes length from the songslength string: "3:28 3:42 4:39 0:01(G) 0:01(G) 0:09(G)" from the file in the HVSC collection "C64Music/DOCUMENTS/Songlengths.txt"
I then made my own database .txt with and looped output like:
etcinto a large file containing all song information from the "Songlengths.txt".
03 - MAPPING THE SID'S
Then I binary read each .SID file and checked the amount of sub tunes within it. I hacked the SUB-TUNE bit in the SID file to make the SID file start on this tune when played, and then I made a duplicate file of it. (This is because the PSID64 SID Player could not be used to skip tunes, and my system did not have any support to send any additional keys either to the C64. More on this later).
Then I extracted out the required information I needed for the SIDREC recorder and when constructing the MP3 tags.
I created a own unique .INI file for each SID sub-tune file like this, based on the information from the SID file itself:
Play Video: Mapping the SID's
Filename: "0000101.INI" etc etc (More about this filename later)
PATH = 20CC/
FILE = Conquestador.sid
TUNE = 01%3:28 (This means Tune 01 is 3:28 long)
MP3-FILE = Conquestador_T01.sid.mp3 (The new filename to indicate Track 01)
MP3-TITL = Conquestador
MP3-AUTH = Edwin van Santen & Falco Paul
MP3-YEAR = 1991
MP3-COPY = German Design Group
With the above procedure the amount of files of course increased to 46668 .SID files and 46668 .INI files.
04 - FILENAMES
Then all the files was renamed (both .SID and .INI) into my own charset for usage towards the PAR: Relay C64 keyboard interface. The num of chars used in the filename created in step 3 above needed to be a little bit compressed, due to the fact that there were 50000 unique filenames and I also needed bits in the PAR: ports to send SHIFT and other special C64 keys, including reset and SCROLLLOCK detection for the 64HDD server.
Anyway, a filename like "3207101.INI" was renamed to "32O7LOL.INI"
Where "1" was replaced by "L" and "0" (zero) was replaced by the letter "O"
This renaming caused the recording process to begin not at the top of the alphabet but really in the "VARIOUS/N-R/" directory, which contains approx 23000 tunes. And most of the "VARIOUS" tunes is not really what we all remembered from the good 'ol C64 gaming days! Gimme Rob Hubbard!
05 - BILL GATES AND HIS "oughta's"
After the renaming of approx 95000 files was done, I had to convert each .SID file into Commodore 64's .PRG format by using the excellent PSID64.exe dos software which makes an C64 executable out of a .SID file which can be executed on the real C64 containing player code + textual information from the HVSC tags.
A couple of files was detected as not playing, or had problems being converted during this conversion process. These files will be recorded after the main project is finished using alternative recording methods.
Anyway, the amount of files in this project went to a whopping 142134! (.SID, .INI and now .PRG files)
Yeah, working with these amount of files was beginning to slow down Windows XP even. They were later sorted out into 9 different directories just because DOS and WINME on the ServerPC and RecordingPC could not handle this amount of files in one dir. Stupid Bill Gates and his "oughta be enough for everybody" shit!!!
Now, I had to start on the hardware part which was a really painstaking job.
06 - CABLES AND COMMUNICATION:
Now all the .PRG files was copied over to the ServerPC HD, and by running the 64HDD software which emulates a 1541 Disk Drive for C64 in DOS, the C64 could now access the files and load+run+play them. A own cable was made (XE1541 see pictures) to support the 64HDD and was connected to the Serial Port of the C64 and the PAR: port on the PC.
Getting 64HHD up and running was not the most easiest part (also due to PAR: bios setups), and the diodes used in the XE1541 cable was hard to come by. I had to make 2 of everything, and that added some delays to the project.
After 1 week of constant testing and configurating it finally worked like a charm!
Also, a Audio/Video 5-pin cable had to be made and was connected to the AUDIO/VIDEO connector at the C64.
07 - KEYBOARD INTERFACE - MAGIC FINGERS TYPIN' ON THE C64'S!
To be able to load automatically on the C64 by real typing chars, an easy and crude solution had to be constructed. The result was the homebuilt Parallel Relay Card (see picture) connected to the C64 keyboard connector using a IDE 44pin cable (which fits 100% by the way)
The interface consists of 8 relays which are each connected to the PAR: port. By programming again in PureBasic I could switch these relays on and off by command, and thus simulating keys to be pressed on the real C64, letting me load all the different filenames including the keys to LOAD & RUN the .PRG file as well on the C64.
Since I had limited with PAR: bits to play with, it was a little bit tricky to optimize what chars I needed to get everything run and record automatically in an long lasting loop for about 13 weeks!
The PAR: Relay C64 Keyboard Interface was designed as follows, entry after "=" is the actual C64 key:
PAR 01-BIT01 = 2 PAR 01-BIT02 = 3 PAR 01-BIT03 = 4 PAR 01-BIT04 = 5 PAR 01-BIT05 = 6 PAR 01-BIT06 = 7 PAR 01-BIT07 = 8 PAR 01-BIT08 = 9
PAR 02-BIT01 = L - for loading PAR 02-BIT02 = O - for loading PAR 02-BIT03 = , - for specify the C64 DEVICE num PAR 02-BIT04 = : - : because ":" + SHIFT + RUNSTOP = LOAD & RUN in one go at the C64 PAR 02-BIT05 = SHIFT PAR 02-BIT06 = RUN STOP PAR 02-BIT07 = HARD RESET C64 - Userport pin 1 & 3...cold reset PAR 02-BIT08 = SCROLL LOCK - Off when not loading tune, ON when loading on 64HHD Server
So, by resetting C64, loading, waiting and run a SID tune .PRG file, record, process MP3 and loop it.
08 - THE FIRST SETUP
During the first 180 hours of research of the project, here is pictures of the first setup with just 1 pcs 8580 Commodore 64
This setup was used for several weeks while designing the software and constructing the hardware. It was really placed in a bad position and was really annoying to have around... well..that's life.
09 - GETTING THE BOXES
Getting hold of Commodore 64's was not so easy as you would have thought. I searched some Norwegian net auctions pages, and ended up with a couple of defect C64 breadboxes. My own two C64's had a busted 8580 SID chip and something wrong with the video or char chip on my own old breadbox as you can see on the picture:).
Anyway, during a 2 months time in search for cheap C64's I ended up having 5 pcs 6581 C64's and 4 8580 C64's.. Well, they will make a great addition to my nostalgic showcase cabinet along with the Amiga 500 and Atari 2600 from the 80's together with some old magazines, game box casing and datasettes, disk drives and joysticks..hehe!
And oh.. the C64 on the picture here was fixed by replacing a defect RAM chip.
10 - Putting it to work in a loop
A own tool called SIDREC (for Windows) was programmed in PureBasic which controls everything and keep track of the recording process. The function of the program is to RESET, LOAD, RECORD, CONVERT, MAKE MP3 (with tags from HVSC .INI files) and go in a loop for about 13+ weeks, 24 hour a day!
It also detects when 64HDD has finished loading the .PRG file into the C64, at which point the SIDREC start to record the tune. A ServerPC and a RecordPC was setup (with no cabinets for easier access) and put on a huge table with 6 CRT's and a shitload of power connectors and my god the wires!