Gamoover

Forums " WORKSHOP" => Jamma, cablages, contrôleurs, interfaces & hacks => Microcontrôleurs et électronique => Discussion démarrée par: spectroman le Dimanche 15 Septembre 2013, 20:30:28 PM

Titre: rom test space invaders
Posté par: spectroman le Dimanche 15 Septembre 2013, 20:30:28 PM
salut,

suite à ce sujet (http://www.gamoover.net/Forums/index.php?topic=28561.0), 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

Titre: rom test space invaders
Posté par: spectroman 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
Titre: rom test space invaders
Posté par: AsPiC le Lundi 16 Septembre 2013, 22:14:39 PM
Bravo pour ton boulot ^- Et désolé de pas pouvoir t'aider :-[
Titre: rom test space invaders
Posté par: spectroman 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

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20130917135024-spectroman-mame.PNG) (https://gamoovernet.pixhotel.fr/pics/20130917135024-spectroman-mame.PNG)

Titre: rom test space invaders
Posté par: funkycochise le Mardi 17 Septembre 2013, 15:28:21 PM
excellent !

:-*
Titre: rom test space invaders
Posté par: Little_Rabbit 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+
Titre: rom test space invaders
Posté par: Persecutor le Mercredi 18 Septembre 2013, 14:00:51 PM
Joli  ^-
Titre: rom test space invaders
Posté par: spectroman 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.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20130919202047-spectroman-crc-test1.PNG) (https://gamoovernet.pixhotel.fr/pics/20130919202047-spectroman-crc-test1.PNG)


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é?
Titre: rom test space invaders
Posté par: AsPiC 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 ;)
Titre: rom test space invaders
Posté par: spectroman le Mercredi 25 Septembre 2013, 21:22:17 PM
j'ai presque fini le test des registres à décalage.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20130925210112-spectroman-sht-test.png) (https://gamoovernet.pixhotel.fr/pics/20130925210112-spectroman-sht-test.png)

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?


Titre: rom test space invaders
Posté par: f4brice 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.
Titre: rom test space invaders
Posté par: spectroman 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
Titre: rom test space invaders
Posté par: gc339 le Mercredi 02 Octobre 2013, 15:58:19 PM
Citation de: spectroman le Jeudi 22 Août 2013, 22:29:12 PMQuelqu'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.
Titre: rom test space invaders
Posté par: spectroman le Vendredi 11 Octobre 2013, 19:18:59 PM
Citation de: gc339 le Mercredi 02 Octobre 2013, 15:58:19 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.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20131011191849-spectroman-mire.PNG) (https://gamoovernet.pixhotel.fr/pics/20131011191849-spectroman-mire.PNG)

je vais essayé de finir la ROM ce WE.

Titre: rom test space invaders
Posté par: gc339 le Vendredi 11 Octobre 2013, 19:22:10 PM
Citation de: spectroman le Vendredi 11 Octobre 2013, 19:18:59 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.
Titre: rom test space invaders
Posté par: spectroman le Vendredi 11 Octobre 2013, 19:40:36 PM
ok, comme ça je serai moins con ce soir en me couchant :D

Titre: rom test space invaders
Posté par: spectroman le Samedi 12 Octobre 2013, 13:32:06 PM
J'ai terminé la version 1.0. Elle a été envoyée à AsPiC, pour qu'il la mette a disposition.

Je vais essayé de faire, entre deux WIP, un tutoriel de dépannage avec cette rom.

Titre: rom test space invaders
Posté par: funkycochise le Samedi 12 Octobre 2013, 16:46:22 PM
Citation de: spectroman le Samedi 12 Octobre 2013, 13:32:06 PM
J'ai terminé la version 1.0. Elle a été envoyée à AsPiC, pour qu'il la mette a disposition.

Je vais essayé de faire, entre deux WIP, un tutoriel de dépannage avec cette rom.



excellent !
:-*
Titre: rom test space invaders
Posté par: spectroman le Lundi 14 Octobre 2013, 20:08:32 PM
AsPiC a mis les fichiers de la version 1.0 sur Gamoover :
binaire (http://www.gamoover.net/files/image/tst_invd.zip) (pour un test sous mame : renommer test.h en invaders.h)
code source (http://www.gamoover.net/files/image/test_rom_space_invd_v1_0_source.zip)

les sources se compilent sous cygwin ou linux avec make, as8085 et aslink

[edit de Little_Rabbit, le 10/02/2021 :

Je mets à jour ce post pour vous proposer le téléchargement de la dernière version en date, la version 1.3 :)

Vous pouvez la télécharger => ICI <= (https://www.gamoover.net/uploads/test_rom_space_invd_v1_3_source.zip), depuis le serveur de Gamoover 8).

C'est le fichier test.h qu'il faut graver sur une EPROM 2716, à placer sur le support d'EPROM/ROM emplacement H ! ;) ]
Titre: rom test space invaders
Posté par: Little_Rabbit le Lundi 14 Octobre 2013, 22:29:42 PM
Salut,

Génial !!  ^-^

Merci beaucoup pour ton partage et pour le temps consacré à ce développement !  :-*

A+
Titre: rom test space invaders
Posté par: spectroman le Mercredi 16 Octobre 2013, 20:18:01 PM
timothy d'outerworldarcade a mis sa page web sur le test de space invaders (http://www.outerworldarcade.com/arcade/space_invaders/space_invaders_test_rom.html) a jour. ca fait un peu plus d'info en attendant que j'écrive le tuto.

Y'a t'il un tuto pour écrire un tuto?
Titre: rom test space invaders
Posté par: AsPiC le Mercredi 16 Octobre 2013, 20:57:17 PM
Non il n'y a pas de tuto pour cela :D

Idéalement commence un nouveaux thread avec un titre parlant et ça fera l'affaire :-*
Titre: rom test space invaders
Posté par: Little_Rabbit le Mercredi 16 Octobre 2013, 21:37:42 PM
Salut,

Citation de: spectroman le Mercredi 16 Octobre 2013, 20:18:01 PM
timothy d'outerworldarcade a mis sa page web sur le test de space invaders (http://www.outerworldarcade.com/arcade/space_invaders/space_invaders_test_rom.html) a jour. ca fait un peu plus d'info en attendant que j'écrive le tuto.

Super, merci !  ^-

Je ne connaissais pas ce site Outerworldarcade ! Très intéressant : il y a même une page consacrée à Video Pinball d'ATARI  :-*, ou encore Asteroids !

Ce Thimothy est définitivement une personne de goût ! :D

A+
Titre: rom test space invaders
Posté par: spectroman le Samedi 14 Octobre 2017, 17:47:04 PM
Je viens de finir la version 1.2.

Les nouveautés:
- Toutes les rams en défaut sont indiquées en une fois.
- La matrice de résultat du test des registres à décalage a été simplifiée.
- La documentation ;D.


Voici une petite video pour patienter en attendant que la doc soit corrigée :


Titre: rom test space invaders
Posté par: sushy18 le Samedi 14 Octobre 2017, 19:18:09 PM
Et tout ça dans les 2ko ??
Titre: rom test space invaders
Posté par: spectroman le Dimanche 15 Octobre 2017, 09:40:35 AM
yep, il n'y a vraiment plus beaucoup de place.

allez je lance un concours : le badram challenge

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20171015090116-spectroman-bad-ram-v1-2.jpeg) (https://gamoovernet.pixhotel.fr/pics/20171015090116-spectroman-bad-ram-v1-2.jpeg)

little_rabbit à 9 RAMs HS ;D, qui dit mieux
Titre: rom test space invaders
Posté par: sushy18 le Dimanche 15 Octobre 2017, 10:55:04 AM
9 rams HS  ::)
Le protocol de test réagis de la même manière si la RAM ne réponds pas que si son retour est erroné ?
Titre: rom test space invaders
Posté par: f4brice le Dimanche 15 Octobre 2017, 12:31:20 PM
Il n'y a pas de notion de "la RAM ne répond pas".
Lors d'une lecture en RAM, la/les puces de RAM sont sollicitées par l'électronique du PCB.
La donnée fournie par la RAM est acheminée jusqu'au CPU toujours par l'électronique du PCB.
En cas de foirage quelconque, le logiciel de test est conçu pour détecter que la donnée lue ne correspond pas à ce qui est attendu.

La difficulté du logiciel de test est multiple :