SIDBASIC

SIDBASIC legfrissebb verziója, ami egy szoftveres SID lejátszó, konvertált SID fájlok lejázszásáre Enterprise 128 gépen, hardveres bővítés nem szükséges.
A szoftber EXOS kompatibilis, ha a gépe rendelkezik fájlkezelő eszközzel ( lemezvezérlő, SD kártya), akkor az M64 fájlok egy fájlkezelőből választhatók ki, a magnós konfiggal rendelkezők tölthetik a magnóról a kiválasztott M64 fájlt.
A lejátszást 128KB-os gépen a lejátszás közbeni 8Kb-os blokkonként kicsomagolás teszi lehetővé.
Megkötések: max betölthető M64 fájlméret 24320 bájt (5f00h), nincs SYNC, felül- , és aluláteresztő szűrő emuláció, SID digi effektek nem játszhatók le
Kombinált hullámformák nem muködnek megfeleloen, ilyenkor egyszeruen zaj > furész > háromszög > négyszög prioritással történik a konverzió, a valódi hardver ettol eltér.

Vezérlés:
1 - zene lejátszás Dave chipen
2 - zene lejátszás külső 8bites DAC kártyán ha van a géphez csatlakoztatva
3 - raster bar be (csak 50Hz-es sebességű zenéknél működik)
4 - raster bar ki
Esc - fájl választás

Néhány szó az M64 fájlokról:
A formátum leírása: 16384 byte-os blokkokat használ, minden blokk a 25 írható SID regiszter 655 értékét tárolja, az elso 655 byte a 0. regiszter, a következo 655 byte az 1. regiszter, és így tovább. Az utolsó 9 byte általában 0, az alábbiak kivételével:
- az utolsó blokkban 3FFE-3FFF pozíciónál a ténylegesen használt megszakítások száma található, ami kevesebb lehet 655-nél
- az elso blokkban 3FFD-nél a megszakítás frekvencia - 50 Hz található (így 50-305 Hz tartomány lehetséges), 3FFB-3FFC-nél pedig a megszakítások közötti SID ciklusok pontos száma CIA idozítésnél (CIA számlálóba írt érték + 1). Video megszakításnál ez 0, és az alapértelmezés 312 * 63 (PAL 50 Hz) vagy 262 * 65 (NTSC 60 Hz). A sid.com csak a kerekített Hz értéket veszi figyelembe
A 3-as csatorna regiszter (PWM felso 4 bit) eredetileg nem használt 7. bitjének speciális funkciója van: azt jelzi, ha a burkológörbét újra kell indítani a GATE bit egy megszakítás ciklus alatti 1->0->1 átmenete miatt.

Köszönet Varga Istvánnak (IstvanV) azz ötletekért, és a következő routinokért, és alkalmazásokét, nélküle a SIDBASIC nem jöhetett volna létre:
Rutinok:
8 KB blokkos kicsomagoló rutin
megszakításban Digi lejátszó rutin
ideális SID hangminták generálása
Alkalmazások:
epcompress  - Enterprise csomagoló program
epimgconv   - Enterprise képkonvertáló program
sid_dump    - "nyers" SID regiszter adat kinyerő program SID fájlokból
sid_conv    - "nyers" SID regiszter adat konvertáló program M64 formátumba

Használat:

sid_dump.exe INFILE OUTFILE [LENGTH1 [LENGTH2...]]
sid_dump.exe INFILE OUTFILE [SONGLENGTHS FILENAME]

sid_conv INFILE OUTFILE [INTFREQ [BLKSIZE [NOADSRBUG]]]
INTFREQ (default: -1): interrupt frequency, if the value is <=0 then it is read from input file, otherwise the value (Hz) is used given in command line. In case of -2 doubles the frequency of envelope emulation, which increase the size of output file with about 40-70%.
BLKSIZE (power of 2 in range 256-16384, default: 8192): size of a block of compression, size od  dictionary is double of block size (-blocksize BLKSIZE -maxoffs BLKSIZE*2). 0 or negative value also sets the default 8K.
NOADSRBUG (0 or 1 ,default: 0): if this value is not 0 then it resets the counter of SID envelope emulation 15 bit timer at rising edge og GATE bit. Real Hardware works differently, so in this case the conversion can be vorse also.
 
A sid_dump PSID file-t futtat minimális emulált 6502-es környezetben, és a kimenete egyszeru "nyers" formátum, ami a SID regiszterekbe írt értékeket tárolja 50 Hz-es (vagy egyéb frekvenciájú) megszakításonként.
Az ilyen file megfelelo tömörítés után lejátszható a sid.com (lent) használatával, ha van SID kártya (azaz jelenleg csak emulátoron :)). 
A PSID -> RAW konvertálás egyébként a SIDPLAY programmal és a sidrecn.lua scripttel is lehetséges, ha a sid_dump valamiért nem muködik.

SID zenék például innen tölthetok le, példa konvertálásra (az epcompress csak a sid.com-os lejátszáshoz kell, a sid_conv.exe a tömörítetlen formátumot is elfogadja):

..\sidconv\sid_dump.exe MUSICIANS/T/Tel_Jeroen/Cybernoid_II.sid cybnoid2.raw DOCUMENTS/Songlengths.txt MUSICIANS/T/Tel_Jeroen/Cybernoid_II.sid

Name:           Cybernoid II
Author:         Jeroen Tel
Released:       1988 Hewson
Video standard: PAL
SID model:      MOS6581
IRQ frequency:  50.12 Hz
Done converting track 1: 17343 frames
IRQ frequency:  50.12 Hz
Done converting track 2: 451 frames

(a következő lépés a SID.COM-mal való lejátszáshoz szükséges)
epcompress -raw -m0 -9 -blocksize 16384 -maxoffs 32768 cybnoid2.raw cybnoid2.raw 

Compressing data
  100%

* sid.com (3.37 kB. 106x13 - viewed 2 times.)
* sid.s (10.09 kB - downloaded 1 times.)
* decompress_m0_16K.s (10.27 kB - downloaded 1 times.)
* file.s (31.21 kB - downloaded 1 times.)
* mouse.s (1.47 kB - downloaded 1 times.)

A következo lépés a SIDBASIC.COM által támogatott és SID kártya nélkül is lejátszható formátum létrehozása, ami a sid_conv programmal lehetséges. Ennek a formátumnak a leírása:

- az elején 16 byte-os EXOS fejléc található: 00h, 4Fh, tömörített adat méret L, tömörített adat méret H, IRQ frekvencia L, IRQ frekvencia H, megszakítások száma (24 bit, az alsó 8 bit az elso), 7 nem használt (mindig 0) byte
- az EXOS fejlécet követi a tömörített adat epcompress -raw -m2 -blocksize 8192 -maxoffs 16384 formátumban
- minden 8K-s blokk legfeljebb 682 megszakítás hosszúságú felvételt tartalmaz, csatornánként 4 konvertált "regiszterrel". Az adat szervezése a blokkon belül hasonló a RAW formátumhoz. Az utolsó blokk végén (1FFE-1FFF) 682 - a blokkban ténylegesen használt megszakítások száma található
- a 0. és 1. csatorna regiszter a 16 bites SID frekvencia, zaj hullámformánál 4 bittel jobbra léptetve
- a 2. regiszter a gyurumodulációt (7. bit), hullámformát (5-6. bit, 00=háromszög, 01=furész, 10=négyszög, 11=zaj), és az aktuális hangerot (0-4. bit) tartalmazza. 0 hangero esetén a hullámforma mindig négyszög
- a 3. regiszter a négyszögjel kitöltési tényezoje (felso 8 bit), csak nem 0 hangereju négyszögjelnél, egyébként 0

Példa konvertálásra:
..\sidconv\sid_conv.exe cybnoid2.raw cybnoid2.m64
Converting file...
  100%
Compressing data
  100%