Tuesday, December 23, 2014

Koniec roka

Tentokrát nič z mojej tvorby. Dúfam, že poteším zopár nostalgikov jednou krásnou aplikáciou.

Cathode Vintage Terminal

Pekné Vianoce!

Sunday, November 23, 2014

NCB85 12. 2x360Kb

Dostal som sa o krok ďalej. Pripojil som k NCB85V2 dve disketové mechaniky. Najskôr 2x 1,44MB 3,5". Tie vďaka tomu aké sú miniatúrne som mal na stole viac menej len tak. Bez krabičky. Ale chcel som autentický zážitok, ako kedysi. S "veľkými" disketovkami. Síce CP/M začínalo na 8" mechanikách, ale 5,25" sa asi tiež ráta. Tiež majú značnú veľkosť. Len tak pohodiť na stôl sa nedajú. Zlepil som z plexiskla krabičku na dve 5,25" mechaniky. Osadil som 2x TEAC FD-55BR. Jedná sa o 360kB mechaniky, 40 stôp. BIOS som musel rozšíriť o podporu druhej mechaniky, logiku roztáčania a oneskoreného zastavovania dvoch motorov nezávisle na sebe. A šlape to :-)




Je to krása. Jeden sen splnený. 8-bitové CPU 8085 si obsluhuje dve veľké mechaniky. Takto som o tom sníval v časoch PMD85. Lenže vtedy sme mali iba kazeťáky :-( Je to krásne divadlo pre oči aj uši, keď napríklad pri kompilácii tri minútky hlavičky behajú hore-dole.

A čo taký Manic Miner? Ten by sa nahral odhadom za 10 sekúnd. Z kazeťáčiku to trvalo 5 minút. A ako sme sa nedočkavo tešili:-)

Aby to bolo dokonalé, urobil som ešte jednu vec. Vyhádzal som z BIOSu čo sa dalo, aby som sa dostal na čo najmenšiu veľkosť. Dostal som sa na 980H. To už umožnilo umiestniť v jednej 8kB ROM nielen BIOS ale aj CP/M. Tým pádom nie je potrebná systémová stopa. A to celé má za následok príjemnú skutočnosť a síce, že CP/M má k dispozícii plnú kapacitu diskety.



V riadku s kapacitou svieti pekných 360kB a v poslednom riadku "RESERVED TRACKS" sympatická nula.

Nechcem sa chváliť. Ale na eBay sa objavili za slušnú cenu 8" mechaniky. A nie hocijaké. Úplne "novo staré" ešte nevybalené. Typ double sided a double density. To znamená, že sa vééééľmi podobajú na dobre známe 5,25" 1,2MB mechaniky na HD diskety. 15x 512 sektorov na stopu, 360 otáčok a 500kBps. Jediný rozdiel je, že nemajú 80 ale iba 77 stôp a teda nepatrne nižšiu kapacitu. (Ono to vlastne je naopak. 5,25" HD sú PC kompatibilná zmenšenina starých 8" DS/DD mechaník) A samozrejme papajú gigantické 8" DS/DD diskety. Jedna mechanika už je moja :-) BTW len tak sa po nich zaprášilo.

Sunday, November 2, 2014

NCB85 11. CP/M bootstrapping

Po zapnutí napájania je obsah RAM nedefinovaný a procesor začne vykonávať inštrukcie od adresy 0000. Na konci vidíme prompt A> a CP/M čaká na príkazy. Pokúsim sa popísať ako sa od zapnutia dostaneme až k vytúženému cieľu.

Tradičné systémy fungovali tak, že v ROM bol len kratučký program, ktorý nahral z diskety obsah jedného alebo viac sektorov do RAM a ten spustil. Dokonca sa vyrábali radiče diskiet, ktoré nepotrebovali ani tú ROM. Po resete sami nahrali obsah prvého sektora na pevne danú adresu. Do jedného sektoru sa toho moc nevošlo, tak tam bol zase len kód ktorý nahral tých sektorov viac. Cieľom je aby boli v pamäti tieto časti. Vypísané od FFFF smerom nadol:

         _________________________  _
        |                         |  \
        |           BIOS          |  |
        |_________________________|  |
        |                         |  |
        |           BDOS          |  | cca 8kB
        |_________________________|  |
        |                         |  |
        |           CCP           |  |
        |_________________________| _/
        |                         |
        |           TPA           |
        |_________________________|

        |                         | <- 0100H
        |      System params      |
        |_________________________|
 


