CPC Rulez https://cpcrulez.fr/forum/ |
|
Equalizor demo et Outer World Music disk pb sur CPC CRTC1 !? https://cpcrulez.fr/forum/viewtopic.php?f=7&t=5835 |
Page 1 sur 1 |
Auteur : | Megachur [ 14 Nov 2016, 07:24 ] |
Sujet du message : | Equalizor demo et Outer World Music disk pb sur CPC CRTC1 !? |
Hello à tous ! Je souhaite vous parler de potentiel problème de compatibilité entre ces 2 demos et nos chers CPC : 1) Equalizor demo de P007 Elle ne marche pas sur un CPC 6128 avec CRTC1 au moment où le programme ce décompress/decrypt...voici la portion de code en question (utilisation du registre R pour vérifier que le code est celui original car R est utilisé comme clé de décryptage (XOR (HL)) du code : Code : 8438:ei 8439:ld b,&f5 843B:in a,(c) 843D:rra 843E:jp nc,&843B 8441:halt 8442:ld a,&da 8444:ld r,a* 8446:ld hl,&0140 8449:ld de,&81D2 844C:ld a,r 844E:xor (hl) 844F:ld (hl),a 8450:inc hl 8451:dec de 8452:ld a,d 8453:or e 8454:jp nz,&844C voici mon analyse sur emulateur : décodage à partir de 8442 en 8451 interrupt ! alors qu'on devrait être en 8452 ! du coup décalage de R de 1 au retour de l'interrupt! -> détection de la HSYNC trop tôt d'une microseconde ce qui va déclencher l'interruption du z80 trop tôt d'une micro seconde !!! si je décale d'une microseconde la détection de la HSYNC, cela fonctionne sur l'émulateur en question, donc pas lié à un mauvais code d'émulation z80 ! Dois-je en déduire que c'est un comportement du CRTC1 différent du CRTC0 par exemple où cette demo fonctionne ? ou sur les deux Z80 différents, notamment sur l'instruction HALT juste avant en &8441 ou autre différence de timming sur le ld A,R par exemple ? 2) ReSeT 0 - Outer World Music Pour cette fois, la différence entre les deux CPC 6128 (CRTC0 et CRTC1) que j'ai testé est peut-être lié au PPI (ou au Z80) ??? Le CPC 6128 CRTC 0 sur lequel on entend bien la musique a un PPI Toshiba TMP8255AP-5 (8804A), le cpu : Z8400APS Z80 CPU (8609) Le CPC 6128 CRTC 1 sur lequel on entend pas la musique (et vumètres restent à 0) : PPI NEC D8253AC-5 (8609EJ), le cpu : Z0840004PSC Z80 CPU (8803) pb avec out(#ff),a ! soit out(#E6FF),#E6 ou out(#A6FF),#A6 qui ne marche pas avec le second PPI ?? Code : org #9541 ld hl,#96b9 ld de,#e6a6 ld bc,#f400 .l954a ld a,d out (#ff),a out (c),c ld b,d out (c),0 dec b outi ld a,e out (#ff),a inc c ld a,#0d cp c jr nz,l954a bit 7,(hl) jr nz,l956d ld a,d out (#ff),a out (c),c inc b ld a,e out (#ff),a outi .l956d ld b,d out (c),0 ret Dois-je en déduire que c'est un comportement différent entre les deux PPI de marque différentes ?? Comparaison des deux Z80 : http://www.cpu-world.com/Compare/977/Zilog_Z80_4_MHz_(Z0840004PSC)_vs_Zilog_Z80_4_MHz_(Z8400APS).html j'ai juste trouvé une référence ici sur une différence sur des z80s et les outs : est-ce que les deux problèmes rencontrés sont liés ?? Differences between NMOS and CMOS Z80s http://faqwiki.zxnet.co.uk/wiki/Z80#OUT_.28C.29.2C0_or_OUT_.28C.29.2C255_instruction Citer : LD A,I and LD A,R bug The NMOS Z80s suffer a problem whereby LD A,I and LD A,R record the state of IFF2 after it has been reset if an interrupt is delivered during that instruction. This behaviour, along with workarounds for this for use in interrupt handlers are documented in the Z80 Family Questions and Answers section of the Zilog Product Specifications Databook, and is useful for detecting the model of Z80 in use, so as to determine whether the CPU (assuming it is a genuine NMOS or CMOS Z80) provides an 'OUT (C),0' instruction (NMOS), or 'OUT (C),255' instead (CMOS). OUT (C),0 or OUT (C),255 instruction In 1996, Simon Cooke noted in a Usenet posting that the undocumented instruction usually referred to as 'OUT (C),0' behaves instead as 'OUT (C),255' on CMOS Z80s. Later, in 2004, Colin Piggot rediscovered this with his own SAM Coupé, when running a demo for SCPDU 6, coincidentally written by Simon Cooke. With the CMOS Z80, a white background colour was set over part of the screen in the demo. This was described in SAM Revival Issue 9 (March/April 2004). In 2008, this was once again rediscovered by the MSX community. J'espère que ce challenge vous intéresse... N'hésitez pas à poster votre analyse ici !!! |
Auteur : | marcel [ 14 Nov 2016, 13:25 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Pour ton premier souci, je ne vois pas le souci avec l'interruption qui arrive un peu après, ça ne va rien changer puisque tu as déjà fait le xor (hl) et pas encore le LD A,R, ce n'est à mon sens pas la première interruption qui arrive le problème (les suivantes, peut-être si elles ont lieu à un autre moment, à savoir entre le LD A,R et le XOR (HL) ) En plus ce qu'il fait ne sert à rien niveau chiffrement, tu peux modifier le code quand même, vu que la boucle fait toujours la même chose, la valeur de A avant le XOR va respecter la même suite, quelles que soient les données lues. |
Auteur : | Megachur [ 14 Nov 2016, 20:40 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
merci pour ta réponse rapide ! mais tu as oublié un détail dans ton analyse dans le fonctionnement du Z80 : le registre R est incrémenté à lecture d'un octet d'instruction... donc en gros si tu as a=&da ld r,a ld hl,&0140 -> r++ 8449:ld de,&81D2 -> r++ 844C:ld a,r -> r++ a=&dd ! etc... comme cela boucle sur &844c, l'instruction ld a,r donnera toujours un R différent ! je te rassure, si c'était 'trivial', je n'aurai même pas posté cela ici ! |
Auteur : | Lone [ 14 Nov 2016, 20:44 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Hello, Megachur : Pourquoi la valeur de R serait-elle différente en &844C, selon que l'interruption pop en &8451 ou &8452 ? A priori, quelque soit l'adresse, au retour, le +1 fait au préalable est rattrapé immédiatement, ce qui fait qu'à 844C, R doit être égal dans les deux cas... Ou est-ce que j'oublie quelque chose ? Par ailleurs, as-tu le code désassemblé de la routine d'interruption ? On y apprendra peut-être quelque chose ? |
Auteur : | Megachur [ 14 Nov 2016, 21:14 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Lone a écrit : Hello, Megachur : Pourquoi la valeur de R serait-elle différente en &844C, selon que l'interruption pop en &8451 ou &8452 ? A priori, quelque soit l'adresse, au retour, le +1 fait au préalable est rattrapé immédiatement, ce qui fait qu'à 844C, R doit être égal dans les deux cas... Ou est-ce que j'oublie quelque chose ? Par ailleurs, as-tu le code désassemblé de la routine d'interruption ? On y apprendra peut-être quelque chose ? en fait, je donnais un exemple, l'interruption n'aura pas toujours lieu à la même adresse... R est incrémenté aussi pendant l'exécution du code en &38... effectivement, le code en &38 y est pour quelque chose : (enfin en #8483...)...et à chaque instruction -> R++ donc au finale R=R+&0c (+12 car les instrucions IX ey IY on un &dd et &fd qui compte aussi ) org #0038 jp #8483 org #8483 ei pop ix <- récupère l'adresse où l'interruption en &38 a été déclenchée ! pop iy ld iy,#82bf push iy jp (ix) --> go en retour à l'adresse où l'interruption a été déclenchée ! donc c'est surtout quand elle a lieu pendant le début d'instruction ld a,r que cela à une influence sur la valeur de R récupéré dans A (et donc le XOR(HL)) ! |
Auteur : | marcel [ 14 Nov 2016, 23:22 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Megachur a écrit : donc c'est surtout quand elle a lieu pendant le début d'instruction ld a,r que cela à une influence sur la valeur de R récupéré dans A (et donc le XOR(HL)) ! C'est ce que j'avais écrit dans mon premier post, malgré que tu parles au début d'une interruption qui ne devait rien changer à l'affaire marcel a écrit : (les suivantes, peut-être si elles ont lieu à un autre moment, à savoir entre le LD A,R et le XOR (HL) ) Bon, au final, on a des interruptions qui ne se passent pas au bon moment... (j'ai pas de CRTC1 pour jouer) d'après les docs officielles, on est en dessous de la microseconde pour le respect du hsync mais peut-être que la faible différence sur le CRTC1 peut jouer? voir http://www.cpcwiki.eu/imgs/c/c0/Hd6845.hitachi.pdf et http://www.cpcwiki.eu/imgs/b/b5/Um6845r.umc.pdf |
Auteur : | Megachur [ 15 Nov 2016, 07:36 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
marcel a écrit : Megachur a écrit : donc c'est surtout quand elle a lieu pendant le début d'instruction ld a,r que cela à une influence sur la valeur de R récupéré dans A (et donc le XOR(HL)) ! C'est ce que j'avais écrit dans mon premier post, malgré que tu parles au début d'une interruption qui ne devait rien changer à l'affaire marcel a écrit : (les suivantes, peut-être si elles ont lieu à un autre moment, à savoir entre le LD A,R et le XOR (HL) ) Bon, au final, on a des interruptions qui ne se passent pas au bon moment... (j'ai pas de CRTC1 pour jouer) d'après les docs officielles, on est en dessous de la microseconde pour le respect du hsync mais peut-être que la faible différence sur le CRTC1 peut jouer? voir http://www.cpcwiki.eu/imgs/c/c0/Hd6845.hitachi.pdf et http://www.cpcwiki.eu/imgs/b/b5/Um6845r.umc.pdf --> du coup, est-ce du à mon CRTC1 qui n'a pas un bon timming ou est-ce valable pour tout les CRTC1s ? |
Auteur : | marcel [ 15 Nov 2016, 13:34 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Megachur a écrit : --> du coup, est-ce du à mon CRTC1 qui n'a pas un bon timming ou est-ce valable pour tout les CRTC1s ? Si tu faisais un proof of concept que tu postais sur ici (et/ou sur cpcwiki) pour que les possesseurs de CRTC 0 et 1 testent? C'est intéressant comme différence (et probablement pas compliqué à émuler correctement) Si ça se trouve, on doit pouvoir observer une différence avec un code du style, à moins que le HALT n'ait pas le souci! Code : EI
LD B,#F5 IN A,(C) RRA JR NC,$-2 HALT LD A,#DD LD R,A HALT LD A,R PUSH AF AND #F ADD 128 CALL #BB5A POP AF AND #F0 CALL #BB5A LD A,10 CALL #BB5A LD A,13 CALL #BB5A RET |
Auteur : | Megachur [ 30 Déc 2016, 10:28 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Coucou ! --> Personne pour me faire un retour pour savoir si ces 2 démos marchent sur vos cpcs (avec le coupe CRTC/PPI à me donner pour info) ??? A votre bon coeur cpcien mesdames et messieurs !!! |
Auteur : | Supersly [ 31 Déc 2016, 02:41 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Sur mon CRTC1, j'ai bien un problème sur la 1ere démo (écran noir), mais aucun sur la seconde : les musiques de la Reset 0 passent bien. |
Auteur : | Megachur [ 31 Déc 2016, 08:46 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
@Supersly : merci pour ton retour ! Sur ton CRTC1, quelle est la marque/modèle de ton PPI ? |
Auteur : | Supersly [ 31 Déc 2016, 18:31 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
Toshiba TMP8255AP-5 Par contre, si tu veux une photo de la CM, ce sera plus chiant, car des fils sont soudés en travers pour mes boutons Reset & Cie (pas de ma faute). |
Auteur : | Megachur [ 31 Déc 2016, 21:11 ] |
Sujet du message : | Re: Equalizor demo et Outer World Music disk pb sur CPC CRTC |
@Supersly : merci pour l'info ! Cela confirmerait que sur le PPI NEC D8253AC-5 on a un comportement différent que sur le PPI Toshiba sur ce point ! |
Page 1 sur 1 | Le fuseau horaire est UTC+1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |