DarwinBotsManual
Abrir la app EnglishEN

Escritura en memoria

Los catorce stores: las únicas palabras que cambian la memoria del bot, y por lo tanto la única forma de que haga algo.

Costo: Store dividido por el divisor de cada uno, solo si escribe

OperadorQué hace
storeGuarda un número en una dirección de memoria: así se dan todas las órdenes, como 20 .up store para avanzar.
incLe suma 1 a una celda de memoria: el contador más barato del ADN.
decLe resta 1 a una celda de memoria: la forma barata de llevar una cuenta regresiva.
addstoreLe suma un número a lo que ya hay en una celda, sin tener que leerla antes.
substoreLe resta un número a lo que ya hay en una celda: la celda menos el valor.
multstoreMultiplica lo que hay en una celda por un número y guarda el resultado ahí mismo.
divstoreDivide lo que hay en una celda por un número, redondeando al entero más cercano; dividir por 0 deja la celda en 0.
ceilstoreLe pone un techo a una celda: si lo que tiene es mayor que el número, lo baja a ese número.
floorstoreLe pone un piso a una celda: si lo que tiene es menor que el número, lo sube a ese número.
rndstoreCambia lo que hay en una celda por un número al azar entre 0 y ese valor, con su mismo signo.
sgnstoreCambia lo que hay en una celda por su signo: −1 si es negativo, 0 si es cero, 1 si es positivo.
absstoreLe saca el signo a lo que hay en una celda: un negativo pasa a positivo.
sqrstoreCambia lo que hay en una celda por su raíz cuadrada redondeada; si no es positivo, la deja en 0.
negstoreLe cambia el signo a lo que hay en una celda: 20 pasa a −20 y −20 a 20.

Todo lo que un bot hace pasa por estas palabras. Moverse, girar, disparar o reproducirse es poner un número en una sysvar, y lo único que escribe en la memoria son los stores. Todos comparten lo mismo:

store es, de lejos, el más usado: con él se dan todas las órdenes. inc y dec son los contadores baratos (un décimo del costo). El resto modifica lo que ya hay en la celda sin tener que leerla antes: addstore, substore, multstore y divstore hacen cuentas, ceilstore y floorstore ponen un techo o un piso, y rndstore, sgnstore, absstore, sqrstore y negstore transforman el número que está guardado.

Se combinan bien sobre la misma celda. Este gen acelera de a poco y se frena en un tope:

' pide 2 más por ciclo, hasta 40
cond
start
 2 50 addstore
 40 50 ceilstore
 *50 .up store
stop

La celda 50 sube 2, 4, 6… hasta 40 y se queda ahí, y .up recibe ese valor cada ciclo. Con *50 2 add 40 ceil 50 store también se puede, pero lleva más palabras.

La explicación completa, con la tabla de la familia, qué direcciones se pueden escribir y cuándo actúa el motor sobre lo escrito, está en Escribir en la memoria.