Eggologia tutkii laskimien dokumentoimattomia ominaisuuksia .
Nimi esiintyi ensimmäisen kerran Neuvostoliitossa ja on luonteeltaan koominen. Oletettavasti tulee virheilmoituksesta "EGGOG" ( englanniksi Error - error), jonka antoivat toisen sukupolven ohjelmoitavat neuvostotuotannon laskimet ( Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 , MS 1104) seitsemän segmentin näytöillä . Termi ilmestyi ensimmäisen kerran " Tekhnika — Molodozhi " -lehdessä M. Pukhovin artikkelisarjan jälkeen, joka oli omistettu " Electronics B3-34 " -sarjan mikrolaskimien ohjelmointiin [1] , sekä yhdeksän tarinan sarjan fantastisesta matkasta Kuu Maahan yleisnimellä "Kon -Tiki": tie Maahan" [2] . Tässä syklissä kuvattiin peliohjelmien lisäksi erilaisia dokumentoimattomia mikrolaskimien ominaisuuksia ja videoviestejä, joista monet saatiin manipuloimalla näppäimiä virheilmoituksen "YERGOG" ( ) ilmestymisen jälkeen.
Lehden lukijat vastasivat suurella innolla tarinaan mikrolaskimien löydetyistä dokumentoimattomista mahdollisuuksista, alkoivat etsiä uusia, ja "Kon-Tiki ..." -syklin lopussa ilmestyi pieni osio "Munakogologian uutiset". Siinä julkaistujen dokumentoimattomien tekniikoiden avulla kirjoitettiin monia uusia peliohjelmia, joista suurinta osaa ei yksinkertaisesti voitu luoda vakiotyökaluilla B3-34 -perhelaskinten rajallisten resurssien vuoksi .
Aluksi kiinnostuksen kohteena oli mahdollisuus muodostaa näytölle aakkosnumeerisia yhdistelmiä, jotka sisälsivät paitsi numerot 0-9, myös laskimen näyttämiä heksadesimaalimerkkejä kuten - , L , C , G , E ja välilyönti. Ne voidaan saada käsittelemällä ei-retentiivistä viestiä YGGOG, jonka mikrolaskin antaa yrittäessään suorittaa virheellistä toimintoa (jakaa nollalla jne.). Tällaisia "numeroita" voidaan tallentaa muistirekistereihin ja käyttää viesteinä peliohjelmissa. Technique for Youth -lehti kuvaili tekniikkaa monenlaisten "videoviestien" saamiseksi Lunolet-1-ohjelman kirjaimesta "G" [1] aina sarjakuvaan avaruusaluksen lennosta, joka perustuu tarinaan "The Tie Maahan” [3] .
Tulevaisuudessa yksi munalogologian osa-alueista oli laajentaa käsiteltyjen numeroiden valikoimaa (numerot, joiden järjestys on 100-199, näkyvät näytöllä myös YYGOG -muodossa, katso "Epästandardinumerot" ) ja tutkia mikrolaskimen reaktiota yrittää suorittaa toimintoja vakioalueen ulkopuolella olevilla numeroilla.
Toinen munalogian haara tutki ohjelmointitilan dokumentoimattomia ominaisuuksia; harrastajat löysivät tapoja syöttää dokumentoimattomia komentoja, jotka sisältävät esimerkiksi "tyhjän" merkin (F), tutkivat ohjelmien osoiteavaruuden epätyypillisen käytön mahdollisuuksia (katso Pää- ja sivuhaarat ), PSC-tila .
Kun insinööri F. Lazarev analysoi Neuvostoliiton mikrolaskimien laitteistoarkkitehtuuria vuonna 2011 ja luki ROM:n sisällön [4] , monet PMC:n epätavallisista ominaisuuksista saivat loogisen selityksen. Kävi selväksi, että "Darkness" on PMC-laiteohjelmiston silmukka, ja pääprosessori K745IK1302 generoi viestin "YGGOG" aikakatkaisulla, kun mikään orjaprosessoreista ei pystynyt käsittelemään syötettyä komentoa [5] . PMC-laiteohjelmiston lukeminen mahdollisti emulaattorin luomisen, joka toistaa tarkasti kaikki mikrolaskinten dokumentoimattomat ominaisuudet [6] .
Eggogologia väittää, että laskimen käsittelemän lukualueen järjestys ( eksponentti ) on rajoitettu modulo 1000 ja jakaa tämän alueen niin kutsuttuihin kerroksiin tai " tasoihin " [7] . Kukin taso on sata välillä 0–999. Eli nollataso on lukuja, joiden potenssikanta on 0–99, ensimmäinen taso on lukuja, joiden eksponentti on 100–199 jne. Tasoja on kymmenen. yhteensä ja miinus ensimmäinen taso vastaa yhdeksännestä (eli mikrolaskimen esityksen eksponentti -80 vastaa 920:a), miinus toinen - kahdeksas (esimerkiksi eksponentti -180 on ekvivalentti 820) jne.
Dokumentaatio rajoitti lukujen maksimiarvon, joille matemaattisia operaatioita voidaan suorittaa, arvoon ±9,9999999 × 10 ±99 (eli nolla ja miinus ensimmäiset tasot). Itse asiassa, jos syötät mikrolaskimeen luvun 1 × 10 50 (johon riittää näppäinpainallusten sarja 1 VP 50 ) ja neliöit sen (paina Fx² ), niin näyttöön tulee viesti " YGGOG ". Tämä dokumentaatio osoittaa virheilmoituksen, koska numero 1 × 10 100 on "standardin" alueen ulkopuolella. Osoittautuu, että tämä ei ole virheilmoitus, vaan tapa ilmoittaa ensimmäisen tason numerot, ja tällä numerolla voit suorittaa tavanomaisia toimintoja: lisätä, kertoa, jakaa, laskea funktioarvoja, tallentaa sen muistirekisteriin , soita sille rekisteristä. Samalla tavalla voit työskennellä toisen tason numeroiden kanssa (esimerkiksi 1 × 10 200 , helpoin tapa saada tällainen luku on neliöidä luku 1 × 10 100 ). Tällaisten lukujen todellisten arvojen selvittämiseksi ne oli jaettava luvulla 1 × 10 99 tai muilla vastaavilla luvuilla niiden vähentämiseksi nollatasosta (absoluuttisella moduulilla enintään 9,9999999 × 10 99 ).
Toisin sanoen annettiin tapa laajentaa vakiotoimintojen käsittelemien numeroiden valikoimaa arvoon ±9,9999999 × 10 299 . Joillain temppuilla (erityisesti kirjoitettujen ohjelmien avulla) oli myös mahdollista saada lukuja ±9,9999999 × 10 799 asti ja analysoida niiden arvo (eli selvittää mantissa ja eksponentti). Tällaisten "laskelmien" avulla todistettiin, että yhdeksäs taso edustaa lukuja, joilla on negatiivinen asteen kanta-arvo (esimerkiksi 1 × 10 920 oli luvun 1 × 10 -80 vastaava esitys ). Kahdeksannen tason numeroita (luvut ±1 × 10800 - ±9,9999999 × 10899 ja myös ±1 × 10900 - ±9,9999999 × 10900 ) ei voida tallentaa niiden vastaanottamisen jälkeen, koska ne muutettiin välittömästi tavalliseksi nollaksi huolimatta. siitä, miltä puolelta "nousta" heille (seitsemänneltä tai yhdeksänneltä tasolta).
Numeerinen taso | Numeroiden nimi | Numeroalue | Lyhyt kuvaus tämän alueen numerosta |
---|---|---|---|
Tyhjä | Tavalliset luvut, joissa ei ole negatiivinen järjestys | ±1 - ±9,9999999 × 1099 | Voit tehdä normaaleja laskelmia |
Ensimmäinen | "MUNA" | ±1 × 10 100 - ±9,9999999 × 10 199 | Voit suorittaa normaaleja laskutoimituksia, mutta ne näkyvät näytössä muodossa |
Toinen | "3GGOGi" | ±1 × 10200 - ±9,9999999 × 10299 | Voit suorittaa normaaleja laskutoimituksia, mutta ne näkyvät näytössä muodossa . Suorita ehdoton hyppy osoitteeseen, joka vastaa eksponentin kahta ensimmäistä numeroa (20 - 29) |
Kolmas | "Läättämättömät hirviöt" | ±1 × 10300 - ±9,9999999 × 10399 | Pystyy mielivaltaisesti siirtämään laskimen ohjelman suoritustilaan tai saamaan sen jäätymään |
Neljäs | "OS Ihmissudet" | ±1 × 10400 - ±9,9999999 × 10499 | Ne kopioivat tasojen rakenteen vääristyneessä muodossa ja niitä käytetään muiden lukujen analysointiin. Vääristää C-rekisterin sisältöä |
Viides | "Tumma" | ±1 × 10500 - ±9,9999999 × 10599 | Kun yrität tulostaa näytölle, laskin pysähtyy. Merkkivalo sammuu, suorituskyky palautuu sammuttamisen ja päällekytkennän jälkeen (MC 1104:ssä oli erityinen painike tämän vaikutuksen vaimentamiseksi) |
Kuudes | "S-YGGOG-ihmissudet" | ±1 × 10600 - ±9,9999999 × 10699 | Vääristää C-rekisterin sisältöä |
Seitsemäs | "Pitkät hirviöt" | ±1 × 10700 - ±9,9999999 × 10799 | Ne kopioivat tasojen rakenteen vääristyneessä muodossa, niitä käytetään muiden lukujen analysointiin |
Kahdeksas (miinus toinen) | "nollat" | ±1 × 10800 - ±9,9999999 × 10900 tai ±1 × 10 -200 - ±9,9999999 × 10 -100 ( valmistusmenetelmästä riippuen) | Muuntaa heti normaaliin nollaan |
Yhdeksäs (miinus yksi) | Tavalliset luvut negatiivisella järjestyksellä | ±1 × 10 -99 - ±9,9999999 × 10 -1 | Voit tehdä normaaleja laskelmia |
Tämän viestin alle on piilotettu numeroita ±1 × 10200 - ±9,9999999 × 10299 . Voit suorittaa niille normaaleja aritmeettisia operaatioita. Kun 3GGOG tulee näyttöön, desimaalipilkku säilyttää asemansa edellisestä numerosta ja ohjelman osoitelaskuri asetetaan osoitteeseen, joka on yhtä suuri kuin kaksi ensimmäistä numeroa järjestyksestä 3GGOG.
Mikä tahansa 3GGOG voidaan "dekoodata" komennoilla: FABT, dot (sen järjestys näkyy näytön oikealla puolella), FAVT (entisen 3GGOG:n mantissa näkyy vasemmalla ja järjestys --L tai --3 oikealla).
Soitettaessa 3GGOG:iin muistirekisteristä 0-9 ja sitten painettaessa VP tai desimaalipilkkua, laskin käyttäytyy jokseenkin samalla tavalla, ikään kuin näytölle ilmestyisi "supernumero" rekisterinumerolla alkavalla järjestyksessä. Jos esimerkiksi 3YGOG kutsutaan rekisteristä 1, tulee viesti YYGOG; rekisteristä 2 - jälleen 3GGOG; rekisteristä 3 - "spoiled" komento "3" ilmestyy ohjelmointitilaan; rekisteristä 4 - Pimeys; rekisteristä 7 - "Pitkä hirviö".
"OS Werewolves"±1 × 10400 - ±9,9999999 × 10499 .
Kun "OS-ihmissusi" vedetään rekisteristä, se laittaa "häntänsä" rekisteriin C. "Häntä" on myös superluku, jonka eksponentin kaksi ensimmäistä numeroa ovat "OS-ihmissuden" järjestyksessä kaksi viimeistä numeroa. ". Jos "häntä" on myös "OS-ihmissusi" (tämä tapahtuu numeroille, joiden järjestys on 440-449), niin se myös laittaa "häntänsä" rekisteriin C. On kolmannen asteen ihmissusia - numeroita, joiden järjestys on 444.
Esimerkki:
V/O FPRG Fx 2 Fx 2 × Fx 2 X→PS Sx S/P FAVT V/O 1 VP 22 V↑ 1 VP 50 S/P
P→XS näytöllä 0
P→XS näytöllä 0
P→XS näytöllä 0
P → XS näytöllä viimeinen "häntä", jossa on kolme kirjainta E.
±1 × 10600 - ±9,9999999 × 10699 .
Jos "C-YGGOG-ihmissusi" vedetään pois rekisteristä, se tulee C-rekisterin sisällön piiriin ja siirtyy Y-rekisteriin. Suorittaessaan sille aritmeettista operaatiota - G.YGOG.
"S-YGGOG-ihmissuden" ominaisuuksiin perustuen ns. " ASO-analyysi ":
Varotoimet työskennellessäsi "C-ERGOG-ihmissusien" kanssa:
Toinen nimi on "K-numerot".
±1 × 10700 - ±9,9999999 × 10799 .
Kun Pitkä hirviö ilmestyy, ilmaisimessa näkyy seuraava numero:
1.2345678⋅10 735 = [50.12345678 3] Missä indikaattorin ensimmäinen 5 on eksponentin kolmas numero ja indikaattorin viimeinen 3 on eksponentin toinen numero. Ja itse "Pitkä hirviö" kirjoitetaan ohjelman 73. osoitteeseen, joka vastaa numerojärjestyksen kahta ensimmäistä numeroa.
Laskimessa B3-34 (ja sen kanssa yhteensopivassa MK-54 , MK-56 ) kaikissa rekisterikomennoissa voit käyttää rekisterin numeronäppäimen (kirjain) sijaan näppäintä ↑ eli dokumentoimattomia komentoja IP↑ , P↑ , KIP↑ , KP↑ ovat saatavilla , Kx≠0↑ , Kx≥0↑ , Kx<0↑ , Kx=0↑ , KBP↑ , KPP↑ . Kun nämä komennot syötetään ohjelmointitilassa, generoidaan koodit, jotka päättyvät E. Kun tällaisia komentoja suoritetaan, päästään itse asiassa rekisteriin 0; komennot suoraa pääsyä varten rekisteriin ovat täysin samanlaisia IP0 ja P0 , mutta muilla komennoilla, jotka tarjoavat epäsuoran pääsyn rekisteriin 0, on tärkeä ero vastaaviin komentoihin KIP0 , KP0 ja muihin: ne eivät vähennä rekisterin 0 arvoa. kun siihen pääsee käsiksi. Tämä mahdollistaa epäsuoran pääsyn rekisteriin 0 kahdella tavalla: rekisterin arvon pienentämisellä ja ilman.
"Nuolikomentojen" käyttö yksinkertaistaa rekisterin läpikulkua silmukassa, jolloin rekisterin 0 arvoa voidaan käyttää sekä silmukkalaskurina että rekisteriindeksinä samanaikaisesti. Esimerkiksi yksinkertaisin ohjelma arvojen lisäämiseksi rekistereihin 1-N (olettaen, että tiedot kirjoitetaan rekistereihin ja N syötetään rekisteriin X ennen ohjelman suorittamista) näyttää tältä:
Vaihtoehto ilman "nuolikomentoja":
Ohjeet epäsuorille hyppyille "nuolilla" antavat mahdollisuuden tallentaa hypyn osoitteen rekisteriin 0 ja hypätä siihen muuttamatta sisältöä. Koska epäsuora hyppykäsky kestää yhden ohjelmavaiheen ja tavallinen hyppykäsky kaksi, osoitteen kirjoittaminen rekisteriin voittaa yhden ohjelmavaiheen jokaista hyppyä kohti kyseiseen osoitteeseen.
MK-61- ja MK-52- laskimissa " ↑ " -näppäin vastaa uutta muistirekisteriä E ja operaatiokoodit rekisterillä E vastaavat B3-34 "nuolikomentoja", joten "nuolikomennot" eivät ole käytettävissä nämä laskimet [8] (katso taulukko). Avainmerkinnät P , IP ja ↑ B3-34:ssä vastaavat Х→П , П→Х ja Е malleissa MK-61 ja MK-52.
Komentokoodit | Joukkueet B3-34 | Joukkueet MK-61, MK-52 |
---|---|---|
7E | Kx≠0↑ | Kx≠0E |
8E | KBP↑ | KBPE |
9E | Kx≥0↑ | Kx≥0E |
-E | Tarkistuspiste↑ | CATP |
LE | KP↑ | KX→PE |
CE | Kh<0↑ | Kx<0E |
GE | KIP↑ | CP→HE |
EE | Kx = 0↑ | Kx = 0E |
"Nuolikomentojen" puuttuminen malleissa MK-61/MK-52 vaikeuttaa näitä komentoja käyttävien B3-34-ohjelmien mukauttamista. Epäsuorien hyppykomentojen kohdalla ongelma ratkeaa yksinkertaisesti: haluttu osoite kirjoitetaan E-rekisteriin, jota ei käytetä B3-34:n ohjelmissa, ja "nuoli"-komennot muutetaan E-rekisteriä osoittaviksi komentoiksi. KIP↑/KP↑-komennot, tilanne on paljon monimutkaisempi : Jokaisen poistaminen lisää ohjelman kokoa vähintään 3 askelta, mikä saattaa aiheuttaa ohjelmamuistin loppumisen. Uusissa malleissa MK-152/MK-161 on saatavilla uudet kaksivaiheiset epäsuorat rekisterikomennot RKIP00/RKP00, jotka toimivat samalla tavalla kuin KIP↑/KP↑ B3-34:ssä; jokainen tällainen käsky lisää ohjelmaa vain yhdellä askeleella, ja uusien laskimien paljon suurempi ohjelmamuisti tekee tästä lisäyksestä lähes merkityksettömän.
Laskimessa B3-34 useimmat K-näppäimellä tehdyt dokumentoimattomat toiminnot aiheuttavat viestin YYGOG. Nämä ovat komennot K3-K9, K+, K−, K×, K÷, , K↑, K/−/, KVP, KSx ja K desimaalipilkku. Komennot K1 ja K2 vastaavat KNOP-toimintoa.
Malleissa MK-61 ja MK-52 vain komennot К−, К×, К÷ johtavat YYGOG-viestiin. Komennot K1 ja K2 vastaavat myös KNOP-toimintoa. Jäljellä olevien komentojen koodit dokumentoidaan ja niitä käytetään muuntamaan aika- ja kulmamitat, määrittämään luvun moduuli ja etumerkki, luvun kokonaisluku- ja murto-osat, kahdesta luvusta suurempi, loogiset operaatiot ja satunnaisluvun luominen.
Virheellinen toiminta malleissa MK-61 ja MK-52 on myös minuuttien (sekuntien) muuntaminen asteina ja jos minuuttien tai sekuntien arvo on suurempi tai yhtä suuri kuin 60.
K-näppäimellä tehtyjen virheellisten toimintojen avulla saatu viesti YYGOG ei ole ensimmäisen "tason" "superluku" eikä sitä voi tallentaa muistirekisteriin, vaan sitä voidaan käyttää heksadesimaalilukujen näyttämiseen osoittimessa, esimerkiksi:
1 K− (YYGOG näkyy) VP VP ↑ (kirjain E näytetään).
Tuloksena oleva kirjain E voidaan tallentaa muistirekistereihin ja hakea sieltä, ja käyttämällä rekistereitä 0-3 voidaan muuntaa myös muiden heksadesimaalilukujen merkeiksi:
P0 KIP0 IP0 -PAINIKE (G) KIP0 IP0 -PAINIKE (S) KIP0 IP0 -PAINIKE (L) KIP0 IP0 -PAINIKE (-) KIP0 IP0 -PAINIKE (9) jne.
Vastaavia tekniikoita käytettiin videoviestien muodostamiseen esimerkiksi peliohjelmissa.
Numerolla F alkavan videoviestin vastaanottaminen (näkyy tyhjänä tilana) voi häiritä laskimen normaalia toimintaa (ohjelman ja datan vääristyminen, spontaani siirtyminen laskentatilaan jne.). Tämä voidaan välttää "poistamalla" se välittömästi komennolla ↑ , joka annetaan vähintään neljä kertaa [8] (muiden lähteiden mukaan seitsemän kertaa [9] ), yrittämättä suorittaa muita toimintoja.
Mikrolaskimen ohjelmamuistin yksi askel voi sisältää kaksi heksadesimaalilukua, eli teoriassa voi olla 256 eri komentokoodia. Näistä 214 on dokumentoitu MK-61/52-käyttöoppaassa. On olemassa keinotekoinen tekniikka, jonka avulla voit syöttää 12 42:sta dokumentoimattomasta koodista. Tätä varten syötetään yksi siirtymäkomennoista, esimerkiksi BP (koodi 51) ja sen jälkeen kaksi heksadesimaalilukua, jotka laskin havaitsee siirtymäosoitteeksi. Sen jälkeen siirtymäkomento korvataan "dummy" KNOP-komennolla, ja laskin ei havaitse seuraavan vaiheen ohjelman suorittamisen aikana siirtymäosoitteeksi, vaan komennona [10] . Jotkin näistä koodeista voidaan syöttää myös edellisessä alakohdassa kuvatuilla dokumentoimattomilla K-näppäinoperaatioilla.
Komentokoodit | Komentotoiminnot | Syötä K-näppäimellä |
---|---|---|
27 | Tuo esiin viestin YYGOG | K− |
28 | Tuo esiin viestin YYGOG | K× |
29 | Tuo esiin viestin YYGOG | K÷ |
2L | Tuo esiin viestin YYGOG | Ei |
2C | Tuo esiin viestin YYGOG | Ei |
2G | Tuo esiin viestin YYGOG | Ei |
2E | Tuo esiin viestin YYGOG | Ei |
3С | Tuo esiin viestin YYGOG | Ei |
3G | Kopioi rekisterin X sisällön X1:een. X-, Y-, Z- ja T-rekisterien sisältö tallennetaan. | Ei |
3E | Siirtää rekisterin X sisällön X1:een, kopioi rekisterin Y sisällön X:ään.
Y-, Z- ja T-rekisterien sisältö tallennetaan. |
Ei |
55 | Ei tee mitään (vastaa KNOP-komentoa) | K1 |
56 | Ei tee mitään (vastaa KNOP-komentoa) | K2 |
Koodeja 55 ja 56 käytettiin MK-52:n pienimuotoisten analogien syöttökielissä [11] .
Tämä tekniikka ei sovellu jäljellä olevien 30 dokumentoimattoman komentokoodin syöttämiseen, jotka sisältävät heksadesimaaliluvun F (näkyy osoittimessa tyhjänä merkkinä), koska laskimen näppäimistössä ei ole näppäintä numeron F syöttämiseen (ei pidä sekoittaa etuliitenäppäin F). Joitakin tapoja syöttää tällaisia koodeja käsitellään seuraavassa alaosassa.
Laskimessa MK-52 on mahdollista generoida mikä tahansa 256 ohjekoodista mille tahansa ohjelmamuistiosoitteelle. Tätä varten käytetään seuraavaa PROM-ohjelmien kirjoittamisen ominaisuutta. Normaalissa ohjelman kirjoitusprosessissa sinun on ensin tyhjennettävä PROM-muistin vastaava osa. Jos näin ei tehdä, RAM-muistista tulevat käskykoodit lisätään bittikohtaisesti loogisesti niihin koodeihin, jotka olivat aiemmin PROM:ssa [12] . Joten jos BP-komento (koodi 51) on kirjoitettu EPROM-muistiin tiettyyn osoitteeseen ja B↑-komento (koodi 0E) sijaitsee RAM-muistissa vastaavassa osoitteessa, niin loogisen lisäyksen tulos on komento, jolla on koodi 5F (joka johtaa mikrolaskimen jäätymiseen). Numeron F sisältävien koodien komentojen toiminnot on esitetty seuraavassa taulukossa:
Komentokoodit | Komentotoiminnot |
---|---|
0F | Dokumentoitu FBx-komento |
1F, 2F, 3F | Älä tee mitään (vastaa KNOP-komentoa) |
4F | Vastaa komentoa X→P0 (koodi 40) |
5F | Aiheuttaa laskimen jäätymisen. Merkkivalo sammuu, toimintakyky palautuu virran sammuttamisen ja kytkemisen jälkeen. |
6F | Vastaa komentoa P→X0 (koodi 60) |
7F | Vastaa komentoa Kh≠00 (koodi 70) |
8F | Vastaa komentoa KBP0 (koodi 80) |
9F | Vastaa komentoa Kh≥00 (koodi 90) |
-F | Vastaa komentoa KPP0 (koodi -0) |
LF | Se vastaa komentoa КХ→П0 (koodi L0) |
CF | Se vastaa komentoa Khx<00 (koodi С0) |
GF | Se vastaa komentoa KP → X0 (koodi G0) |
EF | Vastaa komentoa Kx=00 (koodi E0) |
F0, F1, ...FF | Älä tee mitään (vastaa KNOP-komentoa) |
Valitettavasti dokumentoimattomat komennot 7F, 8F, ... EF, jotka tarjoavat epäsuoran pääsyn rekisteriin 0, vähentävät sen sisältöä, samoin kuin niiden dokumentoidut vastineet koodeilla 70, 80, ... E0, eivätkä ne voi korvata " arrow" komennot kohdassa B3 -34 .
B3-34 :ssä ja MK-61 :ssä , joissa ei ole PROM:ää, on myös mahdollista syöttää joitain komentoja koodilla, jotka sisältävät numeron F, mutta vain muutamissa kiinteissä osoitteissa. Yksi tapa on käyttää komentoja B / 0 PPC N manuaalisessa laskentatilassa (F ABT), N - mitä tahansa rekistereistä (0-9, A-E). Tässä tapauksessa mikrolaskin siirtyy ohjelmointitilaan ja syöttää F N -koodin osoitteeseen 30+ N (kirjainrekistereille A-E, vastaavasti 40-44). Huomaa, että käytettäessä rekistereitä 0-6, tulos riippuu niiden sisällöstä [ ]13 Tätä varten luodaan ensin "superluku" käyttämällä VP-komentoa kahdesti yli 99 tilausten summalla (esimerkiksi VP 10 VP 90), ja sitten YYGOG-signaalin ilmestymisen jälkeen painamalla "VP desimaalipiste 0" -näppäimet. Tämä myös asettaa laskimen ohjelmointitilaan, ja tässä esimerkissä F1-komento kirjoitetaan osoitteeseen 51. Sekä osoitteen että komennon toinen merkki määräytyy ensimmäisen VI-käskyn ensimmäisen eksponentin mukaan (esim. VI 20 VI 80 VI .0 antaa F2-komennon osoitteessa 52 jne.)
Ohjelmassa käytetty "desimaalipiste"-komento (koodi 0-) (paitsi dokumentoidussa käytössä - ohjelman mukaisen numeron syöttämiseen merkki kerrallaan) korvaa rekisterissä X olevan arvon sillä, joka oli sen jälkeen. viimeinen komennoista 0, 1 , … 9, V↑, P→X0, P→X1, … P→X9, P→XA, … P→XE [14] .
Kun EGGOG-signaali esiintyy ohjelman laskennan aikana, on kaksi dokumentoimatonta tapaa määrittää, mikä toimenpide johti pysäyttämiseen [8] :
Toinen menetelmä ei toimi ensimmäisen jälkeen ja päinvastoin. Molempien diagnostiikkatietojen käyttämiseksi sinun on suoritettava ohjelma kahdesti samoilla lähdetiedoilla. Manuaalisessa laskentatilassa tämä myös toimii, mutta ei yleensä ole välttämätöntä, koska on jo selvää, mikä toimenpide johti virheeseen.
Aliohjelmien päättämiseen tarkoitettu B/0-käsky, kun sitä käytetään pääohjelmassa, hyppää yleensä osoitteeseen 01. Tätä käytetään joskus lyhentämään ohjelmaa korvaamalla kaksi BP 01 -käskyä yhdellä B/0:lla. Tätä ominaisuutta käytetään erityisen usein käytettäessä ohjelman osoiteavaruutta epätyypillisellä tavalla (katso Pää- ja sivuhaarat ). Joskus tämän ominaisuuden käyttö johtaa kuitenkin väärään tulokseen.
Syynä tähän ominaisuuteen on se, että osoitteet, joista alirutiineja kutsutaan, kirjoitetaan viiden rekisterin paluupinoon ja B/0-käsky poistetaan siitä ja paluu tapahtuu yhtä suurempaan osoitteeseen. Jos paluupinoon ei ole kirjoitettu mitään, siihen tallennetaan nollia ja B / 0 -käsky hyppää osoitteeseen 01. Sama tapahtuu, jos paluupinoon ei syötetä enempää kuin neljä osoitetta aliohjelmia kutsuttaessa ja ne kaikki olivat haettu palautettaessa - seuraava haettu osoite on nolla.
Kuitenkin, jos paluupinoon työnnetään viisi osoitetta, kun ensimmäinen niistä pompataan, viimeiseen rekisteriin muodostuu "sabotööriosoite", jonka molemmat numerot ovat samat kuin aiemmin siellä olleen osoitteen viimeinen numero. Kun paluupinosta pompataan muita osoitteita, osoite-sabotööri täyttää kaikki rekisterinsä, ja sitten jos B/0-käskyä käytetään aliohjelman ulkopuolella, hyppy ei etene oikein [8] .
Voit tyhjentää paluupinon ZGGOG:lla ilman mantissaa: Cx B↑ ÷ VP Fx 2 Cx ↔ Cx
Jos jokin rekistereistä 7-E sisältää luvun, jonka modulo on pienempi kuin yksi, siihen epäsuorasti käsiteltäessä muodostuu siirtymäosoite, joka määräytyy mantissan ja järjestyksen [8] viimeisen numeron perusteella (katso taulukko, M N - N. numero mantissa)
Tilauksen viimeinen numero | Hyppyosoite negatiivisille tilauksille | Hyppyosoite positiivisille tilauksille |
---|---|---|
yksi | M 7 M 8 | M 1 M 2 |
2 | M 7 M 8 | M 2 M 3 |
3 | M 7 M 8 | M 2 M 3 |
neljä | M 6 M 7 | M 4 M 5 |
5 | M 5 M 6 | M 5 M 6 |
6 | M 4 M 5 | M 6 M 7 |
7 | M 2 M 3 | M 7 M 8 |
kahdeksan | M 2 M 3 | M 7 M 8 |
9 | M 1 M 2 | M 7 M 8 |
0 | 0M 1 | 0M 1 |
"Pseudolaskentatila" on tekniikka mielivaltaisten aakkosnumeeristen yhdistelmien generoimiseksi mikrolaskimen näytöllä, ns. "sanat". Se perustuu PMC:n siirtoon erityiseen toimintatilaan, jossa ohjelmamuistiin tallennetut koodit (tai pikemminkin niiden ensimmäiset merkit) luetaan ilmaisimen päälle. Kuvattu muistiinpanossa "News of eggogology" "Techniians - Youth" nro 6 vuodelta 1987 [15] . Tässä artikkelissa S. Bannikov, I. Emelyanov, B. Muradov on nimetty PFC-tilan löytäjiksi. Tilalle annetaan myös vaihtoehtoisia nimiä - "epänormaali", "keräystila".
Ennen PMC:n syöttämistä PSC-tilaan kirjoitetaan muistiin lyhyt ohjelma, jonka komentokoodit alkavat kaikilla mahdollisilla merkeillä (mukavuussyistä käytetään yleensä kaksoismerkkejä muodossa 00 , 11 , ..., EE ) .
Suora siirtyminen PSC-tilaan tapahtuu antamalla komentoja 6 F10 x K-VP. 0 V/O V/O BP V/O . Tämä menettely on pohjimmiltaan tapa saada tyhjä-tyhjä komento. On myös mahdollista siirtyä PSC-tilaan "pitkien hirviöiden" -alueelta.
PSC-tilassa avainarvot muuttuvat. V/O :ta ja S/P :tä käytetään nyt siirtymiseen offline-tilasta ohjelmointitilaan ja päinvastoin. Komennot FPRG ja FABT sekä mikä tahansa "supernumero" palauttaa PMK:n normaaliin toimintaan. SH - näppäimillä voidaan liikkua muistiin tallennettua ohjelmaa pitkin. BP- ja PP - näppäimet siirtävät katselu- ja lukupisteen 10 osoitteeseen syvälle ohjelmaan ja mahdollistavat myös ilmaisimen numeron käytön suoraan komentokoodeilla.
VI - näppäin lukee ilmaisimen ensimmäiseen rekisteriin merkin nykyisestä ohjelmamuistiosoitteesta. "Sanojen" muodostus alkaa muotoa 11111111 olevalla työkappaleella , haluttu merkki luetaan vastaavasta ohjelmamuistisolusta ja sitten komennoilla VP /-/ 1 PA KIPA IPA hylätään viimeinen rekisteri työkappaleesta. , ja ensimmäisen tilalle kirjoitetaan nolla, joka voidaan VP -komennolla korvata seuraavalla merkillä.
Menetelmän avulla voit syöttää aakkosnumeerisia yhdistelmiä ja välilyöntiä (dummy). Välilyönti luetaan mistä tahansa "pimeän alueen" osoitteesta. PMK:n toiminnan erityispiirteiden vuoksi "nuken" ilmestymisen jälkeen tarvitaan kuitenkin lisätoimenpiteitä (pinon tyhjennys, monimutkainen komentosarja työkappaleen lyhentämiseksi, ShG- näppäinten käytön rajoitusten noudattaminen ) .
PSCh-tilaan siirtymiseen voidaan teknisesti käyttää mitä tahansa aakkosnumeerista tyhjää kohtaa, joka sisältää 6 - 8 merkkiä ja alkaa G-, E- tai "tyhjällä" merkillä, muut alkumerkit antavat virheen "VP-piste"-näppäimiä painettaessa. VP-piste- numerokomentojen jälkeen laskin on jo PFC-tilassa K -näppäin aktivoituna - tämä voidaan tarkistaa painamalla 0 (poistaaksesi K-näppäimen käytöstä), sitten V / O ja C / P - ne toimivat jo uudella tavalla. Mutta PSCh-tilan käyttö on vaikeaa, koska sitä syötettäessä alkuperäinen aakkosnumeerinen tyhjä kirjoitetaan paluupinoon alkaen 3. numerosta, ja joka kerta kun painat V / O tai BP, "return" tapahtuu otettuun osoitteeseen. tästä pinosta (V/O-komento lisää siihen 1). Jos paluu "pimeän alueen" osoitteeseen tapahtui komennolla V / O, laskin poistuu PSC-tilasta. Siksi, kun poistat osoitteen E0 pinosta, sinun on painettava BP-painiketta V / O: n sijaan. Esimerkki:
(E000000.) VP-piste 0 (00 0,0 51) 0 (E000000.) V/O (00 00 0,0 61) V/O (.E.1.) V/O (.E.2.) S/P ( .E.3.) — tapahtui poistuminen PSC-tilasta ohjelmointitilaan.
(Е000000.) VP piste 0 (00 0.0 51) 0 (Е000000.) V / O (00 00 0.0 61) BP (00 00 0.0 E0) V/O ( 00.01) V/O ( 00.01 ) 0 S / 0 P .) - laskin pysyi PSC-tilassa, palautuspino tyhjennettiin.
(E89-LCG.) VP-piste 0 (00 0,0 51) 0 (E89-LCG.) BP (00 00 0,0 60) BP (00 00 0,0 E8) BP (näyttö pimenee) - siirtyy osoitteeseen "9-" led roikkuvalle PMK:lle.
VI-komento muuttaa 0:n 1:ksi (tässä tapauksessa vain X-rekisterin arvo muuttuu pinossa, loput pinorekisterit säilyttävät arvonsa). Tätä käytetään tekijälaskentaohjelmassa sen pienentämiseen korvaamalla useita käskyjä (ehdollinen haara, sen osoite, syöttämällä yksi) yhdellä VI-käskyllä [16] .
Lisäksi VP-komento on ainoa komento (sekä MK-54:ssä että MK-61:ssä), joka toimii oikein manuaalisessa ja vaiheittaisessa (!) tilassa, mutta voi toimia väärin automaattitilassa. Tämä vivahde tuo aloittelijat stuporiin (koska komento toimii oikein vaiheittaisessa tilassa, joten virhettä ei ole mahdollista löytää ohjelmasta), ja virhe voidaan korjata vain korvaamalla "numero"-komennot , VP "numero"-komennoilla, F10 X , " x" , mutta tämä vaatii ylimääräisen vaiheen.
WP joukkue . (desimaalipilkku), joka suoritetaan mille tahansa numerolle, paitsi E- tai G-alkuisia yhdistelmiä, tulostaa välittömästi YYGOG:n, ja jos muistissa on tilaa kahdelle komennolle, se on paljon nopeampi kuin muut keinotekoiset YYGOG-tulostusmenetelmät - virheelliset toiminnot ja K− , jotka aiheuttavat noin 3 sekunnin tauon. Tavallinen "pitkä" EGGOG ohittaa yhden komennon, mutta instant (VP .) ei.
Neuvostoliiton ohjelmoitavissa laskimissa Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 (ja vastaavissa) fyysistä RAM-muistia on yhtä paljon kuin PMK-käsikirjassa on mainittu, mutta laitteiston toteutuksen ominaisuuksien vuoksi. , on olemassa virtuaalinen 160-vaiheinen sykli [17] , joka koostuu 3 haarasta: "pää", "lyhyt puoli" ja "pitkä puoli" [18] .
Päähaara on se, joka on ilmoitettu laskimen ominaisuuksissa "Ohjelman vaiheiden lukumääränä". B3-34-perheessä päähaara ottaa 98 askelta - osoitteet "00" - "97", MK-61 ja MK-52 105 askelta - "00" - "104" (näytetään muodossa "−4" näytöllä). Jos päähaaran lopussa oleva laskin ei ole havainnut C/O-, C/P- tai BP-komentoa, askellaskuri jatkaa kasvuaan ja laskin siirtyy lyhyen sivuhaaran alueelle.
Lyhyt sivuhaara kestää ohjelman 14 askelta - osoitteesta "98" osoitteeseen "L1" ( MK-61 ja MK-52 : 7 askelta osoitteesta "−5" osoitteeseen "L1"). Nämä osoitteet vastaavat todellisia osoitteita "00" - "13" ( MK-61 ja MK-52 : "00" - "06"). Jos laskin ei täytä komentoja V/O, C/P tai BP näissä osoitteissa, askellaskuri jatkaa kasvuaan ja laskin siirtyy pitkän sivuhaaran alueelle.
Pitkä sivuhaara kestää 48 ohjelman vaihetta - osoitteesta "L2" - "F9". Nämä osoitteet vastaavat oikeita osoitteita "00" - "47"). Jos laskin ei täytä komentoja V / O, C / P tai BP näissä osoitteissa, askellaskuri jatkaa kasvuaan ja laskin siirtyy päähaaraan. Pitkässä sivuhaarassa "pimeä vyöhyke" alkaa osoitteesta "C1": päähaaran vastaaviin osoitteisiin kirjoitetut komentokoodit eivät näy indikaattorissa PRG-tilaan vaihdettaessa, mutta ne suoritetaan oikein laskentatilassa.
Graafisesti tämä prosessi näyttää tältä (esimerkiksi MK-52 ):
Tämä dokumentoimaton ominaisuus ei sallinut dokumentoitua pituutta pidempien ohjelmien kirjoittamista, mutta sen avulla vältyttiin ehdottomasta nollaosoitteeseen hyppäämisestä kahdesti (joskus B/O-komento sijoitettiin nollaosoitteeseen).
Dokumentoimattomien ominaisuuksien lisäksi jotkin laskimet sisälsivät virheitä.
Mikrolaskimen B3-21 ensimmäisissä julkaisuissa tapahtui virhe, kun lisättiin numero, joka sisälsi seitsemän yhdeksää mantissassa ja numero, joka on yli 4 mantissan kahdeksanteen (ei-osoittamiseen) numeroon, suuremmalla numerolla; esimerkiksi lisäämällä 9,9999999 ja 10 on 120.
Myös joissakin B3-21:ssä monimutkaisia operaatioita (esimerkiksi siniä) laskettaessa rengaspinon yhden rekisterin sisältö voi olla vääristynyt.
Jotkut B3-21:t suorittivat virheellisesti PP-aliohjelman kutsukäskyn, jos se sijaitsi jossakin osoitteista 55, 65, 70, 80, 91 tai 92. Sen sijaan, että olisi mennyt aliohjelmaan, he suorittivat käskyn, jonka koodi on sama kuin osoite. aliohjelmasta [19] .
Joissakin mikrolaskimissa B3-34 eksponentiooperaatio Fx y suoritettiin virheellä, jos edellinen operaatio oli kaksipaikkainen (paitsi eksponentio) ja tuloksena saatiin luku, jonka mantissan kahdeksannessa numerossa on luku 5 tai 7 Tämä virhe voidaan välttää, jos ennen Fx y -operaation suorittamista painat lisäksi näppäimiä F1/x F1/x [20] (joka korvaa kaksoisoperaation tuloksen samalla yksittäisen toimenpiteen tuloksella, jossa tämä virhe tapahtuu ei tapahdu). Muut "toisensa poissulkevat" toiminnot (esim. Fx 2 F√ tai Fe x Fln) ovat vähemmän sopivia tähän tarkoitukseen, koska ne voivat johtaa ylivuotoon.
Laskimien varhaisissa julkaisuissa oli mahdotonta lopettaa aliohjelmaa yksittäisten operaatioiden Fsin, Flg, F√ jne. komennoilla ja myös muuttaa laskentatuloksen etumerkkiä /−/-näppäimellä [21] .
Kmax-operaatio pitää nollaa suurimmana lukuna. Tätä vikaa on käytetty joissakin ohjelmissa [22] .
Joissakin operaatioissa, esimerkiksi määritettäessä negatiivisen luvun murto-osaa, ilmestyy "negatiivinen nolla" (näkyy indikaattorissa muodossa "-0"), joka käyttäytyy kuin negatiivinen luku ehdollisten siirtymien aikana [22] .
Lohkossa BRP-3, ohjelmassa 16, käytettiin virheellistä kaavaa :n asemesta ja ohjelma sen mukaisesti käännettiin väärin. Samassa paikassa kompleksiluvun argumentin määrittämiseen käytetään kaavaa ottamatta huomioon sekä merkkejä että , ja sitä, että reaaliosa voi olla nolla. Tämän seurauksena kohdassa , argumentin määrittelyssä tapahtuu virhe 180°:lla ja kohdassa , jako nollalla pysähtyy [23] .
Lohkossa BRP-4 "kuun" -peliohjelmassa "Space landing" fyysinen malli on virheellinen, mikä voi johtaa merkityksettömiin tuloksiin. Esimerkiksi avaruusaluksen vapaassa pudotuksessa Kuuhun suurelta korkeudelta kraatterin syvyys voi olla alle 8 mm, vaikka nopeus kosketushetkellä Kuun pintaan ylittää 3000 m/s. Samassa lohkossa mikrolaskin "rikkoo sääntöjä" peliohjelmissa "Life" ja "Magaraja". Useita ohjelmia on laadittu irrationaalisesti ja niitä voidaan vähentää merkittävästi. Esimerkiksi ohjelmaa tietyn tilavuuden sylinterimäisen tölkin hitsien minimipinnan tai minimipituuden löytämiseksi voidaan pienentää 15 askelta käyttämällä yksinkertaisempia kaavoja [24] .