Skip to content
Juan Gonzalez-Gomez edited this page Dec 8, 2017 · 26 revisions

ISA

BICHO es de 8 bits

Registros

  • R0, R1, R2 : De propósito general, el valor de retorno en R0, como hay pocos registros seguramente haya que guardarlo en la pila

  • SW (R11)

    • Status XXXXXXVZ
      • bit 0 es Z (ult. op es cero)
      • bit 1 es V (overflow)
  • PC (R12)

  • SP (R13)

Instrucciones

Instrucciones generales

  • IO RN #(saca por los leds los bits de RN, incluye SW, PC y SP, para depurar)
  • NOP
  • HALT
  • WAIT RN #(espera RN ms)

Memoria/control de flujo

  • LD (RN), RM #(incluye SW, PC y SP, no hace falta BR)
  • LD imm, RM
  • MOV RN, RM ---sería -> LD 0x0, RM; ADD RN, RM
  • #-> BR RN sería MOV RN, R12
  • ST RN, (RM) #(incluye SW, PC y SP, no hace CALL)
  • #-> PUSH RN --- sería -> ST RN, (R13); LD 1, R0; ADD R0 R13
  • #-> CALL RN--- sería -> ST R12, (R13); LD 1, R0; ADD R0 R13; LD 0x0, RN; ADD 0, RM;
  • #--> se puede reescribir PUSH R12; MOV RN, R12; --> PUSH R12; BR RN
  • #-> POP RN ---sería -> LD (R13), RN; LD 0xff, R0; ADD R0 R13

Aritméticas

  • ADD RN, RM # RN+RM -> RM (incluye PC y SP),
    • pone Z si RM es 0,
    • pone V si el resultado es mayor que 01111111 (127)
    • o menor que 10000000 (-128)
  • LESS RN, RM # RN < RM
    • Z= 0 si RN >= RM, en compl a 2, así que A= XYYYYYYY, B = RBBBBBBB,
      • A >= B Si X = 0 y R =0 -> Si YYYYYYY >= BBBBBBB Z = 0 Si X = 1 y R =1 -> Si YYYYYYY <= BBBBBBB Z= 0 Si X = 0 y R =1 -> Z = 0 Si X = 1 y R =0 -> Z = 1
  • SHL SHR y MUL son bucles de ADD (hay que programarlos para asegurarse)

Lógicas

  • AND RN, RM # RN & RM ->RM bit a bit (incluye PC y SP), pone Z si RM es 0
  • OR RN, RM # RN | RM ->RM bit a bit (incluye PC y SP), pone Z si RM es 0
  • XOR RN, RM # RN ^ RM ->RM bit a bit (incluye PC y SP), pone Z si RM es 0 *-> EQ RN, RM N ---sería -> XOR RN, RM y Z dice si son iguales *-> NOT RN ---sería -> LD 0xff, R0; XOR R0, RN y Z dice si el resultado es 0

Mapa de memoria

De momento la ROM que empieza en 0x10 y que es donde salta y donde está el "cargador".Quizás RAM en otro sitio más adelante

Es importante que de 0 a 0x10 no esté mapeado en memoria y que si alguien pone el PC ahí, pase algo, por ejemplo se pare la máquina y se quede el led parpadeando o algo identificable.

Codificación de instrucciones.

El ancho es fijo, pero puede contener un inmediato que es del mismo ancho que la instrucción.

  • Los 4 bits menores son registros/operandos (los Y) XXXXYYYY
  • Los 4 bits mayores son las descripción de la instrucción (los X) XXXXYYYY
  • Las instrucciones 00XXYYYY Son de generales
  • Las instrucciones 01XXYYYY Son de memoria
  • Las instrucciones 10XXYYYY Son aritméticas
  • Las instrucciones 11XXYYYY Son lógicas

Operadores

  • XXXX0YYY Registros normales
  • XXXX0000 R0
  • XXXX0001 R1
  • XXXX0010 R2
  • XXXX110Y Registros especiales
  • XXXX1011 SW
  • XXXX1100 PC
  • XXXX1101 SP
  • XXXX1110 IMM
  • XXXX1111 no operand

Cuando el operador es inmediato (LD, se lee la siguiente palabra de la memoria).

Instrucciones:

  • NOP 0000YYYY

  • IO 0001YYYY

  • HALT 0010YYYY

  • WAIT 0001YYYY

  • LD 0100YYYY

  • ST 0101YYYY

  • ADD 1000YYYY

  • LESS 1001YYYY

  • AND 1100YYYY

  • OR 1101YYYY

  • XOR 1110YYYY

Clone this wiki locally