OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů

Registrace na OCP IV ZDE!

Právě je 23 říj 2018, 23:48

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 78 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6  Další
Autor Zpráva
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 03 bře 2018, 15:03 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 06 říj 2015, 16:37
Příspěvky: 1682
Bydliště: Praha východ
Has thanked: 9 times
Been thanked: 119 times
hele faraone, když ti to jde tak dobře, mám pro tebe úkol :) užitečný úkol.
Jde o to napsat algoritmus, který se pak zakóduje do mikropočítače. Ten algoritmus má udělat toto:

Je 40-bitové binární číslo a má se převést na BCD kód a to tak, že se bude číst postupně po 8 bitech ze 40-bitového binárního čísla do pěti 8-bitových registrů A, B, C, D, E a náslůedně se toto celé 40-bitové binární číslo rozložené přes 5 registrů převede na BCD čísla. Každé BCD číslo v rozsahu 0000 až 1001. Ty se pak zobrazí na displeji.

Co ty na to? :)

_________________
Hyperinzerce - historické počítače

ComputerAsylum WEB: http://www.computerasylum.co.uk
Twitter: https://twitter.com/COMPUTERASYLUM
Denní zprávy: https://www.euronews.com/
Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 03 bře 2018, 15:29 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1898
Bydliště: Jesenice
Has thanked: 8 times
Been thanked: 112 times
computerasylum, nějak Ti to špatně počítá, 40-ti bitové binární číslo je 12 digitů, to budeš potřebovat na výsledek 6 byte registrů, když zanedbáš nějaké drobné :)
Ta binární hodnota je se znaménkem, nebo bez ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 03 bře 2018, 17:04 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 06 říj 2015, 16:37
Příspěvky: 1682
Bydliště: Praha východ
Has thanked: 9 times
Been thanked: 119 times
danhard píše:
computerasylum, nějak Ti to špatně počítá, 40-ti bitové binární číslo je 12 digitů, to budeš potřebovat na výsledek 6 byte registrů, když zanedbáš nějaké drobné :)
Ta binární hodnota je se znaménkem, nebo bez ?


špatně jsi to pochopil. Tedy znovu:

se bude číst postupně po 8 bitech ze 40-bitového binárního čísla do pěti 8-bitových registrů A, B, C, D, E

Nejprve se přečtou bity <39:32> a uloží se třeba do registru A, pak bity <31:24> do registru B, pak bity <23:16> do registru C, pak bity <15:8> do registru D, naknec bity <7:0> do registru E.
Binární hodnota je bez znaménka.

Z obsahu registrů A až E se vypočte 12 BCD čísel, která se pošlou na displej... Chápeš to? :D

_________________
Hyperinzerce - historické počítače

ComputerAsylum WEB: http://www.computerasylum.co.uk
Twitter: https://twitter.com/COMPUTERASYLUM
Denní zprávy: https://www.euronews.com/
Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 03 bře 2018, 18:08 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1898
Bydliště: Jesenice
Has thanked: 8 times
Been thanked: 112 times
To je plýtvání registry, normálně se to nacpe do registrů výsledku a nad nimi se udělá převod na BCD nibly.
Z tohoto výsledku se to přímo zobrazuje, přepočet na segmenty se dělá přímo při multiplexním zobrazení.
Na znaménko se ptám, protože nevím, jak to chceš zobrazit, 40-bit číslo bez znaménka je max. 1099511627775, to je 13 míst, kdyby to bylo se znaménkem, tak stačí 12 míst displeje a znaménko.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 04 bře 2018, 15:28 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1585
Has thanked: 62 times
Been thanked: 268 times
A kdo říká že mi to jde dobře, kdybych v lednu nepřišel na tuhle fintu, tak to ani nezveřejním a čmárám si to dál do sešitu.
Teprve tím flagem ERROR tenhle projekt dostal smysl a usoudil jsem že by to mohlo být aspoň trochu použitelné :lol:

Neznám další dostupné prostředky, které by se k tomu převodu daly použít, takže algoritmus bych navrhoval nejjednodušší možný. Na principu mechanické počítačky s klikou.
Těch pět binárních registrů brát jako jedno čtyřicetibitové číslo, ze kterého se postupně budou odečítat mocniny deseti, a s každým odečtením inkrementovat vždy příslušná číslice na displeji. Při dvanácti řádech to dá v nejhorším případě 108 cyklů, což by se dalo unést i na procesoru s taktem v kilohertzech.
Ale hádám že jsi očekával něco sofistikovanějšího ;-)

Ještě mě napadlo jedno upřesnění. Ty aliasy WORK a DATA můžou použít registr dvěma způsoby, buď hodnotou nebo odkazem, takže ve skutečnosti jimi lze ukazovat nejenom na všech osm registrů, ale také na všech 4096 slov na paměťovém bubnu/médiu! Takže jimi lze pracovat s celou operační pamětí.
Taková drobná "vlastnost" instrukční sady :twisted:

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 04 bře 2018, 16:10 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1898
Bydliště: Jesenice
Has thanked: 8 times
Been thanked: 112 times
To je vlastnost indirect adresování, nikoliv instrukční sady.
Instrukční sada má zbytečnou instrukci odečítání :lol:

Ten výpočet je značně dřevařský, jelikož tam musíš mít vyjádřené mocniny 10 a musíš se vracet při podtečení.

Jednodušší si uložit 40 bitů do 5 Byte jako little endian, nad to stejně 8 Byte (13 nible) dekadického výsledku a toto 40x násobit dvěma a před každým násobením provést nad výsledkem dekadickou korekci.

Tak třeba pro 12 bitovej PIC:

;****** prevod XB 40b binarni na XD BCD **********
DCX1 CLRF XD0 ;nulování pole výsledku
CLRF XD1
CLRF XD2
CLRF XD3
CLRF XD4
CLRF XD5
CLRF XD6
MOVLW 028h ;opakuj 40x
MOVWF CCNT
DCX2 MOVLW 33 ;BCD adjust XD0
ADDWF XD0
MOVLW 3
BTFSS XD0,3
SUBWF XD0
MOVLW 30
BTFSS XD0,7
SUBWF XD0
MOVLW 33 ;BCD adjust XD1
ADDWF XD1
MOVLW 3
BTFSS XD1,3
SUBWF XD1
MOVLW 30
BTFSS XD1,7
SUBWF XD1
MOVLW 33 ;BCD adjust XD2
ADDWF XD2
MOVLW 3
BTFSS XD2,3
SUBWF XD2
MOVLW 30
BTFSS XD2,7
SUBWF XD2
MOVLW 33 ;BCD adjust XD3
ADDWF XD3
MOVLW 3
BTFSS XD3,3
SUBWF XD3
MOVLW 30
BTFSS XD3,7
SUBWF XD3
MOVLW 33 ;BCD adjust XD4
ADDWF XD4
MOVLW 3
BTFSS XD4,3
SUBWF XD4
MOVLW 30
BTFSS XD4,7
SUBWF XD4
MOVLW 33 ;BCD adjust XD5
ADDWF XD5
MOVLW 3
BTFSS XD5,3
SUBWF XD5
MOVLW 30
BTFSS XD5,7
SUBWF XD5
DCX3 RLF XB0 ;nasobeni 2x
RLF XB1
RLF XB2
RLF XB3
RLF XB4
RLF XD0
RLF XD1
RLF XD2
RLF XD3
RLF XD4
RLF XD5
RLF XD6
DECFSZ CCNT
GOTO DCX2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 04 bře 2018, 20:41 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1585
Has thanked: 62 times
Been thanked: 268 times
V téhle instrukční sadě je to jediný způsob, jak se do té paměti dostat.
Odečítání být musí, protože nemám jak udělat dvojkový doplněk. Leda bych sčítačku ručně nastavoval příznakem D, ale takhle se to udělá samo, přímo bitem v kódu instrukce. Spodním bitem v horním nibblu 8-)

Pokud bych mohl použít násobení (jenže nevím na jakém mikropočítači se to bude provozovat a jak složitě se tam bude provádět), tak bych každý z těch pěti bajtů roznásobil stovkou do dvou a přičetl do šestibajtového pole, vždycky s příslušným posunem aby se to překrývalo. Tím bych provedl "stovkovou" korekci, a na závěr stačí nad každým z těch šesti bajtů v poli udělat desítkovou (protože budou už jen 0..99) a přímo z nich to pustit do displeje.
Nebo to počítám blbě? Nechce se mi to zkoušet, radši budu sepisovat další kapitolu, tam začnou schémata ;-)

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 04 bře 2018, 23:09 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1898
Bydliště: Jesenice
Has thanked: 8 times
Been thanked: 112 times
To je samý jakby, kdyby.
Počítej s tím, že bude procesor stejně blbej, jako ten Tvůj, když neumí ani negaci, tak musí mít odečítání.
Tenhle 40 let starej blbeček by to určitě zvládnul :) https://usermanual.wiki/Document/MC1410 ... 06593/view


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 04 bře 2018, 23:39 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1585
Has thanked: 62 times
Been thanked: 268 times
Proto jsem původně použil jenom odečítání. K tomu stačí ozubená kolečka, ale je jich potřeba hodně.

TWELVE negaci umí. Stačí slovo odečíst od nuly a pak odečíst jedničku. Jsou k tomu potřeba tři instrukce a jeden volný registr, nejlépe R0. A samozřejmě to odečítání, bez něj to nejde :twisted:

Konstruktéři blbečků museli používat hlavičku. Hned jsem ho přidal do archivu.

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 05 bře 2018, 09:16 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1898
Bydliště: Jesenice
Has thanked: 8 times
Been thanked: 112 times
Jenže konstruktéři to taky dělali co nejjednoduší.
Logické operace jsou jednoduché z hradel, sčítačku koupíš v krámě SN7483 a dvojkový doplněk uděláš programově.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 31 bře 2018, 09:57 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1585
Has thanked: 62 times
Been thanked: 268 times
Minulé díly seriálu:
Kapitola 1 - Zpátky do roku 1960
Kapitola 1 - Errata
Kapitola 2 - Rat Race



Minipočítač TWELVE

Kapitola 4 - Pomněnkový salát



Tahle pochoutka měla být lék na zlepšení paměti v jedné staré televizní pohádce, ale asi to moc nefunguje, protože obvyklá praxe zapomnětlivých lidí je dosud, jako už odedávna, vázat si uzel na kapesníku. Takový uzel může být buď zavázaný nebo rozvázaný, což jsou právě dva různé stavy, takže pojme informaci o velikosti jednoho bitu. To není nic moc, a není to ani moc užitečné, ale průměrný kapesník má čtyři rohy, je tedy čtyřbitový. Do toho už by se nějaká ta zpráva zakódovat dala, pokud by někdo chtěl nosit v kapse chuchvalec uzlů.

I počítače si potřebují pamatovat, a je to vlastně to nejdůležitější co musí dělat, aby vůbec mohly něco dělat. Takže tohle byla první věc, kterou jsem začal řešit - jak si v počítači něco zapamatovat. Jenže počítače kapesníky nemívají, zato mívají klopné obvody. Ty se nevážou, ale přepínají mezi jedničkou a nulou, což jsou také dva různé stavy. Jedničkám a nulám totiž počítače rozumějí trochu lépe než uzlování, proto ho radši přenechávají skautíkům a jiným pišišvorům.



"Nestřílejte na pianistu, dělá, co může."

To prý žádal nápis nad barem kdysi kdesi ve Skalistých horách. Proto aby bylo předem jasno, na oldcompu je nemálo lidí, kteří tomuhle, co tu popisuji, rozumí mnohem lépe než já, a nebál bych se přímo říci že tomu rozumí. Na rozdíl ode mě. Tak na mě nestřílejte, dělám co můžu, i když vím že by to šlo udělat lépe.
Ale rád si o tom popovídám a někdy si nechám i trochu poradit.

