20. marraskuuta 2019

MEK6802D5E MicroComputer Evaluation Board - Assembler fiilistelyä

6802 prosessoriin perustuva assembler 'lauta' ohjeineen

Kun olin 12 vuotias, ilmoittauduin nuoresta iästäni huolimatta paikallisen työväenopiston assembler kurssille - vuosi oli siis -82. Kurssi oli jonkinlainen ammatillinen täydennyskurssi tai vastaava, mutta jollain ihmeen kaupalla minut hyväksyttiin mukaan. Olin huomattavasti nuorempi kuin muut, jotka olivat jo aikuisia. Siellä oli ohjelmoinnin harjoittelemiseen suunniteltuja pieniä ohjelmoitavia piirilevytietokoneita. En tiedä miksi niitä oikein kutsuisi. Nykymittapuulla ne eivät olleet tietokoneita. Siihen aikaan ne oli alkeellisia tietokoneita - elettiinhän jo C64 ja Sinclair Spectrum ZX aikaa. Näissä aikuisen kämmenen kokoisissa harjoittelukoneissa oli prosessori, eprom muisti jonka saattoi UV valolla pyyhkiä tyhjäksi uudelleenohjelmointia varten, Heksakoodinäppäimistö (0-9, A-F) sekä led-näyttö eli 7-segmenttisiä näyttöjä rivissä. Yhdellä 7-segmenttisellä saatiin aikaan numerot tai kirjaimet ja kun niitä oli 6kpl rivissä, saatiin neljällä merkillä osoite ja kahdella merkillä osoitteen sisältämä data näytettyä. Siellä opin assemblerin perusteita. Ladattiin ensin syöte näppäimistöltä, joka siirrettiin accumlaattorirekisteriin eli 'akkuun'. Sen jälkeen ladattiin seuraava syöte X-rekisteriin. Sen jälkeen suoritettiin joku 'operandi' akun ja X-rekisterin kesken ja vietiin tulos Y-rekisteriin. Näin saatiin luvut joko laskettua yhteen, kerrottua, vähennettyä jne... Lisäksi oli tilarekisteri, pinon osoitin ja ohjelmalaskuri, kaikki nämä varsinaisen ohjelman suoritukseen ja sen valvontaan liittyviä muuttujia, joita myös voitiin seurata ohjelman edetessä.

6802 prosessori


Kotona sitten samaa hommaa harjoittelin C64:n assemblerilla. Tuohon aikaan kukin kone oli hyvin omanlaisensa ja perustui siinä olevaan prosessorityyppiin, joka piti sisällään koko laitteen käyttöjärjestelmän. Jos muistia oli vaikka 65535 tavua, niin noin monta muistipaikkaa oli jossa kussakin oli joku muuttuja tai jokin data. Tietyt muistipaikat ja -alueet oppi muistamaan ulkoa. Esim. mikä muistipaikka sisälsi näytön keskiosan värin (65281) ja mikä taas kehyksen värin (65280). Kun näihin vei haluamansa numeroarvon, sai näyttöön haluamansa värit. Prosessorien teknisen toiminnan ja aseemblerin opettelun myötä tietokoneiden perustoimintatavat tuli opeteltua aika matalalla tasolla. Konekieli on binääriä, se ei oikeasti ole sitä mitä ihmiset ohjelmoivat, vaikka konekielestä usein puhutaankin. Assembler on hieman korkeamman tason symbolista kieltä, mutta niin lähellä jo konekieltä että sen ajaminen ja kääntäminen konekielelle on huomattavasti tehokkaampaa kuin monien nykyaikana käytettyjen huomattavasti korkeamman tason ohjelmointikielten, joissa ominaisuudet ovat moninaisemmat, mutta suorituskyvyn hinnalla.

Yksi tällainen legendaarinen prosessori on Motorolan 6802. Tämä oli 6800-sarjan 8-bittinen prosessori, jossa oli kello ja RAM-muisti prosessorin sisällä. Tämä prosessori tuotiin markkinoille 1975 kilpailemaan Intel 8080-prosessorin kanssa, joka oli käytännössä nykyisten PC-prosessorien esiversio. 6802 prosessoria käytettiinn erityisesti TRS-80 Color Computerissa. Tuona aikana samana vuonna tuli markkinoille myös MOS 6502 8-bitinen prosessori, joka menestyi markkinoilla vielä paremmin päätyen sellaisiin merkkeihin kuin Commodore(VIC-20), Nintendo(NES), Atari ja Apple. Sittemmin kasarilla 6502 kehittyi liitäntämahdollisuuksiltaan (I/O) monipuolisemmaksi 6510 prosessoriksi, joka oli Commodore 64:n perusta.

6802 testitietokone 'evaluation board'



Käsiini osui 6802 prosessoriin perustuva piirilevy, joka oli tarkoitettu prosessorin arviointia, testaamista ja ohjelmoinnin opettelua varten, ns. evaluointilauta. Piirilevyllä on prosessorit, numeronäppäimistö, 4kpl 7-segmenttisiä led-näyttöjä osoitteelle ja 2kpl 7-segmenttisiä led-näyttöjä osoitteessa olevalle datalle. Aivan kuten joskus aikanaan työväenopistossa. Niissä vain prosessorit ja niiden sisältämät käyttöjärjestelmät olivat paljon yksinkertaisempia. Piirilevyllä on myös virtalähde. Luin ensin virtlähteen sisääntulosta 18v ja syötin labrapowerista 18v, kunnes kokeilin sormella vastusrivistöä ja totesin ne tulikuumiksi. Sammutin virran ja tarkastelin virran sisääntulojännitteitä mukana tulleen paperikansion scemasta ja siinä luki 5V. Pudotin jännitteen 5 volttiin ja lauta toimi hienosti (ei ollut kärähtänyt ylijännitteestä) eikä vastukset enää olleet kuumina.

5V oli tälle tietokonelevylle sopiva jännite


Kansio joka kuului mukaan, sisältää kaiken mahdollisen tiedon prosessorista, koko käyttis assemblerina, kaikkien prosessorien jalkojen selvitykset, osoitteet, rekisterit, datan muoto ja ihan kaikki tieto mitä vaan voi tarvita. Hetken aikaa meni että ymmärsin 'funktionäppäinten' toiminnan, sillä en meinannut saada tallennettua syöttämääni dataa. Eikä kannata lähteä pidempiä koodinpätkiä syöttämään, jos aiemmin syöttämäsi haihtuu sitä mukaa kun siirryt kirjoittamaan uutta. Vihdoin ymmärsin mitä mikäkin nappi tekee ja missä järjestyksessä niitä pitää painella että data jää talteen ja päästään seuraavaan osoitekohtaan syöttämään uutta dataa, tai tarvittaessa takaisinpäin korjaamaan vanhaa. Sekä miten sovelluksen alkuun päästään, miten syötetty sovellus käynnistetään ja mistä nähdään ettei tule virhettä. Mukana oli myös ohjelmointiopas, jossa oli esimerkkejä. Mutta esimerkkienkin ymmärtäminen sillä tasolla että ne pystyi syöttämään hyvin rajallisella näppäimistöllä ja näytöllä vei aikansa. Kunnes ymmärsin mitä tekstin osia piti lukea ja miten logiikka toimi. Samalla rivillä saattoi olla kahden tai jopa kolmenkin osoitteen data. Ja piti ymmärtää itse siirtyä osoittessa vain eteenpäin sitä mukaa kun oli syöttänyt kaksi merkkiä sisään.

Ohjelmointioppaan harjoitusohjelman pitäisi kirjoittaa näyttöön sana 'help'

Aikani kun olin koodia kirjoittanut, pääsin testaamaan sitä. Sain jonkin merkeistä oikein, mutten kaikkea. Olin siis syöttänyt todennäköisesti jotain väärin. Siirryin osoitteissa ohjelman alkuun ja aloin painelemaan seuraavaan osoitteeseen siirtävää näppäintä nähdäkseni mitä dataa oli kussakin muistipaikassa ja etsin eroavaisuuksia ohjelmointioppaan listaukseen verrattuna. Niitä löytyikin ja korjasin ne kirjoittamalla vain tylysti vanhan päälle. Sain tehdä tuon muutamaan kertaan ennenkuin ohjelma toimi niinkuin piti,

Onnistunut assembler ohjelma kirjoitti näytölle halutun sanan


Aika nopeasti oltiin takaisin 80-luvun alun assembler tunnelmissa. Juuri tätä samaa se oli silloinkin ja on jännittävää päästä näin lähelle piiritasolla ohjelmoimaan ja saamaan aikaiseksi jotain mitä halusi. Konkretia on tälläisessä lähempänä kuin nykyisillä korkean tason kielillä ja prosessoreilla, joissa näitä 6802 tyylisiä prosessoreita on käytännössä miljoonia ja taas miljoonia. Vähän sama juttu kun kaivaa kaapista vanhan C64 koneen ja alkaa ohjelmoimaan jotain helppoa koodia - hyvin ovat muistissa vieläkin.

Nykyaikaisissa prosessoreissa itse prosessorin käyttöjärjestelmäkin on jo paljon enemmän absrahoitu ja virtualisointia tehdään jo prosessoritasollakin. Väittäisin että näissä kasarin alkeellisemmissa prosessoreissa hahmottaa helpommin miten prosessorit ja tietokoneet toimivat. Nykyajan koneet vain kertaavat kaiken miljoonalla, mutta eivät sinänsä muuten poikkea näistä mitenkään. Ne ovat vain monin verroin vaikeammin sen vuoksi hahmotettavissa. Kuitenkin ihan samat asiat joudutaan aina jossain vaiheessa tekemään kun laskeudutaan tekniikassa lähemmäs ja lähemmäs prosessoritasoa. Viimekädessä mennään aina siihen että jonkun transistorin täytyy alkaa vahvistaa jännitettä tai estää jännitteen kulku johonkin, joka sitten aiheuttaa tai ei aiheuta jotain. Ja kun näitä laitetaan tarpeeksi rinnan ja peräkkäin sopivaan matriisiin, niin saadaan 'ohjelmoitava' alusta. Ja kun sitä monistetaan tarpeeksi, saadaan aina vain monimutkaisempia prosessoreita, kuten ne mitkä nykyään meillä ovat laitteissa.

Jotain tämän kasarialustan ja nykyajan prosessorien väliltä saa touhutessa arduino-alustoilla. Erona vain se että arduinoilla saa käytännössä jotain ihan oikeastikin hyödyllistä nykyajan tarpeisiin. Mutta kiva näillä kasarivehkeillä on välillä fiilistellä :)

Nykyiset SDR-radiot ovat käytännössä tietokoneita lisättynä muutamilla analogista signaalia digitaalisiksi muuntavilla komponenteilla. Loput tehdäänkin sitten prosessoreissa ja muisteissa, eli tietokoneessa. Niiden toiminta perustuu ihan näihin samoihin perusteisiin kuin tässä vanhassa harjoitustietokoneessa, kaikkea vain on todella paljon enemmän :)



Ei kommentteja :

Lähetä kommentti