Welcome, Guest. Please login or register.


Author Topic: Plus4emu (Read 56697 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re:Plus4emu
« Reply #30 on: 2016.December.27. 22:52:58 »
Ha a "*" az utoljára betett adatot jelöli, akkor talán érdemes lenne SP=$FF esetén a $0200 körüli tartalmat mutatni jelölés nélkül.

Ez a változtatás már megtalálható (egyebek mellett) a Git forráskódban.

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re:Plus4emu
« Reply #31 on: 2016.December.29. 23:27:08 »
Ez a változtatás már megtalálható (egyebek mellett) a Git forráskódban.

Szuper! Így talán kevésbé zavaró ez a rendkívül ritka jelenség... :)

Amúgy ha már béta; mintha lenne egy apró pontatlanság az 1541 VIA Timer1 emulálásában. Nézegetem a forráskódot, de (én se) nem értek C++-szul. :| A kód elvileg azt csinálja, (?) hogy csökkenti megfelelő ütemben a Timer1 számlálóját, majd ha 0 lesz, akkor meghívja a Timer1Underflow() függvényt, ami Free Run esetén újratölti a számlálót a beállított értékkel. Ezzel a számláló pont annyi órajelenként "akciózik", mint amennyi a tárolóban be van állítva. Nemrégiben teszteltem "rendes" VIA-t (egy eredeti MOS-t, meg egy - talán - UMC-t próbáltam), és azok úgy működnek, mint ahogy a MOS-os dokumentációban van. Ott az történik, hogy a $0000 utáni órajelre $FFFF lesz az érték, a következő impulzusra töltődik csak újra a számláló a tárolókból. Ennek az a végeredménye, hogy Free Run esetén a beírt értékhez képest 2 lépéssel több a számláló ciklusideje.

Hogy ennek van-e bármilyen jelentősége? :-D Gondoltam azért elmondom. ;) (A közelmúltban még a régi plus4emu segítségével debugoltam az 1541 DOS-t, ott jött ki némi számolgatás után ez az érdekesség. Most belenézve a forráskódba, ezt olvasom ki belőle...)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Plus4emu
« Reply #32 on: 2016.December.30. 00:21:29 »
Nem tudom, jó-e ez a megoldás, de módosítottam a Git-ben hogy ne a nullára való lefutást hanem a 0000 -> FFFF átmenetet figyelje mindkét számláló, és az első újratöltése még további egy ciklus késleltetés után történjen.

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re: Plus4emu
« Reply #33 on: 2016.December.30. 01:45:21 »
Jónak kell annak lennie, mivel - mint látszik - nem annyira kritikus itt a történet. Az 1541 DOS meg nem túl rugalmas (hogy finoman fogalmazzak... :) ), saját IRQ-t készíteni nem enged, ezzel maximum méricskélni lehet, de tulajdonképpen mit is? :) A DOS egyébként Format alatt ezzel mér ki 100 µS-nyi időt. Így nyer értelmet az, hogy $0062-vel "húzza fel" a timert, nem $0064-gyel.

Azért szerintem az jelent valamit, hogy ilyen "hibákon" rágódunk az emuval kapcsolatban. :) Elég jó ez a stuff, na! Köszönet!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Plus4emu
« Reply #34 on: 2017.February.09. 19:05:31 »
A GitHub-on egy ideje már van 1.2.10 verzió. :)

Az időzítő probléma egyébként a CIA emulációját is érintheti, bár csak az 1581-es floppy meghajtó használ ilyet, így talán kevésbé jelent problémát. Az itt található részletes leírás szerint 2 időtartam beállítása esetén például a számláló értéke 2,1,2,2,1,2,2,1,... lesz, azaz 3 ciklusonként generál megszakítást 2 helyett. Nem tudom, a 6526 és a 8520 között van-e különbség.

Offline geco

  • EP addict
  • *
  • Posts: 7072
  • Country: hu
    • Támogató Támogató
Re: Plus4emu
« Reply #35 on: 2017.February.09. 19:16:53 »
Ezt találtam:
The Amiga home computers employed two and Commodore 1581 floppy disk drive one 8520 chip, which is functionally equivalent to 6526/8521 except the simplified TOD circuitry.
The 8520 revision of the CIA, as used in the Amiga and the Commodore 1581 disk drive, modified the time-of-day clock to be a 24-bit binary counter, replacing the BCD format of the 6526. Other behavior was similar, however.

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re: Plus4emu
« Reply #36 on: 2017.February.17. 00:00:32 »
Az időzítő probléma egyébként a CIA emulációját is érintheti, bár csak az 1581-es floppy meghajtó használ ilyet, így talán kevésbé jelent problémát.

