On m'a demandé sur Oniro de parler de ma passion du vrais rétro. Mais je vois que finalement ça fais un flop xd Je ne pense plus publier la ba mais j'aime un peu écrire des "articles" cela me permet aussi de coucher par écrit mes connaissances et m'aide à apprendre à connaitre une machine en particulier. L'amstrad 6128. Voici donc un article que j'ai écris sur les processeurs. Il y a un peu d'abus de langage, et de simplification...
Certain doivent savoir tout ça et bien plus que moi mais ça peut être intéressant pour d'autre.
A vous de voir si vous voulez que je continue d'écrire d'autre articles/connaissance sur cette machine ou pas. A vous de voir.
Le Processeur!Coucou, voici un petit pitch sur les procos !!!
Alors c'est quoi c'est un processeur ? C'est le coeur d'une machine électronique. (Console,Ordinateur…) C'est lui qui va travailler, et organiser tous le bousin. A l'heure actuel au moment ou j'écris ses lignes, le proco est en mode, 'bon je récupère la valeur de la touche que monos est entrain d'utiliser, je la stocke ici, après cette valeur envoyer que l’envoie ici….
Puis il ne fait pas que ça, un bon vrais petit esclave qui bosse bien, mieux que les chinois à nonor sur Aëdemphia…
Bon sérieusement, oui le proco est un des organes les plus important d'un pc ou d'une console de jeu.(qui sont maintenant des pc avec moins de possibilité mais passons)
Il y a quoi dans un processeur ? Comment il fonctionne ? Pour répondre un peu a cette question je vais parler d'un vieux processeur dit 8bits, Le Z80 ! Et beaucoup d'entre vous avez eu affaire à ce processeur ! Il équipe des vieux micros comme l'amstrad, et le standard MSX, au niveau console je peux en cité 4 de mémoire, La Master Système de chez Séga, La Mégadrive de Chez séga. (C'était é la pour la rétrocompatibilité et pour manipuler le chipet musical), la Game Gear de chez Séga et Nintendo utilise une version lite pour sa Game Boy !
Bon un processeur possède de la mémoire internet. Limité sur un système 8 bits mais très rapide. Nous les appelons les registres.
Le Z80 possède donc des registres dit 8 Bits nommé arbitrairement.
A,B,C,D,E,F,H,L
Chacune de ses 8 huits registres peuvent mémoriser un valeur entre 0 et 255. (1 Octet donc)
Le Registre A est ce que nous appelons l'accumulateur. Il est reliés de telle sorte que sur certaine instruction, on passe par lui pour gagner de la rapidité, et de la mémoire. (Souvent tout ce qui touche au calcule)
Le Registre F est le registre des Drapeaux. (Flags) il sert à mémoriser des tas de choses, comme une retenue, ou si A est égale à 0…
Sur le Z80 on peux combiner par paire les registres. Le registre H et L sont souvent regroupés pour travailler avec des Adresses mémoires. (Ah j'ai perdu du monde la, je reviendrais dessus)
Le Z80 possède aussi des registres dit 16 bits. Qui permet donc de mémoriser une valeur en 0 et 65535
Nous avons dans ce domaine le registre PC qui lui permet donc de retenir la prochaine adresse mémoire à lire. (Le registre PC s’agrémente de 1 à chaque fois qu'il est sollicité) , le registre SP qui est le pointeur de pile. (La j'ai encore perdu du monde, En gros c'est une valeur qui est l'adresse mémoire qui contient elle même une adresse mémoire bon oublions) et deux autres registre 16 bits nommé IX et IY qui est utilisé dans des instructions du proco (instruction ? Oué je vais en parler)
Voici en gros ce que possède le proco Z80 en mémoire.
Un deuxième processeur 8 bits fut souvent utilisé par le passé.
Le Motoral 6502. Proco du C64, de la nes (avec modification)
Ceci dit je ne le connais pas vraiment.
Je parlais des adresses mémoire. C'est quoi une adresse mémoire ? C'est simple c'est une valeur qui permet d'identifier une case mémoire de votre ordinateur et chaque case mémoire c'est un octet. (8 bits, une valeur entre 0 et 255)
Donc un pc avec 4Go, ba c'est 4 000 000 000 de cases environs avec chacun un numéros.
Donc votre proco va aller déposer des valeurs , ou l'inverse les lires. C'est ce que nous appelons l'adressage de mémoire.
Petit information on dit souvent qu'un proco 32 bits ne peux pas utiliser plus de 4Go pourquoi ?
Voici une supposition « Windows 32 » ne peux manipuler au maximum des valeurs comme son nom l'indique de 32 bits. (On peux foutre Windows 32 sur un proco 64 bits donc la c'est le logiciel qui bride) la valeur maximum de 32 bits est 4 294 967 295
Voilà pourquoi cette limitation. Encore un petit truc, c'est la limite que windows 32 peux travailler en « même temps ». Il existe des bidouilles qui permet de sauter cette limite en switchant une partie de la mémoire par une autre !!! (La mémoire Paginé)
Maintenant passons sur 8bits. Qu'elle est la mémoire maximum disponible sur un proco 8 bits ? Enfin nous allons parlé du Z80.
256 octet ?
Bien essayé mais non.
Nous avons le registre PC qui permet de mémoriser une adresse mémoire. C'est un registre 16 bits.
Et 16 bits c'est 65535
Donc la mémoire disponibles maximum est de 65 355 octet. Sois 64k dans le langage que nous utilisons le plus souvent.
Ceci dit comme pour windows on peux tricher et échanger des morceaux de la ram par d'autre. Ce que l'amstrad CPC 6128 fait avec ses 128ko de mémoire vive.
Bon plus haut j'ai parlé d'instruction !
Le processeur c'est con, il ne connais que deux chiffre. 0 ou 1. Ouvert ou Fermé. On ou OFF. Courant ou pas de Courant ! C'est le système Binaire. Et sur Rpg Maker vous l'utilisez souvent avec les interrupteurs par exemple. Votre ordinateur, c'est continuellement.
Alors concrètement comment ça fonctionne ?
C'est simple, si je vous dit : Et toi mec tu vas aller de l'autre coté de la falaise, une fois en place, si je lève mon bras, tu lances une pierre. Sinon tu ne fais rien. L'exemple est con je veux bien l'avoué.
La on a donc deux situations, soit il ne fait rien, soit j'ordonne à mon ami de jeter une pierre.
Ceci dit seulement deux actions c'est mince. Je vais chercher un ami qui a coté de moi va aussi lever ou pas son bras avec moi. On passe donc à 4 ordres possible à donner à mon copain de l'autre coté de la falaise. Et si je veux continuer à ajouter à mon catalogue plus d'ordre, j'ajoute un 4em gus à coté moi, voir plus. Voyons nous sommes 8. Ce qui nous donnes 256 possibilités d'ordre codé sur un bras non levé (0) ou un bras levé (1)
Le proco c'est la même chose. Enfin presque car lui c'est pas des Bras que nous levons xd mais on lui injecte des 0 et des 1. Chaque groupes de 8 chiffres dans une case mémoire (1 octet donc) est potentiellement une instruction. (Ou un départ d'instruction car sur certain ordre, il faut plusieurs octet ce qui augmente le nombre d'instruction potentiellement connus du proco)
Le proco va lire le contenue du registre PC qui est une adresse mémoire, va aller chercher la valeur contenue à cette adresse, va incrémenter de 1 le PC, va déchiffrer l'ordre et ensuite l’exécuté !
Exemple dans PC il y a l'adresse 3000.
Dans 3000, la valeur est 4. Il décrypte et pour le Z80, il sait qu'il doit ajouter 1 à la valeur contenue dans le registre A. (Véridique)
Par contre sur un autre processeur c'est peut être l'inverse. Il faut retirer 1 à la valeur contenue de son accumulateur ou je ne sais pas quoi.
Ceci est le langage Machine ! Le pure langage machine ou chaque octet est une instruction que le processeur peut comprendre… Et chaque processeur à son propre langage ou presque car il existe des familles qui partage des instructions pour être compatible. C'est le cas des « X86 » ou la base est le même langage mais suivant les procos (Intel,AMD, et leurs différente Famille I7, Pentium …)
possèdé des instruction en plus ou différent.
Oué mais programmer en 0 et en 1 c'est pas top heins ! Risque d'erreur, et tout ça.
C'est vrais. Et c'est pour ça que l'homme s'est simplifier la vie et qu'il a créer ce que nous appelons le langage « assembleur » .
Ajouter 1 à la valeur contenue dans le registre A ! Dans un assembleur Z80 on pourra écrire
Inc A
On lance la compilation, le programme va voir inc A et va remplacer tout ça par 4
(A vrais dire il va remplacer ça par 00000011 système binaire !!!)
Et peux importe de toute façon le langage utilisé c'est la même chose. En C quand on compile à la fin ce sont des 0 et des 1 compréhensible par le processeur !
Et les langages interprété , (Java?) C'est pareil. Interpréteur va lire l'instruction, et le transformer en binaire pour que la machine puisse comprendre. (C'est plus lent que compiler même si sur nos proco actuel, c'est moins flagrant à voir)
Mais le proco ne sais pas simplement ajouter 1 à un registre ? On serais dans le caca si il y avait que ça…
Bien sur que non. Il y a beaucoup d'instruction, même dans un proco 8 bits.
Le Z80 permet de transférer la valeur contenue dans un registre dans une case mémoire, faire l'inverse. Faire des additions, des soustractions. (Mais le z80 ne sais pas multiplier par exemple il faut écrire la « fonction », faire des boucle, sauter dans une autre case mémoire, tester un bit contenue dans une case mémoire, faire des rotations de valeurs, ajouter une valeur sur la pile, Modifier A par la valeur contenue dans l'adresse mémoire pointé par le double registre HL (les pointeurssssssss)
Un programme informatique c'est que ça. Déplacement de mémoire.
Décryptage d'un programme Assembleur du Z80Même pour un proco, il existe plusieurs logiciel d'assembleur. Il existe même des assembleurs pour « compiler » sur une machine A et que cela tourne sur une machine B. (Cross Dev)
Voici un vieux test que j'ai fais il y a plus d'un an. De mémoire et en fonction de mes notes cela permet de faire avancer des battlecharset réalisé en lettre qui ont était redéfini.
L'assembleur que j'ai utilisé demande que chaque ligne soit numéroté comme les anciens basics. D'autre assembleur ne demande pas ça. C'est le premier que j'avais utilité donc je n'ai pas cherché plus loins.
Ligne 10 :
Org &A000
Ceci n'est pas du « code machine » c'est une information qui dit que le programme sera stocké à la case mémoire &A000
&A000 c'est une valeur Hexadécimale. Plus facile à lire que des bits.
20 LD A,0
C'est une ligne qui sera transformer en bits ! LD veux dire pour cette assembleur (et les Z80) Charger. (Load => LD), A c'est le registre de l'accumulateur, et 0 c'est la valeur à placer dans le registre A. Sur d'autre proco le cela ne sera pas LD mais Move. ET A peut être représenter par R1 par exemple.
Bon donc la A = 0
30 LD BC,0
Comme la ligne 20, on réunis les deux registre BC et on injecte 0.
40 LD L,(IX )
C'est intéressant ça. IX est entre parenthèse donc c'est un pointeur.
Le registre IX contient une Adresse mémoire. On donc aller à cette adresse mémoire, prendre ça valeur et la charger dans L !
La ligne 50 fait pareil avec H sauf que nous allons chercher à une adresse plus loin que celui contenue dans IX (IX+1)
Concrètement sur ses deux instructions, j'ai du en appelant le programme machine envoyé une valeurs qui s'est logé dans IX pour la ressortir et la travailler ici.
60 BOUCLE. ADD HL,BC
Une belle ligne. BOUCLE. Est une étiquette. ADD HL,BC c'est une adition.
On ajoute à HL le contenue de BC donc la à l'heure actuel on fait HL+0
HL est la réunion des deux registre H et L pour former un registre 16 bit !
70 LD D,H
Simple à comprendre on place le contenue de H dans le registre D
80 LD E,L
Pareil on place le contenue de L dans E
90 LD BC,8
On place la valeur 8 dans le double registre BC.
100 SBC HL,BC
HL=HL-BC donc une soustraction.
110 LDIR
LDIR est tout simplement une commande pour déplacer plusieurs case mémoires consécutive dans un autre bloc.
On regarde le contenue de HL qui est une adresse, on regarde aussi DE qui est une adresse aussi. On va chercher la valeur à l'adresse pointé par HL, et on la place dans la case mémoire pointé par DE. Ensuite cette commande agrémente de 1 l'adresse contenue dans DE et HL et on décrémente de 1 la valeur contenue dans BC. On continue l’opération jusque que BC=0 Et bomme dans cette exemple BC vaut 8, on fait ça 8 fois.
120 Ld BC,2048
On mémorise dans BC, la valeur 2048 qui correspond à un saut ligne sur l'asmtrad, j'en parlerais plus tard.
130 INC A
On incrémente A
140 CP 8
CP c'est un Test. La on test si A = 8. Si c'est le cas dans le registre F un petit bit se mettre à 1 (je simfplifie
150 NZ,BOUCLE
Si le teste de la ligne 150 est faux on retourne à l'étiquette Boucle (donc on fait ça 8 fois aussi pour 8 lignes)
160 Ret
Retour ! En gros le programme assembleur redonne la main dans l'exemple au programma Basic de l'amstrad.
Voici un petit exemple qui permet donc de déplacer un personnages montrés sur la capture plus haut.
Le langage machine est pratiquement obligatoire sur les vieux ordinateurs, et console pour tirer parti de la puissance des machines surtout au niveau graphismes. Les vieux ordis fut souvent équipé du langage Basic en interprété et la la lenteur se fait sentir considérablement même si il est possible de créer des jeux en 100 % Basic.
Connaître le langage d'un proco n'est pas suffisant pour programmer. Il faut connaître la machine aussi. L'Amstrad et la/le Game Boy possède le même langage mais par la même architecture.
Injecter ce bout de programme dans la game boy aura très certainement d'autre effet que de déplacer 8 lignes verticales sur X pixels à gauche même si le proco va savoir décrypter tout ça.
Le potentiel problème de l'assembleur (et donc du langage machine) c'est qu'il est très peux portable. Plus facile sur les même proco mais quand on change proco c'est terminer !
Pour cela que des langages t'elle que le C par exemple existe par exemple. Beaucoup plus facile pour le programmeur de porter son programme. Enfin presque.
Voilà, c'était un petit paragraphe sur le proco et un le Z80. J'ai simplifié des choses, un peu abus de langage. Le prochain pavé si il y a toujours des lecteurs qui veulent bien (ça c'est pas sur) c'est la présentation de « L'Amstrad » et un peu de son Hadware.
Voilou.