Enterprise Forever

:HUN => Emulátorok => Topic started by: OLI76 on 2010.January.25. 14:58:50

Title: Java-s emulátor
Post by: OLI76 on 2010.January.25. 14:58:50
Üdv mindenkinek!

Én most azzal a gondolattal játszom, hogy egy TVC emulátort kellene írni. Alig van 1-2, azok is problémásak.
Próba ként el is kezdtem írni egy Z80 emulátort, bár lehet hogy sohasem fog elkészülni. A TVC ROM-ját töltöttem be és azt próbálom futtatni benne. Ahogy jönnek az utasítások sorban úgy írom meg őket.
Legalábbis ez a terv, ma találkoztam a CPI utasítással, és ott már nem egyértelmű, hogy a jelzőbitek hogy módosulnak.

Ja, JAVA nyelven írnám. Előnye, hogy ablakban, teljes képernyőn ,vagy akár weboldalon is futna. Ha lesz elég dokumentáció és időm is lesz, akkor a Z80 részét meg tudom csinálni, és valami alap szinten a hardvert is -remélem.
Gondolom ismeritek ezt az oldalt:
http://www.zxspectrum.net/
Ehhez hasonlót készítenék szívem szerint. Tehát letöltés és telepítés (és hosszú loading) nélkül lehetne TVC programokat futtatni.

Régebben már próbálkoztam C64 emulátor írásával, az utasításokat megcsináltam, de nem volt elég infóm és szerintem 1-2 utasítás hibásan állította a jelzőbiteket, mert végtelen ciklusba futott a gép mikor a C64 ROM-ját próbáltam futtatni.
Ennek már vagy 4-5 éve. Remélem most több szerencsém lesz, de ha valaki esetleg segítene az nem jönne rosszul.
Amúgy ez alapján dolgozom:
http://www.ep128.hu/Sp_Konyv/Z80_sorozat_8.htm
Meg van még pár leírásom, meg egy félig elkészült Z80 emulátor forráskódja.
A gond ott kezdődik, amikor a leírások teljesen mást írnak ugyanarra az eljárásra /kódra. Sajna nincs valódi Z80-as gépem, hogy teszteljem a dolgokat, esetleg egy jobb emulátor segíthet majd ebben.
Title: Re: Java-s emulátor
Post by: IstvanV on 2010.January.25. 16:14:46
Próba ként el is kezdtem írni egy Z80 emulátort, bár lehet hogy sohasem fog elkészülni.

Szerintem biztosan van már JAVA nyelven is szabadon felhasználható Z80 emulátor kód, amit talán be lehetne építeni.

Quote
Legalábbis ez a terv, ma találkoztam a CPI utasítással, és ott már nem egyértelmű, hogy a jelzőbitek hogy módosulnak.

Ez a CPI utasítás megvalósítása az ep128emu-ban (igaz, C++ nyelven, de talán így is használható információ):

Code: C++
  1.   void Z80::CPI()
  2.   {
  3.     Z80_FLAGS_REG = Z80_FLAGS_REG | Z80_SUBTRACT_FLAG;
  4.     Z80_BYTE  tmp = readMemory(R.HL.W);
  5.     R.HL.W++;
  6.     R.BC.W--;
  7.     Z80_BYTE  tmp2 = R.AF.B.h - tmp;
  8.     Z80_FLAGS_REG = (Z80_FLAGS_REG & (Z80_SUBTRACT_FLAG | Z80_CARRY_FLAG))
  9.                     | (R.BC.W == 0 ? 0x00 : Z80_PARITY_FLAG)
  10.                     | t.zeroSignTable[tmp2];
  11.     SET_HALFCARRY(tmp, tmp2);
  12.     tmp = tmp2 - ((Z80_FLAGS_REG & Z80_HALFCARRY_FLAG)
  13.                   >> Z80_HALFCARRY_FLAG_BIT);
  14.     Z80_FLAGS_REG =
  15.         Z80_FLAGS_REG | (tmp & Z80_UNUSED_FLAG2) | ((tmp & 0x02) << 4);
  16.   }

