Friday, March 26, 2021

NCB85 20. Virtuálny disk

XMODEM je geniálny program. Umožňuje prenos súborov cez ten istý sériový kanál, cez ktorý prebieha komunikácia s konzolou CP/M. V rámci terminálovej session operátor komunikuje s CP/M a v prípade potreby spustí XMODEM a prenesie súbor z alebo na počítač s terminálom. Hyperterminál na WIN takisto podporuje XMODEM protokol, takže nie je treba nič viac.

NCB85V3 je jednodoskáč pre retro fandov, ktorí si chcú užiť zázrak elektromechanického ukladania dát na magnetické médium. Vyhrabať staré diskety, mechaniky, očistiť ich, naolejovať, pozapájať káble a sledovať ako neviditeľná inteligencia roztáča motory mechaník a hýbe hlavami. Lenže akokoľvek moc našim ušiam lahodí zvuk disketovej mechaniky v noci občas nechceme rušiť a nie každý má pochopenie. Hudobný sluch je skrátka výsada. Druhá vec je, že keď na PC kódim v Small C/ASM a v DDT na CP/M debugujem, každá zmena v kóde si vyžaduje nový a nový prenos súboru. Keď to človek robí už cca 20krát, čaro a fascinácia neochabujú, ale čas uteká. A ten druhý sériový port na MUARTe je pritom taký nevyužitý.

Potom je tu problém prvotnej diskety. Stačí jedna disketa s jediným programom XMODEM. Z nej nabootovať, posťahovať z PC CP/M programy, dáta. Vytvoriť si ďalšie a ďalšie diskety naformátovaním cez FDC.COM a kopírovaním dát cez PIP.COM. Lenže ako vytvoriť tú úplne prvú disketu? A je tu aj skupina užívateľov ktorú diskety neberú. Stačí im, že majú funkčné CP/M a vedia si presúvať obsah medzi CP/M a PC. Odteraz už nie je NCB85V3 iba jednodoskáč pre fandov diskiet. Už je pre všetkých. Pretože tu máme virtuálny disk.

Na strane PC je to aplikácia, ktorá schrúme súbory na hostiteľskom disku a na strane CP/M vidíme ... tie isté súbory. Cez druhý sériový port (čo u NCB85 nie je problém) sa prenáša obsah virtuálneho disku na hostiteľskom PC. Všetko čo je na PC vidíme v CP/M. Do BIOSu pribudli kratučké rutiny na prenos obsahu jedného sektoru z a do virtuálneho disku. To je všetko.
Zelené sú alokačné bloky adresára, červené sú pre súbory.

Pustím si FDC.COM a naformátujem si prvú disketu. Nakopírujem na ňu XM5.COM (XMODEM) a už môžem vyrábať diskety s ľubovoľným obsahom donekonečna. Alebo iný prípad. Aby som nemusel pri ladení programu znova a znova presúvať COM súbor cez XMODEM stačí, aby sa pri kompilácii dostal nový súbor do IN adresára. Virtuálny disk skanuje obsah IN na PC a všetko čo uvidí pridá do CP/M filesystému. Na strane CP/M potom stačí stlačiť CTRL-C na refresh obsahu. A máme nové COMko. Hurá do DDT nastaviť breakpointy a debugovať.

Prenos funguje obojsmerne. Takže zmeny v CP/M filesystéme sú viditeľné vo virtuálnom disku. Stlačením tlačítka Export sa všetky súbory uložia na hostiteľský disk do OUT adresára. Virtuálny disk je generický, to znamená mal by fungovať s akýmkoľvek CP/M systémom. Stačí si zmeniť nastavenia v YML súbore a doplniť pribalené mini rutiny do BIOSu svojeho CP/M.

Program je aj na GITe. Inštalačný postup je v install.txt Stačí mať Javu 11 a vyššiu a spustit to:-) RARko sa dá stiahnuť tu.

NCB85 19. V3 ROM Menu

NCB85V3 je spätne kompatibilné s NCB85V2, ale má jedno vylepšenie. Namiesto EPROM 2764 podporuje už 27256. Pri 2764 som musel oželieť MON85 (4kB) aby sa do obmedzených 8kB vošli aj CP/M (5.5kB) aj BIOS. Pri 27256 máme kapacitu 32kB tak sa obmedzovať nemusíme.

Takže slávime návrat skvelého MON85 vo verzii 1.2 kde Roman Bórik pridal podporu nedokumentovaných inštrukcií CPU 8085. Miesta bolo stále dosť. Tak som pridal BIOSy pre rôzne verzie disketových mechaník a pre novinku, virtuálny disk.

Po zapnutí si stačí vybrať:


Priestor v EPROM je rozdelený nasledovne.
0000-0FFF Monitor 85
1000-1300 Menu
1300-2900 BDOS DD00 (for BIOS F300)
2900-3F00 BDOS DE00 (for BIOS F400)
3F00-4800 BIOS VD+2x144 (F300)
4800-5100 BIOS VD+2x120 (F400)
5100-5A00 BIOS VD+2x360 (F400)
5A00-6300 BIOS 3x144 (F400)
6300-6C00 BIOS 3x120 (F400)
6C00-7500 BIOS 2x144+1x500k (F400)
7500-7E00 BIOS 2x120+1x500k (F400)
7E00-8000 free


Obsah EPROM sa dá stiahnut tu. Zdrojové kódy nedávam do GITu, pretože je to stále v bastel fáze. Vychádzajú z posledného BIOSu V3, ktorý je v GITe. Obsah EPROM 27256 sa nedá celý vybuildovať na jedno spustenie. Rozdiely medzi BIOSmi s virtuálnymi diskami a bez nich som nedokázal narýchlo vyriešiť IF a ENDIF v zdrojových kódoch BIOSu. Takže pri výrobe obsahu EPROM si pomáham aj ručne, kopírujem obsah podadresárov so zmodifikovaným kódom do hlavného adresára.

Saturday, August 8, 2020

Oscillator TTL

Postaviť dobrý oscilátor riadený kryštálom nie je jednoduché. Musí byť necitlivý na zmeny napájacieho napätia a teploty ale hlavne musí vždy kmitať. Na nete je zopár schém, ale väčšinou pre ne platí, že sa to dá aj lepšie. Buďto preťažujú kryštál, alebo pracujú na hranici v inom parametri. Známa schéma s dvomi hradlami preťažuje oscilátor, ten má preto veľmi nízke Q a obvod sa nemusí vždy rozkmitať. A ak je aj iná schéma lepšia tak nakoľko TTL rodina má veľa typov a radov, vyvstáva otázka ktorý rad a konkrétny typ použiť. Občas sa dokonca vyskytnú aj chyby typu, že niekto použije známu schému s 7404 hradlami, ale v rámci nejakej nepozornosti, nevedomosti alebo optimalizácie počtu čipov sa rozhodne použiť 7414, čo je Schmitt ekvivalent 7404. Takýto oscilátor určite nebude kmitať na očakávanom kmitočte.

” I have a 16 MHz quartz crystal that I’ve hooked up with a Pierce oscillator circuit (diagram attached) and which oscillates at the wrong frequency, around 40 kHz.”
“A Schmitt trigger won’t work in this kind of circuit. Use a 74HC04 instead. I think the first inverter in your CMOS Crystal Oscillator circuit has to be linear, and should be unbuffered.”
“Thank you, that was the problem.”

Krátke zhrnutie je takéto: nikdy nepoužívat Schmittove hradlá a radšej nikdy nepoužívať buffered typy. Pokiaľ možno používať CMOS typy, Pierce topológiu oscilátora a vyhýbať sa LS alebo ešte starším TTL. Prvý stupeň oscilátora by mal pracovať v lineárnom režime. Pre oscilátory sú výhodné špeciálne unbuffered typy ako napr. 74HCU04, 74LVCU04. Čo sú buffered a unbuffered je vysvetlené napr. v "Texas Instrument - Application Report SCHA004 - October 2002". Ďalšie výborné zdroje informácii o oscilátoroch sú "Texas Instrument -Application Report SZZA043 - January 2004" a šlabikár oscilátorov "Fairchild Semiconductor Application Note 118 October 1974".

Ja som sa trošku pohral s oscilátormi v rámci návrhu NCB48 a nakoniec som použil hotový oscilátor. Ono je to tak, buďto má čip vlastný oscilátor (8085, 8048, 74HCT4060), alebo to nebude robiť to čo má:-) Výrobca to má väčšinou zvládnuté na stopro a my len pripojíme kryštál a pár pasívnych súčiastok, alebo použijeme hotový oscilátor, alebo prídeme s nejakým nie moc dobrým riešením. Lenže nie vždy sa podarí nájsť požadovaný hotový oscilátor na trhu, TTL oscilátory už vymierajú a aj výber frekvencií je nižší ako u samotných kryštálov. Tiež môže nastať situácia, že potrebujeme tri rôzne oscilátory, ale kúpiť sa dajú len po 10 kusov. Namiesto kupovania 30ks by bolo lepšie mať univerzál 3ks a osadiť si ich podľa potreby.

Preto som sa rozhodol vyskúšať obvody od Philipsu špecificky navrhnuté pre oscilátory. Prvý je 74LVC1GX04. Kombinuje v sebe funkčnosť buffered a nebuffered hradiel 7404, je typu CMOS, funguje od 1.65V do 5.5V a je v miniatúrnom puzdre TSOP6.



