Page 1 sur 1
instruction SET
Publié : mer. 18 juin 2014 09:17
par touko
Je suis en train de tester cette superbe instruction ..
Sur la doc elle est certifié pour adc,sbc,and,eor,or .
Est ce que quelqu'un sait si d'autres opcodes marchent avec ??
J'ai testé avec mednafen, mais bon comme je sais pas si le 6280 est 100% emulé correctement j'ai des doutes sur d'autres instructions .
J'ai vu une utilisation bizarre de set dans du code desassemblé
Code : Tout sélectionner
l_4fdb: SET
.db $eb
TIA $d3db, $c2cb, $b2ba
TAX
LDX #$9a
STA [$8a]
Si y'a des infos dessus je suis preneur, merci d'avance les gars .
Re: instruction SET
Publié : mer. 18 juin 2014 13:51
par MooZ
Pour plus d'infos, il y a un chapître dédié dans la doc de Charles: 2.3) T flag
http://cgfm2.emuviews.com/txt/pcetech.txt
Sinon ton code est bizarre. Ou alors le désassembleur a un bug et l'opcode #$eb existe vraiment.
Le flag T est remis à zéro après l'instruction qui suit SET. Par exemple si tu as:
L'instruction en l0 ajoutera 16 à l'octet situé en $2004 (X vaut #$04). Par contre l1 ajoutera 2 au registre A.
Ainsi dans ton code, le set ne sert rigoureusement à rien.
Re: instruction SET
Publié : mer. 18 juin 2014 14:51
par touko
Merci pour les infos mooz, je vais lire ça de suite ..
Ce petit bout de code est tiré du désassemblage de seiya monogatari que m'avait filé tom ..
En fait c'est ce passage que je comprends pas
Sinon des .db $xx, y'en a plein dedans .
J'avais compris comment set marchait, mais je trouvais bizarre que des instructions comme trb,tsb ne marchent pas comme adc,and etc ..
Re: instruction SET
Publié : mer. 18 juin 2014 15:09
par MooZ
A mon avis ce bout de code est du pâté.
Code : Tout sélectionner
l_4fdb: SET
.db $eb
TIA $d3db, $c2cb, $b2ba
TAX
LDX #$9a
STA [$8a]
Si tu traduis, ça fait.
Code : Tout sélectionner
l_4fdb: SET ; T flag = 1
.db $eb ; Opcode inconnu. Il sera interprété comme un NOP. Le flag T est remis à 0.
TIA $d3db, $c2cb, $b2ba ; Transfère $b2ba octets depuis $d3db en incrémentant l'addresse source vers $c2cb et $c2cc alternativement.
TAX ; Transfère la valeur du registre A vers X.
LDX #$9a ; Initialise X à #$9a.
STA [$8a] ; Stocke la valeur du registre A vers l'octet pointé par $208a/$208b.
Pour résumé, WTF!

Re: instruction SET
Publié : mer. 18 juin 2014 15:20
par touko
Par contre dans la doc que tu m'as donnée charles donne comme instructions modifiées par SET adc, and,eor,or, mais pas sbc, hors dans le rip de code, sbc marche aussi,et sous mednafen aussi .
Sinon pour le WTF, bah je sais pas, mon interrogation est là en fait ..
.db #$ comme si on définissait un tableau d'1 octet en plein milieu du code, mais avec un SET avant dont je saisi pas l'utilité .
Compiler un:
set
.db #$xx
Ne renvoie pas d'erreur sous pceas .
Je peux mettre tout le rip si tu veux, en fait ce sont des routines de décompressions, et de gestion du CD,et plein d'autres choses développées pour ce jeu .
PS: Tom a utilisé ton désassembleur

Re: instruction SET
Publié : mer. 18 juin 2014 15:55
par MooZ
Je m'en doutais

Etripator est assez "bête". Tu lui donnes une soupe d'octet et il essaye de transformer ça en assembleur. Ca donne des trucs bizarres quand il essaye de desasselbler des données ou quand l'addresse de décodage est décalée.
Un CD est particulièrement tendu à désassembler off-line. Tu ne sais pas où le code va être copier en RAM et surtout ce qui s'y trouve déjà.
Re: instruction SET
Publié : mer. 18 juin 2014 15:57
par touko
Un peu plus du code
Code : Tout sélectionner
ROL <$1d
ORA <$0c, X
TSB <$fc
l_4fdb: SET
.db $eb <------------- LA
TIA $d3db, $c2cb, $b2ba
TAX
LDX #$9a
STA [$8a]
TST #$7b, <$73
.db $6b
.db $63
.db $5c
CSL
JMP $3d45 ;// routine in sys ram
AND <$2e, X
ROL <$1f
RMB1 <$10
PHP
ORA [$f9, X]
SBC [$eb] <------------- ET LA
CPX <$dc
CMP <$ce, X
Regardes entre le "LA" et le "ET LA", coïncidence ???
Je m'en doutais

Etripator est assez "bête". Tu lui donnes une soupe d'octet et il essaye de transformer ça en assembleur. Ca donne des trucs bizarres quand il essaye de desasselbler des données ou quand l'addresse de décodage est décalée.
Un CD est particulièrement tendu à désassembler off-line. Tu ne sais pas où le code va être copier en RAM et surtout ce qui s'y trouve déjà.
C'est la faute au dev qui a developpé un desassembleur pourri

Re: instruction SET
Publié : mer. 18 juin 2014 16:14
par MooZ
Ce bout de code m'a l'air foutrement bizarre

Re: instruction SET
Publié : mer. 18 juin 2014 19:03
par touko
Bah ouai, à moins que le desassemblage se soit vraiment mal fait, mais c'est vraiment bizarre ..
Sinon ça voudrai dire que SET est pour le TIA, aucun intérêt,en plus de ne surement pas marcher du tout. ..
Re: instruction SET
Publié : mer. 18 juin 2014 19:35
par MooZ
Le SET est surtout pour le db #$eb. Un SET sur un NOP c'est un peu inutile je trouve

Re: instruction SET
Publié : mer. 18 juin 2014 20:15
par touko
Oui je pense aussi, mais si y'a pas d'erreur, c'est vraiment étrange comme code .
J'ai essayé de coder un truc pour voir, et bah rien de concluant .
Re: instruction SET
Publié : jeu. 19 juin 2014 15:12
par Orion_
c'est pas du code executé a mon avis, si y'a un jmp en plein milieu, le code qui est après n'a que peu de chance d'être executé
surtout quand tu vois ça:
TAX
LDX #$9a
ça n'a pas de sens de trasher X après avoir sauver A dans X
Re: instruction SET
Publié : jeu. 19 juin 2014 18:38
par touko
Ouai y'a pas mal d'incohérences dans ce code, presque à croire que les pros, n'étaient pas tellement si pros que ça en fin de compte .
J'ai aussi vu pas mal de trucs dans le genre:
tii source, dest,$2
Vachement rapide comme truc, niveau codage surement, mais niveau exécution, pas vraiment ..
Re: instruction SET
Publié : mar. 24 juin 2014 12:37
par Orion_
c'est aussi peut être a cause des macro
c'est tellement galère de coder en 6502 que il devait y avoir pas mal de macro avec au final plus du scripting que de la prog.
j'ai vu ça pas mal dans les sources leaké de chez plus quel jeu CD
Re: instruction SET
Publié : mar. 24 juin 2014 17:41
par touko
Ouaip les routines du bios Cd en sont remplies ..
Ou des trucs (moins graves certe) du style ldx #$00 ..