MBimport 4

Descripción del contenido de la página

Cuarta variante de MBimport, programa escrito en MasterBASIC para importar en el emulador SimCoupe código fuente en MasterBASIC escrito en ficheros de texto creados en el sistema operativo anfitrión.

Etiquetas:

La cuarta variante de MBimport es una copia modificada de MBimport 2 hecha en 2012-11.

Las etiquetas (comando label) fueron eliminadas para comprobar su influencia en el proceso de importación (para ver si se producían menos errores). Además, fueron eliminados los comandos de depuración, lo que aumenta ligeramente la velocidad de ejecución.

El resultado fue esperanzador.

Pantallazos

Durante el proceso el programa muestra cada línea del código importado, con el número de línea asignado; en verde las líneas correctas y en rojo las que han provocado algún error. La siguiente imagen muestra el aspecto en el modo 1 de pantalla:

MBimport

Al final del proceso el programa muestra el número de líneas erróneas que han sido encontradas e informa de que han sido precedidas por REM MISTAKE para su fácil localización. La siguiente imagen muestra el aspecto de ese resumen final en el modo 3 de pantalla:

MBimport

Código fuente

    1 REM MBimport 4 (version A-20121208)
      (C) 2012 Marcos Cruz (programandala.net)
      License programandala.net/license
    2 REM Change log
      2012-11-15, first version, copy of MBimport 2 without labels
      2012-11-16, debug checks removed.
      2012-11-20, instructions,error report.
      2012-12-06, better instructions; mode 3.
      2012-12-08, better instructions; better final error message.
    3 screenConfig
      about
      STOP
    4 DEF PROC screenConfig scrMode
        DEFAULT scrMode=3
    5   MODE scrMode
        IF scrMode=1
          LET black=0,green=4,red=2,white=7
        ELSE
          LET black=0,green=1,red=2,white=3
          PALETTE black,0
          PALETTE green,68
          PALETTE red,2
          PALETTE white,15
        END IF
    6   PAPER black
        PEN white
        BORDER black
        CLS
      END PROC
    7 DEF PROC about
        PRINT "MBimport 4"'"Copyright (C) 2012 Marcos Cruz (programandala.net)"''"Usage:"
    8   PRINT '"1) Make sure there's enough memory for your program to be imported."'"   Use FREE, FPAGES, OPEN and CLEAR if needed."
    9   PRINT '"2) Insert into drive 2 the fake MGT disk image created by MBim2MB."
   10   PRINT '"3) Type the command 'IMPORT'."'"   If the disk image is in drive 1, use 'IMPORT 1' instead."
   11   PRINT '"If the import process fails with the error message ""Not understood"" and the source"'"line is right (it's in 'srcLine$'), simply try CONTINUE. It's a KEYIN's bug."
   12   PRINT '"For more details see:"'"<http://programandala.net/en.program.mbim>"
   13 END PROC
   14 DEF PROC import drive,lineN
        DEFAULT drive=2,lineN=MBimport4Top+1
   15   LOCAL srcLine$,buffer,bufferEnd,cr$,endOfSource,sectorLen,track,sector,sliceStart,CRPos,lastTrack,errors
   16   LET cr$=CHR$ 13,endOfSource=0,sectorLen=512,track=0,sector=1,CRPos=0,lastTrack=79 BOR 128,buffer=RAMTOP,bufferEnd=buffer+sectorLen-1,errors=0
   17   CLS
        SCROLL CLEAR
        loadSector
   18   DO
          diskTo srcLine$
        EXIT IF endOfSource
          keyinLine srcLine$
        LOOP
   19   done
        SCROLL RESTORE
   20 END PROC
   21 DEF PROC done
   22   PRINT '"Done!"
   23   errorReport
   24   PRINT '"Press the space bar to delete"'"MBimport and renumber your"'"program, or any other key to"'"stop and do it manually"'"(DELETE TO ";MBimport4Top;")."
   25   GET key$
        IF key$=" " THEN KEYIN "delete to mbimport4top:renum:scroll restore:list:stop"
        ELSE STOP
   26 END PROC
   27 DEF PROC errorReport
   28   IF NOT errors THEN EXIT PROC
   29   PRINT ' PAPER red; BRIGHT 1;"Warning:"
   30   IF errors=1
          PRINT "There was one syntax error.";
        ELSE IF errors>1
          PRINT "There were ";errors;" syntax errors.";
        END IF
   31   PRINT " 'REM MISTAKE' has been prefixed to the wrong line";"s" AND (errors>1);"."'
   32 END PROC
   33 DEF PROC diskTo REF diskLine$
   34   LET diskLine$=""
   35   IF NOT PEEK (sliceStart) THEN
          LET endOfSource=1
          EXIT PROC
   36   DO
   37     LET crPos=LOCN(sliceStart,bufferEnd,cr$,ABS )
   38     IF crPos
   39       LET diskLine$=diskLine$+MEM$(sliceStart TO crPos-1)
   40       IF crPos=bufferEnd THEN feedBuffer
            ELSE LET sliceStart=crPos+1
   41     ELSE
   42       LET diskLine$=diskLine$+MEM$(sliceStart TO bufferEnd)
            feedBuffer
   43     END IF
   44   LOOP UNTIL crPos
   45 END PROC
   46 DEF PROC feedBuffer
        nextSector
        loadSector
      END PROC
   47 DEF PROC loadSector d,t,s
        DEFAULT d=drive,t=track,s=sector
        READ AT d,t,s,buffer,1
        LET sliceStart=buffer
      END PROC
   48 DEF PROC nextSector
        IF sector<10 THEN LET sector=sector+1
        ELSE nextTrack
   49 END PROC
   50 DEF PROC nextTrack
   51   IF track=lastTrack THEN wipeBuffer
          LET endOfSource=1
          EXIT PROC
   52   IF FN side0(track)
          DoSide1 track
        ELSE doSide0 track
          LET track=track+1
        END IF
   53   LET sector=1
   54 END PROC
   55 DEF FN side0(t)=t<80
   56 DEF PROC doSide1 REF track
        LET track=track+128
      END PROC
   57 DEF PROC doSide0 REF track
        LET track=track-128
      END PROC
   58 DEF PROC debug message$,color
   59   DEFAULT color=red
   60   PRINT PEN color;message$
   61   PAUSE
   62 END PROC
   63 DEF PROC keyinLine l$
   64   LOCAL color
        LET color=green
   65   ON ERROR GO TO syntaxError
        KEYIN STR$ lineN+" "+l$
        ON ERROR STOP
        GO TO printLine
   66   LABEL syntaxError
        ON ERROR STOP
        LET errors=errors+1
        KEYIN STR$ lineN+"REM MISTAKE "+l$
        LET color=red
   67   LABEL printLine
        PRINT lineN-MBimport4Top; PEN color;l$
   68   LET lineN=lineN+1
   69 END PROC
   70 DEF PROC d4
        DELETE TO MBimport4Top
      END PROC
   71 DEF PROC r4
        RENUM TO MBimport4Top LINE 1 STEP 1
      END PROC
   72 DEF PROC s4
        r4
        ERASE "MBimport4~"
        RENAME "MBimport4","MBimport4~"
        SAVE "MBimport4" LINE 1
      END PROC
   73 LABEL MBimport4Top
      REM The first line number of the imported code will be one more than this one.
      --------------------------



Descargas

MBimport 4 y el resto de variantes están disponibles en la sección de descarga en la página principal de MBimport.

Páginas relacionadas

BBimport
Programa para importar en el intérprete de Beta BASIC un código fuente creado en el sistema anfitrión del emulador de ZX Spectrum.