Takže půjdeme rovnou na věc. O pamatování se v TWELVE stará paměťová jednotka - MEMORY UNIT. Paměť v ní je dvojího druhu - rychlá a pomalá. Ta rychlá jsou registry, se kterými pracuje procesor přímo, pomalá - jinak také operační - je umístěná na magnetickém bubnu. Nebo v jiném podobném médiu, pokud by se případnému (dostatečně šílenému) staviteli nechtělo soustružit několikakilogramový hliníkový kotouč, lisovat do něj ložiska, vyvažovat ho, a polévat feritovým roztokem. O nastavování spousty zápisových a čtecích hlav nemluvě.
Tahle kapitola je věnovaná pouze té rychlé paměti - registrové bance, ve které se mohou vyskytovat pouze právě zpracovávaná data.

Každý bit je uložený v jedné paměťové buňce, složené z několika hradel. Buňky ve TWELVE jsou tří různých druhů:

LATCH

Nejjednodušší typ paměťové buňky je LATCH - závora, do které se po otevření vstupu (závora nahoru) něco zapíše, a po jeho zavření (závora dolů) je to na jejím výstupu pořád, až dokud se tam nezapíše něco jiného. Do takových závor jsou uložené příznaky C, D, E a F, také se z nich skládá instrukční registr OPCODE v řadiči a pomocné registry DATA a WORK na sběrnici LOAD.
Na jednu závoru stačí čtyři hradla NAND.

REGISTER

Protože univerzálních registrů je víc - osm, ale číst je potřeba vždy jen z jednoho, jsou tyhle buňky o maličko složitější. REGISTER je vlastně závora, která má na výstupu navíc hradlo AND, to otevírá nebo zavírá i ten výstup, a připojuje ho ke sběrnici LOAD. Skoro jako by byly závory z obou stran.
Z těchhle buněk jsou poskládané registry R0R6, je jich proto nejvíc.

COUNTER

Nejkomplikovanější je registr R7, který má umět úplně stejné věci jako ostatní univerzální registry, ale navíc musí fungovat jako čítač - COUNTER, protože pracuje jako PROGRAM COUNTER. Dá se do něj libovolně zapisovat, otevřít nebo zavřít výstup, a umí si sám k sobě přičíst jedničku! Přičemž stav čítače se mění se sestupnou hranou signálu STEP, vzestupná ho na to připraví. Mezitím se dá číst jako obyčejný registr, na výstupu zůstává stále původní hodnota. Pokud by během inkrementace došlo k zápisu, nebo naopak, vyhraje ten stav, jehož signál se vypne později, ale takovou rvačku nesmí v tomhle baru šerif - řadič dovolit.
Tady už jsem těch hradel potřeboval trochu víc, dvanáct na každý bit. NAND, AND, OR. Dalo by se to i zjednodušit.

Takhle vypadají zapojení všech tří druhů paměťových buněk:

Obrázek

Pro otestování jejich funkce, a aby je bylo vidět tak trochu v pohybu, jsem si udělal malou "simulaci", rozmístění hradel odpovídá jejich pozici na schématu:

https://www.youtube.com/watch?v=90fg23X2XoU
phpBB [video]


Inu, co nedovede legendární VisiCalc ze sedmdesátých let, to ani dnes prostě nepotřebuješ :-D



"Jako v kampeličce."

Co si uložíme, to máme. Později si to můžeme zase vyzvednout a použít, na rozdíl od klientů zkrachovalých kampeliček, ze kterých už nevyzvedne nikdo nic. Dokonce můžeme uložený obsah vybrat víckrát, a on tam pořád je! Zajímavý model pro banky, ale asi by se jim moc nelíbil. Jenže na rozdíl od bank, když si potom uložíme něco jiného, tak to co tam bylo předtím jednoduše zmizí. To už by se bankám líbilo mnohem víc, a v historii bylo dost případů které se o něco podobného pokoušely.

