Autore Topic: Hex Editor  (Letto 5210 volte)

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Hex Editor
« il: 04 Marzo 2009, 00:52:45 »
E' un bel po' che mi sono scaricato questo programma ma non sono mai riuscito ad ottenere nulla, potreste aiutarmi a capirne il funzionamento?

fab

  • Visitatore
Re: Hex Editor
« Risposta #1 il: 04 Marzo 2009, 10:53:30 »
E' un bel po' che mi sono scaricato questo programma ma non sono mai riuscito ad ottenere nulla, potreste aiutarmi a capirne il funzionamento?
Un hex editor e' un programma che mostra i byte di cui e' fatto un file, e permette di modificarli a uno a uno.

In genere mostra due pannelli: a sinistra, i valori dei byte in base 16 (esadecimale), a destra, i valori dei byte secondo la codifica ASCII (o, meglio, una qualche estensione a 8 bit dell'ASCII, la piu' usata e' ISO 8859-1).

Affinche' un hex editor abbia qualche utilita', e' indispensabile conoscere la struttura del file che si vuole analizzare o cambiare, cioe' quali byte possono stare in quale posizione del file. La struttura dei file TAP e' descritta a http://www.computerbrains.com/tapformat.html .

Per riparare un file TAP con un hex editor, e' necessario identificare i byte che danno problemi (si puo' usare il file tcreport.txt di Tapclean, o abilitare i messaggi col bottone Advanced di WAV-PRG), e conoscere il formato del loader in questione per capire qual e' il valore corretto dei suddetti byte.

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Re: Hex Editor
« Risposta #2 il: 04 Marzo 2009, 22:28:50 »
C64 RAW TAPE (.TAP) FILE FORMAT.

0000 'C64-TAPE-RAW'
000C UBYTE Version
000D UBYTE[3] For future use...
0010 ULONG data length (Intel format LSB,MSB)
0014 UBYTE[] data
...

Version=0:
Each data byte represent the length of a pulse (the time until the c64's hardware triggers again).
The length is (8*data) cycles (PAL C64), i.e. the data byte of 2F represent (47*8/985248) seconds.
The data byte value of 00 represents overflow, any pulselength of more than 255*8 cycles.

Version=1:
As above but data value of 00 is now followed by three bytes, representing a 24 bit value of C64
cyles (NOT times 8). The order is as follow: 00 <bit0-7> <bit8-15> <bit16-24>.


Cosa vuol dire scusa?

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Re: Hex Editor
« Risposta #3 il: 04 Marzo 2009, 22:54:43 »
Cioe prendiamo ad es. questo TapClean REPORT:


GENERAL INFO AND TEST RESULTS

TAP Name    : towers.tap
TAP Size    : 556622 bytes (543 kB)
TAP Version : 1
Recognized  : 100%
Data Files  : 10
Pauses      : 6
Gaps        : 0
Magic CRC32 : 83BC1CE9
TAP Time    : 2:40.57
Bootable    : YES (2 parts, 1st name: TOWERS)
Loader ID   : n/a

Overall Result    : FAIL

Header test       : PASS [Sig: OK] [Ver: OK] [Siz: OK]
Recognition test  : PASS [556602 of 556602 bytes accounted for] [100%]
Checksum test     : PASS [8 of 8 checksummed files OK]
Read test         : FAIL [1 Errors]
Optimization test : FAIL [9 of 10 files OK]


FILE FREQUENCY TABLE

PAUSE (6)
C64 ROM-TAPE HEADER (4)
C64 ROM-TAPE DATA (4)
GALADRIEL (2)


FILE DATABASE

---------------------------------
File Type: C64 ROM-TAPE HEADER
Location: $0014 -> $6AC8 -> $79C8 -> $79DD
LA: $033C  EA: $03FB  SZ: 192
File Name: TOWERS
Pilot/Trailer Size: 27136/0
Checkbyte Actual/Expected: $B0/$B0
Read Errors: 0
Unoptimized Pulses: 0
CRC32: B5507E04
 - File ID : FIRST
 - DATA FILE type : PRG
 - DATA FILE Load address : $02BA
 - DATA FILE End address : $032C
 - DATA FILE Size (calculated) : 114 bytes

---------------------------------
File Type: C64 ROM-TAPE HEADER
Location: $79DE -> $7AE1 -> $89E1 -> $8A44
LA: $033C  EA: $03FB  SZ: 192
File Name: TOWERS
Pilot/Trailer Size: 79/78
Checkbyte Actual/Expected: $B0/$B0
Read Errors: 0
Unoptimized Pulses: 0
CRC32: B5507E04
 - File ID : REPEAT
 - DATA FILE type : PRG
 - DATA FILE Load address : $02BA
 - DATA FILE End address : $032C
 - DATA FILE Size (calculated) : 114 bytes

---------------------------------
File Type: PAUSE
Location: $8A45 -> $0000 -> $0000 -> $8A48
 - Length: 320000 cycles (0.3248 secs)

---------------------------------
File Type: C64 ROM-TAPE DATA
Location: $8A49 -> $9FFB -> $A8E3 -> $A8F8
LA: $02BA  EA: $032B  SZ: 114
Pilot/Trailer Size: 5374/0
Checkbyte Actual/Expected: $E5/$E5
Read Errors: 0
Unoptimized Pulses: 0
CRC32: A4EB4689
 - File ID : FIRST

---------------------------------
File Type: C64 ROM-TAPE DATA
Location: $A8F9 -> $A9FC -> $B2E4 -> $B347
LA: $02BA  EA: $032B  SZ: 114
Pilot/Trailer Size: 79/78
Checkbyte Actual/Expected: $E5/$E5
Read Errors: 0
Unoptimized Pulses: 0
CRC32: A4EB4689
 - File ID : REPEAT

---------------------------------
File Type: PAUSE
Location: $B348 -> $0000 -> $0000 -> $B34B
 - Length: 300000 cycles (0.3045 secs)

---------------------------------
File Type: GALADRIEL
Location: $B34C -> $C354 -> $233FC -> $23C0B
LA: $0801  EA: $3617  SZ: 11799
Pilot/Trailer Size: 512/257
Read Errors: 0
Unoptimized Pulses: 0
CRC32: C1C50D4A

---------------------------------
File Type: PAUSE
Location: $23C0C -> $0000 -> $0000 -> $23C0F
 - Length: 460000 cycles (0.4669 secs)

---------------------------------
File Type: C64 ROM-TAPE HEADER
Location: $23C10 -> $25DC2 -> $26CC2 -> $26CD7
LA: $033C  EA: $03FB  SZ: 192
File Name: 2TOWERS
Pilot/Trailer Size: 8446/0
Checkbyte Actual/Expected: $A2/$A2
Read Errors: 0
Unoptimized Pulses: 0
CRC32: 5A656C72
 - File ID : FIRST
 - DATA FILE type : PRG
 - DATA FILE Load address : $02BA
 - DATA FILE End address : $032C
 - DATA FILE Size (calculated) : 114 bytes

---------------------------------
File Type: C64 ROM-TAPE HEADER
Location: $26CD8 -> $26DDB -> $27CDB -> $27D42
LA: $033C  EA: $03FB  SZ: 192
File Name: 2TOWERS
Pilot/Trailer Size: 79/82
Checkbyte Actual/Expected: $A2/$A2
Read Errors: 0
Unoptimized Pulses: 0
CRC32: 5A656C72
 - File ID : REPEAT
 - DATA FILE type : PRG
 - DATA FILE Load address : $02BA
 - DATA FILE End address : $032C
 - DATA FILE Size (calculated) : 114 bytes

---------------------------------
File Type: PAUSE
Location: $27D43 -> $0000 -> $0000 -> $27D46
 - Length: 320000 cycles (0.3248 secs)

---------------------------------
File Type: C64 ROM-TAPE DATA
Location: $27D47 -> $292F9 -> $29BE1 -> $29BF6
LA: $02BA  EA: $032B  SZ: 114
Pilot/Trailer Size: 5374/0
Checkbyte Actual/Expected: $0B/$0B
Read Errors: 0
Unoptimized Pulses: 0
CRC32: 21FD9AB8
 - File ID : FIRST

---------------------------------
File Type: C64 ROM-TAPE DATA
Location: $29BF7 -> $29CFA -> $2A5E2 -> $2A645
LA: $02BA  EA: $032B  SZ: 114
Pilot/Trailer Size: 79/78
Checkbyte Actual/Expected: $0B/$0B
Read Errors: 0
Unoptimized Pulses: 0
CRC32: 21FD9AB8
 - File ID : REPEAT

---------------------------------
File Type: PAUSE
Location: $2A646 -> $0000 -> $0000 -> $2A649
 - Length: 320000 cycles (0.3248 secs)

---------------------------------
File Type: GALADRIEL
Location: $2A64A -> $2B652 -> $8763A -> $87E49
LA: $0801  EA: $BFFF  SZ: 47103
Pilot/Trailer Size: 512/257
Read Errors: 1
Unoptimized Pulses: 8
CRC32: 14B97831
 - Read Error on byte @$6DABA (prg data offset: $848D)

---------------------------------
File Type: PAUSE
Location: $87E4A -> $0000 -> $0000 -> $87E4D
 - Length: 4926240 cycles (5.0000 secs)


PULSE FREQUENCY TABLE

0x18 (4)
0x1B (308877)
0x27 (174635)
0x30 (58706)
0x42 (13040)
0x56 (1312)

 * Read error locations (Max 100)




Mi sembra chiaro che in Hex Editor devo modificare solo una casellina verso la fine, come faccio a distinguere quale?

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Re: Hex Editor
« Risposta #4 il: 05 Marzo 2009, 15:25:19 »
Quest'ultimo l'ho risolto, ora ho un file TC Report in cui mi dice 0 errori ma checksum incompleto (55/56), come si ripara con Hex Editor?

fab

  • Visitatore
Re: Hex Editor
« Risposta #5 il: 05 Marzo 2009, 17:39:02 »
ho un file TC Report in cui mi dice 0 errori ma checksum incompleto (55/56), come si ripara con Hex Editor?
Non e' detto che sia possibile. Ma con un copia-e-incolla del file tcreport.txt si puo' provare a vedere che cosa sta succedendo

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Hex Editor
« Risposta #6 il: 05 Marzo 2009, 18:13:57 »
Intendi copia/incolla del .txt qui sul forum?

fab

  • Visitatore
Re: Hex Editor
« Risposta #7 il: 06 Marzo 2009, 10:23:27 »
si', come hai fatto qualche post fa

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Hex Editor
« Risposta #8 il: 06 Marzo 2009, 10:43:44 »
Ok ti invio il TC Report e il relativo .tap via mail perché è troppo lungo da postare qui, cmq si tratta di files con cui hai già avuto a che fare precedentemente...

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Re: Hex Editor
« Risposta #9 il: 17 Marzo 2009, 00:58:28 »
In questo programma esiste un metodo per correggere automaticamente tutti i dati sbagliati uguali correggendone uno solo? Cioe ad es. il dato 1A oppure 1C, correggendone uno in 1B si puo farli diventare tutti automaticamente in 1B?

Perche ora ho capito come riparare i .tap guasti solo che si tratta di aggiustare piu di 100000 caselle e se ne vanno giorni interi, che tra l'altro si tratta solo di mutarli tutti in 1B e 27; un copia/incolla di questi due dati posti gia in una determinata sequenza potrebbe gia risparmiarmi molto tempo...

fab

  • Visitatore
Re: Hex Editor
« Risposta #10 il: 17 Marzo 2009, 12:56:29 »
In questo programma esiste un metodo per correggere automaticamente tutti i dati sbagliati uguali correggendone uno solo? Cioe ad es. il dato 1A oppure 1C, correggendone uno in 1B si puo farli diventare tutti automaticamente in 1B?

Perche ora ho capito come riparare i .tap guasti solo che si tratta di aggiustare piu di 100000 caselle e se ne vanno giorni interi, che tra l'altro si tratta solo di mutarli tutti in 1B e 27; un copia/incolla di questi due dati posti gia in una determinata sequenza potrebbe gia risparmiarmi molto tempo...
Molti hex editor hanno una funzione trova/sostituisci. Ma, anche con quella funzione, la complessita' rimane troppo alta. Per fare cose del genere c'e' Tapclean. Farle manualmente e' impossibile.

L'hex editor si usa per ritoccare alcuni byte. Per scoprire quali, va analizzato il file tcreport.txt di Tapclean, o vanno usate le opzioni Advanced di WAV-PRG.

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Re: Hex Editor
« Risposta #11 il: 17 Marzo 2009, 15:37:29 »
E questo l'ho fatto, con i TC Report di Tapclean ho gia individuato i bytes da correggere e in che modo, solo che ce ne sono piu di 100000 e stare a digitare 1B e 27 per 100000 volte ..... insomma sai com'è ...

fab

  • Visitatore
Re: Hex Editor
« Risposta #12 il: 17 Marzo 2009, 17:52:17 »
E questo l'ho fatto, con i TC Report di Tapclean ho gia individuato i bytes da correggere e in che modo, solo che ce ne sono piu di 100000 e stare a digitare 1B e 27 per 100000 volte ..... insomma sai com'è ...
Se usi -o, Tapclean crea il file clean.*.tap dove quei byte sono ripuliti.

Gli "unoptimized pulses" non sono un problema, perche' possono essere ripuliti da Tapclean. Il problema e' dato dai "read error"

arkanoid3000

  • V.I.P. di Edicolac64
  • Utente di edicolac64.com
  • ***
  • Post: 1130
  • Lo Spaccamuri Dotato di Racchetta e Pallina
Hex Editor
« Risposta #13 il: 17 Marzo 2009, 18:31:48 »
I Read Error sono basati su 00 20 4E 00 facilmente correggibili con 1B 27 1B 1B , il problema sono quella valanga di caselle da correggere che Tapclean non corregge...

fab

  • Visitatore
Re: Hex Editor
« Risposta #14 il: 18 Marzo 2009, 10:31:41 »
00 20 4E 00 sembra una pausa, e le pause vanno lasciate stare.
"data value of 00 is now followed by three bytes, representing a 24 bit value of C64 cyles" (dalla specifica). In quel caso, una pausa di 0x004E20 (che e' la versione esadecimale di 20000) cicli. Un ciclo e' approssimativamente un milionesimo di secondo, quindi quello significa una pausa di 2 centesimi di secondo.

Se Tapclean non ripulisce una valanga di bytes, non bisogna fare a mano, ma bisogna vedere perche'. E serve il TAP per poterlo fare.

E comunque, un TAP ripulito non e' necessariamente un TAP funzionante. Cosi' come non e' vero il viceversa: TAP non perfettamente puliti ma abbastanza puliti (esempio: prodotti da mtap a partire da una cassetta buona) funzionano sull'emulatore senza bisogno di ripulitura. Quindi, non sbattere la testa per ripulire un file che con ogni probabilita' non funzionera' comunque.