Eggology je studium nezdokumentovaných rysů kalkulaček .
Jméno se poprvé objevilo v SSSR a je komického charakteru. Pravděpodobně pochází z chybového hlášení "EGGOG" ( anglicky Error - error), které vydaly programovatelné kalkulačky druhé generace sovětské výroby ( Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 , MS 1104) na sedmisegmentových displejích . Termín se poprvé objevil v časopise " Tekhnika — Molodozhi " po sérii článků M. Pukhova věnovaných programování na mikrokalkulátorech řady " Electronics B3-34 " [1] a sérii devíti příběhů o fantastické cestě z Měsíc na Zemi pod obecným názvem „Kon-Tiki“: cesta k Zemi“ [2] . V tomto cyklu byly kromě herních programů popsány i různé nezdokumentované funkce mikrokalkulátorů a videozpráv, z nichž mnohé byly získány manipulací s klávesami poté, co se objevilo chybové hlášení „YERGOG“ ( ).
Čtenáři časopisu reagovali s velkým nadšením na příběh o objevených nezdokumentovaných možnostech mikrokalkulátorů, začali hledat nové a na konci cyklu „Kon-Tiki ...“ se objevila malá rubrika „Eggogology News“. S pomocí v něm publikovaných nezdokumentovaných technik bylo napsáno mnoho nových herních programů, z nichž většinu jednoduše nebylo možné vytvořit pomocí standardních nástrojů kvůli omezeným zdrojům rodinných kalkulaček B3-34 .
Zpočátku byla předmětem zájmu možnost tvořit na displeji alfanumerické kombinace obsahující nejen čísla 0-9, ale také hexadecimální znaky zobrazené kalkulačkou jako - , L , C , G , E a mezeru. Dalo by se je získat manipulací s neretenční zprávou YGGOG, kterou mikrokalkulačka vydá při pokusu o provedení nesprávné operace (dělení nulou atd.). Taková "čísla" mohou být uložena v paměťových registrech a použita jako zprávy v herních programech. Časopis Technique for Youth popsal techniku pro získávání široké škály „videozpráv“, od písmene „G“ pro program Lunolet-1 [1] až po celou karikaturu o letu vesmírné lodi podle příběhu „The Cesta na Zemi“ [3] .
Do budoucna bylo jednou z oblastí eggogologie rozšíření nabídky zpracovávaných čísel (čísla s řády od 100 do 199 se na obrazovce zobrazují i jako YYGOG, viz "Nestandardní" čísla ) a studium reakce mikrokalkulačky na pokusy provádět operace s čísly mimo standardní rozsah.
Další odvětví eggogology studovalo nezdokumentované rysy programovacího režimu; nadšenci našli způsoby, jak zadávat nezdokumentované příkazy, například obsahující „prázdný“ znak (F), studovali možnosti nestandardního využití adresního prostoru programů (viz Hlavní a vedlejší větve ), režim PSC .
Poté, co inženýr F. Lazarev v roce 2011 analyzoval hardwarovou architekturu sovětských mikrokalkulátorů a přečetl obsah ROM [4] , dostalo se mnoho neobvyklých funkcí PMC logického vysvětlení. Ukázalo se, že „Darkness“ je zacyklením firmwaru PMC a hlášení „YGGOG“ generuje hlavní procesor K745IK1302 timeoutem, kdy žádný z podřízených procesorů nemohl zpracovat zadaný příkaz [5] . Čtení firmwaru PMC umožnilo vytvořit emulátor, který přesně reprodukuje všechny nezdokumentované vlastnosti mikrokalkulátorů [6] .
Eggogology tvrdí, že pořadí ( exponent ) rozsahu čísel zpracovávaných kalkulátorem je omezeno modulo 1000 a rozděluje tento rozsah na tzv. patra neboli „ vrstvy “ [7] . Každá úroveň je sto z rozsahu od 0 do 999. To znamená, že nulová úroveň jsou čísla se základnou moci od 0 do 99, první úroveň jsou čísla s exponentem od 100 do 199 atd. V součet a mínus první úroveň je ekvivalentní deváté (to znamená, že exponent -80 v zobrazení mikrokalkulačky je ekvivalentní 920), mínus druhá - osmé (například exponent -180 je ekvivalentní na 820) atd.
Dokumentace omezila maximální hodnotu čísel, se kterými lze provádět matematické operace, na hodnotu ±9,9999999 × 10 ±99 (tedy nula a mínus první vrstvy). Pokud totiž do mikrokalkulačky zadáte číslo 1 × 10 50 (k čemuž postačí sekvence úhozů 1 VP 50 ) a odmocníte jej (stisknete Fx² ), na displeji se zobrazí zpráva „ YGGOG “. Tento údaj v dokumentaci označuje chybové hlášení, protože číslo 1 × 10 100 je mimo „standardní“ rozsah. Ukazuje se, že to není chybová zpráva, ale způsob, jak označit čísla první vrstvy, a s tímto číslem můžete provádět obvyklé operace: sčítat, násobit, dělit, vypočítat hodnoty funkcí, uložit je do paměťového registru , zavolejte to z registru. Stejně tak lze pracovat s čísly druhé vrstvy (například 1 × 10 200 , nejsnáze takové číslo získáte odmocněním čísla 1 × 10 100 ). Abychom zjistili skutečné hodnoty takových čísel, bylo třeba je vydělit 1 × 10 99 nebo jinými podobnými čísly, aby se snížily na číslo z nulové úrovně (absolutním modulem nejvýše 9,9999999 × 10 99 ).
Jinými slovy, byl dán způsob, jak rozšířit rozsah čísel zpracovávaných standardními akcemi na ±9,9999999 × 10 299 . Některými triky bylo také možné (pomocí speciálně napsaných programů) získat čísla až ±9,9999999 × 10 799 a analyzovat jejich hodnotu (tedy zjistit mantisu a exponent). Pomocí takových „výpočtů“ bylo dokázáno, že devátá vrstva představuje čísla se zápornou hodnotou základu stupně (např. 1 × 10 920 bylo ekvivalentní zobrazení čísla 1 × 10 −80 ). Čísla osmé řady (čísla od ±1 × 10800 do ±9,9999999 × 10899 a také od ±1 × 10900 do ±9,9999999 × 10900 ) nelze po jejich přijetí uložit, protože byla okamžitě převedena na běžnou nulu bez ohledu na zda z jaké strany k nim „vstát“ (ze sedmé nebo deváté úrovně).
Číselná úroveň | Název čísel | Rozsah čísel | Stručný popis čísla z tohoto rozsahu |
---|---|---|---|
Nula | Obyčejná čísla s nezáporným řádem | ±1 až ±9,9999999 × 1099 | Můžete provádět běžné výpočty |
První | "VEJCE" | ±1 × 10 100 až ±9,9999999 × 10 199 | Můžete provádět běžné výpočty, ale na displeji se zobrazují jako |
Druhý | "3GGOGi" | ±1 × 10200 až ±9,9999999 × 10299 | Můžete provádět běžné výpočty, ale na displeji se zobrazují jako . Proveďte bezpodmínečný skok na adresu, která odpovídá prvním dvěma číslicím exponentu (od 20 do 29) |
Třetí | "Nezkrotná monstra" | Od ±1 × 10300 do ±9,9999999 × 10399 | Schopný libovolně převést kalkulačku do režimu provádění programu nebo způsobit její zamrznutí |
Čtvrtý | "OS Vlkodlaci" | Od ±1 × 10400 do ±9,9999999 × 10499 | Kopírují strukturu vrstev ve zkreslené podobě a používají se k analýze jiných čísel. Zkreslení obsahu registru C |
Pátý | "Temný" | Od ±1 × 10500 do ±9,9999999 × 10599 | Při pokusu o výstup na displej kalkulačka zamrzne. Indikátor zhasne, výkon se obnoví po vypnutí a zapnutí (MC 1104 měl speciální tlačítko pro potlačení tohoto efektu) |
Šestý | "S-YGGOG-vlkodlaci" | ±1 × 10600 až ±9,9999999 × 10699 | Zkreslení obsahu registru C |
Sedmý | "Dlouhá monstra" | Od ±1 × 10700 do ±9,9999999 × 10799 | Kopírují strukturu vrstev ve zkreslené podobě, slouží k analýze jiných čísel |
Osmý (mínus sekunda) | "nuly" | ±1 × 10800 až ±9,9999999 × 10900 nebo ±1 × 10 −200 až ±9,9999999 × 10 −100 ( v závislosti na způsobu výroby) | Okamžitě se převede na normální nulu |
Devátý (mínus jedna) | Obyčejná čísla se záporným řádem | Od ±1 × 10 −99 do ±9,9999999 × 10 −1 | Můžete provádět běžné výpočty |
Pod touto zprávou jsou skryta čísla od ±1 × 10200 do ±9,9999999 × 10299 . Můžete s nimi provádět běžné aritmetické operace. Když se na obrazovce objeví 3GGOG, desetinná tečka si zachová svou pozici z předchozího čísla a počítadlo adresy programu se nastaví na adresu rovnou prvním dvěma číslicím pořadí 3GGOG.
Libovolný 3GGOG lze „dekódovat“ pomocí příkazů: FABT, tečka (jeho pořadí se zobrazí vpravo na displeji), FAVT (vlevo se objeví mantisa bývalého 3GGOG a zobrazí se pořadí --L nebo --3 napravo).
Při volání 3GGOG z paměťového registru 0-9 a následném stisku VP nebo desetinné čárky se kalkulačka chová poněkud podobně, jako by se na displeji objevilo „superčíslo“ s pořadím začínajícím číslem registru. Pokud je například 3YGOG voláno z registru 1, objeví se zpráva YYGOG; z registru 2 - opět 3GGOG; z registru 3 - v programovacím režimu se objeví "zkažený" příkaz "3"; z registru 4 - Tma; z registru 7 - "Dlouhá příšera".
"OS Vlkodlaci"Od ±1 × 10400 do ±9,9999999 × 10499 .
Při vytahování "OS-vlkodlaka" z registru vloží svůj "ocásek" do registru C. "Ocas" je také nadčíslo, jehož první dvě číslice exponentu jsou poslední dvě číslice řádu "OS-vlkodlaka". ". Pokud je "ocásek" zároveň "OS-vlkodlak" (to se děje u čísel s řády od 440 do 449), pak také dává svůj "ocásek" do registru C. Existují vlkodlaci třetího řádu - čísla s pořadím 444.
Příklad:
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 na obrazovce 0
P→XS na obrazovce 0
P→XS na obrazovce 0
P → XS na obrazovce poslední „ocas“ se třemi písmeny E.
Od ±1 × 10600 do ±9,9999999 × 10699 .
Pokud je „C-YGGOG-werewolf“ vytažen z registru, pak bude pokryt obsahem registru C a přesune se do registru Y. Při provádění aritmetické operace na něm - G.YGOG.
Na základě vlastností „S-YGGOG-vlkodlaka“, tzv. " ASO-analýza ":
Opatření při práci s "C-ERGOG-vlkodlaky":
Jiný název je "K-čísla".
Od ±1 × 10700 do ±9,9999999 × 10799 .
Když se objeví Long Monster, objeví se na indikátoru následující číslo:
1,2345678⋅10 735 = [50,12345678 3] Kde první 5 na indikátoru je třetí číslice exponentu a poslední 3 na indikátoru je druhá číslice exponentu. A samotné „Dlouhé monstrum“ se zapisuje na 73. adresu programu, která odpovídá prvním dvěma číslicím pořadí čísla.
Na kalkulačce B3-34 (a kompatibilní s MK-54 , MK-56 ) ve všech příkazech registru můžete místo číselné (písmenové) klávesy registru použít klávesu ↑ , tedy nedokumentované příkazy IP↑ , P↑ , KIP↑ , KP↑ jsou dostupné , Kx≠0↑ , Kx≥0↑ , Kx<0↑ , Kx=0↑ , KBP↑ , KPP↑ . Když jsou tyto příkazy zadány v programovacím režimu, jsou generovány kódy končící na E. Když jsou takové příkazy vykonávány, je skutečně přistupováno k registru 0; příkazy pro přímý přístup do registru jsou zcela podobné IP0 a P0 , ale zbytek příkazů, které poskytují nepřímý přístup k registru 0, mají důležitý rozdíl od odpovídajících příkazů KIP0 , KP0 a dalších: nesnižují hodnotu registru 0 při přístupu. To umožňuje nepřímý přístup k registru 0 dvěma způsoby: s a bez dekrementace hodnoty v registru.
Použití "šipkových příkazů" zjednodušuje procházení registru ve smyčce, což umožňuje použít hodnotu v registru 0 současně jako čítač smyčky i jako index registru. Například nejjednodušší program pro přidávání hodnot do registrů 1-N (za předpokladu, že data jsou zapsána do registrů a N je zadáno do registru X před spuštěním programu) vypadá takto:
Možnost bez "šipkových příkazů":
Instrukce pro nepřímé skoky „se šipkami“ umožňují uložit adresu skoku do registru 0 a skočit na něj bez úpravy obsahu. Protože instrukce nepřímého skoku trvá jeden programový krok a běžná instrukce skoku dva, zápis adresy do registru vyhraje jeden programový krok pro každý skok na tuto adresu.
U kalkulaček MK-61 a MK-52 odpovídá tlačítko „ ↑ “ novému paměťovému registru E a operační kódy s registrem E odpovídají „šipkovým příkazům“ B3-34, takže „šipkové příkazy“ nejsou na tyto kalkulačky [8] (viz tabulka). Označení klíčů P , IP a ↑ v B3-34 odpovídají Х→П , П→Х a Е v MK-61 a MK-52.
Příkazové kódy | Týmy B3-34 | Týmy MK-61, MK-52 |
---|---|---|
7E | Kx≠0↑ | Kx≠0E |
8E | KBP↑ | KBPE |
9E | Kx≥0↑ | Kx≥0E |
-E | Kontrolní bod↑ | CATP |
LE | KP↑ | KX→PE |
CE | Kh<0↑ | Kx<0E |
GE | KIP↑ | CP→HE |
EE | Kx=0↑ | Kx=0E |
Nedostupnost „šipkových příkazů“ v modelech MK-61/MK-52 způsobuje potíže při přizpůsobování programů z B3-34, které tyto příkazy používají. U příkazů nepřímého skoku je problém vyřešen jednoduše: požadovaná adresa se zapíše do registru E, který se v programech pro B3-34 nepoužívá, a příkazy „šipky“ se změní na příkazy označující registr E. U příkazů KIP↑/KP↑ je situace mnohem složitější: Odstraněním každého z nich se zvětší velikost programu minimálně o 3 kroky, což může způsobit vyčerpání paměti programu. V nových modelech MK-152/MK-161 jsou k dispozici nové dvoukrokové příkazy nepřímého registru RKIP00/RKP00, které fungují stejně jako KIP↑/KP↑ v B3-34; každá taková instrukce zvětší program pouze o jeden krok a mnohem větší programová paměť nových kalkulátorů činí tento nárůst téměř zanedbatelným.
Na kalkulačce B3-34 většina nezdokumentovaných operací s klávesou K způsobí hlášení YYGOG. Jedná se o příkazy K3-K9, K+, K−, K×, K÷, , K↑, K/−/, KVP, KSx a K desetinná čárka. Příkazy K1 a K2 jsou ekvivalentní operaci KNOP.
Na MK-61 a MK-52 vedou ke zprávě YYGOG pouze příkazy К−, К×, К÷. Příkazy K1 a K2 jsou také ekvivalentní operaci KNOP. Kódy zbývajících příkazů jsou zdokumentovány a použity k převodu časových a úhlových měr, určení modulu a znaménka čísla, celé a zlomkové části čísla, většího ze dvou čísel, logických operací a generování náhodného čísla.
Nesprávná operace na MK-61 a MK-52 je také převod minut (sekund) na stupně a pokud je hodnota minut nebo sekund větší nebo rovna 60.
Zpráva YYGOG, přijatá pomocí nesprávných operací s klávesou K, není „superčíslem“ první „vrstvy“ a nelze ji uložit do paměťového registru, ale lze ji použít k zobrazení hexadecimálních číslic na indikátoru, například:
1 K− (zobrazí se YYGOG) VP VP ↑ (zobrazí se písmeno E).
Výsledné písmeno E lze uložit do paměťových registrů a odtud je získat a pomocí registrů 0-3 lze také převést na znaky jiných hexadecimálních číslic:
P0 TLAČÍTKO KIP0 IP0 (G) TLAČÍTKO KIP0 IP0 (S) TLAČÍTKO KIP0 IP0 (L) TLAČÍTKO KIP0 IP0 (-) TLAČÍTKO KIP0 IP0 (9) atd.
Podobné techniky byly použity pro vytváření video zpráv, například v herních programech.
Přijetí video zprávy začínající číslem F (zobrazuje se jako prázdné místo) může narušit běžný provoz kalkulačky (zkreslení programu a dat, samovolný přechod do režimu počítání atd.). Tomu se lze vyhnout okamžitým „vyhnáním“ příkazem ↑ , zadaným alespoň čtyřikrát [8] (podle jiných zdrojů sedmkrát [9] ), aniž byste se pokoušeli provádět jakékoli další operace.
Jeden krok programové paměti mikrokalkulátoru může obsahovat dvě hexadecimální číslice, to znamená, že teoreticky může existovat 256 různých příkazových kódů. Z toho je v uživatelské příručce MK-61/52 zdokumentováno 214. Existuje umělá technika, která umožňuje zadat 12 ze 42 nezdokumentovaných kódů. Za tímto účelem se zadá jeden z přechodových příkazů, například BP (kód 51) následovaný dvěma hexadecimálními číslicemi, které kalkulátor vnímá jako přechodovou adresu. Poté je přechodový příkaz přepsán „fiktivním“ příkazem KNOP a další krok při provádění programu bude kalkulátorem vnímán nikoli jako přechodová adresa, ale jako příkaz [10] . Některé z těchto kódů lze také zadat pomocí nezdokumentovaných operací kláves K popsaných v předchozí podkapitole.
Příkazové kódy | Příkazové akce | Zadejte pomocí klávesy K |
---|---|---|
27 | Vyvolá zprávu YYGOG | K− |
28 | Vyvolá zprávu YYGOG | K× |
29 | Vyvolá zprávu YYGOG | K÷ |
2L | Vyvolá zprávu YYGOG | Ne |
2C | Vyvolá zprávu YYGOG | Ne |
2G | Vyvolá zprávu YYGOG | Ne |
2E | Vyvolá zprávu YYGOG | Ne |
3С | Vyvolá zprávu YYGOG | Ne |
3G | Zkopíruje obsah registru X do X1. Obsah registrů X, Y, Z a T se uloží. | Ne |
3E | Přesune obsah registru X do X1, zkopíruje obsah registru Y do X.
Obsah registrů Y, Z a T se uloží. |
Ne |
55 | Nedělá nic (ekvivalent příkazu KNOP) | K1 |
56 | Nedělá nic (ekvivalent příkazu KNOP) | K2 |
Kódy 55 a 56 byly použity ve vstupních jazycích malých analogů MK-52 [11] .
Tuto techniku nelze použít pro zadávání zbývajících 30 nezdokumentovaných příkazových kódů obsahujících hexadecimální číslici F (zobrazenou na indikátoru jako prázdný znak), protože na klávesnici kalkulačky není žádná klávesa pro zadání čísla F (nezaměňovat s prefix klíč F). Některé způsoby zadávání takových kódů budou popsány v další podkapitole.
V kalkulátoru MK-52 je možné vygenerovat libovolný z 256 instrukčních kódů pro kteroukoli z adres paměti programu. K tomu slouží následující funkce psaní programů v PROM. V normálním procesu psaní programu musíte nejprve vymazat odpovídající část paměti PROM. Pokud se tak nestane, dojde k bitovému logickému přidání instrukčních kódů z RAM ke kódům, které byly dříve v PROM [12] . Pokud je tedy příkaz BP (kód 51) zapsán v EPROM na určité adrese a příkaz B↑ (kód 0E) je umístěn v paměti RAM na odpovídající adrese, pak výsledkem logického sčítání bude příkaz s kód 5F (což vede k zamrznutí mikrokalkulačky). Akce příkazů s kódy obsahujícími číslo F jsou uvedeny v následující tabulce:
Příkazové kódy | Příkazové akce |
---|---|
0F | Zdokumentovaný příkaz FBx |
1F, 2F, 3F | Nedělat nic (ekvivalent příkazu KNOP) |
4F | Ekvivalent příkazu X→P0 (kód 40) |
5F | Způsobí zamrznutí kalkulačky. Indikátor zhasne, pracovní kapacita se obnoví po vypnutí a zapnutí napájení. |
6F | Ekvivalent příkazu P→X0 (kód 60) |
7F | Ekvivalent k příkazu Kh≠00 (kód 70) |
8F | Ekvivalent příkazu KBP0 (kód 80) |
9F | Ekvivalent k příkazu Kh≥00 (kód 90) |
-F | Ekvivalent příkazu KPP0 (kód -0) |
LF | Je ekvivalentní příkazu КХ→П0 (kód L0) |
CF | Je ekvivalentní příkazu Khx<00 (kód С0) |
GF | Je ekvivalentní příkazu KP → X0 (kód G0) |
EF | Ekvivalent příkazu Kx=00 (kód E0) |
F0, F1, ...FF | Nedělat nic (ekvivalent příkazu KNOP) |
Bohužel nezdokumentované příkazy 7F, 8F, ... EF, které poskytují nepřímý přístup k registru 0, snižují jeho obsah, stejně jako jejich dokumentované protějšky s kódy 70, 80, ... E0 a nemohou sloužit jako náhrada za " arrow" příkazy v B3 -34 .
V B3-34 a MK-61 , které nemají PROM, je také možné zadat některé příkazy s kódy obsahujícími číslo F, ale pouze na několika pevných adresách. Jedním ze způsobů je použití příkazů B / 0 PPC N v režimu ručního výpočtu (F ABT), N - některý z registrů (0-9, A-E). V tomto případě mikrokalkulačka přejde do programovacího režimu a vloží kód F N na adresu 30+ N (pro registry písmen A-E, resp. 40-44). Všimněte si, že při použití registrů 0-6 závisí výsledek na jejich obsahu [ ]13 Chcete-li to provést, nejprve se vytvoří „super číslo“ dvojitým použitím příkazu VP se součtem příkazů vyšším než 99 (například VP 10 VP 90) a poté, jakmile se objeví signál YYGOG, stisknutím tlačítka Klávesy „VP desetinná tečka 0“. Tím se také uvede kalkulačka do programovacího režimu a v tomto příkladu bude příkaz F1 zapsán na adresu 51. Druhý znak adresy i příkazu je určen prvním exponentem v první instrukci VI (například VI 20 VI 80 VI .0 dává příkaz F2 na adrese 52 atd.)
Příkaz "desetinná čárka" (kód 0-) používaný v programu (kromě případů doloženého použití - pro zadání čísla podle programu znaménko znaménkem), nahradí hodnotu v registru X tou, která v něm byla po poslední z příkazů 0, 1 , … 9, V↑, P→X0, P→X1, … P→X9, P→XA, … P→XE [14] .
Když se během počítání programu objeví signál EGGOG, existují dva nezdokumentované způsoby, jak určit, která operace vedla k zastavení [8] :
Druhý způsob nefunguje po prvním a naopak. Chcete-li použít obě diagnostiky, musíte program spustit dvakrát se stejnými zdrojovými daty. V režimu ručního výpočtu to také funguje, ale obvykle to není vyžadováno, protože je již jasné, která operace vedla k chybě.
Instrukce B/0, určená k ukončení podprogramů, při použití v hlavním programu zpravidla skočí na adresu 01. To se někdy používá ke zkrácení programu nahrazením dvou instrukcí BP 01 jednou B/0. Tato funkce je zvláště často využívána při nestandardním využití adresního prostoru programu (viz Hlavní a vedlejší větve ). Někdy však použití této funkce vede k nesprávnému výsledku.
Důvodem této vlastnosti je, že adresy, ze kterých jsou volány podprogramy, jsou zapsány do pětiregistrového návratového zásobníku a instrukce B/0 je z něj odstraněna a návrat nastává na adresu o jednu větší. Pokud do návratového zásobníku nebylo nic zapsáno, uloží se do něj nuly a instrukce B / 0 skočí na adresu 01. Totéž se stane, pokud při volání podprogramů nebyly na návratovém zásobníku zadány více než čtyři adresy a všechny byly načteno při návratu - další načtená adresa bude nula.
Pokud se však na návratový zásobník vloží pět adres, když se objeví první z nich, v posledním registru se vytvoří „adresa sabotéra“, jejíž obě číslice se shodují s poslední číslicí adresy, která tam byla dříve. Když jsou z návratového zásobníku vyskakovány další adresy, adresový sabotér zaplní všechny své registry, a pak, pokud je instrukce B/0 použita mimo podprogram, skok neproběhne správně [8] .
Zpětný zásobník můžete vymazat pomocí ZGGOG s nulovou mantisou: Cx B↑ ÷ VP Fx 2 Cx ↔ Cx
Pokud některý z registrů 7-E obsahuje číslo, jehož modulo je menší než jedna, pak se při nepřímém přístupu k němu vytvoří přechodová adresa, určená mantisou a poslední číslicí řádu [8] (viz tabulka, M N - mantisa s n-tou číslicí )
Poslední číslice objednávky | Skoková adresa pro negativní objednávky | Skočit adresu pro kladné objednávky |
---|---|---|
jeden | 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 |
čtyři | 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 |
osm | M 2 M 3 | M 7 M 8 |
9 | M 1 M 2 | M 7 M 8 |
0 | 0M 1 | 0M 1 |
„Pseudopočítací režim“ je technika pro generování libovolných alfanumerických kombinací na obrazovce mikrokalkulátoru, tzv. „slova“. Je založen na přechodu PMC do speciálního provozního režimu, ve kterém jsou kódy zaznamenané v paměti programu (nebo spíše jejich první znaky) načteny na indikátor. Popsáno v poznámce "Novinky z vaječné vědy" "Technici - mládež" č. 6 za rok 1987 [15] . V tomto článku jsou S. Bannikov, I. Emelyanov, B. Muradov jmenováni jako objevitelé režimu PFC. Jsou uvedeny i alternativní názvy režimu – „abnormální“, „režim sběru“.
Před vstupem PMC do režimu PSC se do paměti zapíše krátký program, jehož kódy příkazů začínají všemi možnými znaky (pro usnadnění se obvykle používají dvojité znaky ve tvaru 00 , 11 , ..., EE ) .
Přímý vstup do režimu PSC se provádí vydáním příkazů 6 F10 x K-VP. 0 V/O V/O BP V/O . Tento postup je v podstatě způsob, jak získat příkaz prázdný-prázdný. Do režimu PSC je také možné vstoupit z oblasti „dlouhých monster“.
V režimu PSC se hodnoty klíčů mění. V/O a S/P se nyní používají k přepínání z offline do programového režimu a naopak. Příkazy FPRG a FABT , stejně jako jakékoli "super číslo" vrátí PMK do normálního provozu. Klávesy SH umožňují pohyb po programu zaznamenaném v paměti. Klávesy BP a PP přenášejí bod zobrazení a čtení na 10 adres hluboko do programu a také umožňují pracovat s číslem na indikátoru přímo s příkazovými kódy.
Klávesa VI načte do prvního registru indikátoru znak z aktuální adresy paměti programu. Tvoření „slov“ začíná obrobkem ve tvaru 11111111 , požadovaný znak je načten z příslušné paměťové buňky programu a poté pomocí příkazů VP /-/ 1 PA KIPA IPA je z obrobku vyřazen poslední registr. a místo prvního se zapíše nula, kterou lze pomocí příkazu VP nahradit následujícím znakem.
Metoda umožňuje zadávat alfanumerické kombinace a mezeru (figurínu). Mezera se čte z jakékoli adresy "temné zóny". Vzhledem ke zvláštnostem provozu PMK po objevení se „figuríny“ jsou však vyžadovány další akce (vymazání zásobníku, komplikovaná sekvence příkazů pro zkrácení obrobku, dodržování omezení používání kláves ShG ) .
Pro vstup do režimu PSCh lze technicky použít jakoukoli alfanumerickou mezeru obsahující 6 až 8 znaků a začínající znakem G, E nebo „prázdným“, ostatní počáteční znaky způsobí chybu při stisknutí kláves „VP-tečka“. Po příkazech VP-tečka-číslice je kalkulačka již v režimu PFC s aktivovanou klávesou K - to lze zkontrolovat stisknutím 0 (pro deaktivaci klávesy K), poté V / O a C / P - již budou fungovat novým způsobem. Použití režimu PSCh je však obtížné, protože při jeho zadávání je počáteční alfanumerická mezera zapsána do návratového zásobníku počínaje 3. číslicí a pokaždé, když stisknete V / O nebo BP, na zadané adrese dojde k „návratu“. z tohoto zásobníku (příkaz V/O k němu navíc přidá 1). Pokud po příkazu V / O došlo k návratu na adresu „temné zóny“, kalkulačka opustí režim PSC. Proto v okamžiku odstranění adresy E0 ze zásobníku místo V / O musíte stisknout BP. Příklad:
(E000000.) VP bod 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.) — došlo k opuštění režimu PSC do režimu programování.
(Е000000.) VP bod 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 ) S / P00 .) - kalkulačka zůstala v režimu PSC, návratový zásobník byl vymazán.
(E89-LCG.) VP bod 0 (00 0,0 51) 0 (E89-LCG.) BP (00 00 0,0 60) BP (00 00 0,0 E8) BP (obrazovka zhasne) - skok na adresu "9-" led k zavěšení PMK.
Příkaz VI změní 0 na 1 (v tomto případě se na zásobníku změní pouze hodnota registru X, zbytek registrů zásobníku si zachová své hodnoty). Toho se používá v programu pro výpočet faktoriálu k jeho zmenšení, kdy se několik instrukcí (podmíněná větev, její adresa, zadání jedné) nahradí jednou instrukcí VI [16] .
Kromě toho je příkaz VP jediným příkazem (na MK-54 i MK-61), který se chová správně v manuálním a postupném (!) režimu, ale v automatickém režimu se může chovat nesprávně. Tato nuance uvádí začátečníky do strnulosti (protože příkaz funguje správně v režimu krok za krokem, a proto není možné najít chybu v programu) a chybu lze opravit pouze nahrazením příkazů „číslo“ , VP s příkazy „číslo“, F10 X , „ x“ , ale to vyžaduje další krok.
WP tým . (desetinná čárka) provedená na libovolném čísle, kromě kombinací začínajících na E nebo G, okamžitě vypíše YYGOG, a pokud je v paměti místo pro dva příkazy, je mnohem rychlejší než jiné metody umělého výstupu YYGOG - chybné operace a K− , což způsobí pauzu asi 3 sekundy. Obvyklý „dlouhý“ EGGOG přeskočí jeden příkaz, ale okamžitý (VP .) nikoli.
V sovětských programovatelných kalkulátorech Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 (a podobných) je tolik fyzické paměti RAM, jak je uvedeno v příručce PMK, ale kvůli zvláštnostem hardwarové implementace , existuje virtuální 160-krokový cyklus [17] , který se skládá ze 3 větví: "hlavní", "krátká strana" a "dlouhá strana" [18] .
Hlavní větev je to, co je uvedeno v charakteristikách kalkulátoru jako „Počet programových kroků“. V rodině B3-34 hlavní větev provádí 98 kroků - adresy od "00" do "97", v MK-61 a MK-52 105 kroků - od "00" do "104" (zobrazeno jako "−4" na obrazovce). Pokud kalkulátor na konci hlavní větve nenarazí na příkaz C/O, C/P nebo BP, pak se počítadlo kroků dále zvyšuje a kalkulátor vstoupí do rozsahu krátké boční větve.
Krátká postranní větev provádí 14 kroků programu - z adresy "98" na "L1" ( MK-61 a MK-52 : 7 kroků z adresy "−5" na "L1"). Tyto adresy odpovídají skutečným adresám "00" - "13" ( MK-61 a MK-52 : "00" - "06"). Pokud kalkulátor na těchto adresách nesplňuje příkazy V/O, C/P nebo BP, pak se počítadlo kroků dále zvyšuje a kalkulátor přechází do rozsahu dlouhé boční větve.
Dlouhá postranní větev trvá 48 kroků programu - od adresy "L2" po "F9". Tyto adresy odpovídají skutečným adresám "00" - "47"). Pokud kalkulátor na těchto adresách nesplňuje příkazy V/O, C/P nebo BP, počítadlo kroků se dále zvyšuje a kalkulátor přejde do hlavní větve. V dlouhé postranní větvi začíná „tmavá zóna“ od adresy „C1“: příkazové kódy zapsané na odpovídající adresy hlavní větve se při přepnutí do režimu PRG na indikátoru nezobrazují, jsou však správně provedeny v režimu počítání.
Graficky tento proces vypadá takto (například MK-52 ):
Tato nezdokumentovaná vlastnost neumožňovala psát programy delší než dokumentovaná délka, ale umožňovala vyhnout se příkazům bezpodmínečného skoku na nulovou adresu dvakrát (někdy byl B/O příkaz umístěn na nulovou adresu).
Kromě nezdokumentovaných funkcí obsahovaly některé kalkulačky chyby.
V prvních verzích mikrokalkulátoru B3-21 došlo k chybě při přidávání čísla obsahujícího sedm devítek v mantise a čísla nad 4 v osmé (neuvedené) číslici mantisy s vyšším číslem; například sečtením 9,9999999 a 10 se rovná 120.
Také v některých B3-21 může být při výpočtu složitých operací (například sinus) zkreslen obsah jednoho z registrů zásobníku prstenů.
Některé B3-21 nesprávně provedly příkaz volání podprogramu PP, pokud byl umístěn na jedné z adres 55, 65, 70, 80, 91 nebo 92. Místo toho, aby přešly do podprogramu, provedly příkaz, jehož kód se rovná adrese podprogramu [19] .
V některých mikrokalkulátorech B3-34 byla operace umocňování Fx y provedena s chybou, pokud předchozí operace byla dvoumístná (kromě umocňování) a výsledkem bylo číslo, které má číslo 5 nebo 7 v osmé číslici mantisy. Této chybě se lze vyhnout, pokud před provedením operace Fx y navíc stisknete klávesy F1/x F1/x [20] (což nahradí výsledek dvojité operace stejným výsledkem jediné operace, na které se tato chyba vyskytne nenastane). Jiné "vzájemně se vylučující" operace (například Fx 2 F√ nebo Fe x Fln) jsou pro tento účel méně vhodné, protože mohou vést k přetečení.
V dřívějších verzích kalkulaček nebylo možné ukončit podprogram příkazy jednotlivých operací Fsin, Flg, F√ atd. a také změnit znaménko výsledku výpočtu klávesou /−/ [21] .
Operace Kmax považuje nulu za největší číslo. Tato chyba byla použita v některých programech [22] .
V některých operacích, například při určování zlomkové části záporného čísla, se objeví „záporná nula“ (zobrazená na indikátoru jako „−0“), která se při podmíněných přechodech chová jako záporné číslo [22] .
V bloku BRP-3, program 16, byl místo vzorce použit nesprávný vzorec a program byl proto nesprávně zkompilován. Na stejném místě se k určení argumentu komplexního čísla používá vzorec bez zohlednění znamének a , a skutečnosti, že reálná část může být nula. Výsledkem je, že v , nastane chyba v definici argumentu o 180° a v , dělení nulou [23] .
V bloku BRP-4 v "lunárním" herním programu "Space landing" je fyzikální model chybný, což může vést k nesmyslným výsledkům. Například při volném pádu kosmické lodi na Měsíc z velké výšky může být hloubka kráteru menší než 8 mm, ačkoli rychlost v okamžiku kontaktu s měsíčním povrchem přesahuje 3000 m/s. Ve stejném bloku mikrokalkulačka „porušuje pravidla“ v herních programech „Život“ a „Magaraja“. Řada programů byla vypracována iracionálně a lze je výrazně snížit. Například program pro zjištění minimální plochy nebo minimální délky svarů na válcové plechovce daného objemu lze pomocí jednodušších vzorců zkrátit o 15 kroků [24] .