Navrhol som dve doštičky. Jedna má vývody ako štandardný Half-Can TTL oscilátor a má rozmery DIP-8. Napájanie +5V je klasika pin 8, GND je pin 4, výstup je pin 5. Pin 1 je NC. Osadil som ju do NCB48. Používa 1206 SMD rezistory a kondenzátory. Preto je obtiažne na nej experimentovať a hľadať použiteľné hodnoty pasívnych súčiastok.
Druhá doštička je experimentálna, osadzuje sa klasickými odpormi a kondenzátormi. Ja som ju osadil iba zdierkami zo socketov. Takže môžem bez letovania vymieňať súčiastky a hľadať rozsah použiteľných hodnôt.

Druhý obvod, ktorý som vyskúšal je 74HCT6323A. Puzdro SOT96-1, rozsah napájania 3-6V. Je trošku drahší, ale obsahuje preddeličku. Preto sa môže použiť kryštál, ktorý kmitá na násobku požadovanej frekvencie. Podobne ako u 74LVC1GX04 som vytvoril dve verzie. Jedna je s vývodmi ako Full-Can TTL oscilátor a má rozmery DIP-14. Používa 1206 SMD súčiastky.

Druhá verzia je zase experimentálna, osadená zdierkami na rýchlu výmenu klasických súčiastok.



Použitý kryštál 16.666MHz a zapojenie preddeličky /2 dáva na výstupe z oscilátora 8.333MHz so striedou perfektných 50%. Namiesto 2k2 rezistoru som musel použiť kondenzátor 47p (fungoval aj 68 a 75), presne ako sa píše v datasheete. Rozmermi aj frekvenciou pasuje do Atari XF-551.
Všetky doštičky sa dajú objednať na OSH Park https://oshpark.com/profiles/archeocomp

Saturday, November 16, 2019

Blog wait-state

Do 8-bitovej retro komunity pribudol nový blog z najväčšej die.. z Prievidze :-)
wait-state.blogspot.com

Marián tu bude popisovať svoje počiny. Hneď na úvod má lahôdku v podobe nádherne prevedenej úpravy Consul klávesnice a jednej historickej perličky.

Wednesday, October 2, 2019

DCF-77 decoder

Niekde som čítal, že dnes sa už asi nikto do projektov s 8048 nebude púšťať. Napísal som program pre 8048 na dekódovanie časového signálu DCF-77 z Mainflingenu. Vysiela sa od roku 1970 výkonom cca 50kW a ako jediný v Európe ešte nejakú dobu určite bude. Program je síce bohato okomentovaný, ale aj tak by som ho o pár rokov asi márne lúštil, tak tu je rámcový opis. Program je na Githube tu: https://github.com/ncb85/ncb48/tree/master/dcf77

Ako sa vysiela DCF-77 je krásne vidno tu: DCF-77 Live


Na obrázku je vyznačené, kde sa nachádzajú minúty a hodiny (formát je BCD+parita - dvojkové číslo sa číta zprava, nie zľava ako je zvykom)

Signál má sekundový takt. Logická 1 má na začiatku sekundy 200ms vysokú úroveň, po zvyšok je signál v nízkej úrovni. Logická 0 má na začiatku sekundy 100ms vysokú úroveň, zvyšok nízku. 8048 má hodiny 4.9152MHz, čo dáva takt timer prerušenia 40Hz. To znamená, že sekunda je vzorkovaná 40x. Pre logickú 1 musí byť prvých 8 vzoriek vo vysokej úrovni a pre 0 iba štyri vzorky. 8 a 4 sú celkom výhodné čísla. Jeden byte je 8 bitov.

Takto nejako:
jednotka         1111111100000000000000000000000000000000
nula                1111000000000000000000000000000000000000
60. sekunda    0000000000000000000000000000000000000000

Jeden byte RAM používam ako posuvný register. Pri každom prerušení nasuniem aktuálnu logickú úroveň do byte zprava. Bit naľavo vypadáva. Potom si rozdelím byte na dve polovice. A spočítam koľko jednotiek je v každej polovici. Ak nájdem jednu polovicu takú a druhú onakú, tak máme prechod z jedného stavu do druhého. Vtedy si nastavím ďalší pomocný byte ako counter a počítam čas od do. Vyhodnocujem dĺžku vysokej úrovne pulzu a kontrolujem min./max. šírku obidvoch častí pulzu. Výsledkom sú v sekundovom takte pulzy 1 alebo 0 (ako na obrázku hore), alebo chyba. Toto sa deje v prerušení od timer, preto aj názov - timer.asm   Z princípu funkcie vyplývajú dve veci: program (ale nie čas hodín) je 4 prerušenia (0.1s) oneskorený za vysielaním a prerušenie sa vykonáva 40x za sekundu ale výstup z neho (PULSE_VALID) je iba 1x za sekundu.

O úroveň vyššie je decoder.asm. Nepracuje už v prerušení, ale v hlavnej slučke. Tam z pulzov vychádzajúcich z timer.asm dekóduje čas. Čas je priamo v BCD. Výsledný čas okrem kontroly na paritu kontrolujem aj formálne, aby nebol napr. 28:62. Ako je známe maximum je 23:59 :-) Kontrolujú sa aj bity 1 a 20, ktoré majú vždy pevnú hodnotu 0 resp. 1. Okrem toho kontrolujem prítomnosť kompletnej sekvencie pulzov. Aj posledná sekunda (samé 0) sa musí objaviť len v dobe pre ňu určenej. Po uplynutí aktuálnej minúty sa nastavuje nový čas z vysielania, samozrejme ak prešiel všetkými kontrolami. Kontroly sú také poctivé, že zatiaľ som nikdy nevidel falošný čas.

Aktuálny čas 8048 sa posúva pri každom prerušení v clock.asm S výhodou sa využíva inštrukcia DA A na počítanie s BCD číslami. A nakoniec sa aktuálny čas zobrazuje. Dá sa aj staticky aj multiplexne. Pre rôzne moduly displayov sú rôzne asm file. dis2x595.asm je pre 8-miestny multiplexovaný modul z eBay (hľadaj 74HC595 LED display), disNx595.asm je pre statické 2,3,4 miestne zreťazené moduly z eBay (hľadaj 74HC595 static LED display)

Pridal som aj modul s čipom DS1302 zálohovaným batériou CR2032, aby sa mohli hodiny aj vypínať. DS1302 je obvod hodiniek s tepelne nekompenzovaným externým kryštálom 32.768kHz a za deň si v kľude ubehne aj pár sekúnd od presného času. Za mesiac to ide do minút. Po zapnutí sa preberie čas z DS1302 a po rozlúštení časového signálu, čo môže trvať aj dlhšiu dobu, sa čas upraví na presnú hodnotu.

Pripojenie prijímača DCF je do vstupu T0. Momentálne su pulzy invertované, lebo ich prevádzam na TTL úroveň jedným NPN tranzistorom - výstup je z kolektoru. Ak by boli pulzy neinvertované, je treba zmeniť inštrukciu JT0 na JNT0 (v timer.asm)
_TCIN2   CLR C
         JT0 _TCIN3
Výstup na riadenie display a komunikácie s DS1302 je na porte P1.
P1.0 data pin of display
P1.1 clock pin of display
P1.2 latch pin of display
P1.3 data pin of DS1302
P1.4 clock pin of DS1302
P1.5 CE pin of DS1302

Sunday, June 2, 2019

SAP48 1. Programmer

Pre ROM/EPROM typy členov rady MCS-48 potrebujeme aj programátor a čítačku programovej pamäte. Na programovanie sú potrebné dve napätia 25V a 23V, prípadne 21V a 18V, podľa toho či máme NMOS alebo HMOS obvod. Tesly sú NMOS. Pri ROM verziach je treba znížiť napätie VDD na 12V a druhé napätie PROG odpadá. Programátor TL866 (de facto nový bastler štandard) a podobné už 8748 nepodporujú. Asi kvôli tým dvom napätiam. Arduino Mega stojí cca 7,- EUR a má 8kB RAM a my potrebujeme 1kB alebo 2kB na dáta programovej pamäte 874X a pár byte na premenné programu. Arduino Uno je lacnejšie, ale má iba 2kB RAM, čiže pár byte by pri 8749 chýbalo. Takže som navrhol shield pre Megu so zero insertion force socketom a pár súčiastkami k tomu.



Na doske sú dve LED pre kontrolu ALE signálu. Ak svietia približne rovnakým jasom, tak je čip funkčný a generuje ALE signál. Ak nesvietia rovnako, niekde je problém a pokus o programovanie čipu by bol fatálny. Prúd LED v kľudovom stave nie je rovnaký, ale ALE (ale to sú náhody) signál je silne nesymetrický a jeho prítomnosť pôsobí tak, že obidve svietia rovnako silno. Pri inej svietivosti LED to môže byť trošku rozdielne, ale vždy by sa mali približne vyrovnať.

Ďalšia LED ukazuje prítomnosť napájacieho napätia 5V a posledná signalizuje keď je na PROG vstupe vysoké programovacie napätie. Potrebné napätia sú stabilizované pomocou troch kusov LM317. Vo Willem programmeri je hardwarovo nemožné mať na PROG vysoké napätie ak je na EA nízke. Čo by bolo mimochodom tiež fatálne. Tu je to ošetrené iba softwarovo. Na rozdiel od Willlema a legendárnej konštrukcie "Univerzální programátor pamětí" v červenom AR 11/88 je tu ale PROG pin v neaktívnom stave naozaj floating a nie na 5V, čiže tak ako je to v dokumentácii výrobcu. Ale asi to nie je katastrofické, lebo Willem vie naprogramovať tieto čipy aj viac krát a nie iba prvý a posledný raz. Willem vytvára nižšie napätie 23/18V z vyššieho 25/21V zaradením 3 kusov diód .. čo nie je celkom dokonalé:-) Pretože požadovaná delta je v prvom prípade 2V a v druhom 3V.

Obslužný program je napísaný v jazyku Arduina. Komunikuje cez sériovú linku 9600 baud, 8-bit dáta, 1-stop bit, no parity. Je možné využívať aj zabudovaný terminál v Arduino prostredí, ale doporučujem použiť napr. Hyperterminál. Cez terminál nahráme Intel HEX do pamäti Arduina, skontrolujeme a naprogramujeme. Okrem programovania je možné aj iba čítať obsah ROM a EPROM programovej pamäte vložených čipov. Čítanie EPROM zároveň aj vyhodnotí, či je čip zmazaný (obsahuje samé nuly). Vždy napíše Chip is erased, ready to be programmed. alebo !!!Chip is not erased!!! ak EPROM nie je zmazaná. Program je tak trochu aj "blbuvzdorný". Podarilo sa mi poslať do Arduino program trošilínka presahujúci 1024 byte a pohoda. Nadbytočné byte odignoroval a 8748 správne naprogramoval.

Popis ovládania:
Cvýber typu 8748 (1kB) alebo 8749 (2kB)
Tvstup do testovacieho menu, kde je možné nakalibrovať napätia a otestovať funkčnosť tranzistorových spínačov
Lnahrá Intel HEX do RAM pamäte programátora
Hpošle obsah RAM pamäte programátora do terminálu vo forme Intel HEX
Pnaprogramuje obsah RAM pamäte programátora do čipu v sockete
Rprečíta obsah ROM/EPROM vloženého čipu a uloží ho RAM pamäte programátora
Vporovná obsah RAM s obsahom ROM/EPROM na čipe v sockete

Schéma je tu
Program je na GITHUBe tu

Doporučujem osadiť najskôr súčiastky, potom lišty s headrami a nakoniec socket. Rezistor R22 sa neosádza pozri DOPLNENIE. Pri R25 4k7 nie je dobre vidno hodnotu na doske. Programátor vyžaduje nastavenie správnych napätí ručne pomocou trimrov na doske. Preto nemožno bez prestavenia napätí striedať EPROMkové NMOS s EPROMkovými HMOS čipmi a ani ROM čipmi. Ja som nastavil 5.1V, 18.1V a 21.0V na vyskúšanie HMOS. Stabilizátor pre 5V má veľký úbytok a potrebuje chladič. Čip vložíme do programátoru, až keď sú všetky napätia skontrolované (položka menu T) a v nízkom stave, a tiež iba vtedy keď je Arduino napájané cez USB. Pre pokrytie aj HMOS aj NMOS napätí 21V-25V a 18V-23V je treba aby P1 a P2 mali hodnotu 2k. EPROM potrebujeme sem tam aj vymazať. Slnečný svit je slabý, ale kto nemá mazačku nemusí zúfať, pretože UV sterilizátor na zubné kefky z eBay funguje výborne a schváli ho aj manželka.

Programátor som otestoval na pár HMOS čipoch, aj násobne na tom istom čipe a s testom v doske NCB48 a bez nehody. Na oživenie bastlenia na MCS-48 by pre začiatok mohol tento komplex schém, dosiek a programov stačiť. Pár dosiek NCB48/SAP48 a súčiastok ešte nájdem, tak kto chce nech napíše. Rád by som zrealizoval programátor s SMD súčiastkami. Ešte by som ho rád celý vtesnal do 3D tlačenej krabičky ako napr. zmienený TL866.



DOPLNENIE: ozvali sa mi používatelia a záujemci o SAP48 a pri výmene skúseností a komunikácii sa zistilo nasledovné. HMOS verzia 8748H/8749H má občasný problém. Symptóm je taký, že sa naprogramuje pár byte a potom sa zistí chyba a programovanie sa zastaví. Pri inej konštalácii hviezd ten istý čip na druhý deň môže prejsť až do konca bez chyby. Identický problém (pri Willem programátore) aj s riešením je popísaný na vintage computer fóre tu: http://www.vcfed.org/forum/showthread.php?24379-Needed-Microcontroller-programming-(D8749). Príspevky #4,#6,#9,#11,#14
Takže sme ja a Marián osadili R22 odporom 1M s paralelne pripojeným kondíkom 4n7 (ja som našiel iba 680k odpor) a programovanie už zbieha bez zaváhania. Bude sa jednať o nejakú chorobu HMOS 8748/49, ktorá zdá sa postihuje aj HMOS EEPROM INTEL D2816. V datasheetu k D2816 na strane 2-31 dole v odstavci Vpp Pulse "píšou něco o tom, že Vpp musí růst exponenciálně (RC waveform)" ako si všimol Melsoft.

Zmenu som uviedol aj do schémy. Zatiaľ asi nikto neprogramoval NMOS verziu, ale tá by podľa linkovanej témy mala byť bezproblémová aj bez modu. Aj ja aj Marián aj Melsoft sme už bez problémov programovali aj TESLA NMOS MHB8748. Nakoľko sme už mali MOD z programovania HMOSov, tak sme len zvýšili napätia a fungovalo to aj na NMOS.
DOPLNENIE 2: zoznam podporovaných typov môžeme rozšíriť aj o 8741 a 8742. Marián vyskúšal a funguje.

NCB48 3. Software

S MON48 monitorom sa pracuje jednoducho. Veď som ho aj spáchal za jeden veľkonočný predĺžený víkend:-) Napíše sa program, assembler/linkerom sa vytvorí HEX. Potom sa HEX pošle (buďto cez send file funkciu terminálu, alebo copy/paste do terminálu). Monitor spracuje HEX a uloží do programovej pamäte. Ladený program sa môže spustiť voľbou G alebo H. Aj keď je EA pin nastavený na internú pamäť programu, pri prekročení poslednej adresy sa MCU samo prepne na používanie externej programovej pamäte. Pri 8748 máme síce iba 64 byte pre dáta, ale pre vlastný program máme rozsah 400H-FFFH. Pri 8749 máme 128 byte pre dáta, ale pre vlastný program iba 800H-FFFH. Po návrate cez inštrukciu RET sa vypíše obsah flagov a môžeme prezerať obsah dátovej RAM cez príkaz I. Ak je monitor nepotrebný, tak spúšťame program od 000H tlačítkom reset s prepnutím na externú pamäť a máme k dispozícii celý rozsah 000H-FFFH

Popis príkazov monitora (dajú sa ukončiť CTRL-C), upload HEX nepotrebuje príkaz:
Ddump programovej pamäte, zadáva sa číslo stránky
Idump internej dátovej pamäte, autodetektne veľkosť 64 alebo 128 byte
Edump externej dátovej pamäte 256 byte v 8155
Smodifikácia programovej pamäte, zadáva sa adresa 000..FFF potom vstup jedného alebo viac byte
Mmodifikácia internej dátovej pamäte
Xmodifikácia externej dátovej pamäte
Gskok na adresu 400H
Hskok na adresu 800H


Ukážka uploadu Intel Hex a následný DUMP page 3, obsah pamäte je MON48.

Dve banky
Pri spúšťaní programu pomocou H a všeobecne pri programoch dlhších ako 2048 byte je tu rodinný MCS-48 zádrhel. Program counter PC je interne iba 11 bitový. To implikuje rozdelenie programového pamäťového priestoru 4kB na dve banky po 2kB. Pre úspešný skok z jednej banky do druhej musíme použiť dve inštrukcie. Jednu na nastavenie klopného obvodu pre bit 12 PC. A potom skočiť pomocou JMP alebo CALL v rámci 11 bitového priestoru, ale skončíme v druhom priestore. Taký malý hviezdny teleport:-) A pri zavolaní RET nastane zábava. Nakoľko je všetkých 12 bitov adresy uložených na stacku, tak sa ako očakávame vrátime do pôvodnej banky, ale klopný obvod pre bit 12 PC ostane nezmenený. Čo sa asi tak stane pri ďalšom JMP alebo CALL? A čo treba urobiť po návrate z teleportu do pôvodnej banky, aby sa program správal predvídateľne? Domáca úloha:-)

Prerušenia
Prerušenia sú dve, z pinu INT a z interného timer/countera. Po celú dobu prerušenia je bit 12 PC vždy nula. Preto sa v obsluhe prerušenia nedá volať žiadna rutina z hornej banky. Ďalší interrupt je zakázaný, povolí sa až vykonaním inštrukcie RETR. RETR zároveň obnoví aj banku registrov a flag F0. Vo flagu F1 sa preto môže posielať jednobitová informácia z prerušenia. Pri pretečení timer/countera sa nastaví flag TF, a vynulovať sa dá tento flag iba vykonaním inštrukcie JTF. Pre návrat z volaní CALL by sa mali v rámci interuptu používať inštrukcie RET, pretože nepovoľujú nové prerušenie.

Meranie času
Interný timer má na vstupe signál, ktorý sa získa tak, že CPU delí frekvenciu kryštálu 3, potom 5 a nakoniec 32 krát. Čo dáva takt 32 inštrukčných cyklov. Counter/timer počíta do 256 (čiže 8192 inštrukčných cyklov) a pretečie, v prerušení si môžeme počítať už čas. Existuje zopár kryštálov, ktoré sa dajú vydeliť na celé čísla. 9.8304MHz a 6.144MHz sa používajú aj pre konštrukcie s CPU 8085. 11.0592MHz zase pre zapojenia s o generáciu novším MCU 8051. Kryštál 3.6864MHz vyhovuje predpisu 3 až 4 MHz pre programátor a zároveň je vhodný aj na presný čas. Tu je tabuľka bežných kryštálov:

FrequencyRateNote
1228800100pre taktovačov
1105920090CMOS sa fláka
983040080
737280060
614400050TESLA tu asi končí
491520040
368640030SAP48
245760020pre padavky

V stĺpci Rate je počet prerušení za sekundu.

Matematické rutiny
V tej dávnej soc.dobe som mal k dispozícii na strednej škole kufríkač SB8035 (jediný kus pre celú školu a ani o ten nemal nikto záujem) a na ňom som si napríklad overil rutiny na sčítanie, odčítanie, násobenie a delenie 16-bitových čísel. Trošíčka problém bol, že násobenie a delenie som vtedy vedel iba v cykle, postupným pripočítavaním alebo odpočítavaním. Literatúra s lepšími algoritmami v socíkovských školách neexistovala, poradiť tiež nemal kto. Takže násobenie 65536 x 1 trvalo 65536 iterácii programu. Delenie 65536 / 1 rovnako. Ešte stále si pamätám, ako pri takýchto hraničných hodnotách na chvíľu zhasol display na SB8035 a potom zobrazil správny výsledok. Dnes už to viem aj rýchlejšie, iterácii stačí toľko, koľko bitov majú operandy. Treba pozrieť GITHUB.

Assembler/Linker
Na preklad MON48 som použil Telemark Assembler vo verzii 3.2, ktorá beží natívne pod Windows. Telemark upozorní, ak nájde relatívny skok mimo aktuálnej stránky. S kratším kódom pre MCS-48 som vyskúšal aj Macro Asembler AS, ktorý je použitý na BIOS pre NCB85 a tiež ASXXXX assembler, ktorý je použitý pre programy na CP/M kompilované pomocou SmallC kompilátora. ASXXXX má aj linker a možnosť projektov pozostávajúcich z viacerých zdrojových file. Obidva tieto assemblery tiež správne detekujú nepovolené relatívne skoky mimo stránky. Vyskúšal som aj XASM48 čo je Avocet 8048 Cross Assembler pre moje obľúbené CP/M. S Wordmasterom by to bolo super CP/M vývojové prostredie. Už len nejaký ten programátor 874x pre NCB85 chýba.

Záver
MON48 má ešte rezervy, viac ako 256 byte z 1024 je stále nevyužitých. Je možné dorobiť breakpointy, fill alebo iné príkazy. Bolo by zaujímavé naportovať Petr(a)48 na NCB48 a terminál. Ale zatiaľ sú moje vedomosti o Petrovi nedostatočné. Pohodlie Arduina alebo aspoň ISP programovania rady MCS-51 procesory rady MCS-48 s alebo bez EPROM nikdy neponúknu. Ale práve prítomnosť EPROM, prípadne externej EPROM ich robí magickou. Mazať si EPROMku cez priehľadné okienko UV svetlom a sledovať stopky, zapísať program do EPROM napätím 25 voltov, to je dnes už rarita. Presne takýto zážitok ponúka NCB48 a SAP48.
MON48 je na GITHUBe tu

NCB48 2. Hardware

NCB48 je maličká a pomerne hutná doštička s MCU z rodiny MCS-48, periférnymi čipmi UART 8251, RIOT 8155 a ROM/RAM externou pamäťou programu. Môže byť použitá ako výukový, vývojový, ladiaci počítač, čo vyžaduje verziu MCU s internou EPROM, ale aj ako samostatne fungujúci počítač kde sa dajú s výhodou využiť verzie CPU bez EPROM. Pre prvé využitie je k dispozícii monitor MON48 s možnosťou nahratia programu cez sériový port, výpisu registrov, pamäti a spúšťania vlastných programov. Program nahraný do externej programovej pamäte RAM sa potom spustí z menu monitora ak sa jedná o program na adresách 400H alebo 800H. Alebo od adresy 000H stlačením druhého tlačítka RESET s preklopením EA pinu do externého módu. V internom móde EA pinu MCU plynule prechádza medzi internou ROM s monitorom a externou programovou pamäťou pri prechode cez adresu 400H alebo 800H, podľa použitého čipu. Pri prepnutí na externú pamäť máme pre vlastný program k dispozícii celý rozsah 4kB 000..FFFH v externej pamäti.



Ďalej doska obsahuje obvod 8155, ktorý pridáva 256 byte externej dátovej RAM, jeden 14 bitový čítač/časovač a tri paralelné brány. Vstup do timeru v 8155 je odvodený z oscilátora 74HCT4020 a má frekvenciu 76.8kHz. Pri režime 8155 timera kedy sa po dopočítaní generuje jeden impulz s periódou 1/f to zodpovedá cca 4.3 inštrukčnému cyklu pri kryštáli 4.9152MHz, 6.3 cyklu pri kryštáli 6.144MHz, a 11.3 cyklom pri kryštáli 11.0592MHz. Pri prerušení z timeru 8155 je jedna perióda dostatočne dlhá na to, aby interrupt bol vždy detektnutý a zároveň je dostatočne krátka na to, aby sa po návrate z prerušenia nevyvolalo hneď ďalšie. Pinom P2.4 MCU sa volí medzi IO a MEM v 8155.

Pre sériovú komunikáciu nezávislú od rýchlosti MCU tu je klasická 8251A so samostatným oscilátorom a voľbou prenosovej rýchlosti v rozmedzí 19200-1200 baud pomocou jumpera. Pre MCU sa môže použiť ľubovoľný kryštál 1-11MHz. Pre NMOS verzie max 6MHz. Na ukladanie programu je tu programová RAM. Prístup do nej je vďaka pomocnej logike možný nielen signálom PSEN, aby sa dal z nej spúšťať program ale aj signálmi RD a WR, aby sa dala modifikovať a prehliadať.

Pre nasadenie dosky ako samostatného počítača sa dajú použiť aj verzie MCU bez EPROM, čiže 8035/8048, 8039/8049 alebo 8040/8050. Vtedy je treba mať na pozícii externej pamäte programu EPROMku. Použiť sa dajú aj 24 pinové aj 28 pinové EPROM. Zlatá kombinácia 8050, 8251, 8155 a 2732 nám dáva riadiaci počítač s omračujúcimi hodnotami 4kB programovej pamäte, 512 byte RAM, dvomi timermi, sériovým portom a cez 30 IO pinov pri dych berúcej rýchlosti.

Zapojenie sa vyvíjalo a menilo. Prvá verzia bola s TTL logikou, ale súčiastok bolo už priveľa. Reset bol riešený s RC členom, tranzistorom a Schmitt hradlom. Celé sa to postupne zjednodušilo do výslednej podoby s jedným TTL oscilátorom, binárnou deličkou a jedným GAL. Súčasná podoba stále nie je 100%. Vynechanie Schmitt triggera sa prejavilo. RESET po zapnutí napájania nie je spoľahlivý. EA pin sa nastaví správne, ale MCU sa nie vždy rozbehne. Ručný RESET cez tlačítka je spoľahlivý. Prekvapivo ma najviac potrápil obvod UART 8251. Nenápadný vstup CLK, ktorý v NCB85 na seba žiadnym spôsobom neupozornil tu robil problémy. Nedá sa kŕmiť ani signálom ALE z CPU ani výstupom z 74HCT4060. Podarilo sa mi síce rozkmitať 74HCT4060 pri prihnutých hodnotách odporov aj s kryštálom 19.6608MHz, ale ani to nestačilo. UART potrebuje rýchle hodiny. S CPU síce UART komunikuje, ale piny Rx a Tx nereagujú. Preto tu je na rozdiel od NCB85, použitý 74HCT4020 a samostatný oscilátor. Z pomocných IC z prvej verzie neostal vo výslednej ani jeden jediný. Oscilátor funguje 4.9152MHz, ale aj 2.4576MHz. Podľa skúseností z NCB85 by mal fungovať aj oscilátor 9.8304MHz. Na doske sú vyznačené baud rates pre oscilátor 4.9152MHz.

Schéma je tu
GAL logika je tu

NCB48 1. Intel MCS-48

Není to první případ, kdy zákazníci útočí na adresu TUZEXU a zahraničních dodavatelů a obviňují je z podobných úmyslů. Častý je také názor: To jistě zase TUZEX nakoupil ve výprodeji vadné výrobky a podobně. Ptáme sa z čeho vychází tato kritika? Je skutečne vinou TUZEXU, že počítač ATARI 800 XL platí čs. zákazník dvěma měsíčnimi platy, když v NSR jich za jeden plat dostane cca 10?
Z Atari zpravodaje 1987/06.

Intel predstavil radu MCS-48 cca v roku 1976. V roku 1986 vyšli v Amatérskom Rádiu články o modernej a perspektívnej súčiastke TESLA MHB8035/8048/8748. V tej dobe boli PMD85 plné desiatok IO, boli veľké, potrebovali poriadny zdroj, ktorý vážil zopár kg a tu som si čítal o jednom jedinom IO v púzdre DIP40, ku ktorému stačí pripojiť kryštál, tri kondenzátory a napájať ho 5V/50mA. Bolo to prevratné. A pritom ten obvod bol rýchlejší ako CPU v PMD85. Navyše 8748 mala svoju EPROM a každý si ju mohol naprogramovať svojím programom. Skrátka bol to malý zázrak a ja som po ňom hned zatúžil.



Na jednom čipe 8748 je 8 bitové CPU, EPROM 1kB, 64 byte RAM a tri 8 pinové brány. (pozn. 64 byte RAM naozaj nie je preklep). Dva testovacie vstupy, jeden prerušovací vstup a jeden 8 bitový časovač. To je všetko. Typ 8048 má 1kB ROM pamäť programu, kde sa obsah nastavuje pri výrobe čipu. Typ 8035 nemá definovaný obsah ROM. O stupienok vyššie sú typy 8039/8049/8749. Majú už luxusných 128 byte RAM a 2kB ROM/EPROM (8039 nemá definovaný obsah ROM) a typ 8040/8050 má dokonca nepredstaviteľných 256 byte RAM, ale nemá verziu s EPROM. Iba verziu s 4kB ROM (8050), alebo bez definovaného obsahu ROM 8040.

RAM / CODEundef.  ROM  EPROM
64 / 1 kB803580488748
128 / 2 kB803980498749
256 / 4 kB80408050none

MCS-48 používa Harwardskú architektúru, kde sú samostatné pamäťové priestory pre program a pre dáta. Intel 8080 mal Neumannovskú architektúru, kde program a dáta zdieľajú spoločnú pamäť. Inštrukčná sada je brutálna, nemá odpočítavanie, a tak trochu očakávane nemá ani násobenie a delenie, ale to nemala ani 8080. Nemá podmienené CALL a RET. Nemá ani compare a chýba jej Zero flag. Má ale inštrukcie JZ a JNZ, JB a user flagy F0, F1. User flag F0, flagy CY a AC sa ukladajú na stack pri každej CALL inštrukcii a prerušení. Inštrukcia RETR ich pri návrate obnoví.

RAM 64 byte je rozdelená nasledovne: najskôr 8 registrov R0 - R7, potom je tu 16 byte na zásobník, ktorý má iba 8 úrovní. Nasleduje druhá sada 8 registrov. Takže to je dohromady 32 byte. Pre premenné programu ostáva zvyšných 32 byte. Adresné priestory sú kapitola sama o sebe. 8048 má pamäť programu(internú/externú), pamäť dát(internú/externú), I/O priestor a expandér. Interná pamäť dát sa okrem priameho prístupu cez R0-R7 dá adresovať aj nepriamo cez obsah R0 a R1, externá pamäť dát iba tak. Pamäť programu má counter iba 11 bitový. Na prechod do hornej banky (a potom späť) treba meniť špeciálnou inštrukciou stav klopného obvodu, vyberajúceho banku 2kB.

Nejakým socanovským čachrom sa mi cca v roku 1988 podarilo jednu MHB8748 "zohnať". Nie kúpiť. V socíku sa zháňalo, veci sa nedali kúpiť v obchode. Lenže aj keď som už mal TESLA MHB8748, tak som stále nemal ani programátor a ani mazačku. Do poznámkového bloku (papierového) som si písal program na palubný počítač do auta na báze 8748. S Gorbačovom prišlo uvoľnenie, nežná revolúcia ukázala silu miliónov v uliciach, okupanti rusi museli odísť do svojej ríše zla a k nám sa pomaly vracali pokrok, civilizácia a prosperita. V roku 1992 som si na mojom prvom vlastnom PC/XT vyskúšal assembler pre 8048, potešil sa, ale programátor a mazačka stále neboli. A chvíľku neskôr prišli ATMEL AT89C2051 a vtedy to už pár rokov nebol socík a jeden som si normálne v obchode za cca 90 korún kúpil. AT89C4051 so 4kB Flash bol pre študenta už moc drahý. A v (ešte) socíkovskom dožívajúcom aute r.v. 1974 bol za chvíľu aj palubný počítač vlastnej konštrukcie (AT89C2051+ 4x74164 + 4x7-segm.LED). Ten papierový poznámkový blok s kódom pre 8048 som vtedy niekedy vyhodil. Jedna éra skončila.

Dnes už o tom čipe takmer nepočuť, ale panečku skúste si otvoriť červené AR8/90 stranu 301. Alebo červené AR7/90, stranu 257. Alebo inzerciu v tých istých číslach. A samozrejme musím spomenúť seriál, "JEDNOČIPOVÉ MIKROPOČÍTAČE ŘADY 8048" ktorý bol jeden z mála zdrojov informácii - červené A7,8,9/86. Mimochodom rád by som si pozrel "Příručka programování Mikropočítačů řady 48, Ing. Vojtěch Mužík a kol, Knižnice ČSVTS Mikroprocesorová technika, Svazek 12, Díl 2, 1986" - 162 stran.", ale nemám ju.

Rada MCS-48 bola nesmierne populárna, v klávesniciach do PC sa jej nasadili milióny. V tlačiarňach pre PC, rôznych meracích prístrojoch, v spotrebnej elektronike a v priemysle podobne. Okrem Intelu ju vyrábali aj AMD, Toshiba, Philips, NEC, NSC a iní. OKI a DAEWOO pridali aj CMOS verzie so spotrebou cca 10mA a zopár nových inštrukcií (1988_OKI_Microcontroller_Data_Book.pdf). SIEMENS pridal nejaké nové inštrukcie a ubral nejaké staré.. Moja TESLA MHB8748 prežila aj dve sťahovania a zakaždým na mňa hľadela zo šuflíka ako taká nemá výčitka. Celkovo viac ako 30 rokov. Stále som si hovoril pekná, ale nechaj ju v šuflíku. Je nepoužiteľná, komplikovaná a limitovaná. Strata času, nezmysel. V ďalších článkoch popíšem UVKSC-48:-)


Na obr. UVKSC-48, úplné vývojovo konštrukčno softwarové centrum pre MCS-48, aj s tými Amárami ako knižnicou:-) Za Amára ďakujem Liborovi.

DOPLNENIE Netrvalo to dlho a ozval sa mi jeden fanda, že nech sa páči tu máš naskenoveného toho Mužíka. A keď už som v tom listoval, objavil som že sa tam spomína assembler pre SMEP. Čiže mali sme na škole SM50/50 a kufríkač SB8035, mohlo sa na tom slušne vyvíjať. Ale pre SMEP za odhadom cenu rodinného domu nebol assembler (jedna disketa) ani žiadna literatúra (ani len k textovému editoru a podobne) za cenu (aj s disketou) odhadom 25,- Kčs. Mužík je na stiahnutie Příručka programování Mikropočítačů řady 48, Ing. Vojtěch Mužík a kol, Knižnice ČSVTS Mikroprocesorová technika, Svazek 12, Díl 2, 1986 - 162 stran.

Saturday, May 11, 2019

NCB85 18. Word Master

Originál textový editor pre CP/M je ED. Nie je to ten ED čo je v UNIXe. CP/Mkový riadkový editor ED od DRI je oveľa jednoduchší. Zopár batchových file (mimochodom doporučujem SUPERSUB program) som s ním editoval. Ale nebolo to ono. Tok editácie je len od začiatku smerom po koniec file. Vrátiť sa späť sa nedá, jedine zatvoriť a znova otvoriť file. Pri väčších file som to ani neskúšal, radšej som editoval file na PC a presúval ho pomocou XModemu na CP/M počítač.

Teraz sa situácia možno zmení. Marián Luprich tiež riešil dilemu editora a skúsil to s Word Masterom. Word Master je celoobrazovkový textový editor, ale má aj príkazový režim. Napísal ho Rob Barnaby pre MicroPro International. Používa známe shortcuty, pretože jeho nasledovník ich prevzal a používajú sa dodnes. Dnes sú známe pod názvom Word Star shortcuty. Boli použité aj v Borlandovských DOS programovacích prostrediach a napríklad v editore ktorý bol súčaťou Norton Commandera. Word Star je nasledovník Word Mastera a napísal ho rovnaký autor. Word Star už nie je iba čistý text editor ale vie aj formátovať text, čiže veci ako dnes MS Word a podobne.

Originál verzia Word Mastera je nakonfigurovaná pre TeleVideo 925/950 terminál, takže na pohyb kurzora sa používajú Televideo sequencie. Ale na webe sa nachádza návod ako patchnúť Word Master pre ANSI Terminál (Linux Console, X11, xterm, VT100, HyperTerminál, Geoff ASCII Terminál a pod.) Postup na webe používa na vytvorenie patchu ďalší CP/M program SID od DRI.
Marián si dal tú námahu, aplikoval patch a získal funkčnú ANSI verziu Word Masteru. Patchnutý Word Master pre ANSI Terminál je k dispozícii tu

Thursday, February 21, 2019

NCB85 17. Printer

Správny profi počítač má aj tlačiareň. Tak ju dostalo aj NCB85.



Zapojenie je priamočiare. Na data piny 2 až 8 konektora DB-25 sú privedené PA0 až PA7 z 8155. Na pin 1 so STROBE signálom je privedený PB0 z 8155 a na pin 11 s BUSY signálom je privedený PC0 z 8155.
https://en.wikipedia.org/wiki/Parallel_port#Pinouts

