87a76c8 Avanza con traducción de comentarios hasta linea 688
~maleza pushed to ~maleza/curto git
___ _ _ _ __ | |_ ___ / __|| | | || '__|| __|/ _ \ | (__ | |_| || | | |_| (_) | \___| \__,_||_| \__|\___/ Version: 9 I. Introducción Curto es una traducción completa de UF Forth al español. Actualmente el trabajo de tracucción está en progreso por lo que el código fuente aún no contiene caracteres especiales del idioma y la traducción de los comentarios aún no se ha completado. Este es un sistema Forth tradicional para la computadora virtual "uxn/varvara"[1]. "Curto" está escrito en Tal[2] y Forth y provee una interface de texto interactiva y un editor de pantalla. El sistema no es enebrado, compila a código UXN nativo, pero actualmente solo un mínimo de optimizaciones son realizadas. El mapeo entre código fuente Forth e instrucciones de la VM es relativamente directo por lo que la pérformance debería ser mas que suficiente para todas salvo las más críticas de las situaciones. Las celdas son de 16 bits, el sistema completo ocupa alrededor de 25k de memoria, siendo necesarios otros 4k para memoria de pantalla y buffers. II. Compilando curto Para compilar los archivos .rom, es necesario primero ensamblar el kernel y luego utilizarlo para generar archivos .rom adicionales con más funcionalidad: $ uxnasm kernel.tal kernel.rom ... $ uxncli kernel.rom <curto.f Eato producirá los siguientes archivos: kernel.rom El kernel, que contiene la funcionalidad mínima para definir nuevas palabras. curto0.rom El kernel y las palabras esenciales. curto.rom La funcionalidad de "curto0.rom" junto a palabras para acceder puertos de dispositivo de "varvara" de manera más conveniente y algunas herramientas básicas (como `volcar`). curtox.rom El sistema Forth gráfico completo, incluído el editor de bloques. III. Usando curto Correr "curto0.rom" y "curto.rom" con "uxncli" como una aplicaciónde terminal normal. "curtox.rom" debe ser ejecutada con "uxnemu": uxnemu curtox.rom <argumentos ...> Los argumentos de línea de comandos adicionales o entrada de consola serán redirigidos al prompt de entrada gráfica y pueden ser usados para realizar inicialización, etc. En la interface gráfica las siguientes combinaciones de teclas tienen un significado especial ("^" significa tecla Control, "Sh" tecla Shift y "Alt" tecla Alt): Soporte español Alt-a á Alt-e é Alt-i í Alt-o ó Alt-u ú Alt-n ñ Alt-? ¿ Alt-! ¡ ^Alt-u ü Atajos de teclado ^a Salta al principio de la linea ^e Salta al final de la linea ^c Termina curto (salvo que un bloque modificado se encuentre abierto en el editor) ^d Borra siguiente caracter ^k Corta hasta el final de la linea o región marcada (y escribe a archivo ".snarf") ^u Corta hasta el inicio de la linea o región marcada (y escribe a archivo ".snarf") ^x Copia linea o región marcada a archivo ".snarf" ^v, ^y Pega contenidos del archivo ".snarf" ^f Salta a siguiente ocurrencia de palabra bajo el cursor ^s Guarda cambios en el bloque en edición ^l Limpia la pantalla (salvo en editor) ^g Lee dígitos y salta al bloque indicado al pulsar ENTER (aborta con ESC) ^r Lee dígitos y copia bloque actual a nuevo al pulsar ENTER ^m Lee dígitos y mueve el bloque actual a nuevo al pulsar ENTER (borra bloque de origen) ^ENTER Alterna marcador de región Sh-Arriba Recupera la última línea entrada o salta a bloque anterior Sh-Abajo Salta al bloque siguiente Sh-Izquierda/Derecha Salta entre bloque de código y documentación Las teclas de flecha mantienen el significado habitual. Presionar ENTER ejecuta la linea actual (marcada por el cursor). Presionar ^ENTER alterna el modo de selección (marca), todas las lineas entre el principio de la marca y la linea actual son copiadas y escreitas a un archivo llamado ".snarf" en el directorio actual una vez que se presiona ENTER o ^x. Presionar el primer botón del ratón reposiciona el cursor. Presionar el tercer botón ejecutará la palabra debajo del puntero. Mover la rueda de desplazamiento salta a bloque anterior o risuiente, cuando editando un bloque sin modificar. Acceso al sistema de archivos es provisto por archivos de "bloque", cada bloque es nombrado por un número natural y contiene 2496 bytes (39 lineas de 64 columnas). Para editar un bloque entrar: <número de bloque> editar La tecla ESC alterna entre modo de edición y prompt (salvo que el bloque actual contenga modificaciones sin guardar). La última linea contiene contadores indicando fila, columna, número de bloque actuales, largo de último texto copiaro, la cantidad de espacio restante en diccionario y un marcador indicando si el bloque actual contiene modificaciones sin guardar. Los bloques pueden ser cargados usando `cargar` y `atraves`. Nótese que la carga de bloques es realizada cambiando temporalmente la palabra para leer entrada de usuario (`consulta`) y tiene efecto cuando la linea actual ha sido procesada por completo. Esto implica que las palabras de carga no pueden ser invocadas recursivamente. También es posible editar un bloque haciendo click con el tercer botón del ratón sobre una cadena de la forma "#nnnn" dónde "nnnn" es un entero decimal. Si un archivo de 6 bytes llamado ".theme" es encontrado en el directorio actual, este será usado para establecer los colores del sistema durante el inicio. Los colores son utilizados de la siguiente mantera: #0 fondo, #1 texto, #2 última linea y #3 selección. El estado actual del sistema puede ser convenientemente almacenado como un archivo .rom en disco entrando: guardar <nombre de archivo> La rom guardada posee exáctamente el mismo estado (pero con las pilas vacías) que cuando fué creada. Durante el inicio, la palabra diferida `arrancar` es invocada, puede ser redefinida para remplazarla por código de inicio propio. También te alentamos a consultar el código fuente en "curto.f". IV. Compatibilidad con otros Forths Consulta el archivo "GLOSARIO" por una lista de palabras soportadas y los archivos extensamente comentados "kernel.tal" y "curto.f" para más información. El dialecto implementado en curto es mayormente compatible con el estandard Forth 2012[3] (traducido al español). Algunas notables diferencias son: - El sistema es sensible a mayúsculas (`Abc` y `abc` nombran dos palabras diferentes) - `hacer` y `?hacer` tratan el rango de índice como cantidades sin signo. - La conversión numérica en `<# ... #>` trabaja exclusivamente con números de una celda. - La aritmética de palabras dobles actualmente no está implementada. - Las palabras que producen resultados buleanos no siempre generan -1 (`verdadero`) sino algún otro valor distinto de cero. - No son soportadas multiples construcciones `mientras` en un bucle `empezar` ... `repetir`. El diccionario puede ser inspeccionado con las palabras `palabras`, `orden` y `.vocs`. Para decompilar palabras tanto de sistema como definidas por usuario puede utilizarse `ver`. V. El ensamblador integrado Es posible definir palabras que contengan una forma simplificada de Uxntal usando las palabras `codigo` y `fin-codigo`. Dentro de dicha definición, las siguientes palabras poseen un significado especial: BRK INC ... ensambla instrucción op uxn " k r agrega bit de modificación a la instrucción previa $ ( u -- ) rellenar según número de bytes en pila # ( c -- ) ensambla byte literal #" ( x -- ) ensambla corto literal & ( u -- ) define etiqueta , ( u -- ) referencia etiqueta previamente definida como distancia relativa de ramificación ` ( | <palabra> -- ) compila llamada inmediata a palabra curto ! ( | <palabra> -- ) compila salto inmediato a palabra curto ? ( | <palabra> -- ) compila salto inmediato condicional a palabra curto Currently only 16 labels can be defined. You can insert absolute references to other Forth words using the sequence `' <word> #"` or by using the syntax Actualmente solo se puede definir 16 etiquetas. Se puede insertar referencias absolutas a otras palabras curto mediante la secuencia `' <palabra> #"` o utilizando la sintaxis ` <palabra` para codificar una llamada inmediata (JSI) a una palabra curto. Nótese que se requiere que la pila sea alineada a cortos y que las palabras código deben realizar el equivalente a "JMP2r" para retornar a la palabra que las llamó. Un ejemplo: codigo contarbit8 ( x^ -- n^ ) 0 # SWP ( n x ) 1 & DUP 0 # EQU ( n x x=0 ) 2 , JCN ( n x ) 1 # SFT ( n x>>1 ) SWP INC SWP ( n+1 x>>1 ) 1 , JMP 2 & POP ( n ) JMP " r fin-codigo VI. Mapa de Memoria FFFF +--------------------------------+ | Buffer de pantalla | F600 +--------------------------------+ | Buffer de carga de bloque | ec40 +--------------------------------+ | | | Espacio libre | | | +--------------------------------+ < `aqui` | Palabras definidas por usuario | +--------------------------------+ | Kernel | 0100 +--------------------------------+ | Sin usar | 0000 +--------------------------------+ Curto permite hasta cuatro vocabularios activos al mismo tiempo. Se puede ver las palabras disponibles actualmente ejecutando `palabras` e inspeccionar la pila de vocabularios con `.vocs`. Los vocabularios predefinidos son `curto` (por defecto), `compilador` (palabras disponibles durante la compilación de palabras de dos puntos), `ensamblador`, `decompilador` y `editor`. VIII. Problemas de implementación de la VM uxn Curto ha sido testeado en SDL uxn[4] y uxn11[5]. En la interface gráfica los vectores de los dispositivos controlador, consola y ratón son modificados para recibir eventos de entrada. Durante la evaluación de código los vectores son temporalmente limpiados y un BRK o paro de máquina abortarán con error y retornarán al prompt curto. Si se desea modificar cualquiera de estos vectores de forma permanente, asegurarse de que el código no retorna al prompt interactivo o usar `esperar`, que invoca la palabra diferida `tick`, que puede ser modificada para realizar procesamiento personalizado (la implementación por defecto sólo hace parpadear el cursor). El sistema gráfico establece el tamaño de pantalla a la resolución por defecto 512x320 que debe ser soportada por la implementación uxn subyacente. Un número de palabras han sido definidas para acceder los dispositivos "varvara", consultar el GLOSARIO para más detalles: Sistema: colores reiniciar limpiar profundidad vectore Consola: cin cout tipearc vectorc Pantalla: tamanopantalla@ tamanopantalla! posicion pixel auto datossprite sprite vectorp Audio: muestra tocar adsr volumen salida vectora Controlador: teclaj botonj vectorj Ratón: raton despr estador vectorr Archivo: nombrearchivo escribirarchivo anexararchivo leerarchivo borrararchivo Reloj: ano mes dia hora minuto segundo ddls dda eshdv Nótese que las palabras de archivo solo utilizan el primer dispositivo de archivo (a0). La entrada de consola en la interface gráfica es redirigida a la pantalla, osea que el límite de largo de linea aplica. Las lineas de entrada que exceden el ancho de la pantalla son cortadas silenciosamente y el texto que precede a la parte que excede ignorado. Debido a limitaciones de la interface de archivo de "varvara" los archivos cargados mediante `incluir` (o `incluido`) no deben exceder el espacio disponible de diccionario dividido dos ya que el archivo debe ser cargado completamente en memoria antes de que pueda ser interpretado. Además, la inclusión de archivos no puede ser anidada. IX. Licencia UF Forth fué escrito por Felix L. Winkelmann y ha sido liberado al dominio público. Curto fué traducido por maleza y se distribuye respetando estos términos. X. Información de contacto maleza AT tilde DOT team o @maleza@meveilles.town en mastodon El repositorio original de UF puede ser encontrado en [6], si desea seguir su desarrollo desde cerca. XI. References [1] https://100r.co/site/uxn.html [2] https://wiki.xxiivv.com/site/uxntal.html [3] https://forth-standard.org/ [4] https://git.sr.ht/~rabbits/uxn [5] https://git.sr.ht/~rabbits/uxn11 [6] https://gitlab.com/b2495/uf