From 6fb019fd4cc7221806404f0c96c6f58f60b981ae Mon Sep 17 00:00:00 2001 From: sejo Date: Mon, 12 Jul 2021 21:23:19 -0500 Subject: [PATCH] =?UTF-8?q?ciclo=20de=20instrucci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/computadora_de_papel.gmo | 106 ++++++++++++++++++++++++ src/darena.gmo | 1 + src/img/dibujo_papiercomputer-tabla.png | Bin 0 -> 31285 bytes src/nibble_dice_tracker.gmo | 5 ++ 4 files changed, 112 insertions(+) create mode 100644 src/computadora_de_papel.gmo create mode 100644 src/img/dibujo_papiercomputer-tabla.png diff --git a/src/computadora_de_papel.gmo b/src/computadora_de_papel.gmo new file mode 100644 index 0000000..b02580d --- /dev/null +++ b/src/computadora_de_papel.gmo @@ -0,0 +1,106 @@ +# computadora de papel + +adaptación de la wdr papiercomputer; modelo sencillo de una arquitectura computacional común. + +=> https://wiki.xxiivv.com/site/papier.html papier computer +=> ./computer_architecture.gmi {computer architecture} + +para la versión bailada, ve {danza papier} + +# materiales + +necesitamos una hoja de papel, algún instrumento para marcarla, y múltiples objetos de una misma clase (frijoles, palillos, canicas, fichas, etc). + +## memoria(s) + +la hoja la dividiremos en dos partes: + +* memoria de programa +* memoria de datos (registros) + +cada una de esas partes estará dividida en múltiples recuadros numerados. en esta primera versión, numeremos del 0 al 9. + +cada recuadro está dividido a la mitad. + +=> ./img/dibujo_papiercomputer-tabla.png dibujo mostrando una hoja dividida en dos secciones, cada una con 10 recuadros numerados del 0 al 9, y cada recuadro dividido a la mitad. + +el objeto que usamos para marcarla nos puede servir para indicar nuestra posición actual en la memoria de programa. + +# lista de instrucciones + +la computadora cuenta con los 5 siguientes códigos de operación. el código es su identificador numérico único, y entre paréntesis se muestra su mnemónico + +* 0: Fin del programa (FIN) +* 1: Condicional (CND) +* 2: Salta a instrucción (SLT) +* 3: Incrementa registro (INC) +* 4: Decrementa registro (DEC) + +una instrucción completa consiste de ese código de operación, acompañada de un número llamado argumento u operando. + +## operandos + +ese operando tiene un significado distinto según la instrucción: + +* FIN: argumento ignorado +* CND: el argumento es el número de Registro a consultar: si los contenidos de ese registro son 0, hay que saltarse una instrucción, y si no, hay que continuar normalmente con la siguiente. +* SLT: el argumento es el número de línea a la cual saltar a continuación +* INC: el argumento es el número de Registro que ha de incrementarse +* DEC: el argumento es el número de Registro que ha de decrementarse + +## descripción + +podemos expresar a las instrucciones de la siguiente manera: + +* FIN: termina la ejecución del programa +* CND Rx: si el registro Rx tiene un valor igual a 0, salta una instrucción; si no, continúa normalmente +* SLT x: salta a la instrucción del programa número x +* INC Rx: súmale 1 al registro Rx +* DEC Rx: réstale 1 al registro Rx + +# ciclo de instrucción + +iniciamos con nuestro apuntador en la instrucción número 0. + +el ciclo que seguiremos será: + +* fetch: lee la instrucción almacenada en donde está el apuntador +* execute: ejecuta la instrucción correspondiente, y actualiza la posición del apuntador. + +en las instrucciones INC y DEC, el apuntador siempre avanza a la siguiente casilla. + +en la instrucción SLT, el apuntador se mueve a la casilla indicada como argumento. + +en la instrucción CND, el apuntador se mueve a la casilla siguiente, o una más abajo, dependiendo de la condición indicada. + +# ejemplo de programa + +este programa suma los números que están en R0 y R1, colocando el resultado en R0 + +## lista de números + +este es el programa en formato de lista de números a colocar en la memoria de programa. + +* 0: 2 3 +* 1: 4 1 +* 2: 3 0 +* 3: 1 1 +* 4: 2 1 +* 5: 0 0 + +el primer dígito en la lista es el número de línea. + +los dos dígitos siguientes son el primer y segundo números de instrucción + +## lenguaje ensamblador + +usando las palabras clave (mnemónicos) para indicar los códigos de operación, el programa se vería así: + +* 0: SLT 3 (salta a la línea 3) +* 1: DEC 1 (decrementa R1) +* 2: INC 0 (incrementa R0) +* 3: CND 1 (¿R1 es 0? si sí, salta una instrucción, si no, continúa) +* 4: SLT 1 (salta a la línea 1) +* 5: FIN 0 (fin del programa) + +(esta forma de programar, en lenguaje ensamblador, es a la que se refiere la práctica de {s-camino}) diff --git a/src/darena.gmo b/src/darena.gmo index 751c4b5..48a89c5 100644 --- a/src/darena.gmo +++ b/src/darena.gmo @@ -41,6 +41,7 @@ use the arrow keys for cartesian movement within the space * add an "official" pulling option (you can pull rocks right now, but in a hacky way) * save rocks state (position and color) to file * optimize the use of memory for rock colors, using one bit per rock instead of one byte +* optimize for 256x192 screensize # the code diff --git a/src/img/dibujo_papiercomputer-tabla.png b/src/img/dibujo_papiercomputer-tabla.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a3481c8c220cc40f8189dd3d31995e99dcb06a GIT binary patch literal 31285 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Ξ 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 w07r6Rc`ZaWFfCR07*qoM6N<$f_p1pF8}}l literal 0 HcmV?d00001 diff --git a/src/nibble_dice_tracker.gmo b/src/nibble_dice_tracker.gmo index 4efc47d..b670738 100644 --- a/src/nibble_dice_tracker.gmo +++ b/src/nibble_dice_tracker.gmo @@ -58,3 +58,8 @@ available samples: you can find the code in the {uxnería} => https://codeberg.org/sejo/uxneria uxnería repo +# possible improvements + +* automatically center interface on screen +* keys for setting the value of a nibble? +* midi output?