The script language knows the format of SID files. This means that you can import files directly from the HVSC (High Voltage Sid Collection) which uses this format. To do this you use the LoadSid function which returns a value that represents the sidfile.
.var music = LoadSid("C:/c64/HVSC_44-all-of-them/C64Music/Tel_Jeroen/Closing_In.sid")
From this you can extract data such as the init address, the play address, info about the music and the song data.
Table 12.2. SIDFileValue Properties
Attribute/Function | Description |
---|---|
header | The sid file type (PSID or RSID) |
version | The header version |
location | The location of the song |
init | The address of the init routine |
play | The address of the play routine |
songs | The number of songs |
startSong | The default song |
name | A string containing the name of the module |
author | A string containing the name of the author |
copyright | A string containing copyright information |
speed | The speed flags (Consult the Sid format for details) |
flags | flags (Consult the Sid format for details) |
startpage | Startpage (Consult the Sid format for details) |
pagelength | Pagelength (Consult the Sid format for details) |
size | The data size in bytes |
getData(n) | Returns the n'th byte of the module. Use this function together with the size variable to store the modules binary data into the memory. |
Here is an example of use:
//--------------------------------------------------------- //--------------------------------------------------------- // SID Player //--------------------------------------------------------- //--------------------------------------------------------- .var music = LoadSid("Nightshift.sid") BasicUpstart2(start) start: lda #$00 sta $d020 sta $d021 ldx #0 ldy #0 lda #music.startSong-1 jsr music.init sei lda #<irq1 sta $0314 lda #>irq1 sta $0315 asl $d019 lda #$7b sta $dc0d lda #$81 sta $d01a lda #$1b sta $d011 lda #$80 sta $d012 cli jmp * //--------------------------------------------------------- irq1: asl $d019 inc $d020 jsr music.play dec $d020 pla tay pla tax pla rti //--------------------------------------------------------- *=music.location "Music" .fill music.size, music.getData(i) //---------------------------------------------------------- // Print the music info while assembling .print "" .print "SID Data" .print "--------" .print "location=$"+toHexString(music.location) .print "init=$"+toHexString(music.init) .print "play=$"+toHexString(music.play) .print "songs="+music.songs .print "startSong="+music.startSong .print "size=$"+toHexString(music.size) .print "name="+music.name .print "author="+music.author .print "copyright="+music.copyright .print "" .print "Additional tech data" .print "--------------------" .print "header="+music.header .print "header version="+music.version .print "flags="+toBinaryString(music.flags) .print "speed="+toBinaryString(music.speed) .print "startpage="+music.startpage .print "pagelength="+music.pagelength
Assembling the above code will create a musicplayer for the given sidfile and print the information in the music file while assembling:
SID Data -------- location=$1000 init=$1d70 play=$1003 songs=1.0 startSong=1.0 size=$d78 name=Nightshift author=Ari Yliaho (Agemixer) copyright=2001 Scallop Additional tech data -------------------- header=PSID header version=2.0 flags=100100 speed=0 startpage=0.0
TIP: If you use the –libdir option to point to your HVSC main directory, you don’t have to write long filenames. For example:
.var music = LoadSid("C:/c64/HVSC_44-all-of-them/C64Music/Tel_Jeroen/Closing_In.sid")
will be
.var music = LoadSid("Tel_Jeroen/Closing_In.sid")