BIOS sa rozšíril o pár riadkov: ;----------------------------------------------------------------
; * LIST - Char out to paralel printer
; I: C=char to output
; O: -
; M: AF
LIST:   call LISTST
        mov a,c
        out RIOT_PA     ; data to PA
        mvi a,01h
        out RIOT_PB     ; set Strobe
W1:     call LISTST
        jnz W1          ; wait for end of printing
        mvi a,00h
        out RIOT_PB     ; reset Strobe
        ret
;----------------------------------------------------------------
; * LISTST - Paralel printer status
; I: -
; O: Z=0, A=255 - printer busy
; Z=1, A=0 - printer free
; M: AF
LISTST: in RIOT_PC      ; read Busy port
        ani 01h         ; PC0 mask
        rz              ; printer free
        mvi a,255       ; busy
        ret


Ďakujem Mariánovi za informácie a video.

Sunday, December 30, 2018

Jára Cimrman programující

Významný český vynálezca Jára Cimrman vynaliezol ako prvý plnovodiče. Tým predbehol o nejakých 100 rokov známeho súdruha, ktorý navrhoval nevyrábať polovodičové obvody, ale počkať si až na plnovodiče. Jára vypracoval grafický symbolický jazyk na kreslenie vývojových diagramov pre vojnové hry. Okrem symbolov pre začiatok, koniec, vstup, výstup, operáciu, tajnú operáciu, vetvenie, obkľúčenie, prielom, mal značky aj pre zákopy a lietadlá. Obrazce mohli byť pospájané buďto šípkami alebo kopijami. Po platformových hrách to je druhá oblasť, kde sa mu zaslúžene pripisuje prvenstvo. Galaga je jedna z vydarenejších realizácii jeho myšlienok.

Jára viedol živú korešpondenciu o programovaní s britskou konkurentkou Adou Lovelace. Ada potom s Járovým požehnaním použila jeho myšlienky pri popise fungovania Analytical machine Charlesa Babbageho. Jára jej poštou poslal na diernom štítku program na geometrické riešenie kvadratúry kruhu, ale cestou sa štítok stratil. Járov práve vynalezený a hneď aj stratený štítok mal kapacitu takmer 4867 byte. Americké ministerstvo chcelo pôvodne nazvať programovací jazyk Ada ako Jára, ale to sa stretlo so silným antilobbingom u vedúceho sekcie zemana Buresha. Najviac Járu ale zamestnávala vášnivá korešpondencia v esperante s istou Lindou Lovelace. Nezištne vymysleli Lindu(coordination_language) na efektívne koordinovanie spoločných oddychovo relaxačných aktivít. O podrobnostiach sa v denníku bližšie nešíril.

Thursday, December 27, 2018

NCB85 16. BIOS V3

BIOS pre dosky NCB85V2 a V3 som zase trošku sprehľadnil, rozdelil do viacerých file. Pridal som druhú funkčnú implementáciu blocking algoritmu. A tiež pridal podporu pre tri disketové mechaniky. Do zoznamu zmien patrí aj oprava jednoho bugu, zmena v buildovaní a presunutie kódu pre obojstranné média do drivera pre floppy controller. V predchádzajucich verziách bol tento kód súčasťou blocking algoritmu. Ale teraz je na výber z dvoch algoritmov takže aj preto išiel do drivera.

Pridám ešte krátky pokec o BIOSe pre CP/M a disketových mechanikách. CP/M nepodporuje obojstranné média, takže druhá strana diskety je vec implementátora. Pre CP/M druhá strana diskety neexistuje. Najjednoduchšie preto je zadefinovať stopy dvojnásobne dlhé a v polovici stopy sa prepnúť na druhú stranu - samozrejme bez toho aby CP/M o niečom tušilo. Takto je to aj v BIOSe pre NCB85 implementované. Dala by sa použiť aj schéma, že stopy sú dlhé ako počet sektorov na jednej strane, a CP/M by sa pri definovanej kapacite média a zaplnenosti disku nad 50%, snažilo ísť na stopy 80-159, ktoré na diskete nie sú - vtedy by sa zase preplo na druhú stranu diskety. Táto schéma by riešila aj problém súčasného pripojenia 5.25" a 3.5" obojstranných médií. Ale je tu problém, že v polovici kapacity sa vraciame na začiatok diskety na druhú stranu.

Pre podporu rôznych typov mechaník sú určité prekážky. Ak diskety používajú rovnakú bitrate, tak rôzne geometrie(kapacity) sa dajú zadefinovať priamo v DPB blokoch pre každú mechaniku. V takomto prípade treba prepísať tabuľky DPH, DPB0 s parametrami v drive_params.asm a pridať ďalšiu tabuľku DPB1. Pre väčšie rozdiely medzi mechanikami vznikajú dalšie prekážky, ktoré by bolo treba vyriešiť a ktoré nie sú v BIOSe pre NCB85 vyriešené. Obojstranné média s rozdielnym počtom sektorov na stopu by museli správne prepínať na druhú stranu pre každú mechaniku zvlášť, alebo použiť schému s prepnutím na druhú stranu od stopy 80. Ak by mali mať mechaniky aj rôznu bitrate, tak je treba pri každej zmene mechaniky poslať do floppy kontroléra nové informácie o bitrate a steppingu.

BIOS pre NCB85 podporuje 2 disketové mechaniky rovnakého typu. Tretia mechanika je teraz povolená, ale asi málokto to využije. Pre tretiu mechaniku platia určité obmedzenia. Musí byť rovnakého typu ako prvé dve, alebo musí byť jednostranná, mať rovnakú bitrate a mať menší, alebo rovnaký počet sektorov ako prvé dve mechaniky. To preto, aby správne fungoval kód pre druhú stranu diskety.

Z toho vyplýva, že kombinácie 2x1.44MB 3.5" DS/HD + 1x500kB 8" SS/DD, alebo 2x1.2MB 5.25" DS/HD + 1x 500kB 8" SS/DD sú prípustné. Pretože na SS/DD 8" médiách sú bitrate dvojnásobné a sektorov majú 26 jednostranne. Kombinácia 1.44MB 3.5" a 1.2MB 5.25" mechaník prípustná nie je, pretože na disketách 3.5" je 32 sektorov na stopu obojstranne, ale na disketách 5.25" je iba 26" sektorov obojstranne.

Odstránil som aj jeden bug. Na stope 0 sa občas nezistila chyba pri čítaní sektora. Nová verzia V3 je na GitHube tu:
https://github.com/ncb85/NCB85V2-BIOS/tree/master/bios_fdc_30

Ten istý bug som odstránil aj vo verzii V2.2 (viď GitHub). Vo verzii V3 som odstránil aj podporu PMD32SD, takže kto ju potrebuje, siahne po V2.2.

No a už som to vykecal, mám aj NCB85 V3. Je to zase jednodoskáč s podporou floppy mechaník na jedinej doske. Plne kompatibilný s V1 a V2. Popis asi nikdy nebude, pretože platí všetko to čo pre predchádzajúce verzie. Ostala mi jediná doska.

Tuesday, December 25, 2018

NCD85 6. Interleave

Pri pohľade na disketu je interleave abstraktný pojem, ktorý nie je každému jasný a nevie ho pochopiť. Ja som sa s interleave stretol prvý krát na PP-06, kde som mal MFM harddisk. Program z Norton Utilities otestoval disk a zistil aký interleave je pre danú kombináciu CPU, radič a HDD najvýhodnejší. Rozdiel vo výkonnosti disku mohol byť obrovský.

Na floppy disketách na CP/M tomu nie je inak. Nevhodný interleave spôsobí, že práca s disketami sa stane utrpením a všetko bude neskutočne dlho trvať. Pri vhodnom interleave sa diskety podstatne zrýchlia, aj keď rýchlosť PC s interleave 1 nedosiahnu. PC používali DMA a boli schopné prečítať celú stopu na jednu otáčku.



https://en.wikipedia.org/wiki/Interleaving_(disk_storage)

Interleave je optimalizácia rozloženia sektorov na stope. Pri interleave 1 idú sektory hneď za sebou 1,2,3,.. Lenže ak computer načíta sektor 1, musí hneď pokračovať v čítaní sektoru 2, pretože ten sa práve nachádza pod hlavičkou mechaniky. Ak to nestihne, pretože má ešte niečo iné na práci, sektor 2 mu ujde a musí čakat kompletnú otáčku diskety (napr. 32 sektorov) než sa zase objaví sektor 2 pod hlavičkou. CP/M potrebuje na spracovanie a deblocking načítaného sektoru troška viac času, ale interleave 1 mu žiadny nedáva. Pri interleave 1 je práca s disketami na NCB85 neznesiteľne pomalá. Ak je na stope 32 sektorov, tak na načítanie celej stopy sa disketa musí otočiť 32 krát, pričom väčšinu času sa čaká na dootáčanie hľadaného sektoru ku hlavičke. Iba malá čast času sa strávi čítaním z diskety. Pri interleave 2 je situácia podobná, len ešte o kúsoček horšia. Sektory idú v poradí: 1,iný,2,iný,3,.... Computer pri objavení sektoru 2 žiaľ stále ešte spracováva sektor 1. Takže dvojka mu zase ujde a musí čakať celú ďalšiu otáčku plus jeden sektor (ktorý už práve čakal) kým sa znovu objaví očakávaný sektor 2.

Interleave 3 je vhodný pre NCB85 na disketách 1.44MB. Po sektore 1 na diskete nenasleduje hneď sektor 2, ale nejaké dva iné sektory a až potom ide sektor 2. To dáva computeru dosť času na spracovanie načítaného sektoru 1, a hneď ako skončí može pokračovat v čítaní sektoru 2 a nemusí čakať kým sa disketa otočí o celú otáčku.

To aký je rozdiel pri rôznych interleave si je možné ľahko odskúšať. Je treba naformátovať disketu s interleave 1,2,3,4,5 .. a následne s každou zmerať čas kým sa prekopčí napr. 20 file na takúto disketu. Treba postupovať od interleave 1. Prvý interleave, pri ktorom odozva výrazne ožije a zrýchli je ten pravý. Pri interleave 3 dokáže computer prečítať celú stopu za 3 otáčky diskety. To je podstatne lepšie ako povedzme 33 (interleave 2, počet sektorov 32, spomalenie 11x). Zbytočne vyšší interleave tiež nemá zmysel, pretože computer potom nečinne čaká a pritom by už mohol čítať. V našom prípade pri interleave 4 by čakal 1 sektor. Pri interleave 4 by sa jedna stopa načítala za 4 otáčky diskety. To je oproti interleave 3 spomalenie o celú tretinu.

CP/M poskytuje možnosť realizácie interleave v BIOSe. To malo zmysel pri hard sectored disketách, kde dierky v diskete určovali začiatok každého sektora. Ale pri soft sektored disketách (bez dierok pre každý sektor) je to radič, kto rozdeľuje stopu na sektory a adresu sektoru zapisuje už pri formátovaní. Tým umožňuje naformátovať stopu s ľubovoľnou sekvenciou čísiel sektorov. Interleave na NCB85 je teda realizovaný pri formátovaní diskety. Utilita FDC.COM generuje čísla sektorov podľa zvoleného interleave.

Konkrétne v metóde generate_sec_numbers v:
https://github.com/ncb85/utilis-and-examples/blob/master/cpm_fdc/main.c riadok 83

Wednesday, August 15, 2018

NCB85 15. DEMO

Na obrázku je CP/M computer. Ale nie je to nejaký Kaypro, Osborne, Philips, NEC, Zenith, Robotron a podobne. Je to zakapotované NCB85 + NCD85 + ASCII Terminál, rok výroby 2018, niekde okolie Prievidze. Všetky tri dosky som tu na blogu už popísal. Za fotky a krásnu realizáciu ďakujem Mariánovi. Krabica je z nejakej starej 386 a monitor je Philips.



Namiesto EPROM je použitá asi DS1225, to je tiež jedna z možností ako obísť nutnosť vlastnenia UV mazačky. Ja som UV mazací problém vyriešil tak, že som na eBay kúpil UV sterilizér zubných kefiek za smiešnu sumu. EPROMiek sa do neho vojde aj 4-5 naraz.



Nedávno som odoslal poslednú dosku NCB85v2, takže už žiadne nemám. Keď bude niekedy čas, tak ešte plánujem jednu verziu. Ak sa nájde záujemca, ktorý by sa do toho pustil, rád poskytnem podklady a rady.

DOPLNENIE
Computer na obrázku nie je žiadny nevyužitý lapač prachu. Beží na ňom databázový program na evidenciu súčiastok. V tejto súvislosti dávam do pozornosti knižku, ktorú som nepoznal, ale už som si ju zohnal. K.Hodinár, Štandardné aplikačné programy osobných počítačov. Momentálne (august 2018) je skladom zopár kusov v antikvariátoch v SR-CZ. Je v nej popísané z užívateľského hľadiska CP/M a programy dBase, Word Star, Super Calc, Multiplan. Je tam aj návod ako pracovať a programovať v dBase. Funkčný a reálne použiteľný databázový program na 8085 s 2x floppy to už je niečo.

Tuesday, October 31, 2017

IoT 2. Radio nodes

Senzorové krabičky sú rozmiestnené kde treba a môže ich byť viac, typicky cca dva-štyri na jeden dom. V tomto článku predstavujem doštičku 4.9cm x 4.9cm, ktorá ušetrí nepríjemnú drôtikovú robotu, ktorú som spáchal už 7 krát a mám toho akurát tak dosť.

Jedná sa o žltú doštičku, ktorá spája Arduino Mini Pro a rádio modul a má vyvedené konektory na pripojenie napájania a senzorov. Arduino bude vo väčšine prípadov asi verzia 3.3V a v prípade prevádzky na dve tužkové batérie sa ešte musí upraviť. Rádio modul je RFM69W alebo HW na frekvencii v našich krajoch asi najvhodnejšej 433MHz. Doštička má aj konektor pre pripojenie antény, prípadne letovací bod na pripojenie kábla, alebo miniatúrnej špirálovej anténky z ebay.

Rádia RFM69 umožňujú šifrovanie, voľbu vysielacieho výkonu a ladenie frekvencie. Rozdiel medzi modulmi RFM69HW a W je vo výkone, HW je high power verzia, W je obyčajná verzia. V rámci domu používam verziu HW vždy so sníženým výkonom, je úplne zbytočné vysielať naplno. W by bolo asi tak akurát. RFM69 existuje aj vo variantách s C v názve, ale tie majú iný pinout a preto nepasujú. RFM69 C-éčkové verzie sú spätne pinovo kompatibilné so staršími rádiami RFM12B.

Na doske sú ďalej vyvedené nejaké univerzálne použiteľné piny z Arduina a hlavne tri špecifické konektory. Jeden je pre snímač otvorenej/zatvorenej brány, okna, alebo dverí - takzvaný reed switch. Na ebay sa dá kúpiť za niečo viac ako jeden dolár v sade aj s magnetom. Druhý konektor je pre senzor pohybu PIR, ktorý sa dá na ebay kúpiť za 99,-US centov a funguje veľmi dobre. Jeho pinout a funkcia je popísaná na Adafruit. Tretí je pre senzor teploty/vlhkosti HTU21D alebo iný senzor s rozhraním I2C. Všetky tri senzory majú vyvedené konektory v správnom poradí pinov tak, aby sa len DuPont káblom s príslušným počtom žíl pripojili ku konektoru a fungovali.


Na obr. je veľká anténa a pripojené snímače PIR a HTU21D.

Dosah rádia so špirálovými anténkami je po celom dome krížom krážom v pohode aj cez dve betónové dosky. S lepšou anténkou dokonca občas chytám signál z domu vzdialeného cca 200m, kde je tiež vysielaný iba špirálkou a zníženým výkonom HW rádia. Pri použití poriadnych antén na obidvoch stranách a plného výkonu RFM69HW by to mohlo fungovať aj podstatne ďalej. (Na ozaj veľké vzdialenosti rádovo v km sú ale určené LoRa rádia RFM96 a smerové viacprvkové antény Yagi s vysokým ziskom). Po nejakej dobe prevádzky už môžem napísať aj ako to funguje z dlhodobejšieho hľadiska. Prvé doštičky som zapol začiatkom 4-tého mesiaca 2017 a dnes na začiatku 11-teho mesiaca mám na batériach 2xAAA napätie cca 2,7V.

Schéma modulu je tu: schéma a gerber na výrobu je tu: gerber.

IoT 1. Sledovanie domácnosti

Domáca automatizácia a internet vecí ma už dlhšie zaujímali. V posledných 2-3 rokoch sa objavili neuveriteľne lacné Wi-Fi moduly ESP8266, senzory pohybu, teploty a vlhkosti, ceny displayov padli na rekordné hodnoty a náklady na výrobu dosiek plošných spojov PCB tiež dosiahli nové dno. Tak som sa do toho pustil.

Sledovanie domácnosti je vlastne zber údajov a ich zobrazovanie. Údaje sa zbierajú kde je to potrebné a rádiom sa posielajú do centrálneho modulu. Údaje si môžeme zobrazovať buď na display nejakej krabičky, alebo na PC alebo na telefóne. U mňa platia všetky tri možnosti:-) Pre Android a iPhone existuje nádherná aplikácia ThingSpeak Monitor Widget, ktorá funguje ako widget na ploche a zobrazuje údaje hneď po odomknutí telefónu.



Údaje sú k dispozícii všade tam, kde má telefón konektivitu, buď Wi-Fi alebo mobilné dáta. Je možné si nastaviť aj alarm, ak niektorá z hodnôt prekročí nejakú hodnotu. Domáca krabička s Wi-Fi zhromažduje údaje zo senzorov rozmiestnených po dome a údaje periodicky posiela do Thingspeak. Na telefóne (tablete) sú widgety, kde sa zobrazuje aktálny stav údajov. Je si môžné zobraziť aj graf s priebehom a rôznymi matematickými operáciami. Takisto je možné údaje a grafy sledovať kdekoľvek a na akomkoľvek PC na web stránkach Thingspeak. Celé to funguje cez obyčajné HTTP.



Hlavná krabička má rádiový modul, ktorý slúži iba na príjem. Prijíma dáta z ostatných modulov rozmiestnených po dome. Dáta zhromaždí a raz za čas pošle cez Wi-Fi do cloudu. Na to aby som videl či všetko (senzory, komunikácia cez Wi-Fi, rádiové moduly) funguje ako má, mám aj na hlavnej krabičke display. Je nenápadný a okrem zobrazovania údajov slúži aj na zobrazovanie funkcie, čiže kedy (a aký silný bol prijatý signál) dostal dáta z každého modulu. Ďalej zobrazuje stav pripojenia do internetu a stav komunikácie s cloudom. Na jej display sa pozriem len keď je nejaký problém, čo vlastne ešte nebolo:-)


