sunnuntai 15. maaliskuuta 2015

HP1000 - Arkkitehtuuria: Mikrokoodi, ALU, rekisterit

HP:n sielunelämä on kaukana normaalista nykyajan lapsen näkökulmasta, johtuen varmaankin HP:n hippiajan juurista. Esimerkiksi kaikki dokumentaatio on esitetty oktaalilukuina, eli 3-bitin paloissa. Luulisi että heksana esittäminen olisi hiukan loogisempaa, kun kone on kuitenkin 16-bittinen.

Toinen omituisuus on rautapinon puuttuminen. Toki pinon voi tehdä mikrokoodilla muistiin ja käyttömuistissahan pino yleensä onkin, mutta koneessa ei ole mitään rautatasolla toimivaa mekanismia sille. Eikä muuten vakiokäskykannassa ole mitään push/pop-käskyjä. Samasta syystä puuttuu myös aliohjelmien paluuosoitteiden tallennuksen puuttuminen, kun ei ole sitä pinoa.

Mikrokoodille löytyy kuitenkin pino, joka onkin sen luonteesta johtuen vähän pakollinen. Lisäksi mikrokoodille on sen touhuihin varattuna 12 rekisteriä, mutta makrokoodille (siis konekoodille) ei yhtään, vain kaksi akkua, A ja B. Näillä on myös muistipaikat 0 ja 1 osoiteavaruudessa.


HP:n kaiken selittävä lohkokaavio.


Lohkokaaviosta selviää paljon. Vasemmalla puolella olevat muistiin ja sen suojaukseen liittyvät kortit ovat liitettynä koneen etupuolella olevaan räkkiin. Oikealla puolella olevat IO-kortit ja uudelleen kirjoitettava mikrokoodimuisti sijaitsevat koneen takana olevassa räkissä. Mikrokoodinlaajennus-ROMit sijaitsevat koneen alla ja näkyvät kuvassa oikeassa alareunassa.

Kiinnostavin on kuitenkin kuvassa tietysti itse CPU, joka löytyy kuvan alaosasta keskeltä. Fyysisesti CPU on yksi iso kortti koneen pohjassa.

CPU:n lohkokaavio.


Mikrokoodi


Jos hiukan tutkitaan CPU:n kaaviota, näemme oikealla mikrokooditulkin, CPU:n ulkopuolella on käskykannan laajennukset. Käytännössä mikrokooditulkki on tilakone, joka pääsee ronkkimaan vähän joka nurkkaa CPU:sta.



Punainen ALU, rekisterit ja akut. Vihreä mikrokoodin tulkkaus. Sininen S-väylä. Oranssi loader-ROMit. Kuvasta puuttuu S-väylä ja MIR-rekisterin (bit10-bit17) portti.


Mikrokoodi yksinkertaistettuna toimii seuraavasti: konekäsky saapuu käskyrekisteriin (IR), jonka 8-bittinen ylempi osa siirretään hyppy-ROMiin (jump tables). ROMmeista löytyy käskyä vastaava mikrokoodiosoite, joka siirretään CMAR (control memory address) -rekisteriin. CMAR osoittaa osoitetta mikrokoodi-ROMeilla, josta sitten 24-bittinen mikrokoodi MIR (microcode instruction register) -rekisteriin dekoodattavaksi. CMAR-rekisteri on muodostuu 74163 TTL-laskureista, joten samalla saadaan seuraavan mikrokäskyn osoite helposti.


Mikrokooditulkin kytkentäkuva.


Mikrokoodin dekoodaus.


Mikrokoodi hoitaa lähes kaiken tässä laatikossa. Se fetchaa uuden käskyn muistista, lataa loader-ROMin muistiin ja hoitaa myös etutaulun valojen ja kytkimien toiminnat. Ikävä kyllä samasta syystä valot eivät vilku suorituksen aikana etutaulussa...

Mutta ihan kaikki ei mene mikrokoodin läpi, löytyy yksi erikoisuus, joka liittyy HP:n käskykantaan. Käskykannassa on mahdollista lisätä käskyjä käskyyn. Kuulostaa omituiselta ja sitä se onkin. Normaalisti konekielessä sinulla on yksi käsky ja sille ehdot. HP:ssa joidenkin käskyjen kohdalla voidaan lisätä "mikrokäskyjä" asettamalla bittejä käskyyn. Esimerkiksi jos sinulla on käsky "hyppää jos negatiivinen", voit lisätä käskyt "käänteinen tila" ja "vieritä A" käskyn kahdella tietyllä bitillä.


Mikrokäskyt löytyvät kohdista ASG ja SRG


Mikrokäskyt dekoodataan suoraan IR-rekisteristä.


Jostain syystä mikrokäskyt ovat nimetty hullulla tavalla, koska ne eivät liity mitenkään mikrokoodiin. Oikeastaan niitä pitäisi kutsua nanokäskyiksi.


ALU & rekisterit


Kuten vähän kaikissa 70-luvun minitietokoneissa, matemaattiset ja loogiset toimitukset hoitaa legendaarinen 74181 ALU sekä 74182 look-ahead carry unit. 74181 ei kuitenkaan kykene bittien vieritykseen, joten kokonaisuuteen on lisätty 74153:sia hoitamaan rotate/shift -toiminnot.


ALUn kytkentäkuva.


