Historial de desarrollo de MBim

Descripción del contenido de la página

Historial de desarrollo de MBim, utilería para programar en MasterBASIC con el editor Vim.

Etiquetas:

2011-03-10

Primera versión, con el nombre fKeyin, como parte de un conjunto de utilidades proyectadas bajo el nombre de sUtil.

Uso como zona de importación la dirección de una matriz de texto creada para ello. Un procedimiento lee esa zona de la memoria, extrae las líneas y usa KEYIN para crear el programa con ellas, detectando y marcando los errores como hace mi programa fromZX de la herramienta fromZXtoSAM.

2011-03-11

La primera versión, que usaba una matriz de texto para almacenar el fichero importado, no funcionó bien salvo con ficheros pequeños porque la matriz quedaba entre dos páginas de memoria y la importación no tenía en cuenta esto.

La segunda versión, con CLEAR 32768 e importando el fichero en 32768, funcionó bien hasta alcanzar el límite de página: 16384 octetos.

Con CLEAR 49152 imprimió sólo interrogaciones, como si página no estuviera paginada durante la ejecución.

Con CLEAR 30000 funcionó con un fichero de 1725 octetos; se bloqueó antes de empezar con otro de 16379; con el de 5868 cambió la pantalla de color varias veces y se reinició.

Está claro que no se puede importar un fichero que pise la frontera entre dos páginas.

2011-03-12

Solución definitiva: usar solo una página desde la dirección fronteriza 32768, y copiar los ficheros grandes en varias partes. Ya está muy avanzado.

Independizo el programa. Se convierte en un proyecto independiente de las utilidades sUtil. Lo llamo Vim2SAM.

