Sinceramente ero un po' indeciso su dove mettere questo topic... spero di avere scelto il forum più adeguato :)
L'altra sera mi sono messo a studiare un po' la struttura di HexWorkshop come programma, sollecitato da un post su emuita in cui veniva detto che non è possibile utilizzare TBL con HexWorkshop.
Dopo qualche tentativo, sono riuscito a scoprire che... invece è possibile (sicuramente avrò scoperto l'acqua calda, ma non avevo sentito mai nessuno parlarne... così...).
Tengo a precisare però che questo procedimento è valido esclusivamente con TBL semplici... ossia, il carattere non deve essere ottenuto da più byte (quindi TBL con "0AB3=C" ad esempio non vanno bene... devono essere tipo "C5=H"), ed è possibile solamente avere un carattere associato ad un byte (altro esempio: "F2=ciao" non va bene... "6E=il" non va bene... "09=;" va bene).
Potete quindi utilizzare un carattere qualunque. Ora vi spiego come dovete fare partendo da un esempio esplicativo.
Andiamo nella cartella dove abbiamo installato HexWorkshop.
Dentro noterete un'altra cartella: CharMaps.
Fate una copia, ad esempio, del file ASCII.map e rinominatelo in TBL.map .
Ora apritelo con il vostro editor esadecimale preferito... o anche con lo stesso HexWorkshop :P
Guardiamo com'è fatto questo file...
[size=8]00000000 4857 434D 0100 0000 0000 0000 4153 4349 HWCM........ASCI
00000010 4900 2837 2062 6974 2900 0000 0000 0000 I.(7 bit).......
00000020 0000 0000 0000 0000 0000 0000 3720 6269 ............7 bi
00000030 7420 4153 4349 4900 0000 0000 0000 0000 t ASCII.........
00000040 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000A0 0000 0000 0000 0000 0000 0000 4272 6561 ............Brea
000000B0 6B50 6F69 6E74 2053 6F66 7477 6172 652C kPoint Software,
000000C0 2049 6E63 2E00 0000 0000 0000 0000 0000 Inc............
000000D0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000E0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000F0 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000100 802E 802E 802E 802E 802E 802E 802E 802E ................
00000110 802E 802E 802E 802E 802E 802E 802E 802E ................
00000120 802E 802E 802E 802E 802E 802E 802E 802E ................
00000130 802E 802E 802E 802E 802E 802E 802E 802E ................
00000140 0020 0021 0022 0023 0024 0025 0026 0027 . .!.".#.$.%.&.'
00000150 0028 0029 002A 002B 002C 002D 002E 002F .(.).*.+.,.-.../
00000160 0030 0031 0032 0033 0034 0035 0036 0037 .0.1.2.3.4.5.6.7
00000170 0038 0039 003A 003B 003C 003D 003E 003F .8.9.:.;.<.=.>.?
00000180 0040 0041 0042 0043 0044 0045 0046 0047 .@.A.B.C.D.E.F.G
00000190 0048 0049 004A 004B 004C 004D 004E 004F .H.I.J.K.L.M.N.O
000001A0 0050 0051 0052 0053 0054 0055 0056 0057 .P.Q.R.S.T.U.V.W
000001B0 0058 0059 005A 005B 005C 005D 005E 005F .X.Y.Z.[.\.].^._
000001C0 0060 0061 0062 0063 0064 0065 0066 0067 .`.a.b.c.d.e.f.g
000001D0 0068 0069 006A 006B 006C 006D 006E 006F .h.i.j.k.l.m.n.o
000001E0 0070 0071 0072 0073 0074 0075 0076 0077 .p.q.r.s.t.u.v.w
000001F0 0078 0079 007A 007B 007C 007D 007E 802E .x.y.z.{.|.}.~..
00000200 802E 802E 802E 802E 802E 802E 802E 802E ................
00000210 802E 802E 802E 802E 802E 802E 802E 802E ................
00000220 802E 802E 802E 802E 802E 802E 802E 802E ................
00000230 802E 802E 802E 802E 802E 802E 802E 802E ................
00000240 802E 802E 802E 802E 802E 802E 802E 802E ................
00000250 802E 802E 802E 802E 802E 802E 802E 802E ................
00000260 802E 802E 802E 802E 802E 802E 802E 802E ................
00000270 802E 802E 802E 802E 802E 802E 802E 802E ................
00000280 802E 802E 802E 802E 802E 802E 802E 802E ................
00000290 802E 802E 802E 802E 802E 802E 802E 802E ................
000002A0 802E 802E 802E 802E 802E 802E 802E 802E ................
000002B0 802E 802E 802E 802E 802E 802E 802E 802E ................
000002C0 802E 802E 802E 802E 802E 802E 802E 802E ................
000002D0 802E 802E 802E 802E 802E 802E 802E 802E ................
000002E0 802E 802E 802E 802E 802E 802E 802E 802E ................
000002F0 802E 802E 802E 802E 802E 802E 802E 802E ................
[/size]Il file è così strutturato:
- 1° DWORD: HWCM [Magic Code... serve per identificare il file]
- 2° DWORD: 1 [credo si tratti di una specie di numero di versione del file]
- 3° DWORD: 0 [è una specie di check... se vale 1 la table viene considerata come UNICODE, altrimenti viene considerata come una table normale]
- 4° STRING[0x20] si tratta di una stringa NULL-TERMINATED di 0x20 caratteri che contiene il nome che visualizzerà l'HexWorkshop. Questo significa che in realtà di caratteri ne avete 0x1F e l'ultimo byte deve essere 00.
- 5° STRING[0x80] qui abbiamo una stringa (sempre NULL-TERMINATED, quindi vale lo stesso discorso di prima) la cui dimensione può essere al massimo di 0x80 byte. In questa stringa è presente in genere una descrizione della table.
- 6° STRING[0x54] sempre NULL-TERMINATED. In questa stringa invece vengono inserite informazioni sull'autore della table.
In totale dovremmo avere raggiunto 0xFF byte. Infatti è dalla posizione 0x100 che inizieranno le informazioni per la TBL.
È tutto molto semplice... i dati sono formati sempre così: [0x00][byte]... quindi a coppie di byte. Quindi per sapere l'offset in cui dovete scrivere il carattere in C4 della vostra TBL, basta che fate questo calcolo: [byteTBL]*[dimDato]+[dimHeader]+[PosNellaWORD] ...
quindi in questo caso (semplificando) abbiamo [byteTBL]*2+0x101 , perchè ogni dato è una WORD, l'header è sempre di 0x100 e 1 perchè il dato considerato è il secondo byte della WORD.
Facendo un esempio... se noi nella TBL abbiamo "DC=A", facciamo DC*2+0x101=0x2B9
0x2B9 è esattamente l'offset in cui scrivere il carattere "A".
In questo modo compiliamo il nostro file .map facendolo diventare una copia della TBL e salviamo [premunitevi di modificare anche la STRING[0x20] in modo tale da poter riconoscere il .map in seguito].
Ora vediamo come attivare questa TBL...
Dal nostro HexWorkShop, andiamo nel menù Options->Preferences, e quindi andiamo in Display. Vedete lì dove c'è scritto "Character Filter:"? Cliccate nel componente sottostante e vedrete che nella lista è apparso un nuovo elemento, che ha per nome quello che avevate scritto voi nella STRING[0x20] nel file .map
Quindi selezionatelo e cliccate su OK. Se avevate aperto un file, vedrete la parte testuale cambiare a seconda di come avete realizzato il file .map
Per ritornare alla vecchia codifica dell'HexWorkshop basta che torniate alla finestra di prima e scegliate ASCII.
(Non sono riuscito a capire la differenza tra mettere nel primo byte della WORD 0x00 o mettere 0x80... da me si comporta uguale :blink: )
Mi sembra di essere stato abbastanza chiaro. Se avete problemi (ma non penso), indicatemi dove non avete capito.
Ovvio che se scoprite qualcos'altro siete pregati di segnalarlo in questa discussione ;)
PS. Voglio ringraziare RedXIII per avermi sostenuto in questa prova, passandomi del materiale su cui potevo fare esperimenti.
PPS. Ammetto che modificare un file .map non è così intuitivo come modificare un .tbl col blocco note o con i programmi appositi. Sarebbe carino che qualcuno di voi con un po' di voglia di programmare, realizzasse un programmino sulla falsa riga del DarkTabler o Tabular, per realizzare questi CharMaps in modo immediato. Pure uno strumento di conversione TBL->MAP potrebbe essere carino... tanto tutte le informazioni di cui potete avere bisogno per fare un programma del genere ve lo ho date :P
PPPS. Più che altro mi sembra di avere descritto una cosa talmente stupida che mi stupirei maggiormente a sapere di aver trovato qualcosa di nuovo, rispetto a sapere di aver scoperto l'acqua calda :lol:
Non sarà molto utile come cosa, ma almeno hai sfatato un mito :P
Gh, la stoffa del reverser si riconosce sempre :P
Ok... insieme a Mat (o meglio lui ha formulato l'ipotesi e io ho verificato che ha ragione :P ) sono riuscito a capire la funzione di quel 0x80.
Mettiamo il caso di avere una tabella in cui due o più codici hanno uno stesso simbolo... L'HexWorkshop ragiona così. Al momento dell'inserimento, decide di inserire il simbolo col codice più basso. Quindi se abbiamo che 0x10=A e 0xC0=A, quando noi inseriremo A, nella parte coi byte, vedremo inserire 0x10 e non 0xC0.
E qui c'è l'utilità del 0x80. Serve per far capire al programma che si tratta di un byte fittizio e che quindi all'inserimento non dovrà essere scritto quel byte.
Per fare un esempio più concreto... avete presente la tabella ASCII dell'HexWorkShop che alcuni caratteri li visualizza come "." ? Se si va a vedere come è fatto quel .map si può notare che sono tanti 0x802E nei caratteri da non visualizzare. Perchè quando noi premiamo il punto ci viene 2E e non un altro codice? Proprio perchè gli altri codici hanno 0x802E e invece nella "posizione" 2E c'è 0x002E.
Grande Syx... pensa che solo avantieri mi sono accordo della presenza dell'opzione per cambiare la codifica (dall'ASCII all'ANSI, da esempio)... complimenti comunque. :)
Bella sfida, altro mistero svelato.
Grazie tante Syxtem, funziona davvero sto sistema ma non riesco comq. a scrivere direttamente nel codice della mia tabella :( Non esiste davvero nessun programma che permetta, di scrivere direttamente nel codice di una tabella?
Trovato, speriamo che questa volta sia quella buona.