Rekisteripuolella ei ole mitään ihmeellistä, 64-bitin (4x16) 74189 SRAM, mutta A&B-akkuissa on jotain erikoisempaa, porttina toimii 74198 shifteri. Tämä sen takia, että CPU voi suorittaa 32-bittisiä laskutoimituksia.


Loader ROMit


Koska tätä 211x/21MX/1000 -sarjaa ei ole koskaan tarkoitettu yhteen tehtävään, ei siinä ole vakiona mitään ROM-muistia käyttöjärjestelmälle. Käyttöjärjestelmä tai ohjelma on ladattu ulkopuolisesta laitteesta muistiin. Mutta jokin ROM tarvitaan, jotta dataa saadaan ulkopuoliselta laitteelta muistiin. Muuten ainoa vaihtoehto olisi näpyttää joka käynnistyksessä loaderi taulun nappien kautta muistiin.

HP ratkaisi laittamalla loaderit emolle, 4x256-bittiset ROM-piirit, 64 sanaa pitkät loaderit, jotka ladataan melko mystisellä tavalla muistiin mikrokoodin avustamana. Kytkennästä nähdään, että jokainen ROM on neljällä bitillä kiinni S-väylässä, josta se siirtyy muistin yläosaan. IR-rekisterin pari ylintä bittiä valitsevat halutun ROMin ja alempi 8-bittiä osoitteen. 8-bittinen osoitelaskuri on IR-rekisterin alempi puolisko, johon mikrokoodi pääsee käsiksi. Mikrokoodi sählää 4-bit palat muistiin järjestyksessä ja kasvattaa laskurinarvoa.

Samaa IR-rekisteriä/laskuria mikrokoodi voi käyttää muihinkin tarpeisiin, ei pelkästään loaderien lataamiseen (käskyrekisterillä kun ei ole mitään virkaa, kun sen tieto on kerran mennyt hyppy-ROMien läpi).


Loader ROMit näkyvät kuvassa keskellä.


Seuraavalla kerralla sitten keskeytyksistä, muistiavaruudesta ja sen sellaisesta.


Ps. Jos on pakottava tarve tutustua kytkentäkuviin ja toiminnan kuvaukseen, niin täältä löytyy: http://bitsavers.trailing-edge.com/pdf/hp/1000/1000_MEF_EngrRef/92851-90001_Mar81_1.1.pdf

4 kommenttia:

  1. Mielenkiintoista luettavaa on ollut täällä, kiitoksia!

    Aikaisemminhan sananleveydet olivat yleensä kuudella jaollisia ja siten luontevampia jakaa kolmen pätkiin, ja oktaali periytyi niistä sitten kahdenpotenssikoneisiinkiin. Vähemmän muutosvastarintaa, kun pitäydytään totutussa edes jossain asiassa. Se on sen sijaan itselleni vähän kysymysmerkki, mistä kuudellajaollisuus alkujaan tuli. Veikkaisin, että se liittyy jotenkin kaukokirjoittimiin, niissä käytettyihin reikänauhaformaatteihin sekä siihen, että kuusibittiseen merkistöön mahtuvat luontevasti sekä numerot, isot kirjaimet että muutama välimerkki.

    VastaaPoista
  2. Kiitoksia ja olkaa hyvä! Lisää juttua HP:n mikrokoodimodauksesta luvassa. Tarkoitus olisi tehdä tuosta vektorinäytönohjain ja se vaatii hiukan käskykannan rommaamista.

    Kaukokirjoitin on varmasti oktaalihelvetin alkujuuri. Aivot nyrjähtävät heksaihmisellä, kun HP:n etupaneelista yrittää tulkita dataa; valot kun ovat kolmen ryhmissä...

    VastaaPoista
  3. Jos muuten vektorinäyttö kaipailee kooditemppuja jossain vaiheessa niin vanhana demokoodaajana voisin olla kiinnostunut auttamaan asiassa (:

    VastaaPoista
    Vastaukset
    1. Voitaisiin kyllä törmäillä liittyen aiheeseen jossain kohtaa. Alkuun suosittelen hakemaan jonkun 21MX-emun netistä. Niissä ei kyllä taida olla mikrokoodin muokkaukselle mahdollisuutta...

      HP on todella tykki laite, etenkin jos käskykanta on modattu sopivaksi, voi vetää koko viivan bresenhamin läpi yhdellä käskyllä. Mitään rajaa ei ole kauan (kone)käsky kestää, tässä oikeastaan koko mikrokoodin nerokkuus: koodia koodissa ja fetchit jää välistä.

      Käsittääkseni HP:lla oli oma vektori-käskykanta ja se on ladattavissa Bitsaverssista, mutta pahoin pelkään ettei se ole kovin optimoitu. Pitänee testata.

      Jenkeistä yksi tunnettu HP-entisöijä lupasi katsoa WCS(Writable Control Store)-kortin jemmoistaan tänne pohjolan hulluille, pääsee tekemään empiirisiä kokeita omalla käskykannalla ilman prommeria.


      Ps. Mielessä on pyörinyt yksi melko eeppinen projekti, joka ei kylläkään tule tapahtumaan ihan hetkessä... Vihjeenä 1800 & 1000 | 316 & vektorinäyttö & messukeskus. Terävimmät tajuaa mistä on kyse ;)

      Olen töitteni kanssa aika kiireinen tällä hetkellä, mutta laittele vaikka sähköpostia!

      Poista