Commodore 64 > Aiuto & Domande
Come funziona l'autostart di questo gioco?
jumpjack:
Sto provando a capire come fa Choplifter ad autoavviarsi dopo il caricamento.
Questo è l'elenco dei file:
--- Codice: ---0 "*** beermuda ***" 00 2a
1 "chop" prg
65 "choplifter- main" prg
598 blocks free.
--- Termina codice ---
Se carico "chop" vedo:
--- Codice: ---10 poke53280,0 : poke53281,0 : if l=1 then sys2213
20 print "Sqe" tab(15)" rchoplifterR" : print tab(13) "qqqthe bandit boy"
30 print tab(16) "was here." : print"qqqqqloading..."
40 l=1 : load"choplifter- main",8,1
--- Termina codice ---
Il programma semplicemente imposta su nero sfondo e bordo, e la variabile L a 1, mostra due scemenze a schermo, e carica il file principale.
La domanda è: una volta caricato, come fa ad eseguire il file?!? Il programma basic termina alla linea 40, come fa a ripartire dalla 10, contrllare il valore di L e quindi chiamare SYS 2213?
All'indirizzo dec2213 ($08a5) c'è:
08a5 dec
jmp fce2
$FCE2 è sys64738, la routine di reset, che a quanto pare esegue la routine a $FD02 che controlla se dopo l'indirizzo $8000 c'è la stringa CBM80, nel qual caso avvia il programma appena caricato
Allego la ROM.
eregil:
Quando si esegue una LOAD dall'interno di un programma, al termine del caricamento l'esecuzione prosegue di fatto come se ci fosse una GOTO alla prima riga del programma, e non con la normale prosecuzione del flusso di esecuzione. Questa è una caratteristica del BASIC 2.0 del C64 e non costituisce una tecnica particolare di autorun.
In questo caso si carica del codice LM che costituisce il gioco; ciò che avviene è che quando esegui RUN la variabile L è reimpostata (quindi pari a 0 quando ne viene eseguito un confronto) e la SYS non viene eseguita, e l'esecuzione prosegue alle righe 20 e successive del programma BASIC. La variabile L è poi impostata a 1 nella riga 40, perciò dopo la LOAD e una implicita GOTO 10, la IF alla riga 10 dà esito positivo e viene eseguita la SYS.
Se anziché del codice LM la LOAD carica un programma BASIC, questo può a sua volta essere eseguito automaticamente, tuttavia questa tecnica è applicabile senza controindicazioni solamente a determinate condizioni, in particolare che il programma caricato sia più corto o al più uguale in lunghezza (in byte) al programma caricante e che non vi siano stringhe allocate nel corpo del programma caricante. Gli inserti di CCC n. 43 e n. 44 approfondiscono il discorso, per chi fosse interessato.
Devo chiedere a te e agli altri la cortesia di non utilizzare lo spazio allegati per materiale che si trova già in rete, ma esclusivamente per materiale autoprodotto o al più per piccole immagini. Si veda il thread in rilievo: https://ready64.org/smf/index.php?topic=5068.0
La versione di "The Bandit Boy" di Choplifter nel momento in cui scrivo si trova rapidamente con una ricerca su csdb.
jumpjack:
Grazie per la risposra così dettagliata, addirittura ti ricordi in quali numeri di CCC se ne parlava?!?
Avrei una domanda collaterale: quale debugger mi consigli per seguire passo passo come si muove il "program counter" durante l'esecuzione di un programma? Ho provato VICE, c64debugger, il successore retrodebugger, ma sono programmi veramente incasinatissimi e documentati malissimo! Magari saranno pure potentissimi.... ma forse ci vuole un paio di mesi solo per imparare ad usarli! Ce ne sono anche diversi altri che sto provando: Infiltrator Disassembler, C64forever, ma ancora non mi raccapezzo..
io mi accontenterei di vedere il disassemblato di un programma che viene scorso riga per riga man mano che viene eseguito, tipo come faccio con l'editor di macro VBA in word, dove posso eseguire le righe una per volta, e decidere se "entrare" in una sub e seguirla riga per riga, o farla eseguire e basta.
Un "plus" sarebbe se il diassembler facesse riferimento a una mappa tipo questa, così non dovrei cercare io a mano ogni indirizzo, ma forse chiedo troppo...
E' davvero difficile credere che nel 2024 debba essere così complicato disassemblare programmicchi lunghi 0.03 Megabyte!
jumpjack:
A quali articoli ti riferisci?
N.43:
Dalla fine all'inizio .............................. 4
Purchè funzioni! .................................. 15
Cara Amiga, ti scrivo... .......................... 17
Andare in giro con pochi spiccioli ................ 22
Dimmi un numero! .................................. 32
Minicopiatore di programmi ........................ 39
Quando uno schermo solo non basta ................. 59
Viaggio all'interno della traccia 18 .............. 62
Biglia elettronica ................................ 68
Grafica in Basic 3.5 e 7.0 ........................ 70
Caccia alla mosca ................................. 75
Una questione di puntatori ........................ 78
EPIX 3001 la grande avventura continua... ......... 83
L'altra posta ..................................... 84
La guerra per gioco ............................... 89
Gruppi di caratteri in un interno ................. 92
Un modem Commodore omologato Sip .................. 96
n.44
Ricomincio da Amiga ............................... 4
Software made in Italy ............................ 16
Play e i suoi fratelli ............................ 18
Salviamo il video ................................. 24
Program Quiz ...................................... 26
Amiga 2000, l'evoluzione della specie ............. 29
Parlar d'Amiga .................................... 34
Cronaca di un'Amiga annunciata .................... 37
Dischi d'autore ................................... 60
Scacco matto con Amiga ............................ 63
L'asino di Buridano ............................... 65
Un'estate gialla .................................. 69
Arrivano i Commodoctors! .......................... 70
Il C-64 si affaccia sul mondo ..................... 72
Super routine per C/64 ............................ 74
Lui, lei e... il computer ......................... 81
Come "truccare" un joystick ....................... 82
Passeggiando tra Peek, Poke e Sys ................. 86
Testando la tastiera .............................. 90
Quattro nuove routine ............................. 92
Compressore di testi .............................. 95
eregil:
Agli inserti della rivista (le pagine più piccole e numerate in cifre romane) "Viaggio nel Basic" e "Viaggio all'interno del Basic".
Navigazione
[0] Indice dei post
Vai alla versione completa