Sinclair ZX80 RAM test

Louis Seidelmann naprogramoval a poslal mi velmi zajímavý RAM test, o který nemá problém se podělit i s ostatními. RAM test je určený pro interní statické paměti i dynamické paměti, které jsou obvyklou součástí rozšiřujících RAM packů, ale dá se v nejnovější 3. verzi bez problémů použít i na test větších statických RAM v moderních klonech. Obrovskou výhodou je, že je test naprosto autonomní, stačí prohodit ROM za EPROM a vaše „podezřelá“ RAM může být „úplně na mraky“, protože RAM test ke svému provozu vůbec žádnou RAM nepotřebuje (ale samozřejmě ji pak detekuje a vypisuje jako vadnou). I přes zdánlivou jednoduchost kreslí velice přehledně na obrazovku. Mám rád programy, které jsou nejen užitečné, ale i hezké.

LouisSeidelmann_ZX80RAMtest_Title   LouisSeidelmann_ZX80RAMtest_MosaicError1

Program se vlézá do 2 kB EPROM, takže můžete použít i jednu jedinou 2716 ve vhodném adaptéru nebo jej samozřejmě naprogramovat do čehokoli, co ve Vašem ZX80 používáte. Do originálu se samozřejmě nejlépe hodí EPROM TMS2532 nebo MCM68764.

Po spuštění se program dotáže na typ testu (umí 2) a velikost vaší RAM.

LouisSeidelmann_ZX80RAMtest_Title   LouisSeidelmann_ZX80RAMtest_RAMSizeSelect

Následně se spustí vlastní testování, které v případě mosaic testu nekreslí na obrazovku, zatímco v případě fetch testu vidíte, pokud je vše v pořádku, 4 tenké svislé linky. Po proběhnutí jednoho kola testu se na chvíli zobrazí výsledek a test pokračuje dál. Podle Louise je ideální mít test spuštěný třeba několik hodin, abyste měli úplnou jistotu. Test lze přerušit klávesou SPACE nebo Enter kdykoli, kdy se něco zobrazuje na obrazovce.

LouisSeidelmann_ZX80RAMtest_TestOK

Mosaic test

Test postupně střídavě zaplňuje paměť obsahem různých mozaik invertovaných podle adresových bitů. Test je primárně určen pro klasické staré packy s 2114 nebo 4116, tomu i odpovídá výpis chyb. Předpokládá se, že pack 16kB je osazen DRAM a má vlastní refresh čítač, proto se v každé mozaice na potřebný počet cyklů test co nejvíc zpomaluje posloupností instrukcí call, které mají 17 taktů na jediný cyklus refresh (postupně dvakrát tímtéž prográmkem uloženým na dvou místech za sebou, aby se vyloučil refresh čtením programu). Při volbě menšího packu se s refresh cykly nijak nemanipuluje. Sestavy bitů sdružených do čtveřic ve výpisech chyb mají smysl u 2114 na základní desce a v packu Sinclair 1-3kB.

LouisSeidelmann_ZX80RAMtest_MosaicError1   LouisSeidelmann_ZX80RAMtest_MosaicError2

Fetch M1 test

Fetch test není zaměřen na uchování obsahu, ale na rychlost přístupu při rychlejším čtení pamětí, zvláště pokud jejich katalogové údaje budí nejistotu. V levé části svislých pruhů zobrazuje výsledek kontrolního čtení opcode 0x17 a v pravé opcode 0xE8. V každém půlsnímku se zobrazí stránka po sobě jdoucích 256 adres paměti – na příslušnou adresu je uložen opcode 0xE8 a na předchozí adresu je uložen opcode 0x17 a na tu se pak případně skočí. Pokud se opcode přečte jako chybný, zobrazí se místo dvou teček vodorovná čárka a spuštění programu v RAM se na této adrese vynechá. V následujícím půlsnímku je testována další stránka 256 adres a takto se otestuje počet stránek odpovídající velikosti packu, pak se test opakuje od první stránky. Mezi dvěma výpisy stavu testu se otestuje 256 stránek. Pokud je v čipu 4116 vadný například jeden čtecí zesilovač, je na obrazovce ve svislých pruzích na dvou místech vzdálených od sebe 128 řádků trvale vodorovný proužek. Pokud je vadná jen jedna buňka, blikne na jednom místě proužek čtyřikrát mezi dvěma výpisy stavu testu. Pokud se jedná o první adresu v packu, skáče se přímo na opcode 0xe8, zde je opcode 0x17 proveden už v EPROM (kontrolní čtení je zde vždy zobrazeno jako OK). U všech packů se na poslední platné adrese netestuje opcode 0x17, ale pouze 0xE8. Pokud kontrolní čtení obou instrukcí projde, ale instrukce se pak v RAM neprovedou správně a test přitom nezamrzne, testování ihned končí a už se jen zobrazuje výsledek – u packů s 2114 i informaci o segmentech RAM, ve kterých se vyskytly problémy. Pravděpodobnost správného vyhodnocení provedení programu v RAM a nezamrznutí testu vinou chybného čtení RAM při fetch je zvýšena výběrem vhodné dvojice bitově komplementárních instrukcí tvořících program (nejbližší instrukce s nerozlišeným efektem mají Hammingovu vzdálenost 2), kontrolou mj. i s pomocí registru r jako čítače provedených instrukcí a úvodním naplněním celého packu nepodmíněnou instrukcí ret. Tak jako tak je to ovšem trochu i věc náhody.

LouisSeidelmann_ZX80RAMtest_FetchTest   LouisSeidelmann_ZX80RAMtest_FetchError1

RAM test jsem zkoušel na mojí replice ZX80, prototypové replice s NMI generátorem i novém ZX80 Core s interní RAM, několika různými RAM packy i mým RAM adaptérem a šlapal všude bez problémů. Nepodařilo se mi najít žádnou vadnou RAM. Chybu jsem zasimuloval pouze úplným vytažením RAM. Občas jsem zaznamenal drobně rozsynchronizované textové řádky, ale domnívám se, že spíš mám nějaký časovací trabl já (pokusničím s HCT a ACT logikou). V emulátoru EightyOne mi test nejel, resp. měl „domršené“ znaky, protože EightyOne se snaží různě nastavovat znakovou sadu a s takto atypickou ROM asi nepočítá.

Binární kód včetně zdrojového kódu můžete stáhnout zde.

A na závěr ještě pár autentických obrázků přímo od Louise Seidelmanna.

1 Main menu   2 Mosaic menu   3 Run message - mosaic 16kB

4 Wrong 4116 chip bit 3 message   5 Fetch menu   6 Fetch run - visible bugs in pack

7 Run message - fetch 16kB   8 Wrong read opcode message   9 Wrong read opcode detected, fetch error detected message

10 after break by SP main menu   11 Mosaic menu   12 Run message - mosaic 1kB

13 Run message - fetch 1kB   14 Fetch run - bugs free   15 Main menu - only one 2114 chip present on board

16 Wrong 2114 chip message    17 Run message - mosaic 4kB - only one 2114 chip  present   18 Wrong all 2114 chips in 4kB pack message - reason is no address selector

19 Run message - mosaic 16kB   20 Wrong all 4116 chips message - no present any 4116   21 Fetch run - only one 2114 chip present

22 Run message - fetch 1kB   23 Wrong read opcode message

Příspěvek byl publikován v rubrice Sinclair, ZX80, ZX81. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *