martes, 12 de julio de 2016

Preservación de máquinas (VII): Emulador Kenbak-1 Manejo

 Índice de entradas de Preservación de máquinas 
Colabora con el proyecto: Simplemente haz click de vez en cuanto en los anuncios, no te cuesta nada y me ayudas con los costes del proyecto. Cada 11 click aportas un euro.


Ya está desarrollado el manejo del interface del aparato, creo que se comporta como el original, según lo que he visto en YouTube de uno funcionando:


Este segundo paso completa la operatoria, ahora me falta el simulador de la máquina en sí, junto a algunas ideas sobre un ensamblador y desensamblador.

Podéis probarlo en cualquier versión de Windows a partir de XP que disponga del Framework 2 en adelante. Es un ejecutable en un solo fichero, no necesita instalación. Descargar y funcionar.

Adelanto el conjunto completo de instrucciones que estoy montando, se aprecia que hay 16 instrucciones que se refieren todas a HALT y otras 16 instrucciones que son NOOP, esto es así pues solo mira los tres últimos bits de la instrucción para determinar las, y si son 000 entonces mira los dos primeros para ver si es HALT o NOOP. También hay un pequeño hueco entre la 203 y la 207 que no están definidas en el juego de instrucciones, tengo que investigar un poco mas que hacían.

El que existan 32 formas de indicar 2 instrucciones y 5 no definidas permiten ampliar el conjunto de instrucciones de la máquina, añadiendo hasta 35 nuevas instrucciones, además del truco de hacer que una instrucción indique solo que se extiende el juego de instrucciones, y el siguiente byte puede usarse para ampliar en otras 255 instrucciones. Yo de momento no voy a implementar nada de esto, voy a desarrollar la parte del emulador que me falta.

Se indica Código (Tamaño Formato) Instrucción
  • Código es el valor numérico en decimal de la instrucción
  • Tamaño indica el número de bytes que conforman la instrucción, puede valer 1 o 2
  • Formato indica el de la instrucción, y puede ser:
    • I: Operación
    • A: Operación Registro, Número
    • B: Operación Registro, Dato
    • C: Operación Número, Dato
  • Las operaciones permitidas son ADD, AND, HALT, JMD, JMI, JPD, JPI, LNEG, LOAD, NOOP, OR, ROTL, ROTR, SET0, SET1, SFTL, SFTR, SKP0, SKP1, STORE, SUB
  •  Los registros que se manejan son A, B y X
  • Número es un entero de 0 a 4 o de 0 a 8 máximo
  • Dato es el valor que se maneja en la instrucción y depende del modo de direccionamiento, puede ser:
    • c indica dato inmediato, se reemplaza por el contenido del siguiente byte
    • d indica dirección inmediata, se reemplaza por el contenido de la dirección indicada en siguiente byte
    • (d) indica dirección indirecta, se reemplaza por el contenido de la posición de memoria indicada por el contendió de la dirección indicada en siguiente byte
    • X+c indica dato indexado, se reemplaza por el contenido de la posición de memoria indicada por sumar a X (sin alterarlo) el siguiente byte
    • X+d indica dirección indexada, se reemplaza por el contenido de la posición de memoria indicada por sumar a X (sin alterarlo) el contenido de la dirección indicada en siguiente byte