Erről konkrét infóm nincs, de mintha valaki azt említette volna, hogy a CIA-kból Timer működés szempontjából két fajta is van. Itt egészen biztosan nem lesz ezzel probléma. (Hacsak az ep128emu mintájára nem csinálsz ebből is C64 meg VIC20 emulátort is... :ds_icon_cheesygrin: )

Az új verziót köszi, csekkolom!

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Plus4emu
« Reply #37 on: 2017.February.17. 08:44:23 »
Hacsak az ep128emu mintájára nem csinálsz ebből is C64 meg VIC20 emulátort is...
Nem rossz ötlet! :ds_icon_cheesygrin:

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Plus4emu
« Reply #38 on: 2017.February.22. 11:42:56 »
A p4fliconv előnézet funkciója nem működött (csak fekete képernyő jelent meg), javítottam a Git forráskódban. Valójában már az előző beta verzióban is rossz volt. :oops: Hamarosan frissítem a letölthető csomagokat.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Plus4emu
« Reply #39 on: 2017.May.08. 00:41:08 »
A GitHub-on egy ideje már van 1.2.10 verzió. :)

Az időzítő probléma egyébként a CIA emulációját is érintheti, bár csak az 1581-es floppy meghajtó használ ilyet, így talán kevésbé jelent problémát. Az itt található részletes leírás szerint 2 időtartam beállítása esetén például a számláló értéke 2,1,2,2,1,2,2,1,... lesz, azaz 3 ciklusonként generál megszakítást 2 helyett. Nem tudom, a 6526 és a 8520 között van-e különbség.

Hmmm. Mondjuk nem eppen a tekintetben, es lehet nem is ez a lenyeg, de amennyre utdom, a 8520 abban kulonbozik fokeppen a 6526/8521-tol, hogy leegyszerusitetted a TOD-ot, nem a BCD-s van, hanem egyszeruen egy 24 bites (???) szamlalo, vagy ilyesmi?

8520 talan tenyleg 1581-esben volt (meg mintha Amiga kornyeken is lenne ilyesmi?), de ha altalaban a "CIA-ra" vonatkozik (es nem kulon a 8520-ra csak), akkor az szerintem 1570/1571-ben is volt mar pl. 1541-ben volt talan VIA, es ott kezdodtek a gondok is (illetve meg VIC20-nal ahol a gepben is VIA volt) hogy a szepen megalmodott IEC serial busz hw-esen bugzott egy VIA bug miatt, ezert atvaltottak "software-es" megoldasra, ennek is koszonheto, hogy olyan szep lassu lett :( Mondjuk C128-nal van mar fast serial cuccos, ami talan pont ugy muxik, ahogy terveztek volna, de elmeletileg C64-nel is menne (CIA van benne), ha a drive is tudja (tehat 1541 kilove).

Ez szigoruan IMHO es AFAIK jellegu hozzaszolas volt :-P

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re: Plus4emu
« Reply #40 on: 2017.June.04. 19:31:00 »
A jelenlegi "kiadott" verzió az az 1.2.10.1? Azt hiszem fogtam egy "hibát". Vagyis nem is hiba, csak - a forráskódot nézve - nincs teljesen kész ez a rész. :) (Mivel nincs gh accom, (meg a fogalmazás se lenne egyszerű,) inkább ide írnám...)

A probléma az 1551 emulációban van, mégpedig a Byte-Ready kezelésében. A most letöltött forrásban (1.2.10.2-nek mondja magát) a vc1551.cpp fájl 268. sorában van a Byte Ready Flag beállítása, ez rendben van. (Gondolom... :) ) A 396-os sorban van ugyanezen Flag törlése, ami akkor következik be, ha a bitszámláló 2. Na, ezen törlés előtt van egy FIXME megjegyzés, hogy ez a hack egy workaround. Tisztelettel FIXálnék... :oops:

Az 1551-ben, pont mint az 1541-ben is, "kézzel" kell törölni a Byte-Ready-t, nem történik meg automatikusan. A törlő jel viszont maga a TIA _CS-je, tehát bármilyen TIA elérés történik, az törli a Byte-Ready-t. Normál lemezolvasásnál a Byte-Ready jel után a bejött adat kiolvasása történik, ami a TIA egyik regiszterének az olvasását jelenti, ott az a lépés egyben a törlés is. (Írásnál ugyanez a logika.) A Byte-Ready (a beolvasott adattal egyetemben) a következő adat teljes beeséséig "él", tehát ezidő alatt bármikor kiolvasható az adat is meg a (még nem törölt) Byte-Ready is.

Ha már lemezkezelés; van még pár ötlet, amit nem tudom mennyire lenne bonyolult megcsinálni:

Van ugye a lemez-konfiguráló ablak. Ebben az U8/U9-hez ki lehet választani a meghajtó típust... Egyrészt érdeme lenne beállíthatóvá tenni az 1581-et is, ne csak "indirekt módon", olyan lemez behelyezésével lehessen kiválasztani. (Ha már tudja... De ez mehetne az U10/U11-hez is.) Illetve ugyanitt jó lenne, ha kiválasztható lenne a "disabled" is, tehát lehetne innen is tiltani az egyes egységeket. (Most ezt egy kissé körülményesnek érzem: ki kell törölni az "image file"-t, majd kérni egy "Disable unused drives"-t.)

Ugyanitt lehetne olyat is csinálni, hogy "create disk image", vagy valami hasonló, tehát ezen az oldalon jó lenne tudni egy "üres lemez"-t csinálni az adott típusú meghajtóval.

Illetve még egy ötlet: ha változik a lemez tartalma, esetleg jó lenne megkérdezni a júzert, hogy mi legyen vele. A jelenlegi automatikus felülírás helyett megkérdezhetné, hogy felülírja, mentse más néven, vagy dobja el a változásokat. :) Nyilván az emu bezárásakor is rá kellene erre kérdezni... Ha esetleg ez valakinek nagyon nem esik kézre, az automatikus mentés esetleg konfigurálható is lehetne.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Plus4emu
« Reply #41 on: 2017.June.05. 11:17:45 »
Az 1551-ben, pont mint az 1541-ben is, "kézzel" kell törölni a Byte-Ready-t, nem történik meg automatikusan. A törlő jel viszont maga a TIA _CS-je, tehát bármilyen TIA elérés történik, az törli a Byte-Ready-t. Normál lemezolvasásnál a Byte-Ready jel után a bejött adat kiolvasása történik, ami a TIA egyik regiszterének az olvasását jelenti, ott az a lépés egyben a törlés is. (Írásnál ugyanez a logika.) A Byte-Ready (a beolvasott adattal egyetemben) a következő adat teljes beeséséig "él", tehát ezidő alatt bármikor kiolvasható az adat is meg a (még nem törölt) Byte-Ready is.

Módosítottam, most csak TIA hozzáférésre törlődik.

A többi ötletnél nagyobb átalakításra lenne szükség (például a teljes D64 file memóriába töltésére, jelenleg csak az aktuális sávot tárolja, és a változtatásokat azonnal kiírja ha nem írásvédett a file), de a "disable unused drives" használata könnyen egyszerűbbé tehető lenne. Bár ezt a műveletet a Ctrl+F11 vagy Shift+F11 reset is automatikusan elvégzi.

Szerk.: A GitHub-on jeleztek még egy lehetséges hibát, ezt egyelőre nem sikerült javítani. Újra működőképessé kellene tenni a gépemet teszteléshez, bár a billentyűzete már gyakorlatilag használhatatlan. :(
« Last Edit: 2017.June.06. 18:43:24 by IstvanV »

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re: Plus4emu
« Reply #42 on: 2017.June.05. 22:49:51 »
Módosítottam, most csak TIA hozzáférésre törlődik.

Köszönet! A lemezkezelést nem is gondoltam, hogy ennyire "real-time" módon van megoldva... :) Ez már régebben is eszembe jutott: mi van akkor, ha egy "jófej" program olyan stream-et ír ki egy sávra, amit nem lehet .d64-be alakítani? :)

Két dolog jutott még az eszembe, bár ezek egyike se plus4emu specifikus, jól jönne az ep128emu-ban is. Az egyik: a debug / breakpoint ablakban most fedeztem fel, hogy van az "r"/"w"/"x" mellett "i" mint "ignore" lehetőség is. Ez tök jó! :) De az is jó lenne, ha ez kombinálható lenne, egy "1234xi"-t is elfogadna, természetesen "ignorálva", nem lenne tőle "syntax error". (Ha végre sikerült találni egy megfelelő breakpointot, akkor átmenetileg anélkül ki lehetne kapcsolni, hogy "meg kellene jegyezni", hogy milyen is volt.) A másik: van-e arra valami egyszerű mód, hogy meg lehessen tudni az utoljára generált kép rasztersorainak a számát? Debug esetén ez is azért jól jönne. Hagyományos CRT-n ez nem volt annyira kritikus, de manapság elég finnyásak a tv-k / egyéb eszközök. Ha ezt esetleg (igény szerint) ki tudná rakni valahova (Ablaknév, mint ahogy a % van?), fullextrának esetleg a képszinkronsorok számával, :) az segíthetne "kompatibilis" stuffot faragni.

