<\body> > Nous proposons ici une spécification pour un processeur minimaliste 16 bit RISC. La machine dispose de 8 registres \S généraux \T : \; <\itemize> 0. Registre ou zéro (valant tout le temps 0...) 1. Registre 2. Registre 3. Registre 4. Registre 5. Registre , écrit par certaines instructions (multiplication, division...) et utilisé préférentiellement comme registre temporaire pour certaines instructions composées 6. Registre , ou (return adresse), écrit par l'instruction 7. Registre , ou (stack pointer), utilisé par les instructions et De plus, le processeur dispose d'un registre non manipulable, le registre (program counter). Les numéros de registres sont donc codés sur 3 bits. La mémoire est adressée sur 16 bits, il y a donc 64ko disponnibles. Le CPU est little-endian (le mot 0x1234 est codé 34 puis 12) On définit plusieurs zones de mémoire : |>||>||>>>>|Memory map> On définit plusieurs zones de mémoire : |>||>||>||>||>>>>|Memory map> Les 0x3000 (12288) octets de mémoire pour le VGA correspondent à un affichage bitmapé 336x288 noir et blanc (un octet représente 8 pixels), ce qui fait avec une police d'écriture 8x8 un affichage texte possible en 42x36. Les 0x0800 (2048) octets de RAM pour la fonte suffisent à définir 256 caractères en résolution 8x8 (donc 8 octets par caractère). Sur les 0x8000 octets alloués pour la MMIO, on en aura un pour l'entrée série, un pour la sortie série, un pour l'horloge et c'est tout. Le reste est auto-explicite. Les instructions sont codées sur 16 bits. Les tableaux suivants montrent les instructions avec les poids forts à gauche et les poids faibles à droite. ||||||>|>|>|>>>>>> >|||||||||>|>|>|>>|>>|>>>>> >||||||>|>|>|>>>>> ||||||||>|>|>|>>|>>>>> >||||||>|>|>>>>> Certain noms d'instuctions sont en , il s'agit de signifier qu'il s'agit d'un alias (optionnel) pour une autre instruction. |>>|>|>>|>|>|>>|||||R+R>>|>|||||R-R>>|>|||||lo\R|)>>>|>|||||hi\R|)>> si R>>|>|||||q,R|)>>>|>|||||r,R|)>> si R>>|>||||||>||||||>||||||>||||||>|||||\R|)>>>|>|||||\R|)>>>|>|||||\R|)>>>|>|||||not \R|)>>>|>|||||\R|)>>>|>||||>||>|||||\R|)>> (logical)>|>|||||\R|)>> (arith)>|>||||>||>||||>||>|||||=R?1:0|)>>>|>|||||\R?1:0|)>>>|>|||||\\R?1:0|)>>>|>|||||\R?1:0|)>>>|>|||||\\R?1:0|)>>>|>|||||\R?1:0|)>>>|>|||||>>| signé>>|||||d|)>>>| signé>>|||||PC+d>>|>||||| ; PC\PC+d>>|>||>|||R>>|>||>||| ; PC\R>>|>|||||=R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||PC+d>>| signé>>||||>||>||||>||>||||>||>|||||mem+d|)>> (16 bits)>|>|||||+d|)>\R> (16 bits)>|>|||||\mem+d|)> ; R\0> (8 bits)>|>|||||+d|)>\R> (8 bits)>|>|||||mem+R|)>> (16 bits)>|>|||||+R|)>\R> (16 bits)>|>|||||\mem+R|)> ; R\0> (8 bits)>|>|||||+R|)>\R> (8 bits)>|>|||||\d>>|>|||||\d ; R\0>>|>|||||\d>>|>|||||\d ; R\0>>|>||||>||>||||>||>||||>||>||||>|>>|>>>>|Instructions reconnues par le microproceseur> |>|>|>>|>|G-2 ;mem\R >>|>>|||>, >>|>|mem ; G\G+2>>|, >>|||, 2>>|>>|R>>|, >, >>||R+d>>|>|>>|not R>>|,Z>>>|, addr>| then addr>>|>|||>|, addr>|0> then addr>>|>|||>>>>|Instructions supplémentaires (produites par l'assembleur)>\ <\initial> <\collection> <\references> <\collection> > > > > > > > > > > > > > > > > <\auxiliary> <\collection> <\associate|table> > > > > <\associate|toc> |math-font-series||Registres> |.>>>>|> |math-font-series||Mémoire> |.>>>>|> |Modèle simple |.>>>>|> > |Modèle avec affichage bitmapé |.>>>>|> > |math-font-series||Jeu d'instruction> |.>>>>|> |Types d'instructions |.>>>>|> > |Format de base |.>>>>|> > |Format |R> |.>>>>|> > |Format |I> |.>>>>|> > |Format K |.>>>>|> > |Format |J> |.>>>>|> > |math-font-series||Tableau d'instructions> |.>>>>|>