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 0000000..a6a3481 Binary files /dev/null and b/src/img/dibujo_papiercomputer-tabla.png differ 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?