-------------------------------------------------------------------- MZ-800 Emulator pro WINDOWS (C)ZA Software 1997-2000 Zdenek Adler, zdeneka@seznam.cz -------------------------------------------------------------------- 15.5.2000 - Pocatek vyvoje emulatoru 16.5.2000 - Vytvorena zakl. aplikace, vclenena jednotka UZ80 17.5.2000 - Pridano mapovani a cteni pameti v modu MZ-700 19.5.2000 - Uz funguje i vystup na obrazovku s pouzitim vlastnosti TCanvas- zatim moc pomale, bude treba zrychlit uzitim DirectDraw. 24.5.2000 - Uz funguje nahravani souboru, ukazuje zatim nazev a typ souboru. 26.5.2000 - Ukazuje uz i Start, Length, Exec 30.5.2000 - Opravena pooomala grafika, misto canvas.pixels si davam vsechno do jednorozmerneho pole, ktere pak najednou prevedu do bitmapy pomoci SetBitmapBits(hbmp, cBytes, lpBits) z WIN32API. Nova nabidka Setup, zatim v ni je pouze nastaveni refrese obra- zovky, nastaveni zapisuje do MZ-800.INI, opraveno nastaveni palet v modu 700. 31.5.2000 - Pridano mapovani portu v modu 700 na adresach E000-E008, klavesnice stale jeste neni kompletni (zatim funguji pouze pismena, cisla krome 9, F1-F5), dodano obnoveni obrazovky pri zapisu do CGRAM, uz funguje S-BASIC a vetsina sedmisto- vkovych programu a her. 31.5.2000 - Opravena chyba ve cteni z pameti, uz funguji vsechny 700 prg a hry. Pridany klavesy: sipky, backspace,?-na F8. 2.6.2000 - Pridano mapovani pameti v modu 800, zase se nam nejak rozjel mod 700...proc? Dale pridan vystup na obrazovku, pricemz vsechny roviny pere na jedno misto a cteni z VRAM neni vubec. 4.6.2000 - Pridan zapis do vsech grafickych rovin, prace s paletou, cteni z VRAM zatim neni uplne 100%, mod 640*200 zatim nejde, taky porad zlobi preruseni, proc??? 6.6.2000 - Spraveno preruseni, uz chodi vetsina osmistovkovych programu, nekde trosku zlobi palety..., opraveny instrukce CPI a CPD-uz jede Turbo Copy a Exploding Fist, pridana emulace ramdisku, v setupu jde nastavit jeho velikost a dalsi vlastnosti. Dale pridan mod 640*200 - vypada to trosku divne, ale jede :-), dale je zabraneno tomu, aby se ve ctyrbarevnych modech zobra- zovalo vice rovin nez dve. 8.6.2000 -Pridana moznost zobrazeni DoubleScreen... 12.6.2000 -Opraveno rizeni palet - chyba byla v Delphi v knihovne graphics.pas (dcu), procedura byteswapcolors. Uz je vsechno OK, BASIC uz ukazuje spravne barvy... Opravena situace, kdy pri pokusu otevrit soubor s atributem R/O zahlasil emulator File Acces Denied, dale v nabidce pro vyber souboru kdyz se dalo Cancel, tak otevrel soubor, na kterem byl zrovna kurzor. Pri doubleclicku na nazvu se soubor otevre... Pridan hotkey pro reset sharpa - klavesa F12, funguje i CTRL+RESET pomoci CTRL+F12 (napr. v basicu a u nekterych her - restart). 12.6.2000 -Uz snad opraveno cteni z VRAM... 18.6.2000 -Opravena chyba pri nahravani MZF, problem byl v tom, ze neumim pocitat (256 proste neni $FF :-) .... ) 19.6.2000 -Planovane kroky ve vyvoji emulatoru: celkova synchronizace, ovladani rychlosti Z80, optimalizace a oprava kodu pro emulaci Z80, zvukovy vystup, moznost menit ramdisky za chodu, scrolling, podpora FDD (ze souboru s obrazem diskety), dokonceni debuggeru, podpora CMT pripojeneho na LPT1, emulace joysticku na numericke klavesnici, emulace mysi (napr. pro MZ-PAINT, SHARP LEMMINGS,...) 20.6.2000 -Opravena rutina pro nahravani hlavicky MZF souboru do pameti, nahraval to pokazde na 10F0, ted uz to dava na adresu uvedenou v HL. Opravena klavesnice, rozmisteni spec. klaves (vzdy v poradi SHARP_KEY=PC_KEY je nasledujici: TAB=TAB;GRAPH=CAPSLOCK;ALPHA='\';BLANK_KEY='~';INST=Insert; BREAK_ESC=End;DEL=Backspace;'@'=F6;'\'=F7; Dalsi klavesy jsou umisteny s ohledem na to, aby jejich rozlozeni bylo podobne jako na SHARPu, takze napr. nad dvojkou neni zavinac jako na PC, ale jsou tam uvozovky..... Do budoucna se chysta uzivatelske definovani rozlozeni klaves. 24.6.2000 -Opravena instrukce OTDR - nejdriv se musi dekrementovat HL a BC, teprve potom provest OUT. Proc u OTIR to tak neni??? (nejdriv se provede vystup, potom se teprve inkrementuje HL a dekrementuje BC) ???????????????????????????????????????????????????????????? Ted uz by se teoreticky dalo udelat rolovani obrazovky (driv se to v BASICu zablokovalo diky tomu, ze SEA bylo mensi nez SSA a jeste k tomu basic inicializoval border na $D - svetle modrou (taktez chyba emulatoru pro MS-DOS). Presli jsme na DELPHI 5.0 - podekovani patri Pavlu Vankovi - MZUNITY. 25.6.2000 - Opravena chyba v emulaci ramdisku - spatne jsem mel udelane strankovani RD, pricemz misto datoveho byte jsem tam daval vyssi cast adresy (registr B). Uz funguje CP/M 2.26Z (Yoshin & Vector), ale jeste nejde CP/M KONKURENT, tak to asi nebude jeste to prave orechove - chtelo by to poradnou dokumentaci k ramdisku. Jeste dalsi problem: inkrementace adresoveho citace u RD se provadi po precteni byte nebo pred??? Cteni a zapis RD bylo predelano tak, aby se necetlo a nezapisovalo primo na HDD, ale vyhradi se pro nej 1MB v RAM, ulozi se teprve po ukonceni emulatoru - urychlilo to pristup k RD minimalne 5X. Pridano tlacitko pro vymazani ramdisku. Pri zmene velikosti RD se uz zmeni i velikost souboru na HDD. 29.6.2000 - Znacne vylepseny a take miniaturizovany debugger, ukazuje navic prave vykonavanou instrukci pricesoru (cervene) a jeste nekolik nasledujicich. Dale je mozno emulaci zastavit a krokovat. Opravena chyba ve cteni portu tiskarny (nefungoval kvuli ni Exolon -po par vterinach skocil zpet do hl. menu) - thanks to Jirka Cervinka. Opravena chyba ve cteni VRAM ktera se projevovala u Batman demo kdy je ve 4-barevnem modu, ale cte pritom ze vsech rovin. Kysela ma v emulatoru chybu - hra Exolon ma spravne fungovat ve ctyrbarevnem modu, kdezto jemu jede v 16-ti barvach. Schvalne jsem to prehral na Sharpa a tam jel uplne stejne jako v mem emulatoru - ma totiz spatne mapovani pameti kde pri OUT E0 namapuje pouze VRAM - spravne se ma namapovat jeste CGROM. Chyba je take ve hre Exolon, kde si ale autor prepisu neuvedomil, ze kdyz testuje VRAM tim zpusobem ze zapise do ni na 8000 55h, potom jej precte zpet, udela PUSH - ovsem s tim, ze stack pointer ukazuje do CGROM, a pak jej zase vytahne ze zasobniku a porovna - uz to ale neni byte z VRAM, ale z CGROM - tudiz mu test EXVRAM nesedne... 30.6.2000 - Opravena obsluha klavesnice - drive odchytaval emulator klavesy ikdyz zrovna jeho okno nebylo aktivni. Dale mirna optimalizace cteni z klavesnice - uz se nectou vsechny sloupce, ale opravdu jen ten, co je vybrany (snad to bude o maaalinko rychlejsi ;-) ) Osetrena situace, pri ktere kdyz emulatoru chybela nektera z ROMek, tak zacal otvirat okno pro vyber souboru... ted pri nepritomnosti jakekoliv rom emulator ukonci. 2.7.2000 - Pridano rolovani obrazovky (zatim nechodi na 100%, ale lepsi nez od Kysely...).Opet se rypalo v instrukci OTDR - nejdrive se dekrementuje B, ptom se udela OUT a pak teprv dekrementuje HL. Opraveno rolovani tak, ze kdyz stary ofset je stejny jako novy, tak se nic nedeje. Jediny prg., u ktereho jeste rolovani nechce chodit je MOGMOG2-uvodni cast, jinak nasledujici veci uz jdou: Untouchables DEMO, BASIC, OPENING 800, FXSOUND 1 a 4.... Proc mi nechodi rolovani v modu 640*200 ? 3.7.2000 - Uz roluje i mod 640*200 - chyba byla v tom, ze po rolovani se obnovila jenom polovina videoram. Nektere programy (CP/M) vsak stale nechteji chodit kvuli tomu, ze SEAwindow jelo porad prekreslovani obrazovky, takze v urcitem okamziku nevedel, na ktery povrch ma vykreslovat. 18.8.2000 -Do spodni listy pridan ukazatel, na kolika procentech rychlosti SHARPa emulator prave bezi. 20.8.2000 -Provedena synchronizace obnovovani obrazovky s emulaci Z80. -Odebrano nastaveni refreshe ze setupu a pridana nova volba do menu - Screen. Tudiz pokud emulator bezi na 100%, tak by mel byt refresh ~50Hz. 27.8.2000 -Trosku poopravena synchronizace CPU, HBLNK, VBLNK,... Pocitani jejich cyklu bylo presunuto do hlavni jednotky Z80 - mirny vliv na rychlost (snad). 28.8.2000 -Mirne zrychleny rutiny pro rolovani obrazovky a jeji nasledne prekresleni - uz se zde pracuje pouze s rolovanou casti obrazovky a ne s celou obrazovkou. -Opet trosku upraveno menu Screen, pridana moznost prepinani mezi cernobilym (odstiny sedi) a barevnym zobrazenim. Ve fullscreenu se zde ale vyskytuje problem - nesedi zcela odstiny sede, proto obraz trosku hyri barvami :-( 29.8.2000 -Poopravena emulace procesoru ve ktere u instrukci vykonavajicich volani ci navrat z podprogramu byly nespravne pricitany T-states. Pocet hodinovych impulsu se lisi v zavislosti na tom, zda je splnena podminka, nebo ne. Zatim to bylo provedeno pouze u opkodu bez prefixu, totez bude potreba opravit i u opkodu s prefixem. 3.9.2000 -Pro nejrychlejsi vykreslovani v okne velikosti "normal" je vyhodne nastavit barevnou hloubku na 24 bitu. Pro okno v "double size" je jejlepsi mit nastaveno 16 bitu. Pro fullscreen je to jedno. -Opraven signal pro blikani kurzoru, ktery jsem si rozhazel pri tvorbe "merice rychlosti" -Zacalo se pracovat na spravne emulaci 8253, jeste vsak neni zapojena. 5.9.2000 -Pokusne uz je zapojena emulace 8253 pouze pro CTC1 a CTC2. CTC0 je zatim emulovan postaru (jeste neni vyresen soubeh s jednotkou CPU). Preruseni z CTC0 a CTC2 je take jeste delano postaru... Pro spravnou funkcnost basicu bylo treba zaridit, aby po zapsani hodnoty do CTC1 se vynuloval citac VBLNK. Uz konecne jdou spravne hodiny v CP/M i v basicu - pokud emu jede na 100%, tak jedna sekunda v emu skutecne trva jednu sekundu. 7.9.2000 -Uz je zapojen i CTC0, stara emulace 8253 uz byla definitivne vyhozena. Zbyva uz jen zapojit spravne system preruseni a refresh obrazovky do jednotky CPU a emulator by mel uz chodit se vsemi programy!!! 8.9.2000 -Do emulace zapojen novy system preruseni shodny s prerusenim v SHARPovi. -ROM byla vracena do puv. podoby (byl tam patch pro obejiti nastaveni RTC), nyni uz v ROMce vezi jenom patch pro nahravani z CMT. 9.9.2000 -Opraveno rizeni klavesnice v ve Fullscreen modu kdy emu reagoval akorat na ALT+F4. Nyni by melo fungovat vse vcetne resetu F12 a zpetneho prepnuti do windowed modu. -Do menu Screen pridana moznost skipovani snimku, cimz jde regulovat refresh v rozmezi 12.5 Hz do 50 Hz, standartne po prvnim spusteni emulatoru nastaven na 25 Hz (po dalsim spusteni jiz dle uziv. nastaveni). Lze timto dosahnout priblizne dvounasobneho zrychleni emulatoru. 10.9.2000 -Pridana emulace vstupu GATE u CTC0 8253. -Opraveny (prehozeny) nazvy HBLNK a VBLNK ktere jsem uvadel prohozene - emulace vsak byla spravna... -Mirna (opravdu jen mirna) optimalizace vykreslovani v 700 modu. -Castecna optimalizace celeho kodu emulatoru prevodem vetsiny 8-mi a 16-ti bitovych promennych na 32-bitove promenne -> zrychleni o necelych 10%. -Opraveno nespravne podani odstinu sede v 800 modu. 11.9.2000 -Dalsi, opet mirna optimalizace kodu, vyhazeni prebytecnych veci v obsluze preruseni - zrychleni asi o 5%. -Pridano 'zapamatovani' adresare s MZF soubory, aby i po znovuspusteni emulatoru byl nastaven adresar ve kterem jsme byli naposled. 12.9.2000 -Opravena chyba nacitani ROM z korenoveho adresare disku -Dokoncena emulace WD2797, uz je umoznen zapis na diskety, zatim se ovsem po ukonceni emu zmenena disketa neuklada. 16.9.2000 -Pridana pokusna emulace PSG pomoci DirectSound, zatim je vystup velmi nekvalitni a pomaly... -Opraveno cteni z portu E009-E00F kde ma spravne vracet 7Eh -Opraveno nacitani pomocnych souboru emulatoru 17.9.2000 -Kompletne prekopana emulace PSG - vsechny tri kanaly krome sumu. Emulace hudby z CTC0 8253 zatim zprovoznena neni. Kvalita zvukoveho vystupu se zda byt skoro lepsi nez na SHARpu :-) 18.9.2000 -Pridan FAQ -Opravena chyba kdy pri vypnutem psg se ozyvalo slabe piskani. 21.9.2000 -Opraveno cteni z portu D2, konkretne osmy bit kde jsem misto VBLNK vracel HBLNK. -Opravena emulace 8253, kdy pokud citac nevyprazdnil latch registr tak nemuze provest dalsi prepis hodnoty CTC do latch -Opravena chyba, kdy pri krokovani emulace se neobnovovala obrazovka (resp. obnovovala, ale az po odkrokovani tolika cyklu procesoru umernym 1/50 s) -Opravena chybicka pri ukladani screenshotu 23.9.2000 -Pridana hudba vyuzivana v modu 700 pomoci rizeni GATE u CTC0. Zvuk pomoci portu D2,D3 zatim stale zlobi, proto jeste neni implementovan. 26.9.2000 -Zacatek prace na virtualnim CMT, zatim pouze zavadeci ton.... 28.9.2000 -Okno Setup se zobrazuje nemodalne... 29.9.2000 -U virtualniho CMT dodelano nahrani hlavicky 30.9.2000 -Dokoncen virtualni CMT - prozatim vsak nespolupracuje s nekterymi programy a hrami (napr. Turbocopy, Saboteur1,Antiriad,Cybernoid...) Vetsinou jsou to ty, ktere pri cteni vyuzivaji CTC0, takze tam asi bude chybicka. Z kopirek dobre funguji napr. InterCopy, Load System, ..... Basic 1Z-013 a 1Z-016 jedou take, vetsina vicedilnych her by take nemela mit problem... 1.10.2000 -V Setupu zprovoznena moznost vypnout patch pro nahravani z CMT - v tomto pripade uz je ROMka osvobozena od veskerych patchu, tudiz nahravani funguje presne tak, jak je tomu u SHARPa. 3.10.2000 -Upravena emulace CTC0 - nyni se pri kazdem hodinovem taktu dekrementuje hodnota o 5 a pri cteni nebo zapisu hodnoty CTC se provede hodnota shr (nebo shl) 4. 5.10.2000 -Trosku jsme si hrali s prekreslovanim okna emulatoru v pripade, ze je pres nej tazeno modalni okno. 8.10.2000 -Pridana nastrojova lista do ktere byl mimojine presunut i virt. CMT. 9.10.2000 -Pridana nedokumentovana instrukce Z80 NEG (ED 6C), diky ni uz funguje zavadec u Barbariana2, dale doplneny vsechny nedokum. instr. NEG (ED-XX:4C,54,5C,64,74,7C). 10.10.2000-Pro virt. CMT udelano shodne okno jako pro nahravani s patchem, taktez u nej byla opravena chyba pri nahravani souboru s atributem R/O. 12.10.2000-Do nastrojove listy pridano tlacitko pro zmenu rychlosti virt. CMT - 1200Bd - 2400Bd - 3600 Bd. Vyssi rychlosti byly kvuli nespolehlivosti vyrazeny. 14.10.2000-Do debuggeru byly pridany klavesove ekvivalenty k tlacitkum pro krokovani emulace. F7-step, F8-pause, F9-run -Zprovozneno tlacitko pro vypinani hudby... 15.10.2000-Zprovozneno (alespon castecne) ukladani aktualniho stavu emulatoru. 21.10.2000-Pridana moznost asociovat soubory *.MZF s emulatorem, ktery je ihned spusti. 22.10.2000-Dodelano rizeni rychlosti CPU 26.10.2000-Rychlost CPU a pozice okna se uklada do inifile 30.10.2000-Pri refreshnuti v Memory browseru zustane stejny ukazatel na misto v pameti. 31.10.2000-Pri vypnuti zvuku je ikonka reproduktoru preskrknuta 18.11.2000-Opravena chyba u otvirani FDD image kde nastavoval implicitne adresar, ktery byl vybran pri poslednim spusteni emulatoru a ne adresar, ze ktereho byl otevren posledni soubor. -Trosicku bylo zkrasleno okno About.... -Z menu Help je mozno prohlizet history.txt pomoci NotePadu -Po zavreni okna debuggeru se automaticky spusti emulace a zrusi se breakpoint mode... -Opravena esteticka chyba projevujici se pri spousteni emulatoru - nejdrive se objevil ve stredu obrazovky a pote az na miste, kde se nachazel pri ukonceni. 21.11.2000-Do okna about pridan odkaz na MZUNITY, v tomtez okne vymenena rozmazana fotka SHARPa za jinou :-) -Added the right copyright. Thanks Spyros :-) 25.11.2000-opraveno nastavovani flag bytu 3 a 5 u ins. SCF,CCF,CPL. -Opravena chyba v debuggeru, kdy pri breakpointu se musel udelat nejdrive jeden krok tlacitkem Step a potom teprve sla spustit emulace tlacitkem Run. -Osetreno okenko zadavani breakpointu pri situaci, kdy nebyl zadan breakpoint, nebo jeho delka byla mensi nez 4 znaky. 26.11.2000-Zacala prace na prekopavani debuggeru 27.11.2000-Opet celkove prekopany debugger, moznost menit flag registr u CPU. -Do MZ-800.INI se zapisuje i pozice okna debuggeru 28.11.2000-Do okna about dodelan aktivni na muj mail spoustejici Outlook -Moznost menit vsechny registry pomoci Dblclicku, nebo Enter na registru, ktery se ma menit.