Egyébként érdemes megnézni ezt (http://z80.info/) és ezt (http://z80.info/zip/z80-documented.pdf), illetve a Z80 dokumentációját itt (http://z80.info/zip/z80cpu_um.pdf).

UI.: célszerű lehet először Spectrum 48 emulátor írásával próbálkozni, mivel a hardvere nagyon egyszerű, és sok program van rá, többek között például olyanok is, amelyek Z80 emulációt tesztelnek.
Title: Re: Java-s emulátor
Post by: Mayer Gábor on 2010.January.25. 17:19:02
Mit jelent az hogy .W ?

R.HL.W ?
Title: Re: Java-s emulátor
Post by: IstvanV on 2010.January.25. 18:24:38
Mit jelent az hogy .W ?

R.HL.W ?

"Word", azaz a teljes 16 bites regiszter (a CPI utasítás működése alapján másnak nem is nagyon lenne értelme :)). Az R.HL.B.h lenne a H regiszter, az R.HL.B.l pedig az L.
Tehát pontosan ez történik:
  - az N jelzőbit beállítása (mindig 1)
  - byte olvasása a HL címről
  - HL növelése, BC csökkentése
  - az S, Z, és H jelzőbitek beállítása az A - (HL) műveletnek megfelelően, a Carry változatlan marad
  - a P/V jelzőbit 0 lesz, ha a BC a csökkentés után 0,  egyébként 1
  - a nem dokumentált 3. jelzőbit az A - (HL) - H 3. bitje (itt a 'H' a H jelzőbit új értéke)
  - a nem dokumentált 5. jelzőbit pedig az A - (HL) - H 1. bitje lesz
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.January.25. 23:42:27
Köszi az infót!
Este még találtam egy Java nyelven írt Z80 proci emulátor forráskódot.
Sajnos nem tökéletes, de a semminél több.
Megpróbálok életet lehelni bele, és akkor ennyivel is előrébb leszek ha sikerül.
Pont a CPI utasításban találtam hibát, ugyanis a HL és BC értékét is növelte a programozó, pedig BC-t csökkenteni kell. Jó hogy az ilyen egyszerű dolgokat kiszúrom, de ha ilyeneket benne hagyott akkor ki tudja, hogy miket hibázott még.

Utána már "csak" a hibát kell majd javítani benne, meg valami egyszerű hardvert emulálni mellé. Persze ez sem kevés.
Pár napig el leszek, de ha segítség kell, akkor majd hozzátok fordulok.

Ha már működne a proci emuláció, akkor utána már elég sok gépet lehetne emulálni vele, gondolok itt főleg a magyar gépekre. De ha a Spectrum hardvere tényleg egyszerű, akkor érdemes azt összedobni és azon tesztelni.

Remélem 1-2 hét és lesz is már mit tesztelni.
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.January.30. 13:04:39
Az utasítások kb fele már működik.
A TVC ROM-ot indítottam ahogy a nagy könyvben meg van írva. TVC-s memóriakezelés működik.

A ROM indul, nullázza a portokat, a video regisztereket. Utána teszteli a RAM-ot. Ez is lefut többször is, ugye több lapot is ellenőriz.

Kb. itt járok most. Még a program elágazik a szerint, hogy bekapcsoltuk a gépet, vagy meleg reset volt.
Még néhány utasítást meg kell írni, de ezen a ponton már nehéz követni, hogy jól működik e az emulátor vagy sem, mindenesetre gyanús, hogy egy apróbb hiba már becsúszott. A "meleg reset" ágon mintha a PC regiszter értéke el lenne csúszva egyel ahhoz képest ahogy a TVC ROM könyvben le van írva (vagy eleve rossz helyen jár a program).

Dolgozom az ügyön ahogy van időm.
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.07. 19:52:15
Hali!
A következő linken lehet megtekinteni a programot ami készül:

Weboldalon futó TVC emulátor (készülget) (http://oli576.uw.hu/tvc.php)

Pár napig nem foglalkoztam vele, mert hibásan működött és nem jöttem rá hogy miért.
Ma végeztem kis nyomkövetést és sikerült kijavítani a hibát. Lehet még most is hiba benne, de eddig úgy néz ki jól működik.

Sok látnivaló még nincs. Ha a program elindul, akkor látjuk a soron következő utasítást, a regiszterek tartalmát. A SPACE lenyomására végrehajt egy utasítást az emulátor. Az F9 lenyomására elkezd folyamatosan futni a program (TVC ROM). Addig fut, míg ismeretlen utasítást nem talál, vagy le nem állítjuk. (F12-vel újraindítjuk a gépet.)

Egyelőre csak a memória teszt fut le (szerintem jól). Ezután a bővirő kártyákat ellenőrzi majd a gép. Ez már nem tud lefutni, mert vannak utasítások amiket még nem ismer az emulátor. Ezeket sorban megírom majd és lassan haladunk tovább. Mivel a "TVC ROM" könyvben egész jól le van írva, hogy mit csinál a gép bekapcsolás után, így nagyjából tudom ellenőrizni, hogy jól dolgozik e. A végén meg remélem sikerül odáig eljutni, hogy "beröffenjen" a BASIC, megjelenjen az üdvözlő képernyő (és ne csak a "debug" ablakot kelljen bámulni).
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.12. 23:28:55
Nehéz szülés, de haladok.

Jelenleg az emulátor ott tart, hogy a gép indításakor lefutnak a tesztek és beállítások. Ezek végén a gép engedélyezi a megszakításokat és átadja a vezértlést a BASIC-nek.

Itt a gép még beállítja majd a BASIC munkaterületet, változókat, és a végén megjeleníti az üdvözlő képernyőt. Ez várhatóan már kissebb szakasz, így ha nem csúszik be nagyobb hiba akkor vagy egy héten belül elkészülhet. Utána már érdekesebb lesz a munka.
Title: Re: Java-s emulátor
Post by: Attus on 2010.February.13. 09:20:56
Hajrá!
 :)
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.17. 00:11:22
Nem tudom mennyire van érdeklődés, de azért közlöm, hogy mától ad életjelet az emulátor.

Van egy egyszerű képernyő emuláció, így indítás után látható ahogy teszteli a video memóriát a gép. Ezután kicsit magunkra hagy, majd a végén megjeleníti az üdvözlő képernyőt.

Pontosabban csak jelenítené, mert még hibás a kép. De egyértelműen látszik, hogy a gép kiírja a "videoton" feliratokat, csak kicsit hibásan még. Ma órákig nyomoztam, mert először csak fekete kockákat rajzolt a karakterek helyére. Végül kiderült, hogy az egyik bitléptető utasítás elfelejtette a C (átvitel) bitet beleforgatni a regiszterbe, emiatt az előállított színkód minden esetben nulla volt.
Remélem sikerül pár napon belül a hibás kiírás okát is megtalálni és kijavítani.

A futást felgyorsítottam, a debug ablakokat eltüntettem. F1-el elő hívható egy menü amiben visszahozhatóak ezek az ablakok, meg egyéb beállításokat is el lehet majd végezni.

Szóval haladok.
Title: Re: Java-s emulátor
Post by: geco on 2010.February.17. 08:14:58
Gratula :)
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.17. 23:40:23
Hali!  :ds_icon_cheesygrin: :ds_icon_cheesygrin:

Ma megtörtént a csoda: tökéletes minőségben megjelenik a gép indulásakor az üdvözlő képernyő. Tudjátok, a "videoton" feliratok és középen a villogó "TV Computer" felirat. A színek is korrektek. A képernyő emuláció nem túl bonyolult, de szerintem a legtöbb programhoz elég is lesz.

Na itt billentyű leütésre vár a gép, de ez a rész még nincs megírva. De eddig legalább jól működik.
Érdekesség, hogy ha ezen a képernyőn nyomunk egy F11-et (meleg reset), akkor fekete képernyőn megjelenik az OK felirat és a villogó kurzor (!!). Igaz, a kurzor szerintem eredetileg nem egy inverz C betű volt, szóval valami apró hiba még van a gépezetben.