000 (1I) HALT 064 (1I) HALT 128 (1I) NOOP 192 (1I) NOOP
001 (1B) SFTL A,4 065 (1B) ROTL A,4 129 (1B) SFTR A,4 193 (1B) ROTR A,4
002 (2C) SET0 0,d 066 (2C) SET1 0,d 130 (2C) SKP0 0,d 194 (2C) SKP1 0,d
003 (2A) ADD A,c 067 (2A) ADD B,c 131 (2A) ADD X,c 195 (2A) OR A,c
004 (2A) ADD A,d 068 (2A) ADD B,d 132 (2A) ADD X,d 196 (2A) OR A,d
005 (2A) ADD A,(d) 069 (2A) ADD B,(d) 133 (2A) ADD X,(d) 197 (2A) OR A,(d)
006 (2A) ADD A,X+c 070 (2A) ADD B,X+c 134 (2A) ADD X,X+c 198 (2A) OR A,X+c
007 (2A) ADD A,X+d 071 (2A) ADD B,X+d 135 (2A) ADD X,X+d 199 (2A) OR A,X+d
008 (1I) HALT 072 (1I) HALT 136 (1I) NOOP 200 (1I) NOOP
009 (1B) SFTL A,1 073 (1B) ROTL A,1 137 (1B) SFTR A,1 201 (1B) ROTR A,1
010 (2C) SET0 1,d 074 (2C) SET1 1,d 138 (2C) SKP0 1,d 202 (2C) SKP1 1,d
011 (2A) SUB A,c 075 (2A) SUB B,c 139 (2A) SUB X,c 203
012 (2A) SUB A,d 076 (2A) SUB B,d 140 (2A) SUB X,d 204
013 (2A) SUB A,(d) 077 (2A) SUB B,(d) 141 (2A) SUB X,(d) 205
014 (2A) SUB A,X+c 078 (2A) SUB B,X+c 142 (2A) SUB X,X+c 206 (1I) INVALID
015 (2A) SUB A,X+d 079 (2A) SUB B,X+d 143 (2A) SUB X,X+d 207 (1I) INVALID
016 (1I) HALT 080 (1I) HALT 144 (1I) NOOP 208 (1I) NOOP
017 (1B) SFTL A,2 081 (1B) ROTL A,2 145 (1B) SFTR A,2 209 (1B) ROTR A,2
018 (2C) SET0 2,d 082 (2C) SET1 2,d 146 (2C) SKP0 2,d 210 (2C) SKP1 2,d
019 (2A) LOAD A,c 083 (2A) LOAD B,c 147 (2A) LOAD X,c 211 (2A) AND A,c
020 (2A) LOAD A,d 084 (2A) LOAD B,d 148 (2A) LOAD X,d 212 (2A) AND A,d
021 (2A) LOAD A,(d) 085 (2A) LOAD B,(d) 149 (2A) LOAD X,(d) 213 (2A) AND A,(d)
022 (2A) LOAD A,X+c 086 (2A) LOAD B,X+c 150 (2A) LOAD X,X+c 214 (2A) AND A,X+c
023 (2A) LOAD A,X+d 087 (2A) LOAD B,X+d 151 (2A) LOAD X,X+d 215 (2A) AND A,X+d
024 (1I) HALT 088 (1I) HALT 152 (1I) NOOP 216 (1I) NOOP
025 (1B) SFTL A,3 089 (1B) ROTL A,3 153 (1B) SFTR A,3 217 (1B) ROTR A,3
026 (2C) SET0 3,d 090 (2C) SET1 3,d 154 (2C) SKP0 3,d 218 (2C) SKP1 3,d
027 (2A) STORE A,c 091 (2A) STORE B,c 155 (2A) STORE X,c 219 (2A) LNEG A,c
028 (2A) STORE A,d 092 (2A) STORE B,d 156 (2A) STORE X,d 220 (2A) LNEG A,d
029 (2A) STORE A,(d) 093 (2A) STORE B,(d) 157 (2A) STORE X,(d) 221 (2A) LNEG A,(d)
030 (2A) STORE A,X+c 094 (2A) STORE B,X+c 158 (2A) STORE X,X+c 222 (2A) LNEG A,X+c
031 (2A) STORE A,X+d 095 (2A) STORE B,X+d 159 (2A) STORE X,X+d 223 (2A) LNEG A,X+d
032 (1I) HALT 096 (1I) HALT 160 (1I) NOOP 224 (1I) NOOP
033 (1B) SFTL B,4 097 (1B) ROTL B,4 161 (1B) SFTR B,4 225 (1B) ROTR B,4
034 (2C) SET0 4,d 098 (2C) SET1 4,d 162 (2C) SKP0 4,d 226 (2C) SKP1 4,d
035 (2A) JPD A,c 099 (2A) JPD B,c 163 (2A) JPD X,c 227 (2A) JPD ,c
036 (2A) JPD A,d 100 (2A) JPD B,d 164 (2A) JPD X,d 228 (2A) JPD ,d
037 (2A) JPD A,(d) 101 (2A) JPD B,(d) 165 (2A) JPD X,(d) 229 (2A) JPD ,(d)
038 (2A) JPD A,X+c 102 (2A) JPD B,X+c 166 (2A) JPD X,X+c 230 (2A) JPD ,X+c
039 (2A) JPD A,X+d 103 (2A) JPD B,X+d 167 (2A) JPD X,X+d 231 (2A) JPD ,X+d
040 (1I) HALT 104 (1I) HALT 168 (1I) NOOP 232 (1I) NOOP
041 (1B) SFTL B,1 105 (1B) ROTL B,1 169 (1B) SFTR B,1 233 (1B) ROTR B,1
042 (2C) SET0 5,d 106 (2C) SET1 5,d 170 (2C) SKP0 5,d 234 (2C) SKP1 5,d
043 (2A) JPI A,c 107 (2A) JPI B,c 171 (2A) JPI X,c 235 (2A) JPI ,c
044 (2A) JPI A,d 108 (2A) JPI B,d 172 (2A) JPI X,d 236 (2A) JPI ,d
045 (2A) JPI A,(d) 109 (2A) JPI B,(d) 173 (2A) JPI X,(d) 237 (2A) JPI ,(d)
046 (2A) JPI A,X+c 110 (2A) JPI B,X+c 174 (2A) JPI X,X+c 238 (2A) JPI ,X+c
047 (2A) JPI A,X+d 111 (2A) JPI B,X+d 175 (2A) JPI X,X+d 239 (2A) JPI ,X+d
048 (1I) HALT 112 (1I) HALT 176 (1I) NOOP 240 (1I) NOOP
049 (1B) SFTL B,2 113 (1B) ROTL B,2 177 (1B) SFTR B,2 241 (1B) ROTR B,2
050 (2C) SET0 6,d 114 (2C) SET1 6,d 178 (2C) SKP0 6,d 242 (2C) SKP1 6,d
051 (2A) JMD A,c 115 (2A) JMD B,c 179 (2A) JMD X,c 243 (2A) JMD ,c
052 (2A) JMD A,d 116 (2A) JMD B,d 180 (2A) JMD X,d 244 (2A) JMD ,d
053 (2A) JMD A,(d) 117 (2A) JMD B,(d) 181 (2A) JMD X,(d) 245 (2A) JMD ,(d)
054 (2A) JMD A,X+c 118 (2A) JMD B,X+c 182 (2A) JMD X,X+c 246 (2A) JMD ,X+c
055 (2A) JMD A,X+d 119 (2A) JMD B,X+d 183 (2A) JMD X,X+d 247 (2A) JMD ,X+d
056 (1I) HALT 120 (1I) HALT 184 (1I) NOOP 248 (1I) NOOP
057 (1B) SFTL B,3 121 (1B) ROTL B,3 185 (1B) SFTR B,3 249 (1B) ROTR B,3
058 (2C) SET0 7,d 122 (2C) SET1 7,d 186 (2C) SKP0 7,d 250 (2C) SKP1 7,d
059 (2A) JMI A,c 123 (2A) JMI B,c 187 (2A) JMI X,c 251 (2A) JMI ,c
060 (2A) JMI A,d 124 (2A) JMI B,d 188 (2A) JMI X,d 252 (2A) JMI ,d
061 (2A) JMI A,(d) 125 (2A) JMI B,(d) 189 (2A) JMI X,(d) 253 (2A) JMI ,(d)
062 (2A) JMI A,X+c 126 (2A) JMI B,X+c 190 (2A) JMI X,X+c 254 (2A) JMI ,X+c
063 (2A) JMI A,X+d 127 (2A) JMI B,X+d 191 (2A) JMI X,X+d 255 (2A) JMI ,X+d

No hay comentarios:

Publicar un comentario