TVC Fórum

Szoftver => TVC Emulátorok => A témát indította: Gaia - 2013. Május 10. - 10:00:17

Cím: WinTVC 1.0.5
Írta: Gaia - 2013. Május 10. - 10:00:17
Tegnap feltettem a WinTVC 1.0.5-öt. A szokásos háromféle verzióban letölthető itt:

http://gaia.atilia.eu/content/view/3/4/ (http://gaia.atilia.eu/content/view/3/4/)

Újdonságok:

- pixel alapú rasztermód kiterjesztése a teljes képernyőre
- video mentése AVI állományba
- hangfelvétel rögzítése WAV (16 bit PCM) állományba
- opcionális jobb hangminőség (teljesítmény rovására)
- hibajavítások (monitor, I/O, GUI)
Cím: Re:WinTVC 1.0.5
Írta: teki - 2013. Május 10. - 13:00:41
Mennyire pontos a pixel alapu megjelenites? Tesztelted valamivel ? Tervezem irni egy EMUDIAG progit, amivel ilyesmiket lehetne ellenorizni, csak nekem nincs mihez hasonlitani.
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 10. - 14:42:52
A monitorban mik lettek javítva? Szoktam használni hibakeresésnél lépésenkénti összehasonlításra. Úgy vettem észre LDIR utasítás egyel több lépés volt mint ahogy vártam, ill a jelzőbitek állítása se a leírások alapján módosult. Ettől függetlenül persze a legjobb TVC emu amit eddig láttam :)
Ötletként esetleg egy log fájl a regiszterekről megvalósítható lenne benne?
/Eddig csak úgy tudtam megoldani hogy egy progi mindíg küld egy entert, és ocr-el beolvassa a monitor ablak tartalmát, ami működik, de nagyon lassú sajnos/
Cím: Re:WinTVC 1.0.5
Írta: Gaia - 2013. Május 10. - 23:05:05
teki: na, tesztelni azt nem volt időm igazi vason, de még nagyobb gond hogy nem is tudnék transzferálni a magnót kivéve, ami hát nem az igazi. Ezért nagyon gyúrok az új SD kártyára, de ez egy sokparaméteres egyenlet (vagy inkább egyenlőtlenség), ahol a hely és a szabadidő igen korlátos. A clock stretching sem az igazi még, úgyhogy inkább kikapcsoltam egyelőre, tehát ez azt jelenti, hogy a video sem pixelre pontos, de már legalább pixel alapú. A tied mintha más "koordináta-rendszert" használna, legalábbis az egyik raszter demód az enyémen máshol "riceg" (C= plus/4-es szleng arra, ha ha nem stabil a raszter). Még ellenőrizni kell ezt is. Most a horizontal count az a jobb keret szélén nulla nálam, de valójában szinte biztosan nem ott van, hanem a window area bal szélén.

Egyébként azt hiszem az interlace-elt video módom sem jó még, mert alapból a páratlan sorokat rajzolja és a valódi vason páros sorok jelennek meg (legalábbis a a legtöbb 8 bites mikrón ez a helyzet, ahol oszcilloszkóppal is ellenőrizve lett a VBLANK szignál). Szóval van még teendő bőven... elég nehezen is szántam rá magamat éppen ezért.

Egy szó, mint száz, ez a szokásos 80-20-as problémakör: az idő/erőfeszítés 80%-a elmegy a munka utolsó 20%-ára :)

Attila: köszi a dícséretet :) a monitorban egy olyan hiba lett javítva, hogy ha volt Windows message (jellemzően billentyűleütés vagy ilyesmi), akkor még lépett egyet. Ez a majdani "run to cursor" módban (lett volna) zavaró. Ami még javítva lett, az az ha felfele lapozol a nyilakkal, akkor okosan kitalálja milyen utasítás lehetett ott és annyit lép, nem csak bután megy egy byte-ot visszafele. Az LDIR az akkor CPU bug lenne, ezt jó hogy mondod, mert pont a TVC miatt írtam át anno (2005?), hogy közben is lehessen interrupt, elképzelhető, hogy becsúszott  egy hiba, majd megnézem, köszi. Log: milyen regiszterekre gondoltál? CPU vagy CRTC?
Cím: Re:WinTVC 1.0.5
Írta: Gaia - 2013. Május 11. - 00:36:13
Attila: aha, értem mire céloztál az LDIR-rel. Eddig valahogy fel sem tűnt, de eggyel több iterációban megy (visszalépteti a PC-t), ami csak a debuggerben látszik, mert a ciklusszám az jó. 2004. november 21-én írtam át, megtaláltam a "patch"-et ;)

