Eggologi

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 6 augusti 2021; kontroller kräver 19 redigeringar .

Eggologi  är studiet av odokumenterade egenskaper hos miniräknare .

Ursprung

Namnet dök upp först i Sovjetunionen och är av komisk karaktär. Kommer förmodligen från felmeddelandet "EGGOG" ( engelska  Error  - error), som utfärdades av andra generationens programmerbara räknare av sovjetisk produktion ( Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 , MS 1104) på ​​sjusegmentsskärmar . Termen dök upp först i tidskriften " Tekhnika — Molodozhi " efter en serie artiklar av M. Pukhov ägnade åt programmering på mikroräknare i serien " Electronics B3-34 " [1] , och en serie med nio berättelser om en fantastisk resa från månen till jorden under den allmänna titeln "Kon -Tiki": vägen till jorden" [2] . I denna cykel beskrevs, förutom spelprogram, olika odokumenterade funktioner hos mikroräknare och videomeddelanden, av vilka många erhölls genom att manipulera nycklarna efter att felmeddelandet "YERGOG" ( ) dök upp.

Tidningens läsare reagerade med stor entusiasm på historien om de upptäckta odokumenterade möjligheterna med mikroräknare, började leta efter nya och i slutet av "Kon-Tiki ..."-cykeln dök ett litet avsnitt "Eggogology News" upp. Med hjälp av odokumenterade tekniker publicerade i den skrevs många nya spelprogram, varav de flesta helt enkelt inte kunde skapas med standardverktyg på grund av de begränsade resurserna hos B3-34- familjens räknare .

Instruktioner för eggogologi

Inledningsvis var föremålet för intresse möjligheten att bilda alfanumeriska kombinationer på displayen, som inte bara innehåller siffrorna 0-9, utan även hexadecimala tecken som visas av räknaren som - , L , C , G , E och ett mellanslag. De kan erhållas genom att manipulera det icke-retentionsmeddelande YGGOG, som mikroräknaren utfärdar när den försöker utföra en felaktig operation (diva med noll, etc.). Sådana "nummer" kan lagras i minnesregister och användas som meddelanden i spelprogram. Tidskriften Technique for Youth beskrev en teknik för att få en mängd olika "videomeddelanden", från bokstaven "G" för Lunolet-1-programmet [1] till en hel tecknad serie om ett rymdskepps flygning baserad på berättelsen "The Vägen till jorden” [3] .

I framtiden var ett av eggogologins områden att utöka utbudet av bearbetade siffror (nummer med order från 100 till 199 visas även på skärmen som YYGOG, se "Icke-standardiserade" siffror ) och att studera mikroräknarens reaktion på försöker utföra operationer med siffror utanför standardintervallet.

En annan gren av eggogologin studerade de odokumenterade funktionerna i programmeringsläget; entusiaster hittade sätt att ange odokumenterade kommandon, till exempel innehållande det "tomma" tecknet (F), studerade möjligheterna för icke-standardiserad användning av adressutrymmet för program (se Huvud- och sidogrenar ), PSC-läge .

Efter att ingenjören F. Lazarev analyserade hårdvaruarkitekturen hos sovjetiska mikroräknare 2011 och läste innehållet i ROM [4] , fick många av de ovanliga egenskaperna hos PMC en logisk förklaring. Det blev tydligt att "Darkness" är en looping av PMC-firmware, och meddelandet "YGGOG" genereras av huvudprocessorn K745IK1302 genom timeout, när ingen av slavprocessorerna kunde bearbeta det inmatade kommandot [5] . Genom att läsa PMC-firmwaren blev det möjligt att skapa en emulator som exakt återger alla odokumenterade funktioner hos mikroräknare [6] .

"Icke-standardiserade" nummer

Eggogology hävdar att ordningen ( exponenten ) av intervallet av tal som bearbetas av räknaren är begränsad modulo 1000 och delar upp detta intervall i så kallade våningar eller " tiers " [7] . Varje nivå är hundra från intervallet från 0 till 999. Det vill säga, nollnivån är tal med en potensbas från 0 till 99, den första nivån är tal med en exponent från 100 till 199, etc. Det finns tio nivåer i totalt, och minus den första är nivån ekvivalent med den nionde (det vill säga exponenten -80 i representationen av mikroräknaren motsvarar 920), minus den andra - med den åttonde (exponenten -180 är till exempel ekvivalent med till 820), etc.

Dokumentationen begränsade det maximala värdet för siffror som matematiska operationer kan utföras på till värdet ±9,9999999 × 10 ±99 (det vill säga noll och minus de första nivåerna). Faktum är att om du anger siffran 1 × 10 50 i mikrokalkylatorn (för vilken en sekvens av tangenttryckningar 1 VP 50 räcker ) och kvadrerar det (tryck på Fx² ), får vi ett meddelande på displayen " YGGOG ". Denna dokumentationsindikation är en indikation på ett felmeddelande, eftersom siffran 1 × 10 100 ligger utanför "standard"-intervallet. Det visar sig att detta inte är ett felmeddelande, utan ett sätt att indikera numren för den första nivån, och med detta nummer kan du utföra de vanliga operationerna: addera, multiplicera, dividera, beräkna funktionsvärden, lagra det i ett minnesregister , ring det från registret. På samma sätt kan du arbeta med siffror i den andra nivån (till exempel 1 × 10 200 , det enklaste sättet att få ett sådant nummer är att kvadraten på talet 1 × 10 100 ). För att ta reda på de reella värdena för sådana tal måste de divideras med 1 × 10 99 eller andra liknande tal för att reducera dem till ett tal från nollnivån (med absolut modul inte mer än 9,9999999 × 10 99 ).

Med andra ord gavs ett sätt att utöka antalet nummer som hanteras av standardåtgärder till ±9,9999999 × 10 299 . Det var också möjligt att med några knep (med hjälp av specialskrivna program) få tal upp till ±9,9999999 × 10 799 och analysera deras värde (det vill säga ta reda på mantissan och exponenten). Med hjälp av sådana "beräkningar" bevisades det att den nionde nivån representerar tal med ett negativt värde på gradens bas (till exempel var 1 × 10 920 motsvarande representation av talet 1 × 10 −80 ). Numren i den åttonde nivån (nummer från ±1 × 10800 till ±9,9999999 × 10899 och även från ±1 × 10900 till ±9,9999999 × 10900 ) kan inte lagras efter att de tagits emot, eftersom de omedelbart konverterades till en vanlig noll om från vilken sida man ska "stiga upp" till dem (från sjunde eller nionde nivån).

Klassificering av numeriska nivåer

Numerisk nivå Namn på nummer Nummerintervall Kort beskrivning av ett nummer från detta intervall
Null Vanliga tal med icke-negativ ordning ±1 till ±9,9999999 × 1099 Du kan göra normala beräkningar
Den första "EGGOG" ±1 × 10 100 till ±9,9999999 × 10 199 Du kan utföra normala beräkningar, men visas på displayen som
Andra "3GGOGi" ±1 × 10200 till ±9,9999999 × 10299 Du kan utföra normala beräkningar, men visas på displayen som . Utför ett ovillkorligt hopp till adressen som matchar de två första siffrorna i exponenten (från 20 till 29)
Tredje "Okuvliga monster" Från ±1 × 10300 till ±9,9999999 × 10399 Kan godtyckligt överföra räknaren till programexekveringsläget eller få den att frysa
Fjärde "OS Werewolves" Från ±1 × 10400 till ±9,9999999 × 10499 De kopierar strukturen av nivåer i en förvrängd form och används för att analysera andra siffror. Förvräng innehållet i register C
Femte "Mörk" Från ±1 × 10500 till ±9,9999999 × 10599 När du försöker skriva ut till displayen fryser räknaren. Indikatorn slocknar, prestandan återställs efter att ha stängts av och på (MC 1104 hade en speciell knapp för att dämpa denna effekt)
Sjätte "S-YGGOG-varulvar" ±1 × 10600 till ±9,9999999 × 10699 Förvräng innehållet i register C
Sjunde "Långa monster" Från ±1 × 10700 till ±9,9999999 × 10799 De kopierar strukturen av nivåer i en förvrängd form, de används för att analysera andra siffror
Åttonde (minus andra) "Nollor" ±1 × 10800 till ±9,9999999 × 10900 eller ±1 × 10 −200 till ±9,9999999 × 10 −100 ( beroende på produktionsmetod) Konverteras till normal noll omedelbart
Nionde (minus ett) Vanliga tal med negativ ordning Från ±1 × 10 −99 till ±9,9999999 × 10 −1 Du kan göra normala beräkningar

Detaljerad beskrivning

"3GGOGi"

Dolda under detta meddelande är siffror från ±1 × 10200 till ±9,9999999 × 10299 . Du kan utföra normala aritmetiska operationer på dem. När 3GGOG visas på skärmen behåller decimaltecknet sin position från föregående nummer, och programadressräknaren ställs in på en adress som är lika med de två första siffrorna i ordningen 3GGOG.

Vilken 3GGOG som helst kan "avkodas" med kommandona: FABT, punkt (dess ordning visas till höger på displayen), FAVT (mantissan för den tidigare 3GGOG visas till vänster och ordningen --L eller --3 visas till höger).

När man ringer upp 3GGOG från minnesregister 0-9 och sedan trycker på VP eller en decimal, beter sig räknaren på ett lite liknande sätt, som om ett ”supernummer” dykt upp i displayen med en ordning som börjar med registernumret. Till exempel, om 3YGOG anropas från register 1, visas meddelandet YYGOG; från register 2 - igen 3GGOG; från register 3 - ett "bortskämt" kommando "3" visas i programmeringsläget; från register 4 - Mörker; från register 7 - "Långt monster".

"OS Werewolves"

Från ±1 × 10400 till ±9,9999999 × 10499 .

När man drar "OS-varulven" från registret lägger den sin "svans" i register C. "Svans" är också ett supernummer vars första två siffror i exponenten är de två sista siffrorna i ordningen för "OS-varulven" ". Om "svansen" också är en "OS-varulv" (detta händer för nummer med ordning från 440 till 449), så sätter den också sin "svans" i register C. Det finns tredje ordningens varulvar - nummer med ordning 444.

Exempel:

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 på skärmen 0
P→XS på skärmen 0
P→XS på skärmen 0
P → XS på skärmen den sista "Svansen" med tre bokstäver E.

"S-YGGOG-varulvar"

Från ±1 × 10600 till ±9,9999999 × 10699 .

Om "C-YGGOG-varulven" dras ut ur registret, kommer den att täckas av innehållet i C-registret, och den kommer att flyttas till Y-registret. När du utför en aritmetisk operation på den - G.YGOG.

Baserat på egenskaperna hos "S-YGGOG-varulven", den sk. " ASO-analys ":

  1. I register 0 lägger vi "C-YGGOG-varulv" (det är möjligt i ett annat register)
  2. I register A (endast!) placerar vi YEGGOG.
  3. P→XA P→X0 PX - innehållet i register C - mantissa och 3-siffrig effekt
  4. /−/ — innehållet i P0

Försiktighetsåtgärder vid arbete med "C-ERGOG-varulvar":

  1. "Mörker" kommer:
    • om efter "ACO-analys" tryck på VP, FABT
    • om omedelbart efter bildandet av YEGGOG, dra ut "S-YGGOG-varulv"
    • om du drar ut "S-YGGOG-varulv" med "PSCh-läge"
    • om "C-YGGOG-varulv" drar sig ur C-registret
"Långa monster"

Ett annat namn är "K-nummer".

Från ±1 × 10700 till ±9,9999999 × 10799 .

När ett långt monster visas, visas följande nummer på indikatorn:

1.2345678⋅10 735 = [50.12345678 3] Där de första 5 på indikatorn är den tredje siffran i exponenten och de sista 3 på indikatorn är den andra siffran i exponenten. Och själva "Long Monster" skrivs till programmets 73 :e adress, vilket motsvarar de två första siffrorna i numrets ordning.

Odokumenterade kommandon

Lag "med pilar" i B3-34

räknaren B3-34 (och kompatibel med den MK-54 , MK-56 ) i alla registerkommandon, istället för siffertangenten (bokstavs) i registret, kan du använda tangenten ↑ , det vill säga odokumenterade kommandon IP↑ , P↑ , KIP↑ , KP↑ är tillgängliga , Kx≠0↑ , Kx≥0↑ , Kx<0↑ , Kx=0↑ , KBP↑ , KPP↑ . När dessa kommandon matas in i programmeringsläge genereras koder som slutar på E. När sådana kommandon exekveras, kommer register 0 faktiskt åt; kommandon för direktåtkomst till registret är helt lika IP0 och P0 , men resten av kommandona som ger indirekt åtkomst till register 0 har en viktig skillnad från motsvarande kommandon KIP0 , KP0 och andra: de minskar inte värdet på register 0 när den nås. Detta gör det möjligt att indirekt komma åt register 0 på två sätt: med och utan att minska värdet i registret.

Användningen av "pilkommandon" förenklar registerövergången i en loop, vilket gör att värdet i register 0 kan användas som både en loopräknare och ett registerindex samtidigt. Till exempel, det enklaste programmet för att lägga till värden i register 1-N (förutsatt att data skrivs till register och N skrivs in i register X innan programmet körs) ser ut så här:

  • P0 0 KIP ↑ + FL0 02 S / P (data i register från 1 till N) - 7 kommandon.

Alternativ utan "pilkommandon":

  • P0 0 IP0 PE F⟳ KIPE + FL0 02 S / P  - 10 lag;
  • P0 2 + P1 0 KIP1 + FL0 05 S / P (data i register från 2 till N + 1) - 10 kommandon och två ytterligare register (något snabbare).

Instruktioner för indirekta hopp "med pilar" låter dig lagra adressen till hoppet i register 0 och hoppa till det utan att ändra innehållet. Eftersom en indirekt hoppinstruktion tar ett programsteg och en vanlig hoppinstruktion tar två, vinner inskrivning av adressen i ett register ett programsteg för varje hopp till den adressen.

För MK-61 och MK-52 räknare motsvarar " ↑ " -tangenten det nya minnesregistret E, och operationskoderna med register E motsvarar B3-34 "pilkommandon", så "pilkommandon" är inte tillgängliga på dessa miniräknare [8] (se tabell). Nyckelbeteckningarna P , IP och ↑ i B3-34 motsvarar Х→П , П→Х och Е i MK-61 och MK-52.

Kommandokoder Lag B3-34 Lag MK-61, MK-52
7E Kx≠0↑ Kx≠0E
8E KBP↑ KBPE
9E Kx≥0↑ Kx≥0E
-E Kontrollpunkt↑ CATP
LE KP↑ KX→PE
CE Kh<0↑ Kx<0E
GE KIP↑ CP→HE
EE Kx=0↑ Kx=0E

Avsaknaden av "pilkommandon" i MK-61/MK-52-modellerna skapar svårigheter att anpassa program från B3-34 som använder dessa kommandon. För indirekta hoppkommandon löses problemet enkelt: den önskade adressen skrivs till E-registret, som inte används i program för B3-34, och "pil"-kommandona ändras till kommandon som indikerar E-registret. Men för KIP↑/KP↑-kommandon, är situationen mycket mer komplicerad: Om du tar bort var och en av dem ökar programmets storlek med minst 3 steg, vilket kan göra att programminnet tar slut. I de nya modellerna MK-152/MK-161 finns nya tvåstegs indirekta registerkommandon RKIP00/RKP00, vilka fungerar på samma sätt som KIP↑/KP↑ i B3-34; varje sådan instruktion ökar programmet med bara ett steg, och det mycket större programminnet hos nya räknare gör denna ökning nästan försumbar.

Felaktiga operationer med K-tangenten

räknaren B3-34 orsakar de flesta odokumenterade operationer med K-tangenten meddelandet YYGOG. Dessa är kommandon K3-K9, K+, K−, K×, K÷, , K↑, K/−/, KVP, KSx och K decimalkomma. Kommandona K1 och K2 är ekvivalenta med KNOP-operationen.

MK-61 och MK-52 leder endast kommandona К−, К×, К÷ till YYGOG-meddelandet. Kommandona K1 och K2 är också ekvivalenta med KNOP-operationen. Koderna för de återstående kommandona dokumenteras och används för att konvertera tid- och vinkelmått, bestämma modul och tecken för ett tal, heltals- och bråkdelar av ett tal, det största av två tal, logiska operationer och generera ett slumptal.

En felaktig operation på MK-61 och MK-52 är också omvandlingen av minuter (sekunder) till grader och om värdet på minuter eller sekunder är större än eller lika med 60.

Meddelandet YYGOG, mottaget med hjälp av felaktiga operationer med K-tangenten, är inte ett "supernummer" av den första "tier" och kan inte lagras i minnesregistret, utan kan användas för att visa hexadecimala siffror på indikatorn, till exempel:

1 K− (YYGOG visas) VP VP ↑ (bokstaven E visas).

Den resulterande bokstaven E kan lagras i minnesregister och hämtas därifrån, och med hjälp av register 0-3 kan även konverteras till tecken med andra hexadecimala siffror:

P0 KIP0 IP0-KNAPP (G) KIP0 IP0-KNAPP (S) KIP0 IP0-KNAPP (L) KIP0 IP0-KNAPP (-) KIP0 IP0-KNAPP (9), etc.

Liknande tekniker användes för att skapa videomeddelanden, till exempel i spelprogram.

Att ta emot ett videomeddelande som börjar med siffran F (visas som ett tomt utrymme) kan störa den normala driften av räknaren (förvrängning av programmet och data, spontan övergång till räkneläget, etc.). Detta kan undvikas genom att omedelbart "utvisa" det med kommandot ↑ , givet minst fyra gånger [8] (enligt andra källor, sju gånger [9] ), utan att försöka utföra några andra operationer.

Artificiell inmatning av kommandokoder

Ett steg i mikrokalkylatorns programminne kan innehålla två hexadecimala siffror, det vill säga teoretiskt kan det finnas 256 olika kommandokoder. Av dessa finns 214 dokumenterade i användarmanualen MK-61/52. Det finns en konstgjord teknik som låter dig ange 12 av de 42 odokumenterade koderna. För att göra detta skrivs ett av övergångskommandona in, till exempel BP (kod 51) följt av två hexadecimala siffror, som av räknaren uppfattas som övergångsadress. Därefter skrivs övergångskommandot över av "dummy" KNOP-kommandot, och nästa steg under körningen av programmet kommer att uppfattas av räknaren inte som en övergångsadress, utan som ett kommando [10] . Vissa av dessa koder kan också matas in med hjälp av de odokumenterade K-tangenterna som beskrivs i föregående underavsnitt.

Kommandokoder Kommandoåtgärder Gå in med K-knappen
27 Tar fram meddelandet YYGOG K−
28 Tar fram meddelandet YYGOG
29 Tar fram meddelandet YYGOG
2L Tar fram meddelandet YYGOG Inte
2C Tar fram meddelandet YYGOG Inte
2G Tar fram meddelandet YYGOG Inte
2E Tar fram meddelandet YYGOG Inte
3C Tar fram meddelandet YYGOG Inte
3G Kopierar innehållet i register X till X1. Innehållet i X-, Y-, Z- och T-registren sparas. Inte
3E Flyttar innehållet i register X till X1, kopierar innehållet i register Y till X.

Innehållet i Y-, Z- och T-registren sparas.

Inte
55 Gör ingenting (motsvarande KNOP-kommandot) K1
56 Gör ingenting (motsvarande KNOP-kommandot) K2

Koderna 55 och 56 användes i inmatningsspråken för småskaliga analoger av MK-52 [11] .

Denna teknik är inte användbar för att ange de återstående 30 odokumenterade kommandokoderna som innehåller den hexadecimala siffran F (visas på indikatorn som ett tomt tecken), eftersom det inte finns någon tangent på räknarens tangentbord för att ange siffran F (inte att förväxla med prefixnyckel F). Vissa sätt att ange sådana koder kommer att diskuteras i nästa underavsnitt.

Ange kommandokoder som innehåller numret F

I kalkylatorn MK-52 är det möjligt att generera vilken som helst av de 256 instruktionskoderna för vilken som helst av programminnesadresserna. För detta används följande funktion för att skriva program i PROM. I den normala processen att skriva ett program måste du först radera motsvarande del av PROM-minnet. Om detta inte görs, så finns det en bitvis logisk tillägg av instruktionskoderna från RAM med koderna som tidigare fanns i PROM [12] . Så om BP-kommandot (kod 51) skrivs i EPROM vid en viss adress, och B↑-kommandot (kod 0E) finns i RAM-minnet på motsvarande adress, blir resultatet av logisk addition ett kommando med kod 5F (vilket leder till att mikroräknaren fryser). Åtgärderna för kommandon med koder som innehåller numret F visas i följande tabell:

Kommandokoder Kommandoåtgärder
0F Dokumenterat FBx-kommando
1F, 2F, 3F Gör ingenting (motsvarande KNOP-kommandot)
4F Motsvarar kommando X→P0 (kod 40)
5F Får räknaren att frysa. Indikatorn slocknar, arbetskapaciteten återställs efter att strömmen stängts av och på.
6F Motsvarar kommando P→X0 (kod 60)
7F Motsvarar kommando Kh≠00 (kod 70)
8F Motsvarar kommandot KBP0 (kod 80)
9F Motsvarar kommando Kh≥00 (kod 90)
-F Motsvarar kommandot KPP0 (kod -0)
LF Det motsvarar kommandot КХ→П0 (kod L0)
CF Det motsvarar kommandot Khx<00 (kod С0)
GF Det motsvarar kommandot KP → X0 (kod G0)
EF Motsvarar kommandot Kx=00 (kod E0)
F0, F1, ...FF Gör ingenting (motsvarande KNOP-kommandot)

Tyvärr minskar odokumenterade kommandon 7F, 8F, ... EF, som ger indirekt tillgång till register 0, dess innehåll, såväl som deras dokumenterade motsvarigheter med koderna 70, 80, ... E0 och kan inte fungera som en ersättning för " pil"-kommandon i B3 -34 .

I B3-34 och MK-61 , som inte har PROM, är det även möjligt att ange vissa kommandon med koder som innehåller numret F, men endast på ett fåtal fasta adresser. Ett sätt är att använda kommandona B / 0 PPC N i manuellt beräkningsläge (F ABT), N  - något av registren (0-9, A-E). I detta fall går mikroräknaren in i programmeringsläget och infogar F N -koden på adress 30+ N (för bokstavsregister A-E, respektive 40-44). Observera att när du använder register 0-6 beror resultatet på deras innehåll [ ]13 För att göra detta skapas först ett "supernummer" genom att använda VP-kommandot två gånger med en summa av order på mer än 99 (till exempel VP 10 VP 90), och sedan, efter att YYGOG-signalen visas, genom att trycka på “VP decimalkomma 0”-tangenter. Detta sätter även räknaren i programmeringsläge, och i det här exemplet kommer F1-kommandot att skrivas till adress 51. Det andra tecknet i både adressen och kommandot bestäms av den första exponenten i den första VI-instruktionen (till exempel VI 20 VI 80 VI .0 ger F2-kommandot vid adress 52, etc.)

Odokumenterad användning av decimalkomma i ett program

Kommandot "decimalkomma" (kod 0-) som används i programmet (förutom vid dokumenterad användning - för att ange ett nummer enligt programmet tecken för tecken), ersätter värdet i register X med det som fanns i det efter det sista av kommandona 0, 1 , … 9, V↑, P→X0, P→X1, … P→X9, P→XA, … P→XE [14] .

Odokumenterade sätt att diagnostisera fel

När EGGOG-signalen inträffar under programräkning finns det två odokumenterade sätt att avgöra vilken operation som resulterade i stopp [8] :

  1. Tryck på ↑-tangenten i B3-34 (B↑ i MK-61/52). Om YYGOG fortfarande är på indikatorn, har ett spill inträffat, och om numret är en felaktig operation, vars "bov" är detta nummer.
  2. Tryck på VP-tangenten. Möjliga indikationer på indikatorn och motsvarande fel:
    • "YGGOG 00" - spill ("supernummer" av den första "nivån")
    • "G.GGOG 00" - division med noll, beräkning av logaritmen från noll, effektfunktion 0 0 , felaktig funktion med K-tangenten.
    • "EG.GOG 00" - beräkning av tg 90 °.
    • "E.GGOG 00" - beräkning av arcsine eller arccosine av ett tal större än 1.
    • "YERGOG 00" (med en decimalpunkt på samma plats som i argumentet) - det positiva argumentet för exponentialfunktionen är större än tillåtet
    • "−YERGOG 00" (med en decimalpunkt på samma plats som i argumentet) - det negativa argumentet för exponentialfunktionen är större än det tillåtna värdet, eller extrahera kvadratroten ur ett negativt tal.

Den andra metoden fungerar inte efter den första, och vice versa. För att tillämpa båda diagnostikerna måste du köra programmet två gånger med samma källdata. I manuellt beräkningsläge fungerar detta också, men är vanligtvis inte nödvändigt, eftersom det redan är klart vilken operation som resulterade i felet.

Instruktion B/0 utanför en subrutin

B/0-instruktionen, avsedd att avsluta underprogram, när den används i huvudprogrammet, hoppar som regel till adress 01. Denna används ibland för att förkorta programmet genom att ersätta två BP 01-instruktioner med en B/0. Denna funktion används särskilt ofta när man använder programmets adressutrymme på ett icke-standardiserat sätt (se Huvud- och sidogrenar ). Men ibland leder användningen av denna funktion till ett felaktigt resultat.

Anledningen till denna funktion är att adresserna från vilka subrutinerna anropas skrivs till returstacken med fem register, och B/0-instruktionen tas bort från den och returen sker till adressen en större. Om inget har skrivits till returstacken lagras nollor i den och B/0-instruktionen hoppar till adress 01. Detsamma kommer att hända om inte mer än fyra adresser angavs i returstacken när subrutiner anropades och alla var hämtas vid retur - nästa hämtade adress blir noll.

Men om fem adresser skjuts in på returstacken, när den första av dem poppas, bildas en "sabotöradress" i det sista registret, vars båda siffror sammanfaller med den sista siffran i adressen som fanns där tidigare. När andra adresser tas bort från returstacken, fyller adresssabotören alla sina register, och sedan, om B/0-instruktionen används utanför subrutinen, kommer hoppet inte att fortsätta korrekt [8] .

Du kan rensa returstacken med ZGGOG med noll mantiss: Cx B↑ ÷ VP Fx 2 Cx ↔ Cx

Indirekt åtkomst till ett register som innehåller ett nummer utanför intervallet

Om något av registren 7-E innehåller ett tal vars modulo är mindre än ett, bildas en övergångsadress vid indirekt åtkomst, som bestäms av mantissan och den sista siffran i ordningen [8] (se tabell, M N  - N: te siffran mantissa)

Sista siffran i beställningen Hoppadress för negativa beställningar Hoppadress för positiva beställningar
ett 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
fyra 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
åtta M 2 M 3 M 7 M 8
9 M 1 M 2 M 7 M 8
0 0M 1 0M 1

PSC-läge

"Pseudo-räkneläge" är en teknik för att generera godtyckliga alfanumeriska kombinationer på skärmen på en mikroräknare, den så kallade. "ord". Den är baserad på överföringen av PMC till ett speciellt driftläge, där koderna som är inspelade i programminnet (eller snarare deras första tecken) läses på indikatorn. Beskrivs i noten "News of eggogology" "Technicians - Youth" nr 6 för 1987 [15] . I den här artikeln namnges S. Bannikov, I. Emelyanov, B. Muradov som upptäckarna av PFC-läget. Alternativa namn för läget ges också - "onormalt", "insamlingsläge".

Innan PMC går in i PSC-läget skrivs ett kort program till minnet, vars kommandokoder börjar med alla möjliga tecken (för enkelhetens skull används vanligtvis dubbla tecken i formen 00 , 11 , ..., EE ) .

Direkt inträde i PSC-läget utförs genom att utfärda kommandon 6 F10 x K-VP. 0 V/O V/O BP V/O . Denna procedur är i huvudsak ett sätt att få ett tomt-tom-kommando. Det är också möjligt att gå in i PSC-läget från området "långa monster".

I PSC-läge ändras nyckelvärden. V/O och S/P används nu för att växla från offline till programläge och vice versa. Kommandona FPRG och FABT , såväl som alla "supernummer" återställer PMK till normal drift. SH- knapparna gör det möjligt att flytta längs programmet som är inspelat i minnet. BP- och PP- tangenterna överför visnings- och läspunkten till 10 adresser djupt in i programmet, och låter dig även arbeta med numret på indikatorn direkt med kommandokoder.

VI -tangenten läser in i det första registret i indikatorn ett tecken från den aktuella programminnesadressen. Bildandet av "ord" börjar med ett arbetsstycke av formen 11111111 , det önskade tecknet läses från motsvarande programminnescell och sedan, med hjälp av kommandona VP /-/ 1 PA KIPA IPA , kasseras det sista registret från arbetsstycket , och noll skrivs i stället för den första, som med hjälp av VP- kommandot kan ersättas av följande tecken.

Metoden låter dig skriva in alfanumeriska kombinationer och ett mellanslag (dummy). Ett blanksteg läses från valfri "mörk zon"-adress. Men på grund av särdragen hos PMK:s funktion efter att "dummy" uppträdde, krävs ytterligare åtgärder (rensa stapeln, en komplicerad sekvens av kommandon för att förkorta arbetsstycket, observera begränsningar för användningen av ShG- nycklarna ) .

För att komma in i PSCh-läget, tekniskt sett, kan alla alfanumeriska blanksteg som innehåller från 6 till 8 tecken och som börjar med tecknet G, E eller "tomt" användas, andra initiala tecken kommer att ge ett fel när du trycker på "VP-dot"-tangenterna. Efter kommandona med VP-punktsiffror är räknaren redan i PFC-läge med K -tangenten aktiverad  - detta kan kontrolleras genom att trycka på 0 (för att avaktivera K-tangenten), sedan V / O och C / P - de kommer redan att fungera på ett nytt sätt. Men användningen av PSCh-läget är svårt eftersom när man går in i det skrivs det initiala alfanumeriska tomrummet till returstacken med början från den tredje siffran, och varje gång du trycker på V / O eller BP sker en "retur" på adressen som tagits från denna stack (V/O-kommandot lägger dessutom till 1 till den). Om en återgång till adressen för den "mörka zonen" inträffade på kommandot V / O, lämnar räknaren PSC-läget. Därför, i det ögonblick du tar bort adressen E0 från stacken, istället för V / O, måste du trycka på BP. Exempel:

(E000000.) VP punkt 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.) — det var en utgång från PSC-läget till programmeringsläget.

(Е000000.) VP-punkt 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 ) S0 / P00 (E01) .) - räknaren förblev i PSC-läge, returstacken rensades.

(E89-LCG.) VP-punkt 0 (00 0.0 51) 0 (E89-LCG.) BP (00 00 0.0 60) BP (00 00 0.0 E8) BP (skärmen blir tom) - hoppar till adress "9-" lysdiod till hängande PMC.

Odokumenterade funktioner i VP-kommandot

VI-kommandot förvandlar 0 till 1 (i detta fall ändras bara värdet på X-registret på stacken, resten av stackregistren behåller sina värden). Detta används i det faktoriella beräkningsprogrammet för att reducera det, och ersätter flera instruktioner (villkorlig gren, dess adress, inmatning av en) med en VI-instruktion [16] .

Dessutom är VP-kommandot det enda kommandot (på både MK-54 och MK-61) som beter sig korrekt i manuellt och steg-för-steg (!) läge, men som kan uppträda felaktigt i automatiskt läge. Denna nyans introducerar nybörjare i en stupor (eftersom kommandot fungerar korrekt i steg-för-steg-läge, och därför är det inte möjligt att hitta ett fel i programmet), och felet kan endast korrigeras genom att ersätta "nummer" -kommandona , VP med "number"-kommandona, F10 X , " x" , men detta kräver ett extra steg.

WP -laget . (decimalkomma) som utförs på valfritt tal, förutom kombinationer som börjar med E eller G, skriver omedelbart ut YYGOG, och om det finns plats i minnet för två kommandon är det mycket snabbare än andra metoder för artificiell YYGOG-utmatning - felaktiga operationer och K− , vilket orsakar en paus på cirka 3 sekunder. Den vanliga "långa" EGGOG hoppar över ett kommando, men ögonblicket (VP .) gör det inte.

Huvud- och sidogrenar

I sovjetiska programmerbara kalkylatorer Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 (och liknande) finns det lika mycket fysiskt RAM-minne som anges i PMK-manualen, men på grund av särdragen i hårdvaruimplementeringen , det finns en virtuell 160-stegs cykel [17] , bestående av 3 grenar: "huvudsida", "kortsida" och "långsida" [18] .

Huvudgrenen  är vad som anges i räknarens egenskaper som "Antal programsteg". I B3-34-familjen tar huvudgrenen 98 steg - adresser från "00" till "97", i MK-61 och MK-52 105 steg - från "00" till "104" (visas som "−4" på skärmen). Om räknaren i slutet av huvudgrenen inte har stött på ett C/O-, C/P- eller BP-kommando, fortsätter stegräknaren att öka och räknaren går in i räckvidden för den korta sidogrenen.

En kort sidogren tar 14 steg av programmet - från adress "98" till "L1" ( MK-61 och MK-52 : 7 steg från adress "−5" till "L1"). Dessa adresser motsvarar de verkliga adresserna "00" - "13" ( MK-61 och MK-52 : "00" - "06"). Om räknaren inte uppfyller kommandona V/O, C/P eller BP på dessa adresser, fortsätter stegräknaren att öka, och räknaren går in i räckvidden för den långa sidogrenen.

En lång sidogren tar 48 steg av programmet - från adressen "L2" till "F9". Dessa adresser motsvarar de verkliga adresserna "00" - "47"). Om räknaren inte uppfyller kommandona V / O, C / P eller BP på dessa adresser, fortsätter stegräknaren att öka och räknaren går till huvudgrenen. I en lång sidogren börjar en "mörk zon" från adressen "C1": kommandokoderna som skrivs till motsvarande adresser för huvudgrenen visas inte på indikatorn när du växlar till PRG-läget, men de utförs korrekt i räkneläget.

Grafiskt ser denna process ut så här (till exempel MK-52 ):

Denna odokumenterade funktion tillät inte att skriva program längre än den dokumenterade längden, men den gjorde det möjligt att undvika kommandon om ett ovillkorligt hopp till nolladressen två gånger (ibland placerades B/O-kommandot på nolladressen).

Misstag i miniräknare

Förutom odokumenterade funktioner innehöll vissa miniräknare fel.

Buggar i B3-21 i vissa utgåvor

I de första utgåvorna av mikroberäknaren B3-21 uppstod ett fel när man adderade ett tal som innehöll sju nior i mantissan och ett nummer över 4 i den åttonde (icke indikerade) siffran i mantissan, med ett högre nummer; till exempel att lägga till 9,9999999 och 10 är lika med 120.

Dessutom, i vissa B3-21, vid beräkning av komplexa operationer (till exempel sinus), kan innehållet i ett av registren i ringstacken förvrängas.

Vissa B3-21 exekverade felaktigt PP-subrutinanropssatsen om den fanns på en av adresserna 55, 65, 70, 80, 91 eller 92. Istället för att gå till subrutinen körde de satsen vars kod är lika med adressen av subrutinen [19] .

Buggar i B3-34 i vissa utgåvor

I vissa mikroberäknare B3-34 utfördes exponentieringsoperationen Fx y med ett fel om den föregående operationen var tvåplacerad (förutom exponentiering) och den resulterade i ett tal som har siffran 5 eller 7 i den åttonde siffran i mantissan Detta fel kan undvikas om innan du utför Fx y -operationen, dessutom trycker på tangenterna F1/x F1/x [20] (som ersätter resultatet av en dubbeloperation med samma resultat av en enkel operation, som detta fel gör på inte förekommer). Andra "ömsesidigt uteslutande" operationer (till exempel Fx 2 F√ eller Fe x Fln) är mindre lämpliga för detta ändamål, eftersom de kan leda till översvämning.

I tidiga utgåvor av miniräknare var det omöjligt att avsluta en subrutin med kommandon för enstaka operationer Fsin, Flg, F√, etc., och även att ändra tecknet på beräkningsresultatet med /−/-tangenten [21] .

Misstag i MK-61 och MK-52

Kmax-operationen anser att noll är det största talet. Denna bugg har använts i vissa program [22] .

I vissa operationer, till exempel när man bestämmer bråkdelen av ett negativt tal, visas en "negativ nolla" (visas på indikatorn som "−0"), som beter sig som ett negativt tal under villkorliga övergångar [22] .

Misstag och irrationella beslut i minnesexpansionsenheterna BRP-3 och BRP-4

I block BRP-3, program 16, användes en felaktig formel istället för , och programmet kompilerades följaktligen felaktigt. På samma ställe, för att bestämma argumentet för ett komplext tal , används en formel utan att ta hänsyn till både tecknen och , och det faktum att den reella delen kan vara noll. Som ett resultat, vid , uppstår ett fel i definitionen av argumentet med 180°, och vid  , division med noll stannar [23] .

I blocket BRP-4 i "lunar" spelprogrammet "Space landing" är den fysiska modellen felaktig, vilket kan leda till meningslösa resultat. Till exempel, under fritt fall av en rymdfarkost på månen från en stor höjd, kan kraterns djup vara mindre än 8 mm, även om hastigheten vid kontaktögonblicket med månens yta överstiger 3000 m/s. I samma block "bryter mikroräknaren mot reglerna" i spelprogrammen "Life" och "Magaraja". Ett antal program har utformats irrationellt och lämpar sig för betydande minskningar. Till exempel kan ett program för att hitta minsta yta eller minsta längd av svetsar på en cylindrisk burk med en given volym reduceras med 15 steg med enklare formler [24] .

Se även

Anteckningar

  1. 1 2 Mjuk landning! // Teknik för ungdom: tidskrift. - 1985. - Juni. - S. 56 .
  2. Mikhail Pukhov. "Kon-Tiki": vägen till jorden // "Teknik - ungdom", 1985, nr 8-12; 1986, nr 1-4.
  3. Mjuk landning! // "Teknik - ungdom": tidning. - 1985. - December. - S. 48-49 .
  4. Google Code Archive - Långtidslagring för Google Code Project Hosting. . code.google.com . Hämtad: 26 oktober 2022.
  5. MK-61: historia, emulering, enhet . Habr . Hämtad: 26 oktober 2022.
  6. Rysk kalkylatoremulator . pmk.arbinada.com . Hämtad: 26 oktober 2022.
  7. "Teknik - ungdom", 1986, nr 1, sid. 54.
  8. 1 2 3 4 5 Skola för nybörjare programmerare. Lektion tjugosex. - " Science and Life ", 1989, nr 11, sid. 124-130
  9. "Teknik - ungdom". 1986, nr 7.
  10. 1 2 Alfred Klomp. Några experiment med att hacka MK-61 ELECTRONICS. — http://www.alfredklomp.com/technology/mk-61/ Arkiverad 28 oktober 2008 på Wayback Machine
  11. Programmerbara miniräknare: enhet och användning / Ed. Ya. K. Trokhimenko. - M .: Radio och kommunikation, 1990. - sid. 123-124.
  12. Skola för en novis programmerare. Lektion tjugotvå. - "Science and Life", 1989, nr 1, sid. 124-129.
  13. "Teknik - ungdom", 1986, nr 5, sid. 52.
  14. "Science and Life", 1989, nr 4, sid. 112.
  15. Nyheter om eggogologi. "Teknik - ungdom", 1987, nr 6, s.54. — http://www.emulator3000.org/Books/TM/1987_06.djvu Arkiverad 26 maj 2006 på Wayback Machine
  16. L. M. Fink. Pappa, mamma, jag och en miniräknare. - M .: Radio och kommunikation, 1988. - sid. 71.
  17. I instruktionerna för PMK sägs ingenting om 160-stegscykeln.
  18. " Teknik - ungdom ", 1986, nr 2, s. 56.
  19. Sergey Frolov. Historien om sovjetiska miniräknare. Del II. — inFUSED BYTES OnLine, http://www.enlight.ru/ib/also/calcs/calcs2.htm Arkiverad 17 juli 2012 på Wayback Machine
  20. "Science and Life", 1984, nr 2, sid. 66.
  21. V. P. Dyakonov. Handbok för beräkningar på mikroräknare. 3:e uppl., tillägg. och omarbetat. — M.: Nauka, Ch. ed. Phys.-Matte. lit., 1989. - sid. 41.
  22. 1 2 "Science and Life", 1988, nr 11, sid. 84-85.
  23. Hej från BRP. - "Science and Life", 1990, nr 10, sid. 115. - http://www.emulator3000.org/Books/SAL/1990_10.djvu Arkiverad 2 oktober 2011 på Wayback Machine
  24. Och andra volymen ... knölig. - "Science and Life", 1991, nr 6, sid. 130-131. — http://www.emulator3000.org/Books/SAL/1991_06.djvu Arkiverad 2 oktober 2011 på Wayback Machine

Länkar