A GitHub-on jeleztek még egy lehetséges hibát, ezt egyelőre nem sikerült javítani.

A p4w-n láttam az "igényt"... Ha kell még valami, szívesen tesztelek, bár az is igaz, hogy az ember jobban szereti egyből kipróbálni, ha valami az eszébe jut. :oops: Mondanám, hogy megnézem a géped, csak mostanában mintha egy kissé túlvállalnám magam. :-D

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Plus4emu
« Reply #43 on: 2017.June.06. 11:48:26 »
De az is jó lenne, ha ez kombinálható lenne, egy "1234xi"-t is elfogadna, természetesen "ignorálva", nem lenne tőle "syntax error". (Ha végre sikerült találni egy megfelelő breakpointot, akkor átmenetileg anélkül ki lehetne kapcsolni, hogy "meg kellene jegyezni", hogy milyen is volt.)

Ez megoldható, bár jelenleg is van lehetőség az 1234i-t külön sorban megadni (ilyenkor a sorrendtől függetlenül tiltja az 1234x-et), illetve az átmenetileg letiltható breakpoint célját szolgálja a "prioritás" paraméter: például 1234xp1 csak akkor aktív, ha a "threshold" nem nagyobb 1-nél. A 'p' után 0 és 3 közötti érték használható, az alapértelmezés 2.

Quote
A másik: van-e arra valami egyszerű mód, hogy meg lehessen tudni az utoljára generált kép rasztersorainak a számát? Debug esetén ez is azért jól jönne. Hagyományos CRT-n ez nem volt annyira kritikus, de manapság elég finnyásak a tv-k / egyéb eszközök. Ha ezt esetleg (igény szerint) ki tudná rakni valahova (Ablaknév, mint ahogy a % van?), fullextrának esetleg a képszinkronsorok számával, :) az segíthetne "kompatibilis" stuffot faragni.

Az alábbi Lua script kiírja a kép időtartamát sorokban és egyszeres sebességű ciklusokban (feltételezi, hogy a program nem írja az FF04/05 időzítőt):
[ Guests cannot view attachments ]
EP változat amely az LPT hosszát írja ki:
[ Guests cannot view attachments ]

Találtam egy plus4emu hibát is, a p4lines.lua (és általában minden video breakpoint) csak akkor működött, ha 0 volt a "Priority threshold", ezt a Git forráskódban már javítottam.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Plus4emu
« Reply #44 on: 2017.June.06. 18:42:11 »
Ugyanitt lehetne olyat is csinálni, hogy "create disk image", vagy valami hasonló, tehát ezen az oldalon jó lenne tudni egy "üres lemez"-t csinálni az adott típusú meghajtóval.

Az hasznos funkció lenne, ha .d64 kiterjesztésű nem létező file megadása esetén automatikusan létrehozna egy üres lemezt? Az alábbi tömörített image egyszerűen beépíthető lenne, csak 100 byte. Bár a lemez neve és azonosítója így mindig "NEW DISK" és 00 2A. Az utóbbit véletlenszerűen is lehetne generálni, ha az előnyösebb.
[ Guests cannot view attachments ]

Szerk.:
Az egyik: a debug / breakpoint ablakban most fedeztem fel, hogy van az "r"/"w"/"x" mellett "i" mint "ignore" lehetőség is. Ez tök jó! :) De az is jó lenne, ha ez kombinálható lenne, egy "1234xi"-t is elfogadna, természetesen "ignorálva", nem lenne tőle "syntax error". (Ha végre sikerült találni egy megfelelő breakpointot, akkor átmenetileg anélkül ki lehetne kapcsolni, hogy "meg kellene jegyezni", hogy milyen is volt.)

Erre a célra is használható újdonság a Git forrásban a megjegyzések támogatása, ; vagy # karakter után a sor további részét figyelmen kívül hagyja. Egy sorban több breakpoint is lehet, így ilyen módon mind egyszerre tiltható.
« Last Edit: 2017.June.06. 20:04:22 by IstvanV »