nadia911 escribió:Y si haces una especie de mini tutorial, que no me entero de nada y eso que leí el manual...

Uff! No tengo nivel para tutorializar nada, pero si voy a intentar explicar 4 conceptos, y a ver si por ahí hacemos algo.
La verdad es que este juego presupone que tenemos nociones de programación, y esto, a mi entender, es presuponer demasiado. Hay cosas que pueden parecer fáciles si tienes esas nociones, pero que al profano le pueden parecer crípticas. Intentaré no usar jerga técnica, por lo que si algún programador lee esto y ve alguna cagada espero que sea comprensivo.
La pantalla principal del juego:
Cada cajita es un reto, o prueba o como se quiera llamar. En este pantallazo solo se puede acceder al primero
SELF-TEST DIAGNOSTIC. Una vez se solucione, el juego te da acceso a más problemas. Para empezar, clickas en CREATE NEW PROGRAM y te envía a la pantalla donde vas a trabajar.
No estoy en casa, por lo que no puedo abrir el juego, y tengo que usar pantallazos que encuentro por ahí, por lo que el siguiente es de otro reto y con algún código escrito, espero que no os lie demasiado.
Esta es más o menos la pantalla de trabajo que en líneas generales aparecerá siempre. Se pueden ver 12 cajas en la pantalla, que se llaman
NODOS y que están interconectadas por flechas de entrada y salida. En la parte izquierda de la pantalla, tenemos primero un cuadro con un texto; ahí se especifican las condiciones y resultados para solventar el problema. No usaré lo que pone en este pantallazo, porque es un poco complejo y no quiero liaros, pero por ejemplo podría decir; coje el dato que entra por A, y saca el mismo dato por B, pero doblado y negativo.
Debajo de ese cuadro tenemos un listado de datos: la primera columna son los datos que secuencialmente van a ir entrando en IN, y la segunda y tercera columnas son los datos que deberían salir por S y L para que la solución sea correcta. Una vez arranquemos el programa, los datos que salgan irán poniendose al lado de esas columnas, para que podamos ver si lo estamos haciendo bien. Eso se llama Debugging en programación.
Debajo de esas columnas están los controles del programa, paro, paso a paso, arranque y rápido.
Estos son los conceptos de la arquitectura de la máquina. Ahora vamos con el meollo.
En cada nodo, tenemos unas entradas y una salidas (las flechitas), y unos chivatos donde te indica el valor de la variable en un momento dado (ACC por ejemplo). Dentro de la caja (nodo) tenemos que escribir instrucciones con las que trabajemos con los datos. Imaginemos que tenemos una simplificación total del juego, donde hay solo un nodo, con una entrada arriba y una salida abajo, y el reto nos pide que el dato que entre por arriba, salga por abajo en negativo. Deberíamos escribir dentro del nodo, en un lenguaje normal, lo siguiente:
COJE EL DATO QUE ENTRA ARRIBA
CONVIERTE EL DATO EN NEGATIVO
ENVÍA EL DATO POR LA SALIDA DE ABAJO
Esto que puede parecer una completa gilipollez es de lo que se trata, analizar el problema, dividirlo en sus componentes más pequeños posibles, y traducirlo al lenguaje de la máquina. Si quisiera escribir ese ejemplo exacto y preciso con el lenguaje del TIS-100, quedaría así:
MOV UP, ACC
NEG
MOV ACC, DOWN
Ahora, el quid de la cuestión, las dificultades de trabajar con un lenguaje de bajo nivel como el ensamblador...
ACC es una variable, o sea, un lugar para guardar un dato, a fin de que lo podamos manipular como queramos. O sea, cojemos un dato, por ejemplo 16, y lo guardamos en ACC, o sea que ACC=16. Ahí lo manipulamos, por ejemplo con la instrucción NEG, que lo convierte en negativo, por lo que ahora ACC=-16, y así sucesivamente. Y diréis ¿cual es el problema? pues el problema es que sólo disponemos de UNA variable para cada nodo, y con eso y un bizcocho, a programar hermano...
Tenemos otra variable que se llama BAK, pero no es leíble ni escribible como ACC, si no mediante unas instrucciones especiales que se llaman SAV y SWP, por lo que no sirve para todo.
La seguna dificultad es que la ejecución del programa es simultánea para todos los nodos, por lo que un as líneas de código que a priori podrían funcionar bien, no lo hacen porque entran en conflicto con otros nodos... pero eso lo dejo ahí porque estoy avanzando demasiado.
Lo voy a dejar aquí de momento, porque no se si estoy siendo claro o os voy a liar más que otra cosa. Podría explicar las instrucciones, pero en el manual están bastante claras. Prefiero que me pongáis dudas y si está en mi mano las respondo.
Como consejo, si os gusta el tema, podéis buscar algún tutorial fácil y en español de ensamblador, que hay bastantes por la red, y que aunque no sean exactamente las mismas instrucciones, el concepto es el mismo. Por ejemplo
éste. También había algún documento sobre "aprender a pensar como un programador" por la red que puede ser útil.
El siguiente paso es optimizar. Cuando has resuelto el problema, intentar hacerlo usando las mínimas instrucciones y nodos posibles. Eso hace que los programas sean rápidos y eficientes. Y optimizar es un vicio muuuuuuuu grande.
¿O no os habéis quejado muchas veces de que una mierda de wargame con cuatro gráficos churruteros os va como una porquería de lento en vuestro pepino de ordenador?
Pues eso es porque el programador de ese wargame nunca ha jugado al TIS-100
