Guru Meditation (schermata di errore critico di Amiga)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.

Blue Screen of Death (da Windows 3.0 a Windows ME)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:

  1. Premere il tasto sinistro del mouse e riavviare il sistema;
  2. 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:

  1. L'idirizzo dell'istruzione che ha causato l'errore;
  2. L'indirizzo della locazione di memoria che ha causato il problema in caso di errore di allocazione o deallocazione di memoria;
  3. 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.

Guru indù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.

The Amiga Guru BookAncora 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.