11635
UTILITY -> Other
© _Public_Domain_ (1997)
 
 
 
Test CRTC v2.0
cpc
 
 

Last Update : Saturday 21 March 2015 at 14 h 06

Manual n° 1

; ; Test CRTC version 2.0 ; (03/01/1997) par OffseT ; Nolist ; ; Conçu à partir des tests ; suivants ; ; ; - Test CRTC version 1.1 ; (23.02.1992) par Longshot ; - Test CRTC version 1.2 ; (18/06/1996) par OffseT ; - Test Asic version 1.0 ; (02.08.1993) par OffseT ; - Test Emulateur version 1.1 ; (03/01/1997) par OffseT ; ; ; Signification de la valeur de E en sortie ; ; (type de CRTC) ; ; 0 ; UM6845 ou Japonais ; sur la plupart des CPC6128 ; ; sortis entre 85 et 87 ; ; 1 ; UM6845R ; sur la plupart des CPC6128 ; ; sortis entre 88 et 90 ; ; 2 ; UM6845S ; sur la plupart des CPC464 ; ; et des CPC664 ; ; 3 ; Emulé (ASIC) ; sur les 464 plus ; ; et 6128 plus ; ; 4 ; Emulé (ERSATZ PLUS) ; sur la plupart des CPC6128 ; ; sortis (en 90) ; ; ; Signification de la valeur D en sortie ; ; ; 0 ; CPC ou CPC+ ; 255 ; Emulateur de CPC ou CPC+ sur PC ou Amiga ; ; (CPE, CPE2, CPC-EMU, PC-CPC, A-CPC) Org &9f00 Limit &a0a0 di ; Reconfiguration des ld hl,(&38) ; interruptions... ld (inter+1),hl ; On remplace le Call ld hl,&c9fb ; système par un simple ld (&38),hl ; EI RET ld hl,tabcrtc ; Initialisation du CRTC ld bc,&bd0c ; On met les registres Loop outi ; requis du CRTC à des inc b ; valeurs saines... inc b outi dec c jr nz,loop call testcrtc ; Test du CRTC ld e,a ; E contient le type de CRTC ld d,0 ; Si on a un type 2 alors cp 2 ; on a pas de test à faire jp z,suite ; (c'est forcément un CPC) cp 1 ; Si on a un type 1 on lance jp nz,type034 ; le test anti-émulation call testemu ; sans correction puis on jp suite ; continue... Type034 ld a,6 ; Sinon, on résout le bug ld (poke+1),a ; du mode entrelacé et on call testemu ; teste si il y a tentative ; de tromperie ou pas. Suite ld bc,&bc06 ; Remise en place de out (c),c ; l'écran ld bc,&bd00+25 out (c),c di ; Remise en place des Inter ld hl,0 ; interruptions ld (&38),hl ; système... ei ; Ici E=Type de CRTC ; et D=Type de CPC Affiche ld a,2 push de call &bc0e pop de ld a,e ; Affichage du type de CRTC add a,48 ; On mixe D (résultat du or d ; test d'émulation) avec E call &bb5a ; (résultat du test CRTC) ; et on affiche le type ; de CRTC finalement obtenu... ret ; Retour TestCRTC ld hl,&a200 ; Configuration du mode IM 2 ld (hl),&a0 ; à l'adresse &A0A1 pour les inc hl ; CPC classiques et à ld (hl),&a1 ; l'adresse &A1A0 pour les ld e,l ; 6128 plus et 464 plus ld d,h inc de dec hl ld bc,&ff ldir ld a,&a2 ld i,a im 2 ; Et hop, on passe en IM 2 ei halt ; On attend une interruption di ; pour voir... im 1 ; On retourne en IM 1 or a ; On teste le résultat de ; l'interruption... ret nz ; Si pas nul (A=3) on a un ; CRTC type 3 puisque le ; saut s'est fait en &A1A0 NoType3 ld b,&f5 ; Boucle d'attente de la VBL VS in a,(c) rra jr nc,vs VS1 in a,(c) ; Pre-Synchronisation rra ; Attente de la fin de la VBL jr c,vs1 VS2 in a,(c) ; Deuxième boucle d'attente de la VBL rra jr nc,vs2 ei ; Attente d'un 300ème de seconde halt ; (on est exactement en haut de l'écran) ld hl,75 ; Boucle d'attente de 528 micro-secondes Wait dec hl ld a,h or l jr nz,wait in a,(c) ; Test de la VBL rra ; Si elle est encore en cours jr c,types12 ; on a un UM6845 R ou S... ; Sinon on a un type 0 ou 4 ld bc,&bc00+12 ; Envoi d'une valeur dans le out (c),c ; reg12 du CRTC... ld a,&29 inc b out (c),e inc b ; Tentative de lecture du reg12 in a,(C) ; par le port &BE00... cp e ; Si non égal alors le port &BE00 jr nz,type0 ; ne fonctionne pas en lecture, ; on a un type 0... ld a,4 ; Sinon on a un CRTC type 4 ret Type0 xor a ; Retour si type 0 ret Types12 halt ; On attend un peu pour etre halt ; sur etre sorti de la VBL... halt di VS3 in a,(c) ; Attente de la VBL rra jr nc,vs3 ld bc,&bc00+2 ; Chargement de la valeur 50 out (c),c ; dans le reg2 du CRTC ld bc,&bd00+50 out (c),c ei halt ; Attente de la VBL suivante halt ; 6 300ème de seconde plus loin... halt halt halt halt halt ld b,&f5 ; Lecture de l'état de la synchro in a,(c) rra ld bc,&bd00+46 ; Remise à 46 du reg2 out (c),c jr nc,type2 ; Si on a pas de VBL alors on est ; en overflow, c'est un type 2... ld a,1 ; Sinon on a un CRTC type 1 ret Type2 ld a,2 ; Retour si type 2 ret ; Test pour voir si on a un vrai CPC ou un émulateur (v1.0) TestEmu ei ld b,&f5 ; On attend une première VS4 in a,(c) ; synchro verticale rra ; pour se placer en jr nc,vs4 ; haut de l'écran VS5 in a,(c) ; On attend la fin de rra ; cette VBL... jr c,vs5 halt ; On se place en halt ; fin d'écran... halt halt halt ld bc,&bc08 ; On commute en mode out (c),c ; entrelacé (reg8=3) ld bc,&bd03 ; avec éventuellement out (c),c ; une remise à jour ld bc,&bc09 ; du registre 9 pour out (c),c ; les CRTC 0, 3 et 4 Poke ld bc,&bd07 ; pour lesquel ce mode out (c),c ; en buggé. ld b,&f5 ; On attend le début VS6 in a,(c) ; de la VBL suivante rra ; ... jr nc,vs6 VS7 in a,(c) ; On se place encore rra ; une fois à la fin jr c,vs7 ; de cette VBL. halt ; On attend le milieu halt ; de l'écran... halt ld d,&ff ; En on vérifie que l'on in a,(c) ; a bien une VBL qui rra ; confirme le passage en jr nc,pascpc ; mode entrelacé... d=0 ld d,0 ; c'est OK, d=255 c'est ; un imposteur PasCPC ld bc,&bc08 ; On remet les registres out (c),c ; 8 et 9 dans leur état ld bc,&bd00 ; normal... out (c),c ld bc,&bc09 out (c),c ld bc,&bd07 out (c),c ret ; Retour au programme ; principal ; Initialisation du CRTC TabCRTC db 0,63,1,40,2,46,3,142,4,38,5,0,6,0,7,30,8,0,9,7,12,&30,13,0 ; Adresse d'interruption dans le cas d'un CPC. -> On met A à 0. Org &A0A1 Limit &a19f xor a ei ret ; Adresse d'interruption dans le cas d'un CPC+. -> On met A à 3. Org &A1A0 Limit &a1ff ld a,3 ei ret


Goto Top
CPC-POWER/CPCSOFTS, programming by Kukulcan © 2007-2022 all rights reserved.
Reproduction forbidden without any express authorization. All the game titles used belong to their respective owners.
Hébergement Web, Mail et serveurs de jeux haute performance