Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

*****Methodes pour différencier un Cpc Plus d'un Cpc Old.
Goto page: 1, 2  >
 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Asic
Previous topic :: Next topic  
Author Message
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 14 Dec - 14:59 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

----
Beaucoup de personnes utilisent des moyens assez rudimentaires pour détecter la présence d'un Plus ou celle d'un Old.


La première routine apparue peut paraître succincte mais reste néanmoins efficace. Il suffit de poser la question à l'utilisateur.


Par exemple :


Quote:
Avez vous un Amstrad Plus (Oui/Non) ?




C'est ce que j’appellerais ici, "La Méthode Roudoudou" ou seul le Oui fonctionne car la demo ne se lancerait pas sans cela !


Une autre, plus commune, consiste à connecter de la Page Asic (#4000-#8000) avec pokage d'une valeur X dans cette plage mémoire, et déconnecter la page Asic pour savoir, une fois cet octet poké testé si oui ou non, nous sommes en présence de la bête.


Certains farfelus utilisent aussi les connexions Rom afin de vérifier si la Rsx "ùgame" est présente, ou pas mais ne pense pas que certaines personnes n'utilise pas la rom "Burnin' Rubber" d'origine, celle livrée avec votre Amstrad Plus, mais plutôt l'ancienne Rom sur cartouche qui permet de rester compatible avec certaines routines systèmes.


Pour ma part, il existe trois méthodes "propres" pour détecter la présence d'un Amstrad Plus.


La première est basée sur le mode IM 2, qui comme tout le monde le sait, commence par une adresse paire sur Amstrad Plus, alors qu'elle sera sur une adresse impaire sur Cpc Old. 
Qui serait intéressé par ce type de routine ? Je vous la proposerais dans un prochain article.


La seconde tient compte d'un bug de l’instruction "in" qui fait un out sur Amstrad Plus. Assez drôle en fait.
Pour tout vous dire, j'ai utilisé cette méthode de détection dans ma demo AE 2010. Ce qui est assez drôle, c'est que winape ne gérant pas ce bug, c'est toujours la partie old qui se lance, et c'est bien dommage. Je pense que Kevin Thacker (Arnoldemu) a dû corriger cela dans son émulateur Arnold, mais ça reste à vérifier...

Edit
Voici donc cette routine que me réclame l'ami Roudoudou!


Code:
;
; Don't Work with Winape
; Code by Candy^Ovl
; Presented in AmsLive
;
ld bc,#7f54
out (c),c
in a,(c)
cp c
inc a
jr z,CpcOld
jr CpcPlus




ou une routine plus rapide


Code:
;
; Version Grim SML^Arkos
;
ld bc,#7f00 ; pointe sur le GA
in a,(c) ; on lit la valeur du port
inc a    ; cp #ff -> si a=#ff 
jp z,CpcOld ; c'est un Cpc Old
jr CpcPlus ; Sinon c,'est un Cpc Plus






Si vous lancez la demo sus-citée, sur votre Cpc Plus, vous aurez droit à cela.




EndEdit


Pour la troisième méthode possible, il s'agit de celle utilisant le bug du PPi. Je m'en vais donc vous la présenter...


Code:
;
; Code Offset^Futurs
; Quasar Cpc - Quasar Net
;
ld bc,#F782 ; Registre de Contrôle du PPi
ld e,c      ; sauve c -> e=#82
out (c),c   ; Port A en sortie
dec b       ; b=#F6
ld c,#0f    ; c=#0f
out (c),c   ; on valide
inc b       ; b=#f7
ld a,e      ; a=e=#82
out (c),a   ; Port A en sortie
dec b       ; b=#f6
in a,(c)    ; On lit le contenu du port C
cp c        ; si a=c -> #0f
jr z,CpcPlus ; C'est un Cpc Plus
or a
jr z,CpcOld ; Sinon c'est un Cpc Old





En écrivant cette article, je me dis également qu'il pourrait exister une autre méthode. Celle-ci est un peu tirée par les cheveux mais pourrait fonctionner. Je dis bien "pourrait", car je ne l'ai pas encore testée. Il suffirait de tester le port cartouche, mais comment me direz-vous ?


Une simple connexion Rom devrait suffire. Il faudrait vérifier la présence d'une Rom (#80 à #87) pour les cartouches 128K basic ou Burnin' Rubber, patchées ou pas.


Le seul problème serait quelques extensions Rom comme la RamCard qui peuvent prendre place à la place des cartouches. Dans cet unique cas, et non des moindres, le Cpc Old pourrait être confondu avec un Amstrad Plus.


Enfin, tout ceci est vraiment théorique et je ne l'ai même jamais testé, jusqu'à ce soir. Voici donc le fruit de mes recherches.

Code:
;
; Code AsT/iMPACT
;
        Di
        ld e,#ff ; valeur de test
        ld hl,#c000
        ld (hl),e
        ld bc,#df80 ; Connexion Rom #80 (Cartridge Port)
        out (c),c
        ld bc,#7F80+%0110 ; Mode 2 - Connection Rom Haute/deconnection Rom Basse
        out (c),c
        ld a,(hl) ; recupère octet en #c000
        cp e      ; a=e  ?
        jr z,cpcold0 ; si oui c'est un cpc old
        call deconnect ; si non c'est un cpc plus


        jr cpcplus
cpcold0
        call deconnect ; deconnecte toutes les roms
        jr cpcold


deconnect
        ld bc,#df00 ; Connecte la Rom Basic
        out (c),c
        ld bc,#7F8E ; mode 2
        out (c),c
        ei
        ret






Une autre solution serait d'utiliser le mode im 2 et d'exploiter le fait que sur Cpc Plus, l'adresse du vecteur sera toujours paire, alors que sur Cpc old, ce sera forcement le contraire.
Je vous laisse donc découvrir la "fameuse" routine.

Code:

;
; Detection Cpc Plus grâce au mode iM2
;
;
; Test Crtc Camembert Demo 4
; Ramlaid/Mortadel
;
      org #1000

      ld hl,#a400 ; On copie 255 fois
      ld (hl),#a3 ; les octets #a3,#a0
      inc hl      ; dans la table qui commence
      ld (hl),#a0 ; a partir de #A400
      ld e,l      ;
      ld d,h      ;
      inc de      ;
      dec hl      ;
      ld bc,#ff ;
      ldir        ;
      ld a,#a4    ; a=poids fort de la table
      ld i,a      ; i=#a4... le vecteur d'int sera donc à l'adresse #a4xx
      im 2        ; on passe en mode im2
      ei          ; on autorise les interruptions
      halt        ; provoque une interruption
      di          ; interdit les interruptions
      im 1        ; on repasse en mode im 1
      ret ;  on regarde si a=1 alors cpc plus, si a=0 cpc old
;
; Si l'adresse du vecteur d'interruption est paire
; nous avons a faire a un Cpc Plus
; Si elle est impaire c'est forcement un Cpc Old
;
      org #A0A3
;
; a=1 si cpc plus
;
       ld a,1
       ei
       ret
;
      org #A3a0
;
; a=0 si cpc old
;
       xor a
       ei
       ret



Mais, car il y a toujours un "mais", si vous êtes l'heureux possesseur d'une Playcity, une extension de TotO qui permet notamment la gestion du mode im2, sachez que sur celle ci, ce "bug" a été corrigé.
Cela signifie que dans tous les cas, l'adresse sera paire, même sur cpc old.
Le test sera donc foiré ! La seule solution restera donc débrancher votre extension, si vous utilisez cette routine.

Si parmi vous une personne utilise une méthode différente ou veut proposer un complément d'information, je suis preneur.



NBSylvestre : Nous connaissons déjà ton proverbe : "Si ton Amstrad est blanc, c'est que tu dois avoir un Amstrad Plus"
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Last edited by Ast on Sat 5 Aug - 00:13 (2017); edited 9 times in total
Back to top
Publicité






PostPosted: Wed 14 Dec - 14:59 (2016)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 14 Dec - 17:32 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

À noter que ma méthode fonctionne sur tous les émulateurs  Laughing


Pour le bug du in qui fait le out, tu connectes une bank et tu écris dedans?


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 14 Dec - 18:35 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Je viens d'ajouter cette routine dont je t'avais parlé. Teste là sur un cpc old et un plus et tu verras, ça fonctionne, plutôt bien, d'ailleurs.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 14 Dec - 19:09 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

J'ai ajouté dans l'article,  le test du bug de l'instruction "in" ainsi que celui du test de connexion rom....
J'aimerai bien d'ailleurs que quelqu'un vérifie ce dernier et me dise s'il fonctionne ou pas.


Il ne manque plus qu'à ajouter le test lié au mode IM2, et tout sera complet.
Donnez moi votre avis, merci.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 14 Dec - 20:46 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

diantre, que se passe-t'il sur le port #7F54?
enfin, j'veux dire, dans quoi on écrit?
le cp c ne sert à rien, rassure moi? 


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 14 Dec - 21:17 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

roudoudou wrote:
diantre, que se passe-t'il sur le port #7F54?
enfin, j'veux dire, dans quoi on écrit?
le cp c ne sert à rien, rassure moi? 



c'est une valeur bateau.... 
concernant le cp c (arf cpc!), il sert rassure toi!!
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 14 Dec - 21:56 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Mais tu fais un inc a juste après qui change les flags!

Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Wed 14 Dec - 22:05 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Smile Bonne remarque... As tu essayé la routine sur Cpc Old ? Trace les résultats, tu verras pourquoi.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Thu 15 Dec - 15:41 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Ajout d'une méthode tirée du Grimware basée sur l'instruction "in".


Néanmoins comme il le précise, cette méthode n'est pas 100% fiable, même si elle a la chance de fonctionner.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Thu 15 Dec - 17:11 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

pour le coup, plutôt que cp #ff tu fais inc a c'est 1 nop de moins et 1 octet de moins :p

Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Thu 15 Dec - 19:14 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Bonne réflexion  Okay


J'ai corrigé...


En même temps, tu me diras, on s'en contrefou d'un nop pour un test que tu fais avant de lancer ton programme... Mort de Rire
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
MacDeath


Offline

Joined: 26 Mar 2015
Posts: 343
Localisation: 26
Masculin Vierge (24aoû-22sep) 馬 Cheval
Point(s): 12
Moyenne de points: 0.03

PostPosted: Fri 16 Dec - 01:57 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

lol...
Les machines ont quand même un design qui ne trompe pas...


Back to top
Supersly


Online

Joined: 30 Jun 2015
Posts: 53
Féminin
Point(s): 5
Moyenne de points: 0.09

PostPosted: Sat 17 Dec - 13:56 (2016)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Sinon, tu peux lancer une prod CPC (Cargosoft au hasard), si les couleurs sont dégueu, c'est que t'as un Plus :-)
_________________
Les Sucres en Morceaux


Back to top
Visit poster’s website
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Thu 19 Jan - 01:22 (2017)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Supersly wrote:
Sinon, tu peux lancer une prod CPC (Cargosoft au hasard), si les couleurs sont dégueu, c'est que t'as un Plus :-)



Dans cet ultime cas, c'est que les gars de chez CargoSoft ont mal fait le job...  Laughing
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Sat 5 Aug - 00:14 (2017)    Post subject: *****Methodes pour différencier un Cpc Plus d'un Cpc Old. Reply with quote

Mise à jour du sujet avec l'ajout de la routine de détection via le mode im 2!
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Asic All times are GMT + 2 Hours
Goto page: 1, 2  >
Page 1 of 2

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group