Welcome, Guest. Please login or register.


Author Topic: SID lejátszó (Read 249519 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #315 on: 2017.February.05. 21:08:13 »
Itt a konverzió eredménye, amit eddig hallgattam, az jó volt, kivéve az Armalyte1 és a Dragon Ninja, előbbinél sztem vagy kevés a 10KHz, vagy használnak valami spéci cuccot, másodiknál meg a lejátszás is trükkös volt, lehet ez kevert be. Ghosts'n'Goblins1 érdekes, brekeg :D

A felvételek készítésénél érdemes lehet még nagyobb Z80 órajelet (pl. 10 MHz) beállítani, 4 MHz-en előfordulhat, hogy lassul vagy akadozik az eredeti SID lejátszása a 6502 emuláció miatt. A CYBERNO2.M64-nél például hallható ilyen probléma.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #316 on: 2017.February.05. 21:16:27 »
A felvételek készítésénél érdemes lehet még nagyobb Z80 órajelet (pl. 10 MHz) beállítani, 4 MHz-en előfordulhat, hogy lassul vagy akadozik az eredeti SID lejátszása a 6502 emuláció miatt. A CYBERNO2.M64-nél például hallható ilyen probléma.
Igen, nekem is feltűnt, tegnap 6MHz-en ment az emu felvétel közben, ma nem mertem, hátha befolyásol valamit, most néztem meg a Paperboyt, az meg amiatt lassú, mert legalább 100Hz-es a lejátszási sebessége, foglalkozzunk az ilyenekkel, vagy könyveljük el veszteségként ? :)
Közben kijavítottam a hibát, ügyesen a decodeTablesBegin-t betettem a háromszögtábla kezdetére, gondolván úgyis csak töltés után van kicsomagolás, hát persze, hogy nem, mert folyamatosan csomagolunk :D , átvariáltam egy picit a dolgokat, sikerült besuvasztani 0500h alá, és már nincs brekegés :)

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #317 on: 2017.February.05. 21:25:11 »
A Paperboy pont 100Hz-es, betettem egy extra megszakítást az LPT-be, így már jó a sebessége.
Az jutott eszembe, hogy nagyobb munka lenne betenni a lejátszandó fájlba a sebességet, helyette be lehetne tenni a lejátszóba a sebességválasztást.
« Last Edit: 2017.February.05. 21:34:11 by geco »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #318 on: 2017.February.05. 21:46:52 »
Az jutott eszembe, hogy nagyobb munka lenne betenni a lejátszandó fájlba a sebességet, helyette be lehetne tenni a lejátszóba a sebességválasztást.

A file formátumba nem lenne nehéz beépíteni, még mindig van például néhány szabad byte a blokkok végén, de tartalmazhatná esetleg EXOS fejléc is. Bár a lejátszót bonyolítaná a különböző sebességek megfelelő támogatása, és előfordulhat például 60 Hz is, ami nem 50 többszöröse. Az is egy lehetséges megoldás, hogy a konvertáló program gyorsítsa/lassítsa a felvételt, de ez rontaná a zene időzítésének a pontosságát. A sebességet a sid_conv.cpp-ben mindenesetre figyelembe kellene venni (a 20000 konstans a SID ciklusok száma két megszakítás között), hogy a burkológörbe emuláció pontos legyen.
« Last Edit: 2017.February.05. 22:12:24 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #319 on: 2017.February.06. 08:44:48 »
A file formátumba nem lenne nehéz beépíteni, még mindig van például néhány szabad byte a blokkok végén, de tartalmazhatná esetleg EXOS fejléc is. Bár a lejátszót bonyolítaná a különböző sebességek megfelelő támogatása, és előfordulhat például 60 Hz is, ami nem 50 többszöröse. Az is egy lehetséges megoldás, hogy a konvertáló program gyorsítsa/lassítsa a felvételt, de ez rontaná a zene időzítésének a pontosságát. A sebességet a sid_conv.cpp-ben mindenesetre figyelembe kellene venni (a 20000 konstans a SID ciklusok száma két megszakítás között), hogy a burkológörbe emuláció pontos legyen.
Hm, EXOS fejléc lenne a legjobb, de a legkönnyebb meg a szabad bájt talán, de a leges legkönnyebb, a lejátszóba épített, manuális váltás :D
Melyik legyen?
Amúgy a 60Hz-et is meg lehetne valósítani a VINT bit mozgatásával az LPT-ben, csak ezzel már buknánk 256 byte-ot a betölthető fájl méretéből, az 50Hz többszöröseit meg tudom oldani a FILE szegmensen.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #320 on: 2017.February.06. 11:49:01 »
Hm, EXOS fejléc lenne a legjobb, de a legkönnyebb meg a szabad bájt talán, de a leges legkönnyebb, a lejátszóba épített, manuális váltás :D
Melyik legyen?

EXOS fejléc nélkül egyszerű:
[ Guests cannot view attachments ]

Ennél a verziónál opcionális paraméterként megadható a megszakítás frekvenciája 50 és 300 között:

./sid_conv [INTFREQ [BLKSIZE]] < INFILE > OUTFILE

Ezt a paramétert a burkológörbe emuláció figyelembe veszi, és az első blokkban 1FFDh pozíciónál (ha BLKSIZE = 8192) tárolja az INTFREQ - 50-et. Azaz az alapértelmezett 50 Hz-nél a kimenet azonos lesz a korábbi verzióval.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #321 on: 2017.February.06. 11:54:03 »
Az EXOS fejléc is könnyen megoldható a konvertáló programban, csak még definiálni kellene a formátum részleteit. Az az előnye mindenesetre lenne, hogy ROM-ba épített lejátszó EXOS modul betöltéssel is használható lehetne, és a frekvencia érték olvasásához nem kellene először kicsomagolni az első blokkot.

Így azonban a tömörítést is a sid_conv.cpp-be kellene építeni, ami a használhatóság szempontjából praktikus is, csak a program fordítása lenne bonyolultabb, mert kellene hozzá az ep128emu forráskódja és a libep128emu.a és libepcompress.a is.
« Last Edit: 2017.February.06. 11:59:38 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #322 on: 2017.February.06. 13:12:43 »
EXOS fejléc nélkül egyszerű:
Ennél a verziónál opcionális paraméterként megadható a megszakítás frekvenciája 50 és 300 között:

./sid_conv [INTFREQ [BLKSIZE]] < INFILE > OUTFILE

Ezt a paramétert a burkológörbe emuláció figyelembe veszi, és az első blokkban 1FFDh pozíciónál (ha BLKSIZE = 8192) tárolja az INTFREQ - 50-et. Azaz az alapértelmezett 50 Hz-nél a kimenet azonos lesz a korábbi verzióval.
Te a megadható frekvenciára gondoltál? Én a CIA regiszter letárolására, még mielőtt utánanéztem :D , de látom ez sem egyszerű, mert van 4 db időzíthető CIA regiszter. Lehet a sidplay-be kéne beletenni, hogy kiírja a lejátszó rutin sebességét?

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #323 on: 2017.February.06. 13:21:39 »
Az EXOS fejléc is könnyen megoldható a konvertáló programban, csak még definiálni kellene a formátum részleteit. Az az előnye mindenesetre lenne, hogy ROM-ba épített lejátszó EXOS modul betöltéssel is használható lehetne, és a frekvencia érték olvasásához nem kellene először kicsomagolni az első blokkot.

Így azonban a tömörítést is a sid_conv.cpp-be kellene építeni, ami a használhatóság szempontjából praktikus is, csak a program fordítása lenne bonyolultabb, mert kellene hozzá az ep128emu forráskódja és a libep128emu.a és libepcompress.a is.
Elméletileg ezek mind megvannak az EP128EMU SRC folderében, csak oda kéne tenni gondolom a sid_conv.cpp-t a könyvtárba, vagy az elérési utakat bedrótozni. Egy kérdés, linux alatt hogy lehet jó futásra készen shell scriptbe ágyazva futtatni a ./sid_conv <input> outputot, ha csak úgy simán bevágtam a fájlba a 120 parancsot, és futtattam (desktopomon volt minden) , akkor az első fájlt csinálta a amíg szegmentation errort dobott, végtelenségig az első fájllal dolgozva.
Az exos fejlécbe gondolom kéne egy header azonosító, a hossz ugye a megfelelő helyen, és nekünk a lejátszási sebesség, az 5. bájttól kezdve bárhová.
Az azonosító mondjuk lehet 4fh
a sebesség meg mehet egyből a hossz után az 5. bájtba.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #324 on: 2017.February.06. 15:48:04 »
Továbbfejlesztett konvertáló program, egyelőre még nem sokat teszteltem:
[ Guests cannot view attachments ]

