30

J'ai jeté un coup d'oeil et il est *vraiment* plus propre ton code, j'ai trop honte grin
Mais merci c'est bien ça! Je me demande pourquoi les émus genre VBA font des trucs aussi bourrins, mais si on regarde (p.ex. TGB) finalement c'est un peu la même chose, juste écrit en l33t:
case 0x27://DAA :state 4
  tmp.b.h=REG_A&0x0F;
  tmp.w=(REG_F&N_FLAG)?
  (
    (REG_F&C_FLAG)?
      (((REG_F&H_FLAG)? 0x9A00:0xA000)+C_FLAG):
      ((REG_F&H_FLAG)? 0xFA00:0x0000)
  )
  :
  (
    (REG_F&C_FLAG)?
      (((REG_F&H_FLAG)? 0x6600:((tmp.b.h<0x0A)? 0x6000:0x6600))+C_FLAG):
      (
        (REG_F&H_FLAG)?
          ((REG_A<0xA0)? 0x0600:(0x6600+C_FLAG)):
          (
            (tmp.b.h<0x0A)? 
              ((REG_A<0xA0)? 0x0000:(0x6000+C_FLAG)): 
	      ((REG_A<0x90)? 0x0600:(0x6600+C_FLAG))
          )
      )
  );
  REG_A+=tmp.b.h;
  REG_F=ZTable[REG_A]|(tmp.b.l|(REG_F&N_FLAG));
//  FLAGS(REG_A,tmp.b.l|(REG_F&N_FLAG));
  break;


Tu n'émules pas le son GC? smile C'est pourtant passionnant, tu devrais vraiment quand tu trouveras le temps miam

./29> Ouéouéouéoué tongue Les side effects y a pas besoin de chercher très loin de toute: si t'as pas Aero, la console est redessinée de noir si tu passes une autre fenêtre par-dessus (donc il faut constamment mettre à jour l'affichage, et ça devient vraiment hacky si tu dois intercepter les WM_PAINT pour cette fenêtre via un system hook) et si la console défile bah c'est foutu aussi.
Un autre side effect du GetForegroundWindow c'est un truc du genre si tu perds le focus entre la création de la fenêtre et le démarrage de l'appli:
[URL=http://img39.imageshack.us/i/img225.png/][IMG]http://img39.imageshack.us/img39/5715/img225.th.png[/IMG][/URL]

La lib dont Crystal parlait au ./21 c'était une réimplémentation de la console avec des fonctions graphiques au pixel en plus si je me rappelle bien, pas tout à fait pareil ^^
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

31

Ah ben tiens pour ton BombJack tu devrais regarder le contenu de la VRAM. Je sais plus exactement quoi mais il reconfigure en dynamique un truc qui a à voir avec la fenêtre superposée et/ou les adresses de départ des banques de tiles utilisées, ce qui fait que tu vois pas le menu actuellement. J'avais eu le problème mais résolu par la suite normalement tongue
Sinon si tu penses que mon code est propre je te suggère de jeter un oeil à CrystalBoy.Emulation/GameBoyMemoryBus.Rendering.cs. Mwahahahaha, c'est tout bien dégueu comme il faut trivil Mais en même temps voilà, faut bien que ça fonctionne...
(Quand au son j'ai prévu de m'en occuper un jour, et je sais que c pas hyper compliqué en soi mais #flemme# ^^)

Et pour Kevin (./28): Non, elle me convient pas parce que j'aime pas les GN(O)U mais c'est pas le problème. Je tiens surtout pas à avoir un code qui ressemble à ça.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

32

Nan mais y a vraiment rien qui se passe wink appuyer sur START n'a aucun effet et puis normalement tu as le son qui accompagne les lettres qui s'affichent à l'écran ^^ là j'ai juste la musique de fond (qui part dans tous les sens comme le veulent les compos d'Alberto Jose Gonzales love). Si je modifie un peu les timings (genre CPU = 4/3 system clock) le menu apparaît et je peux jouer, mais je comprends pas trop ce qui se passe, d'autant que le jeu ne tourne pas sans interruptions, donc difficile à déboguer ^^'

Ok pour le LCD, là ça ressemble déjà bcp plus à un ému classique grin
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

33

GoldenCrystal (./31) :
Et pour Kevin (./28): Non, elle me convient pas parce que j'aime pas les GN(O)U mais c'est pas le problème. Je tiens surtout pas à avoir un code qui ressemble à ça.

LOL, c'est vrai que c'est un peu exagéré! (Une fois au début de chaque fichier, ça suffit. wink)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

34

Euh oui c'est quoi ce délire ? trifus

35

fichier généré
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

36

Si tu regardes il a plein de templates, par exemple add16.cs et il peut l'appliquer à n'importe quel registre (j'imagine), donc ça doit être une sorte d'include avec paramètre, j'ai pas regardé en détail.
Tu es un peu obligé si tu vises la vitesse max. Perso j'ai un truc comme ça:
u8 opcode = op_readb();
u8 upper_digit = opcode >> 6, mid_digit = opcode >> 3 & 7, low_digit = opcode & 7;
switch (upper_digit) {
case 0:
    switch (low_digit) {
    case 1:
        if ((opcode & 010) == 0) {    // 00 dd0 001 [nn nn] -> ld dd, nnnn
            op_dd_write(mid_digit >> 1, pc_readw());
            return 3;
        }
        else {    // 00 dd1 001 -> add hl, dd
            add16(R_HL, op_dd_read(mid_digit >> 1));
            return 2;
        }
    }
}

Mais c'est plus lent parce qu'il faut décoder avec 2 ou 3 switches + l'opérande (op_dd_read dans mon cas), au lieu d'en avoir un seul et pas de décodage:
switch (opcode = op_readb()) {
// ld dd, nnnn - 3 cycles
case 0001:
    regs.BC.w = pc_readw();
    return 3;
case 0021:
    regs.DE.w = pc_readw();
    return 3;
case 0041:
    regs.HL.w = pc_readw();
    return 3;
case 0061:
    regs.SP = pc_readw();
    return 3;
// add hl, dd - 2 cycles
case 0011:
    add16(&regs.HL.w, regs.BC.w);
    return 2;
case 0031:
    add16(&regs.HL.w, regs.DE.w);
    return 2;
case 0051:
    add16(&regs.HL.w, regs.HL.w);
    return 2;
case 0071:
    add16(&regs.HL.w, regs.SP);
    return 2;
}

Et avec son truc tu remplaces les appels à add16 (lent) par le code correspondant, inline.
Cette dernière approche est aussi plus prône aux erreurs (j'ai dû éditer 2 fois ces pauvres lignes quand même et je suis toujours pas sûr que c'est juste grin).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

37

Bon finalement Bomb Jack est loin d'être si trivial à émuler tongue tu as bien du bol que ça ait fonctionné "par hasard" du premier coup GC ^^
En fait ce con de jeu (désolé Alberto si tu me lis) il fait une jolie boucle while dans l'interruption VBLANK pour attendre que LY arrive à une certaine valeur (i.e. que le balayage atteigne une certaine ligne), sauf qu'il active les interruptions comme ça au milieu de nulle part, sans garantie que le LCD n'a pas déjà dépassé cette ligne... dans ce cas il attend une frame entière, et dès qu'il retourne de l'interruption il va y rerentrer car une autre VBLANK s'est passée entre deux, et voilà ça boucle.
Sur une vraie Game Boy il se retrouve "par hasard" (enfin c'est peut être calculé) à la ligne 10h, et il attend la 14h je crois, donc ça passe. Chez moi il y arrive à la ligne 18h, y a probablement une accumulation de retard, ou alors je fais démarrer le jeu à un autre moment que la vraie GB.
'Fin voilà pour l'anecdote grin
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

38

Brunni (./37) :
Sur une vraie Game Boy il se retrouve "par hasard" (enfin c'est peut être calculé)
Je pense pas que ce soit un hasard, sur le matériel physique le délai entre VBLANK et le balayage d'une ligne quelconque est fixe. Après le CPU te rajoute quelques cycles d'imprécision, mais suffit de prendre un peu de marge smile

Enfin j'imagine qu'il n'y a pas de HBLANK sur GB, sinon leur méthode est crade ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

39

Ben si, il y a un registre LYC (vcount) avec déclenchement d'une interruption lorsque LY (ligne courante) = LYC... Donc oué c'est assez crade ^^
Et pour qu'il se retrouve à la ligne 10h lors de l'activation des IRQ, ça veut dire que beaucoup de code s'est exécuté avant qu'il n'arrive là, donc à mon avis ce n'était pas prévu, mais il n'a pas remarqué parce que ça marchait par hasard tongue Après peut être que c'est un dieu et que c'était calculé cheeky
Enfin je sais pas, mais sur GB c'est vraiment une bonne pratique d'attendre d'être dans un état sûr avant d'activer les interruptions, vu les conséquences que ça peut avoir sur le débogage s'il se passe un truc comme celui là happy
D'autant qu'il lui suffirait de faire un HALT (équivalent du idle() sur TI) pour se synchroniser et être sûr. En effet, je comprends pas trop mais on dirait que sur GB l'IRQ est lancée au sortir du HALT même si les interruptions sont désactivées. Je sais pas trop pourquoi (c'est ptet une erreur de logique du CPU, enfin je vois pas bien l'intérêt que ça a), mais Kirby's Dream Land 2 a vraiment l'air d'y tenir...
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

40

Il ne faut pas sous estimer les bug hardware ^^ (ou les bugs d'émulation tongue wink)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.