Postavte si počítač SAPI-1 (6. díl) – zkratka – DTR-1

Tuhle desku nepotřebujete. Navíc, mám trochu strach, že budu upálen, ukamenován nebo obojí. Spíš obojí, ale fakt jsem se snažil vlastní desku udělat THT Veselý obličej. Pokud na konstrukce propojující modernější elektroniku a staré počítače nejste, klidně tento článek přeskočte, bez téhle desky se v pohodě obejdete. Tak, jako většina lidí okolo historických počítačů co znám, tak i já přeskakuji mezi platformami a na žádnou není tolik času, kolik by si zasloužila. Tak se mi občas stane, že se k SAPI nedostanu i několik měsíců a ZRMD-1 jde do kytek nebo i funguje, ale mám strach jestli pár bitů někde nevypadlo, takže si ho stejně raději nahraji znovu. To trvá. I s rychlejším UART na 38400 Bd se pod 3/4 hodiny nedostanete. Nemluvě o tom, že právě proto, že to trvá, si zapomenu ZRMD-1 předtím zazálohovat. Jasan, mám dělat s disketovkou nebo její emulací a nemusel bych mít tyhle trable, ale když ten zálohovaný RAM disk je tak pohodlný. Tak jsem se rozhodl udělat nějaké rychlejší “krmítko”, které by přes rychlý UART nebo USB umělo ZRMD-1 uložit do počítače nebo nahrát zpět. No a když už jsem byl v tom, rozhodl jsem se přidat pár užitečných funkcí navíc a dalších pár jich určitě ještě přidám.

SAPI_DTR-1_beta_front   SAPI_DTR-1_beta_back

První nápad byl použít vývojový kit od Cypress (Infineon) CY8CKIT-059 a přidat k němu SAPI sběrnicový konektor na zasunutí ZRMD-1. Prostě jen taková jednoduchá malá propojovací destička. Pak mně ale napadlo dát kit na klasickou SAPI desku do sběrnice. Deska je ovšem velká a jinak by na ní v podstatě nic nebylo. Tak jsem přidal RAM s budičem a převodník na RS-232c úrovně a řekl jsem si, že s ní zkusím současně nahradit desku DMR-1. Taková náhrada náhrady Mrkající veselý obličej.

Na kraj desky jsem vyvedl programovací konektor pro SWD rozhraní. Programátor je součástí kitu, stačí jej odlomit. Další výhodou vybraného kitu je jeho cena. Cypress jej prodává za 10 USD, ale poštovné je 15 USD, takže se to úplně nevyplatí. Když jich objednáte víc, hrozí vám zase celníci a poplatky kurýrní společnosti. Kit ale nabízí i všichni známí velcí distributoři a pohybuje se okolo 350 Kč bez DPH, TME je o stovku dražší. Kit obsahuje PSoC (Programmable System on a Chip) CY8C5888LTI-LP097, který kromě procesor ARM Cortex-M3 obsahuje i propojovatelnou digitální a analogovou část (něco jako CPLD). Další velkou výhodou je plná 5V kompatibilita. Programuje se přes software PSoC Creator, který je zdarma. Pro propojování se nemusíte učit žádné VHDL nebo Verilog, stačí kreslit schémátka a programovat v C tak, jak jste zvyklí jinde.

SAPI_DTR-1_beta_PSoC-SRAM_scr   SAPI_DTR-1_beta_PSoC-UART_scr

Jak je kit částečně analogový najdete na něm na některých pinech nějaké součástky, převážně kondenzátory, které by nám digitální komunikaci na sběrnici kazili, proto je potřeba asi 6 kondíků a jeden odpor z desky odpájet. Udělám přesnější návod, které a jak, ale nemusíte se bát Veselý obličej i když nemáte se SMD zkušenosti. Já to dělám tak, že na součástku přidám cín tak, abych byl schopen hrotem páječky z boku ohřát oba konce současně a pak součástku snadno oddělám a přebytečný cín odsaju lankem. To je vše se SMD a zpět do THT světa SAPI-1.

Desku jsem osadil a prográmek na přečtení a nahrání RAM disku na vypnuté sběrnici jsem měl za chvilku. Udělal jsem ho stejně jako stávající SAPI utility od Jirky Bíby a EC1045, takže dump jde do Intel HEX a stejně tak se Intel HEX nahrává přes UART (virtuální na USB) do ZRMD-1. Moc se mi nelíbí doba přenosu přes USB UART, která je okolo 4 minut. Stáhnul jsem to i na dvě, ale není to pak spolehlivé, budu se muset víc zaměřit na handshaking na USB, když se snažím jet hodně rychle, občas to něco přenese špatně a pak už se to veze. Prostor k vylepšení, ale 4 minuty vs. 3/4 nebo 1,5 hodiny je celkem zlepšení.

Pak jsem se rozhodl SAPI zapnout a zkusit připojení RAM na sběrnici. Tady jsem se na celkem dlouho zasekl. Ze začátku mi to v podstatě na první dobrou fungovalo, ale pak jsem udělal nějaké drobné změny a od té doby ani ťuk, ani když jsem se vrátil zpět. Podezříval jsem časování, které v CPLD je prostě jiné než s klasickými TTL IO. Nedalo se nic dělat, ke slovu přišel logický analyzátor.

SAPI_DTR-1_beta   SAPI_DTR-1_beta_debugging

Ani s ním jsem si moc nepomohl. Mám jen 16-bitový, takže jsem koukal na část řídících signálů, část adres a část dat a vypadalo to, že se program správně pustí z ROM na JPR-1ZI, nakopíruje do “mojí” RAM na DTR-1 BIOS/monitor a skočí do něj. Program se začne vykonávat, ale po pár desítkách instrukcí někde zatuhne. To podporovalo moji teorii, že někde nesedí časování a program buď špatně nakopíruje data do RAM nebo se špatně vykonává. Přepojil jsem si signály MAP1 a MAP2 na HOLD (BUSREQ) a HLDA (BUSAK), abych získal přístup ke sběrnici na funkčním počítači a poměrně rychle zjistil, že obsah nakopírovaný obsah RAM je správný. Takže asi časování při načítání instrukcí. I obětoval jsem některé řídící a adresní linky, abych viděl celou datovou sběrnici a měl jistotu, co mi procesor vykonává. Pak jsem krok po kroku srovnával načítané instrukce a srovnával se zdrojákem zavaděče CP/M a ejhle. Všechno šlo skvěle, až do chvíle, kde program otestuje bit 6 na portu 0x10 (přítomnost DCD). Tam přečetl 0 a došel k závěru, že má připojený terminál DSM-1 a začal komunikovat na něj. Přítomný ale nebyl, ani jsem ho neemuloval, měl jsem testovací konfigurací JPR-1ZI + AND-1Z/89 + DTR-1 + ZRMD-1. Tak jsem “na prasáka” narychlo pověsil na datovou sběrnici interní pull-up PSoC místo vysoké impedance a voilá, na AND-1Z naběhl obraz jako víno a po připojení klávesnice mi na pohodu nabootovala CP/M ze ZRMD. Paráda Veselý obličej.

SAPI_DTR-1_beta_debug_console_scr   SAPI_DTR-1_beta_CPM_scr

Takže bylo vlastně všechno správně, chyba byla jen v nepřítomnosti toho DSM-1. Musím mrknout jak se nezapojená sběrnice SAPI chová standardně, nevím jestli by to nějaké pull-upy nechtělo, aby to konzistentně vracelo 1, musím to prozkoumat.

Situaci s DSM-1 jsem vyřešil čistěji, naimplementoval jsem v HW registry DSM-1, do kterých se zapisuje a čte operacemi IN/OUT a program k nim mám snadno přístup přes přerušení. Do toho jsem napsal velmi jednoduchou emulaci funkčnosti DSM-1 a celkem mně překvapilo, jak hezky se to hned rozjelo.

Bude to chtít doimplementovat pořádně, ale zatím můžu říct, že v mojí konfiguraci karta pěkně nahrazuje DMR-1. Jednoduchým SW nastavením bitu DCD si můžu přepínat mezi výstupem CP/M na obrazovku přes AND-1Z nebo na RS-232c přes emulovaný UART. UART konektor jsem dal klasický FRB, takže prostě jen zaměníte DSM-1 za DTR-1 a jedete.

Deska má na kraj ještě vyvedené konektory na malý OLED displej, ale na jeho obsluze budu muset taky zapracovat, občas mi zatuhne a pomůže jen “vystoupit a nastoupit”.

Pro zájemce už mám připravenou trochu upravenou verzi desky. Obětoval jsem MAP2 a nevyužité signály k RAM (A16 a CER) a přidal již zmíněný HOLD a HLDA pro přístup ke sběrnici. Také jsem přidal WAIT a M1, se kterými bych chtěl vyzkoušet zpomalení a krokování programu a konfigurovatelně jsem přidal možnost vyměnit OLED I2C komunikaci za přístup k INT0 a INTA. U OLED jsem přidal jumpery na prohození VCC-GND, protože se dělají dvě verze a i když má Číňan vyfocený displej s piny VCC-GND-SCL-SDA, klidně vám pošle ten s GND-VCC-SCL-SDA. Taky jsem přidal měřící piny na všechny signály a možnost osazení pull-up odporové sítě na datovou sběrnici, tlačítko reset na PSoC a ještě zvažuju vyměnit RS-232c transciever, protože stávající MAX232 umožňuje max. rychlost jen 115200 Bd.

Chtěl bych taky zapracovat na firmware karty a kromě “krmítka” pro RAM disk a náhrady DMR-1 z něj udělat tester na SAPI. Přes konzoli bych chtěl mít možnost číst a zapisovat do RAM (tohle už v podstatě mám), sledovat běžící program, případně zastavit, krokovat, mít možnost zapsat nebo číst jednotlivé porty, případně mít možnost si nastavovat jednotlivé bity sběrnice dle potřeby (něco samozřejmě jen při vypnutém SAPI, když DMA přístup nestačí) pro ladění dalších karet. Nápadů je dost, uvidíme co dovolí čas Mrkající veselý obličej.

SAPI_DTR-1_2021-05-04_sch

Příspěvek byl publikován v rubrice Československé počítače, Moderní projekty, SAPI-1 se štítky , . Můžete si uložit jeho odkaz mezi své oblíbené záložky.

7 komentářů: Postavte si počítač SAPI-1 (6. díl) – zkratka – DTR-1

  1. MG napsal:

    „První nápad byl použít vývojový kit od Cypress (Infineon) CY8CKIT-059 a přidat k němu SAPI sběrnicový konektor na zasunutí __ZMRD-1__“…

    Ale no tak :-).

  2. Igi napsal:

    Ten názov na takýto preklep priam navádza …

  3. EC1045.01 napsal:

    Ano při čtení z neobsazeného portu se nenačte FFH ale ?? teď z hlavy nevím (jeden bit je v LOG 0) ale je to konstantní hodnota. Jde o přeslech na sběrnici.

  4. Clouseau napsal:

    Měl jsem delší dobu osazenou desku, ale do SAPI jsem to zkusil až včera. A jelikož mi to nefungovalo, tak jsem bádal co se děje. Na nové desce je krom spousty pinových lišt, kam se dá cvaknout sonda, i jumpery kterými se volí jak budou použity piny procesoru SDA/SCL. Pokud tam ty jumpery nejsou, tak jsou piny procesoru ve vzduchu. Procesor patrně ani nenabootuje a pokud ano, tak při následném přenosu dat na usb to vyhazuje chyby… Takže pozor, tyhle dva piny je potřeba propojit.

  5. Clouseau napsal:

    Sapi je touhle deskou náhodně resetováno, a naopak nefunguje příkaz reset. Příčina: chyba v podprogramu:
    void SAPI_Reset() {
    RTL_Write(0);
    CyDelay(6);
    RTL_Write(1);
    Jelikož daný pin procesoru spíná BS170 k zemi, je potřeba opačnej postup. TJ nejdřív Write (1) pak Write(0)
    A současně je špatně definován pin RTL jako Open drain, drives low. To způsobí že je trvale v luftu…. Definice jako „strong drive“ a je to OK.

Napsat komentář

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