Ha valaki kíváncsi rá, újra a link: TVC emulátor : oli576.uw.hu/tvc.php (http://oli576.uw.hu/tvc.php)

Sajnos nem tudom márciustól mennyi időm lesz erre, de remélem sikerül befejezni az emulátort legalább arra a szintre, hogy a BASIC programokat tudja futtatni.
Title: Re: Java-s emulátor
Post by: szipucsu on 2010.February.18. 13:35:06
Nem rossz!
Kicsit szétnézegettem a TVC oldalán (http://tvc.homeserver.hu/), van már Java-s TVC emulátor (onnan letölthetõ), de nincs befejezve, csak a BASIC utasításokat ismeri állítólag és a készítõje már nem foglalkozik vele. Letölthetõ a forráskódja is további fejlesztés céljából. (Az emulátorok menüpont alatt van a Java TVC.)
Lehet, hogy hasznát tudod venni?
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.18. 21:32:39
Köszi a tippet. Igazából már letöltöttem.
Először arra gondoltam, hogy csak azt írom át, fejlesztem tovább. De aztán egyszerűbbnek láttam újra írni az egészet a saját stílusomban. Belenéztem amúgy a kódjába, és egy-két dolgot át is vettem. Szóval hasznát vettem már, és talán fogom is még. De azt bővíteni, átalakítani nagy munka lenne, egyszerűbb újraírni.
Abba az emulátorba amúgysem lehet betölteni játékot, így nemis nagyon lehet tesztelni "gyári" programokkal (azok egy részét is gondolom futtatja).

Lehet hogy ez az emulátor sincs nagyon messze attól, hogy a BASIC programokat (parancsokat) hiba nélkül végrehajtsa. Kb. 70 darab Z80 utasítás van még ami nincs megírva (kb. 650 van kész). Ezek egy része könnyű, csak 1-2 trükkös van még (pl. DAA). (utána jöhetnek még a nem dokumentált utasítások, de a BASIC ezeket úgysem használja, szerintem a legtöbb játék sem.)

A TVC oldaláról leszedtem azt a pár cartridge ROM-ot, ezeket már most könnyen be tudom tölteni az emulátorba. Ha minden utasítás kész lesz akkor ezeket már lehet is majd futtatni rajta (legalábbis tesztelni az emulátort).
Title: Re: Java-s emulátor
Post by: Attus on 2010.February.19. 09:14:18
Lehet hogy ez az emulátor sincs nagyon messze attól, hogy a BASIC programokat (parancsokat) hiba nélkül végrehajtsa. Kb. 70 darab Z80 utasítás van még ami nincs megírva (kb. 650 van kész). Ezek egy része könnyû, csak 1-2 trükkös van még (pl. DAA). (utána jöhetnek még a nem dokumentált utasítások, de a BASIC ezeket úgysem használja, szerintem a legtöbb játék sem.)

Ne sajnáld az energiát a z80-ra!
Csináld meg az összes z80-as utasítás emulációját, különbem a basic sem fog menni. A basic is Z80 rutinok tömkelegébõl áll. Mondjuk a nem dokumentáltak talán nélkülözhetõk, de a DAA biztos, hogy nem, hisz a matematikai rutinok fontos utasítása. A spectrum átirataimban is gyakran használják a spectrum játékprogramok is a DAA utasítást.
Title: Re: Java-s emulátor
Post by: Zozosoft on 2010.February.19. 09:28:10
A nem dokumentáltakból pedig az XL,XH,YL,YH regiszterekre vonatkozóakat mindenképpen, ezek a legelterjedtebbek.
Title: Re: Java-s emulátor
Post by: Attus on 2010.February.19. 19:44:41
A nem dokumentáltakból pedig az XL,XH,YL,YH regiszterekre vonatkozóakat mindenképpen, ezek a legelterjedtebbek.
Az egy dolog, hogy mit értünk "dokumentált" alatt. Ezeket én a dokumentáltak közé sorolnám, hisz  a z80 a DD, FD prefix beolvasása után automatice értelmezi. Én a nem dokumentáltak alatt a flag -ok nem dokumentált viselkedéseit, és például a SLL utasítást értem, melyeket valóban ritkán használnak, de a z80 értelmezi és végre is hajtja, hisz nem tehet mást. Olli emulátora meg még nem.

Úgyhogy Oli!
Ha már ennyi energiát fektettél bele, akkor valósítsd meg ezeket is, ami már nem nem lehet nagy munka, hisz kaptafa az egész és az már neked megvan, csak rá kell húzni õket.
 :smt024

(Elismerem, nekem 8086 -os assemblerben egyszerûbb dolgom volt a z80 emulációval, mint neked, ezen a magasszintû java nyelven.)
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.24. 00:43:28
Hali!

Feltöltöttem az új változatot.
A "FILE" menüben (menü=ESC) lehet választani, hogy milyen cartridge (játék rom) legyen csatlakoztatva a géphez. Üres esetén a hagyományos TVC indul el. Mostmár a billetnyűzet is működik, így tovább lehet lépni az üdvözlő képernyőn. Itt fekete alapon kiírja a kis szövegét a BASIC, meg a szabad memória méretét, majd parancsra vár.
Hiba van még a gépezetben, mert a szabad memória kiírásánál kis tévedésben van a program.

Ezután néhány BASIC parancsot már használhatunk is (CLS, PRINT). Sajnos van több ami nem működik, programot sem tudunk írni. Majd javítom a hibát ha sikerül lenyomozni.

Ja, a játék ROM-ok (cartridge-ek) között van 1-2 melyik már működik is. Emulátor indításakor alapból a "TURBO RUDI" nevű játék indul el. Ez szerintem már játszható játék, vagy 8 képernyőt én is végignyomtam benne.

A "Varázsgömb" is jól fut, lehet játszani vele.
A "PACK MAN" is fut, de nagyon lassú, még nem tudom miért.
A "Volley Ball" is játszható lenne, de amikor a labda hozzánk, vagy a falnak pattan akkor hangeffektet játszana leg a program és itt most még érthetetlen okból nagyon lelassul a program.
Az "űrszektor"-nak csak a kezdőképe működik, azután lefagy a játék.
A Space Invaders épphogy bevillant egy képet, a Tetris meg meg se nyikkan.

Hangja még nincs az emulátornak, de alul grafikusan jelzem, ha szól valahol a hang. Az időzítés sem tökéletes még, de talán már közelít. A képkockák számát kiírom alul "FPS: 50". Ha ez az érték 50, akkor megfelelő a sebesség, ha kevesebb akkor már kevésbé játszható a játék.

Van valakinek tippje, hogy a CAS fájlokat hogyan töltsem majd be? Ezek lennének a program fájlok. A felépítése megvan a fájlnak, csak az a kérdés, hogy hogyan töltsem be?
1-emuláljak egy kazettás egységet és portokon keresztül küldözgessem az adatokat?
2-vagy egyszerűen "erővel" másoljam be a programot a basic területre, esetleg állítsak be 1-2 basic rendszerváltozót ha kell, és kész?

Ez még ráér, de ha megoldom akkor több programot tudnék futtatni, esetleg nagyobb esélyel találnám meg és javítanám a hibákat.

Remélhetőleg pár héten belül sikerül a hangot is megoldani, legalábbis ötletem van rá, de nem tudom megfelelő lesz e. Meg lehet a képernyő felépítést, rajzolást gyorsítom majd.

Meg ha tudom javítom majd a hibákat amik miatt a BASIC még nem tökéletes.
Meg ránézek majd a nem vagy nem jól működő játék rom-okra, hátha életre lehet őket kelteni.
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.24. 00:54:01
ATTUS: Assemblyben tényleg könnyebb dolgom lenne nekem is (főleg ha a jelzőbitek is az ember keze alá dolgoznak).

A nem dokumentált utasításokat szívesen megírom, de ahhoz az kell, hogy elég információm legyen róluk. Egyelőre nem sürgős (még vagy 10 dokumentált hátra van még), illetve a meglévőkben lévő hibák javítása a fontosabb. De utána csak azt tudom megírni, amiről tudok is. Párat találtam néhány régi újságban, ez az XL XH dolog is rémlik, de utána segítségre szorulok majd.
Title: Re: Java-s emulátor
Post by: Zozosoft on 2010.February.24. 08:49:25
A nem dokumentált utasításokat szívesen megírom, de ahhoz az kell, hogy elég információm legyen róluk.
Itt bõven találsz leírást. (http://z80.info/)
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.February.26. 17:59:15
Köszi !

Hát.. ma újabb dolgokat sikerült javítani.
Előszöris a "VOLLEY BALL" és a "PACK MAN" is játszható már rendesen.

Működik a BASIC. Lehet programot írni, szerkeszteni és futtatni.
Még tesztelni kell, lehetnek utasítások, amik nem működnek megfelelően.

A FILE menüben van 10 újabb játék (CAS fájl betöltése).
Ezeket a játékokat akkor kell betölteni, mikor "készenléti" állapotban van a gép, tehát villog a kurzor és ránk vár a gép. Betöltés után a RUN-al indíthatjuk a programot, vagy szerkeszthetjük. Újabb játék betöltése előtt nyomjunk egy RESET-et.

Majd egy "rendes" fájl betöltést kell majd csinálni, ez csak a teszt elejéig működik így.
Csinálok majd egy letölthető változatot is, hogy menteni is lehessen, teljes képernyőn futtatni stb.

Apropó mentés: a FILE menüben van egy "memória gyorsmentése" és "gyorstöltése" pont. Ezekkel az aktuális játékállás elmenthető a memóriába, és ha elrontunk valamit akkor betöltve újra próbálhatjuk, nem vesztünk életet, nem kell előlről kezdeni a játékot.

Ha tudom még megcsinálom a hangot is, meg valamit lehet kitalálok, mert kicsit villognak a "sprite-ok" játék közben. Valami módon az újrarajzolást érdemes lenne olyan részére rakni a futó programnak, mikor nem egy rajzolás közepén áll. Nem tudom van e erre tuti módszer.
Title: Re: Java-s emulátor
Post by: szipucsu on 2010.February.26. 20:35:38
Ez nagyon jól hangzik!
Sajnos a gépemen most nincs Java és egyelõre nem teszem fel különbözõ technikai okok miatt, de remélem, hamarosan meg tudom nézni az emulátort.
Majd tedd be a Bányászt, a Gombócfalót és a Létrát is mielõbb a repertoárba, ha még nincsenek benne.

(OFF: A Bányász és a Létra EP verzióját érdemes lenne EP-re megcsinálni, egyszerû (?) basic programok.)
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.March.01. 20:19:19
Feltettem az új változatot.
Most már a FILE menüben van egy "Programok betöltése.." pont. Itt bejön egy új ablak és ott egy listán lehet kiválasztani a programot/játékot. Minden játékból mutat egy képet, meg 1-2 soros leírást ha van. ENTER-re betölti a játékot. Az autostart még nem működik, így a CAS fájlok betöltése után a RUN parancsal indítani kell őket. (Cartridge indul magától).
Program futás közben is betölthető újabb program, mert minden program betöltése előtt egy "tiszta" alapgépet tölt be a gép. Emulátor indításakor szintén ilyen "hibernált" állapotot indít, így nem kell végigvárni a lassú boot-olást.
Javítva lettek a színek, 4 színű üzemmódban hibásak voltak. Emiatt az üdvözlő képernyő más színű lett. Nekem a hibás változat jobban tetszett.

A programok listáját lehet szűrni, ha valakit csak egyik vagy másik kategória érdekli. Kb. 45 játék van most a csomagban. Emiatt hízott a program, 650 Kbyte-os a JAR fájl amit letölt a böngésző, de ebben már minden benne van.

Ha a "Vili a bányász"-ra gondolsz (JET SET VILLY, MANIC MINER), az benne van az emulátorban, és játszható is, bár szerintem nem tökéletes. Hogy ez az emulátor, vagy a program hibája azt nem tudom (a spectrum-os változat játszhatóbb). A "létra" is játszható. A "gombócfaló" nem rémlik.

Még bővülni fog a programok listája, de sajnos még az "utántöltős" programokat nem tudja futtatni a program. Szintén nem tudja megnyitni a .DSK kiterjesztésű játékokat (lemezeket). Emellett még biztosan van hiba az emulátorban, vagy a gépek közötti eltérés (32K, 64K, 64K+) miatt nem fut még több játék. Illetve 1-2 basic program "BAD ARGUMENT" hibával leáll, ami arra utal, hogy hibás még az emu, valószínűleg valamelyik matek függvény hibás értékeket generál.

Kb. egy hónap múlva (akkor lesz hozzá rendes tárhelyem) csinálok majd neki egy rendes weboldalt, és akkor letölthető lesz az otthoni változat is.
Title: Re: Java-s emulátor
Post by: geco on 2010.March.02. 09:07:42
 :smt041 :smt041 :smt041

Egyre jobb az emu, be is töltöttem pár játékot :)
A Vili a bányásznak szétesett a képe nálam egyből indítás után, úgy néz ki a kép,mintha a CRTC regiszterei nem kaptak volna új értéket.
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.March.02. 15:27:40

A video regiszterek egyelőre nem befolyásolják a grafikai megjelenítést. Az alap programoknál ez nem okoz gondot, lehet hogy a "Vili a bányász" és más profibb játékok jobban vezérelik a regisztereket és nem a szabványos beállításokat használják. Majd ha tudok próbálok javítani ezen.

Viszont a hang emulációhoz kérnék segítséget.
Ennyi alap információt gyűjtöttem össze, TVC hanggenerálással kapcsolatban:
-Van egy 12 bites PITCH érték.
  Pitch=((port[5]&0x0F)<<8)|port[4];
-Van egy 4 bites amplitúdó (hangerõ?  0..15)
  Amp=(port[6]>>2)&0x0F;
-Van egy hang Interrupt (engedélyezve-tíltva) -uganezt használja a magnó
  port[5]  5. bit
-Hangjel tiltva, engedélyezve:
  port[5]  4. bit
-van egy frekvencia osztó
  nullázás: adat küldés a port[0x5B]-ra (az adat közömbös)
Pitch= 0..4095     4095=nincs hang
F=195312.5/(4096-Pitch)

Meg tudom azt csinálni, hogy van egy "puffer", amibe másodpercenként X alkalommal feltöltöm a hang adatait, ami szól folyamatosan -ha kell. 22 Khz-es 8 bites mono 1 csatornás a hang, ez szerintem elég is lesz.
A 22 Khz azt jelenti, hogy 22050 adat (byte) kell másodpercenként. Ha 50 képkocka fut másodpercenként, akkor kb. 440 byte képkockánként.
Egy adat ugye -128 és 127 közötti érték lehet (vagy 0..255), nem tudom a Windows hogy kezeli ezt.

Próbáltam, hogy szinusz függvényt másoltam ebbe a pufferbe. Itt azt tapasztaltam, hogy ha hosszabb a hullám akkor mélyebb a hang, ha rövidebb akkor magasabb. Elméletileg a hullám magassága lenne a hangerő, de itt nem tapasztaltam változást, úgy tűnik csak a hossz számít.

És akkor az a kérdés, hogy a programok által küldött PITCH értékből hogy lesz nekem olyan adat, amit a byte tömbbe töltve nagyjából az a hang szól, aminek szólnia kellene?
Nem akarok (egyelőre) pontos időzítést, tökéletes hangot, csak nagyjából közelítsen az eredetihez.

Van valami "frekvenciaosztó", ezt nem értem mire jó (valami számláló lehet?). Illetve a hang megszakításról sem találtam elég információt, szükség van e erre még pluszban. Ha valaki tud infót ezekről, vagy valahol van leírás erről, esetleg valamelyik topikban volt erről szó akkor írjátok meg, hogy hol és mit tudok elolvasni.
Köszi előre is!
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.March.14. 14:38:50
Feltöltöttem az új változatot.

Működik az "autostart" a programok indításánál.

Van hang emuláció végre. Igaz, hogy recseg-ropog, meg egyes játékoknál elég szörnyű hangot produkál. De pl. a Turbo Rudi nevű játékban elviselhető /használható.

Idő közben találtam egy hibát. A BASIC ROM "RND" eljárása hibás értéket generál. Ez generlál véletlenszámot, és emiatt nem működik több játék. Egyértelműen az emulátor hibája ez. Próbálom megtalálni a hiba okát, de elég nehéz.
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.June.10. 10:23:08
Üdv!

Újra itt vagyok.
Kis pihenés után újra elővettem az emulátort és kis javítás után megtalálható a következő oldalon:
oli76.hu
konkréten: http://oli76.hu/tvc03.php

Két változatát is le lehet tölteni az oldalról.
Az egyik ez az applet ami weboldalon fut, a másik saját gépen fut ablakban, vagy teljes képernyőn.
Sőt, a forráskód is letölthető. (Nem túl szép, de ez van.)

Fogom még fejleszteni, de a Z80 emuláció még nem tökéletes, 1-2 BASIC utasítás hibásan működik (pl RND), emiatt sok program nem működik. Ennek a hibának a javítása kicsit nehezebb feladat lesz, ha valaki ebben tudna segíteni, az nem lenne rossz.
Title: Re: Java-s emulátor
Post by: OLI76 on 2010.June.17. 17:24:00
Felkerült az új változat.
Javult a Z80 emuláció, így a BASIC is jobban működik, és több játék fut, ami eddig "BAD ARGUMENT" hibával leállt.
Bő 100 játék található most az emulátorban.
Néhány új játék címe:
Turbo Jack, A Gyíkkirály, Ladder Man, Sakk, Mario a labirintusban, Búvár, Színre-színt.
Amik javítva lettek: Lóverseny, Fekete Sólyom, Robin Hood, Nebulus, Yogi Bear.

Még egy hiba biztosan van az emulátorban, mert ritkább esetben, de még előjön a "Bad Argument" hiba. Ezen kívül 1-2 játék fut, de a grafika nem jelenik meg a képernyőn. Két játéknál (Space Invaders, Áttörés) ezt erővel áttálítva lehet játszani.
Folyik tovább a fejlesztés.