Köszi :)
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 11. - 11:17:06
Alapvetően a CPU regiszterekre gondoltam, már az is jó lenne. De ha még a CRT ill a most főként érdekes 1793 regiszterek is láthatóak lennének  és mindehez még egy PC-t figyelő töréspont kezelő is lenne, azzal nagyon nagy segítségünkre volnál a fejlesztésben. Remélem nem vagyok túl szerénytelen :)

A raszter demo nálam nem csíkozza a betűket , egyben villog az összes színe. Ezek szerint ti minden sor rajzolása előtt megnézitek a palettaregiszter tartalmát. Erre nem gondoltam. A képkezdést hogyan /melyik regiszterrel/ lehet a legegyszerübben mefigyelni?
Cím: Re:WinTVC 1.0.5
Írta: teki - 2013. Május 11. - 12:00:11
> A clock stretching sem az igazi még, úgyhogy inkább kikapcsoltam egyelőre, tehát ez azt jelenti, hogy a video sem pixelre pontos, de már legalább pixel alapú.

Clock stretching meg nekem is hatra van, de ahhoz mar tenyleg gep kell.

> A tied mintha más "koordináta-rendszert" használna, legalábbis az egyik raszter demód az enyémen máshol "riceg" (C= plus/4-es szleng arra, ha ha nem stabil a raszter). Még ellenőrizni kell ezt is. Most a horizontal count az a jobb keret szélén nulla nálam, de valójában szinte biztosan nem ott van, hanem a window area bal szélén.

Hat a megjelenites az 6845 szerint megy. A raszter demok fuggenek a helyes irq es a helyes kesleltesesektol. Nem hiszem hogy pontosak nekem, de ahhoz teszt progik kellenek, ahhoz alltam neki flopyy+assembler megvalositasahoz eloszor. (+ c, mert asm kicsit lassu [irni], s sdcc eleg jonak tunik)

> Egyébként azt hiszem az interlace-elt video módom sem jó még, mert alapból a páratlan sorokat rajzolja és a valódi vason páros sorok jelennek meg (legalábbis a a legtöbb 8 bites mikrón ez a helyzet, ahol oszcilloszkóppal is ellenőrizve lett a VBLANK szignál). Szóval van még teendő bőven... elég nehezen is szántam rá magamat éppen ezért.

Azt egyenlore nem is tervezem.

> Egy szó, mint száz, ez a szokásos 80-20-as problémakör: az idő/erőfeszítés 80%-a elmegy a munka utolsó 20%-ára :)

Teny. En is csak heti par orat irogatom a dolgot. Sajna vatera-val es tarsaival nincs szerencsem, igy eleg eselytelennek tuni hogy tudjak valodi TVC-t szerezni.

Jo moka amugy emut irni, imadnivalok ezek a specifikaciok.
Cím: Re:WinTVC 1.0.5
Írta: Gaia - 2013. Május 12. - 13:37:47
Atka72:

Már értem. A CPU loggolás az alapesetben drága móka, mert pillanatok alatt több 100 megabyte méretű lesz. Ezért jobb, ha mondjuk mindig csak az utolsó 100 utasítás lenne loggolva. Ehhez valami fix méretű láncolt listában (vagy ring bufferben) lehet gondolkodni és a WinTVC architektúrája olyan, hogy ezt plusz performance penalty nélkül tudná is... meglátjuk :)

Raszter: nem elég minden sor elején megnézni, de ettől még sok emulátor így csinálja. Sajnos ez már igazából egy olyan módszer ami a gépek sebességének növekedésével meghaladottá vált. Ha belegondolsz ez egyfajta alulmintavételezése a video regisztereknek, aminek elkerülhetetlenül artifact-jei lesznek, mint bármi másnak.  Vannak gépek, ahol nem lehet a raszter írni/olvasni így szinte semmi módja nincs annak, hogy a képgenerálásba beavatkozzunk (pl. a Primo-nál elég elszántnak kell lenni).

