La Place des Développeurs Questions sur les debuggers et l'assembleur z80
pour couper la musique il faut d'abord savoir que dans la config 2+ on utilise la FM-PAC pour jouer la musique
dans le Disc Station c'est la commande APRLOPLL
avec un éditeur Hexa-décimal on peux la trouver vers l'adresse B0000H
qui correspond au Secteur 580H
https://www.msx.org/wiki/MSX-MUSIC_programming
il suffit d'activer le mixeur pour voir que la musique est jouée dans le MM
a noter aussi que les configs MSX2 de BlueMSX ont la FM-Pac et la MoonSound par défaut
dans le Disc Station c'est la commande APRLOPLL
avec un éditeur Hexa-décimal on peux la trouver vers l'adresse B0000H
qui correspond au Secteur 580H
https://www.msx.org/wiki/MSX-MUSIC_programming
il suffit d'activer le mixeur pour voir que la musique est jouée dans le MM
a noter aussi que les configs MSX2 de BlueMSX ont la FM-Pac et la MoonSound par défaut
je voulais simuler un appui , ma routine détecte quand le menu est là et elle simule l'appuie elle sur space ou triggerA pour lancer le jeu
pour les autres jeux des DS , si le jeu est pas le 1er choix de menu il y aura un petit rajout dans la routine avant de simuler l’appuie sur space/triggerA:
ma routine mettra la valeur 01 si c'est le 2eme , 02 si c'est le 3eme etc, au byte $23C0
----
pour la config 2+ le réglage était là parce que j'avais joué à des jeux 2+ , mais je vais me remettre en 2 Edité par CRT Le 10/04/2020 à 09h43
pour les autres jeux des DS , si le jeu est pas le 1er choix de menu il y aura un petit rajout dans la routine avant de simuler l’appuie sur space/triggerA:
ma routine mettra la valeur 01 si c'est le 2eme , 02 si c'est le 3eme etc, au byte $23C0
----
pour la config 2+ le réglage était là parce que j'avais joué à des jeux 2+ , mais je vais me remettre en 2 Edité par CRT Le 10/04/2020 à 09h43
d'abord je vais parler d'un utilitaire bien pratique pour taper et desassembler rapidement quelques codes Z80 : SHEM
on charge le DSK ici : shem.dsk
pour le lancer on tape SHEM et return
on arrive sur cette page
la touche TAB permet d'avoir un menu d'aide
maintenant voici la routine 00141H qui permet de scruter le clavier
et vue sous Shem pour tester un appui sur la touche espace
en fait j'ai tapé les octets du code Z80 dans Shem a partir de 100H puis appué sur CTRL D pour obtenir cette vue
on charge le DSK ici : shem.dsk
pour le lancer on tape SHEM et return
on arrive sur cette page
la touche TAB permet d'avoir un menu d'aide
maintenant voici la routine 00141H qui permet de scruter le clavier
et vue sous Shem pour tester un appui sur la touche espace
en fait j'ai tapé les octets du code Z80 dans Shem a partir de 100H puis appué sur CTRL D pour obtenir cette vue
intéressant SHEM , j'irai voir ca
j'ai un petit bug dans ma routine :
elle simule pas d'appuie sur space/trigger, et si j’appuie moi sur space/triggerA , le menu fait style de lancer le jeu mais revient au menu
(l’hameçonnage est bon , j'avais testé une simple routine qui allait écrire dans un byte dans la ram puis qui rejumpait sans problème dans le code du jeu)
c'est parti pour un peu de debugage
Edité par CRT Le 10/04/2020 à 19h11
j'ai un petit bug dans ma routine :
elle simule pas d'appuie sur space/trigger, et si j’appuie moi sur space/triggerA , le menu fait style de lancer le jeu mais revient au menu
(l’hameçonnage est bon , j'avais testé une simple routine qui allait écrire dans un byte dans la ram puis qui rejumpait sans problème dans le code du jeu)
c'est parti pour un peu de debugage
Edité par CRT Le 10/04/2020 à 19h11
j'ai fait une routine test pour faire un input mais ca fait pas d'input :
j'ai attendu que l'ecran du menu est là , puis j'ai mis dans la mémoire via le debugger
j'ai remplacé c397dd par c3d000 pour m'incruster à $d000 , puis je fait à la fin le c397dd
save etat initial A
32 a0c0 _________ save A en $a0c0
save etat initial E
7b _____________ met E en A
32 a2c0 _________ save A en $a2c0
fait un CALL $9300
3e 15 ___________ met 15 dans A (15 pour registre PSG #15)
1e 00 ___________ met 00 dans E ( 00 pour space ????? ou 01 pour triggerA ???? )
cd 9300 _________ fait un CALL $9300 (WRTPSG)
restaure etat initial E
3a a2c0 _________ met $a2c0 en A
5f _____________ met A en E
restaure etat initial Z
3e ff ___________ met ff en A
fe 00 __________ compare A à 00
restaure etat initial A
3a a0c0 ________ met $a0c0 en A
rejump routine jeu _______
c3 97dd ________ " jp ** " jump $97dd
NOTE : hier j'avais testé une routine test qui elle devait écrire une valeur dans un byte en RAM , elle fonctionne parfaitement donc c'est le call qui fonctionne pas
Edité par CRT Le 11/04/2020 à 09h31
j'ai attendu que l'ecran du menu est là , puis j'ai mis dans la mémoire via le debugger
j'ai remplacé c397dd par c3d000 pour m'incruster à $d000 , puis je fait à la fin le c397dd
save etat initial A
32 a0c0 _________ save A en $a0c0
save etat initial E
7b _____________ met E en A
32 a2c0 _________ save A en $a2c0
fait un CALL $9300
3e 15 ___________ met 15 dans A (15 pour registre PSG #15)
1e 00 ___________ met 00 dans E ( 00 pour space ????? ou 01 pour triggerA ???? )
cd 9300 _________ fait un CALL $9300 (WRTPSG)
restaure etat initial E
3a a2c0 _________ met $a2c0 en A
5f _____________ met A en E
restaure etat initial Z
3e ff ___________ met ff en A
fe 00 __________ compare A à 00
restaure etat initial A
3a a0c0 ________ met $a0c0 en A
rejump routine jeu _______
c3 97dd ________ " jp ** " jump $97dd
NOTE : hier j'avais testé une routine test qui elle devait écrire une valeur dans un byte en RAM , elle fonctionne parfaitement donc c'est le call qui fonctionne pas
Edité par CRT Le 11/04/2020 à 09h31
j'ai recherché les appels a la routine de scrutation du clavier Call 0141H
on y voit que les touches shift , X et space marchent pour lancer le jeu dans le menu
0000 3e06 ld a,06h
0002 cd4101 call 0141h
0005 cb47 bit 0,a shift
0007 2002 jr nz,000bh
0009 cba6 res 4,(hl)
000b 3e05 ld a,05h
000d cd4101 call 0141h
0010 cb6f bit 5,a x
0012 2002 jr nz,0016h
0014 cba6 res 4,(hl)
0016 cb7f bit 7,a
0018 2002 jr nz,001ch
001a cbae res 5,(hl)
001c 3e08 ld a,08h
001e cd4101 call 0141h
0021 cb47 bit 0,a space
0023 2004 jr nz,0029h
0025 cba6 res 4,(hl)
0027 cbae res 5,(hl)
0029 cb6f bit 5,a
002b 2002 jr nz,002fh
002d cb86 res 0,(hl)
002f cb77 bit 6,a
0031 2000 jr nz,0033h
on y voit que les touches shift , X et space marchent pour lancer le jeu dans le menu
0000 3e06 ld a,06h
0002 cd4101 call 0141h
0005 cb47 bit 0,a shift
0007 2002 jr nz,000bh
0009 cba6 res 4,(hl)
000b 3e05 ld a,05h
000d cd4101 call 0141h
0010 cb6f bit 5,a x
0012 2002 jr nz,0016h
0014 cba6 res 4,(hl)
0016 cb7f bit 7,a
0018 2002 jr nz,001ch
001a cbae res 5,(hl)
001c 3e08 ld a,08h
001e cd4101 call 0141h
0021 cb47 bit 0,a space
0023 2004 jr nz,0029h
0025 cba6 res 4,(hl)
0027 cbae res 5,(hl)
0029 cb6f bit 5,a
002b 2002 jr nz,002fh
002d cb86 res 0,(hl)
002f cb77 bit 6,a
0031 2000 jr nz,0033h
a mon avis on ne peut pas simuler un appui , il faut détourner la routine
voici en plus la gestion de la manette qui est juste avant
pas encore trouvé comment les directions sont gérées
0021 f3 di
0022 3a17c0 ld a,(0c017h)
0025 4f ld c,a
0026 0c inc c
0027 3ae0f3 ld a,(0f3e0h)
002a e6df and 0dfh
002c 32e0f3 ld (0f3e0h),a
002f ed79 out (c),a
0031 3e81 ld a,81h
0033 ed79 out (c),a
0035 3e0f ld a,0fh registre 15
0037 1e8f ld e,8fh 10001111
0039 cd9300 call 0093h wrtpsg
003c 3e0e ld a,0eh registre 14 lecture Joystick
003e cd9600 call 0096h rdpsg
0041 2124c0 ld hl,0c024h
0044 77 ld (hl),a
0045 3e0f ld a,0fh registre 15
0047 1ecf ld e,0cfh 11001111
0049 cd9300 call 0093h wrtpsg
004c 3e0e ld a,0eh registre 14 lecture Joystick
004e cd9600 call 0096h rdpsg
0051 a6 and (hl)
0052 77 ld (hl),a C024H
0053 3e06 ld a,06h ligne 6
0055 cd4101 call 0141h scan keyboard matrix
0058 cb47 bit 0,a Shift
005a 2002 jr nz,005eh
005c cba6 res 4,(hl)
005e 3e05 ld a,05h ligne 5
0060 cd4101 call 0141h scan keyboard matrix
0063 cb6f bit 5,a X
0065 2002 jr nz,0069h
0067 cba6 res 4,(hl)
0069 cb7f bit 7,a
006b 2002 jr nz,006fh
006d cbae res 5,(hl)
006f 3e08 ld a,08h ligne 8
0071 cd4101 call 0141h scan keyboard matrix
0074 cb47 bit 0,a Space
0076 2004 jr nz,007ch
0078 cba6 res 4,(hl)
007a cbae res 5,(hl)
007c cb6f bit 5,a
007e 2002 jr nz,0082h
0080 cb86 res 0,(hl)
0082 cb77 bit 6,a
0084 2002 jr nz,0088h
0086 cb8e res 1,(hl)
0088 cb67 bit 4,a
008a 2002 jr nz,008eh
008c cb96 res 2,(hl)
008e cb7f bit 7,a
0090 2002 jr nz,0094h
0092 cb9e res 3,(hl)
0094 f3 di
0095 3a17c0 ld a,(0c017h)
voici en plus la gestion de la manette qui est juste avant
pas encore trouvé comment les directions sont gérées
0021 f3 di
0022 3a17c0 ld a,(0c017h)
0025 4f ld c,a
0026 0c inc c
0027 3ae0f3 ld a,(0f3e0h)
002a e6df and 0dfh
002c 32e0f3 ld (0f3e0h),a
002f ed79 out (c),a
0031 3e81 ld a,81h
0033 ed79 out (c),a
0035 3e0f ld a,0fh registre 15
0037 1e8f ld e,8fh 10001111
0039 cd9300 call 0093h wrtpsg
003c 3e0e ld a,0eh registre 14 lecture Joystick
003e cd9600 call 0096h rdpsg
0041 2124c0 ld hl,0c024h
0044 77 ld (hl),a
0045 3e0f ld a,0fh registre 15
0047 1ecf ld e,0cfh 11001111
0049 cd9300 call 0093h wrtpsg
004c 3e0e ld a,0eh registre 14 lecture Joystick
004e cd9600 call 0096h rdpsg
0051 a6 and (hl)
0052 77 ld (hl),a C024H
0053 3e06 ld a,06h ligne 6
0055 cd4101 call 0141h scan keyboard matrix
0058 cb47 bit 0,a Shift
005a 2002 jr nz,005eh
005c cba6 res 4,(hl)
005e 3e05 ld a,05h ligne 5
0060 cd4101 call 0141h scan keyboard matrix
0063 cb6f bit 5,a X
0065 2002 jr nz,0069h
0067 cba6 res 4,(hl)
0069 cb7f bit 7,a
006b 2002 jr nz,006fh
006d cbae res 5,(hl)
006f 3e08 ld a,08h ligne 8
0071 cd4101 call 0141h scan keyboard matrix
0074 cb47 bit 0,a Space
0076 2004 jr nz,007ch
0078 cba6 res 4,(hl)
007a cbae res 5,(hl)
007c cb6f bit 5,a
007e 2002 jr nz,0082h
0080 cb86 res 0,(hl)
0082 cb77 bit 6,a
0084 2002 jr nz,0088h
0086 cb8e res 1,(hl)
0088 cb67 bit 4,a
008a 2002 jr nz,008eh
008c cb96 res 2,(hl)
008e cb7f bit 7,a
0090 2002 jr nz,0094h
0092 cb9e res 3,(hl)
0094 f3 di
0095 3a17c0 ld a,(0c017h)
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie