Mietin jo penikkana c64 kanssa kun ohjelmoin valmiiksi kirjotettuja ohjelmia mikrobitistä, että miten se ensimmäinen ohjelma on kirjoitettu, että kone yleensäkään lähtee päälle ja ruutuun tulee aloituskuva. Tulee mieleen samankaltainen kysymys "jos jumala loi universumin niin kuka loi jumalan", erona se että tietokonekysymykseen on olemassa vastaus. c64 aikaan oli puhetta konekielestä, ja ruutu tuli täyteen hassuja merkkejä kun katsoi ohjelman koodauksen, mutta tuo konekielikinhän on ihmisen tekemä. Tietokone rakentuu piirilevyitä yms. mutta miten ihmeessä sinne on saatu ohjelmoitua ensimmäiset ohjelmat ja ohjelmoinikielet kun eihän virtapiirit sinänsä mitään tajua. Mikä siis "puhalsi" ensimmäisen tietokoneen henkiin, jotta pystyttiin alkamaan tuottaa toisia tietokoneita ja ohjelmia? Ilmeisesti kaikki tietokneet käyttävät peruskielenään bittikieltä eli 0 ja 1 kieltä, mutta miten noilla 0 ja 1 saadaan järjestettyä muita ihmiselle helpommin tajuttavia kieliä? Minusta tuntuu, että tuo keksintö on jopa merkittävämpi kuin suhteellisuusteoria, antaa elämän koneelle, jolla voi tehdä sitten mitä vain ihmisen mielikuvitus pystyy kunhan osaa koodata hyvin.
Osaisiko joku selittää asiaa, miten ensimmäinen virtapiireistä muodostuva hökötys alkaa ymmärtää näppäimistöllä painettuja merkkejä kun siinä ei ole vielä mitään sisäistä kieltä olemassa?
Osaisiko joku selittää asiaa, miten ensimmäinen virtapiireistä muodostuva hökötys alkaa ymmärtää näppäimistöllä painettuja merkkejä kun siinä ei ole vielä mitään sisäistä kieltä olemassa?
Vastaukset 9
Vanhimmat
Olen itsekin ihmetellyt samaa koneiden ja ohjelmistojen "Mieli–ruumis-ongelmaa", mutta ilmeisesti kysymys on itsessään filosofinen, kulttuurillinen väärinkäsitys.
Totuus on tässä (Kerrankin tarkoituksellinen Youtube-video!):
Digi-Comp1 Plastic Computer
http://www.youtube.com/watch?v=Qx5Iawpm5Kg
Yrittää sanoa että materiassa on jo valmiina henki kun sen osaa tuoda esiin. Mutta kulttuurimme sen sijaan piilottaa kaikki elämää muistuttavan mikropiireihin jotka muistuttaa hautausmaata. Ei osata arvostaa?
Softan ohjelmoinnissa ei ole kotimikrojen aikaan ulotuttu yksittäisen bittien tasolle, vaan kyse on kiinteästi 8-bittisistä koneista ja bittejä hallitaan lukuarvoina 00-FF, eli 0-255. Laitteisto osaa tärkeimmät toiminnallisuudet; jopa lukuarvojen yhteen- ja vähennyslaskulle on oma piiri. Bittejä manipuloitiin siis siten kun se oli laitteistoarkkitehtuurin perusteella kannattavaa.
Jep. Hauska vekotin videossa. Kuitenkin vaikea tajuta miten ensimmäiset tietokoneen ohjelmat on luotu kun ei se ensimmäinen osaa vielä mitään kieltä. Jo pelkästään näyttökuvan tuominen ruudulle kun laitteeseen kytketään virta on vaatinut jotain ohjelmointia etukäteen, eli siinä vaiheessa ollaan jo paljon alkua pidemmällä ja olemassa oleva tietokoneen kieli on jo luoto kyseistä konetta varten. Osaakohan tuohon kukaan vastata vai olisko tietokone syntynyt vähän sattumalta yrityksen ja erheen kautta. Ihminen on tajunnut, että kone reagoi johoknin jollain tavalla ja siitä alettu värkkäämään sille oma kieli. Tosin tuntuu, että tuolla tavalla tietokoneen kielen luomiseen menisi paljon pitempi aika kuin on mennyt, samaan tapaan kuin ihmisten nykykielillä on mennyt.
"olemassa oleva tietokoneen kieli on jo luoto kyseistä konetta varten"
Toisin kuin Basicia ja muita korkeantason kieliä, konekieltä ei ole luotu erikseen valmista konetta varten, vaan mielestäni kone on pikemminkin luotu ideaalista konekieltä varten. Näin myös Commodore 64:ssa. Koneen arkkitehtuuria voisi ajatella sanakirjana jossa kutakin sanaa vastaa oma mikrosiru. Koneen "kieli" on siis käskykanta, jossa käskyt ovat 8:n bitin kuvioita, ja niiden aina merkitys on pieni toiminnallisuus omilla siruillaan.
Tietokoneen prosessori on rakennettu suorittamaan tiettyjä komentoja.
Tällainen prosessori voidaan rakentaa erilliskomponenteista, transistoreista, diodeista ja vastuksista, kondensaattoreista. Perustana on siis näistä komponenteista rakennetut "digitaaliset" portit, joilla on tietty varaustila tai jännite joissa tietty jännitetaso vastaa bittiä 0 ja joku toinen jännitetaso bittiarvoa 1. Kytkemällä näitä portteja yhteen sopivalla tavalla saadaan laite tekemään joku tietty tehtävä, esim laskemaan jossain tietyssä porttiryhmässä olevat bittiarvot yhteen jonkun toisen porttiryhmän bittiarvojen kanssa. Tällä aivan alimmalla rautatasolla on siis suunnittelija toteuttanut sen alimman käskykannan jonka prosessori toteuttaa. Sen päälle on yleensä rakennettu ohjelmakirjasto, joka myös sijaitsee prosessorin sisällä pysyvässä muistissa. Tämä ohjelmakirjasto käyttää tuon alimman rautatason käskyjä (eli sytyttelee ja sammuttelee niitä digitaalisten porttien nollia ja ykkösiä). Tämä ohjelmakirjasto on yleensä se mitä sanotaan "konekieleksi", eli siinä sijaitsevat vaikka sen C64:n prosesorin konekielen käskyt. Jokainen konekielen käsky on itseasiassa ohjelma joka suoritetaan tällä tasolla.
Jotta prosessori saadaan lataamaan sen ulkopuolella olevia ohjelmia on sinne rakennettu käynnistyskomento joka alkaa lukemaan jossain tietyssä muistiosoitteessa olevaa konekielistä ohjelmaa. Tämä ohjelma on tietokoneen BIOS, joka sijaitsee vaikkapa PC:n emolevyllä olevassa pysyvässä muistipiirissä. BIOSissa on sitten yksinkertainen konekielinen ohjelmapätkä joka esim. osaa lukea kiintolevyä ja lukee kiintolevystä tietystä kohdasta vähän vielä monimutkaisemman ohjelman joka osaa jo enemmän, esim. osaa ladata käyttöjärjestelmän käynnistystiedostot muistiin ja suorittaa ne.
Kuulostaa loogiselta mutta jos esim. C64:ssa on tuollainen yksittäisiä bittejä käsittelevä "alin käskykanta", niin eikö se vaadi omaa moninkertaista "alinta" kellotaajuutta?
wikipedia ja joku muukin
http://fi.wikipedia.org/wiki/Tietokone
http://ku-tietotekniikka.wikispaces.com/Tietokoneiden_historia
http://www.oulu.net/koulut/pateniemi/ATK/tthist.htm
tuo koneen käyntiinlähtö ja alkukuvat ruudulle tulee siten että
koneeseen on ohjelmoitu "rautaan" kestomuistiin
pieni alkuohjelma joka sitten alkaa vasta ladata niitä käyttäjän
ohjelmia, kulkee nimellä BIOS, jos olet kuullut.
Joo, toihan on selvä juttu, että käyntiinlähtö on ohjelmoitu rautaa. Kysymykseni perimmäinen idea oli, että mitä oli ennen kuin sitä alkurautaa olikaan. Tuosta eräästä postista käsitin, että siinä on kysyms jännitetiloista jotka vastaa 0 tai 1. Missä menee se raja koneen ( vaikka auton moottori ) ja tietokoneen välillä, vai liekö veteen piirretty viiva.
"Missä menee se raja koneen ( vaikka auton moottori ) ja tietokoneen välillä, vai liekö veteen piirretty viiva. "
Ongelma on siinä että molemmat ovat vain käytännön sovelluksia. Ei niille voi ylhäältä päin antaa ehdottomia rajoja.
Tietokoneen teoreettinen malli (tai sellaisen ehdotus) oli niiden syntyaikana tämä:
http://fi.wikipedia.org/wiki/Turingin_kone
Turingin koneella taitaa kuitenkin olla niin vähän käytännön merkitystä että voisin suositella mieluummin tätä tekoälyn mallia:
http://akvama-ajattelua.blogspot.com/2010/02/lisaa-aixista.html
Silloin kun miehet olivat oikeita nörtejä ja tietokoneet ymmärsivät vain bittejä... (ja isä SDK-85:n osti)
"Osaisiko joku selittää asiaa, miten ensimmäinen virtapiireistä muodostuva hökötys alkaa ymmärtää näppäimistöllä painettuja merkkejä kun siinä ei ole vielä mitään sisäistä kieltä olemassa? "
Yritetään.
Oma kokemukseni alkaa Nova 1200 tietokoneesta
http://en.wikipedia.org/wiki/Data_General_Nova
Sen käynnistäminen oli jännä operaatio. Ensin (siis ennen kuin itse keskusyksikköä edes päästettiin reset-tilasta) koneen muistiin syötettiin kytkimien avulla (katso kuvan etupaneli), oktaalilukuina (siis 8-järjestelmä, kolme bittiä, per numero) lyhyt ohjelma, "bootstrap loader", Muutamia kymmeniä tavuja, joka osasi käyttää reikänauhanlukijaa hyvin triviaalilla tavalla.
Kytkinrivin sisältö kirjoitettiin yksinkertaisella logiikalla suoraan RAM-muistiin (magneettirengasmuistia!) peräkkäisiin osoitteisiin. Luku kerrallaan. Siellä oli erillinen kirjoituskomentokytkin.
Sitten kone päästettiin resetistä, jolloin se alkoi suorittaa tuota lyhyttä ohjelmaa. Ohjelmalle syötettiin reikänauhalta lyhyt ohjelma, bootstrap, jonka avulla ladattiin koneen triviaali "käyttöjärjestelmä", oikeastaan basic-tulkki. Sen avulla kone sitten osasi käyttää teletype-kirjoittimia ja infoton-videopäätteitä.
Pari vuotta myöhemmin markkinoille tulivat kaksi ensimmäistä kotimikroa: Altair 8800 ja Imsai 8080, jotka käynnistettiin samalla tavalla. Katso niiden panelien kuvia:
http://en.wikipedia.org/wiki/Altair_8800
Minun ensimmäinen oma tietokoneeni oli Intellin SDK-8085, jossa oli heksanäyttö ja näppäimistö. Konekieliset käskyt syötettiin RAM-muistiin heksamuodossa. Koneessa oli pieni "Bootstrap-ROM" , joka osasi lukea näppäistöä ja näyttää kirjoitetun merkin 7-segment-näytöllä.
Suoritin sekä Novassa, että 8080:ssä oli toteutettu porttipiirejä ja kiikkuja käyttäen niin, että se ymmärsi yksinkertaisia konekielisiä käskyjä. Novassa suoritin oli koottu piirilevylle SSI- ja MSI-tason (74-sarjan) piireistä, mutta 8080:ssä koko logiikka oli yhdessä LSI-piirissä.
Itse voi kokeilla, miltä oikeiden nörttien aikakaudella ohjelmointi sujui.
http://incolor.inebraska.com/bill_r/computer_simulators.htm