Először is be kell vezetned raszterszámlálókat (ideális esetben a gépre és a TV-re is). Ez az alap. Innentől kezdve két architektúra lehetséges. Az első, egyszerű de bombabiztos megoldás az, ha a video pixel órajel köré szervezed az emulátor működésést a CPU utasítások helyett, és onnan hívod meg mikrokód szinten a CPU emulációt (tehát M1, M2 stb mind külön ág lesz).

A másik, sokkal bonyolultabb mód esetén marad a CPU alapú rendszer, de az utasítások végrehajtását előre "programozott" események szakíthatják félbe. Ilyen pl. az ha a diszk megszakítást generál, vagy változik mondjuk a keretszín, esetleg  a hangregiszterek értéke stb. Én ezt a módszert követem a WinTVC-vel. A CRTC regiszterek értékei alapján előre tudni mikor lesz pl. a képernyő vége (leegyszerűsítve: sorok száma × 200 CPU ciklus - aktuális pozíció), ez egy visszatérő esemény. Természetesen ha változik egy CRTC regiszter értéke, akkor újra kell számolni. Minden CPU ciklus számolásnál egy ciklusszámra rendezett láncolt listában megnézzük esedékes-e valami, és ha igen meghívunk egy ún. callback függvényt (nem muszáj callback, lehet egy nagy switch/Select Case is, csak akkor kevésbé generikus a kód).
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 12. - 23:43:21
Hát igen a loggolás valóban sok helyet foglalhat, de sebaj ráfér a hdd-re. Viszont a hibakeresést nagyon megkönnyíti.
A legkissebb hiba is egyből kiderül és nem kell végigmenni több száz utasításon manuálisan.

A CRT emulációm eddig nagyon le volt egyszerűsítve, most írom át hogy legalább a képméret beállítások működjenek.
valószínűleg sosem lesz pixel alapú mert sztem nagyon lelassítaná a megjelenítést, és igazából eddig csak tesztprogramokat láttam amik ki tudják használni a spéci effekteket. De a tiédbe legalább ki tudom majd próbálni ha demót írok:)

Az űrszektor végre jó lett:) Viszont van több cartridge játék is ami nem akar elindulni és ugyanabba a memóriarészbe szorul be mint a floppy vezérlő. Na egy ilyet leloggolok és hátha kiderül a turpisság, legalábbis remélem.

Pár éve egyébként pont a te emulátoraidat látva gondoltam hogy nekem is meg kéne próbálni. A primó volt az első azt szerettem nagyon egyszerű és nincs benne memórialapozás:) . A HT is működik de a programok betöltésénél a legtöbb valamiért eltolódott a memóriában, ezért nem futnak. Ha a TVC-t sikerül rendbe tenni akkor előveszem azokat is.
Cím: Re:WinTVC 1.0.5
Írta: teki - 2013. Május 13. - 05:27:30
jstvc-ben a crtc a kov keppen mukszik:
cpu_time_diff = cpu_run(); // 1 utasitas ideje
6845_run(cpu_time_diff);
draw_screen();

A 6845_run kimenete az egy stream (ringbuffer), amibe irja az epp aktualis memoriacim tartalmat, vagy a bordert. En 16-biten tarolom, az extra 8 bit jol flageknek (hsync,vsync).
A draw_screen olvassa ezt a stream-et, es rajzol a bitmap-be:
26 scanline-al a vsync kezdete utan kezdi a rajzolast, 288 sort rajzol.
16 karakterrel a hsync kezdete utan kezdi rajzolni a sort es 76 karakternyit rajzol.

A TVC sajatossaga, hogy a vsynv vege az a cimregiszter 9-edik bitjere van kotve.
Nem is ertem miert a vsync kezdetetol kezdem a szamlalast, bar azt se tom mit csinal a CRT ha valaki megvaltoztatja a vsync kezdetet? (hosszu vsync-et letrehozva ezzel)

A vizszintes sync jelnek a kezdete programozhato, de a hossza nem, azt az aramkorok felulbiraljak, igy en annak kezdetehez idozitettem a rajzolast.
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 16. - 08:37:42
Hadd kérdezzem meg hogy a gyors Boot hogy működik nálad , a rom-ot módosítod és kihagyod az ellenőrzéseket, vagy az emu trükköz? Jó lenne egy ilyen gyorsított rom hibaellenőrzéskor, mert a kezdő memóriatesztekre sokat kell várni mire végre elindulnak a lényegi folyamatok. TVC emuba nekem egy kicsit hiányzik hogy nem tudom lecserélni a rom tartalamat csak a beépítettekre, ezt nem tervezted beépíteni? 