Typický BIOS mal okolo 1-4kB, BDOS má 3,5kB a CCP má 2kB. DRI dal k dispozícii vzorový BIOS vo forme zdrojových kódov. Každý si musí napasovať svoj BIOS podľa toho na akom hardware bude bežať. BIOS kompilujem na PC programom AS.

BDOS a CCP dával DRI k dispozícii len v binárnej forme. Adresované boli pre veľkosť RAM 20kB. Preadresovanie na cieľové miesto sa vykonalo utilitkou MOVCPM. Dnes už máme k dispozícii aj zdrojový kód. Preto som sa na starý spôsob s MOVCPM vypr... :-) Stiahol som cpm22.asm, upravil v hlavičke konštantu pre ORG a skompiloval programom ASM od DRI. Výsledkom je HEX obsahujúci CCP+BDOS skompilovaný presne na požadovanú adresu.

Takto som vytvoril komplet (BIOS+BDOS+CCP) runtime obraz CP/M. Další krok je voľba spôsobu ako dostať pri štarte do RAM potrebný kód. Prečo práve do RAM? Do EPROM sa uložiť nedá, pretože BIOS potrebuje zapisovať do svojich premenných. Navyše NCB85 má EPROM iba od 0000 do 2000H.

CPU začína beh od adresy 0000. Na tejto adrese má NCB85 po štarte pripojenú EPROM. Historicky sa BIOS+BDOS+CCP natiahli z rezervovaných stôp na diskete do RAM. RomBor vymyslel fintu, že BIOS umiestni nie na disk, ale priamo do EPROM. Na adrese 0000 je potom kratučký loader a za ním obraz BIOS. Loader prekopíruje obraz BIOS na určené miesto. Výhodu to má v tom, že je to rýchle pre vývoj. Mám emulátor EPROM. Na PC si skompilujem BIOS, pár kliknutiami ho nahrám do emulátora a stlačím reset na NCB85. A mám nový BIOS.

Kým som nemal EPROM emulátor Simulator-EPROM-64kByte ani ma takéto riešenie nenapadlo. Plánoval som mať v EPROM len loader, ktorý by ťahal aj BIOS z diskety. Každá zmena BIOS by znamenala kompiláciu a následný prenos na disketu.

Po tom čo loader presunie BIOS na cieľové miesto sa zavolá CBOOT vstupný bod BIOSu. BIOS inicializuje periférie a zavolá WBOOT. WBOOT natiahne do RAM zvyšok CP/M teda BDOS+CCP. Tieto som si vopred uložil do prvej stopy floppy diskety. Napísal som na to jednoúčelový programík. Kedže BDOS+CCP sa nemenia potrebujem ich ukladať len zriedkakedy :-) Po natiahnutí do RAM už nasleduje len skok na začiatok CCP. A CP/M sa ohlási promptom. Sme v cieľi.

Postup tu popísaný je len jedna z možností, každý si môže vymyslieť niečo iné. Niekto má na diskete uložený aj BIOS. Niekto pri volaní WBOOT nahráva len CCP. Keby sa dala použiť väčšia EPROM ako 8KB mohlo by byť všetko v EPROM a štart CP/M sakra rýchly. Fantázii sa medze nekladú ;-)

Saturday, November 1, 2014

NCB85 10. Blocking algoritmus

Po dlhej dobe som sa konečne dostal k NCB85 a dorobil jeden rest. Mal som síce napísaný driver ktorý vedel čítať a zapisovať na disketu, ale nemal som prístup na disketu ako filesystem z CP/M. K tomu aby CP/M vedelo pracovať s disketou je potrebné zaradiť do BIOSu patričné volania. A aby to nebolo také jednoduché, tak CP/M 2.2 podporuje iba 128-bytové sektory. Lenže žiadny MFM moderný radič nepodporuje 128-bytové sektory. Najmenší sektor aký PC8477B MFM kódovanie záznamu podporuje má 256-byte. Preto som si aj zvolil túto veľkosť.

