Buenas:
El otro día, por causalidad, hojeando/ojeando la MSX-CLUB me encontré con un Listado que me llamó la atención. Se trata de un Listado BASIC que permite adaptar el Ensamblador GEN originalmente en Cinta a Disco. Es decir: tener una versión DISCO del GEN, que opera de igual forma quela versión Cinta, pero haciendo todo en DISCO.
El Listado de marras, aparece en el número 50 de la MSX-CLUB y sería este:
10 ' 20 ' ADAPTADOR GEN- DISK 30 ' 40 ' 50 ' Por José Francisco Pertiñez Ruiz 60 ' 70 ' 80 '================================= 90 ' Descripción y funcionamiento 100 '================================ 110 ' 120 ' 130 ' 140 CLEAR 300:KEYOFF:SCREEN0:WIDTH 37:COLOR 15,4,4:ON STOP GOSUB 140:STOP ON:ON ERROR GOTO 140 150 PRINT:PRINT:PRINTTAB(9)" ADAPTADOR GEN DISK" 160 PRINTTAB(9) "=========================" 170 PRINT" Este Programa sirve para adaptar el ENSAMBLADOR GEN de IVESON de CASSETTE a DISCO." 180 PRINT:PRINT"-Esto se consigue parcheando las rutinas de Entrada/Salida del Cassette y añadiendo las correspondientes de control de la UNIDAD DE DISCO." 190 PRINT:PRINT"-El Programa resultante permite Cargar, Grabar y Verificar Programas como si fuera una versión en DISCO de la misma forma que lo hace la versión Cassette. A este Programa nos referiremos a partir de ahora con el nombre de GEN"; 200 PRINT"DISK.": PRINT:PRINT:PRINT" Pulse una Tecla para continuar";:A$=INPUT$(1) 210 ' 220 ' 230 '======================================= 240 ' MENU PRINCIPAL 250 '======================================= 260 ' 270 ' 280 CLS:PRINT:PRINT:PRINTTAB(8)"MENÚ PRINCIPAL":PRINTTAB(8)"==============":PRINT:PRINT" 1-CONVERSIÓN del PROGRAMA":PRINT:PRINT" 2-INSTRUCCIONES de GEN DISK":PRINT:PRINT" 3-FIN del ADAPTADOR":LOCATE,16:PRINTTAB(8)"ELIJA UNA OPCIÓN " 290 A=VAL(INPUT$(1)):A=-A*(A<4):ON A GOTO 310,600,710:GOTO 280 300 ' 310 ' 320 ' =========================================== 330 ' CONVERSIÓN del PROGRAMA 340 ' =========================================== 350 ' 360 ' 370 CLS:PRINT" Pulse PLAY en el Cassette con el Ensamblador GEN dentro y pulse una Tecla ";:A$=INPUT$(1) 380 BLOAD"CAS:",&H1000 390 PRINT:PRINT:PRINT" Introduzca un Disquete en la Unidad y pulse una Tecla ";:A$=INPUT$(1) 400 A=&HF0:B=&H58:C=0:POKE &H9A1C,B:POKE &H9A2D,B:POKE &HA128,B:POKE&HAF03,B:POKE&H99FA,C:POKE &H9A06,C:POKE&H99CA,C:POKE &H99CB,C:POKE &H99CC,C:POKE &H9A29,C:POKE &H9A2A,C:POKE &H9A2B,C:POKE &H9A3E,C:POKE&H9A3F,C:POKE &H9A40,C:POKE&H9A1D,A:POKE&H9A2E,A 410 POKE&HA129,A:POKE&H99FB,A:POKE &H9A07,A 420 A$="0 BLOAD"+CHR$(34)+"GEND.BIN"+CHR$(34)+",-&H1000:BLOAD"+CHR$(34)+"GEND.DK"+CHR$(34)+":DEFUSR=&H8800:?USR(128):DEFUSR=&HFFF0:DELETE0+CHR$(13)+"1 ?USR(0):END"+CHR$(13):OPEN"GEN"FOROUTPUTA$#1:PRINT#1 A$:CLOSE 430 BSAVE"GEND.BIN",&H9800,&HBE00 440 FOR I=&HE000 TO &HE14F:READ A$:POKEI,VAL("&H"+A$):NEXT 450 BSAVE"GEND.DK",&HE000,&HE14F:PRINT:PRINT:PRINT"FINALIZADA la ADAPTACIÓN":FOR I=0 TO 2000:NEXT:GOTO 140 460 ' 470 ' 480 ' RUTINAS DE ENTRADA/SALIDA DEL 490 ' 500 ' DISCO 510 ' 520 ' 530 DATA CD,E9,FF,DD,E5,C5,D5,E5,C5,3A,1A,E1,B7,20,16,CD,E2,E0,11,2A,E1,E,16,CD,7D,F3,21,0,0,22,4B,E1,3E,1,32,1A,E1,11,4E,E1,E,1A,CD,7D,F3,2A,30,FA,11,4E,E1,1,0,4,ED,B0,1 540 DATA 0,4,ED,43,38,E1,11,2A,E1,21,1,0,E,26,CD,7D,F3,C1,79,B7,CC,D6,E0,E1,D1,C1,DD,E1,C3,E2,FF,CD,E9,FF,DD,E5,C5,D5,3A,1A,E1,B7,20,14,CD,E2,E0,11,2A,E1,E,F,CD,7D,F3,B7,20 550 DATA 4D,21,0,0,22,4B,E1,11,4E,E1,E,1A,CD,7D,F3,1,0,4,ED,43,38,E1,11,2A,E1,21,1,0,E,27,CD,7D,F3,21,4E,E1,ED,5B,30,FA,1,0,4,ED,B0,3A,1A,E1,B7,CC,CF,E0,3E,1,32,1A,E1 560 DATA 3A,19,E1,D6,4,DC,D6,E0,32,19,E1,D1,C1,DD,E1,2A,30,FA,C3,E2,FF,11,1B,E1,E,9,CD,7D,F3,D1,C1,DD,E1,C3,F0,F9,3A,A1,D7,32,19,E1,C9,11,2A,E1,AF,32,1A,E1,E,10,C3,7D,F3,11,4E 570 DATA E1,3E,D,12,E,A,CD,7D,F3,21,2B,E1,6,B,36,20,23,10,FB,13,13,EB,E,9,11,2B,E1,CD,C,E1,D8,11,33,E1,E,3,EA,C,E1,23,7E,FE,2E,C8,FE,D,3F,C8,ED,A0,E0,18,F3,0,0,46,69 580 DATA 6C,65,20,6E,6F,74,20,66,6F,75,6E,64,24,0,20,30,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 590 ' 600 ' 610 ' ====================================== 620 ' INSTRUCCIONES de GEN DISK 630 ' ====================================== 640 ' 650 ' 660 CLS: PRINT" INSTRUCCIONES de CARGA y GRABACIÓN":PRINT"======================================":PRINT 670 PRINT"Comando G -> Carga de rutina de Disco. Teclee G++Nombre de Archivo+ Aparecerá 'Loading nombre de archivo' o 'File not found'":PRINT:PRINT 680 PRINT"Comando P -> Grabación de rutinas de Disco. Teclee P nl,n2++Nombre de Archivo+ n1=número de línea inicial, n2=número de linea final":PRINT:PRINT 690 PRINT"Comando V -> Verificación de rutinas. Teclee V++Nombre de Archivo+ Aparecerá 'Loading nombre de archivo' o 'File not found', y 'verified' o 'failed!'" 700 LOCATE 2,23:PRINT"Pulse una Tecla para continuar ";:A$=INPUT$(1):GOTO 280 710 CLS:PRINT"SAQUE el DISCO de la UNIDAD y APAGUE el ORDENADOR":END
Estás serían las imágenes originales del Listado:
El caso es que lo he probado en el Open-MSX y no me funciona: no me graba el Fichero resultante en Disco. De hecho, si pruebo a cargar la Cinta del GEN veo que justo cuando llega al final da un error, como si el Open-MSX no fuera del todo compatible con este Programa en cuestión... Puede que haya alguna cosa que haga que "pete" el Open-MSX...
Os dejo AQUÍ una imagen ".DSK" con el Listado en BASIC, por si alguien se anima a hacer Pruebas, lo puede probar en un MSX real y ver si funciona...
De todas formas, pese a que he revisado y requetevisado el Código BASIC (sobre todo las Datas), creo que no se me he escapado ningún error... ¡pero 4 ojos ven más que dos...! ;-)
Como comentario, decir que la línea 420 me resulta un poco rara... (no sé si eso está bien y/o no entiendo lo que hace) Eso de:
420 A$="0 BLOAD"+......
Me suena raro...
Pues lo dicho, si alguien lo consigue o ve un error en el Listado se agradece lo comparta. ;-)
Gracias & Saludetes. ;-)