unit-test-cpu-dispatch

unit-test-cpu-dispatch

by Aurélien Clergeot -
Number of replies: 5

Bonjour,

J'ai essayé d'ajouter la library libcs212gbcpuext.so à mon projet, mais je n'arrive pas à passer le test unit-test-cpu-dispatch. Voici la sortie :

"8%: Checks: 35, Failures: 32, Errors: 0
unit-test-cpu-dispatch.c:114:F:Cpu Dispatch ALU SUB Tests:test_SUB_A_HLR:0: Opcode 0x96, i=0: (0x0, 0x0) => flag 0x40 (!= 0xC0)
unit-test-cpu-dispatch.c:139:F:Cpu Dispatch ALU SUB Tests:test_SBC_A_HLR:0: Opcode 0x9E, i=0: (0x0, 0x0) => flag 0x40 (!= 0xC0)
unit-test-cpu-dispatch.c:164:F:Cpu Dispatch ALU SUB Tests:test_SUB_A_N8:0: Opcode 0xD6, i=0: (0x0, 0x0) => flag 0x40 (!= 0xC0)
unit-test-cpu-dispatch.c:189:F:Cpu Dispatch ALU SUB Tests:test_SBC_A_N8:0: Opcode 0xDE, i=0: (0x0, 0x0) => flag 0x40 (!= 0xC0) [...]

unit-test-cpu-dispatch.c:318:F:Cpu Dispatch ALU SUB Tests:test_DEC16:0: Opcode 0x3B, i=0: (0x1000) => value 0x1000 (!= 0xFFF) [...]"

Les seuls 3 tests qui passent sont DEC8, CP_A_N8, CHG_U3_HLR, (donc ceux sur les familles que l'on a implémenté dans une étape précédente, si je ne me trompe pas).

Ce qui est étonnant, c'est que unit-test-alu_ext n'a aucun problème.

J'ai bien tapé export LD_LIBRARY_PATH=. dans la console avant de passer les tests, et j'ai bien décommenté la ligne cpu_dispatch_alu_ext(lu, cpu) dans cpu-alu.c. De plus, il n'y pas de problème notable à la compilation (édition des liens OK).

J'ai consulté un assistant, mais nous n'avons pas réussi à trouver le problème, et il m'a conseillé d'utiliser le forum.

EDIT : Au passage, j'utilise ubuntu 18.04

Merci pour votre aide

In reply to Aurélien Clergeot

Re: unit-test-cpu-dispatch

by Jean-Cédric Chappelier -

etes vous sur d'avoir défini proprement vos paires de registres dans cpu_t ? p.ex. la paire A F est-elle dans le bon ordre (little endian) ?
(et si oui j'ai une autre piste, mais je voudrais vérifier celle-ci d'abord)

In reply to Jean-Cédric Chappelier

Re: unit-test-cpu-dispatch

by Aurélien Clergeot -

Oui, les paires de registres sont dans le bon ordre normalement (tous les autres tests passent, seul unit-test-cpu-dispatch a un problème)

In reply to Aurélien Clergeot

Re: unit-test-cpu-dispatch

by Jean-Cédric Chappelier -

Edit 2020.05.01 : ne donne pas explicitement l'ordre des paires.

Bon alors je pense qu'on a ce que je craignais et c'est la raison pour laquelle je vous ai donné ces tests : nous sommes dépendants de votre implémentation mémoire de certaines struct (ici les registres visiblement) : dans cpu_t, mettez les champs dans cet ordre (en fonction d'où vous en êtes, certains champs viendront peut être plus tard mais je les donne ici quand même) :
la paire A F (en little endian)
la paire B C (en little endian)
la paire D E (en little endian)
la paire H L (en little endian)
puis :
PC
SP
alu
bus
IME
IE
IF
HALT
high_ram
write_listener
et enfin :  idle_time.
Et essayez de voir si ça passe et dites moi.

Update du 15 mai :

il semble aussi que les champs de instruction_t soient critiques. Voici l'ordre :
kind
family
opcode
bytes
cycles
xtra_cycles

Update du 20 mai :

et dans alu_output_t :
value
flags

Et pour ceux qui utilisent la seconde bibliothèque fournie (semaine 13), voir aussi ce message pour gameboy_t :
https://moodlearchive.epfl.ch/2019-2020/mod/forum/discuss.php?d=32096#p74977

(c'est le problème de créer une lib dépendante d'une autre partie d'implémentation. Pour bien faire on aurait du faire une interface entre les 2, mais cela aurait beaucoup compliqué la tâche [surtout que l'on adapte ce que l'on vous demande et ce que l'on vous fournit ;-) ])

In reply to Jean-Cédric Chappelier

Re: unit-test-cpu-dispatch

by Aurélien Clergeot -

Yep, après avoir déplacé l'alu, c'est passé !

Merci

PS: je crois que H L est dans l'autre sens en little endian par contre... ^^'

In reply to Aurélien Clergeot

Re: unit-test-cpu-dispatch

by Jean-Cédric Chappelier -

oui bien sûr (l'habitude d'écrire comme ça ;-) ) : je viens de changer la formulation (bon, ok !...)