Abandono el sistema que ideé para unir líneas. Consistía en poner el propio separador de comandos ":" al inicio de las líneas que han de unirse a la línea anterior:

   10 REM Vim2SAM
      (C) 2011 Marcos Cruz (programandala.net)
   15 REM 2011-03-12 Deprecated version; if ":" is the first char of a line, the line is concatenated with the previous one. It will be easier to use "\" at the end of the line instead, and more standard.
   20 DEF FN tmpFile$(f$,n)=TRUNC$ ((f$+"      ")(1 TO 8))+"."+(HEX$ (n))(2)

  350 DEF PROC fileToProg tmpFile$,slice
  360   DEFAULT tmpFile$="tmp",slice=0
  370   LOCAL srcLine$,nextLine$,line$,lineN,stream,tabChars$
        LET line$="",nextLine$="",stream=4,tabChars$=CHR$ 9+CHR$ 32,tmpFile$=FN tmpFile$(tmpFile$,slice),lineN=999*(999>endOfVim2SAM)+(endOfVim2SAM+1)*(endOfVim2SAM>998)
  380   REM IF RAMTOP<>81919 THEN PRINT "Error: RAMTOP<>81919"'"Do "; BRIGHT 1;"CLEAR 81919"; BRIGHT 0;" and try again."
        STOP
  390   CLOSE #stream
        OPEN #stream,tmpFile$ IN
  400   DO WHILE NOT EOF stream
  410     LET srcLine$=INP$(#stream,0)
  420     FOR first=1 TO LEN srcLine$
            IF NOT INSTR(tabChars$,srcLine$(first)) THEN EXIT FOR
  440     NEXT first
          IF first>1 THEN LET srcLine$=srcLine$(first TO )
          PRINT "nextLine$="; PEN 1;nextLine$
  460     IF LEN srcLine$
            IF srcLine$(1)=":"
              LET nextLine$=nextLine$+srcLine$
            ELSE
              keyinLine nextLine$
              LET nextLine$=srcLine$
            END IF
          END IF
  470   LOOP
        keyinLine nextLine$
  480   CLOSE #stream
  490 END PROC
  500 DEF PROC keyinLine l$
  510   ON ERROR LET l$="REM MISTAKE "+l$
  520   KEYIN STR$ (lineN)+l$
        ON ERROR
        LET lineN=lineN+1
  530 END PROC

Es más sencillo de programar, y un formato más estándar (también usado por BASin, lo que es una ventaja), usar la barra invertida ("\") al final de cada línea que hay que unir a la siguiente.

2011-03-13

El tamaño del fichero a importar en memoria ya sólo se usaba para calcular su final. Para poder prescindir del tamaño hice un cambio: escribí una sencilla rutina en código máquina para llenar toda la página de memoria con ceros antes de importar en ella el fichero de Vim; y usé el cero como final de fichero en el bucle. Esto hace la interfaz de comandos más sencilla para el usuario.

A veces la lectura de ficheros da errores extraños y hay que dividirlos en partes más pequeñas. Puede ser desde un fallo del sistema MasterDos o del emulador SimCoupe.

No de un tirón como esperaba, pero he podido pasar los tres bloques de código fuente del proyecto Colegio Erevest 4 (una versión actualizada de Colegio Erevest en MasterBASIC) y juntarlos en un programa en la SAM Coupé.

No logro que funcione correctamente el control de errores en MasterBASIC (ON ERROR). He leído toda la documentación disponible. He probado con llamadas a procedimientos, con saltos y con subrutinas. He probado todos los formatos. No encuentro un patrón para los fallos.

Sin control de errores, la importación se detendría en el primer error sintáctico. Eso me obligaría a corregir cada error del código fuente en Vim y volver a importar el código cada vez. Demasiado lento e incómodo.

Aparco temporalmente el proyecto.

2011-03-19

Pruebo a usar OPEN BLOCKS por si hace alguna diferencia. Parece que no.

Pruebo una vez más la diferencia entre la función INP$ y el comando INPUT (que necesita LINE). No saco nada en claro.

Se producen errores, pero sin un patrón identificable, en la lectura del fichero secuencial (algunas veces si la línea es de longitud mayor de 255), en su interpretación con KEYIN y en la gestión de los errores con ON ERROR (que a veces funciona y a veces no).

2011-03-30

Repaso del código. Revisión de comentarios y textos. Simplificación del salto de ON ERROR.

Escribo nuevos pequeños procedimientos auxiliares como d, c y cat.

Nuevas pruebas de importación, la mayoría con éxito, especialmente de ficheros pequeños.

Sustitución de la función file$ (que añadía el sufijo «.V2S») por el procedimiento addExtensionTo, para gestionar también los nombres de fichero que incluyan la disquetera. Esto permite trabajar con los ficheros importados en la segunda disquetera o en un disco RAM, sin modificar el disquete de Vim2SAM.

2011-08-07

Primera versión de un programa en Vim (vim2mb.vim) para convertir código fuente en formato avanzado al formato estándar de MasterBASIC, directamente importable por el camando KEYIN (incluyendo la conversión del juego de caracteres).

2011-08-10

Investigación y primeras pruebas de una idea mejor para pasar el código fuente a la memoria de la SAM Coupé usando una imagen de disquete MGT:

  1. Convertir el texto fuente en una falsa imagen de disquete MGT, simplemente cambiándole el tamaño a 819200 octetos con el comando truncate de Debian.
  2. Leer los sectores del fichero MGT con un programa en MasterBASIC y extraer de ellos las líneas del texto original.

Aunque el problema posterior de la conversión del texto con KEYIN no se solucionaría, este método sería mucho más rápido y cómodo que dividir el código fuente en bloques de 16 KiB e importar cada bloque en la memoria de la computadora con la opción correspondiente del emulador.

2011-08-12

Completado con éxito el procedimiento d2s que extrae las líneas originales de un código fuente grabado como una imagen de disquete MGT. Incluye un procedimiento debug de depuración.

Unificadas las etiquetas endOfVim2SAM y lastLineByVim2SAM en la primera de ellas.

Completado el programa vim2mb2mgt.sh en Bash para hacer la conversión del código fuente mediante Vim y crear a continuación la falsa imagen de disquete MGT.

2011-08-13

Pruebas definitivas de conversión automática del código fuente original escrito con Vim, a una imagen de disquete MGT, mediante vim2mb.vim y vim2mb2mgt.sh.

El nuevo sistema es más cómodo y rápido, pero KEYIN sigue sin funcionar bien. Es un fallo del intérprete del SAM BASIC original. Se producen errores aparentemente aleatorios.

2011-08-29

Separados los dos métodos de importación en MasterBASIC en programas diferentes: el original Vim2SAM 1, que utiliza la importación de ficheros en memoria provista por el emulador SimCoupe; el nuevo Vim2SAM 2, que lee el código fuente de los sectores de una imagen de disquete MGT.

Nuevas pruebas, mismo resultado: parece que el uso repetido de KEYIN termina modificando algo en el sistema, pues se producen errores inexplicables sin un patrón reconocible.

2011-09-01

Revisando el archivo de utilidades para SAM, encuentro el programa SAM Diskimage Manager, que tenía olvidado. Es una herramienta para Windows 95/98/Me, escrita en 2000 por Edwin Blink, que permite pasar ficheros a imágenes de disquete MGT (requiere que los ficheros tengan la extensión DSK, pero se trata del formato MGT).

Graba los ficheros como de tipo CODE de SAM, pero al contrario que en la ZX Spectrum (con G+DOS o con Beta DOS), en la SAM Coupé es posible abrir un fichero CODE como si fuera OPENTYPE y leer su contenido línea a línea.

Esto permite un nuevo método de importación más sencillo: añadir el código fuente limpio a una imagen de disquete MGT y abrirlo como un fichero secuencial.

En cualquier caso cambiar el tipo de fichero es trivial: basta editar el fichero MGT y modificar el octeto previo al nombre del fichero. No obstante, tanto si el fichero es de tipo CODE como si ha sido cambiado a OPENTYPE, ocurre un pequeño problema cuyo origen no adivino: los primeros nueve octetos leídos no pertenecen al fichero original; son la cabecera interna del fichero y es necesario saltarlos.

Esta posibilidad permite escribir y probar Vim2SAM 3, mucho más sencillo que los anteriores... aunque como cabe esperar tampoco funciona correctamente, debido a KEYIN.

2011-09-07

El conjunto de herramientas de Vim2SAM es renombrado como MBim, por analogía con los proyectos SBim y BBim. Las tres versiones del programa importador en MasterBASIC se renombran como MBimport.

2011-11

Nuevas pruebas con MBimport. A pesar del fallo de keyin el programa puede ser utilizable.

2012-12-06

Últimos cambios en las nuevas versiones de MBimport 4 y MBimport 5. Mejoras en MBim2MB.

2012-12-24

Error corregido en MBimport 1: CLEAR 32768 y demás expresiones relacionadas debían usar la dirección 32767.

Páginas relacionadas

MBim
Utilería para desarrollo cruzado en MasterBASIC con SimCoupe.
BBim
Utilería para escribir programas para ZX Spectrum en BBim (formato mejorado de Beta BASIC) con el editor Vim.
SBim
Preprocesador para S*BASIC
fromZXtoSAM
Utilidad para intentar pasar programas en BASIC desde una ZX Spectrum a una SAM Coupé.