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.
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:
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:
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.