La Place des Développeurs Questions sur les debuggers et l'assembleur z80
Reprise du message précédent
sans être indiscret tu travaille sur quel jeu ?je te met 2 jeux qui ont étés bricolés Maze Runner et The KIng of Swamp , en fait les Disc Station 27-2 et 30-2 ont vu leur loader shuntés pour demarrer directement les jeux mais ils font toujours 720k
Downloads.rar
un petit utilitaire qui permet de fouiller dans les DSk
https://sites.google.com/site/slumpmax/development/msx-home-computer/msxsee
https://sites.google.com/site/slumpmax/development/msx-home-computer/msxsee
bon j'ai un peu bloqué
Voila la base de l'algo pour "king swamp II" #32-2
note: j'ai l'habitude pour différencier dans mes notes de mettre $ devant l'adresse quand je parle en boutisme comme le cpu en little-indian , et derriere quand je parle en big-indian
J'ai analysé la ram:
-Dès que le menu est là (et meme 1ou 2seconde avant qu'il apparaisse à l’écran) , le byte 000000$ de la "ram mapped" a la valeur c3 ,
-quand le jeu est lancé le byte 000012$ de la "ram mapped" a la valeur 26
l'algo à faire est :
Si "000000$ = C3" ET "000012$ ≠ 26" ALORS "mettre input space"
ce qui donne en langage z80 :
sauvegarde de A avant de commencer
32 xx xx save A quelque part dans la ram avant de commencer
regarde si $000000 = c3
3A 00 00 charge $000000 en A
FE c3 compare à C3
28 02 si = c3 va à regarde si $120000 ≠ 26
18 07 va à retour routine jeu
regarde si $120000 = 26
3A 12 00 charge $120000 en A
FE 26 compare à 26
20 06 si pas 26 va a mettre input espace
retour routine jeu
3A xx xx remet A comme avant
C3 xx xx rejump routine jeu
mettre input espace
xxxxxx
xxxxxxx
retour routine jeu
3A xx xx remet A comme avant cette routine
C3 xx xx rejump routine jeu
!! peut-être il y a des fautes car va t il aller à l'adresse sur 2bytes dans la bonne bank ?? je ne connais le mapping et la bank
Je bloque sur le memory mapping , je ne sais pas ou mettre ca dans la disquette, ni dans quel bank il sera dans le memory mapping du MSX
Pour l'input je comprend pas comment le faire en langage machine , me semble c'est que expliqué pour le logiciel assembleur
je vais aussi essayer pour faire ca plus propre de remplacer l’écran menu par une image noire (comme ca on ne le voit plus une 1/2s) et enlever la musique du menu (sinon on l'entend 2s)
Edité par CRT Le 05/04/2020 à 15h32
Voila la base de l'algo pour "king swamp II" #32-2
note: j'ai l'habitude pour différencier dans mes notes de mettre $ devant l'adresse quand je parle en boutisme comme le cpu en little-indian , et derriere quand je parle en big-indian
J'ai analysé la ram:
-Dès que le menu est là (et meme 1ou 2seconde avant qu'il apparaisse à l’écran) , le byte 000000$ de la "ram mapped" a la valeur c3 ,
-quand le jeu est lancé le byte 000012$ de la "ram mapped" a la valeur 26
l'algo à faire est :
Si "000000$ = C3" ET "000012$ ≠ 26" ALORS "mettre input space"
ce qui donne en langage z80 :
sauvegarde de A avant de commencer
32 xx xx save A quelque part dans la ram avant de commencer
regarde si $000000 = c3
3A 00 00 charge $000000 en A
FE c3 compare à C3
28 02 si = c3 va à regarde si $120000 ≠ 26
18 07 va à retour routine jeu
regarde si $120000 = 26
3A 12 00 charge $120000 en A
FE 26 compare à 26
20 06 si pas 26 va a mettre input espace
retour routine jeu
3A xx xx remet A comme avant
C3 xx xx rejump routine jeu
mettre input espace
xxxxxx
xxxxxxx
retour routine jeu
3A xx xx remet A comme avant cette routine
C3 xx xx rejump routine jeu
!! peut-être il y a des fautes car va t il aller à l'adresse sur 2bytes dans la bonne bank ?? je ne connais le mapping et la bank
Je bloque sur le memory mapping , je ne sais pas ou mettre ca dans la disquette, ni dans quel bank il sera dans le memory mapping du MSX
Pour l'input je comprend pas comment le faire en langage machine , me semble c'est que expliqué pour le logiciel assembleur
je vais aussi essayer pour faire ca plus propre de remplacer l’écran menu par une image noire (comme ca on ne le voit plus une 1/2s) et enlever la musique du menu (sinon on l'entend 2s)
Edité par CRT Le 05/04/2020 à 15h32
pour sauvegarder A il y l'instruction PUSH AF qui sauvegarde le registre
pour le restorer POP AF
https://fr.wikibooks.org/wiki/Programmation_Assembleur_Z80/Jeu_d_instructions
pour le restorer POP AF
https://fr.wikibooks.org/wiki/Programmation_Assembleur_Z80/Jeu_d_instructions
j'ai regardé le loader modifié de maze runner en fait c'est un chargement par secteur
001f fd2ac1fc ld iy,(0fcc1h) Slot 0
0023 dd214100 ld ix,0041h DISSCR dissable screen display
0027 cd1c00 call 001ch Appel 1CH CALSLT
002a af xor a
002b 32ffc0 ld (0c0ffh),a
002e 2103c0 ld hl,0c003h
0031 115fc0 ld de,0c05fh
0034 010800 ld bc,0008h
0037 edb0 ldir
0039 1157c0 ld de,0c057h
003c 0e09 ld c,09h String output DE=adress of string
003e cd7df3 call 0f37dh Appel DOS
0041 0e1a ld c,1ah Set disk transfert adress
0043 110001 ld de,0100h
0046 cd7df3 call 0f37dh Appel DOS
0049 118005 ld de,0580h sector number
004c 21001f ld hl,1f00h H=number of sector to read, L=drive number
004f 0e2f ld c,2fh Absolute sector read
0051 cd7df3 call 0f37dh Appel DOS
0054 c30001 jp 0100h
0057 4c ld c,h
0058 6f ld l,a
0059 61 ld h,c
005a 64 ld h,h
005b 69 ld l,c
005c 6e ld l,(hl)
005d 67 ld h,a
001f fd2ac1fc ld iy,(0fcc1h) Slot 0
0023 dd214100 ld ix,0041h DISSCR dissable screen display
0027 cd1c00 call 001ch Appel 1CH CALSLT
002a af xor a
002b 32ffc0 ld (0c0ffh),a
002e 2103c0 ld hl,0c003h
0031 115fc0 ld de,0c05fh
0034 010800 ld bc,0008h
0037 edb0 ldir
0039 1157c0 ld de,0c057h
003c 0e09 ld c,09h String output DE=adress of string
003e cd7df3 call 0f37dh Appel DOS
0041 0e1a ld c,1ah Set disk transfert adress
0043 110001 ld de,0100h
0046 cd7df3 call 0f37dh Appel DOS
0049 118005 ld de,0580h sector number
004c 21001f ld hl,1f00h H=number of sector to read, L=drive number
004f 0e2f ld c,2fh Absolute sector read
0051 cd7df3 call 0f37dh Appel DOS
0054 c30001 jp 0100h
0057 4c ld c,h
0058 6f ld l,a
0059 61 ld h,c
005a 64 ld h,h
005b 69 ld l,c
005c 6e ld l,(hl)
005d 67 ld h,a
j'ai utilisé ce logiciel pour dessasembler
http://www.inkland.org.uk/dz80/
et j'ai ajouté les commentaires avec un traitement de texte (ConText)
http://www.inkland.org.uk/dz80/
et j'ai ajouté les commentaires avec un traitement de texte (ConText)
Pour la pile je sais , mais j'ai l'habitude de pas m'en servir dans le hacking (toujours peur qu'il efface la plus ancienne valeur de la pile et que le prog doit s'en resservir)
Edité par CRT Le 04/04/2020 à 17h52
Edité par CRT Le 04/04/2020 à 17h52
pour les disc station de mon cotés j'avais trouvé 2 liens sympa :
http://eggerland.msxblue.com/msxjapan.htm
http://giovannimax.blog120.fc2.com/blog-entry-106.html
http://eggerland.msxblue.com/msxjapan.htm
http://giovannimax.blog120.fc2.com/blog-entry-106.html
je suis entrain d'analyser la doc http://map.grauw.nl/resources/msx_io_ports.php
Pour simuler un appuie sur la touche A de la manette si j'ai bien compris:
faut mettre la valeur 01 au port B (r#15) du PSG GPIO
ce byte il est à quel adresse dans le memory mapping ? Edité par CRT Le 05/04/2020 à 15h58
Pour simuler un appuie sur la touche A de la manette si j'ai bien compris:
faut mettre la valeur 01 au port B (r#15) du PSG GPIO
ce byte il est à quel adresse dans le memory mapping ? Edité par CRT Le 05/04/2020 à 15h58
le Msx ne marche pas avec des adresses en mémoire pour le clavier et les manettes
il se sert de ports I/O input/output
le plus facile est de faire appel aux Routines du Bios
000D5H GTSTCK get joystick status
et
000D8H GTTRIG get trigger button status
quelques livrespour aider : http://www.msxlegend.sitew.com/Livres_et_Notices.A.htm
télécharge pratique du MSX2
et regarde la page 39 du PDF
il se sert de ports I/O input/output
le plus facile est de faire appel aux Routines du Bios
000D5H GTSTCK get joystick status
et
000D8H GTTRIG get trigger button status
quelques livrespour aider : http://www.msxlegend.sitew.com/Livres_et_Notices.A.htm
télécharge pratique du MSX2
et regarde la page 39 du PDF
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie