Ti faccio un esempio con Bongo.
Sul tape sono presenti alcune routine, che fanno varie "cose" tutte finalizzate ad eseguire questo programmino basic:
9 poke36879,14:poke36869,205:poke36878,20:poke808,109:poke157,0
10 print"{dish}{swuc}{clr}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{yel}b{wht}ongo"
11 print"{grn}{rght}{rght}{down}{rght}{rght}by udo gertz{rght}{rght}{rght}{rght}{rght}{down}{rght}{rght}{rght}{pur}@ {blu}1984 {yel}by kingsoft"
12 poke646,10:print"{rght}{rght}{rght}{rght}{rght}{rght}{down}{SHIFT-*}A{down}{left}{left}BC{down}{left}{left}DE{down}{left}{left}FG{down}{left}{left}HI{down}{left}{left}{left}{left}{left}{rght}OOOOOOOOOOOOOO"
13 print"{up}{up}{up}{up}{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rvon}uvwx{down}{left}{left}{left}{left}yz[\{down}{left}{left}{left}{left}]^_ {down}{left}{left}{left}{left}! #$":poke657,128
14 print"{up}{up}{up}{up}{up}{red}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rvon}{CBM-D}{CBM-Z}{down}{left}{left}{CBM-S}{CBM-P}{down}{down}{down}":poke4351,162
15 print"{yel}{down}{down}{rght}{rght}{rght}{rght}{rght}score table:{rght}{rght}{rght}{rght}{rght}{rght}{down}";:poke646,10:print"{rvon}~{up}{SHIFT--}{down}{CBM-*}{wht}{rvof}{rght}diamonds 100 -{down}{left}{left}{left}{left}{left}50";
16 print"0{rght}pts{yel}{rght}{rght}[ \ ] ^ _{rght}{rght}{rght}{wht}1000 pts{rght}{rght}{rght}{down}{blu}extra mouse every{yel}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{down}{rght}10000 pts";
10000 data 169,1,162,1,160,1,32,186,255,169,0,162,255,160,255,32,189,255,169,0,162,255
10100 data 16,255,32,213,255,169,7,141,167,3,76,137,82
10200 forx=0to34:ready:poke673+x,y:next
10300 sys673
Questo programmino non fa nient'altro che settare dei puntatori per la grafica e mettere in memoria una routine assembly che carica il successivo programma su nastro.
La routine asm è contenuta nei data presenti dalla linea 10000 in poi.
Questi "data" vengono "pokati" in memoria dall'indirizzo 673 in poi.
Il disassemblato di questa routine è
.C:02a1 A9 01 LDA #$01
.C:02a3 A2 01 LDX #$01
.C:02a5 A0 01 LDY #$01
.C:02a7 20 BA FF JSR $FFBA
.C:02aa A9 00 LDA #$00
.C:02ac A2 FF LDX #$FF
.C:02ae A0 FF LDY #$FF
.C:02b0 20 BD FF JSR $FFBD
.C:02b3 A9 00 LDA #$00
.C:02b5 A2 FF LDX #$FF
.C:02b7 10 FF BPL $02B8
.C:02b9 20 D5 FF JSR $FFD5
.C:02bc A9 07 LDA #$07
.C:02be 8D A7 03 STA $03A7
.C:02c1 4C 89 52 JMP $5289
L'istruzione che vedi a $02c1 è JMP $5289.
Questo indirizzo ($5289) corrisponde all'indirizzo di partenza del game vero e proprio.
Diciamo che il programmatore ha scelto un modo un po' strano per inizializzare il tutto ed eseguire il gioco, ma diciamo che per mantenere il gioco funzionante al 100% ciò che serve sono le poke alla linea 9 del listatino basic qui sopra, e l'ultimo file presente su nastro, che è il gioco vero e proprio, che viene caricato dall'indizzo $1400 a $6000.
Per usare questo gioco serve un espansione da 16k.
Con qualche piccola modifica si potrebbe crearne una versione su disco fedele all'originale, anche nel metodo "strano" di inizializzazione e caricamento.
Diciamo che prendere questi due files e salvarli su nastro, togliendo conseguentemente la procedura di "autorun"... è un crack per vic 20...