Wikibooks ltwikibooks https://lt.wikibooks.org/wiki/Pagrindinis_puslapis MediaWiki 1.46.0-wmf.21 first-letter Medija Specialus Aptarimas Naudotojas Naudotojo aptarimas Wikibooks Wikibooks aptarimas Vaizdas Vaizdo aptarimas MediaWiki MediaWiki aptarimas Šablonas Šablono aptarimas Pagalba Pagalbos aptarimas Kategorija Kategorijos aptarimas TimedText TimedText talk Module Module talk Event Event talk Spekuliacijos apie intel 8008 0 11869 58851 58833 2026-03-27T18:22:15Z Paraboloid 1294 /* Spekuliacijos apie intel 8008 */ 58851 wikitext text/x-wiki ==Spekuliacijos apie intel 8008== :https://www.bitsavers.org/components/intel/MCS8/Intel_8008_8-Bit_Parallel_Central_Processing_Unit_Rev1_Apr72.pdf :Intel 8008 procesorius pagamintas 1972 metais. :Šis procesorius turi 8 bit'ų data bus ir 8 bitų address bus, kuri yra multiplexed (ta pati kaip ir data bus). :RAM atmintis adresuojama iš dviejų ciklų, per pirmą cikla duodamas per data bus 8 žemesnių bitų adresas, o per antrą ciklą duodamas 6 aukštesnių bitų adresas. Per trečią ciklą per data bus išsiunčiamas baitas arba paimamas baitas į/iš RAM. :Vadinasi address bus yra 14 bitų ir Program Counter taip pat yra 14 bitų. :Intel 8008 procesorius turi 14 bitų internal Stack, kuriame saugomos Program Counter reikšmės (iki 8 šių reikšmių). Stack yra pačiame procesoriuje, o ne RAM atmintyje kaip naujesniuose procesoriuose (intel 8080, pavyzdžiui). :'''Spekuliacijos.''' :Spekiliacija yra ta, kad interupt [pin] skirtas nebent tik sustabdyti procesą, o paskui kažkaip tęsti, bet labiau atrodo, kad tai nereikalingas ir neveikiantis dalykas. :Input ir Output instrukcijos yra neveikiančios, nes jos nereikalingos ir blogesnės negu adresavimas Input/Output portus per atmintį, skirus pasirinktus RAM adresus input/output portams per nesudetinga schemą. Tai galima padaryti tiesiog prijungus data bus (kuri kartu yra ir address bus) prie RAM ir prie OUT ir IN portų. Prijungti per tuos pačius varinius takelius arba dar padaryti kokia nors apsaugos schemą, kad input/output portai ir RAM atmintis neperdegintų vieni kitų, jeigu tai įmanoma. :'''8008 komunikavimas su Input/Ouput portais.''' :Intel 8008 procesorius turi RST (restart instrukciją), kuri peršoka į adresą :XX00,0000,00AAA000 (Pirmi XX nesvarbūs, nes Program Counter yra 14 bitų). :Bitai '''AAA''' byte'e 00'''AAA'''000, nusako 8 įmanomas peršokimo vietas. Skirtumas tarp tų 8 RAM vietų yra 8 RAM atminties adresai (pirmas adresas yra 0, antras - 8, trečias - 16, ketvirtas 24, penktas - 32, šeštas - 40, septintas - 48, aštuntas - 56). :Peršokus į vieną iš šitų adresų, tai gali būti ne RAM, o ROM adresas ir iš jo arba vykdoma kažkokia rutina arba yra kodas nurodantis peršokti į kitą RAM ar ROM adresą, kur yra daugiau kodo aptarnavimui, pavyzdžiui, input ar output porto. :In ir out to port instrukcijos yra nereikalingos ir net blogesnės nei tai daroma per RAM (specialiai pasirinkti RAM adresai panaudojami Input/Output operacijoms). Nes per IN ir OUT instrukcijas galima perduoti datą tik iš akumuliatoriaus arba į akumuliatorių (Regsitrą A), o per atminties adresavimą galima perduoti DATĄ iš bet kurio iš 7 registrų (A, B, C, D, E, H, L) arba paimti datą iš RAM porto į bet kurį iš šių 7 registrų. Arba galima perduoti į taip vadinamą RAM portą immediate byte, kuris seką po tam skirtos opcode instrukcijos, kuri tam ir skirta (iš pradžių į vieną iš 7 registrų, o paskui iš to registro į portą, kurio adresą nurodo registrų pora HL). Taip pat galima perduoti baitą iš RAM atminties sekantį po LMI (00111110) instrukcijos į RAM skirtą adresą (kuris pasirinktas kaip In ar Out porto adresas), kurį nurodo registrų pora H and L arba (HL), sauganti 14 bitų RAM adresą. :Tai va, input ir output instrukcijos į portus daug blogesnės nei portų adresavimas per RAM adresus. :Po baigimo kažkokių instrukcijų ar rutinų ar komunikavimo rutinų su input ar output portais, gale yra RET instrukcija, kuri gražina seną Program Counter (PC) adresą iš internal CPU Stack į Program Counter'į. Ir seno kodo vykdymas tęsiamas. :'''Update 1.''' :Intel 8008 procesorius galėtų skaityti signalus, pavyzdžiui iš klaviaturos, tokiu budu, kad klaviatura taip vadinamame latche arba SRAM tipo registre visada laiko paspausto klavišo inofrmaciją. Kai per RAM adresavimą, 8008 procesorius paima iš klaviaturos porto paspausto klavišo inofrmaciją, tai ta reikšmė latch'e dingsta ir pasidaro reikšmė, kad niekas nebuvo paspausta, pavyzdžiui, skaičius 0 iš 256 įmanomų reikšmių nuo 0 iki 255. Taip pat jeigu ilgą laiką klaviaturos joks klavišas nebuvo paspaustas tai SRAM 8 bitai to latch yra nuliai. Tokiu budu intel 8008 procesorius kreipdamasis į klaviaturos portą kaip į RAM adreso skaitymą, visada gali paimti reikiamą informaciją paspausto klavišo ir išsaugoti tą 8 bitų reikšmę į vieną iš 7 savo registrų. :Vadinasi, intel 8008 procesorius nelabai galėjo kontroliuoti flopy diskų ir bendrauti su panašiais procesoriais (jei Input ir Output instrukcijos neveikia). ===Interupt veikimo principas=== :13 puslapyje duotoje nuorodoje PDF aprašomas interrupt veikimas. Prietaisas, kuris siunčia interrupt signalą į intel 8008 procesorių, aktyvuoja 8008 procesoriaus INT (interrupt) kojelę ir siunčia RST (restart) instrukciją 8008 procesoriui. :Restart (RST) instrukcijos opcode'as yra '''00 XYZ 101'''. Trys bitai opcode'e XYZ nusako vieną iš 8 RAM adresų (pirmas adresas yra 0, antras - 8, trečias - 16, ketvirtas 24, penktas - 32, šeštas - 40, septintas - 48, aštuntas - 56). :Kai aktyvuojamas INT signalas, kitas prietais per 8 bitų ''data bus'' atsiunčia baitą '''00 XYZ 101''' (Restart instrukciją), kuris įrašomas į 8008 procesoriaus kažkokį specialų '''instruction register'''. Tada intel 8008 procesorius įvykdo šią instrukciją (peršokdamas į vieną iš 8 RAM adresų, kurie atskirti 8 adresais), išsaugodamas esamą Program Counter adresą į 8 lygių vidinį Stack. Tada viename iš tų 8 adresu įvykdoma reikiama rutina arba peršokoma į sudetingesnę rutiną. Po užbaigimo reikiamų instrukcijų, kurios buvo po RST instrukcijos, paskutinė instrukcija toje rutinoje yra RET (return). Ją įvykdžius, senas Program Counter adresas gražinamas iš STACK į Program Counter'į. :Tos rutinos gali būti input instrukcijos, kad paimti baitą iš input porto arba per RAM adresuojamo porto. Toje PDF nuorodoje - intel 8008 manual'e nėra pasakyta kaip pasirenkamas input ir output portas. Galima pasirinkti 8 input portus ir 24 output portus, bet neaišku kokia '''adress bus''' kombinacija turi būti, kad pasirinkti konkretų portą. Todėl atrodo labiau tikėtina, kad input ir output portus reikia adresuoti per RAM adresus. Siunčiant baitus į portus ar imant baitus iš portų, po RST instrukcijos turėtų buti rutinos kodas, kuris nurodo kokį baitą iš kokio adreso paimti ar į kokį adresą nusiusti. :Naujuosniuose procesoriuose kaip intel 8080 galima atjungti interrupt ir injungtį. Taip interupt proceduras galima vykdyti greičiau ir efektyviau. Tokie 8080 procesoriaus interupt vadinami '''Maskable Interrupt'''. Mat, jeigu po interrupt ir RST instrukcijos 8008 procesorius pradėjo vykdyti interupt rutiną, tai jis daug tikėtina prikrauna savo registrus naujom reikšmėm ir grįžus su RET instrukcija po interrupt rutinos, nebus iš ko testi seno kodo, nes visos senos registrų reikšmės bus kitokios. Todėl nelabai intel 8008 procesorius galėjo ką nors rimto daryti kaip normalus CPU. O intel 8080 procesoriui tai netrukdo, nes jis padarydamas pagrindinį kodą, įjungią maskable interrupt ir tampa nebaisu, kad senos registrų reikšmės dings, nes tolimesnis kodas po interrupt bus toks, kad nereikės reikšmių iš nuveikto kodo ir reikiamos reikšmės bus įdėtos į registrus kaip immediate values (baitai sekantis po instrukcijos, kurios krauna tuos baitus į registrus). Po interrupt kuriame nors RAM adrese gali buti įkrautas kitoks baitas vietoje kokios nors immediate value tame kode, kaip klaviaturos klavišo informacija ir praktiškai daugiau nieko ir nereikia, tik reikia gerai žinoti į kurį RAM adresą reikia krauti klaviaturos klavišo paspaudimo informaciją-baitą. Reikia gerai viską apskaičiuoti arba palikti tai programavimo kalboms kaip C. [https://lt.wikibooks.org/wiki/Wikibooks:Knygos/High_Level_Shading_Language High Level Shading Language] 8fc830wjj7wof7h6cxgnnz5xrx1kl8s