OldComp.cz

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


Právě je 28.03.2024, 22:05

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 81 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6
Autor Zpráva
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 01.07.2018, 10:42 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Vždyť píšu že tam BS být nemusí, a původně také nebyl. Je to jen vedlejší produkt té Kubikovy konstanty, který se vůbec nemusí použít. Jde mi o to, aby se v tom dalo aspoň něco naprogramovat s minimem možných instrukcí. On tam teda původně nebyl ani CARRY, ale to mě pak přešlo.
Jak kdysi kdesi kdosi napsal: "Malý počítač s velkým programem dokáže totéž, co velký počítač s malým programem."

Jenže tady není žádný mikroprogram, jen ubohý kolovrátek - stavový automat. A ještě maximálně osekaný, takže instrukce se sdružují do skupin prováděných jako jedna, s tím že použité obvody se "nakonfigurují" přímo určitými bity v operačním kódu. Takže to vlastně ani těch 16 instrukcí nemá, ve skutečnosti je jich ještě mnohem méně, například ADD/SUB/INC/DEC je pořád jedna a ta samá funkce, jenom s přepnutými vstupy.
Navíc se ty instrukce co to umí vlastně provedou vždycky všechny naráz, a nakonec se jenom vybere výsledek té, která je právě v OPCODE...

Ten řadič snad během léta stihnu přežvýkat a nakreslit ;)

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 01.07.2018, 11:35 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Bez Carry nejsi schopen pracovat s daty s delší délkou, to je nutnost.
A to tak bývá, že se dělají všechny výpočetní funkce přes ALU a přepíná se jen její funkce.
A buď si byl vázaný realizací a kvantem materiálu, který byl v té době k dispozi, nebo jsi použil nějaké hotové prvky a pak jsi tomu přizpůsobil architekturu.
Prostě když se shift dělal multipexerem, tak se použila na dva bity SN74LS253 a na přepínání tak vzniklo 5 možností, které jsi smysluplně využil :)

Měl bys uvážit možnou realizaci a dělat návhy podle ní.

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 01.07.2018, 13:12 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Větší délka dat nebyla na začátku v plánu, stejně jako řada dalších věcí. Ale postupně se to trochu nabalilo. Tady něco, tam něco, proto jsou některé části toho dvanáctibitu šestnáctibitové.

Také by se klidně daly některé méně potřebné sloupce posuvníku vypustit, a zbylé (1, 4, 6?) vybírat jen bitem v instrukci, bez dekodéru. Tohle holt vyšlo trochu složitější, necelé 43 kusy 7408. Ale na jednu desku by se to nacpat dalo, ne? Větší starosti by mi asi dělaly ty třináctivstupové ORy 8-)

Možné realizace jsou zatím čtyři:
  1. Relé - tam bych se tím vůbec nezabýval a použil holý jednobitový SHIFTER, jinak mi to propadne podlahou k sousedům.
  2. 74xx/40xx - tady mě zajímá jen celkový počet čipů, aby mi to utáhl sehnatelný zdroj.
  3. Mikromoduly - prostě si navrhnu vlastní stavebnici na míru, jako to udělali v IBM při vývoji System/360.
  4. FPGA - když se to nevejde, použije se větší model.

Ještě bych si mohl frajersky navrhnout masky a nechat vyrobit vlastní čip, ale na to bych potřeboval sponzora. Takže s touhle možností nepočítám :mrgreen:

Tohle jsi viděl? https://www.cnews.cz/microsoft-vlastni-architektura-procesory-e2-edge

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 30.04.2020, 06:20 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 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
Kapitola 16 - Ententýky, dva špalíky
Kapitola 32 - To ostatní



Minipočítač TWELVE

Kapitola 64 - Jídelní lístek



Hladový hardware sám o sobě nedokáže nic, je potřeba ho něčím nakrmit, nejlépe programem a daty, aby měl co přežvykovat a věděl jak na to. Takže dnešní menu bude krmení TWELVE.



"Jamalalicha, paprťála, žbrluch."

Tak tomuhle by počítač fakt nerozuměl, ten zná jenom jedničky a nuly. A ty je do něj potřeba nějak našťouchat, například pomocí přepínačů na čelním panelu. Takový panel by měl umět několik základních činností:
  1. Zobrazit obsah registru R7, tedy ukázat Program Counter.
  2. Zapsat do R7 libovolnou hodnotu, jako počáteční adresu pro Program Counter.
  3. Zobrazit obsah paměti na adrese z R7, a inkrementovat R7.
  4. Zapsat zadávaná data do paměti na adresu z R7, a inkrementovat R7.
Bod 1 není problém, prostě pár světýlek připojených přímo do registrové banky, které stále zobrazují to, co v R7 zrovna je. Pro další tři body se dá využít ovládací I/O kanál 0, vyvedený na čelní panel, s několika dalšími funkcemi navíc. A ten čelní panel by mohl vypadat třeba nějak takhle, nebo dost podobně:

Obrázek

Úplně vpravo je volič režimu, který má čtyři polohy:
  1. OFF - vypnuto, odpojené napájení.
  2. RST - reset, zapne napájení a nastaví sekvencér v řadiči do počátečního stavu pro rozběh.
  3. PRG - režim programování, stroj se ovládá pomocí čelního panelu.
  4. EXE - režim provádění programu, stroj se rozeběhne od adresy která je v tom okamžiku nastavená v R7.
Mezi PRG a EXE se dá za běhu libovolně přepínat, pozastavovat běh programu a měnit cokoliv v paměti. Při přepnutí na PRG se dokončí právě rozpracovaná instrukce - sekvencér doběhne na konec, zastaví se, a pak řadič čeká na povel z panelu. Při EXE se automaticky rozběhne načtení a zpracování nové instrukce, pořád dokola.

Pokud program zatuhne, což se může stát například při čtení z nezapojeného kanálu, bude sekvencér čekat na potvrzení vstupu a dokončení instrukce donekonečna. V takovém případě stačí přepnout až na RST, tím se sekvencér zresetuje, provádění instrukce zruší, a v programu je možné zase pokračovat od následující instrukce nastavením režimu EXE.

Horní řada ukazuje stav příznaků (bity F až C) a registru R7 (bity B až 0). Při běžícím programu v režimu EXE budou lampičky krásně blikat a ukazovat kde v paměti se program zrovna nachází, v režimu PRG je tady vysvícená adresa, kde se má program (opět) rozběhnout. Tlačítko vpravo vedle ní podstrčí řadiči instrukci READ R7 C0 a rozběhne sekvencér. Ten zpracováním instrukce načte z kanálu 0 stav přepínačů na čelním panelu, hodnotu zapíše do příznaků a R7, a po doběhnutí instrukce se opět zastaví. Popis R7 vedle tlačítka je jednoznačný.

Druhá řada je výstup kanálu 0, takže co do něj program za běhu zapíše, to se tady rozsvítí a je to tam do té doby, dokud se do kanálu 0 nezapíše něco jiného. Nebo dokud se počítač nevypne. Tlačítko vedle druhé řady podstrčí řadiči instrukci READ M7 C0 a rozeběhne sekvencér. Ten zpracováním instrukce načte z bubnu z adresy obsažené v R7 dvanáctibitové slovo, a spolu s příznaky ho pošle do kanálu 0. Přitom inkrementuje R7, aby se při dalším stisku provedlo totéž z následující adresy. Pak se také zastaví. Popis OUT vedle tlačítka by také mohl napovědět.

Mezi druhou a třetí řadou je popis jednotlivých bitů, aby byl pěkně na očích.

Třetí řada je vstup kanálu 0. Běžící program si z něj může kdykoliv načíst do registru či paměti stav všech šestnácti přepínačů včetně příznaků. V režimu EXE tlačítko vedle třetí řady potvrzuje, že přepínače jsou nastavené na požadovanou vstupní hodnotu a lze je načíst kanálem 0, takže program může běžet dál. V režimu PRG tlačítko podstrčí řadiči instrukci WRITE M7 C0 a spustí sekvencér. Ten zpracováním instrukce načte z kanálu 0 stav všech šestnácti přepínačů, podle nich zapíše do paměti příznaky a na buben na adresu z R7 dvanáctibitové slovo, přitom inkrementuje R7 na další adresu, a zastaví se. Popis IN vedle tlačítka opět napovídá co provádí.

Tlačítka takhle pochopitelně fungují jenom v režimu PRG, asi by bylo zajímavé, kdyby se třeba dal měnit obsah R7 za běhu programu, ale generátor náhodných chyb radši přenechám M$ Windoze. Takže tímto bysme měli pohromadě základní funkce, a nic víc tak nějak ani není potřeba, tohle musí stačit k nacvakání krátkého programu nebo dat kamkoliv do paměti, opravě chyb, a spuštění běhu od libovolné adresy. Dál už je to jiný příběh.



"Což takhle dát si ... bity?"

Instrukce TWELVE se skládají ze tří nibblů. První čtyři přepínače F až C proto můžeme klidně přeskočit, ty se programového kódu vůbec netýkají, ale dají se pomocí nich měnit příznaky F až C. Operační kód instrukce je obsažený v horním nibblu dvanáctibitového slova, což jsou přepínače B až 8. Instrukce samotné by bylo dobré trochu roztřídit a v instrukční sadě přehledně uspořádat, aby se v nich snadno vyznal člověk, ale také aby se v nich vyznal řadič počítače, který je musí před provedením dekódovat. A protože za ideální dekodér považuji žádný dekodér, musely se instrukce roztřídit opravdu důkladně! Jediná věc kterou jsem měl už brzy po začátku jasnou bylo, že instrukce COPY R0 R0 se má kódovat jako 0000 0000 0000, a nahradit tak instrukci NOP.

Začátky návrhu byly dost divoké, některé instrukce jsem postupně vypustil, další zase nahradily jiné instrukce, které uměly provést totéž odlišným způsobem, pár jich naopak ještě přibylo, a nakonec mi vyšlo těch šestnáct, které jsem popsal v kapitole 1. Samotného mě pak trochu překvapilo, že právě osm z nich - přesně polovina - nějakým způsobem něco počítá, používá ADDER. A druhá polovina zase nic nepočítá, ta jenom přesouvá něco odněkud někam a používá k tomu všechno ostatní.

  • Takže přepínač B určuje, která z těchhle dvou polovin to bude:
    1 - nahoru jsou výpočty ve sčítačce,
    0 - dolů jsou přesuny.

    • Výpočty mohou být dvojího druhu. Buď se týkají aritmetiky s daty, nebo skoků v programu. To rozlišuje přepínač A, stejně jako předchozí:
      1 - nahoru je aritmetika,
      0 - dolů jsou skoky.

      • Aritmetické výpočty se zase dělí na dvě skupiny, buď počítají se dvěma operandy, nebo s jedním operandem a konstantou. To se určí přepínačem 9, kde:
        1 - nahoru je operand,
        0 - dolů je konstanta.

        • Druhý operand se může přičítat nebo odečítat, a o tom rozhoduje přepínač 8, který znamená:
          1 - nahoru je ADD - přičítání, celkově 1111,
          0 - dolů je SUB - odčítání, celkově 1110.

        • Stejná věc se může provádět i s konstantou, tam přepínač 8 říká:
          1 - nahoru je INC - zvýšení, celkově 1101,
          0 - dolů je DEC - snížení, celkově 1100.

      • Skoky se také dělí na dvě skupiny, ale jiným způsobem. Jsou zde tři podmíněné a jeden nepodmíněný. Je-li některý z přepínačů 9 a 8 zvednutý na 1, pomocí sčítačky se provede porovnání COMPARE a podle jeho výsledku se buď vykoná nebo přeskočí následující instrukce, což může být třeba relativní skok, nebo cokoliv jiného kromě NUMBER. Funkci komparátoru určuje maska nastavená přepínači 9 a 8, a ta se překrývá s výstupem sčítačky, viz kapitola 8:
        1 1 - GREAT je porovnání WORK > DATA, celkově 1011,
        1 0 - EQUAL je porovnání WORK = DATA, celkově 1010,
        0 1 - LESS je porovnání WORK < DATA, celkově 1001.

        Jsou-li oba přepínače 9 a 8 dole na 0, žádná maska není a provede se relativní skok o 0 až 127 slov přičtením nebo odečtením offsetu k R7:
        0 0 - JUMP je nepodmíněný relativní skok, celkově 1000.

        • Podle stavu přepínače 7 z následujícího nibblu se zvývajících sedm bitů z instrukce buď přičte nebo odečte:
          1 - dopředu je větvení, celkově 10001,
          0 - dozadu je cyklus, celkově 10000.

    • Také přesuny jsou dvojí. Buď se při nich provádějí bitové operace, nebo jenom přesouvají data. To také rozlišuje přepínač A, takhle:
      1 - nahoru jsou bitové,
      0 - dolů jsou přímé.

      • Bitové přesuny (či operace) se dělí podobně jako skoky. Je-li některý z přepínačů 9 a 8 zvednutý na 1, pracuje se s jednotlivými bity pomocí SWITCHe. Jsou-li oba dole na 0, provede se v SHIFTERu bitový posun - dělení. Bit ve slově nebo velikost posunu určuje Kubikova konstanta v nejnižším nibblu. Přepínač 9 vybírá:
        1 - nahoru je nastavení zvoleného bitu na některou hodnotu,
        0 - dolů je test zvoleného bitu nebo rotace dvanáctibitového slova a příznaku C vpravo.

        • Má-li se bit nastavit, rozhoduje přepínač 8 o tom jak. A to celkem jednoduše, prostě se stav tohohle přepínače rovnou vrazí do určeného bitu, tak jak je. A nemusí se nic dekódovat:
          1 - nahoru je ONE - nastavení na 1, celkově 0111,
          0 - dolů je ZERO - nastavení na 0, celkově 0110.

        • Má-li se bit testovat, je přepínač 8 zvednutý:
          1 - nahoru je TEST - čtvrtý nepodmíněný skok, jediný který nepoužívá sčítačku, celkově 0101.

        • Má-li se dělit, je přepínač 8 shozený:
          0 - dolů je HALF - rotace přes CARRY, celkově 0100.

      • Také přímé přesuny jsou dvojího druhu, a o tom jakého rozhoduje zase přepínač 9:
        1 - nahoru je operace I/O, neboli přesuny vnější,
        0 - dolů je kopírování slova z registru do registru nebo z programu do registru, neboli přesuny vnitřní.

        • Směr vnějšího přesunu volí přepínač 8, číslo kanálu určuje zase nejnižší nibble:
          1 - ven je WRITE - zápis do kanálu, celkově 0011,
          0 - dovnitř je READ - čtení z kanálu, celkově 0010.

        • Druh vnitřního přesunu volí také přepínač 8, :
          1 - s parametrem je NUMBER - načtení čísla z programu do registru, celkově 0001,
          0 - bez parametru je COPY - kopírování čísla z registru do registru, celkově 0000.

