Autore Topic: Routine Di Delete  (Letto 1693 volte)

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2379
    • http://ready64.org
  • Gioco Preferito: Impossible Mission
Routine Di Delete
« il: 14 Aprile 2004, 14:14:07 »
 Ho trovato su un nastro della Systems la seguente routine. Non avendo la documentazione (cioè la rivista allegata alla cassetta) non ho idea di cosa possa essere. Ho tokenizzato il .prg, ed ecco il listato. A cosa serve??

Codice: [Seleziona]
10 rem *********************
20 rem *                   *
30 rem * routine di delete *
40 rem *                   *
41 rem *     a cura di     *
43 rem *                   *
45 rem *  commodore club   *
46 rem *                   *
47 rem *********************
80 fort=49152to49282:reada:poket,a:p=p+a:next
90 sys49283
140 data32,253,174,32,107,169,32,19,166,165,95,133,251,165,96,133,252,169
141 data171,32,255,174,32,107,169,165,20,5,21,208,21,165,46,133,96,166,45
142 data224,2,176,2,198,96,202,202,134,95,160,0,76,69,192,32,19,166,160,0
143 data177,95,72,200,177,95,133,96,104,133,95,136,165,252,197,96,240,3,144
144 data7,96,165,251,197,95,176,249,165,95,197,45,208,6,165,96,197,46,240
145 data18,177,95,145,251,230,251,208,2,230,252,230,95,208,230,230,96,208
146 data226,165,251,133,45,165,252,133,46,32,96,166,32,51,165,76,174,167
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
http://ready64.org/informazioni/contatti.php

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Routine Di Delete
« Risposta #1 il: 14 Aprile 2004, 18:36:23 »
 Ciao Rob

Citazione
Ho tokenizzato il .prg, ed ecco il listato. A cosa serve??

Questo ( lo dico anche a beneficio di chi non sa cosa sia ) è un caricatore Basic ( cui abbiamo fatto cenno io,Ian e Marcello nel post 'Ottimizzare i programmi Basic',in questa sezione... ).
In pratica è un programma che legge tutti i valori delle linee 'data' e li mette,uno per uno,nella zona di memoria compresa tra le locazioni 49152 e 49282.
Ogni valore corrisponde al codice di un'istruzione macchina (o di un operando di tale istruzione) ;per capire cosa fa la routine,bisognerebbe vederne il codice in formato simbolico...comunque,dal nome 'delete',suppongo cancelli qualcosa ( probabilmente ripulisce una determinata zona di memoria ...)

Citazione
90 sys49283
Non ne manca un pezzo? :dotto:

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2379
    • http://ready64.org
  • Gioco Preferito: Impossible Mission
Routine Di Delete
« Risposta #2 il: 14 Aprile 2004, 19:06:07 »
 non so altro, il programma è piazzato a conclusione della cassetta (che contiene giochi e utility). ho messo online il file per chi fosse interessato a scoprirne di più :D http://ready64.altervista.org/temp/secret/DELETE.PRG
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
http://ready64.org/informazioni/contatti.php

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Routine Di Delete
« Risposta #3 il: 14 Aprile 2004, 19:31:12 »
 
Va bene,più tardi provo a disassemblare il codice... ;)

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2379
    • http://ready64.org
  • Gioco Preferito: Impossible Mission
Routine Di Delete
« Risposta #4 il: 14 Aprile 2004, 20:20:16 »
  ;) okk non c'è fretta
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
http://ready64.org/informazioni/contatti.php

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Routine Di Delete
« Risposta #5 il: 15 Aprile 2004, 00:19:13 »
 Ciao a tutti

Ecco il disassemblato della routine che mi hai chiesto

