Aller au contenu

SPU

·340 mots·2 mins
Killar
Auteur
Killar
Je suis développeur/codeur en Java, Rust et Godot. Je fait des jeux et des mods Minecraft. Je fais actuellement des études. Et je fait des vidéos YouTube parfois.

A propos
#

Le SPU (Simple Processing Uint) est un petit processeur 16-bit que j’ai fait très inspiré par le processeur 6502.

L’objectif principal de ce processeur est d’être un processeur facile à utiliser. Ce processeur a que 16 instructions.

Set d’instructions du SPU
#

InstructionArgumentCe qu’il fait
ADDRienFait X + Y et retourne le resultat à X.
SUBRienFait X - Y et retourne le resultat à X.
ANDRienFait X & Y et retourne le resultat à X.
ORRienFait X | Y et retourne le resultat à X.
XORRienFait X ^ Y et retourne le resultat à X.
NOTRineInverse le registeur X.
LDXim12/adr12Change la valeur de X.
LDYim12/adr12Change la valeur de Y.
STXadr12Met la valeur du registeur X dans l’adresse ram.
STYadr12Met la valeur du registeur X dans l’adresse ram.
JMPadr12Sauter au label/adresse.
JICadr12Sauter au label/adresse si le carry flag est active.
JIZadr12Sauter au label/adresse si le zero flag est active.
HLTRienArrète le proccesseur.

J’ai fait un assembleur en rust, et fait le processeur entier sur Logisim Evolution. Et j’ai pas d’emulateur car j’avais la flemme… Mais c’était un projet très cool à faire.

Ici un programme d’exemple qui fait la séquance de fibonacci:

/*
  Do the fibonacci sequence.
  The end result goes into the ram address $0001.
*/

;Init variables
ldx 0
stx $0001   ; prev1 = 0
ldx 1
stx $0002   ; prev2 = 1
ldx 9
stx $0000   ; n = 9

loop:
  ldy 3
  sub
  ldy 128
  add
  jic stop  ; if n < 3 { stop(); }

  ldx $0002
  ldy $0001
  add
  sty $0002 ; prev2 = prev1
  stx $0001 ; prev1 = prev2 + prev1

  ldx $0000
  ldy 1
  sub
  stx $0000 ; n -= 1

  jmp loop
stop:
  hlt

J’ai fait une vidéo sur YouTube de comment j’ai l’assembleur:

Assembler repo
#

Killarexe/SPU-Assembler

An assembler for the SPU using rust

Rust
0
0