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, keď 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 nedosiahnu.



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). Vyšší interleave tiež nemá zmysel, pretože computer zase čaká, povedzme 1 sector pri interleave 4 - 4 otáčky diskety. To je 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:-)