Ve TWELVE můžeme ukládat a vybírat přímo do/z osmi účtů - registrů, pojmenovaných R0R7. Kromě toho registrová banka obsahuje i všechny čtyři příznaky. Nic dalšího tam není.
Práce s registrovou bankou je jednoduchá. Řadič vyšle jeden z osmi signálů Rx, který otevře výstup jednoho z osmi registrů. Tím se na jejich společném výstupu z registrové banky výstupu objeví požadovaná data. Pokud je potřeba do otevřeného registru zapsat novou hodnotu, pošle řadič signál pro zápis, a do aktuálně vybraného registru se zapíší data ze vstupu. Současně se zapíší i všechny čtyři příznaky. Jejich stav je na výstupu neustále, ty není potřeba nijak otevírat.

Obrázek

Některé vývody jednotlivých paměťových buněk jsou tu umístěné trochu jinak než na prvním obrázku, takže tady jsou vysvětlivky pro lepší přehlednost:

Obrázek

Popis schématu registrové banky bude celkem stručný:
  • Zleva vstupuje šestnáct bitů ze sběrnice STORE, doprava vystupuje šestnáct bitů na sběrnici LOAD a na vstup adresy bubnu. Celkem 12 datových (0..B) a 4 příznaky (C..F).
  • Dole jsou linky pro výběr registru řadičem a krokovací signál STEP čítače v R7. Vybraný registr otevře svůj výstup a je možné do něj zapisovat. Signálem STEP se R7 inkrementuje na další adresu v pořadí.
  • Vlevo dole jsou dva signály pro zápis. SAVE zapisuje na magnetický buben, STORE do registrů, a každý z nich zapisuje příznaky. Vždy se zapíše všech šestnáct bitů, datové buď do registru nebo na buben.
  • Vpravo nahoře vychází signál STOP, vyvolaný přetečením čítače, který zastaví vykonávání programu při přechodu z adresy 4095 na 0 (nebo chcete-li, z FFF na 000). Poslední slovo na bubnu je tedy i posledním slovem programu, není možné pamětí rotovat pořád dokola.



"Sečteno, podtrženo."

Jak jsem psal v první kapitole, tak tady jsem si dopřál trochu luxusu a použil osm univerzálních registrů, z nichž každý může fungovat jako akumulátor, nebo ukazatel do paměti, nebo počítadlo, nebo jako obyčejný registr. A to všechno dohromady. Akorát ten R7 se nesmí měnit úplně libovolně bez rozmyslu, protože je používán jako PROGRAM COUNTER, a ono by to pak skákalo kdovíkam ;-)
Ale je fakt že luxus něco stojí, a jestli dobře počítám, je na tuhle poměrně malou část počítače potřeba 609 hradel, což je ve srovnání s tím zbytkem poměrně dost. Ale na druhou stranu, máme tu k dispozici rovných 100 okamžitě použitelných bitů, což také není úplně málo. Na řízení obyčejné automatické pračky, nebo podobného aparátu, stačí mnohem méně.

Na závěr si ještě vyzkoušíme čítání R7, zkráceného na čtyři bity, aby se vešel na obrazovku:

https://www.youtube.com/watch?v=A2Lv6y7HFYo
phpBB [video]


K tomu asi není co dodávat, snad jen že po signálu STOP se dokončí právě rozpracovaná instrukce a další se už nenačte. Kolotoč v řadiči se zastaví a program skončí, stejně jako tahle kapitola.

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 30 dub 2018, 03:35 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1585
Has thanked: 62 times
Been thanked: 268 times
Minulé díly seriálu:
Kapitola 1 - Zpátky do roku 1960
Kapitola 1 - Errata
Kapitola 2 - Rat Race
Kapitola 4 - Pomněnkový salát



Minipočítač TWELVE

Kapitola 8 - Ajn, cváj, policáj



Draj, fír, grenadýr. Stará pecka. Co by tedy počítač měl umět lépe, než počítání? No, asi nic, jinak by to snad ani nebyl počítač. Proto bylo počítání další na řadě, hned po paměťových registrech, bez něj by to prostě nešlo.

