SAPI-1

      3.3.2023 Od Dušana jsem dostal z likvidace nějaké staré teslácké karty a papírovou dokumentaci pocházející z historického mikropočítačového systému CHP 3000 (produkt bývalého Chemoprojektu), který byl odrůdou SAPI-1 (Systém Automatického Pořizování Informací) postaveného na 8-bitovém CPU MHB8080A. Větší část karet a dílů jsem podaroval a povyměňoval, část jsem si ale nechal, co kdyby někdy náhodou. Přecejen jsou středem mého zájmu spíše PCčka, na kterých jsem vyrůstal. Ani nemám žádný backplane/sběrnici, do které bych karty nastrkal a mohl je aspoň vyzkoušet...

      26.10.2024 Na Bytefestu 2024 jsem se potkal s českýma SAPIstama Petrem, Liborem a Martinem a zjistil, že kolem SAPI žije docela aktivní komunita, která shromažďuje dokumentaci, vyrábí repliky a dokonce vyvíjí řadu nových karet a periferií usnadňujících použití a konektivitu s moderním světem. Některé se snaží striktně o historický look s kompletně THT součástkami, jiné jsou nové koncepce s nejrůznějšími MCU či CPLD v SMT. Od Libora jsem dostal plošňáky na moderní verzi sběrnice ARB-1 ImBus9 rev. 1.1 napájenou z ATX PC zdroje a textmode grafickou kartu (64 x 20 znaků) s analogovým RGB VGA výstupem AND-1V rev. 2.3 (vlákno o jejím vzniku je zde), což mě namotivovalo zkusit si rozjet svoje SAPÍčko. Dobré čtení na úvod je Martinův seriál Postavte si počítač SAPI-1. Záhy jsem narazil na problém s FRB konektory, které jsou u těhle karet všudypřítomné (zejména 2-řadé, 62-pinové). Kdysi mi toho prošlo rukama spousta, ale nevím, kam jsem je zašantročil. Možná jsem většinu vyhodil či rozdal. Našel jsem zatím jen 1 samici přímou a 1 samce úhlového do PCB. Na sběrnici ARB-1 je celkem 9 samic, ale stačily by pro začátek osadit aspoň 3 pro základní karty systému.

      16.11.2024 Na radioburze ve Strašnicích jsem od RaC Vonka, který tam pravidelně jezdí, sehnal do grafiky AND-1V chybějící rychlé TTL obvody 74ALSxxx kromě posuvného registru 74ALS166. Ten lze experimentálně nahradit SN74LS166AN od TI např. z Mouseru, což bylo několika uživateli ověřeno. Já jsem koupil od Vonky na pokus 74LS166 nějakého neznámého výrobce, tak uvidíme. Jinak je striktně doporučeno na vyznačených místech použít rychlé obvody ALS kvůli těsnému časování. FRB konektory, ani žádnou desku s nima jsem tam bohužel neobjevil. Asi už většina skončila ve šrotu na zlato a za nesmysle na aukru je kupovat nebudu. Následně mi kolega z práce daroval pár modrých FRB, převážně úhlových samců, ale našla se tam i 1 úhlová samice, kterou jsem zapájel na krajní pozici K9. To se hodí při ladění na stole, kdy lze zkoumanou kartu zastrčit do krajní pozice vodorovně. Bud shánět dál.

      20.11.2024 V neděli jsem zapájel většinu součástek na grafiku AND-1V a dneska jsem dojel do GM pro chybějící odpory 430 Ω. Naprogramoval jsem image fontu do paměti EPROM D27C256-20 (generátor znaků) a zkusil zapnout samotnou kartu ve sběrnici. Na monitoru se zobrazily znaky dle náhodného obsahu VRAM, tudíž alespoň autonomní generátorová část obvodů běží a použitý 74LS166 to zdá se stíhá.

nová sběrnice ARB-1 ImBUS9 textmode grafická karta s VGA výstupem AND-1V textmode grafická karta s VGA výstupem AND-1V AND-1V - náhodný obsah VRAM po zapnutí
sběrnice ARB-1 ImBUS9 osazená AND-1V osazená AND-1V VRAM po zapnutí

      21.11.2024 Dnes jsem s Jardou směnil přebytek FRB samců a získal 7 zelených přímých samic, takže jsem mohl kompletně doosadit sběrnici ARB-1 ImBus9 a můžu ji naládovat kartama a zkusit něco rozsvítit na obrazovce. Avšak záhy jsem zjistil, že to nebude tak jednoduché, protože systém SAPI zahrnoval několik ucelených sestav (ZPS - Základní Počítačová Sestava), jejichž některé díly (desky) nešlo libovolně vzájemně seskupovat, byť jsou všechny kompatabilní z pohledu sběrnice. Také programové vybavení existovalo ve více verzích, které nejsou vzájemně kompatabilní a vyžadují specifické kombinace a verze karet. Pro nováčka je to kapánek nepřehledný guláš, v kterém se teprve rozkoukávám a načítám informace. Pro ostatní nezasvěcené to zkusím trochu zjednodušeně přiblížit ze svého pohledu.
      Základem SAPI je procesorová karta JPR-1x (Jednotka Programového Řízení). Jak jsem zjistil, existovala původně ve 3 verzích, které se podstatně lišily: JPR-1 s CPU 8080, JPR-1A s CPU 8080 a JPR-1Z s CPU Z80 (resp. DeDeRónským U880). Takt CPU je 2 MHz. Procesor Z80 vychází z 8080, přidává nové instrukce a je s ním zpětně kompatabilní. Ještě existuje 8085, který také přidává zas pár jiných instrukcí a je taky zpětně kompatabilní s 8080, ale není kompatabilní se Z80. Rozdíly mezi 8080 a Z80 jsou popsány např. zde. K tomu ještě přibylo několik nových procesorových karet, které vytvořili naši SAPIsti, viz přehled v tabulce níže.
      Já mám pouze 1 desku JPR-1. Ta je koncipovaná jako samostatně funkční jednodeskový mikropočítač, tzn. obsahuje CPU, oscilátor a nutné podpůrné obvody, paměť programu (4 patice pro EPROMky 2708 / 2716 - až 8 kB), paměť SRAM (2 x MHB2114 - 1 kB), dekodér adres a tři vstupní a 3 výstupní 8-bitové paměťově mapované I/O porty (MH3212) vyvedené na externí FRB konektory X2, X3. U pamětí 2708 a 2716 je třeba dát pozor na rozdílné napájení a nastavit správně propojky JP2 a JP3 na desce. 2708 (1 kB) používá stejně jako CPU 3 napěťové úrovně +5 V, -5 V a +12 V, zatím co novější 2716 (2 kB) už jen +5 V. Lze také osadit EPROM 2732 (4 kB), z které se využije horní polovina adresního prostoru (pin A11 je připojen na +5 V) nebo EEPROM 28C16 (2 kB), která se hodí pro rychlejší přepis FW bez nutnosti zdlouhavého mazání UV světlem. Pamět lze dále rozšířit pomocí karet REM-1 (až 16 kB EPROM, až 8 kB SRAM), RAM-1 (16 / 32 / 48 kB DRAM) a RMD-1(Z) (stránkovaný RAM-disk 256 kB / 1 MB).
      Firmware mohl být napsaný bez OS přímo pro konkrétní aplikaci (bare metal) nebo se používal standardní MONITOR, který se vešel do 2 kB spolu s MIKOSem (MIkro Kazetový Operační Systém, další 2 kB) či Mikro BASICem. Tyto SW spolupracují pouze se starší textmode grafickou kartou AND-1 (40 x 24 znaků s kompozitním video výstupem), kterou sice mám taky, ale preferuju zobrazování na VGA monitoru. Také se liší podpora 2 typů klávesnic: MONITOR 4.0 podporuje pouze jednoduchou maticovou membránovou klávesnici ANK-1, zatím co MONITOR 4.1 a 5.0 podporuje velké klávesnice s paralelním výstupem Consul C259.11 / C262.3. Ty lze snadno nahradit běžnou PC klávesnicí s PS/2 konektorem pomocí adaptéru EKL-1, kterou si také stavím. Zde je popsaná mapa paměti JPR-1.
      Na deskách se běžně dělaly HW úpravy popsané v odkazu výše hned pod mapou paměti. Na mé desce JPR-1 byla provedena nějaká nestandardní úprava, která se točí kolem obvodu MH8224 (hodinový obvod pro CPU): pin 6 (Φ2 TTL - výstup hodin CPU) je vyveden na pin 11 vnějšího FRB konektoru X3 (jeho původní cestička je přeškrábnutá) a pin 12 (OSC - výstup oscilátoru) je vyveden na pin 22 sběrnicového FRB konektoru X1 (běžně na kartě i na sběrnici nezapojený), takže to by nemělo mít na nic vliv.

moje procesorová deska JPR-1-top moje procesorová deska JPR-1-bottom
JPR-1 top JPR-1 bottom

      Naproti tomu procesorové karty JPR-1A a JPR-1Z nemají vlastní paměť RAM a tudíž vyžadují do sestavy další paměťovou kartu, např. RAM-1A, která se od RAM-1 liší pouze obsahem paměti PROM MH74S287 adresového dekodéru. Na procesorové kartě je akorát 2/4kB bootROM (2 patice pro EPROMky 2708 / 2716), která má jinak řešený adresový dekodér, jenž umožňuje zápisem do I/O portu tuto paměť po použití vypnout a uvolnit tak celý adresní prostor pro RAM. Také změnilo ovládání 8-bitových I/O portů, které už nejsou přístupné jako MMIO (CPU signály MR#/MW#), ale přesunuly se do I/O prostoru (00 - 03, CPU signály IOR#/IOW#) a tudíž se s nimi pracuje pomocí instrukcí IN/OUT. Dále byla tato sestava běžně doplněna řadičem disket RPD-1, z nichž se bootoval dospělý OS CP/M 2.2. Ten vyžadoval novější textmode grafickou kartu AND-1A (40 x 20/24 znaků) / AND-1Z (64 x 20 znaků) nebo novou AND-1V a klávesnici Consul. S jistým úsilím lze prý předělat JPR-1 na JPR-1A, ale je otázka, jestli se spíš nevyplatí si postavit některou z moderních verzí procesorových karet. Zde je přehled, co je k dispozici a co by mělo spolu chodit.

CPU karta CPU ROM RAM VGA FW/OS klávesnice
JPR-1 MHB8080A 0 - 8 kB 0 - 1 kB AND-1 / AND-1B** MONITOR+/MIKOS-1 ANK-1/Consul
JPR-1S* MHB8080A 0 - 8 kB 0 - 48 kB AND-1x / DGD-1V** / BGP-1S** MikroBIOS ANK-1
JPR-1A MHB8080A 0 - 2 kB  - / RAM-1A AND-1A / AND-1Z / AND-1V** CP/M Consul
JPR-1Z Z80 0 - 2 kB  - / RAM-1A AND-1A / AND-1Z / AND-1V** CP/M Consul
JPR-1ZI* Z80 0 - 8 kB  - / RAM-1A AND-1A / AND-1Z / AND-1V** CP/M Consul
JPR-1V* Z80 @4MHz 0 - 4 kB  - / RAM-1A AND-1V**, DGD-1V** CP/M Consul
* procesorové karty nové konstrukce
** grafické karty nové konstrukce s výstupem na VGA monitor

      29.11.2024 Jelikož mám nestandardní kombinaci procesorové karty a grafiky, nemůžu jednoduše použít původní SW. Zkusil jsem schválně do EPROMky napálit starý MONITOR 4.0, ale nic jsem neviděl. Abych mohl novou grafiku otestovat, zkusil jsem si napsat vlastní prográmek. Pro 8080 se dá psát jak v assembleru, např. TASM (Telemark Assembler) 3.2, tak v C - našel jsem poměrně živý projekt Z88DK, který vychází z SDCC. Součástí balíku jsou i konfigurace a start-up soubory pro různé historické počítače (i z ČSSR a SSSR), ale pro SAPI zatím chybí. Zkusil jsem svůj testovací prográmek (jen kopíruje text a zapisuje do VRAM grafické karty na adrese F800h) naslepo zkompilovat s profilem pro ruský Mikro80 a náhodou to běželo :).
      Od Libora jsem se pak dozvěděl, že pro svou novou desku JPR-1S (kompatabilní s JPR-1) má napsaný testovací MikroBIOS, který vychází z kódu Atari Falcon Monitoru 6.1. Je napsaný v TASM a vejde se do 8 kB ROM. Zdroják jsem bez problémů přeložil a napálil do 4 EPROMek D2732A-2, ale neběžel, i když jsem měl správně přenastavenou adresu VRAM na 3800h a jumperem vypnutý signál MAP1. Systém však vykazoval poněkud náhodné chování po zapnutí či resetu, občas se totiž stalo, že se na obrazovce náhodně měnily nějaké znaky a jindy se jen staticky zobrazoval náhodný obsah VRAM. Jak jsem tak do desky různě dloubal, zatlačoval EPROMky do patic a pod., tak to vykazovalo jistou citlivost zejména u čipů SRAM MHB2114. Dokonce i MikroBIOS jednou naběhnul. Zjistil jsem, že problém byl v zoxidovaných vývodech SRAMek, které byly podivně zašedlé. Tak jsem je očistil a ejhle, MikroBIOS už startuje po každém zapnutí. Jediný problém je, že má obsluhu klávesnice pro ANK-1 a nikoliv Consul, to si budu muset přepsat sám (kbd_driver.asm). Zajímavé, že můj testovací prográmek v C běžel v pohodě. On totiž běží i s vydloubnutýma SRAMkama, zřejmě to kompilátor zoptimalizoval tak, že RAM není vůbec třeba...

nová sběrnice ARB-1 ImBUS9 s komplet osazenými FRB konektory AND-1V - první výpis na obrazovku SAPI MikroBIOS 2.1
sběrnice ARB-1 ImBUS9 výpis na obrazovku SAPI MikroBIOS 2.1

      4.12.2024 Další možností by bylo upravit zdroják původního MONITORu, aby spolupracoval s grafikou AND-1V. Přeložit ho byl ale kapánek oříšek. Je totiž napsaný pro prehistorický Micro$oft MACRO-80 Assembler (M80), který běží pod CP/M a jehož syntaxi novější assemblery na PC nedávají. Takže napřed jsem potřeboval vyřešit, jak spustit pod DOSem či Windows programy pro CP/M. To lze provést snadno pomocí NTVCM (DOS/Win32/Linux) nebo CP/M Playeru (Win32), kde se jako parametr uvede jméno CP/M programu a jeho parametry. Na dotaz linkeru je třeba ručně odpovědět "N" - nic nepřesouvat. Výsledný soubor (COM i HEX) je větší, než by odpovídalo velikosti kódu, je do něj zahrnutá nějaká alokovaná paměť na konci, obvykle vyplněná 0. Takže výsledný soubor je ještě třeba oříznout na velikost odpovídající kapacitě EPROM. Zde je ukázka úspěšného překladu původního zdrojáku MONITOR V4.0F:


C:\CPMTOOLS> NTVCM.EXE M80 =MON40F.MAC/N

No Fatal error(s)

C:\CPMTOOLS> NTVCM.EXE L80 MON40F/P:0,MON40F/N/X/Y/E

Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft

Data    4000    4000    <    0>
Program 0000    4400    <17408>

36656 Bytes Free
[0000   4000       67]
Origin below loader memory, move anyway(Y or N)?n

C:\CPMTOOLS> dir MON4*
04.12.2024  22:47            41 984 MON40F.HEX
04.12.2024  20:58            38 021 MON40F.MAC
04.12.2024  22:47             2 560 MON40F.REL
04.12.2024  22:47               128 MON40F.SYM
               4 File(s)         82 693 bytes

      8.12.2024 Nakonec jsem přece jen našel nativní assembler umožňující překlad MONITORu bez obezliček VM. Je to ZMAC - Z-80 Macro Cross Assembler a LD80 linker, ale ten není pro tento případ třeba, ZMAC umí generovat celou řadu výstupních formátů včetně BIN, HEX, dokonce i WAV soubor pro nějakou páskovou mechaniku. ZMAC běží na Win32 a protože je OpenSource, zkompiloval jsem si i verzi pro DOS. Pro překlad 8080 kódu je třeba použít parametr "-8". Při překladu MONITORu jsem narazil na 2 podivné chyby, kdy se překladači nějak nepozdávaly labely. Nevím přesně proč, ale když jsem ve zdrojáku nahradil label "PO" za "POUT", tak obě chyby zmizely a kód se správně přeložil. Výslednou binárku jsem porovnal s výstupem M80 a jsou stejné. Zde je podrobnější a stručný tabulkový přehled instrukcí CPU 8080 a přímé srovnání s instrukcemi Z80.


ZMAC.EXE -8 MON40F.MAC
MON40F.MAC(223) : Syntax error
        JMP     PO      ; PUNCH OUTPUT 

MON40F.MAC(96) : Phase error - $0002 changed from $00 to $04
        JMP     COLD    ; COLD START

      9.12.2024 Od Jardy jsem dostal 30-pinovou úhlovou FRB samičku a mohl tak doosadit adaptér pro PS/2 klávesnici EKL-1. MCU AT89C2051 už mám naprogramovaný. Zbývají mi ještě 3 nevyužité PCB, když můžu poslat. Zatím jsem jen otestoval základní funkci připojením 5V napájení a PS/2 klávesnice a sledováním signálu STROBE#, kde chodí při trvalém stisku klávesy krátké pulsy s frekvencí 15 Hz (autorepeat).

      10.12.2024 Když jsem nasadil hotovou redukci EKL-1 na konektor X2 své procesorové karty JPR-1, nastalo poněkud rozčarování, protože klávesnice nijak nereagovala. Měřením jsem zjistil, že redukce nedostává správné napájecí napětí 5 V, ale pouze asi 1,8 V. Začal jsem tedy pátrat ve schématu JPR-1 a zjistil, že na konektoru X2 nikde 5 V není a pin 22, který EKL-1 používá jako napájecí, tak vede někam na vstup STROBE (pin 11) obvodu portu E17 MH3212 a dále přes pull-up odpor 4,7 kΩ. Z toho se nemůže MCU natož klávesnice uživit. Jak jsem zjistil, tak na dobových JPR-1x se běžně dělala úprava, že se tento pull-up odpor přemostil a tak se vyvedlo ven 5V napájení. Já jsem si na svou JPR-1 dopájel jumper ze strany spojů. Po této úpravě klávesnice ožila.
      Dále jsem potřeboval nějak upravit Liborův MikroBIOS, protože ten zas počítá pouze s maticovou klávesnicí ANK-1. Abych mohl kód snáze ladit, potřeboval jsem nejprve MikroBIOS zmenšit, abych se vešel do 1 či 2 EEPROM 28C16 (2 / 4 kB) a nemusel zdlouhavě mazat EPROMky. Pomocí IFDEFů jsem ve zdrojácích vyřadil méně důležité moduly a rutiny, čímž se mi podařilo velikost zmenšit na 2437 B, pod 2 kB se už ale jednoduše dostat nejde. Driver klávesnice kbd_driver.asm jsem kompletně nahradil rutinou pro čtení kódu z klávesnice Consul ze zdrojáku MONITORu 5.0 (viz label CI@@). Ta by měla podle tabulky kódů posílat standardní 7-bitové ASCII znaky. Zatím jsem moc nezkoumal, jak to funguje, jen jsem to zkompiloval, nahrál do 2 EEPROMek a kupodivu to i nějak chodí. Akorát nefunguje psaní malých písmen (musím psát se SHIFTem nebo CapsLockem.

      13.12.2024 Dokončil jsem úpravy zdrojáků Liborova MikroBIOSu, kde jsem na začátek souboru definice.asm přidal volby podmíněného překladu jednotlivých modulů a volbu ovladače klávesnice (stačí daný řádek zakomentovat středníkem). Do obsluhy klávesnice Consul v souboru kbd_consul.asm jsem přidal převod malých písmen na velká.


#define KBD_CONSUL      ; zkompiluj s driverem klávesnice Consul místo ANK-1
#define USE_HELP        ; zkompiluj s nápovědou k příkazům ~683B
#define USE_ASM         ; zkompiluj s podporou assembly/disassembly ~1046B
#define USE_HEX_BOOT    ; zkompiluj se serial HEX bootloaderem ~751B
#define USE_TEST_RAM    ; zkompiluj s testem RAM ~257B
#define USE_TEST_BGP    ; zkompiluj s testem grafické karty BGP ~1074B
#define USE_TEST_DGD    ; zkompiluj s testem grafické karty DGD ~762B
#define USE_TEST_AND1   ; zkompiluj s testem textmode grafických karet AND-1x ~824B
                        ; vypnutím všech testů, bootloaderu, asm a helpu lze snížit velikost kódu na ~2,2kB

      Zkompiloval jsem si plnou verzi se všemi moduly do 4 EPROMek D2732A-2 (využito 7334 B) a hraju si s tím. Do sběrnice jsem zkusil píchnout další kartu Z-130 - zálohovaná SRAM 4 kB. Původní shnilé NiCd akumulátory jsem odpájel a vyhodil. MikroBIOS paměť našel a zobrazil v paměťové mapě. Pustil jsem na něj příkaz "TEST RAM D000 DFFF" a zatím běží bez chyby.
      Postupně jsem vyzkoušel další paměťové karty: druhou Z-130, která byla nastavená na adresy C000 - CFFFh a dvě karty RAM-1. Jedna s 8 kB DRAM byla nastavená na adresy C000 - DFFFh a druhá s 32 kB DRAM byla nastavená na adresy 8000 - FFFFh. S pomocí MikroBIOSu lze psát přímo do paměti jednoduché programy v assembleru příkazem ". adresa instrukce" a spouštět je příkazem "JUMP adresa". Po návratu z programu se zobrazí stav všech registrů. Zkusil jsem si tak napsat primitivní prográmek na zápis písmenka 'A' do pravého horního rohu obrazovky. Až rozběhnu desku DSM-1 a vyrobím propojovací kabel na sériový port, tak budu moci nahrávat do paměti programy zkompilované v PC.

SAPI MikroBIOS 2.1 s 32kB RAM SAPI MikroBIOS 2.1 - assembly program in RAM SAPI MikroBIOS 2.1 - run assembly program in RAM
SAPI MikroBIOS 2.1 výpis programu spuštění programu



Zpět

Aktualizováno 13.12.2024 v 21:13