Wednesday, January 11, 2017

NCD85 5. ATA interface

Vianočný čas som už tradične využil na bastlenie. Odladil som radič a jednoduchú testovaciu aplikáciu pre posledný doteraz neotestovaný konektor na NCD85v2. Má 40 pinov, určený je pre IDC konektor. Rozhranie má 16 dátových bitov, realizovaných portmi A a B. Ďalej má 2+3 adresové linky, plus linky na zápis a čítanie. Konkrétne sa jedná o IDE alebo Parallel ATA rozhranie realizované obvodom 8255 a zopár invertormi. Zapojenie je dnes už klasika v 8-bitovej retro technike.

Ako základ som vzal kód od Paula Stoffregena. Trochu som ho vylepšil, rozšíril ale hlavne prepísal do ASM pre 8085. Testovať som začal s CF kartami, a keď to už fungovalo tak som zapojil aj nejaké IDE disky. Mám zopár 16MB CF kariet a tie sa mi zdajú ideálne. Max veľkosť disku pre CP/M je cca 8MB, takže si viem predstaviť PCčkoidné CP/M, kde by boli dve disketové jednotky A: a B: a dva disky po cca 8MB C: a D: realizované jednou 16MB CF kartou.

Screenshoty z aplikácie
CF karta EMTEC 16MB

CF karta SILICON POWER 512MB

3.5" Disk 340MB, MAXTOR 7345AT bez LBA adresovania a bez 8-bitových prenosov


Sťahovať sa dá ako vždy na GitHub.

Sunday, December 25, 2016

Jára Cimrman 8-bitový, alebo teď tady byl..


Veľký český vynálezca a talentovaný mladý inžinier správne už v 19.storočí stanovil, že základnou veľkosťou informácie bude 8-bitov, čiže jeden byte. Vychádzal z toho, že 10 ako počet prstov je nedosiahnuteľný ideálny stav. Preto jeden prst nechával pre kontrolu parity a druhý pre funkciu z Cimrmanovskej algebry "tesne míňa", tvorenú produktom čiastočných hodnôt skoro všetkých bitov.

Jára bol vždy presvedčený zástanca 8-bitov. Veľmi správne argumentoval, že akademikmi navrhované zdvojnásobenie byte na slovo 16-bit je proti prírode a zdvihne sa veľká vlna odporu. Potvrdením jeho jasnozrivosti nie je len to, že 16 bitov dnes už prakticky vymizlo aj z mikrokontrolérov, ale aj to ako vášnivo sa stavajú účastníci old comp párty k počítačom triedy PC. Predaj tričiek s obrázkom PC/AT nikdy ani nezačal.

Vypracoval vysoko cenený príspevok do matematickej teórie hier, kde na rozdiel od klasických problémov so stratégiami vedúcimi k porážke protivníka postuloval, že v budúcnosti bude možné hrať aj hry s jedným hráčom, kde je cieľom hry prežit, "preskákať si" niečo a dokonca mať pri tom zábavu. Položil tak základy novej vednej disciplíny platformové hry, ktorej dôstojnou realizáciou v praxi sa stal 111 rokov po jeho narodení Manic Miner. Na počesť Cimrmanovho priateľa a suseda z detských rokov Krakonoša, bola špeciálne pre túto aplikáciu skomponovaná melódia "V jeskyni krále hor". Úplne revolučné bolo Cimrmanove poznanie, že hráč može mať aj viac životov. Predpovedal aj vynález cheatov, ktoré v budúcnosti zvýšia počet životov z tri na osem. Je autorom legendárneho výroku "Osem životov musí stačiť každému".

Dávno pred vznikom kybernetiky ako nového oboru v 50tych rokoch 20.storočia, predpovedal a v nehonorovanom článku do Technických novín s predstihom fundovane vyvrátil budúce ruské tvrdenie, že "kybernetika je buržoázna paveda".

PVaŠNR

Thursday, October 27, 2016

8" MOM MF6400

Maďari, to bol pre nás z ČSSR v rokoch 80tych západ. V Budapešti na trhoch mali platne západných kapiel, rifle, tričká, magneťáky, kazety, tovar o akom sme u nás ani neslýchali. Kedže pri pokuse o vycestovanie do MĽR sa nestrieľalo, tak Čechoslováci jazdili tam. Aj ja som mal tričko a rifle z Maďarska! Západňarsky to bolo aj s disketovými jednotkami.

Podľa obrázkov z webu som po cca 30 rokoch vedel, že MOM (Magyar Optikai Müvek) sú tie pravé SMEP mechaniky. Našiel som len stručné info, zistil som, že boli dva typy MF3200 a MF6400. Tým menej pravdepodobné bolo, že sa nájde papierová dokumentácia od maďarskej mechaniky spred toľko rokov. No a raz mi pri rozhovore EC1045 len tak s úsmevom utrúsil, že má také niečo doma na stole :-) Šťastnou náhodou išlo o dokumentáciu k MF6400. Ochotne mi ju naskenoval, za čo mu týmto tisíc krát ďakujem. Povzbudený som sa rozhodol, že si nejakú MF6400 od lenochoda kúpim. MF6400 na rozdiel od MF3200 dokáže aj MFM, nie iba FM záznam. Kedže sa jedná o jednostranné mechaniky, je kapacita jednej diskety 500,5kB. Interface MOM MF6400 je Shuggart, stačí nasunúť 50 pin konektor.

MOM Budapešt dokázala vyrobiť obojstranné plošné spoje so zelenou maskou a bielymi popiskami. Kabeláž realizovali americkými MOLEX, AMP a TE konektormi. ČSSR počítače sa museli uspokojiť s čokoládkami, maska na plošnom spoji nebola ani zelená ani žiadna. Disketové mechaniky MOM mali formu a fazónu. Designové predné čelo z plastu, premyslený a vymazlený systém uchopenia a centrovania diskety a zatvárania vstupného okienka. Boli vybavené blokovaním otvorenia počas aktivity. Čítací zosilovač realizovaný jediným čipom MC3470. Vyvinuté v spolupráci so SAGEM. Mechanika má optický snímač polohy, kde sa nachádza hlava a sama si generuje signál TG43. Remeň a všetky pružné časti sú aj po rokoch ako nové.


takto prišli od lenochoda (zabudované v Robotron 8-Zoll Beistellgerät für den PC1715)

Na stránkach robotrontechnik.de sa píše, že sú známe iba 4 exempláre tohoto dvojdecku:-) Ale ja viem minimálne o ďalších troch, ktoré toto leto lenochod predal. Tým myslím, okrem toho mojeho - štvrtého. No a keďže robotroňáci nad jeho ponukou na ebay krútili nosom, tak som s čistým svedomím kúpil a rozoberal. Ďalej tam píšu, že v súčasnosti je známych 7 exemplárov samotných MF6400. Nuž je ich o dosť viac. Okrem 4x2 kusov z dvojdeckov, predal lenochod toto leto aj samotných MF6400 cca 4kusy. Ešte viem o jednom exemplári v Brne a min. jednom niekde v Banskej Bystrici. EDIT: Nedávno(leto 2017) sa mi ohlásil zo Zlína majiteľ dvoch kusov MF6400, jedného kusu Robotron dvojdecku s ďalšími dvoma MF6400 a jednej MF3200.

Doska umožňuje široké možnosti prispôsobenia a využívania aj neštandardných signálov. Konfiguruje sa pomocou jumperovateľných headrov. Výrobca namiesto zvyčajného osadenia jumperov použil wire-wrap s americkým drôtikom KYNAR AWG30. Neviem či v tomto prípade už narazil na limity socialistického hospodárstva a jednoducho nemal jumpre, alebo to bol zámer. V každom prípade zvolil prácnejšiu, drahšiu ale spoľahlivejšiu variantu.


foto wire-wrap na headroch, napravo pole testovacích bodov


foto dosky elektroniky


doska elektroniky sa dá vyklápať

Pretože MF6400 nepotrebuje signál TG43 z radiča, je ideálna na pripájanie k PC radičom. Stačí len správne poprepájať signály na bežný 34 pinový PC kábel a dá sa korektne čítať aj zapisovať. V lete, keď som navrhoval adaptér na 8" mechaniky, som ešte žiadnu MF6400 nevlastnil:-)

Po zapnutí nefungovala ani jedna, čo EC1045 správne aj predpokladal a pred čím ma varoval. Zdroj nenabiehal, zjavne bol skrat na 24V. Príčinou boli 1.5uF/35V filtračné tantaly. Boli aj iné závady, jeden ruský 7406, na inej doske zase ruský 7474, chýbajúci klzný filc na ramienku prítlaku na hlavu, ulomené kondíky, nespoľahlivý mikrospínač a iné. Našťastie jedna z dosiek ktoré som mal, po odstránení viditeľných poškodení, fungovala na sto pro. Od tejto som sa už potom odchytil. Všetko som vyčistil, premazal, premeral, pomenil, nahradil a mechaniky už šlapú. Zapojenú mám jednu pod CP/M na NCD85. Fungujú spoľahlivo a je to zážitok sledovať ich činnosť. Ešte musím popracovať na vhodnom šasi.

Okrem informácii a foto na robotrontechnik.de som našiel niečo v Amatérskom Rádiu 8/89 v článku s názvom Diskety a disketové jednotky. Ďalšia dokumentácia (okrem tej od EC1045) a výborné fotografie sa nachádza tu/tady a tu/tady a tu/tady.