Retro PC - 386DX/486DLC

PGA socket mod na 386 MB KMC-A419-8 ver. 1.0

      30.5.2022 Některé základní desky 386 měly na sobě připájený CPU v provedení SMD. Tato deska se zrovna vyráběla ve 2 variantách, buď s připájeným CPU nebo s PGA paticí. Já mam variantu s připájeným CPU AMD Am386DX-40 a tak mě napadlo, že bych si mohl na desku dopájet PGA patici, abych v ní mohl testovat i jiné CPU. V případě CPU AMD revize C a novější se to navíc zjednodušuje tím, že tyto CPU mají pin FLT# (54), který ho kompletně odpojí od sběrnice a není ho tak třeba vypajovat z desky. Abych mohl dle potřeby přepínat mezi onboard CPU a CPU v patici, přivedl jsem nezapojený pin FLT# na jumper, jehož druhý pin jsem zapájel do GND prokovu footprintu neosazené paměti U21. Jelikož má pin FLT# interní pull-up cca 100 kΩ na VCC (ampérmetrem jsem naměřil proud 46 µA do země) a drátový spoj je poměrně krátký, tak jsem žádný externí pull-up nepřidával. Pokud bych chtěl onboard CPU vyřadit trvale, stačila by malá kapka cínu na propojení pinů FLT# (54) a GND (55) hned vedle.

KMC-A419-8 CPU socket mod with FLT# pin KMC-A419-8 with CPU TX486DLC-40 KMC-A419-8 with CPU TX486DLC-40 KMC-A419-8 with CPU TX486DLC-40 test KMC-A419-8 AMI BIOS setup
socket mod TX486DLC-40 TX486DLC-40 TX486DLC-40 AMI BIOS setup

      Dále jsem na desce rozšířil velikost cache na 256 kB pomocí dalších čtyř 32kB DIL SRAM čipů a vyměnil jsem 8kB TAG SRAM za 32kB TAG SRAM. Metodou pokus-omyl jsem našel správnou kombinaci jumperů: JP5 = on, on, on; JP5 = 1-2 (původní nastavení pro 128 kB cache bylo: JP5 = on, on, off; JP6 = 2-3). UPDATE: našel jsem popis jumperů k desce KMC-40A, která vypadá velmi podobně a má i stejně rozmístěné jumpery. Do desky jsem zkusil osadit CPU TX486DLC-40, když už ho BIOS podporuje a otestoval propustnost paměťového subsystému pomocí DOSového programu CCT386. Jak je vidět, rychlostní skoky nastávají dle očekávání na hranici bloků 256 kB (L2) a 1 kB (L1). Zajímavé je, že 386DX dosahuje při využití cache více bodů než 486DLC s kaskádou L1 a L2 cachí (zřejmě nějaký overhead). Nastavení wait states u RAM nelze v SETUPu měnit, pouze lze ladit nastavení refreshe. V programu Norton SysInfo CPU Benchmark došlo oproti 386DX k nárůstu z 43,0 na 65,4 bodů (o 52%). V programu Norton Diagnostic jsem v System Board Testu zjistil, že na 486DLC neprojde CPU Arithmetic Test, netuším z jakého důvodu, ale jiným programům to zřejmě nevadí. Nakonec jsem ještě do desky nastrkal 8 RAM a FPU IIT 3C87-40, abych mohl spustit Quake. Na hraní to ale opravdu není, ve VGA rozlišení 320 x 200 jsem dosáhl v testu timerefresh 1,067 FPS na 386DX a 1,268 FPS na 486DLC (zrychlení o 19%). Test jsem provedl ještě jednou s lepší VGA kartou Diamond Stealth Pro S3 Vision 928 (místo low-end Relatek RTG3105), ale na výsledek to nemělo podstatný vliv: 1,295 FPS.
      UPDATE1: Od Dušana jsem dostal matematický koprocesor ULSI Math*Co DX US83C87 40 MHz, s kterým se Quake výrazně zrychlil na 1,690 FPS, po přetaktování ISA na 10 MHz ještě o trochu více na 1,725 FPS.
      UPDATE2: Podařilo se mi najít 16k x 4-bit SRAM čip QS8888-20P a tak jsem pro něj na desku dopájel DIL22 patici na pozici U21. V BIOSu v menu "Advanced Chipset Setup" je pak možné nastavit položku "Write Buffer/Back Cache" na "Back". V benchmarku SysInfo a CheckIt se aktivace write-back cache nijak prokazatelně neprojevila, v CCT386 byl dokonce patrný pokles bodů přenosové rychlosti u velkých bloků ze 192 na 153 bodů, ale v Doomu ((doom.exe -timedmeo demo1, FPS = 35*gametics/realtics) jsem zaznamenal drobné zrychlení z 9,14 FPS na 9,46 FPS (+3,5%).

CCT386 test Am386DX-40 with 128kB cache CCT386 test TX486DLC-40 with 1kB L1 cache and 256kB L2 cache Norton SysInfo CPU Benchmark of Am386DX-40 with 256kB cache Norton SysInfo CPU Benchmark of TX486DLC-40 with 1kB L1 cache and 256kB L2 cache Norton Diagnostic CPU Arithmetic Test failen on TX486DLC-40
Am386DX-40, 128kB TX486DLC-40, 256kB Am386DX-40, 256kB TX486DLC-40, 256kB NDiag TX486DLC-40

XTIDE BIOS na 386 MB KMC-A419-8 ver. 1.0

      27.11.2022 Jelikož tato 386 podporuje disky pouze v režimu CHS do 504 MB, rozhodl jsem se vyzkoušet OpenSource projekt XTIDE Universal BIOS, který přidává podporu služeb INT 13h s LBA a umožňuje tak používat disky o kapacitě až 128 GB. Na XTIDE jsem narazil už někdy dříve, ale mylně jsem se domníval, že je to rozšiřující BIOS jen pro určitou 8-bitovou ISA kartu pro PC-XT, které ještě nemá podporu disků v systémovém BIOSu. Avšak XTIDE lze s výhodou používat i na 286, 386, 486, které už podporu disků mají, ale obvykle kapacitně dost limitovanou. Ke vzájemné kolizi by dojít nemělo, stačí v systémovém BIOSu zakázat všechny disky a XTIDE si je inizializuje později.
      Jednou z možností, jak XTIDE do systému přidat, je použít starou síťovou kartu s paticí na BootROM, která umožňuje zavádět OS ze sítě u bezdiskových stanic. Za tímto účelem jsem vytáhl ze šuplíku 10Mb ISA síťovku D-Link DE-250CT, která podporuje 8kB EPROMky, to je tak akorát. XTIDE lze stáhnout už jako předkompilované moduly v několika variantách. Stáhl jsem si soubor ide_386.bin pro platformu 386, který se vejde do 8 kB Varianta ide_386l.bin je větší a obsahuje navíc textové interaktivní menu. Stažený image je nutné napřed zkonfigurovat pomocí utility xtidecfg.com, která také image zarovná na správnou velikost a přepočítá kontrolní součet. Ve výchozím nastavení jsem nepotřeboval nic měnit. Pak jsem image vypálil do 8kB EPROMky MBM2764 programátorem LabProg-48LV, strčil do patice na síťovce a po zapnutí PC se nic nestalo. Dovtípil jsem se, že nejprve bude třeba BootROM nějak povolit. Jelikož karta nemá žádný jumper, ale má sériovou EEPROM, bylo jasné, že se to nastavuje konfigurační utilitou. Tu jsem našel zde, po rozbalení stačí spustit soubor setup250.exe a v menu "Set Up Configuration|Remote Boot" nastavit na Enabled, vybrat volnou adresu pro mapování BootROM (vybral jsem si CC00h) a uložit. Po té už XTIDE normálně naběhnul na konci POSTu.

síťovka D-Link DE-250CT s BootROM XTIDE XTIDE BIOS booting DOS from 10GB HDD Seagate Medalist ST310232A
D-Link DE-250CT boot s XTIDE z HDD

      XTIDE jsem vyzkoušel s několika klasickými disky a SSD s různými výsledky. Jako první jsem testoval HDD Seagate Medalist ST310232A 10 GB. Během detekce se disk 2x rychle po sobě vypne a zapne (asi cold reset disku), což se mi úplně nelíbí. Také při intenzivním zápisu v některých programech se disk začal vypínat a zapínat. V benchmarku CheckIt dosáhl přenosové rychlosti 1,57 MB/s a průměrné přístupové doby 8,3 ms. Jako další jsem vyzkoušel o něco novější Seagate Barracudu 7200.7 ST340014A 40 GB, která se při detekci ani zápisech nevypíná (jen zarachotí hlavama a jinak funguje OK.
      Pak jsem zkusil SSD Transcend TS32GPSD330 32 GB MLC s pasivní redukcí z IDE 44 pinů na IDE 40 pinů, ale XTIDE ho nedetekoval. Ani systémový BIOS ho neuměl použít s ručním nastavením na omezenu velikost 504 MB. Tento SSD mi funguje v desce Abit BX133-Raid na onboard řadiči v soutbridge intel PIIX4, ale nedetekuje se v mém retro PC s Pentiem Pro se soutbridgem intel PIIX3. Netuším proč, podle manuálu by měl SSD podporovat LBA i CHS režim a přenosové režimy PIO 0 - 4. Další SSD Samsung MZMPC032HBCD-000D1 32 GB MLC mSATA v redukci mSATA - IDE 44 pinů z AliExpressu dopadl ještě hůře - zasekl PC během POSTu tak, že se nešlo dostat ani do SETUPu. A to docela zvláštním způsobem, všimněte si vynechaných písmenek, některá zas mají porušený font. Docela by mě zajímalo, jak je možné obraz takto rozbít, když znakový generátor na grafické kartě funguje celkem autonomně (fonty jsou uloženy v EPROMce VGA BIOSu). Zkusil jsem vytáhnout síťovku s XTIDE, ale nemělo to žádný vliv. Jinak tento SSD funguje správně jak v Abit BX133-Raid, tak v Pentiu Pro. Nakonec jsem ještě vyzkoušel Compact Flash kartu Transcend 16G B Ultra 133x v mé redukci CF-IDE a ta fungovala správně. V benchmarku CheckIt dosáhla přenosové rychlosti 1,85 MB/s a průměrné přístupové doby 0,3 ms.

damaged font at POST screen when hung with Samsung MZMPC032HBCD-000D1 SSD 2x COM & LPT & GAME & IDE řadič s čipem Acer M5105 ISA
zásek v POSTu s SSD IDE řadič ISA M5105

      2.12.2022 Na Vogons fóru mě uživatel rasz_pl upozornil na to, že můj IDE řadič má bufferovanou pouze 1/2 sběrnice a že by to třeba mohlo dělat problémy. Naštěstí na desce řadiče je kromě osmice sériových 33Ω odporů i footprint na poctivý buffer (i dříve se takto šetřily náklady). Rozhodl jsem se tedy odpory vypájet a osadil tam obvod SN74LS245. Bohužel to nepřineslo žádnou změnu chování. Až když jsem vyhrabal jiný IDE řadič, tak přestal POST se SSD Samsung tuhnout, avšak stejně se oba SSD v XTIDE nedetekovaly.

vypájení sady odporů 33R výměna odporů za buffer SN74LS245 2x COM & LPT & GAME & IDE řadič s čipem MX16C452QC ISA
vypájení odporů 33Ω připájení SN74LS245 jiný IDE řadič ISA

      Protože mě toto podivné chování SSD vrtá hlavou, vyzkoušel jsem je v dalších 2 starých základních deskách. Ve 486 s ISA řadičem a AMI BIOSem, který už má autodetekci disku, tak se oba detekují s nesprávnou hodnotou cylindrů (15 hlav a 63 sektorů odpovídá) a malou kapacitou, ale nejde z nich bootovat. XTIDE nedetekoval SSD vůbec. V NETmate 386SX s VLSI chipsetem a integrovaným IDE řadičem se oba SSD detekují s menší kapacitou 1834 MB. SSD Transcend lze používat s omezenou kapacitou přes systémový BIOS nebo přes XTIDE s plnou kapacitou. V benchmarku CheckIt dosáhl přenosové rychlosti 693 kB/s a průměrné přístupové doby 1,6 ms. Zatím co SSD Samsung při detekci sice také vypíše kapacitu, ale v zápětí chybu "Error initializing hard disk controller 0" a XTIDE ho nedetekuje vůbec. Pro úplnost jsem ještě v desce KMC-A419-8 vyzkoušel čínskou obousměrnou redukci IDE-SATA s plotnovým SATA diskem Seagate Barracuda 7200.9 ST3160812AS 160 GB, ale chovala se stejně jako mSATA redukce, při detekci jen krátce blikla LED.

Samsung MZMPC032HBCD-000D1 SSD auto detection and error on NETmate 386SX MB Samsung MZMPC032HBCD-000D1 SSD not detected in XTIDE on NETmate 386SX MB
chyba detekce SSD XTIDE netetekuje SSD

      6.12.2022 Jako další krok jsem provedl experiment s bootem DOSu z diskety, na níž jsem nahrál svou utilitu SMB, která m.j. umí na přímo komunikovat s diskem pomocí ATA příkazů. Napřed jsem poslal příkaz IDENTIFY DEVICE a SSD Transcend odpověděl, ale řada položek byla chybná (např. název a S/N disku) a neseděl kontrolní součet. Dále jsem zkusil přečíst sektor 0 (MBR) metodou CHS i LBA a oba prošly bez chyby a přečetl jsem z disku nějaká data. Problém tedy není v tom, že by SSD neuměl pracovat v CHS PIO režimu, což by podle specifikace umět měl.
      V případě SSD Samsung jsem musel postupovat tak, že jsem napřed nabootoval z diskety s odpojeným napájením SSD (datový kabel jsem nechal připojený) a až pak ho připojil. Avšak okamžitě se mi na obrazovce objevily nějaké náhodné znaky, nicméně systém reagoval dále a mohl jsem aspoň poslepu zadávat příkazy. Zajímavé je, že když jsem spustil Mikromanažera, tak ten svou modrou obrazovku se souborovými panely vykresloval bezchybně, ale když jsem se klávesovou kombinací CTRL+O přepnul na DOSovou obrazovku, tak tam byl pořád ten bordel a po přepnutí zpět do manažera jsem zas viděl čisté panely. Spustil jsem tedy SMB s výstupem přesměrovaným do souboru, ale příkaz IDENTIFY DEVICE neprošel. Zrovna jsem sehnal ještě další mSATA SSD AData ASX300S3-64GM-C 64 GB a chová se v redukci stejně jako SSD Samsung. Prostě si asi nějak tato mSATA redukce s tímto řadičem nerozumí elektricky. Vyměnil jsem tedy IDE řadič za ten druhý, s kterým to netuhlo a na něm se disk chová stejně jako SSD Transcend, čili IDENTIFY DEVICE projde, ale vrátí poškozená data, taktéž sektory čte přes CHS i LBA. Je tak logické, že když XTIDE dostane při detekci poškozenou odpověď, tak s diskem dále nepokračuje, chybu je třeba hledat někde na sběrnici. K tomu by se hodil aspoň 24-bitový logický analyzátor, ale mám pouze 8-bitový USBee AX PRO.

Transcend TS32GPSD330 SSD IDENTIFY DEVICE response Transcend TS32GPSD330 SSD READ LBA SECTOR response Transcend TS32GPSD330 SSD READ CHS SECTOR response Samsung MZMPC032HBCD-000D1 SSD screen garbage immediately after SSD powered on Samsung MZMPC032HBCD-000D1 SSD IDENTIFY DEVICE response
Transcend Identify Transcend read LBA Transcend read CHS Samsung disp. trash Samsung Identify

      8.12.2022 Až později jsem si všiml, že v přečtených raw datech ze SSD, jsou všechny MSB nulové. To mě dovedlo k tomuto vláknu, kde uživatel Jon Abbott řešil stejný problém a celý problém vysvětluje: After some basic diagnosis with a volt meter on the IDE cable and visual inspection of the SATA adapter boards today, I think I have an idea about why the MSB is missing. None of the SATA adapters control the -IOCS16 line, so they're really designed for DMA transfer only where the line is ignored. RiscPC doesn't support DMA, only PIO, so it's expecting -IOCS16 to be pulled low if 16bit data is presented on the bus.
      Proměřil jsem tedy multimetrem pin 32 na mSATA redukci a SSD Transcend, přičemž se potvrdilo, že na obou je nezapojený (dle specifikace ATA-2 ještě definovaný je, ve specifikaci ATA-3 byl zrušen). Na IDE řadiči jsem se doměřil, že tento signál IOCS16# jde přímo z konektoru disku (pin 32) na ISA sběrnici (pin D2). Teď už jen zbývá vyřešit, jak chybějící signál IOCS16# vygenerovat. Zkusil jsem narychlo přes 2 diody sloučit signály CS0# a CS1# (IOCS16# je typu otevřený kolektor s pull-upem cca 1 kΩ někde na MB), ale pak SSD vůbec nekomunikoval. Při pohledu na časovací diagram to nebude úplně triviální. Ještě se to komplikuje tím, že signál IOCS16# se nesmí generovat v režimech PIO 3, 4, DMA a navíc se má generovat jen při přístupu k datovému registru (base + 0) a nikoliv k ostatním řídicím a status registrům. To bude vyžadovat nějakou logiku s hradel z celkem 5 signálů CS1#, CS0#, DA2, DA1, DA0.

ATA PIO timing diagram IDE registers table
PIO timing IDE registers

      13.12.2022 Dekodér signálu IOCS16# jsem navrhl ze 2 běžně dostupných logických obvodů 7432 (4 x 2-vstupové hradlo OR) a 7403 (4 x 2-vstupové hradlo NAND s výstupy typu otevřený kolektor). U invertoru tedy musí být pull-up odpor, zatím co výstup pracuje do pull-upu na MB. Obvod jsem narychlo poskládal na kontaktním nepájivém poli a ověřil základní funkčnost s LEDkou na výstupu. Pak jsem na zadní stranu desky IDE řadiče připájel 8 tenkých drátků s potřebnými signály včetně napájení a zapíchal je do nepájka. Zapojení jsem ještě ladil na osciloskopu, ale zobrazení není moc přehledné, neboť na signálu IOCS16# je docela čilá aktivita ze sběrnice a také na ostatních signálech se pořád něco děje i když s diskem zrovna nekomunikuju. Utilitou SMB jsem ověřil správné čtení sektoru a identifikaci, nyní už tam jsou data správně, celých 16 bitů. XTIDE BIOS pak SSD Transcend bez problémů detekoval a nabootoval z něj. V benchmarku CheckIt dosáhl přenosové rychlosti 1,85 MB/s a průměrné přístupové doby 0,1 ms. Co se týče problému s tuhnutím systému a rozbitím obrazu při připojení SSD přes mSATA v redukci na tomto IDE řadiči, tak se nic nezměnilo a se signálem IOCS16# to nijak nesouvisí. Možná nějaký problém s napěťovými úrovněmi nebo timingem. Předpokládám, že na druhém IDE řadiči pojedou mSATA SSD bez problémů. Plánuju vyrobit malý plošňáček s SMD hradly, který by se připájel zezadu IDE řadiče přímo na vyčuhující piny IDE konektoru a k tomu odněkud 1 drátkem dovedl 5V napájení. Výstup IOCS16# signálu by šel přes jumper, aby ho bylo možno v případě potřeby odpojit.

IOCS16# signal decoder schematic

MB and IDE controller with attached IOCS16# decoder MB and IDE controller with attached IOCS16# decoder-detailed
IOCS16# dekodér IOCS16# dekodér

      Z nostalgie jsem zkusil na SSD Transcend nainstalovat Windows 95 OSR2. Instalační soubory jsem si předem nakopíroval na SSD a spustil instalátor z DOSu: setup.exe /is /ig /IW (přehled přepínačů setupu je zde). Instalace trvala asi 45 minut. Windows nastartují za 26 s (měřím do okamžiku, kdy se ukazatel myši změní z přesýpaček na šipku) a jsou docela responzivní. Když to srovnám proti mému prvnímu PC s 486DX4/100 a plotnovým diskem WD 630 MB, tak to bylo docela utrpení za nekonečného hrabání disku. Při nečinnosti je vytížení CPU kolem 1% a je alokováno 9,6 MB RAM. Spuštění Internet Exploreru trvá asi 5 s a s prázdnou stránkou se spotřeba paměti zvýší na 13,7 MB.

Windows 95 OSR2 Setup phase 1 Windows 95 OSR2 Setup phase 2 Windows 95 OSR2 Setup phase 3 Windows 95 OSR2 booted, System Monitor
instalátor Windows 95 instalátor Windows 95 instalátor Windows 95 běžící Windows 95

Oprava Paradise VGA WD90C00-JK ISA

      16.9.2022 Od Dušana jsem dostal na hraní směsici různých starých PC karet a nefunkční 386 MB - na ten se ještě podívám. Mezi tím také byla nefunkční grafická ISA karta Paradise VGA čipem WD90C00-JK a 256 kB VRAM. Když jsem ji zastrčil do slotu, tak deska vypípávala stejný chybový kód, jako kdyby v ní žádná VGA karta nebyla. Zkusil jsem napřed pomocí programátoru LabProg-48LV přečíst video BIOS ze dvou 16kB OTP EPROMek a obsah 2 programovatelných obvodů dekodérů PAL - bez problémů. Dále jsem změřil výstupy všech 4 krystalových oscilátorů a naměřil odpovídající frekvence s amplitudou cca 2,5 - 4,5 Vpp. Také jsem osciloskopem očuchal piny grafického čipu, kde jsem viděl aktivitu na adresové a datové sběrnici, ale žádnou aktivitu směrem k VRAM (MA0-8, MD0-15) a do RAMDACu (VID0-7), což indikovalo, že čip je asi mrtvý.
      Jelikož jsem měl v šuplíku vypájený grafický čip PVGA1A-JK, který by měl být velmi podobný a podle datasheetu je pinově kompatabilní (někde jsem četl, že ho Western Digital při koupi Paradise Systems patrně jen přejmenoval), tak jsem se kartě ještě rozhodl dát šanci. Naivně jsem si myslel, že jen přepájím tento PLCC100 čip a bude to fungovat, ale tak jednoduché to nebylo. Po výměně jsem stále dostával stejné pípání, jako že VGA není přítomna. Čuchal jsem znovu osciloskopem a nyní už byla vidět aktivita na sběrnici VRAM, ale do RAMDACu nešlo pořád nic, ani žádné HSYNC, VSYNC pulsy. VRAM jsem zkusil vyměnit, ale žádná změna. Pojal jsem podezření, že chyba bude asi v nějakém z hradel 74xx, dokonce i všechny odpory jsem přeměřil. Vypájel jsem pomocí vyhřívané odsávačky celkem 11 hradel 74xx a každý obvod otestoval, ale žádný vadný jsem nenašel, takže jsem je zas vrátil zpět. Kupodivu se ale chování karty změnilo - deska ani nepípla a obraz nikde, no čím dál lepší. Tak jsem zastrčil do MB i POST kartu a viděl, že se AMI BIOS pořád točí v nějaké smyčce, kde se rychle střídalo pár POST kódů. Když jsem vyjmul jeden z čipů video BIOSu, tak k zaseknutí nedocházelo. Napadlo mě tedy, že asi stávající video BIOS nebude se starším grafickým čipem kompatabilní. Podařilo se mi najít image video BIOSu pro PVGA1A-JK a tak jsem vzal 2 EPROMky Am27128A, vymazal je UV lampou, naprogramoval, strčil do karty a ejhle, ono to bootuje s obrazem :) Projel jsem testy všech video módů v Norton Diagnosticu a CheckItu a v pořádku. Kartu by šlo doosadit na 512 kB VRAM, ale UniVBE ji nepodporuje, takže vyšší rozlišení by využily jen DOSové programy přímo podporující PVGA.

Paradise VGA WD90C00-JK ISA Paradise VGA WD90C00-JK ISA bez 74xx hradel
po výměně WD90C00-JK PVGA bez 74xx hradel



Zpět

Aktualizováno 3.1.2023 v 4:28