★ CODING ★ AMSLIVE ★ AMSLIVE n°19 - DÉTECTION CRTC : RETOUR AU SOURCE ★ |
AMSLIVE n°16 - CRTC Detection | AMSLIVE n°18 - Crtc Detection | AMSLIVE n°19 - Crtc Detection - Retour Au Source |
L'autre jour, dans le 18h03, ma voisine SNCF porta à mon appréciation la remarque suivante : « Dans certains milieux, l'honnêteté est superflue, alors que par définition, la netteté n'est pas superfloue », Je la rembarrai aussi sec, arguant que nous n'avions pas gardé les cochons ensemble (et encore moins regardé des films cochons) et qu'elle n'avait aucune raison d'insulter la caste des coiffeurs de si bon matin. Mais in petto, je la remerciais de m'avoir ainsi à son insu fourni le chapô de cette rubrique.Si vous ne voyez pas le rapport entre cette histoire et le CRTC, je ne peux rien pour vous. Si vous le voyez, c'est encore plus grave que je ne le pensais. D'APRÈS FRUD, C'EST TOUJOURS UNE QUESTION DE BITS Oubliez le programme d'Amslive & 10, il a été entièrement retapé (!) pour finalement aboutir à la présente version. Celle-ci s'articule autour de quatre mesures : — TEST4 : Détection CPC+. Le source, volontairement obombré (*) par naturelle malice du programmeur, peut être vu de diverses façons : à l'envers, sur le dos, en fermant un œil (sauf pour certains borgnes)... Mais surtout, il gagnera à être considéré comme solution de l'exercice consistant à écrire votre propre test. LES DIX VIES DU CRTC Qu'apporte ce test par rapport à ceux qu'offre déjà la littérature CPC, notamment Quasar 11 & 12?
En revanche, il ne distingue pas les sous-types de CRTC 0, car seules d'obscures routines de Shap et Offset, bizarrement introuvables, ont, paraît-il, mis en évidence des différences de comportement. LE TYPE S'ILLUSTRE Tant que nous y oise, rappelions brièvement quelques différences présentes cette fois dans l'exploitation du CRTC. Cela fera plaisir à Jean-Pierre qui raffole de la mise en page de tableaux. (Note du correcteur-maquettiste : les sarcasmes teintés de sadisme ont provoqué dans le passé plus d'un soulèvement populaire. À bon entendeur !...) ------------------------------------------------------------------------------------------------ |
Empruntant l'idée d'ATM afin de faire fuctifier , j'aimerais dresser une liste complète des principaux circuits du CPC rencontrés selon les révisions de la reine mère. — la date (gravée entre la carte et le lecteur 3") Attention ! Ouvrir le clavier présente aucun risque mais vous fait perdre la garantie. |
org #9001
R2 ; equ 46 ; Valeur initiale registre 2.
R12 ;equ #30 ; Valeur arbitraire non nulle.
;
; Dès lors qu'on manipule le hard, le système pourrait
; saboter les tests. Donc, on commence par couper les
; interruptions. Cela s'avère également nécessaire
; à la bonne tenue des synchros.
;
di ; Tiens, qu'est-ce que je disais !
;
; Maintenant, si vous le voulez bien, on s'assure du paramétrage CRTC :
; - les tests 3 et 6 s'appuient sur la connaissance de la valeur du registre 12.
; - le test 5 présuppose un écran à 50 Hz et une largeur h-syncde 14.
; Au besoin, vous placerez ici et avec profit votre propre initialisation
; CRTC, en prenant garde au point suivant : pour r2=50, il faut fixer
; r3 à 13, et modifier le test 5 de façon à provoquer le bug en remettant r3 à 14.
;
ld hl,crtclist+12
ld bc,#bc0c
setcrtc out (c) ,a
inc b
inc b
outd
dec b
dec c
jp p,setcrtc
; 5 bits à 1, pour chaque type en lice :
ld d,#1f
; départage (1 ou 2) / autres types :
call test3
; départage (3) / reste du monde ;
call test4
; Note : à ce point, si le type (1) est éliminé,
; on pourrait sauter l'ignoble test5.
; départage (2) / autres types :
call test5
; départage (3 ou 4) / autres types :
call test6
call conclut
; Fini ! Le registre A contient le type (5 = émulateur),
; qu'on s'empresse d'afficher.
or #30
jp #BB5A
test3
; Lit registre 12 :
; 0, 3 & 4 renvoient la valeur.
; 1 & 2 ; renvoient 0.
ld bc,#bc0o
out (C),C
ld b,#bf
in a,(c)
; Si 0, ce n'est pas (0, 3 ou 4)
ld e,%00110
jr z,t3_ok
cp r12
; On sait que ce n'est pas (1 ou 2)
ld e,%11001
jr z,t3_ok
; Ni 0 ni valeur de départ => émulateur :
ld a,%00000
t3_ok ld a, a
and d
ld d,a
ret
test4
; Vérifie si PPi buggé (= CPC+) :
ld bc,#f602
out (c) ,c
; Pourquoi sortir 2 ?
; Il faut une valeur non nulle,
; sans grandes conséquences cependant,
; et compatible avec l'astuce inutile qui suit :
inc b
set 7,C
; Difficile à prononcer avec un doigt dans la bouche.
out (c), c
dec b
; On touche au registre de commande, ce qui impliquera un reset des ports :
in a,(c)
ld a,%0l000 ; Port C non nul = CPC+
jr nz,t4_ok
cpl
t4_ok and d
ld d,a
ret
test5
; Vérifie si Reg3 + Reg2 = Reg0 + 1 annihile la VBL
; (= CRTC2) :
call wait_vs
; On sort de VSync
; pour être certain de la choper au début ;
djnz $
djns $
call wait_vs
; On attend 311 lignes:
Id bc,#l45b
t5__tmp dec c
jr nz,t5_tmp
djnz t5_tmp
; On provoque le bug CRTC2 :
ld bc,#bc22
out (c) , C
inc b
set 4,c
out (c), c
; On va vérifier une ligne plus bas s'il y a bien VSync
ld c,#10
dec c
jr nz,$-l
ld a, #f 5
in a,(#db)
; On remet un peu les choses en ordre :
ld c,r2
out (c) , C
and 1 ; Si Vsync, pas CRTC 2.
dec a
xor %11011
and d
ld d,a
ret
test6
; Lit registre 4 (quasi identique à test3)
; 3 & 4 renvoient la valeur registre 12.
; 0 1 & 2 renvoient 0.
ld bc,#bc04
out (c) rc
ld b,#bf
in a,(c)
ld e,%00111 ; Si 0, ce n'est pas (3 ou 4)
jr z,t6_ok
cp r12
ld e,%11000
; On sait que ce n'est pas (0, 1 ou 2)
jr z , t6_ok
ld e,%00000
; Ni 0 ni valeur de départ => émulateur
t6_ok ld a,e
and d
ld d,a
ret
conclut
; On espère bien trouver un et un seul bit à 1 :
xor a
dec a
con_lp inc a
srl d
jr c,con_fin
jr nz,conlp
ina c ; Si aucun bit à 1, émulateur.
con__fin ret z
; Venant de la boucle, nz si autre bit à 1.
ld a,5
ret
wait_vs
ld b,#f5
wvs in a, (c)
rra
jr ne,wvs
ret
crtclist
defb #3f, 40, r2, #3e
defb 38, 0, 25, 30
defb 0, 7, 0, 0
defb R12
Malgré le cruel manque de mécènes , le laboratoire Overlanders poursuit tant bien que mal ses recherches. Parmi les résultats obtenus :
(*) Couvert d'ombre, synonyme d'obscurci. L'apprentissage d'un mot par mois fait partie du contrat d'abonnement Amslive. À votre service.
Page précédente : AMSLIVE n°18 - Crtc Detection |
|