MBimport 2
Descripción del contenido de la página
Segunda 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 segunda variante de MBimport es más cómoda y rápida de utilizar que la primera variante. Permite, en un solo paso, importar programas de más de 16 KiB. El código fuente lo extrae de los sectores de una falsa imagen de disquete MGT creada por el sistema anfitrión. Por ello el tamaño máximo del programa a importar es de 800 KiB, que es la capacidad bruta de un disquete de SAM Coupé).
El procedimiento import
hace todo el trabajo de un tirón.
Para aumentar la velocidad, esta versión no reúne las líneas divididas ni elimina la indentación. Esas tareas deben hacerse en el sistema anfritrión.
Código fuente
10 REM MBimport 2 (version A-20110907)
(C) 2011 Marcos Cruz (programandala.net)
License programandala.net/license
15 MODE 1
20 DEF PROC about
CLS #
PRINT PEN 5;"MBimport 2"'"Copyright (C) 2011 Marcos Cruz"'"(programandala.net)"''
END PROC
25 DEF PROC import drive,lineN
REM "From disk image to SAM"
30 DEFAULT drive=2,lineN=endOfMBimport+1
35 LOCAL srcLine$,buffer,bufferEnd,cr$,endOfSource
40 LET cr$=CHR$ 13,endOfSource=0
45 LOCAL sectorLen,track,sector,sliceStart,CRPos,lastTrack
50 LET sectorLen=512,track=0,sector=1,CRPos=0,lastTrack=79 BOR 128
55 IF RAMTOP<81919 THEN PRINT "Error: RAMTOP<81919"'"Press any key to do "; BRIGHT 1;"CLEAR 81919"; BRIGHT 0'"and then try again."
PAUSE
CLEAR 81919
STOP
60 LET buffer=RAMTOP,bufferEnd=buffer+sectorLen-1
65 SCROLL CLEAR
70 loadSector
75 DO
80 diskTo srcLine$
85 EXIT IF endOfSource
90 PRINT AT 0,0;lineN
95 KEYIN STR$ lineN+srcLine$
100 LET lineN=lineN+1
105 LOOP
110 keyinLine "label lastLineByMBimport"
115 SCROLL RESTORE
120 END PROC
125 DEF PROC diskTo REF diskLine$
130 LET diskLine$=""
135 IF NOT PEEK (sliceStart) THEN debug "Zero found"
LET endOfSource=1
EXIT PROC
140 DO
145 LET crPos=LOCN(sliceStart,bufferEnd,cr$,ABS )
150 debug "crPos="+STR$ crPos+(" (+"+STR$ (crPos-buffer)+")") AND crPos
155 IF crPos
160 LET diskLine$=diskLine$+MEM$(sliceStart TO crPos-1)
165 IF crPos=bufferEnd THEN feedBuffer
ELSE LET sliceStart=crPos+1
170 ELSE
175 LET diskLine$=diskLine$+MEM$(sliceStart TO bufferEnd)
feedBuffer
180 END IF
185 LOOP UNTIL crPos
190 END PROC
195 DEF PROC feedBuffer
200 debug "feedBuffer (current sector is "+STR$ sector+"/"+STR$ track+")"
205 nextSector
loadSector
210 END PROC
215 DEF PROC loadSector d,t,s
220 DEFAULT d=drive,t=track,s=sector
225 debug "loadSector ("+STR$ sector+"/"+STR$ track+")"
230 READ AT d,t,s,buffer,1
235 LET sliceStart=buffer
240 END PROC
245 DEF PROC nextSector
250 debug "nextSector (current is "+STR$ sector+")"
255 IF sector<10 THEN LET sector=sector+1
ELSE nextTrack
260 END PROC
265 DEF PROC nextTrack
270 debug "nextTrack (current is "+STR$ track+")"
275 IF track=lastTrack THEN wipeBuffer
LET endOfSource=1
EXIT PROC
280 IF FN side0(track)
285 DoSide1 track
290 ELSE doSide0 track
LET track=track+1
295 END IF
300 LET sector=1
305 END PROC
310 DEF FN side0(t)=t<80
315 DEF PROC doSide1 REF track
320 debug "doSide1"
325 LET track=track+128
330 END PROC
335 DEF PROC doSide0 REF track
340 debug "doSide0"
345 LET track=track-128
350 END PROC
355 DEF PROC debug message$,color
360 DEFAULT color=2
365 REM PRINT PEN color;message$
REM PAUSE
370 END PROC
375 DEF PROC keyinLine l$
380 LOCAL color
LET color=4
385 ON ERROR GO TO syntaxError
KEYIN STR$ lineN+l$
ON ERROR STOP
GO TO printLine
390 LABEL syntaxError
395 ON ERROR STOP
KEYIN STR$ lineN+"REM MIS"+"TAKE "+l$
LET color=2
400 LABEL printLine
PRINT lineN; PEN color;l$
405 LET lineN=lineN+1
410 END PROC
415 DEF PROC sr
SCROLL RESTORE
END PROC
420 DEF PROC c
REM Clear after an error
425 sr
CLOSE *
CLEAR
STOP
END PROC
430 DEF PROC d
REM Delete the imported code
435 DELETE endOfMBimport+1 TO
END PROC
440 DEF PROC dMBimport
REM Delete MBimport
445 DELETE TO endOfMBimport
END PROC
450 DEF PROC r
REM Renum MBimport
455 RENUM TO endOFMBimport-1 LINE 10 STEP 5
END PROC
460 DEF PROC s
REM Save MBimport
465 d
ERASE "MBimport2~"
RENAME "MBimport2","MBimport2~"
SAVE "MBimport2"
END PROC
999 LABEL endOfMBimport
REM The first line of the imported code will be one more than this one.
--------------------------
Descargas
MBimport 2 y el resto de variantes están disponibles en la sección de descarga en la página principal de MBimport.