Jak je vidět, nakonec přesně podle počátečního požadavku vyšel na instrukci COPY kód 0000. A protože lepší než tisíc slov je jeden obrázek, můžeme si celé to větvení přehledně uspořádat do stromu, rozvětvujícího se zleva doprava, stejně jako jsou seřazené přepínače na čelním panelu:

Obrázek

A tím je konečně uspořádaná instrukční sada, přidělené operační kódy, a dané zapojení dekodéru sekvencéru. Pro rychlou orientaci v jednotlivých skupinách se dá použít také čtvercová tabulka se zvýrazněnými skupinami:

Obrázek

Ve složených buňkách je nahoře název instrukce, vlevo dole tučně první písmeno - zkrácený zápis pro assembler, a vpravo dole kurzívou šestnáctkový kód, stejně jako v předchozím stromu.



"Hlavní chod a přílohy."

Hlavní chod je kód instrukce, rozebraný výše. Následuje první příloha - volba registru WORK. Ten určuje prostřední nibble, zadávaný přepínači 7 až 4:

Přepínač 7 volí ze které části paměti se bude číst a kam se bude také zapisovat:
  • 1 - buben je nepřímo adresovaný slovem z vybraného registru,
  • 0 - registr je přímo vybraný dalšími třemi bity.
Přepínače 6 až 4 volí číslo registru 0 až 7.

Druhá příloha je spodní nibble, zadávaný přepínači 3 až 0. Ten má víc významů podle typu instrukce:
  • registr DATA je volený stejným způsobem jako registr WORK, říká odkud se má načíst druhý operand,
  • číslo kanálu je v rozsahu 0 až 15, pro READ a WRITE,
  • Kubikova konstanta je buď v rozsahu 0 až 15 pro INC a DEC, nebo v rozsahu 0 až 12 pro HALF.

Oba dva nibbly dohromady tvoří kladný nebo záporný offset pro nepodmíněný relativní skok JUMP.

Třetí příloha je následující celé dvanáctibitové slovo,které načítá instrukce NUMBER. Ta je proto celkově dlouhá dvě slova a tak se jako jediná nedá použít za podmíněnými skoky, které můžou přeskočit jenom jedno slovo.



"Dáme si nášup?"

Vkládat čelním panelem celý program pokaždé, když se má spustit, by byla trochu otrava. Chce to nějaké trvanlivé médium, ze kterého se dá načítat opakovaně, větší rychlostí, a mnohem větší objem dat. Jako dostatečně primitivní a časuodolný materiál se osvědčil obyčejný papír, používaný pro analogové záznamy písmem několik tisíciletí a pro digitální záznamy dírkami několik staletí.

Takže úplně stejně jako přepínači na čelním panelu se dá program ručně naděrovat do dvanáctistopé děrné pásky. Do počítače se potom nacvaká jenom zavaděč, a ten se postará o načtení pásky do paměti, pomocí čtečky připojené na vstup kanálu 1. A na výstupu stejného kanálu by mohla být třeba děrovačka, pro snadné uložení zpracovaných dat, nebo třeba programového kódu přeloženého assemblerem. Ale to zase až někdy příště.

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 30.04.2020, 08:15 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
A podprogramy to neumí ?

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Minipočítač TWELVE
PříspěvekNapsal: 30.04.2020, 18:32 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
To už jsme probírali předloni ;-)

Samo o sobě to žádné CALL a RET neumí, ale kterýkoliv registr se dá použít jako ukazatel, takže si je můžeš naprogramovat.

Prakticky tam může být až sedm zásobníků, normálním programovacím jazykům stačí jeden, a i extrémista FORTH potřebuje jenom dva...

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


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ů: 81 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 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