A co vlastně můžeme počítat?
  • Sčítání - tohle není problém.
  • Odčítání - to se dá převést na sčítání, takže to také není problém.
  • Násobení - opakované sčítání, posunem se dá dost urychlit. Není problém.
  • Dělení - posun a opakované odčítání, zase není problém.
  • Odmocňování - sčítání a dělení, furt není problém.
  • Porovnání - dá se udělat odečtením. Žádný problém.
To by pro začátek stačilo. Tak v čem je teda problém?



"Už staří Řekové..."

a Římané, a Egypťané, a Mezopotámci, a Indiáni, a vůbec. Se tu s tím nebudu vypisovat. Prostě si lidé už od pravěku hráli s kamínky, fazolemi, nebo nějakým jiným zrním, na plochách s vyznačenými oblastmi, a dodnes proto po nich máme hry jako je Mankala nebo Backgammon, pozůstatky dávno zapomenutých prehistorických počítacích nástrojů.
Já tu nemám fazole, ale desítky podložky, a s těmi jsem si to natrénoval také, abych věděl jak se to v tom počítači vlastně bude přesypávat.

Neúplnou sčítačku vynechám (koho by zajímala, najde si jí třeba na Wikipedii), protože potřebuji tu úplnou, která mi v každém řádu sečte dva vstupující bity, k tomu přičte přenos z nižšího řádu, a vyprdne výsledek a případný přenos do vyššího řádu. Asi takhle:

Kód:
 A B C |    R
-------+--------
 0 0 0 | 00 = 0
 0 0 1 | 01 = 1
 0 1 0 | 01 = 1
 0 1 1 | 10 = 2
 1 0 0 | 01 = 1
 1 0 1 | 10 = 2
 1 1 0 | 10 = 2
 1 1 1 | 11 = 3

Stačí sečíst počet jedniček na vstupech, a výsledek zakódovat dvojkově. Vlastně je to jenom převod z jedničkové soustavy do dvojkové. Nic víc. Ale teď jak to provést? Třeba takhle:

Obrázek

Jo, tohle je prostě nádhera. Kouzla s NAND! A nebo tohle:

Obrázek

Kouzlo a ještě větší kouzlo s NOR a méně hradly. Jenže kdybych to stavěl třeba z relátek, dal bych přednost řešení s XOR, kde by na každý řád stačila jenom dvě, a dvě diody k tomu:

Obrázek

Z relátek nebo 7486. Ono to takhle dokonce na pohled vypadá jednodušší, i když vlastně není.



"Po schodech nahoru, po schodech dolů."

Sčítání bysme tedy měli, ale jenom s tím se nevystačí. Je potřeba i odečítat. V některých historických mechanických počítačkách, které samy odečítat neuměly, se odečítání provádělo přičtením desítkového doplňku. Přesněji přičtením devítkového doplňku (ten ukazuje kolik u každé číslice chybí do devítky) a ještě jedničky k němu, což je ve výsledku totéž. Stejným způsobem se dalo převádět mezi kladnými a zápornými čísly, protože je to vlastně odečtení od nuly. I ve dvojkové soustavě můžeme buď odečítat nebo přičítat záporná čísla.
Nejjednodušší způsob vyjádření záporných čísel v počítači je dvojkový doplněk. Ten se získá z jedničkového doplňku přičtením jedničky (stejně jako desítkový z devítkového). A jedničkový doplněk se vyrobí inverzí všech bitů, tedy otočením jedniček na nuly a nul na jedničky. To se dá provést dalším XORem a ta jednička se přičte přes CARRY, nebo nepřičte při výpůjčce.
To už máme dohromady třikrát XOR, dvakrát AND a jednou OR, což by mohlo stačit:

Obrázek



"Abakus, soroban, sčot."

Co mají společného? Víc stejných, paralelně umístěných drátů, pro jednotlivé řády. Takže tenhle modul se zřetězí celkem dvanáctkrát - pro všechny bity paralelně. A ještě se přidá nějaká ta bižuterie kolem, potřebná pro další funkce. Takhle by to potom vypadalo celé:

Obrázek