Takže čo s tým? Je nevyhnutné použiť medzivrstvu. Každý jeden 256-byte fyzický sektor bude predstavovať dva 128-byte logické sektory. Samozrejme aby to malo aj nejaké výkonnostné parametre, je potrebné pozdržať fyzickú operáciu pri zapisovaní prvej polovice a zápis vykonať na jeden šup pre obidve polovice. Pri zápise iba jednej polovice je treba načítať celý 256-byte sektor, v RAM prepísať patričnú polovicu a celý sektor zapísať späť na disketu. Pri zápise do adresára je treba uskutočniť fyzickú operáciu bez pozdržania. Pri zápise do nealokovaného sektora sa sektor nemusí najskôr načítať do RAM, stačí prepísať starý obsah na diskete. Atď.. kombinácií je dosť.

Jednoduché nie? Našťastie DRI poskytol vzorový algoritmus. Dokonca univerzálny pre rôzne veľkosti sektorov. Jediný problém je, že verzia z knižky obsahuje BUG a verzia pribalená na OEM diskete bola opravená. Kedže som nemal chuť padnúť do pasce a stiahnuť si verziu s bugom, hľadal som na internete iný algoritmus. Našiel som verziu špecificky písanú pre 256-byte sektory. Preštudoval som, pochopil, upravil a .. padol som do pasce. Pretože keď som to konečne spojazdil, tak moja radosť trvala krátko. Začal som to riadne testovať a pri kopírovaní cca desiateho file mi CP/M vždy zahlásilo chybu.

Neostalo mi nič iné (lepšie povedané, zdalo sa mi to rozumné riešenie a rýchlejšie ako hľadať niekde bug), len skúsiť DRI algoritmus. Našiel som opravenú verziu, preštudoval, pochopil, upravil a .. bolo to pomalé. Už to síce nebolo buggy, ale pomalé ako fras. Každý zápis logického sektora vyvolal fyzickú operáciu. Čiže zápis jedného 256-sektora sa vykonal na dva krát. To sú dve otáčky diskety. A to už je dlhá doba. Chybu som našiel a už to fičí. Vážne fičí. Výkon na 3,5" diskete je veľmi slušný. Pri vhodnom interleave faktore sa stihne tých sektorov zapísať hneď niekoľko za jedinú otáčku. A to je teda rozdiel.

Friday, October 31, 2014

NCB85 9. CP/M Floppy drives

Na začiatok pár prekvapení. CP/M 2.2 nepozná adresáre. Všetko je v root adresári. Pre niekoho určite šokujúce, pre tých čo zažili napríklad nahrávanie z kaziet, prípadne SMEP počítače s FOBOS-om normálka.

CP/M 2.2 nemá prostriedky na označenie vadných blokov. MS-DOS si naformátoval disketu a vadné bloky zneprístupnil. Nielen že CP/M nemá definovaný štandard pre diskety, ale CP/M nemá ani len formátovací program :-) Niektorí vendori dodávali vlastný neštandardný formátovací program. Niektorí dokonca nútili ľudí kupovať si od nich naformátované diskety, a formátovací program nedodávali. Pochopiteľne z tohoto dôvodu vznikla spústa rôznych navzájom nekompatibilných formátov. Takže ako to bolo s tými vadným sektormi? Boli na to rôzne programy. Napríklad "reclaim.com" alebo "fbad.com" Tieto programíky vytvorili na disku file s názvom UNUSED.BAD, alebo CRCERR.BAD a podobne. Tento file mal priradené práve vadné sektory. Tento file potom už samozrejme nebolo vhodné zmazať:-) Aby nestrašil medzi ostatými files, bolo ešte možné ho priradiť userovi č.15 a tým ho zneviditeľniť. Väčšina ľudí pracovala pod user č.0.

CP/M teda nemá jednotný formát ani veľkosť sektorov. Každý vendor si zvolil čo mu vyhovovalo. CP-M začínalo na 8" jednostranných SD-single density disketách s 26 sektormi (po 128 byte) na track a 77 tracks. Na takomto formáte a médiu dodávalo DRI CP/M pre vendorov. Postupne sa prechádzalo na DD-double density diskety, veľkosť sa zmenšovala na 5,25" a začali sa používať väčšie veľkosti sektorov. Posledné verzie CP/M od niektorých vendorov už pracovali s 3,5" HD-high density disketami a sektormi veľkými až 1024 byte.