Ami eddig kiderült nálam: a  Halt utasítás kezelését hibás logika szerint csináltam, javítottam de még vannak gondok.
Cím: Re:WinTVC 1.0.5
Írta: Gaia - 2013. Május 17. - 10:38:47
Most fejből írok, mert nincs előttem a forrás. Emlékeim szerint az 1.2-ben a ROM-ot patch-eltem meg a könyvben kommentált ROM lista segítségével, a 2.2-esben viszont már vannak rendszerváltozók, amikbe bizonyos értéket írva kihagyja a teszteket, meg a bejelentkező képernyőt. A ROM csereberélő user interface jó ötlet, a legtöbb emulátoromban megcsináltam, de mindig nagy tortúra dialógusablakokat tervezgetni ezért amíg lehet halogatom... ::) Vannak ilyen módosított ROM-ok?
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 18. - 12:18:36
Egyenlőre nincs csak tervezem a ROM módosításokat. A loggolás miatt kérdeztem hogy van e ilyen megosztható gyorsított ROM tartalmad. Kicsit gyorsítottam a logoló progimon így már kibírható végülis a sebessége. Ha nem gond fel is raktam ide hátha más is fel tudja használni.
Mint kiderült az Interruptokat se jól kezeltem, nem csoda hogy nem jól ment sok program. Renbe kell előbb tennem a hibákat hogy izgalmasabb dolgokkal tudjak foglalkozni.
Cím: Re:WinTVC 1.0.5
Írta: teki - 2013. Május 18. - 13:11:37
En aszittem a gyors boot az csak egy snapshot. A memoria ures, szal tuti jol tomoritheto, s nem tartha sokaig kitomoriteni.
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 18. - 13:27:01
Én is Spapshot-ból csináltam a gyors bootolást, csak tömörítés nélkül , de jó ötlet.
Érdekes hogy nálatok az in(5)  és in(89) teljesen más eredményeket ad, de ettől függetlenül minkettő emu teljesen jól működik.
Ahogy látom a WinTVC  nem írt portjai nem FF-et adnak vissza hanem 0-át a JSTVC-ben viszont ok.
Cím: Re:WinTVC 1.0.5
Írta: Gaia - 2013. Május 18. - 22:27:58
A gyors boot-ra a snapshot valóban jó ötlet, annak idején azt hiszem az egyik Java-s emulátorban is mintha lett volna. Én is megcsinálhattam volna, csak sajnáltam rá annyi helyet. A tömörítés jó ötlet, nekem akkor vszleg újabb library függőség lesz belőle (ZIP).

A nem használt portok és bitek tutira mindig 1-et adnak vissza az igazi gépen? Valóban 0 van a kódban, megnéztem :) Mindenesetre köszi, hogy szóltál. Az 5-ös és 89-es portnál mire gondoltál pontosan? A nem használt bitekre?

Apropó, a TTP támogatást nem akarjátok megcsinálni? Az lenne még klassz... (meg az egy bites WAV...)
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 18. - 23:09:37
Emlékeim szerint igen, a nem használt portok 255-öt adtak vissza, de már nincs gépem sajnos. Nem kell library, nem olyan bonyolult a Huffman kódolás. Szeretek az algoritmusokat kódolni. A használt biteknél valószínűleg jó az érték, mert különben mindenféle gubanc lenne...mint pl. nálam :D
A 8KB-os CRT játékok valamiért csak akkor indulnak el nálam ha ki van kapcsolva az interrupt ez ezekkel a portokkal van kapcsoltaban.

Közvetlen wav betöltés az emuba? Hát az elég húzos az időzítések miatt de meg lehet próbálni, hátha belefér.
Jó lenne hallgatni a bitek szörcsögését újra!
Cím: Re:WinTVC 1.0.5
Írta: teki - 2013. Május 19. - 13:26:22
Megallapodhatnank kozos snapshot formatumban is, s akkor lehetne keresztben toltogetni.

Az egyetlen komplikacio a kiegeszitok, de abbol igazabol csak a hbf lesz, s azt mar mindenki tamogatja, igy azt is bele lehet venni. (annak sztem eleg a memoria snapshot, jo remelhetoleg ujra inicializalja magat)
Cím: Re:WinTVC 1.0.5
Írta: teki - 2013. Május 19. - 13:28:45
Én is Spapshot-ból csináltam a gyors bootolást, csak tömörítés nélkül , de jó ötlet.
Érdekes hogy nálatok az in(5)  és in(89) teljesen más eredményeket ad, de ettől függetlenül minkettő emu teljesen jól működik.
Ahogy látom a WinTVC  nem írt portjai nem FF-et adnak vissza hanem 0-át a JSTVC-ben viszont ok.

Az ff nekem csak maradek, nem tudomanyosan alatamasztott ertek. Nem mukodott valami, s beprobaltam ezt is. :)
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 19. - 15:00:16
Az egységes snapshot szerintem is jó lenne. A Primónál sok melóval sikerült nagyjából megfejtenem hogy van és be is tudtam tölteni, de a TVC sokkal összetettebb. /A primo emulátor emlékszem kb 2-3 hét alatt már szépen működött, a TVC meg még most 3 év után sem az igazi/.
Gondoltam már rá eddig is hogy megkérem Attilát fedje fel a TVS file formátumát, csak nem tudom mennyire EMU specifikus.
Egy egységes struktúrában megállapodhatnánk.


Cím: Re:WinTVC 1.0.5
Írta: Gaia - 2013. Május 21. - 08:30:06
Közös snapshot formátum nagyon jó ötlet! Nyitni kéne neki egy külön fejezetet. Az enyém a Primo snapshot formátumán alapul, értelemszerűen kiegészítve a TVC specifikus elemekkel, aminek megvan a leírása valahol (meg fogom keresni). Egyébként vszleg alakítani kell rajta...

EDIT: most nézem, hogy az event queue is a snapshot része, ami annyiban probléma, hogy pont most buheráltam át az event queue kezelést, és elkézelhető, hogy picit változik emiatt a snapshot is (bár vszleg megoldható). A snapshot-ban egyébként lettek volna eredetileg tag-ek (CRTC, VRAM, CPU stb), amik jelzik, hogy melyik komponens (chunk) következik. Egy közös formátum esetén talán jó lenne még a szekció méretét is eltárolni, hogy akinek az adott komponens hiányzik a snapshot-ból (pl. nektek az event queue) az át tudja ugrani. Ez hasonló a WAV formátumban alkalmazotthoz (https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ (https://ccrma.stanford.edu/courses/422/projects/WaveFormat/)).
Cím: Re:WinTVC 1.0.5
Írta: Atka72 - 2013. Május 21. - 11:46:10
Addig is a Primo formátumát meg tudod osztani velünk? Mert én be tudtam olvasni és 90% ban működött is, de az én mentésem nem ment a tiédben. /kicsit visszamegyek Primózni mert ott sokkal egyszerűbb ellenőrizni az utasítások helyességét/.
Cím: Re:WinTVC 1.0.5
Írta: eszabados - 2013. Július 4. - 19:14:54
Sziasztok!

Most regisztráltam a fórumra, mert érdekel a TVC. Itthon van egy TVC 64-em, néha előveszem, de egyelőre nincsenek hozzá programok meg magnó se. Egy ideje már nézegetem az emulátorokat, főleg a WinTVC nyerte el a tetszésemet.

A használat közben sajnos akadnak problémák, ezeket szeretném leírni (1.0.5 verzióra vonatkozóan).

1. Nálam a 64bites verzió nem tud CAS-t menteni, elszáll, amikor megpróbálom. A 32 bites verzióban működik a dolog.

2. A 64 bites verzió által készített emulátor snapshot (tvs) mentést nem tudja betölteni a 32 bites verzió (és fordítva se működik). Ha 64 bites emuval probálom a 32 bites verziót betölteni, "Ismeretlen snapshot formátum" hibát ad. Fordított esetben "A WinTVC.exe működése leállt" üzenet jön, azaz elszáll a program.

A programot windows 7 alatt használom.

Remélem, ez hasznos infó a javításhoz.

Üdvözlettel,

Szabados Ernő