Vstupy DATA a WORK přicházejí od pomocných registrů DATA a WORK, vstup WORK C je potřeba pouze u instrukcí ADD a SUB, ostatní přenos nevyužívají, k jeho povolení slouží ENABLE CARRY. Do vstupu OPERATION se pošle invertovaný bit 8 z OPCODE u instrukcí ADD/SUB/INC/DEC, nebo invertovaný bit 7 z OPCODE u instrukce JUMP.
Výsledek sčítání/odečítání RESULT odchází do STORE SELECTORu, včetně dvou příznaků. CARRY znamená že došlo k přenosu nebo výpůjčce, ERROR signalizuje překročení číselného rozsahu u znaménkového čísla. Zbylé příznaky se při počítání nemění.

ADDER umí také porovnat dvě slova pro instrukce LESS/EQUAL/GREAT, vstupem COMPARE se vnutí odečítání, ale namísto uložení výsledku se zjistí jestli je nenulový nebo došlo k přenosu, a tyto stavy se porovnají s bity 8 a 9 OPCODE - maskou podmínky. Pokud se liší, inkrementuje se R7 signálem STEP a přeskočí následující instrukce. Jsou-li oba stejné, instrukce se normálně provede. Tak dochází k podmíněnému větvení programu.



"Odsud sem, odtud tam."

Čísla přicházejí z LOAD SELECTORu, a pak se cesta podle jejich účelu větví do pomocných registrů DATA a WORK. To, do kterého z nich se vloží, řídí DRIVER v CONTROL UNIT. Z nich potom vstupují do sčítačky, nebo pokračují jinam.
Příznaky se načítají vždy do nejvyššího nibblu WORK, a to při každém načtení do WORK i do DATA, aby byly k dispozici pro všechny instrukce stejně, i pro ty které WORK nepotřebují.

Obrázek

Pomocné registry DATA a WORK "podrží" na vstupech zpracovávaná data, ta protečou sčítačkou, a na jejím výstupu se objeví výsledek zvolené matematické operace. Ten je tam do té doby, dokud se obsah DATA nebo WORK nezmění.

Sčítačku používá celá horní polovina instrukční sady, všechny instrukce, jejichž kód začíná jedničkou. Jsou to:
  1. aritmetické ADD, SUB, INC, DEC,
  2. porovnání LESS, EQUAL, GREAT,
  3. relativní skok JUMP.

A na závěr si zase dáme jednu malou "simulaci", jak by to mělo fungovat:

https://www.youtube.com/watch?v=uwDKh031Ino
phpBB [video]


Potrženo, sečteno, pokračování příště.

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 31 kvě 2018, 22:04 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1585
Has thanked: 62 times
Been thanked: 268 times
Minulé díly seriálu:
Kapitola 1 - Zpátky do roku 1960
Kapitola 1 - Errata
Kapitola 2 - Rat Race
Kapitola 4 - Pomněnkový salát
Kapitola 8 - Ajn, cváj, policáj



Minipočítač TWELVE

Kapitola 16 - Ententýky, dva špalíky



Aneb kdo bude stát u pikoly. Tentokrát je potřeba vybrat jednoho z party. A nebude to podle počtu slabik, ale podle čísla zakódovaného dvojkově v instrukci.
Když už si tedy procesor uměl pamatovat a počítat, bylo ho potřeba naučit ještě poznat koho s kým a co odkud kam. To provádí dekodéry, a tak přišly na řadu jako třetí, po registrech a sčítačce.

Z operačního kódu instrukce je potřeba dekódovat několik věcí:
  1. Především je to číslo pracovního registru WORK, které může být 1 z 8.
  2. Dál to může být číslo datového registru DATA, které může být také 1 z 8.
  3. A nebo to může být číslo kanálu/číslo bitu/velikost posunu, které mohou být 1 ze 16.

Každý z těchhhle údajů se dekóduje z příslušného nibblu, automaticky hned po načtení instrukce do registru OPCODE. Při provádění dalších fází jsou tak dávno připravené a ihned k dispozici.



"Čert vyletěl z elektriky"