Codice: [Seleziona]
c000   JSR $AEFD
c003   JSR $A96B  ; legge primo parametro della SYS
c006   JSR $A613  ; cerca la linea basic corrispondente al primo numero
c009   LDA $5F
c00b   STA $FB  
c00d   LDA $60
c00f   STA $FC    ; ($FB) = indirizzo di partenza della riga di testo
c011   LDA #$AB
c013   JSR $AEFF(?); CHR$(171)??
c016   JSR $A96B
c019   LDA $14
c01b   ORA $15
c01d   BNE $C034  ; secondo parametro presente,salta
c01f   LDA $2E
c021   STA $60
c023   LDX $2D
c025   CPX #$02
c027   BCS $C02B
c029   DEC $60
c02b   DEX
c02c   DEX        ; protegge l'area variabili
c02d   STX $5F    
c02f   LDY #$00
c031   JMP $C045  ; secondo parametro nullo,vai fino alla fine
c034   JSR $A613  ; cerca la linea basic corrispondente al secondo numero
c037   LDY #$00
c039   LDA ($5F),Y
c03b   PHA
c03c   INY
c03d   LDA ($5F),Y
c03f   STA $60      
c041   PLA
c042   STA $5F    ; metti l'indirizzo finale in $5F-$60          
c044   DEY
c045   LDA $FC
c047   CMP $60    
c049   BEQ $C04E
c04b   BCC $C054
c04d   RTS
c04e   LDA $FB
c050   CMP $5F    ; ultima riga?
c052   BCS $C04D  ; sì,torna
c054   LDA $5F
c056   CMP $2D    
c058   BNE $C060
c05a   LDA $60
c05c   CMP $2E    ; è stata raggiunta l'area delle variabili?
c05e   BEQ $C072  ; sì,stop
c060   LDA ($5F),Y
c062   STA ($FB),Y; no,cancella la riga basic riempiendo lo spazio vuoto  
c064   INC $FB
c066   BNE $C06A
c068   INC $FC
C06a   INC $5F
C06c   BNE $C054
C06e   INC $60
c070   BNE $C054
c072   LDA $FB
c074   STA $2D
c076   LDA $FC
c078   STA $2E    ; setta il nuovo indirizzo per l'area delle variabili
c07a   JSR $A660
c07d   JSR $A533; aggiorna i link del programma
c080   JMP $A7AE; esegue la prossima istruzione

L'ho esaminata velocemente...molto probabilmente si tratta di una routine per cancellare il contenuto delle linee Basic indicate come parametri della SYS.
Lo spazio occupato dalle righe cancellate viene occupato dalle righe successive;ad esempio,poni di avere questo listato

10 PRINT "CIAO"
20 A=10
30 PRINT A+2
40 GOTO 30

impartendo SYS 49152,20-30 vengono cancellate le linee 20-30;lo spazio precedentemente occupato in memoria da queste 2 linee,al termine della routine è occupato dalla linea 40.
Impartendo solo SYS 49152,20 vengono cancellate tutte le righe dalla 20 fino alla fine del programma.
Al termine della routine viene aggiornato l'indirizzo dell'area delle variabili ( che risulterà inferiore al vecchio indirizzo,essendo il programma più corto ).
Ci sono comunque un paio di istruzioni nebulose ( come LDA #$AB seguito da JMP $AEFF,invece di un logico JMP $AEFD,e un JMP ($E6E6) ).
Con ogni probabilità,la routine faceva parte di un listato più ampio,che può ( forse ) spiegare queste incongruenze...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Routine Di Delete
« Risposta #6 il: 15 Aprile 2004, 02:22:29 »
 
Citazione
sono comunque un paio di istruzioni nebulose ( come LDA #$AB seguito da JMP $AEFF
Ho controllato, $AB e' il token basic di "-"
Ad esempio nella routine del FOR viene fatto un
Codice: [Seleziona]
A76D   A9 A4      LDA #$A4; token di "TO"
A76F   20 FF AE   JSR $AEFF
A772   20 8D AD   JSR $AD8D

Ci deve essere qualcosa che non va con tuo disassemblatore perche' il codice
Codice: [Seleziona]
c06a            INC $5F
c06c            JMP ($E6E6)
c06f            RTS
in realta' e'
Codice: [Seleziona]
C06A  E6 5F     INC $5F
C06C  D0 E6     BNE $C054
C06E  E6 60     INC $60
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Routine Di Delete
« Risposta #7 il: 15 Aprile 2004, 11:41:58 »
 Ciao Ian

Grazie della correzione...adesso si spiega quel #$AB ( è il token - tra i due parametri della SYS ;) )
Inoltre,mi chiedevo perchè non venisse incrementato il byte alto dell'indirizzo da copiare ($60)...
Citazione
C06E  E6 60     INC $60
;)
Citazione
Ci deve essere qualcosa che non va con tuo disassemblatore
Il disassemblatore funziona bene,semplicemente ho inserito un 'data' sbagliato nel caricatore Basic ( 108,che è l'opcode del JMP indiretto,invece di 208 che è l'opcode della BNE,le giornate pesanti mi fanno brutti scherzi  :sonno: )...
Uh,mitico il marchio del C= ( l'ho notato adesso ...)!!!
Ciauz

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Routine Di Delete
« Risposta #8 il: 15 Aprile 2004, 12:42:14 »
 Ok,ho corretto le righe errate ;)
 

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2379
    • http://ready64.org
  • Gioco Preferito: Impossible Mission
Routine Di Delete
« Risposta #9 il: 18 Aprile 2004, 14:00:39 »
 In pratica non ho ancora capito cosa fa questo programma, e come mai l'hanno messo alla fine di una cassetta che contiene solo giochi. :fagiano:  
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
http://ready64.org/informazioni/contatti.php

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Routine Di Delete
« Risposta #10 il: 18 Aprile 2004, 14:27:50 »
 E' una routine in linguaggio macchina

Se hai un listato basic in memoria,la routine cancella certe righe del listato.

Ad esempio,impartendo

SYS 49152,20

viene cancellato tutto il listato,a partire dalla riga 20

impartendo invece

SYS 49152,20-40

vengono cancellate solo le righe dalla n.20 alla n.40

Capito adesso? :mattsid:

Citazione
come mai l'hanno messo alla fine di una cassetta che contiene solo giochi.
Questo non lo so...però mi sembra strano,di solito la systems distribuiva i suoi programmi su disco...
 

The Overkiller

  • Utente
  • **
  • Post: 367
    • http://hokutoforce.c64.org
  • Gioco Preferito: Project Firestart
Routine Di Delete
« Risposta #11 il: 18 Aprile 2004, 19:09:34 »
Citazione da: "Alberto"
Questo non lo so...però mi sembra strano,di solito la systems distribuiva i suoi programmi su disco...
I dischi andavano per la maggiore è vero. Ma ricordo anche io dei tapes della Systems ....
The Overkiller / Hokuto Force / PoL
Hokuto Force

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2379
    • http://ready64.org
  • Gioco Preferito: Impossible Mission
Routine Di Delete
« Risposta #12 il: 18 Aprile 2004, 19:21:23 »
 Si si, questo era un tape. Magari lo scansiono, può essere interessante.
Tra l'altro alla System hanno utilizzato un turbo un pò particolare, in pratica è un TURBOTAPE (quello con freccia L) modificato con le scritte in italiano che ogni volta introducono il gioco successivo. Insomma, non si tratta di un turbo incorporato nel programma ma appunto di uno esterno (cosa fastidiosa a mio modo di vedere).
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
http://ready64.org/informazioni/contatti.php

pyrat2703

  • Utente
  • **
  • Post: 267
  • Gioco Preferito: Ghost'n'Goblin
Routine Di Delete
« Risposta #13 il: 13 Maggio 2004, 22:29:44 »
  :huh: se non sbaglio la versione disco costava 24.000 lire e la versione cassetta 12.000 lire della System  :confused: o forse mi confondo con la mitica rivista Logica 2000 prima in cassetta e poi in Floppy Disk da 5/1/2 ?  :hail:  :c64:  
WOPR EXECUTION ORDER
K36.948.3

PART ONE  : R O N C T T L
PART TWO : 07:20:35

LAUNCH CODE : D L G 2 2 0 9 T V X