Programme de test du nanoprocesseur

;==============================================================================
;== TP5 : Programme verif_globale.s
;==============================================================================
;Il s'agit ici d'un fichier commenté du programme verif_globale.
;
;La première zone correspond à la zone programme. Elle comporte :
;       Code assembleur : colonnes 1,2,3 (label, code, operande)
;       Le PC corresponsant à l'adresse de l'instruction en cours : colonne 4
;           (afficheur 7 seg de gauche aux cycles 1 et 3)
;       L'adresse en RAM de l'éventuelle opérande : colonne 5
;           (afficheur 7 seg de gauche au cycle 2)
;       Le registre I (instruction en cours) : colonne 6
;           (Leds rouge, en binaire, qui ne sont valides qu'à partir du cycle 2)
;       Accumulateur, Z et C après exécution de l'instruction en cours : colonnes 7,8 et 9
;           (afficheur 7 seg de droite / valides seulement à partir du cycle 3 : EX)
;       Commentaire : colonne 10
;
;Les constantes indiquées sous forme $xx sont en hexadécimal.
;
;La deuxieme zone correspond a la zone des données. De même, elle comporte
;       Code assembleur : colonne 1,2,3 (nom variable, valeur, adresse)
;       Valeur variable : colonne 4,5,6 (décimal, binaire et hexadécimal)
;

;==============================================================================
;== Zone programme
;==============================================================================
     
;label  code operande;   PC       I     AD        accu   C  Z  Commentaire

:DEBUT  NOP  ZERO    ;  $00      $0    $39        $00    0  0    
        LDA  DATA0   ;  $02      $A    $30        $FF    0  0    (DATA0 : donnée à l'adresse $30)
        XOR  DATA1   ;  $04      $1    $31        $3A    0  0    (A = $FF XOR $C5)
        AND  DATA2   ;  $06      $2    $32        $10    0  0    (A = $3A AND $10)  
        OR-  DATA3   ;  $08      $3    $33        $31    0  0    (A = $10 OR  $21)
        ADD  DATA4   ;  $0A      $4    $34        $00    1  1    (A = $31  +  $CF)
        ADC  DATA5   ;  $0C      $5    $35        $01    0  0    (A = $00  +  $00  + 1)
        SUB  DATA6   ;  $0E      $6    $36        $FF    1  0    (A = $01  -  $02)
        SBC  DATA7   ;  $10      $7    $37        $00    0  1    (A = $FF  -  $FD  - 1)
        XOR  DATA1   ;  $12      $1    $31        $C5    0  0    (A = $00 XOR $C5)
        ROL  ZERO    ;  $14      $8    $39        $8A    0  0    (A = ROL($C5))
        ROR  ZERO    ;  $16      $9    $39        $C5    0  0    (A = ROR($8A))
        STA  RESULT  ;  $18      $B    $3B        $C5    0  0    (Memoire[$3B] <- $C5)
        LDA  ZERO    ;  $1A      $A    $39        $00    0  1    (A <- Memoire[$39])
        LDA  RESULT  ;  $1C      $A    $3B        $C5    0  0    (A <- Memoire[$3B])
        LDA  COUNT   ;  $1E      $A    $38        $03    0  0    (A <- Memoire[$38])
        OUT  UN      ;  $20      $C    $3A        $03    0  0    (BZ <- Memoire[$3A][0])
:COMPT1 SUB  UN      ;  $22      $6    $3A        $02    0  0    (A = $03  -  $01)
        JNC  COMPT1  ;  $24      $E    $22        $02    X  0    Retour à COMPT1 3 fois
        LDA  COUNT   ;  $26      $A    $38        $03    0  0    (A <- Memoire[$38])
        OUT  ZERO    ;  $28      $C    $39        $03    0  0    (BZ <- Memoire[$39][0])
:COMPT2 SUB  UN      ;  $2A      $6    $3A        $02    0  0    (A = $03  -  $01)
        JNZ  COMPT2  ;  $2C      $F    $2A        $02    0  0    Retour à COMPT2 2 fois
        JMP  DEBUT   ;  $2E      $D    $00        $00    0  1    Retour à debut
;==============================================================================
;== Zone donnees
;==============================================================================
;Nom variable    Valeur    Ad   Décimal  Binaire     Hexadécimal
:DATA0    .db   255     ; $30    255     11111111      $FF
:DATA1    .db   197     ; $31    197     11000101      $C5
:DATA2    .db   16      ; $32     16     00010000      $10
:DATA3    .db   33      ; $33     33     00100001      $21
:DATA4    .db   207     ; $34    207     11001111      $CF
:DATA5    .db   0       ; $35      0     00000000      $00
:DATA6    .db   2       ; $36      2     00000010      $02
:DATA7    .db   254     ; $37    254     11111110      $FD
:COUNT    .db   3       ; $38      3     00000011      $03
:ZERO     .db   0       ; $39      0     00000000      $00
:UN       .db   1       ; $3A      1     00000001      $01
:RESULT   .db   0       ; $3B      0     00000000      $00