Seleziona la tua lingua
Interpretare il Guru Meditation
Quando ero bambino era per me un incubo. Capivo poco l'inglese, ma quelle due parole erano per me più chiare del sole che sorge, perché segnavano il momento in cui le mie speranze andavano in frantumi. Il giochino si era piantato irreparabilmente e non c'era più verso di andare avanti. In molti casi poi ero consapevole che l'errore si sarebbe ripresentato al prossimo lancio. Il significato della Meditazione del Guru però mi era oscura. Cosa c'entrava il guru con il giochino che si era piantato? E poi, perché mai questo guru avrebbe avuto bisogno di meditare? La risposta non è immediata, perché il Guru Meditation è uno degli errori di sistema più oscuri della storia dell'informatica.
Il Guru Meditation si presentava quando un software subiva un arresto critico a seguito di un errore interno. In pratica, durante l'esecuzione del codice binario si verificava una situazione non gestita in modo automatico, l'equivalente della Blue Screen of Death di Windows o il Kernel Panic di UNIX. Il sistema lanciava quindi una trap di sistema, un'interruzione sincrona per segnalare l'errore e alzava bandiera bianca mostrando una videata nera con la famosa scritta in alto a caratteri rossi con contorno rosso lampeggiante:
Software Failure. Press left mouse button to continue.
Guru Meditation #XXXXXXXX.YYYYYYYY
Esisteva anche una versione a caratteri verdi per gli errori cui era possibile porre rimedio. Durante l'errore critico, la spia POWER di Amiga si spegneva definitivamente mentre quella del DISK iniziava a lampeggiare in modo inquietante, dopo di che restavano solo due alternative:
- Premere il tasto sinistro del mouse e riavviare il sistema;
- Premere il tasto destro del mouse come indicato nel messaggio per invocare l'intervento di ROMWack, il debugger di sistema.
La seconda opzione però era preclusa a quasi tutti i non addetti ai lavori, perché richiedeva la connessione di un terminale a 9600 baud alla porta seriale, dispositivo che in pratica nessuno aveva in casa. Questo terminale consentiva di visualizzare il contenuto della RAM di Amiga per poterlo analizzare.
L'interpretazione dell'errore era fondamentale per risolvere il problema. Il codice che compariva era formato da un carattere cancelletto (#) seguito da otto caratteri alfanumerici, un punto e di seguito altri otto caratteri alfaumerici.
Se i primi sette caratteri della prima sequenza erano tutti zeri seguiti da un carattere X, l'errore riguardava la CPU. Il carattere X descriveva l'origine del problema e poteva assumere uno dei sequenti valori:
Codice | Sorgente dell'errore |
2 | Bus Error Hardware error |
3 | Address Error Word access on odd byte boundary |
4 | Illegal Instruction |
5 | Divide by zero |
6 | CHK Instruction |
7 | TRAPV Instruction |
8 | Privilege Violation |
9 | Trace |
A | Opcode 1010 Emulation Instruction word with a value between A000-AFFF |
B | Opcode 1111 Emulation Instruction word with a value between F000-FFFF |
La seconda parte della sequenza era l'indirizzo in memoria al quale l'errore si era verificato, verosimilmente l'indirizzo del programma che ha causato l'anomalia.
Se invece il codice era del tipo AABBCCCC.DDDDDDDD allora la causa era un errore software e bisognava controllare la prima coppia di caratteri AA, che individuava la libreria o la risorsa che aveva causato l'errore:
Codice | Dispositivo |
01 | Exec Library LIBRARIES |
02 | Graphics Library |
03 | Layers Library |
04 | Intuition Library |
05 | Math Library |
06 | CList Library |
07 | AmigaDOS Library |
08 | RAM Handler Library |
09 | Icons Library |
10 | Audio Device DEVICES |
11 | Console Device |
12 | GamePort Device |
13 | Keyboard Device |
14 | Trackdisk Device |
15 | Timer Device |
20 | CIA Resource RESOURCES |
21 | Disk Resource |
22 | Misc Resource |
30 | BootStrap OTHERS |
31 | Workbench |
32 | Disk Copy |
Se la coppia di caratteri iniziava con un 8 allora l'errore era critico e non recuperabile, mentre negli altri casi si era di fronte ad un'aomalia risolvibile. La coppia BB identificava la causa generica del problema:
Codice | Descrizione della causa |
01 | No Memory |
02 | Unable to Create Library |
03 | Unable to Open Library |
04 | Unable to Open Device |
05 | Unable to Open Resource |
06 | Input/Output (I/O) Error |
07 | No Signal |
I caratteri CCCC fornivano ulteriori dettagli sulla natura del problema ed andavano interpretati in modo contestuale al valore dei campi AA e BB:
Risorsa | Campo AA | Campo BB | Campo CC | Significato |
Exec Library | 81 | 00 | 0001 | 68000 exception vector checksum |
0002 | Execbase checksum | |||
0003 | Library checksum failure | |||
0004 | No memory to make library | |||
0005 | Corrupted memory list | |||
0006 | No memory for interrupt servers | |||
0007 | InitStruct() of an APTR source | |||
0008 | A semaphore is in illegal state | |||
0009 | Freeing memory already freed | |||
000A | Illegal 68k exception taken | |||
Graphics Library | 82 | 01 | 0000 | Graphics out of memory |
82 | 0006 | Long frame, no memory | ||
82 | 0007 | Short frame, no memory | ||
02 | 0009 | Text, no memory for TmpRas | ||
82 | 000A | BltBitMap, no memory | ||
82 | 000B | Regions, memory not available | ||
82 | 0030 | MakeVPort, no memory | ||
82 | 1234 | Emergency memory not available | ||
Layers Library | 83 | 01 | 0000 | Layers out of memory |
Intuition Library | 84 | 00 | 0001 | Unknown gadet type |
04 | 00 | 0001 | Recovery form of AN_GadgetType | |
84 | 01 | 0002 | Create port, no memory | |
04 | 01 | 0003 | Item plane alloc, no memory | |
04 | 01 | 0004 | Sub alloc, no memory | |
84 | 01 | 0005 | Plane alloc, no memory | |
84 | 00 | 0006 | Item box top < RelZero | |
84 | 01 | 0007 | Open screen, no memory | |
84 | 01 | 0008 | Open screen, raster alloc, no memory | |
84 | 00 | 0009 | Open sys screen, unknown type | |
84 | 01 | 000A | Add SW gadgets, no memory | |
84 | 01 | 000B | Open window, no memory | |
84 | 00 | 000C | Bad State Return entering Intuition | |
84 | 00 | 000D | Bad Message received by IDCMP | |
84 | 00 | 000E | Weird echo causing incomprehension | |
84 | 00 | 000F | Couldn’t open the Console Device | |
Amiga DOS Library | 07 | 01 | 0001 | No memory at startup |
00 | 0002 | EndTask didn’t | ||
00 | 0003 | Qpkt failure | ||
00 | 0004 | Unexpected packet received | ||
00 | 0005 | Freevec failed | ||
00 | 0006 | Disk block sequence error | ||
00 | 0007 | Bitmap corrupt | ||
00 | 0008 | Key already free | ||
00 | 0009 | Invalid checksum | ||
00 | 000A | Disk Error | ||
00 | 000B | Key out of range | ||
00 | 000C | Bad overlay | ||
RAM Library | 08 | 00 | 0001 | No overlays in library seglists |
Trackdisk Device | 14 | 00 | 0001 | Calibrate: seek error |
0002 | Delay: error on timer wait | |||
Timer Device | 15 | 00 | 0001 | Bad request |
0002 | Power supply does not supply ticks | |||
Disk Resourcek.resource | 21 | 00 | 0001 | Get unit: already has disk |
0002 | Interrupt: no active unit | |||
BootStrap | 30 | 00 | 0001 | Boot code returned an error |
La seconda parte della sequenza, i caratteri DDDDDDDD, può assumere tre valori:
- L'idirizzo dell'istruzione che ha causato l'errore;
- L'indirizzo della locazione di memoria che ha causato il problema in caso di errore di allocazione o deallocazione di memoria;
- Il valore 48454C50 in caso di resa incondizionata. Gli otto numeri, se letti a coppie, sono i codici ASCII in esadecimale dei caratteri H, E, L e P.
L'analisi si ferma qui, i codici erano molto precisi nel descrivere la causa dell'errore, tuttavia ci voleva un vero esperto per interpretarli ed analizzare il codice per trovare la causa dell'errore. Ci voleva un vero guru! Tutti gli altri potevano solo riavviare il sistema o affidarsi al guru precedentemente menzionato.
Ecco spiegato perché il messaggio di errore si chiama Guru Meditation. Esiste però un curioso aneddoto in proposito. Una leggenda vuole che il nome derivi dalla postura che gli sviluppatori di AmigaOS assumevano quando si concentravano su un problema per trovare la soluzione ai frequenti crash del neonato sistema operativo. Quando AmigaOS era ancora in fase di sviluppo, il software era davvero instabile e la situazione era così frustrante che per rilassarsi i programmatori si sedevano su una Joyboard, tentando di stare in equilibrio su di essa, in una posizione che ricordava quella di un guru indiano in meditazione.
Nel 1982 infatti esisteva in commercio la periferica Joyboard per Atari 2600. Era una specie di pedana, simile all'attuale pedana della Nintendo Wii, e veniva venduta insieme ad un videogioco di sci. Essa captava le variazioni di peso di un utente che ci saliva sopra in piedi e trasferiva queste informazioni al sistema che le usava come input nel gioco per calcolare gli spostamenti dello sciatore sullo schermo. La pedana non era sensibile al peso, ma era semplicemente montata su una specie di joystick che ne rilevava la pendenza mediante dei relé, proprio come la cloche di un normalissimo joystick. Rimanere in equilibrio perfetto senza che i relé della pedana facessero contatto era un esercizio complicato, degno di un maestro di yoga. Oppure di un guru indiano.
Dalla versione 2.04 i poi di AmigaOS il Guru Meditation è scomparso per essere sostituito con un più parlante e dignitoso Software failure.
Ancora oggi però Guru Meditation ci lascia parecchi moniti. Chi è del mestiere sicuramente sorriderà pensando a quanto dovesse essere dura la vita del programmatore in quegli anni. Non esistevano i debugger integrati, l'highlight delle parole chiave e tutte quelle facilitazioni che gli IDE moderni offrono per semplificare la stesura del codice e l'analisi del suo funzionamento. E' vero che all'epoca il software era meno complesso, ma ciò non vuol dire che fosse necessariamente anche più semplice.
Il software inoltre era roba per specialisti. Maneggiare programmi richiedeva grande concentrazione e competenza, cose che possono scarseggiare quando il bacino di utenza si allarga a dismisura.
Infine, una considerazione di carattere polemico. Esistevano i manuali cartacei, e la gente li consultava. Sui manuali per l'utente questi codici di errore erano riportati e spiegati, e nessuno aveva paura di presentare dettagli troppo tecnici all'utente finale. C'era una maggiore cultura informatica nell'ambiente, chi prendeva in mano un computer (in senso figurato ovviamente) era in grado di capirne le logiche e nessuno pretendeva che il sistema si aggiustasse da solo premendo semplicemente un tasto.