Pre porovnanie - v MS-DOS sú veľkosti sektorov vždy 512 byte. Povolené formáty su tri.

CP/M pre NCB85 teda môže používať ľubovoľný formát diskiet. Ja som napísal programík, ktorý formátuje diskety s 256 bytovými sektormi. Podporuje 4 typy disket. Tri sú 5,25" a jeden 3,5". Že tri?! Áno. Zo sveta PC sú známe dva 5,25" typy. Jeden je 360kB, má 40 tracks a 9 sektorov na track, potrebuje DD diskety. Druhý je 1,2MB, má 80 tracks a 15 sektorov na track, potrebuje HD diskety. A ten tretí? Dostali sa mi do rúk netypické disketovky TEAC FD-55F. Majú kapacitu 720kB, 80 tracks ale pracujú iba s DD disketami, teda 9 sektorov na track. Štvrtý formát sú najrožšírenejšie 1,44MB 3,5" HD diskety. Majú 80 tracks a 18 sektorov na stopu.

Po voľbe veľkosti sektorov na 256 byte, je treba zvoliť ďalšie parametre pre file system. Koľko stôp sa vyčlení pre systém, veľkosť alokačného bloku, max počet záznamov v adresári atď.
BDOS čísluje sektory od 0. Radič PC8477B podporuje aj sektory s číslom 0, preto nie je na čísla sektorov potrebná prekladová tabuľka.


PMD32SD má definované 2MB virtuálne disky

; Tabulka diskovych parametrov:
; disketa o velkosti 2MB
; 256 stop(dve strany), 64 sektorov na stopu
; 1020 alokacnych blokov o velkosti 2kB
; 256 adresarovych poloziek
; 1 systemova stopa
DPB:
dw64; SPT - pocet logickych sektorov na stopu
db4; BSH - posun bloku
db15; BLM - maska bloku
db0; EXM - maska rozsirenia
dw1019; DSM - velkost disku-1
dw255; DRM - velkost adresara-1
db240; AL0 - alokacna maska adresara
db0; AL1
dw64; CKS - velkost pola kontrolnych suctov
dw1; OFF - pocet systemovych stop


Pre diskety som zvolil nasledovné parametre:


Diskety 5,25" DD

; Tabulka diskovych parametrov:
; 5,25" disketa o velkosti 360kB(DOS aj CP/M)
; 40 stop(dve strany), 18 (256 byte) sektorov na stopu, 1440 sektorov celkom
; 179 alokacnych blokov o velkosti 2kB (prva stopa je systemova)
; 64 adresarovych poloziek (1alok.blok x 16sec/blk x 4entry/sec) - adresar zabera 1 alokacny blok
; 0 systemových stôp
DPB:
dw72; SPT - pocet logickych sektorov na stopu
db4; BSH - posun bloku
db15; BLM - maska bloku
db1; EXM - maska rozsirenia, 32kB na extent
dw179; DSM - velkost disku-1
dw63; DRM - velkost adresara-1
db128; AL0 - alokacna maska adresara
db0; AL1
dw16; CKS - velkost pola kontrolnych suctov
dw0; OFF - pocet systemovych stop



Diskety 5,25" DD v 80 tracks mechanike (na PC sa nepoužívali)

; Tabulka diskovych parametrov:
; 5,25" disketa o velkosti 720kB(CP/M)
; 80 stop(dve strany), 18 (256 byte) sektorov na stopu, 2880 sektorov celkom
; 355 alokacnych blokov o velkosti 2kB (prva stopa je systemova)
; 128 adresarovych poloziek (2x16x4) - adresar zabera 2 alokacne bloky
; 1 systemova stopa
DPB:
dw72; SPT - pocet logickych sektorov na stopu
db4; BSH - posun bloku
db15; BLM - maska bloku
db0; EXM - maska rozsirenia
dw354; DSM - velkost disku-1
dw127; DRM - velkost adresara-1
db192; AL0 - alokacna maska adresara
db0; AL1
dw32; CKS - velkost pola kontrolnych suctov
dw1; OFF - pocet systemovych stop



Diskety 5,25" HD

; Tabulka diskovych parametrov:
; 5,25" disketa o velkosti 1.2MB(DOS)/1.04MB(CP/M)
; 80 stop(dve strany), 26 (256 byte) sektorov na stopu, 4160 sektorov celkom
; 513 alokacnych blokov o velkosti 2kB (prva stopa je systemova)
; 256 adresarovych poloziek (4x16x4) - adresar zabera 4 alokacne bloky
; 1 systemova stopa
DPB:
dw104; SPT - pocet logickych sektorov na stopu
db4; BSH - posun bloku
db15; BLM - maska bloku
db0; EXM - maska rozsirenia
dw512; DSM - velkost disku-1
dw255; DRM - velkost adresara-1
db240; AL0 - alokacna maska adresara
db0; AL1
dw64; CKS - velkost pola kontrolnych suctov
dw1; OFF - pocet systemovych stop



Diskety 3,5" HD

; Tabulka diskovych parametrov:
; 3.5" disketa o velkosti 1.44MB(DOS)/1.28MB(CP/M)
; 80 stop(dve strany), 32 (256 byte) sektorov na stopu, 5120 sektorov celkom
; 632 alokacnych blokov o velkosti 2kB (prva stopa je systemova)
; 256 adresarovych poloziek (4x16x4) - adresar zabera 4 alokacne bloky
; 1 systemova stopa
DPB:
dw128; SPT - pocet logickych sektorov na stopu
db4; BSH - posun bloku
db15; BLM - maska bloku
db0; EXM - maska rozsirenia
dw631; DSM - velkost disku-1
dw255; DRM - velkost adresara-1
db240; AL0 - alokacna maska adresara
db0; AL1
dw64; CKS - velkost pola kontrolnych suctov
dw1; OFF - pocet systemovych stop


Pre porovnanie v MS-DOS sú alokačné bloky 1024 byte pre diskety 360kB a 512 byte pre diskety 1,2MB a 1,44MB.

Friday, May 9, 2014

NCB85 8. Expansion board

Od polovice mesiaca marec som sa zaoberal rozšíriteľnou doskou pre NCB5v2. Pre mňa najdôležitejšie tam je mať rozhranie na pripojenie floppy disket. Ako prvé bolo treba vybrať konkrétny typ radiča. Rozhodnutie padlo na NSC PC8477B. Je to asi najlepší radič aký bol pre disketovky vyrábaný. Je softwarovo kompatibilný s NEC FDC765, Intel 82077AA a ďalšími. Pre hovorí aj jednoduchosť zapojenia. Stačí pridať kryštál, 2x 10p kondíky a jedno odporové pole 5x 1k. To je všetko. Proti hovorí to, že nie je dostupný v puzdre DIP40. Ale je dostupný v puzdre PLCC a to sa spájkuje rovnako ľahko.

Okrem toho som dal na rozširovaciu dosku buffer na oddelenie zberníc a jeden GAL, ktorý to riadi. Nechcel som robiť plošák bez overenia schémy. Celé som to spáchal na univerzálke.



Po oživení hardware prišiel rad na software. Po dlhšom boji mám funkčný driver pre floppy diskety. Video s ukážkou ako si NCB85v2 rozumie s touto fascinujúcou technikou je tu:



Ešte chcem overiť rýchlosť, zatiaľ beží CPU na vysokých 8MHz, ale mám pocit že ~5MHz by mohlo s odretými ušami stačiť aj na 1,2M / 1,44M diskety. Tak nakoniec sa moja predtucha potvrdila. Dokonca aj CPU s kryštálom 9,8304MHz (a teda beží na 4,9152MHz) v pohode stíha aj HD disketám s rýchlosťou 500kbps.

Vybral som si sektory o veľkosti 256 byte. Kompatibilita s PC ktoré používa sektory o veľkosti 512 byte je dnes už asi nepotrebná. Zatiaľ som otestoval nasledovné formáty/kapacity:
5,25", DD, 40 stôp, kapacita 360kB, 18 sektorov
5,25", HD, 80 stôp, kapacita 1040kB , 26 sektorov (v PC má táto disketa kapacitu 1,2MB, 15 sektorov x 512 byte)

Diskety 3,5" zatiaľ neriešim, jediný rozdiel by mal byť v polarite signálu DENSEL, takže neočakávam žiadne problémy.Už som vyskúšal aj 3,5" diskety. Formát som otestoval tento:
3,5", HD, 80 stôp, kapacita 1280kB , 32 sektorov (v PC má táto disketa kapacitu 1,44MB, 18 sektorov x 512 byte).
Všetko funguje bez chyby. Tieto mikro diskety majú tiež svoje čaro. Zaberajú menej miesta, stačí im napájanie +5V a robia menej rámusu :-)