Tedy téměř, vyletěl z registru OPCODE. A to buď invertovaný nebo neinvertovaný, protože LATCHe v OPCODE jsou malinko speciální. Mají totiž z každého bitu ne jeden, ale dva různé výstupy:

Obrázek

Čili každý bit je k dispozici invertovaný i neinvertovaný. Je to právě kvůli dekodérům. Celý registr OPCODE bude vypadat takhle:

Obrázek



"Ať je to ten nebo ten"

tak je vždycky jen jeden, což se dá zajistit pomocí osmi třívstupových AND, do kterých se pošle příslušná kombinace jedniček a invertovaných nul. Jedna osmice pro nibble WORK, druhá osmice pro nibble DATA, a když se k té druhé přidá další vrstva ovládaná bitem 3 v OPCODE, vznikne šestnáct signálů pro bity/porty:

Obrázek

Z těch dvou osmic, vybírajících registr, se použije vždy jen jedna, podle toho která fáze provádění instrukce právě probíhá. To si diriguje řadič. A v první fázi FETCH nediriguje nic, tam rovnou pošle jedničku pro otevření R7.



"Prašíme ho koštětem"

Nebo tím koštětem zameteme to co není potřeba, například nepotřebné vstupy. Ve TWELVE se totiž vybírá i na dalších místech, v jednotkách řídících sběrnice. 1 ze 4 v LOAD SELECTORu a 1 z 5 ve STORE SELECTORu.

LOAD SELECTOR tedy může přijímat:
  1. 12 bitů přímo z registrové banky - datové slovo.
  2. 12 bitů nepřímo z bubnové paměti - datové slovo.
  3. 7 bitů z instrukce - vzdálenost skoku.
  4. 4 bity z instrukce - Kubikova konstanta.

Obrázek
Obrázek

Chybějící bity do 12 jsou nulové. Zvolené dvanáctibitové slovo (data) se pošle k pomocným registrům DATA a WORK.

STORE SELECTOR může přijímat:
  1. 16 bitů ze vstupních kanálů INPUT - instrukce READ.
  2. 16 bitů z přepínače SWITCH - instrukce ONE a ZERO.
  3. 17 bitů z posuvníku SHIFTER - instrukce HALF.
  4. 13 bitů ze sčítačky ADDER - instrukce ADD, SUB, INC, DEC a JUMP.
  5. 12 bitů z přímého průchodu DIRECT - instrukce COPY a NUMBER.

Obrázek
Obrázek
Obrázek

Chybějící bity do 16 se vezmou z posuvníku, a zůstávají tak nezměněné. Zvolené šestnáctibitové slovo (data a příznaky) se pošle do jednotky paměti k uložení.

A tím by bylo rozpočítáno.

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 01 čer 2018, 06:42 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 06 říj 2015, 16:37
Příspěvky: 1682
Bydliště: Praha východ
Has thanked: 9 times
Been thanked: 119 times
danhard píše:
To je plýtvání registry, normálně se to nacpe do registrů výsledku a nad nimi se udělá převod na BCD nibly.
Z tohoto výsledku se to přímo zobrazuje, přepočet na segmenty se dělá přímo při multiplexním zobrazení.
Na znaménko se ptám, protože nevím, jak to chceš zobrazit, 40-bit číslo bez znaménka je max. 1099511627775, to je 13 míst, kdyby to bylo se znaménkem, tak stačí 12 míst displeje a znaménko.


registry výsledku nejsou v procesoru, ale v extermním hw zařízení, z kterého se do registrů A až E čtou.

_________________
Hyperinzerce - historické počítače

ComputerAsylum WEB: http://www.computerasylum.co.uk
Twitter: https://twitter.com/COMPUTERASYLUM
Denní zprávy: https://www.euronews.com/
Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 01 čer 2018, 11:22 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1898
Bydliště: Jesenice
Has thanked: 8 times
Been thanked: 112 times
Ale dyť je tam ten výpočet hotový, XB4-XB0 je binární vstup, XD6-XD0 je bcd výstup.

Nebo jsi z toho nic nepochopil ?


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 78 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6  Další

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz