Auteur Sujet: rom test space invaders  (Lu 4830 fois)

Hors ligne spectroman

  • alias Tondu
  • Beta Testeur
  • *
  • Messages: 2117
  • Localisation: aubagne
    • Voir le profil
rom test space invaders
« le: Dimanche 15 Septembre 2013, 20:30:28 pm »
  • salut,

    suite à ce sujet, j'ai commencé a compléter la rom de test (taito) que l'on trouve sur le net. je voudrai ajouter au moins 4 fonctions:
    - le test des crc32 des ROMs
    - le test des shifters video
    - le test des sons de la version midway
    - une mire pour régler l'écran

    J'ai déjà fait le crc32, au début j'utilisais as8085, aslink et make, mais j'ai pas trouvé de debuggeur compatible pour charger le hex.
    Du coup, j'ai adapté le programme pour GNUSim8085, mais il est vraiment limité (on ne peut pas charger du code ou des data depuis des fichiers, pas de MACRO...) et il est pas très stable.

    Quelqu'un a t'il des outils corrects (simulateur ou mieux : un bon compilateur C (pas SmallC)), car là je perd vraiment du temps et je peux pas faire de bons tests (calcul de crc de 2K par exemple).

    Ca fait 17 ans que j'ai plus fait d'asm sur i8080 (1ere année d'IUT GEII). Si vous voyez des optimisations (sur la taille du code et des data), n’hésitez pas.

    merci

    exemple: lxi sp,2400H
    lxi H, ADDR
    lxi B, 01234h
    lxi D, 04567h
    mvi A, 001h
    sta 01000h
    mvi A, 080h
    sta 01001h
    call crc32
    end: jmp end

    ADDR: db 00H, 10H
    num:  db 2H, 0H
    crc:  db 0,0,0,0

    ; crc32:
    ;
    ; crc = 0xffffffff
    ; for (;size > 0; size--) {
    ;     crc = crc ^ *data++
    ;     for (i = 8; i > 0; i--) {
    ;         if (crc & 1)
    ;             crc = (crc >> 1) ^ 0xEDB88320
    ;         else
    ;             crc = crc >> 1;
    ;     }
    ; }
    ; crc = crc ^ 0xffffffff;
    ;
    ; HL => address of the parameters's list
    ;       data addrL (+0), AddrH (+1)
    ;       data SizeL (+2), SizeH (+3)
    ;       crc  dataL (+4), dataML(+5)
    ;       crc  dataMH(+6), dataH (+7)

    crc32: push PSW; save context
    push B              
    push D
    push H

    ; load and push rom's address
    mov A,M
    mov E,A
    inx H
    mov A,M
    mov D,A
    inx H

    ; load and push rom's size
    mov A,M
    mov C,A
    inx H
    mov A,M
    mov B,A
    inx H
    push H; save CRC address
    push B; store size

    xchg; put rom's address in H

    ; set crc to 0xffffffff
    mvi B,0FFh
    mvi C,0FFh
    mvi D,0FFh
    mvi E,0FFh

    bytelp: mov A,M; read rom's data
    inx H
    push H

    mvi H,8; rotate 8 times, i = 8
    xra E; CRC = CRC ^ data
    mov E,A

    bitlp:  mov A,E; if (crc & 1 == 0)
    ani 1
    jz rot1; goto rot1

    ; CRC = (CRC >> 1) ^ 0EDB88320h
    ;                     BBCCEEDD
    mov A,B
    rar
    push PSW
    xri 0EDh
    mov B,A

    pop PSW
    mov A,C
    rar
    push PSW
    xri 0B8h
    mov C,A

    pop PSW
    mov A,D
    rar
    push PSW
    xri 083h
    mov D,A

    pop PSW
    mov A,E
    rar
    xri 020h
    mov E,A
    jmp ebitlp

    ; CRC = (CRC >> 1)
    rot1: mov A,B
    rar
    mov B,A

    mov A,C
    rar
    mov C,A

    mov A,D
    rar
    mov D,A

    mov A,E
    rar
    mov E,A

    ebitlp: dcr H; if (--i > 0)
    jnz bitlp; goto bitlp

    pop H
    xthl
    dcx H
    mov A,H; if (--size > 0)
    ora L
    xthl
    jnz bytelp; goto bytelp

    pop H; restore dummy
    pop H; restore CRC address

    ; CRC = CRC ^ 0FFFFFFFFh
    mov A,B;
    xri 0FFh;
    mov M,A;
    inx H;

    mov A,C;
    xri 0FFh;
    mov M,A;
    inx H;

    mov A,D;
    xri 0FFh;
    mov M,A;
    inx H;

    mov A,E;
    xri 0FFh;
    mov M,A;

    pop H; restore context
    pop D
    pop B
    pop PSW

    ret
    « Modifié: Vendredi 20 Septembre 2013, 22:52:58 pm par spectroman »

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #1 le: Lundi 16 Septembre 2013, 18:22:34 pm »
  • up,

    un bon simulateur svp :'(, avec GNUSim8085, je suis obligé de tester des petits bouts de code sinon ça plante.

    j'ai fait le code de test des shifters vidéo.

    exemple: lxi sp,2400H
    lxi H, ADDR
    mvi A, 0AAh
    sta 01000h
    mvi A, 055h
    sta 01001h
    mvi A, 004h
    sta 01002h
    mvi A, 0A5h
    sta 01003h
    mvi A, 0FFh
    sta 01004h
    call tstshf
    end: jmp end

    ADDR: db 00h, 10h

    ; tstshf: test the hardware shifter
    ; H is a pointer to this structure :
    ;     (+00) = X
    ;     (+01) = Y
    ;     (+02) = shift value
    ;     (+03) = test value
    ;     (+04) = result (0 = OK, 1 = KO)
    tstshf: push PSW
    push H
    push D

    mov E,M
    inx H
    mov D,M
    xchg

    mov A,M
    out 004h
    inx H
    mov A,M
    out 004h
    inx H
    mov A,M
    out 002h
    inx H
    in 003h
    xra M
    jz tst1
    mvi A,001h
    tst1: inx H
    mov M,A
    pop D
    pop H
    pop PSW
    ret
    « Modifié: Mercredi 18 Septembre 2013, 19:33:59 pm par spectroman »

    Hors ligne AsPiC

    • Admin
    • Dieu de l' Arcade
    • *****
    • Messages: 8123
    • Localisation: Les Herbiers (85)
    • Present pour Koh Lanta Retrogaming Party 2069 !
      • Voir le profil
      • Mon compte Instagram !!
    rom test space invaders
    « Réponse #2 le: Lundi 16 Septembre 2013, 22:14:39 pm »
  • Bravo pour ton boulot ^- Et désolé de pas pouvoir t'aider :-[


    Recherche tout élément de Jeutel Galaktron - "AsPiC c'est : no WIP but just RIP" - kos71 2014

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #3 le: Mardi 17 Septembre 2013, 14:17:21 pm »
  • avec un peu de réflexion, j'ai trouvé un simulateur complet (écran, entrée) avec un débogueur intégré :

    mamed -debug xxx   :D




    Hors ligne funkycochise

    • Team
    • Dieu de l' Arcade
    • *****
    • Messages: 6421
    • Localisation: Nancy
    • 8 bits generation
      • Voir le profil
    rom test space invaders
    « Réponse #4 le: Mardi 17 Septembre 2013, 15:28:21 pm »
  • excellent !

     :-*

    Hors ligne Little_Rabbit

    • Arcade Myth
    • *
    • Messages: 4660
    • Localisation: Nantes
    • The early 80's : the arcade golden age !!
      • Voir le profil
    rom test space invaders
    « Réponse #5 le: Mardi 17 Septembre 2013, 23:03:25 pm »
  • Salut,

    Superbe projet, et superbement mené ! BRAVO !!

    Effectivement, je n'avais pas pensé à MAME, mais c'est l'idéal !!  ^-^

    A+
    Recherche dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Xenon, Baby Pac Man, Gottlieb des années 80 (Spirit, Amazon Hunt, ...). Divers :  Ice Cold Beer
    Trois fois rien quoi ! :D

    Hors ligne Persecutor

    • Pampers Dealer
    • Hi-Score Buster
    • *
    • Messages: 3184
    • Localisation: FR 33 BDX
    • Presque Racer
      • Voir le profil
      • The Arcade DataBase
    rom test space invaders
    « Réponse #6 le: Mercredi 18 Septembre 2013, 14:00:51 pm »
  • Joli  ^-
    Les jeux de moto c'est nul ! Y'a pas de volant ...

    Les bornes japonaises c'est comme les vaisseaux de la prélogie star wars,
    c'est beau, lisse et parfaitement fonctionnel;
    Alors que les bornes old school c'est un peu comme le Faucon Millenium qui passe jamais en vitesse lumière,
    c'est chiant mais c'est tellement plus attachant ...

    WIP s | Jeutel 25" RGB Jamma | Générique 17" 31khz | Mini BarTop TFT | Race Pod PC |

    http://persecutor.tamdb.net

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #7 le: Jeudi 19 Septembre 2013, 20:27:21 pm »
  • dernière mise a jour avant le BGS...

    j'ai optimisé au max le code du crc32
    ; crc32:
    ;
    ; crc = 0xffffffff
    ; for (;size > 0; size--) {
    ;     crc = crc ^ *data++
    ;     for (i = 8; i > 0; i--) {
    ;         if (crc & 1)
    ;             crc = (crc >> 1) ^ 0xEDB88320
    ;         else
    ;             crc = crc >> 1;
    ;     }
    ; }
    ; crc = crc ^ 0xffffffff;
    ;
    ; HL => address of the parameters's list
    ;       data addrL (+0), AddrH (+1)
    ;       data SizeL (+2), SizeH (+3)
    ;       crc  dataL (+4), dataML(+5)
    ;       crc  dataMH(+6), dataH (+7)
    .area CRC32 (REL)
    crc32::
    push PSW; save context
    push B               
    push D
    push H

    ; load and push rom's address
    mov A,M
    mov E,A
    inx H
    mov A,M
    mov D,A
    inx H

    ; load and push rom's size
    mov A,M
    mov C,A
    inx H
    mov A,M
    mov B,A
    inx H
    push H; save CRC address
    push B; store size

    xchg; put rom's address in H

    ; set crc to 0xffffffff
    mvi B,0xFF
    mvi C,0xFF
    mvi D,0xFF
    mvi E,0xFF

    bytelp: mov A,M; read rom's data
    inx H
    push H

    mvi H,8; rotate 8 times, i = 8
    xra E; CRC = CRC ^ data
    mov E,A

    bitlp: mov A,B
    rar
    mov B,A

    mov A,C
    rar
    mov C,A

    mov A,D
    rar
    mov D,A

    mov A,E
    rar
    mov E,A

    jnc ebitlp

    mov A,B
    xri 0xED
    mov B,A

    mov A,C
    xri 0xB8
    mov C,A

    mov A,D
    xri 0x83
    mov D,A

    mov A,E
    xri 0x20
    mov E,A

    ebitlp: dcr H; if (--i > 0)
    jnz bitlp; goto bitlp

    pop H
    xthl
    dcx H
    mov A,H; if (--size > 0)
    ora L
    xthl
    jnz bytelp; goto bytelp

    pop H; restore dummy
    pop H; restore CRC address

    ; CRC = CRC ^ 0FFFFFFFFh
    mov A,B;
    xri 0xFF;
    mov M,A;
    inx H;

    mov A,C;
    xri 0xFF;
    mov M,A;
    inx H;

    mov A,D;
    xri 0xFF;
    mov M,A;
    inx H;

    mov A,E;
    xri 0xFF;
    mov M,A;

    pop H; restore context
    pop D
    pop B
    pop PSW

    ret

    et j'ai ajouté l'affichage du crc des roms (note: le crc de la rom h est celui de ma rom de test). Le temps moyen de calcul pour 2KOctets est d'une seconde.




    J'ai fais le plus compliqué je pense, sauf si j'ai un problème de place.

    Y'a une section sur gamoover, pour mettre la rom et les sources à disposition pour la communauté?

    Hors ligne AsPiC

    • Admin
    • Dieu de l' Arcade
    • *****
    • Messages: 8123
    • Localisation: Les Herbiers (85)
    • Present pour Koh Lanta Retrogaming Party 2069 !
      • Voir le profil
      • Mon compte Instagram !!
    rom test space invaders
    « Réponse #8 le: Jeudi 19 Septembre 2013, 21:57:54 pm »
  • Joli ^-

    MP moi la rom et les sources, je les uploaderais sur le serveur de Gamoo ;)


    Recherche tout élément de Jeutel Galaktron - "AsPiC c'est : no WIP but just RIP" - kos71 2014

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #9 le: Mercredi 25 Septembre 2013, 21:22:17 pm »
  • j'ai presque fini le test des registres à décalage.



    Pour tester, j'ai fait l'algo suivant :
    - chargement de 0x01 et 0x01 dans les bascules, décalage de 0 bits et vérification du résultat (0x01)
    - chargement de 0x01 et 0x01 dans les bascules, décalage de 1 bits et vérification du résultat (0x02)
    ...
    - chargement de 0x80 et 0x80 dans les bascules, décalage de 7 bits et vérification du résultat (0x40)

    si tous les tests sont corrects, j'affiche ">Shifters OK"

    sinon, je pense afficher un tableau en mettant verticalement le bit testé et horizontalement le décalage.
    EX: si deux tests échouent ({02;02} et {08;04}) , je veux faire un truc du genre :
      00 01 02 03 04 05 06 07  
    01 -- -- -- -- -- -- -- --
    02 -- -- 01 -- -- -- -- --
    04 -- -- -- -- -- -- -- --
    08 -- -- -- -- 10 -- -- --
    10 -- -- -- -- -- -- -- --
    20 -- -- -- -- -- -- -- --
    40 -- -- -- -- -- -- -- --
    80 -- -- -- -- -- -- -- --

    où 01 et 10 sont les deux résultats faux

    quelqu'un a une autre idée de présentation ou une autre façon de tester les registres à décalage?


    « Modifié: Mercredi 25 Septembre 2013, 21:47:44 pm par spectroman »

    Hors ligne f4brice

    • ✌(◕‿◕)✌ Donateur 2018
    • Arcade Kingmaster
    • *
    • Messages: 4092
    • Localisation: Besançon (prononcez "B'zançon")
    • « Matériel inconnu ? Touche à ton cul ! »
      • Voir le profil
    rom test space invaders
    « Réponse #10 le: Jeudi 26 Septembre 2013, 07:31:58 am »
  • Pour les registres à décalage, tu devrais ajouter :
    - charger 0x00
    - répéter 8 fois : décaler d'un bit, vérifier que c'est toujours 0x00

    - charger 0xFF
    - répéter 8 fois : décaler d'un bit, vérifier que c'est 0xFE puis 0xFC, etc...

    J'ai déjà vu des bits chargés à 0 lors de l'écriture mais qui ont une valeur à 1 en interne.

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #11 le: Jeudi 26 Septembre 2013, 14:02:42 pm »
  • merci,

    je viens d'ajouter ces tests. Les registres à décalage (25S10) étant adressé sur 3bits, je n'ai pu faire que 7 décalages. Donc pour FF, la séquence va de FF, FE ... , 80

    Hors ligne gc339

    • Beta Testeur
    • *
    • Messages: 2201
    • Localisation: Lyon
      • Voir le profil
    rom test space invaders
    « Réponse #12 le: Mercredi 02 Octobre 2013, 15:58:19 pm »
  • Quelqu'un a-t-il un 8080 a me donner? celui de ma carte est vraiment chaud.

    Je viens de retrouver un INS8080, MP si intéressé. Sinon j'ai quelques 8085, brochage différent mais cpu identique à deux instructions supplémentaires près.
    « Modifié: Mercredi 02 Octobre 2013, 17:22:22 pm par gc339 »
    Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard



    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #13 le: Vendredi 11 Octobre 2013, 19:18:59 pm »
  • Je viens de retrouver un INS8080, MP si intéressé. Sinon j'ai quelques 8085, brochage différent mais cpu identique à deux instructions supplémentaires près.

    merci gc339, désolé j'avais pas vu ton poste avant. c'est quoi un INS8080 (c'est le datasheet avec les instructions)?

    j'ai avancé sur la rom. j'ai refait la partie graphique pour que les caractères s'affiche dans le bon sens (mame fait une rotation de l'écran) et j'ai fini la mire qui permet de régler la géométrie de l'écran et de le placer correctement par rapport a l'overlay.



    je vais essayé de finir la ROM ce WE.


    Hors ligne gc339

    • Beta Testeur
    • *
    • Messages: 2201
    • Localisation: Lyon
      • Voir le profil
    rom test space invaders
    « Réponse #14 le: Vendredi 11 Octobre 2013, 19:22:10 pm »
  • merci gc339, désolé j'avais pas vu ton poste avant. c'est quoi un INS8080 (c'est le datasheet avec les instructions)?

    C'est un 8080 fabriqué par NS.
    Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard



    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2117
    • Localisation: aubagne
      • Voir le profil
    rom test space invaders
    « Réponse #15 le: Vendredi 11 Octobre 2013, 19:40:36 pm »
  • ok, comme ça je serai moins con ce soir en me couchant :D