Saturday, February 8, 2014

NCB85 7. nové NCB85v2

NCB85 bolo navrhnuté ako minimalistická doska s 8085 procesorom. Chcel som ho využívať na testovanie úprav na kompileri SmallC. Časom naviac oproti plánovanému jednoduchému bootloaderu pribudol MON85 a nakoniec aj CP/M. Toto podstatne zvýšilo využiteľnosť a atraktivitu NCBčka. Dokonca aj v mojich očiach :-)
Fantastický popis NCB85 je na stránkach: Nostalcomp a 8bity. Popis CP/M pre NCB85 je tu: Borik
Po takmer dvoch rokoch sa prvá séria dosiek minula, ale občasný záujem tu stále je. To bol dôvod prečo som sa rozhodol pre druhú verziu.

Popis

NCB85v2 obsahuje výlučne súčiastky, ktoré sa montujú klasicky do diery. Minimálny rozostup pinov je 2.54mm, čo je vzdialenosť dvoch pinov na DIP puzdre. Na osadenie postačuje aj pištolová letovačka. Tú samozrejme neodporúčam, pretože nemá reguláciu teploty a veľmi ľahko môže zničiť dosku prehriatím a odlepením medi z podkladu.
Rozmery dosky sú jemne väčšie ako u prvej verzie. Tentokrát je to štandardných 16x10 cm.



Opravy
Nové NCB85v2 opravuje chybu prepojenia výstupu časovača so vstupom RST6.5. Teraz tam je správne vradený invertor.
Naviac opravuje aj druhú chybu časovača - príliš krátky prerušovací impulz. Pôvodne mal pri auto-reload mode výstupný impulz z timera 8155 dĺžku iba 10 alebo 16 strojových cyklov. V prípadne kryštálu 6.144MHz a deličky 7490 to bolo 10. V prípade 9.8304 MHz kryštálu a deličky 7493 to bolo 16 strojových cyklov. Lenže viaceré inštrukcie 8080 potrebujú až 18 strojových cyklov. Kedže sa prerušovací vstup testuje jeden krát za dobu vykonávania inštrukcie, dochádzalo k nevyhnuteľnému. Niektoré impulzy na prerušovacom vstupe sa strácali.
Nové NCB85v2 má do časovača privedený signál nezávislý od rýchlosti CPU a už pri kryštáli 6.144Mhz bude dĺžka výstupného impulzu 20 strojových cyklov. Pri použití rýchlejších kryštálov to bude zodpovedajúco viac.
Tentokrát je možné použiť aj 2716 a 2732 EPROMky v DIP24 puzdre. Na pine 24 je privedené VCC. Pri použití 27128 bude A13 stále na VCC. V starom NCB85 by bolo na GND.

Kompatibilita
Nové NCB85v2 je spätne plne kompatibilné. Všetko čo fungovalo na starom NCB85 funguje aj na novom. Sú tu staré známe 8251A a 8155 spolu s 64k RAM a 2-8kB ROM.
Adresy IO ostali rovnaké:
8251A - 08H..09H
8155 - 00H..07H
MON85 aj CP/M aj skúšobné programy využívajúce 8155 fungujú ako predtým. CPU môže mať osadený akýkoľvek kryštál, ale z hľadiska výkonu bude rozumné minimum asi 6MHz.
CMOS obvody OKI vraj dokážu fungovať až s kryštálmi 24MHz. Osvedčené CPU Toshiba spoľahlivo fungujú s kryštálmi 9.8304MHz. Rýchly test ukázal funkčnosť dosky s CP/M s kryštálom 12.228MHz.16MHz!! Pri 20MHz ešte stále nabootuje CP/M, ale potom sa už občas nejaká chybička objaví.

Zmeny
Rýchlosť sériového prenosu cez 8251A je nezávislá od hodín CPU a je voliteľná hardwarovo. Jedným jumperom je možné zvoliť baud rate v rozsahu od 600 do 38400 baud.
Pribudol dvojitý UART 16552. V pomerne malom puzdre sa nachádzajú hneď ďalšie dva sériové porty. To navyšuje celkový počet sériových portov na 3.
Pribudli dva "klasické" obvody 8255 a 8253/8254. Prvý je pripojený do DSUB 15 pin konektoru, ktorý je zapojený rovnako ako rozhranie pre PMD32. Port B a polovica portu C sú vyvedené na klasické headre so zámkom.
8253 je vyvedený na headre s tým, že k RST6.5 je možné pripojiť jeho timer/counter 0 namiesto timeru/counteru z 8155.

Konfigurácie
NCB85v2 je možné osadiť v minimálnej konfigurácii s 8251A/8155 a neosádzať 16552, 8253 a 8255. CP/M s BIOS V1.2 funguje cez 8155. Generátor baud rate potrebuje kryštál 9.8304MHz.
Samozrejme je možné osadiť 8255 a ďalšie obvody a neosadiť 8155.Časom snáď pribudne Už máme aj CP/M BIOS V2.0 upravený na porty 8255. PMD32SD sa pripája priamo ku NCB85v2 cez DB15 konektor. CP/M ponúka okrem filesystému aj veľký výber interpretrov, prekladačov (BASIC, C, PL/M, Lisp ..) a ladiacich nástrojov (DDT, SID, MAC, ..). Takto je možné písať programy v plnohodnotnom operačnom systéme, ktorým ostane k dispozíci 34 IO-pinov, štyri timer/countery a dve sériové linky.

Rozšíriteľnosť
Na doske je rozširovací konektor IDC 40 pinov. Vyvedené sú dátová a adresová zbernica. Riadiace signály WR/M, RD/M, WR/IO, RD/IO, RESET, INTR, INTA, ALE a pár ďalších.
Počíta sa s rozširovacou doskou, ktorá bude obsahovať radič disketových mechaník, stránkovanú a zálohovanú RAM 512kB s možnosťou non volatile RAM disku. Ďalej radič I2C zbernice s nejakým I2C obvodmi priamo na doske (IO porty, real time clock / calendar, teplomer, EEPROM). Tieto obvody by malo byť možné využívať aj v prípade, že rozširovacia doska bude pripojená k inej doske, napríklad nejakej s CPU Z80. Iba pre CPU 8085 a teda dosku NCB85v2 tam ešte bude veľmi zaujímavý obvod 8256. Tento obvod kombinuje v jednom puzdre UART, IO, timer/countre a radič prerušení(8251+8255+8253+8259)!

Nové chyby :-(
Objavil som jednu popisku (na plošáku) pri JUM4, ktorá má správne byť pri JUM3. Hovorí, že treba vytiahnuť príslušný jumper ak sa zapojí JUM5 na aktiváciu ALL RAM (CP/M) módu.
Jedna malá chyba je v zapojení tretieho sériového portu. Pin 31 obvodu TL16552D mal ísť na VCC. Ale nie je to nič vážne, pri osadení JUM9 to bude fungovať. TL16552D je jediný obvod, ktorý som zatiaľ neosadil a neotestoval. Nemám ho, ale už som ho objednal z USA. funguje to aj bez JUM9. Obidva kanály UART 16552 sú funkčné a otestované :-)





Dostupnosť
Ponúkam zopár dosiek a nasledovné súčiastky ako nekompletné kity: 8251A a 8254 aj so socketmi, 8085 CPU, 8155, kryštál 6.144MHz, 9.8304MHz a 16MHz. V prípade záujmu môžem ešte poskytnúť 7400, 7432, 74138, 74573, RAM, 8255, 8256 a naprogramované EPROMky.

Na stiahnutie
Schema

Thursday, January 30, 2014

NCB85 8. nedokumentované inštrukcie 8085

Trocha som zase pátral po informáciach o (nedokumentovaných) inštrukciách CPU 8085. Našiel som dva pekné 8085 cheatsheet-y

Jeden je tu:
http://saundby.com/electronics/8085/8085Ref.pdf

Druhý od Pavla Zímu je tu:
http://pastraiser.com/cpu/i8085/i8085_opcodes.html

Obsahujú aj nedokumentované inštrukcie, ten od Pavla dokonca aj ich časovanie a popis zmeny príznakov.

No a čo je hlavné, podarilo sa mi získať takmer 40 ročný dokument, priamo z ... :-) Nie celý. Ten veľmi milý pán, ktorý to skladoval celé tie roky mi oscanoval časť popisujúcu to čo nikdy nemalo byt zverejnené. Kedysi pracoval v ... a priamo na 8085.

Takže tu je to prepísané a k dispozícii ďalším fandom do vykopáviek. Z pochopiteľných dôvodov sem nebudem dávať scan. Z tých istých dôvodov sú tu aj bodky namiesto mena istej známej firmy. Pre známych je dokument k nahliadnutiu u mňa :-)

Začnem tým čo sa vyskytuje na toľkých miestach na webe:

Popis

DSUB
BC pair is subtracted from HL Pair affecting all flags. HL = HL - BC. Táto inštrukcia je opak DAD B.
Hex Code: 08h
States: 10
Flags: Z,CY,S,P,AC,V,K

JNK [16bit location]
Jump to Location if 'K' flag is reset
Hex code : DDh
States: 7/10
Flags: unaffected

JK [16bit location]
Jump to Location if 'K' flag is set
Hex Code: FDh
States: 7/10
Flags: unaffected

ARHL
Arithmetic right shift of HL register pair. MSB of the H register which means the mark does not change. The least significant bit of L register enters into the CY flag.
Hex code : 10h
States: 7
Flags: CY,V

RDEL
Rotate Left DE Pair
Hex code: 18h
States: 10
Flags: CY - depends on Bit 15

LDHI data
Add Immediate to HL pair. DE = HL + imm
Hex Code : 28h
States: 10
Flags: unaffected

LDSI data
Add Immediate to Stack Pointer. DE < - SP + imm Description: Adds an 8 byte number to the SP
Hex Code : 38H
States: 10
Flags: unaffected

RSTV
Description: Does a RST 8 instruction when the 'V' (must be overflow)flag is SET.
Hex Code: CBh
States: 6/12
Flags: unaffected

LHLX
Description: Loads HL Pair with the contents of address stored in the DE pair. HL = [DE]
Hex Code: EDh
States: 10
Flags: unaffected

SHLX
Description: Stores the HL Pair contents to the address specified in the DE pair. [DE] = HL
Hex Code: D9h
States: 10
Flags: unaffected

Popis príznakov

Pribudli dva nové príznaky K a V. Mali hlavne uľahčiť prácu s číslami so znamienkom.
K príznak je bit 5 v PSW registri. V je bit 1.

V príznak je: carry príznak do najvyššieho bitu "exclusive-or" carry príznakom z najvyššieho bitu(čo je C, bit 0 v F registri) - čo je štandardný výpočet pretečenia pre sčítanie a odčítanie so znamienkom.
Popis flagu podľa dokumentu je:
Overflow. Set if signed overflow occurs. V is affected by DAD, DSUB, RDEL, the rotates and any instruction which affects S, AC and P.

Skoro všade je príznak K popísaný zmätočne a navyše aj nesprávne. Dá sa nájsť takáto rovnica:
K = S1 & S2 | S1 & R | S2 & R.
Je to zle, neplatí to v určitých prípadoch. K príznak je v skutočnosti: V príznak "exclusive-or" S príznak.
Správny popis flagu podľa dokumentu je:
Greater than. Set if a signed greater than occurs in a comparison or subtraction (i.e. BC > HL in DSUB). Cleared if not. K is also affected by any instruction which affects S, AC and P although the result is meaningless. Additionally, INX, DCX set K if carry (borrow) occurs. This makes efficient double length loop counting possible.

Ultimátny dôkaz majú na "svedomí" fanatici, ktorý leptajú staré procesory a pod mikroskopom skúmajú kremík. Reverzným inžinierstvom už pred rokom prišli na to čo mám teraz potvrdené aj z dokumentu od toho milého pána.
http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html

A pikoška na záver. Dôvod "utajenia" nebol ani problém s chybovosťou a ani (teda nehralo to hlavnú úlohu) nekompatibilita s prichádzajúcim 8086. Bol prozaickejší. Je na to pekné české "nejsou lidi". Ale je fakt, že to nemalo prioritu. Bol to dead end. 8086 už takéto príznaky nemalo.

Na stiahnutie:
Tundra 80C85 datasheet (kde to je tiež zle :-))
80C85