Fordítás (a ../ep128emu2/ep128emu a lefordított emulátor forrás könyvtára):
g++ -Wall -O2 -march=native -I../ep128emu2/ep128emu -I../ep128emu2/ep128emu/src -L../ep128emu2/ep128emu sid_conv.cpp -o sid_conv -lepcompress -lep128emu -lm -s

Használat (már nem stdin és stdout a bemenet és kimenet, tehát elvileg lehetne Windowsos verzió is):
sid_conv INFILE OUTFILE [INTFREQ [BLKSIZE]]

EXOS fejléc:
- 00h, 4Fh (nem tudom, ezt már használja-e valami más is)
- tömörített adat mérete (2 byte)
- megszakítás frekvencia (2 byte)
- a zene hossza megszakításokban (3 byte)
- fenntartott, mindig 0 (7 byte)

A bemeneti file lehet tömörített formátumú is, és az első blokkban 3FFDh címen tartalmazhatja a megszakítás frekvenciát (- 50 Hz).

Elméletileg ezek mind megvannak az EP128EMU SRC folderében, csak oda kéne tenni gondolom a sid_conv.cpp-t a könyvtárba, vagy az elérési utakat bedrótozni. Egy kérdés, linux alatt hogy lehet jó futásra készen shell scriptbe ágyazva futtatni a ./sid_conv <input> outputot, ha csak úgy simán bevágtam a fájlba a 120 parancsot, és futtattam (desktopomon volt minden) , akkor az első fájlt csinálta a amíg szegmentation errort dobott, végtelenségig az első fájllal dolgozva.

Egy lehetséges megoldás (az új verziónál nem kell a < és >):
for i in *.sid ; do ./sid_conv < $i > `basename $i .sid`.m64 ; done

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: SID lejátszó
« Reply #325 on: 2017.February.06. 18:45:09 »
EXOS fejléc:
- 00h, 4Fh (nem tudom, ezt már használja-e valami más is)
Úgy nézem ez még szabad.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #326 on: 2017.February.06. 22:29:34 »
Én meg eddig erre jutottam, kiírja a lejátszási sebességet, és az eddigi 50, 60, 100Hz mellé bekerült a 150,200,250,300Hz-es lejátszási sebesség is:
reject >350Hz
use 300Hz for 275-360Hz
use 250Hz for 225-275Hz
use 200Hz for 175-225Hz
use 150Hz for 125-175Hz
use 100Hz for 75-125Hz
use 60Hz for 55-75Hz
use 50Hz for 35-55Hz
A modositasnak koszonhetoen a LUA-ban is at kellett irni egy sort (linuxom meghulyult, atallt angol billentyuzetre, es barmire allitom, marad angol :lol: )
Azon gondolkoztam, hogy a LUA-t is módosítom , hogy ennek megfelelően tárolja a sebességet a 3ffdh címen, milyen kiosztasban vannak az ertekek?
0 - 50Hz
1 - 100 Hz ... ?

Koszi szepen a scriptet, majd hasznalom is :)

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #327 on: 2017.February.06. 22:31:06 »
Ja, a Paperboy elso zeneje 150 Hz-es volt.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #328 on: 2017.February.06. 23:42:51 »
Azon gondolkoztam, hogy a LUA-t is módosítom , hogy ennek megfelelően tárolja a sebességet a 3ffdh címen, milyen kiosztasban vannak az ertekek?
0 - 50Hz
1 - 100 Hz ... ?

50-nel kevesebbet kell tárolni, azaz 0 = 50 Hz, 50 = 100 Hz, stb. Lehetne például ennél a résznél:
Code: Lua
  1. outBuf = {}
  2. for i = 0, 0x3FFF do            
  3.   outBuf[i] = 0x00
  4. end
  5. outBuf[0x3FFD] = 10    -- 60 Hz
  6.  
  7. function writeBlock(isLast)

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #329 on: 2017.February.07. 09:58:40 »
50-nel kevesebbet kell tárolni, azaz 0 = 50 Hz, 50 = 100 Hz, stb. Lehetne például ennél a résznél:
oké :) Már értem is a mi volt a -50 Hz :)