laoo/ng napisał/a:Otóż nie. I nie róbcie kurtyzany z logiki.
Obszar adresowy, który nie jest zdefiniowany powoduje niezdefiniowane zachowanie.
KROPKA.
U1MB definiuje kilka rejestrów, a pozostałe dalej pozostawia w stanie niezdefiniowanym. To, że implementacja się zmieniła, nie ma znaczenia. Nikt tego nie zdefiniował, że tak ma być i przypadkowe działanie nie jest jakimś wytłumaczeniem, że można na tym polegać.
To w takim razie, dlaczego twórcy poważnych emulatorów nie polegają wyłącznie na oficjalnej specyfikacji systemu, a starają się dotrzeć do dokumentacji poszczególnych układów składowych i odtworzyć ich działanie z dokładnością co do cyklu zegara? Tutaj wszystko było podane na tacy, bo oryginalny układ MMU był układem PAL i jego równania są znane. Jakoś liczące się emulatory (nawet czysto programowe) potrafią odtwarzać to zachowanie a kod CPLD w U1MB - nie. Wiele podrobionych układów odbiega zachowaniem właśnie w nieprzewidzianych sytuacjach i jest to powszechnie wykorzystywane do odróżnienia oryginału od podróbki (swojego czasu w Windows Update wyszedł sterownik do układów FT23x, powszechnie stosowanych w wielu urządzeniach z interfejsem USB, który wykrywał podrobione układy i... je uszkadzał, było to zrobione świadomie i z premedytacją). Niestety implementacja MMU w U1MB zachowuje się właśnie jak taka marna podróbka. Montując U1MB wyrzucamy z oryginalnej płyty XE, jeden z jej kluczowych komponentów, by zastąpić go... emulatorem w CPLD, który niby działa prawidłowo, ale inaczej niż oryginał.
stRing napisał/a:Wyobraźcie sobie analogiczną sytuację
Nie trzeba sobie wyobrażać, takie sytuacje miały miejsce - Flight Simulator (nie działał na maszynach "zgodnych z PC", które miały BIOS od innego producenta niż IBM), Quake (źle działał na procesorach Cyrix, które były "zgodne" z x86). W tym drugim przypadku, dobra gra, wyeliminowała z rynku producenta przeciętnego sprzętu (Cyrix używał oznaczeń PR, z których wynikało, że jego procesory są dużo szybsze od procesorów Intela, a Quake chodził na nich dużo wolniej).
takron27 napisał/a:też chciałbym to wiedzieć
No to ja już wiem - tak, błąd (różnica w zachowaniu względem oryginału - jak zwał tak zwał) jest obecny bez względu na wybrany w konfiguratorze U1MB tryb emulacji rozszerzenia pamięci. Dzieje się tak dlatego, że U1MB zastępuje nie tylko EMMU, ale również MMU (większość rozszerzeń go nie ruszała, pozostawiając pierwsze 64 kB nietknięte). Różnica w działaniu dotyczy właśnie emulowanego mapera pamięci podstawowej. Mimo ogólnie dostępnych równań dla tego układu (oryginalnie to też był układ logiki programowalnej - PAL), autorzy odtworzyli jego działanie w CPLD "po swojemu". W ramach oficjalnej specyfikacji, emulowany MMU zachowuje się tak samo jak oryginał, ale już w nieujętych w dokumentacji przypadkach - działa inaczej. Niestety po zainstalowaniu U1MB oryginalny układ "wylatuje" z płyty i nawet po wyłączeniu rozszerzenia pamięci z poziomu konfiguratora, nadal używany jest emulowany układ MMU.