Título: Ayuda para Modificar Programa Publicado por: manolito74 en 07 de Junio de 2013, 12:06:38 am Hola:
Recurro a vosotros para ver si alguien puede echarme un cable. Tengo por aquí alguna cinta con programillas en Basic y otros programas que había grabado en su día, juegos, etc. Y estoy intentando recuperarlas. Las cintas están bien y el cassette las lee perfectamente. El problema es que como es una cinta de las de 60 minutos y está llenaaaa de Programas quiero automatizar el Proceso al máximo posible para pasarlas a disco. Buscando buscando entre mis cosas encontré el Programa cuyo código os pongo a continuación. El Programa en sí está bastante bien: carga un Programa de la cinta, nos dice su tipo de carga y si es un Programa en Código Máquina nos da las direcciones de inicio-fin-ejecución. ¿Cuál es el problema?: que este Programa solo lee las Cabeceras de los Bloques que se va encontrado. Es decir, si yo quiero grabar un Programa Código Máquina al Disco tengo que hacer lo siguiente: - Ejecutar este Programa. - Pongo el Cassette y este Programa carga la Cabecera y nos da las direcciones de Inicio-Fin-Ejecución. - Luego tengo que rebobinar la cinta de nuevo cargar el Programa con un "Bload" sin ejecutarlo. - Cuando acaba de cagar lo grabo al disco usando las direcciones que obtuvimos antes. Lo que necesitaría es modificar el Programa que os pongo para que se lea UN BLOQUE COMPLETO HASTA EL FINAL y al llegar al final nos dé las direcciones de Inicio-Fin-Ejecución, así en ese momento bastaría con hacer un "Bsave" usando esos datos pasándolo al disco sin tener que rebobinar la cinta... :-( ¿Alguien se le ocurre como modificar el Programa para que haga eso? Sí, sé que en el caso de que se modifique con los Programas en Código Máquina muy bien pero con cuando el Programa que os pongo lea un Bloque y sea en Basic me tocará rebobinar la cinta cargarlo con "Load" sin ejecutarlo y luego grabarlo. Lo que ya sería la caña es reubicar el Programa que os pongo en una zona de la memoria de tal forma que deje libre la zona de carga del Basic y no "moleste" y que identificara y permitiera cargar cualquier bloque de cinta, mostrarnos los datos y grabarlo a disco... Pues nada, aquí os dejo el susodicho Programa y a ver quién me puede echar un cable. ¡Mil Gracias & Saludetes! Código: 10 KEY OFF:SCREEN 0:COLOR 15,4,4 20 U=&HF610:DEFUSR=U 30 FORI=UTOU+62 40 READK:POKEI,K 50 NEXT 60 CLS 70 PRINT:PRINT"******* COPION DE CINTA A DISCO*******":PRINT:PRINT:PRINT 80 PRINT"Prepare el cassette para cargar" 81 PRINT:PRINT:INPUT"Pulsa return cuando este preparado";A$ 82 IF A$="" THEN GOTO 83 83 PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT 84 PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT 85 PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT:BEEP:PRINT 86 BEEP:LOCATE 0,0:PRINT"OOOOOOOCOPION DE CINTA A DISCOOOOOOOO" 90 A=USR(0) 100 F$="" 110 B=&HF600 120 T=PEEK(B) 130 IF(T<>&HD0)AND(T<>&HD3)AND(T<>&HEA)THENGOTO 460 140 FORI=B+1TOB+6 150 F$=F$+CHR$(PEEK(I)) 160 NEXT 170 BEEP:PRINT:PRINT:PRINT"Nombre:",F$ 180 BEEP:PRINT"Programa:"; 190 IFT=&HD0THENGOTO 260 200 IFT=&HD3THENGOTO 240 210 BEEP:PRINT"DATA FILE/" 220 BEEP:PRINTTAB(13);"*** Basic y Ascii ***" 230 GOTO 340 240 BEEP:PRINT"**** Programa Basic ****" 250 GOTO 340 260 BEEP:PRINT"**** C¢digo M quina ****" 270 S=PEEK(B+7)+PEEK(B+8)*256 280 E=PEEK(B+9)+PEEK(B+10)*256 290 X=PEEK(B+11)+PEEK(B+12)*256 300 PRINT 310 PRINT"1.DIREC. Inicio=&H";HEX$(S) 320 PRINT"2.DIREC. Final=&H";HEX$(E) 330 PRINT"3.DIREC. Ejecuci¢n=&H";HEX$(X) 340 BEEP:PRINT:PRINT"Rebobine la cinta al principio del" 341 BEEP:PRINT"bloque que haya cargado" 342 BEEP:PRINT:PRINT"Para cargar el programa ponga...":PRINT 350 D$=CHR$(34) 360 IFT=&HD0THENC$="BLOAD"ELSEC$="LOAD" 370 PRINTC$;D$;"CAS:";D$ 390 BEEP:PRINT:PRINT"Grabelo en el Diskette con...":PRINT 400 IFT=&HD0 THENGOTO 430 410 BEEP:PRINT"SAVE("D$;F$;D$;")" 420 GOTO 440 430 BEEP:PRINT"BSAVE";D$;F$;D$;",&H";HEX$(S);",&H";HEX$(E);",&H";HEX$(X) 440 BEEP:PRINT:PRINT" (C)Phoenix Software " 450 END 460 PRINT"FICHERO NO RECONOCIDO":END 470 DATA &H21,&H00,&HF6,&HE5 480 DATA &HCD,&HE1,&H00,&H38 490 DATA &H24,&HCD,&H47,&HF6 500 DATA &H4F,&H06,&H09,&HCD 510 DATA &H47,&HF6,&HB9,&H20 520 DATA &HEF,&H10,&HF8,&HE1 530 DATA &H71,&HCD,&H31,&HF6 540 DATA &HE5,&HCD,&HE1,&H00 550 DATA &HE1,&H06,&H06,&HCD 560 DATA &H47,&HF6,&H23,&H77 570 DATA &H10,&HF9,&HC3,&HE7 580 DATA &H00,&HCD,&HE7,&H00 590 DATA &HDD,&H21,&HB2,&H73 600 DATA &HC3,&H59,&H01,&HD9 610 DATA &HCD,&HE4,&H00,&H38 620 DATA &HF0,&HD9,&HC9 Otra cosilla, si no me equivoco este Programa no distingue o nos informa de cuando un Programa carga con "Load" y cuando carga con "Cload", ¿no? Título: Re: Ayuda para Modificar Programa Publicado por: phsoft en 09 de Junio de 2013, 01:59:42 pm buenas, pichorrica. no es lo que tu pides, pero te pueder servir para lo que quieres hacer
Código: 10 KEY OFF:SCREEN 0:WIDTH40 20 COLOR15,4,4 30 ON ERROR GOTO 600 40 CY=2:NL=899 50 U=&HF610:DEFUSR=U 60 FORI=UTOU+62 70 READK:POKEI,K 80 NEXT 90 REM ********************** 100 CLS 110 LOCATE4,0:PRINT"*** Listar bloques de caset ***" 120 LOCATE10,1:PRINT"(C)Phoenix Software" 130 LOCATE12,22:PRINT"pulsa una tecla" 140 A$=INKEY$:IFA$=""THEN140 150 LOCATE12,22:PRINT" " 160 REM ********************** 170 A=USR(0) 180 F$="":CY=CY+1:NL=NL+1 190 B=&HF600 200 T=PEEK(B) 210 IF(T<>&HD0)AND(T<>&HD3)AND(T<>&HEA)THENGOTO 410 220 FORI=B+1TOB+6 230 F$=F$+CHR$(PEEK(I)) 240 NEXT 250 LOCATE0,CY:PRINT NL;"' ";F$ 260 IFT=&HD0THENGOTO 330 270 IFT=&HD3THENGOTO 310 280 REM ******************* 290 LOCATE 13,CY:PRINT" .sav" 300 GOTO 170 310 LOCATE 13,CY:PRINT" .csav" 320 GOTO 170 330 LOCATE 13,CY:PRINT" .bsav" 340 S=PEEK(B+7)+PEEK(B+8)*256 350 E=PEEK(B+9)+PEEK(B+10)*256 360 X=PEEK(B+11)+PEEK(B+12)*256 370 LOCATE22,CY:PRINT HEX$(S) 380 LOCATE28,CY:PRINT HEX$(E) 390 LOCATE34,CY:PRINT HEX$(X) 400 GOTO 170 410 PRINT"FICHERO NO RECONOCIDO":END 420 REM ******************** 430 DATA &H21,&H00,&HF6,&HE5 440 DATA &HCD,&HE1,&H00,&H38 450 DATA &H24,&HCD,&H47,&HF6 460 DATA &H4F,&H06,&H09,&HCD 470 DATA &H47,&HF6,&HB9,&H20 480 DATA &HEF,&H10,&HF8,&HE1 490 DATA &H71,&HCD,&H31,&HF6 500 DATA &HE5,&HCD,&HE1,&H00 510 DATA &HE1,&H06,&H06,&HCD 520 DATA &H47,&HF6,&H23,&H77 530 DATA &H10,&HF9,&HC3,&HE7 540 DATA &H00,&HCD,&HE7,&H00 550 DATA &HDD,&H21,&HB2,&H73 560 DATA &HC3,&H59,&H01,&HD9 570 DATA &HCD,&HE4,&H00,&H38 580 DATA &HF0,&HD9,&HC9 590 REM ******************* 600 LOCATE12,22:PRINT"Fin de la cinta?" 610 END la idea es poner la cinta a correr y crear una lista con las cabeceras de los bloques que el programa va encontrando. el programa si distingue save, csave y binarios, aunque tenía un fallo, creo (el save y el csave estaban al revés, no sé). la lista se puede guardar como un programa (todo rems) en el propio disco, el caset, etc. en el emulador funciona, en un msx real pues ni idea. supongo que debería. he puesto un fichero cas del meisei de ejemplo (en el zip) esto es una primera y facilona aproximación a lo que quieres, que sería grabar los bloques de una cinta a disco de modo automático (un multicopión cinta a disco, digamos). con esto solo sabes los bloques que tiene la cinta y de qué tipo son, nada más. el tema de guardarlos de modo automático lo veo de cierta complejidad cof cof :) por los bloques en basic, fíjate, ya que no recuerdo si se pueden cargar desplazados y volver a guardarlos en su posiciones originales, etc. los bloques binarios tb habría que cargarlos siempre en un buffer ram, digamos, etc. hay otra cosa más, y es que el programa que pusiste (y que toquetéo) viene con el pequeño loader asm un poquitín subido de ram. no sé yo si en un msx real con disquetera ese mini programa podrá ir en &hf600 ??? es que nunca tuve un msx real con disquetera :....) pero bueno, esto sería un poblema :) menor saludos, - paco http://www.vecindiario.es/phoenix/ftp/listarbloquescintas.zip (http://www.vecindiario.es/phoenix/ftp/listarbloquescintas.zip) Título: Re: Ayuda para Modificar Programa Publicado por: manolito74 en 09 de Junio de 2013, 03:15:21 pm Hola Paco:
Mil gracias por las mejoras-comentarios-correcciones. ;-) Por cierto, ese listado que puse era un "módulo" de un Programa General: Había un programa general que nos permitía cargar 3 tipos de "copiones": - Copión cinta-cinta. - Copión disco-disco. - Copión cinta-disco. Luego a ver si lo busco, copio todos los "módulos" y vemos si había algún fallo más o hay algo que se pudiera modificar-mejorar. A ver si alguien nos puede informar si sería posible reubicar el "copión" en una zona que no moleste: ni al Basic ni a la Disquetera. Gracias & Saludetes. ;-) Título: Re: Ayuda para Modificar Programa Publicado por: manolito74 en 09 de Junio de 2013, 05:52:16 pm Hola de nuevo:
Acabo de probar tu Programa con la modificación que le has hecho y es bueno, muy bueno. ;-) Está muy bien la idea esa de generar las líneas REM y así poder grabar si queremos el listado de la Cinta. ;-) Cuando pones el mensaje final de "Fin de la Cinta?" en realidad el "interrogante" sobra, ya que simplemente avisas que se llegó al final de la cinta (es que al leerlo asín rápido, sin fijarme en el Código pensé que el Programa te preguntaba si habías llegado al final de la cinta o si querías seguir leyendo. ;-) Falta ahora por saber si sería factible ubicar el copión en una zona que no "moleste" y si se puede reubicar un Programa cargado en Basic y luego reubicarlo donde proceda para grabarlo de nuevo. ;-) ¡1000 Gracias! Título: Re: Ayuda para Modificar Programa Publicado por: manolito74 en 09 de Junio de 2013, 05:56:45 pm Por cierto, en otro Foro me comentan esto:
Citar Por si quieres trastear, con estos pokes modificas la dirección de memoria en la que quieres que se cargue/ejecute un programa en BASIC: Ejemplo para la dirección &HD800 (te quedaría algo de hueco antes de pisar la zona de la disquetera): POKE &HF676,&H00 POKE &HF677,&HD8 POKE &HD800,0 No sé si eso te puede dar una pista para lo de reubicar un Programa en Basic. Gracias & Saludetes. ;-) Título: Re: Ayuda para Modificar Programa Publicado por: phsoft en 12 de Junio de 2013, 10:39:15 pm de nada, hombre
el listado anterior tiene un pequeño fallo en la linea 410 (un olvido tonto). falta el mensaje para los tipos de bloque " .ukw" o de tipo desconocido, digamos, como serían los bloques "turbo" tipo gremlin, ya sabes. estos bloques pues no van a cargar de ninguna manera con las rutinas habituales del sistema creo que los programas basic se podían convertir en una rom con una herramienta (de jltursan?). de esta forma, quizá, un programa basic no molestaría para cargar cualquier cosa de 0x8000 hasta aprox 0xf000, supongo, lo que por otra parte es la zona de carga-y-descarga :) habitual de los bloques binarios y programas basic de msx. de todas maneras lo bonico sería prescindir del basic y hacer todo el programa anterior en asm, lo que parece bte sencillo, por cierto. de esta forma lo puedes poner en 0xe800, pej, y puedes cargar bloques binarios completos -no solo cabeceras- de gran tamaño, además de los juegos y programas basic en sus ubicaciones originales. luego solo habría que regrabar bloques binarios con sus cabeceras originales pero siempre se cargarían a partir de 0x8000 y hasta 0xe7ff. me pondría con esto, que parece tan divertido como totalmente inútil, sip, X...-D.. pero es que no recuerdo cómo se cargaba un bloque ascii o basic, sobre todo la parte de la detección del fin del fichero, qué cabecera en concreto tenían, etc por eso estaría bien que pudieras recuperar el megacopión que decías, manolo. sobre todo el listado asm que se incluía en el listado basic anterior, u otro códigos asm o basic similares de que dispongas. claro que lo anterior se puede desensamblar (ya lo hice :) ), pero si ya lo está y si tenemos más ejemplos, pues tanto mejor, no? :) saludos, - paco Título: Re: Ayuda para Modificar Programa Publicado por: manolito74 en 12 de Junio de 2013, 10:58:48 pm Hola:
Estuve probando tu Programa en un MSX real y tiene un pequeño fallo (que seguro que es una tontería de algún índice que usas para filas o columnas). El caso es que llega un momento que escribe el nombre del Programa que carga en una línea, el tipo otra línea más abajo y las direcciones otra línea más abajo con lo cual quedan todos los listados desordenados. :-( Sip, lo suyo sería hacerlo todo en CM, así estaría libre más memoria para cargar-manejar Bloques, etc. A ver si saco tiempo y te cuelgo el "copión original completo". Quizás también te resultaría interesante desensamblar-ver como gestiona la carga de Bloques algún "Copión" de la época, como el "Vecope" (no sé si te suena). Si lo necesitas lo tengo yo en disco. Éste era un Copión muy bueno y cómodo, el "Vecope" y bastante versatil. En fin, tú pide que todo lo que esté en mis manos te lo facilito (incluso hay un artículo por ahí en una revista que trataba bastante en profundidad la Estructura de la Carga y los Programas en Cassette) Luego a ver si lo que quede por pulir algún forero nos ilumina y hacemos el Mega-Copión refinitivo. ;-) Saludetes. ;-) Título: Re: Ayuda para Modificar Programa Publicado por: phsoft en 18 de Junio de 2013, 07:53:27 pm buenas, pichorrica
el error que comentas supongo será por el salto de página. aquel programita no está preparado para mostrar más de 20 líneas (bloques en la cinta) de forma decente. que no es un chapucilla, nop... era por no complicarme! :-) lo suyo sería, como te dije, cargar y grabar bloques y listo. además en asm. pero bueno, prueba con este listado; no es que mejore mucho al anterior (para eso habría que almacenar los datos en memoria y presentarlos después.. una vacilada sería añadirlos como líneas basic al final de propio programa... yoquéseeee! :...-) Código: 10 KEY OFF:SCREEN 0:WIDTH40 20 COLOR15,4,4 30 ON ERROR GOTO 620 40 CY=2:NL=899 50 U=&HF610:DEFUSR=U 60 FORI=UTOU+62 70 READK:POKEI,K 80 NEXT 90 REM ********************** 100 CLS 110 LOCATE4,0:PRINT"*** Listar bloques de caset ***" 120 LOCATE10,1:PRINT"(C)Phoenix Software" 130 LOCATE12,22:PRINT"pulsa una tecla" 140 A$=INKEY$:IFA$=""THEN140 150 LOCATE12,22:PRINT" " 160 REM ********************** 170 A=USR(0) 180 F$="":CY=CY+1:NL=NL+1 190 IFCY>21THENCY=2 200 B=&HF600 210 T=PEEK(B) 220 IF(T<>&HD0)AND(T<>&HD3)AND(T<>&HEA)THENGOTO 340 230 FORI=B+1TOB+6 240 F$=F$+CHR$(PEEK(I)) 250 NEXT 260 LOCATE0,CY:PRINT NL;"' ";F$ 270 IFT=&HD0THENGOTO 360 280 IFT=&HD3THENGOTO 320 290 REM ******************* 300 LOCATE 13,CY:PRINT" .sav" 310 GOTO 170 320 LOCATE 13,CY:PRINT" .csav" 330 GOTO 170 340 LOCATE 13,CY:PRINT" .???" 350 GOTO 170 360 LOCATE 13,CY:PRINT" .bsav" 370 S=PEEK(B+7)+PEEK(B+8)*256 380 E=PEEK(B+9)+PEEK(B+10)*256 390 X=PEEK(B+11)+PEEK(B+12)*256 400 LOCATE22,CY:PRINT HEX$(S) 410 LOCATE28,CY:PRINT HEX$(E) 420 LOCATE34,CY:PRINT HEX$(X) 430 GOTO 170 440 REM ******************** 450 DATA &H21,&H00,&HF6,&HE5 460 DATA &HCD,&HE1,&H00,&H38 470 DATA &H24,&HCD,&H47,&HF6 480 DATA &H4F,&H06,&H09,&HCD 490 DATA &H47,&HF6,&HB9,&H20 500 DATA &HEF,&H10,&HF8,&HE1 510 DATA &H71,&HCD,&H31,&HF6 520 DATA &HE5,&HCD,&HE1,&H00 530 DATA &HE1,&H06,&H06,&HCD 540 DATA &H47,&HF6,&H23,&H77 550 DATA &H10,&HF9,&HC3,&HE7 560 DATA &H00,&HCD,&HE7,&H00 570 DATA &HDD,&H21,&HB2,&H73 580 DATA &HC3,&H59,&H01,&HD9 590 DATA &HCD,&HE4,&H00,&H38 600 DATA &HF0,&HD9,&HC9 610 REM ******************* 620 LOCATE12,22:PRINT"Fin de la cinta?" respecto al asm, empecé un programita que parece funcionar con los bloques bsave y csave pero, curiosamente, aunque carga los bloques save el código no aparece "tokenizado" en el debugger, de forma que no puedes list(arlo).. y en fin.. que o algún fenómeno con ganas y tiempo nos echa un cable al cuello, efectiviwonder, o servidora ha llegado anta aquín! X...D Código: CSAVE_FILE equ 0xD3 ; eof = n data hasta 7bytes 0x0 SAVE_FILE equ 0xEA ; eof = n bloques 256 bytes hasta CTRL+Z BSAVE_FILE equ 0xD0 INI_BASIC equ 0x8001 ; lol! INI_PRG equ 0xF000 ; -------------------------------------- .bios .basic .org INI_PRG .start MAIN MAIN: di xor a ; limpiando la casa ld hl, iniram ld bc, endram-iniram-1 call CLSRAM call LHEADER ; leemos una cabecera ret ; -------------------------------------- ; inicia o detiene el motor del cassette MOTORON: ld a, 1 bmotor: call STMOTR ret MOTOROFF: xor a jr bmotor ; -------------------------------------- ; salimos (por error de lectura) o paramos el cassete EXIT: pop hl STOP: call TAPIOF ret ; -------------------------------------- ; leemos datos (un byte) del cassete; C si se produce un error READ: exx call TAPIN jr c, EXIT exx ret ; -------------------------------------- ; leemos la cabecera larga del cassete; tipo = 10 bytes + nombre = 6 bytes LHEADER: call TAPION jr c, EXIT ld b, 10 ; 10 bytes ld hl, tipo_fichero bucH: call READ ld [hl], a djnz bucH ld b, 6 ; 6 bytes ld hl, nom_fichero bucN: call READ ld [hl], a inc hl djnz bucN call STOP ld a, [tipo_fichero] ; tipo de fichero cp BSAVE_FILE jp z, BLOAD ; cargamos binario cp SAVE_FILE jp z, LOAD ; cargamos basic SAVE cp CSAVE_FILE jp z, CLOAD ; cargamos basic CSAVE ; TODO: fichero desconocido ; TODO: presentar informacion ; TODO: grabar fichero a disco ret ; -------------------------------------- ; cload tiene una cabecera corta que leemos con TAPION y luego ; los datos hasta encontrar 7 ceros seguidos CLOAD: call rstzeros xor a ld [INI_BASIC-1], a ; 0 en 0x8000; requerido ld hl, INI_BASIC push hl call TAPION pop hl jr c, EXIT bcld: call READ ld [hl], a inc hl cp 0 call nz, rstzeros call z, inczeros ld a, [temp1] cp 7 ; termina con 7 ceros jr nz, bcld jr STOP rstzeros: xor a ld [temp1], a ret inczeros: ld a, [temp1] inc a ld [temp1], a ret ; -------------------------------------- ; load contiene multiples bloques de 256 bytes hasta 0x1a (ctrl+z) ; cada bloque tiene su cabecera corta que leemos con TAPION LOAD: xor a ld [INI_BASIC-1], a ; 0 en 0x8000; requerido ld hl, INI_BASIC bld1: push hl call TAPION pop hl jp c, EXIT ld b, 0 ; carga bloques de 256 bytes bld2: call READ cp 0x1a ; ctrl + z jp z, STOP ld [hl], a inc hl djnz bld2 ; fin de bloque push hl call TAPIOF pop hl jr bld1 ; -------------------------------------- ; bload tiene una cabecera corta seguida de 6 bytes con ; las direcciones de inicio, fin y ejecución del programa ; a continuación va el bloque de datos, todo seguido BLOAD: xor a ld hl, inifile ld bc, finfile-inifile-1 call CLSRAM ; borra dirs fichero call TAPION jp c, EXIT ld b, 6 ; 6 bytes ld hl, inifile bblh: call READ ld [hl], a inc hl djnz bblh call MOTOROFF call calclng ; calculamos longitud push hl call MOTORON pop bc ; longitud ld hl,INI_BASIC ; inicio (temporal) bbld: call READ ld [hl], a inc hl dec bc ld a, b or c jr nz, bbld jp STOP calclng: ld ix,inifile ld e, [ix+0] ld d, [ix+1] ; de = ini (real) ld l, [ix+2] ld h, [ix+3] ; hl = fin (real) sbc hl, de ; longitud = fin - ini ret ; ------------------------------------- ; rellenamos bc+1 bytes de ram con el valor de A CLSRAM: ld [hl], a ld d, h ld e, l inc de ldir ret ; -------------------------------------- iniram: defb 0 tipo_fichero: defs 1 nom_fichero: defs 6 inifile: defs 2 finfile: defs 2 exefile: defs 2 temp1: defs 1 endram: defb 0 saludos, - paco Título: Re: Ayuda para Modificar Programa Publicado por: manolito74 en 18 de Junio de 2013, 10:36:24 pm Hola de nuevo:
Te lo había prometido pero se me había olvidado... Aquí te dejo el "Copión" original. El Fichero ".bas" sería el "Programa Principal" y los Ficheros ".Opc" serían los diferentes Copiones: Cinta-Disco, Disco-Cinta, Cinta-Cinta. También te dejo el artículo que te había comentado que apareció en la la "Msx-Club" número 49, sobre el "Cassette". Lo tienes todo en este enlace: http://www.mediafire.com/?pn8m2m8v6jsmh6a Gracias & Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 27 de Diciembre de 2013, 01:02:36 am Up XD
Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 06 de Abril de 2014, 08:46:01 pm Hola:
Me acabo de acordar de este Post y pongo aquí el Listado del "Copión Vecope" desensamblado, por si aporta alguna Info. Gracias & Saludetes. ;-) Código: RSC II MSX 1.0 55296 DBA8 IN A,(168) 55298 E6F0 AND 240 55300 47 LD B,A 55301 0F RRCA 55302 0F RRCA 55303 B0 OR B 55304 D3A8 OUT (168),A 55306 AF XOR A 55307 CDC300 CALL 195 55310 CD95D9 CALL 55701 55313 C0 RET NZ 55314 DCC2DB CALL C,56258 55317 2020 JR NZ,+32 (55351) 55319 47 LD B,A 55320 4F LD C,A 55321 4C LD C,H 55322 44 LD B,H 55323 46 LD B,(HL) 55324 49 LD C,C 55325 4E LD C,(HL) 55326 47 LD B,A 55327 45 LD B,L 55328 52 LD D,D 55329 2020 JR NZ,+32 (55363) 55331 53 LD D,E 55332 4F LD C,A 55333 46 LD B,(HL) 55334 54 LD D,H 55335 57 LD D,A 55336 41 LD B,C 55337 52 LD D,D 55338 45 LD B,L 55339 2031 JR NZ,+49 (55390) 55341 39 ADD HL,SP 55342 3836 JR C,+54 (55398) 55344 20DB JR NZ,-37 (55309) 55346 C2DCC0 JP NZ,49372 55349 0D DEC C 55350 0A LD A,(BC) 55351 0A LD A,(BC) 55352 2020 JR NZ,+32 (55386) 55354 42 LD B,D 55355 205F JR NZ,+95 (55452) 55357 2052 JR NZ,+82 (55441) 55359 45 LD B,L 55360 41 LD B,C 55361 44 LD B,H 55362 2020 JR NZ,+32 (55396) 55364 42 LD B,D 55365 49 LD C,C 55366 4E LD C,(HL) 55367 2E20 LD L,32 55369 2020 JR NZ,+32 (55403) 55371 2044 JR NZ,+68 (55441) 55373 205F JR NZ,+95 (55470) 55375 2052 JR NZ,+82 (55459) 55377 45 LD B,L 55378 41 LD B,C 55379 44 LD B,H 55380 2020 JR NZ,+32 (55414) 55382 44 LD B,H 55383 41 LD B,C 55384 54 LD D,H 55385 41 LD B,C 55386 0D DEC C 55387 0A LD A,(BC) 55388 0A LD A,(BC) 55389 2020 JR NZ,+32 (55423) 55391 57 LD D,A 55392 205F JR NZ,+95 (55489) 55394 2057 JR NZ,+87 (55483) 55396 52 LD D,D 55397 49 LD C,C 55398 54 LD D,H 55399 45 LD B,L 55400 2054 JR NZ,+84 (55486) 55402 41 LD B,C 55403 50 LD D,B 55404 45 LD B,L 55405 2020 JR NZ,+32 (55439) 55407 2020 JR NZ,+32 (55441) 55409 52 LD D,D 55410 202D JR NZ,+45 (55457) 55412 2052 JR NZ,+82 (55496) 55414 45 LD B,L 55415 53 LD D,E 55416 45 LD B,L 55417 54 LD D,H 55418 0D DEC C 55419 0A LD A,(BC) 55420 0A LD A,(BC) 55421 2020 JR NZ,+32 (55455) 55423 31205F LD SP,24352 55426 2031 JR NZ,+49 (55477) 55428 323030 LD (12336),A 55431 2020 JR NZ,+32 (55465) 55433 42 LD B,D 55434 41 LD B,C 55435 55 LD D,L 55436 44 LD B,H 55437 2020 JR NZ,+32 (55471) 55439 2020 JR NZ,+32 (55473) 55441 32205F LD (24352),A 55444 2032 JR NZ,+50 (55496) 55446 34 INC (HL) 55447 3030 JR NC,+48 (55497) 55449 2020 JR NZ,+32 (55483) 55451 42 LD B,D 55452 41 LD B,C 55453 55 LD D,L 55454 44 LD B,H 55455 0D DEC C 55456 0A LD A,(BC) 55457 0A LD A,(BC) 55458 C3DFC5 JP 50655 55461 DBDB IN A,(219) 55463 DBDB IN A,(219) 55465 DBDB IN A,(219) 55467 DBDB IN A,(219) 55469 DBDB IN A,(219) 55471 DBDB IN A,(219) 55473 DBDB IN A,(219) 55475 DBDB IN A,(219) 55477 DBDB IN A,(219) 55479 DBDB IN A,(219) 55481 DBDB IN A,(219) 55483 DBDB IN A,(219) 55485 DBDB IN A,(219) 55487 DBDB IN A,(219) 55489 DBDB IN A,(219) 55491 C5 PUSH BC 55492 DF RST &H18 55493 C30D0A JP 2573 55496 00 NOP 55497 CD6ADA CALL 55914 55500 CD06DA CALL 55814 55503 CD1FDA CALL 55839 55506 CD38DA CALL 55864 55509 CD51DA CALL 55889 55512 DD21D2D9 LD IX,55762 55516 110FDA LD DE,55823 55519 210040 LD HL,16384 55522 3AD2D9 LD A,(55762) 55525 FE00 CP 0 55527 2832 JR Z,+50 (55579) 55529 DD21DED9 LD IX,55774 55533 ED4BD6D9 LD BC,(55766) 55537 1128DA LD DE,55848 55540 09 ADD HL,BC 55541 3ADED9 LD A,(55774) 55544 FE00 CP 0 55546 281F JR Z,+31 (55579) 55548 DD21EAD9 LD IX,55786 55552 ED4BE2D9 LD BC,(55778) 55556 1141DA LD DE,55873 55559 09 ADD HL,BC 55560 3AEAD9 LD A,(55786) 55563 FE00 CP 0 55565 280C JR Z,+12 (55579) 55567 DD21F6D9 LD IX,55798 55571 ED4BEED9 LD BC,(55790) 55575 115ADA LD DE,55898 55578 09 ADD HL,BC 55579 ED5302DA LD (55810),DE 55583 CD95D9 CALL 55701 55586 0A LD A,(BC) 55587 C0 RET NZ 55588 C0 RET NZ 55589 C0 RET NZ 55590 C0 RET NZ 55591 C0 RET NZ 55592 C0 RET NZ 55593 C0 RET NZ 55594 C0 RET NZ 55595 C0 RET NZ 55596 C0 RET NZ 55597 C0 RET NZ 55598 C0 RET NZ 55599 C0 RET NZ 55600 C0 RET NZ 55601 C0 RET NZ 55602 C0 RET NZ 55603 C0 RET NZ 55604 C0 RET NZ 55605 C0 RET NZ 55606 C0 RET NZ 55607 C0 RET NZ 55608 C0 RET NZ 55609 C0 RET NZ 55610 C0 RET NZ 55611 C0 RET NZ 55612 C0 RET NZ 55613 C0 RET NZ 55614 C0 RET NZ 55615 C0 RET NZ 55616 C0 RET NZ 55617 C0 RET NZ 55618 C0 RET NZ 55619 C0 RET NZ 55620 C0 RET NZ 55621 C0 RET NZ 55622 C0 RET NZ 55623 00 NOP 55624 E5 PUSH HL 55625 211301 LD HL,275 55628 CDC600 CALL 198 55631 CD95D9 CALL 55701 55634 49 LD C,C 55635 4E LD C,(HL) 55636 50 LD D,B 55637 55 LD D,L 55638 54 LD D,H 55639 2020 JR NZ,+32 (55673) 55641 2020 JR NZ,+32 (55675) 55643 2020 JR NZ,+32 (55677) 55645 3A2020 LD A,(8224) 55648 08 EX AF,AF' 55649 00 NOP 55650 E1 POP HL 55651 CDE3DA CALL 56035 55654 CDD7DA CALL 56023 55657 FE31 CP 49 55659 CA99DA JP Z,55961 55662 FE32 CP 50 55664 CAB8DA JP Z,55992 55667 F660 OR 96 55669 FE77 CP 119 55671 CAF7DB JP Z,56311 55674 FE72 CP 114 55676 2827 JR Z,+39 (55717) 55678 FE7A CP 122 55680 CA00A0 JP Z,40960 55683 FE62 CP 98 55685 CAC9DB JP Z,56265 55688 FE64 CP 100 55690 CA7DDB JP Z,56189 55693 3EFF LD A,255 55695 CDF300 CALL 243 55698 C348D9 JP 55624 55701 E3 EX (SP),HL 55702 F5 PUSH AF 55703 7E LD A,(HL) 55704 B7 OR A 55705 2806 JR Z,+6 (55713) 55707 CDD7DA CALL 56023 55710 23 INC HL 55711 18F6 JR -10 (55703) 55713 23 INC HL 55714 F1 POP AF 55715 E3 EX (SP),HL 55716 C9 RET 55717 21D2D9 LD HL,55762 55720 0630 LD B,48 55722 3600 LD (HL),0 55724 23 INC HL 55725 10FB DJNZ -5 (55722) 55727 210FDA LD HL,55823 55730 CDCAD9 CALL 55754 55733 2128DA LD HL,55848 55736 CDCAD9 CALL 55754 55739 2141DA LD HL,55873 55742 CDCAD9 CALL 55754 55745 215ADA LD HL,55898 55748 CDCAD9 CALL 55754 55751 C3C9D8 JP 55497 55754 0606 LD B,6 55756 3620 LD (HL),32 55758 23 INC HL 55759 10FB DJNZ -5 (55756) 55761 C9 RET 55762 00 NOP 55763 00 NOP 55764 00 NOP 55765 00 NOP 55766 00 NOP 55767 00 NOP 55768 00 NOP 55769 00 NOP 55770 00 NOP 55771 00 NOP 55772 00 NOP 55773 00 NOP 55774 00 NOP 55775 00 NOP 55776 00 NOP 55777 00 NOP 55778 00 NOP 55779 00 NOP 55780 00 NOP 55781 00 NOP 55782 00 NOP 55783 00 NOP 55784 00 NOP 55785 00 NOP 55786 00 NOP 55787 00 NOP 55788 00 NOP 55789 00 NOP 55790 00 NOP 55791 00 NOP 55792 00 NOP 55793 00 NOP 55794 00 NOP 55795 00 NOP 55796 00 NOP 55797 00 NOP 55798 00 NOP 55799 00 NOP 55800 00 NOP 55801 00 NOP 55802 00 NOP 55803 00 NOP 55804 00 NOP 55805 00 NOP 55806 00 NOP 55807 00 NOP 55808 00 NOP 55809 00 NOP 55810 00 NOP 55811 00 NOP 55812 00 NOP 55813 00 NOP 55814 210C01 LD HL,268 55817 CDC600 CALL 198 55820 CD95D9 CALL 55701 55823 2020 JR NZ,+32 (55857) 55825 2020 JR NZ,+32 (55859) 55827 2020 JR NZ,+32 (55861) 55829 2020 JR NZ,+32 (55863) 55831 00 NOP 55832 21D6D9 LD HL,55766 55835 CDEDDA CALL 56045 55838 C9 RET 55839 210D01 LD HL,269 55842 CDC600 CALL 198 55845 CD95D9 CALL 55701 55848 2020 JR NZ,+32 (55882) 55850 2020 JR NZ,+32 (55884) 55852 2020 JR NZ,+32 (55886) 55854 2020 JR NZ,+32 (55888) 55856 00 NOP 55857 21E2D9 LD HL,55778 55860 CDEDDA CALL 56045 55863 C9 RET 55864 210E01 LD HL,270 55867 CDC600 CALL 198 55870 CD95D9 CALL 55701 55873 2020 JR NZ,+32 (55907) 55875 2020 JR NZ,+32 (55909) 55877 2020 JR NZ,+32 (55911) 55879 2020 JR NZ,+32 (55913) 55881 00 NOP 55882 21EED9 LD HL,55790 55885 CDEDDA CALL 56045 55888 C9 RET 55889 210F01 LD HL,271 55892 CDC600 CALL 198 55895 CD95D9 CALL 55701 55898 2020 JR NZ,+32 (55932) 55900 2020 JR NZ,+32 (55934) 55902 2020 JR NZ,+32 (55936) 55904 2020 JR NZ,+32 (55938) 55906 00 NOP 55907 21FAD9 LD HL,55802 55910 CDEDDA CALL 56045 55913 C9 RET 55914 21090C LD HL,3081 55917 CDC600 CALL 198 55920 3A06F4 LD A,(62470) 55923 FE25 CP 37 55925 2811 JR Z,+17 (55944) 55927 CD95D9 CALL 55701 55930 3C INC A 55931 313230 LD SP,12338 55934 303E JR NC,+62 (55998) 55936 2020 JR NZ,+32 (55970) 55938 42 LD B,D 55939 41 LD B,C 55940 55 LD D,L 55941 44 LD B,H 55942 00 NOP 55943 C9 RET 55944 CD95D9 CALL 55701 55947 3C INC A 55948 323430 LD (12340),A 55951 303E JR NC,+62 (56015) 55953 2020 JR NZ,+32 (55987) 55955 42 LD B,D 55956 41 LD B,C 55957 55 LD D,L 55958 44 LD B,H 55959 00 NOP 55960 C9 RET 55961 3E53 LD A,83 55963 3206F4 LD (62470),A 55966 3E5C LD A,92 55968 3207F4 LD (62471),A 55971 3E26 LD A,38 55973 3208F4 LD (62472),A 55976 3E2D LD A,45 55978 3209F4 LD (62473),A 55981 3E0F LD A,15 55983 320AF4 LD (62474),A 55986 CD6ADA CALL 55914 55989 C3C9D8 JP 55497 55992 3E25 LD A,37 55994 3206F4 LD (62470),A 55997 3E2D LD A,45 55999 3207F4 LD (62471),A 56002 3E0E LD A,14 56004 3208F4 LD (62472),A 56007 3E16 LD A,22 56009 3209F4 LD (62473),A 56012 3E1F LD A,31 56014 320AF4 LD (62474),A 56017 CD6ADA CALL 55914 56020 C3C9D8 JP 55497 56023 F5 PUSH AF 56024 C5 PUSH BC 56025 D5 PUSH DE 56026 E5 PUSH HL 56027 CDA200 CALL 162 56030 E1 POP HL 56031 D1 POP DE 56032 C1 POP BC 56033 F1 POP AF 56034 C9 RET 56035 C5 PUSH BC 56036 D5 PUSH DE 56037 E5 PUSH HL 56038 CD9F00 CALL 159 56041 E1 POP HL 56042 D1 POP DE 56043 C1 POP BC 56044 C9 RET 56045 23 INC HL 56046 7E LD A,(HL) 56047 CD3ADB CALL 56122 56050 2B DEC HL 56051 7E LD A,(HL) 56052 CD3ADB CALL 56122 56055 3E20 LD A,32 56057 CDD7DA CALL 56023 56060 3E20 LD A,32 56062 CDD7DA CALL 56023 56065 23 INC HL 56066 23 INC HL 56067 23 INC HL 56068 7E LD A,(HL) 56069 CD3ADB CALL 56122 56072 2B DEC HL 56073 7E LD A,(HL) 56074 CD3ADB CALL 56122 56077 3E2D LD A,45 56079 CDD7DA CALL 56023 56082 23 INC HL 56083 23 INC HL 56084 23 INC HL 56085 7E LD A,(HL) 56086 CD3ADB CALL 56122 56089 2B DEC HL 56090 7E LD A,(HL) 56091 CD3ADB CALL 56122 56094 3E2D LD A,45 56096 CDD7DA CALL 56023 56099 23 INC HL 56100 23 INC HL 56101 23 INC HL 56102 7E LD A,(HL) 56103 CD3ADB CALL 56122 56106 2B DEC HL 56107 7E LD A,(HL) 56108 CD3ADB CALL 56122 56111 3E0D LD A,13 56113 CDD7DA CALL 56023 56116 3E0A LD A,10 56118 CDD7DA CALL 56023 56121 C9 RET 56122 F5 PUSH AF 56123 0F RRCA 56124 0F RRCA 56125 0F RRCA 56126 0F RRCA 56127 E60F AND 15 56129 CD45DB CALL 56133 56132 F1 POP AF 56133 F5 PUSH AF 56134 E60F AND 15 56136 F630 OR 48 56138 FE3A CP 58 56140 3802 JR C,+2 (56144) 56142 C607 ADD A,7 56144 CDD7DA CALL 56023 56147 F1 POP AF 56148 C9 RET 56149 E5 PUSH HL 56150 D5 PUSH DE 56151 C5 PUSH BC 56152 CDE400 CALL 228 56155 C1 POP BC 56156 D1 POP DE 56157 E1 POP HL 56158 C9 RET 56159 E5 PUSH HL 56160 D5 PUSH DE 56161 C5 PUSH BC 56162 CDED00 CALL 237 56165 C1 POP BC 56166 D1 POP DE 56167 E1 POP HL 56168 C9 RET 56169 E5 PUSH HL 56170 D5 PUSH DE 56171 C5 PUSH BC 56172 CDE100 CALL 225 56175 C1 POP BC 56176 D1 POP DE 56177 E1 POP HL 56178 C9 RET 56179 E5 PUSH HL 56180 D5 PUSH DE 56181 C5 PUSH BC 56182 CD3DDD CALL 56637 56185 C1 POP BC 56186 D1 POP DE 56187 E1 POP HL 56188 C9 RET 56189 E5 PUSH HL 56190 CDE100 CALL 225 56193 E1 POP HL 56194 DD7502 LD (IX+2),L 56197 DD7403 LD (IX+3),H 56200 010000 LD BC,0 56203 CD55DB CALL 56149 56206 380D JR C,+13 (56221) 56208 77 LD (HL),A 56209 23 INC HL 56210 03 INC BC 56211 CD73DB CALL 56179 56214 3805 JR C,+5 (56221) 56216 77 LD (HL),A 56217 23 INC HL 56218 03 INC BC 56219 18F6 JR -10 (56211) 56221 DD7104 LD (IX+4),C 56224 DD7005 LD (IX+5),B 56227 CDE700 CALL 231 56230 DD360001 LD (IX+0),1 56234 E5 PUSH HL 56235 2A02DA LD HL,(55810) 56238 3E3C LD A,60 56240 77 LD (HL),A 56241 23 INC HL 56242 3E44 LD A,68 56244 77 LD (HL),A 56245 23 INC HL 56246 3E41 LD A,65 56248 77 LD (HL),A 56249 23 INC HL 56250 3E54 LD A,84 56252 77 LD (HL),A 56253 23 INC HL 56254 3E41 LD A,65 56256 77 LD (HL),A 56257 23 INC HL 56258 3E3E LD A,62 56260 77 LD (HL),A 56261 E1 POP HL 56262 C3C9D8 JP 55497 56265 E5 PUSH HL 56266 CD8FDC CALL 56463 56269 CD06DA CALL 55814 56272 CD1FDA CALL 55839 56275 CD38DA CALL 55864 56278 CD51DA CALL 55889 56281 CDCFDC CALL 56527 56284 E1 POP HL 56285 DD7502 LD (IX+2),L 56288 DD7403 LD (IX+3),H 56291 CD55DB CALL 56149 56294 77 LD (HL),A 56295 23 INC HL 56296 0B DEC BC 56297 78 LD A,B 56298 B1 OR C 56299 20F6 JR NZ,-10 (56291) 56301 CDE700 CALL 231 56304 DD360002 LD (IX+0),2 56308 C3C9D8 JP 55497 56311 210040 LD HL,16384 56314 DD21D2D9 LD IX,55762 56318 110FDA LD DE,55823 56321 ED5302DA LD (55810),DE 56325 CD35DC CALL 56373 56328 DD21DED9 LD IX,55774 56332 1128DA LD DE,55848 56335 ED5302DA LD (55810),DE 56339 CD35DC CALL 56373 56342 DD21EAD9 LD IX,55786 56346 1141DA LD DE,55873 56349 ED5302DA LD (55810),DE 56353 CD35DC CALL 56373 56356 DD21F6D9 LD IX,55798 56360 115ADA LD DE,55898 56363 ED5302DA LD (55810),DE 56367 CD35DC CALL 56373 56370 C3C9D8 JP 55497 56373 DD7E00 LD A,(IX+0) 56376 FE00 CP 0 56378 C8 RET Z 56379 FE01 CP 1 56381 CC49DC CALL Z,56393 56384 DD7E00 LD A,(IX+0) 56387 FE02 CP 2 56389 CC6ADC CALL Z,56426 56392 C9 RET 56393 E5 PUSH HL 56394 CD2DDD CALL 56621 56397 AF XOR A 56398 CDEA00 CALL 234 56401 DD4E04 LD C,(IX+4) 56404 DD4605 LD B,(IX+5) 56407 E1 POP HL 56408 79 LD A,C 56409 B0 OR B 56410 2808 JR Z,+8 (56420) 56412 7E LD A,(HL) 56413 CD5FDB CALL 56159 56416 23 INC HL 56417 0B DEC BC 56418 18F4 JR -12 (56408) 56420 E5 PUSH HL 56421 CDE700 CALL 231 56424 E1 POP HL 56425 C9 RET 56426 E5 PUSH HL 56427 CD2DDD CALL 56621 56430 CDAEDC CALL 56494 56433 CD2DDD CALL 56621 56436 AF XOR A 56437 CDEA00 CALL 234 56440 CD08DD CALL 56584 56443 E1 POP HL 56444 DD4E04 LD C,(IX+4) 56447 DD4605 LD B,(IX+5) 56450 79 LD A,C 56451 B0 OR B 56452 CA64DC JP Z,56420 56455 7E LD A,(HL) 56456 CD5FDB CALL 56159 56459 23 INC HL 56460 0B DEC BC 56461 30F3 JR NC,-13 (56450) 56463 0ED0 LD C,208 56465 CD69DB CALL 56169 56468 060A LD B,10 56470 CD55DB CALL 56149 56473 B9 CP C 56474 20F5 JR NZ,-11 (56465) 56476 10F8 DJNZ -8 (56470) 56478 2A02DA LD HL,(55810) 56481 0606 LD B,6 56483 CD55DB CALL 56149 56486 77 LD (HL),A 56487 23 INC HL 56488 10F9 DJNZ -7 (56483) 56490 CDE700 CALL 231 56493 C9 RET 56494 3EFF LD A,255 56496 CDEA00 CALL 234 56499 060A LD B,10 56501 3ED0 LD A,208 56503 C5 PUSH BC 56504 CDED00 CALL 237 56507 C1 POP BC 56508 10F7 DJNZ -9 (56501) 56510 2A02DA LD HL,(55810) 56513 0606 LD B,6 56515 E5 PUSH HL 56516 C5 PUSH BC 56517 7E LD A,(HL) 56518 CDED00 CALL 237 56521 C1 POP BC 56522 E1 POP HL 56523 23 INC HL 56524 10F5 DJNZ -11 (56515) 56526 C9 RET 56527 CDE100 CALL 225 56530 CD55DB CALL 56149 56533 5F LD E,A 56534 CD55DB CALL 56149 56537 57 LD D,A 56538 DD7306 LD (IX+6),E 56541 DD7207 LD (IX+7),D 56544 CD55DB CALL 56149 56547 6F LD L,A 56548 CD55DB CALL 56149 56551 67 LD H,A 56552 DD7508 LD (IX+8),L 56555 DD7409 LD (IX+9),H 56558 ED52 SBC HL,DE 56560 23 INC HL 56561 E5 PUSH HL 56562 C1 POP BC 56563 CD55DB CALL 56149 56566 5F LD E,A 56567 CD55DB CALL 56149 56570 57 LD D,A 56571 DD730A LD (IX+10),E 56574 DD720B LD (IX+11),D 56577 DD7104 LD (IX+4),C 56580 DD7005 LD (IX+5),B 56583 C9 RET 56584 DD7E06 LD A,(IX+6) 56587 CD5FDB CALL 56159 56590 DD7E07 LD A,(IX+7) 56593 CD5FDB CALL 56159 56596 DD7E08 LD A,(IX+8) 56599 CD5FDB CALL 56159 56602 DD7E09 LD A,(IX+9) 56605 CD5FDB CALL 56159 56608 DD7E0A LD A,(IX+10) 56611 CD5FDB CALL 56159 56614 DD7E0B LD A,(IX+11) 56617 CD5FDB CALL 56159 56620 C9 RET 56621 C5 PUSH BC 56622 3E01 LD A,1 56624 CDF300 CALL 243 56627 010000 LD BC,0 56630 0B DEC BC 56631 78 LD A,B 56632 B1 OR C Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 30 de Junio de 2014, 02:33:10 am Up!
Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 30 de Junio de 2014, 01:22:04 pm Hola de nuevo:
He probado tu última revisión del Listado BASIC y funciona perfectamente, pagina todo bien, etc. ¡Gracias! En cuanto al Listado ASM lo he copiado y ensamblado con el AsMSX y lo he ejecutado tanto en MSX real como en Emulador y NO HACE NADA. Lo único que obtengo es que cuando encuentra una cabecera el Programa se detiene (deja de ejecutarse) y no muestra ningún mensaje en Pantalla. :-( Gracias & Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 30 de Junio de 2014, 01:35:28 pm Hola:
Pongo aquí el Código del Copión "VECOPE" desensamblado, en Formato Hexadecimal, por si pueden resultar de Utilidad las Rutinas de Lectura del Cassette que utiliza. Como el Código es muy largo lo pongo en dos Partes. Listado Desensamblado Copión "VECOPE" (Parte 1/2) Código: Desensamblador RSC MANHATTAN TRANSFER D800 DBA8 IN A,(&HA8) D802 E6F0 AND &HF0 D804 47 LD B,A D805 0F RRCA D806 0F RRCA D807 B0 OR B D808 D3A8 OUT (&HA8),A D80A AF XOR A D80B CDC300 CALL &HC3 D80E CD95D9 CALL &HD995 D811 C0 RET NZ D812 DCC2DB CALL C,&HDBC2 D815 2020 JR NZ,+&H20 (&HD837) D817 47 LD B,A D818 4F LD C,A D819 4C LD C,H D81A 44 LD B,H D81B 46 LD B,(HL) D81C 49 LD C,C D81D 4E LD C,(HL) D81E 47 LD B,A D81F 45 LD B,L D820 52 LD D,D D821 2020 JR NZ,+&H20 (&HD843) D823 53 LD D,E D824 4F LD C,A D825 46 LD B,(HL) D826 54 LD D,H D827 57 LD D,A D828 41 LD B,C D829 52 LD D,D D82A 45 LD B,L D82B 2031 JR NZ,+&H31 (&HD85E) D82D 39 ADD HL,SP D82E 3836 JR C,+&H36 (&HD866) D830 20DB JR NZ,-&H25 (&HD80D) D832 C2DCC0 JP NZ,&HC0DC D835 0D DEC C D836 0A LD A,(BC) D837 0A LD A,(BC) D838 2020 JR NZ,+&H20 (&HD85A) D83A 42 LD B,D D83B 205F JR NZ,+&H5F (&HD89C) D83D 2052 JR NZ,+&H52 (&HD891) D83F 45 LD B,L D840 41 LD B,C D841 44 LD B,H D842 2020 JR NZ,+&H20 (&HD864) D844 42 LD B,D D845 49 LD C,C D846 4E LD C,(HL) D847 2E20 LD L,&H20 D849 2020 JR NZ,+&H20 (&HD86B) D84B 2044 JR NZ,+&H44 (&HD891) D84D 205F JR NZ,+&H5F (&HD8AE) D84F 2052 JR NZ,+&H52 (&HD8A3) D851 45 LD B,L D852 41 LD B,C D853 44 LD B,H D854 2020 JR NZ,+&H20 (&HD876) D856 44 LD B,H D857 41 LD B,C D858 54 LD D,H D859 41 LD B,C D85A 0D DEC C D85B 0A LD A,(BC) D85C 0A LD A,(BC) D85D 2020 JR NZ,+&H20 (&HD87F) D85F 57 LD D,A D860 205F JR NZ,+&H5F (&HD8C1) D862 2057 JR NZ,+&H57 (&HD8BB) D864 52 LD D,D D865 49 LD C,C D866 54 LD D,H D867 45 LD B,L D868 2054 JR NZ,+&H54 (&HD8BE) D86A 41 LD B,C D86B 50 LD D,B D86C 45 LD B,L D86D 2020 JR NZ,+&H20 (&HD88F) D86F 2020 JR NZ,+&H20 (&HD891) D871 52 LD D,D D872 202D JR NZ,+&H2D (&HD8A1) D874 2052 JR NZ,+&H52 (&HD8C8) D876 45 LD B,L D877 53 LD D,E D878 45 LD B,L D879 54 LD D,H D87A 0D DEC C D87B 0A LD A,(BC) D87C 0A LD A,(BC) D87D 2020 JR NZ,+&H20 (&HD89F) D87F 31205F LD SP,&H5F20 D882 2031 JR NZ,+&H31 (&HD8B5) D884 323030 LD (&H3030),A D887 2020 JR NZ,+&H20 (&HD8A9) D889 42 LD B,D D88A 41 LD B,C D88B 55 LD D,L D88C 44 LD B,H D88D 2020 JR NZ,+&H20 (&HD8AF) D88F 2020 JR NZ,+&H20 (&HD8B1) D891 32205F LD (&H5F20),A D894 2032 JR NZ,+&H32 (&HD8C8) D896 34 INC (HL) D897 3030 JR NC,+&H30 (&HD8C9) D899 2020 JR NZ,+&H20 (&HD8BB) D89B 42 LD B,D D89C 41 LD B,C D89D 55 LD D,L D89E 44 LD B,H D89F 0D DEC C D8A0 0A LD A,(BC) D8A1 0A LD A,(BC) D8A2 C3DFC5 JP &HC5DF D8A5 DBDB IN A,(&HDB) D8A7 DBDB IN A,(&HDB) D8A9 DBDB IN A,(&HDB) D8AB DBDB IN A,(&HDB) D8AD DBDB IN A,(&HDB) D8AF DBDB IN A,(&HDB) D8B1 DBDB IN A,(&HDB) D8B3 DBDB IN A,(&HDB) D8B5 DBDB IN A,(&HDB) D8B7 DBDB IN A,(&HDB) D8B9 DBDB IN A,(&HDB) D8BB DBDB IN A,(&HDB) D8BD DBDB IN A,(&HDB) D8BF DBDB IN A,(&HDB) D8C1 DBDB IN A,(&HDB) D8C3 C5 PUSH BC D8C4 DF RST &H18 D8C5 C30D0A JP &HA0D D8C8 00 NOP D8C9 CD6ADA CALL &HDA6A D8CC CD06DA CALL &HDA06 D8CF CD1FDA CALL &HDA1F D8D2 CD38DA CALL &HDA38 D8D5 CD51DA CALL &HDA51 D8D8 DD21D2D9 LD IX,&HD9D2 D8DC 110FDA LD DE,&HDA0F D8DF 210040 LD HL,&H4000 D8E2 3AD2D9 LD A,(&HD9D2) D8E5 FE00 CP &H0 D8E7 2832 JR Z,+&H32 (&HD91B) D8E9 DD21DED9 LD IX,&HD9DE D8ED ED4BD6D9 LD BC,(&HD9D6) D8F1 1128DA LD DE,&HDA28 D8F4 09 ADD HL,BC D8F5 3ADED9 LD A,(&HD9DE) D8F8 FE00 CP &H0 D8FA 281F JR Z,+&H1F (&HD91B) D8FC DD21EAD9 LD IX,&HD9EA D900 ED4BE2D9 LD BC,(&HD9E2) D904 1141DA LD DE,&HDA41 D907 09 ADD HL,BC D908 3AEAD9 LD A,(&HD9EA) D90B FE00 CP &H0 D90D 280C JR Z,+&HC (&HD91B) D90F DD21F6D9 LD IX,&HD9F6 D913 ED4BEED9 LD BC,(&HD9EE) D917 115ADA LD DE,&HDA5A D91A 09 ADD HL,BC D91B ED5302DA LD (&HDA02),DE D91F CD95D9 CALL &HD995 D922 0A LD A,(BC) D923 C0 RET NZ D924 C0 RET NZ D925 C0 RET NZ D926 C0 RET NZ D927 C0 RET NZ D928 C0 RET NZ D929 C0 RET NZ D92A C0 RET NZ D92B C0 RET NZ D92C C0 RET NZ D92D C0 RET NZ D92E C0 RET NZ D92F C0 RET NZ D930 C0 RET NZ D931 C0 RET NZ D932 C0 RET NZ D933 C0 RET NZ D934 C0 RET NZ D935 C0 RET NZ D936 C0 RET NZ D937 C0 RET NZ D938 C0 RET NZ D939 C0 RET NZ D93A C0 RET NZ D93B C0 RET NZ D93C C0 RET NZ D93D C0 RET NZ D93E C0 RET NZ D93F C0 RET NZ D940 C0 RET NZ D941 C0 RET NZ D942 C0 RET NZ D943 C0 RET NZ D944 C0 RET NZ D945 C0 RET NZ D946 C0 RET NZ D947 00 NOP D948 E5 PUSH HL D949 211301 LD HL,&H113 D94C CDC600 CALL &HC6 D94F CD95D9 CALL &HD995 D952 49 LD C,C D953 4E LD C,(HL) D954 50 LD D,B D955 55 LD D,L D956 54 LD D,H D957 2020 JR NZ,+&H20 (&HD979) D959 2020 JR NZ,+&H20 (&HD97B) D95B 2020 JR NZ,+&H20 (&HD97D) D95D 3A2020 LD A,(&H2020) D960 08 EX AF,AF' D961 00 NOP D962 E1 POP HL D963 CDE3DA CALL &HDAE3 D966 CDD7DA CALL &HDAD7 D969 FE31 CP &H31 D96B CA99DA JP Z,&HDA99 D96E FE32 CP &H32 D970 CAB8DA JP Z,&HDAB8 D973 F660 OR &H60 D975 FE77 CP &H77 D977 CAF7DB JP Z,&HDBF7 D97A FE72 CP &H72 D97C 2827 JR Z,+&H27 (&HD9A5) D97E FE7A CP &H7A D980 CA00A0 JP Z,&HA000 D983 FE62 CP &H62 D985 CAC9DB JP Z,&HDBC9 D988 FE64 CP &H64 D98A CA7DDB JP Z,&HDB7D D98D 3EFF LD A,&HFF D98F CDF300 CALL &HF3 D992 C348D9 JP &HD948 D995 E3 EX (SP),HL D996 F5 PUSH AF D997 7E LD A,(HL) D998 B7 OR A D999 2806 JR Z,+&H6 (&HD9A1) D99B CDD7DA CALL &HDAD7 D99E 23 INC HL D99F 18F6 JR -&HA (&HD997) D9A1 23 INC HL D9A2 F1 POP AF D9A3 E3 EX (SP),HL D9A4 C9 RET D9A5 21D2D9 LD HL,&HD9D2 D9A8 0630 LD B,&H30 D9AA 3600 LD (HL),&H0 D9AC 23 INC HL D9AD 10FB DJNZ -&H5 (&HD9AA) D9AF 210FDA LD HL,&HDA0F D9B2 CDCAD9 CALL &HD9CA D9B5 2128DA LD HL,&HDA28 D9B8 CDCAD9 CALL &HD9CA D9BB 2141DA LD HL,&HDA41 D9BE CDCAD9 CALL &HD9CA D9C1 215ADA LD HL,&HDA5A D9C4 CDCAD9 CALL &HD9CA D9C7 C3C9D8 JP &HD8C9 D9CA 0606 LD B,&H6 D9CC 3620 LD (HL),&H20 D9CE 23 INC HL D9CF 10FB DJNZ -&H5 (&HD9CC) D9D1 C9 RET D9D2 00 NOP D9D3 00 NOP D9D4 00 NOP D9D5 00 NOP D9D6 00 NOP D9D7 00 NOP D9D8 00 NOP D9D9 00 NOP D9DA 00 NOP D9DB 00 NOP D9DC 00 NOP D9DD 00 NOP D9DE 00 NOP D9DF 00 NOP D9E0 00 NOP D9E1 00 NOP D9E2 00 NOP D9E3 00 NOP D9E4 00 NOP D9E5 00 NOP D9E6 00 NOP D9E7 00 NOP D9E8 00 NOP D9E9 00 NOP D9EA 00 NOP D9EB 00 NOP D9EC 00 NOP D9ED 00 NOP D9EE 00 NOP D9EF 00 NOP D9F0 00 NOP D9F1 00 NOP D9F2 00 NOP D9F3 00 NOP D9F4 00 NOP D9F5 00 NOP D9F6 00 NOP D9F7 00 NOP D9F8 00 NOP D9F9 00 NOP D9FA 00 NOP D9FB 00 NOP D9FC 00 NOP D9FD 00 NOP D9FE 00 NOP D9FF 00 NOP DA00 00 NOP DA01 00 NOP Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 30 de Junio de 2014, 01:36:32 pm Listado Desensamblado Copión "VECOPE" (Parte 2/2)
Código: DA02 0F RRCA DA03 DA0000 JP C,&H0 DA06 210C01 LD HL,&H10C DA09 CDC600 CALL &HC6 DA0C CD95D9 CALL &HD995 DA0F 2020 JR NZ,+&H20 (&HDA31) DA11 2020 JR NZ,+&H20 (&HDA33) DA13 2020 JR NZ,+&H20 (&HDA35) DA15 2020 JR NZ,+&H20 (&HDA37) DA17 00 NOP DA18 21D6D9 LD HL,&HD9D6 DA1B CDEDDA CALL &HDAED DA1E C9 RET DA1F 210D01 LD HL,&H10D DA22 CDC600 CALL &HC6 DA25 CD95D9 CALL &HD995 DA28 2020 JR NZ,+&H20 (&HDA4A) DA2A 2020 JR NZ,+&H20 (&HDA4C) DA2C 2020 JR NZ,+&H20 (&HDA4E) DA2E 2020 JR NZ,+&H20 (&HDA50) DA30 00 NOP DA31 21E2D9 LD HL,&HD9E2 DA34 CDEDDA CALL &HDAED DA37 C9 RET DA38 210E01 LD HL,&H10E DA3B CDC600 CALL &HC6 DA3E CD95D9 CALL &HD995 DA41 2020 JR NZ,+&H20 (&HDA63) DA43 2020 JR NZ,+&H20 (&HDA65) DA45 2020 JR NZ,+&H20 (&HDA67) DA47 2020 JR NZ,+&H20 (&HDA69) DA49 00 NOP DA4A 21EED9 LD HL,&HD9EE DA4D CDEDDA CALL &HDAED DA50 C9 RET DA51 210F01 LD HL,&H10F DA54 CDC600 CALL &HC6 DA57 CD95D9 CALL &HD995 DA5A 2020 JR NZ,+&H20 (&HDA7C) DA5C 2020 JR NZ,+&H20 (&HDA7E) DA5E 2020 JR NZ,+&H20 (&HDA80) DA60 2020 JR NZ,+&H20 (&HDA82) DA62 00 NOP DA63 21FAD9 LD HL,&HD9FA DA66 CDEDDA CALL &HDAED DA69 C9 RET DA6A 21090C LD HL,&HC09 DA6D CDC600 CALL &HC6 DA70 3A06F4 LD A,(&HF406) DA73 FE25 CP &H25 DA75 2811 JR Z,+&H11 (&HDA88) DA77 CD95D9 CALL &HD995 DA7A 3C INC A DA7B 313230 LD SP,&H3032 DA7E 303E JR NC,+&H3E (&HDABE) DA80 2020 JR NZ,+&H20 (&HDAA2) DA82 42 LD B,D DA83 41 LD B,C DA84 55 LD D,L DA85 44 LD B,H DA86 00 NOP DA87 C9 RET DA88 CD95D9 CALL &HD995 DA8B 3C INC A DA8C 323430 LD (&H3034),A DA8F 303E JR NC,+&H3E (&HDACF) DA91 2020 JR NZ,+&H20 (&HDAB3) DA93 42 LD B,D DA94 41 LD B,C DA95 55 LD D,L DA96 44 LD B,H DA97 00 NOP DA98 C9 RET DA99 3E53 LD A,&H53 DA9B 3206F4 LD (&HF406),A DA9E 3E5C LD A,&H5C DAA0 3207F4 LD (&HF407),A DAA3 3E26 LD A,&H26 DAA5 3208F4 LD (&HF408),A DAA8 3E2D LD A,&H2D DAAA 3209F4 LD (&HF409),A DAAD 3E0F LD A,&HF DAAF 320AF4 LD (&HF40A),A DAB2 CD6ADA CALL &HDA6A DAB5 C3C9D8 JP &HD8C9 DAB8 3E25 LD A,&H25 DABA 3206F4 LD (&HF406),A DABD 3E2D LD A,&H2D DABF 3207F4 LD (&HF407),A DAC2 3E0E LD A,&HE DAC4 3208F4 LD (&HF408),A DAC7 3E16 LD A,&H16 DAC9 3209F4 LD (&HF409),A DACC 3E1F LD A,&H1F DACE 320AF4 LD (&HF40A),A DAD1 CD6ADA CALL &HDA6A DAD4 C3C9D8 JP &HD8C9 DAD7 F5 PUSH AF DAD8 C5 PUSH BC DAD9 D5 PUSH DE DADA E5 PUSH HL DADB CDA200 CALL &HA2 DADE E1 POP HL DADF D1 POP DE DAE0 C1 POP BC DAE1 F1 POP AF DAE2 C9 RET DAE3 C5 PUSH BC DAE4 D5 PUSH DE DAE5 E5 PUSH HL DAE6 CD9F00 CALL &H9F DAE9 E1 POP HL DAEA D1 POP DE DAEB C1 POP BC DAEC C9 RET DAED 23 INC HL DAEE 7E LD A,(HL) DAEF CD3ADB CALL &HDB3A DAF2 2B DEC HL DAF3 7E LD A,(HL) DAF4 CD3ADB CALL &HDB3A DAF7 3E20 LD A,&H20 DAF9 CDD7DA CALL &HDAD7 DAFC 3E20 LD A,&H20 DAFE CDD7DA CALL &HDAD7 DB01 23 INC HL DB02 23 INC HL DB03 23 INC HL DB04 7E LD A,(HL) DB05 CD3ADB CALL &HDB3A DB08 2B DEC HL DB09 7E LD A,(HL) DB0A CD3ADB CALL &HDB3A DB0D 3E2D LD A,&H2D DB0F CDD7DA CALL &HDAD7 DB12 23 INC HL DB13 23 INC HL DB14 23 INC HL DB15 7E LD A,(HL) DB16 CD3ADB CALL &HDB3A DB19 2B DEC HL DB1A 7E LD A,(HL) DB1B CD3ADB CALL &HDB3A DB1E 3E2D LD A,&H2D DB20 CDD7DA CALL &HDAD7 DB23 23 INC HL DB24 23 INC HL DB25 23 INC HL DB26 7E LD A,(HL) DB27 CD3ADB CALL &HDB3A DB2A 2B DEC HL DB2B 7E LD A,(HL) DB2C CD3ADB CALL &HDB3A DB2F 3E0D LD A,&HD DB31 CDD7DA CALL &HDAD7 DB34 3E0A LD A,&HA DB36 CDD7DA CALL &HDAD7 DB39 C9 RET DB3A F5 PUSH AF DB3B 0F RRCA DB3C 0F RRCA DB3D 0F RRCA DB3E 0F RRCA DB3F E60F AND &HF DB41 CD45DB CALL &HDB45 DB44 F1 POP AF DB45 F5 PUSH AF DB46 E60F AND &HF DB48 F630 OR &H30 DB4A FE3A CP &H3A DB4C 3802 JR C,+&H2 (&HDB50) DB4E C607 ADD A,&H7 DB50 CDD7DA CALL &HDAD7 DB53 F1 POP AF DB54 C9 RET DB55 E5 PUSH HL DB56 D5 PUSH DE DB57 C5 PUSH BC DB58 CDE400 CALL &HE4 DB5B C1 POP BC DB5C D1 POP DE DB5D E1 POP HL DB5E C9 RET DB5F E5 PUSH HL DB60 D5 PUSH DE DB61 C5 PUSH BC DB62 CDED00 CALL &HED DB65 C1 POP BC DB66 D1 POP DE DB67 E1 POP HL DB68 C9 RET DB69 E5 PUSH HL DB6A D5 PUSH DE DB6B C5 PUSH BC DB6C CDE100 CALL &HE1 DB6F C1 POP BC DB70 D1 POP DE DB71 E1 POP HL DB72 C9 RET DB73 E5 PUSH HL DB74 D5 PUSH DE DB75 C5 PUSH BC DB76 CD3DDD CALL &HDD3D DB79 C1 POP BC DB7A D1 POP DE DB7B E1 POP HL DB7C C9 RET DB7D E5 PUSH HL DB7E CDE100 CALL &HE1 DB81 E1 POP HL DB82 DD7502 LD (IX+&H2),L DB85 DD7403 LD (IX+&H3),H DB88 010000 LD BC,&H0 DB8B CD55DB CALL &HDB55 DB8E 380D JR C,+&HD (&HDB9D) DB90 77 LD (HL),A DB91 23 INC HL DB92 03 INC BC DB93 CD73DB CALL &HDB73 DB96 3805 JR C,+&H5 (&HDB9D) DB98 77 LD (HL),A DB99 23 INC HL DB9A 03 INC BC DB9B 18F6 JR -&HA (&HDB93) DB9D DD7104 LD (IX+&H4),C DBA0 DD7005 LD (IX+&H5),B DBA3 CDE700 CALL &HE7 DBA6 DD360001 LD (IX+&H0),&H1 DBAA E5 PUSH HL DBAB 2A02DA LD HL,(&HDA02) DBAE 3E3C LD A,&H3C DBB0 77 LD (HL),A DBB1 23 INC HL DBB2 3E44 LD A,&H44 DBB4 77 LD (HL),A DBB5 23 INC HL DBB6 3E41 LD A,&H41 DBB8 77 LD (HL),A DBB9 23 INC HL DBBA 3E54 LD A,&H54 DBBC 77 LD (HL),A DBBD 23 INC HL DBBE 3E41 LD A,&H41 DBC0 77 LD (HL),A DBC1 23 INC HL DBC2 3E3E LD A,&H3E DBC4 77 LD (HL),A DBC5 E1 POP HL DBC6 C3C9D8 JP &HD8C9 DBC9 E5 PUSH HL DBCA CD8FDC CALL &HDC8F DBCD CD06DA CALL &HDA06 DBD0 CD1FDA CALL &HDA1F DBD3 CD38DA CALL &HDA38 DBD6 CD51DA CALL &HDA51 DBD9 CDCFDC CALL &HDCCF DBDC E1 POP HL DBDD DD7502 LD (IX+&H2),L DBE0 DD7403 LD (IX+&H3),H DBE3 CD55DB CALL &HDB55 DBE6 77 LD (HL),A DBE7 23 INC HL DBE8 0B DEC BC DBE9 78 LD A,B DBEA B1 OR C DBEB 20F6 JR NZ,-&HA (&HDBE3) DBED CDE700 CALL &HE7 DBF0 DD360002 LD (IX+&H0),&H2 DBF4 C3C9D8 JP &HD8C9 DBF7 210040 LD HL,&H4000 DBFA DD21D2D9 LD IX,&HD9D2 DBFE 110FDA LD DE,&HDA0F DC01 ED5302DA LD (&HDA02),DE DC05 CD35DC CALL &HDC35 DC08 DD21DED9 LD IX,&HD9DE DC0C 1128DA LD DE,&HDA28 DC0F ED5302DA LD (&HDA02),DE DC13 CD35DC CALL &HDC35 DC16 DD21EAD9 LD IX,&HD9EA DC1A 1141DA LD DE,&HDA41 DC1D ED5302DA LD (&HDA02),DE DC21 CD35DC CALL &HDC35 DC24 DD21F6D9 LD IX,&HD9F6 DC28 115ADA LD DE,&HDA5A DC2B ED5302DA LD (&HDA02),DE DC2F CD35DC CALL &HDC35 DC32 C3C9D8 JP &HD8C9 DC35 DD7E00 LD A,(IX+&H0) DC38 FE00 CP &H0 DC3A C8 RET Z DC3B FE01 CP &H1 DC3D CC49DC CALL Z,&HDC49 DC40 DD7E00 LD A,(IX+&H0) DC43 FE02 CP &H2 DC45 CC6ADC CALL Z,&HDC6A DC48 C9 RET DC49 E5 PUSH HL DC4A CD2DDD CALL &HDD2D DC4D AF XOR A DC4E CDEA00 CALL &HEA DC51 DD4E04 LD C,(IX+&H4) DC54 DD4605 LD B,(IX+&H5) DC57 E1 POP HL DC58 79 LD A,C DC59 B0 OR B DC5A 2808 JR Z,+&H8 (&HDC64) DC5C 7E LD A,(HL) DC5D CD5FDB CALL &HDB5F DC60 23 INC HL DC61 0B DEC BC DC62 18F4 JR -&HC (&HDC58) DC64 E5 PUSH HL DC65 CDE700 CALL &HE7 DC68 E1 POP HL DC69 C9 RET DC6A E5 PUSH HL DC6B CD2DDD CALL &HDD2D DC6E CDAEDC CALL &HDCAE DC71 CD2DDD CALL &HDD2D DC74 AF XOR A DC75 CDEA00 CALL &HEA DC78 CD08DD CALL &HDD08 DC7B E1 POP HL DC7C DD4E04 LD C,(IX+&H4) DC7F DD4605 LD B,(IX+&H5) DC82 79 LD A,C DC83 B0 OR B DC84 CA64DC JP Z,&HDC64 DC87 7E LD A,(HL) DC88 CD5FDB CALL &HDB5F DC8B 23 INC HL DC8C 0B DEC BC DC8D 30F3 JR NC,-&HD (&HDC82) DC8F 0ED0 LD C,&HD0 DC91 CD69DB CALL &HDB69 DC94 060A LD B,&HA DC96 CD55DB CALL &HDB55 DC99 B9 CP C DC9A 20F5 JR NZ,-&HB (&HDC91) DC9C 10F8 DJNZ -&H8 (&HDC96) DC9E 2A02DA LD HL,(&HDA02) DCA1 0606 LD B,&H6 DCA3 CD55DB CALL &HDB55 DCA6 77 LD (HL),A DCA7 23 INC HL DCA8 10F9 DJNZ -&H7 (&HDCA3) DCAA CDE700 CALL &HE7 DCAD C9 RET DCAE 3EFF LD A,&HFF DCB0 CDEA00 CALL &HEA DCB3 060A LD B,&HA DCB5 3ED0 LD A,&HD0 DCB7 C5 PUSH BC DCB8 CDED00 CALL &HED DCBB C1 POP BC DCBC 10F7 DJNZ -&H9 (&HDCB5) DCBE 2A02DA LD HL,(&HDA02) DCC1 0606 LD B,&H6 DCC3 E5 PUSH HL DCC4 C5 PUSH BC DCC5 7E LD A,(HL) DCC6 CDED00 CALL &HED DCC9 C1 POP BC DCCA E1 POP HL DCCB 23 INC HL DCCC 10F5 DJNZ -&HB (&HDCC3) DCCE C9 RET DCCF CDE100 CALL &HE1 DCD2 CD55DB CALL &HDB55 DCD5 5F LD E,A DCD6 CD55DB CALL &HDB55 DCD9 57 LD D,A DCDA DD7306 LD (IX+&H6),E DCDD DD7207 LD (IX+&H7),D DCE0 CD55DB CALL &HDB55 DCE3 6F LD L,A DCE4 CD55DB CALL &HDB55 DCE7 67 LD H,A DCE8 DD7508 LD (IX+&H8),L DCEB DD7409 LD (IX+&H9),H DCEE ED52 SBC HL,DE DCF0 23 INC HL DCF1 E5 PUSH HL DCF2 C1 POP BC DCF3 CD55DB CALL &HDB55 DCF6 5F LD E,A DCF7 CD55DB CALL &HDB55 DCFA 57 LD D,A DCFB DD730A LD (IX+&HA),E DCFE DD720B LD (IX+&HB),D DD01 DD7104 LD (IX+&H4),C DD04 DD7005 LD (IX+&H5),B DD07 C9 RET DD08 DD7E06 LD A,(IX+&H6) DD0B CD5FDB CALL &HDB5F DD0E DD7E07 LD A,(IX+&H7) DD11 CD5FDB CALL &HDB5F DD14 DD7E08 LD A,(IX+&H8) DD17 CD5FDB CALL &HDB5F DD1A DD7E09 LD A,(IX+&H9) DD1D CD5FDB CALL &HDB5F DD20 DD7E0A LD A,(IX+&HA) DD23 CD5FDB CALL &HDB5F DD26 DD7E0B LD A,(IX+&HB) DD29 CD5FDB CALL &HDB5F DD2C C9 RET DD2D C5 PUSH BC DD2E 3E01 LD A,&H1 DD30 CDF300 CALL &HF3 DD33 010000 LD BC,&H0 DD36 0B DEC BC DD37 78 LD A,B DD38 B1 OR C DD39 20FB JR NZ,-&H5 (&HDD36) DD3B C1 POP BC DD3C C9 RET DD3D 3E1B LD A,&H1B DD3F 3205DA LD (&HDA05),A DD42 3AA4FC LD A,(&HFCA4) DD45 57 LD D,A DD46 CDCBDD CALL &HDDCB DD49 D8 RET C DD4A DBA2 IN A,(&HA2) DD4C 07 RLCA DD4D 30F7 JR NC,-&H9 (&HDD46) DD4F CDCBDD CALL &HDDCB DD52 D8 RET C DD53 DBA2 IN A,(&HA2) DD55 07 RLCA DD56 38F7 JR C,-&H9 (&HDD4F) DD58 1E00 LD E,&H0 DD5A CDA5DD CALL &HDDA5 DD5D 41 LD B,C DD5E CDA5DD CALL &HDDA5 DD61 D8 RET C DD62 78 LD A,B DD63 81 ADD A,C DD64 DA5DDD JP C,&HDD5D DD67 BA CP D DD68 38F3 JR C,-&HD (&HDD5D) DD6A 2E08 LD L,&H8 DD6C CD89DD CALL &HDD89 DD6F FE04 CP &H4 DD71 3F CCF DD72 D8 RET C DD73 FE02 CP &H2 DD75 3F CCF DD76 CB1A RR D DD78 79 LD A,C DD79 0F RRCA DD7A D4A9DD CALL NC,&HDDA9 DD7D CDA5DD CALL &HDDA5 DD80 2D DEC L DD81 C26CDD JP NZ,&HDD6C DD84 CDCBDD CALL &HDDCB DD87 7A LD A,D DD88 C9 RET DD89 3AA5FC LD A,(&HFCA5) DD8C 47 LD B,A DD8D 0E00 LD C,&H0 DD8F DBA2 IN A,(&HA2) DD91 AB XOR E DD92 F29DDD JP P,&HDD9D DD95 7B LD A,E DD96 2F CPL DD97 5F LD E,A DD98 0C INC C DD99 10F4 DJNZ -&HC (&HDD8F) DD9B 79 LD A,C DD9C C9 RET DD9D 00 NOP DD9E 00 NOP DD9F 00 NOP DDA0 00 NOP DDA1 10EC DJNZ -&H14 (&HDD8F) DDA3 79 LD A,C DDA4 C9 RET DDA5 CDCBDD CALL &HDDCB DDA8 D8 RET C DDA9 0E00 LD C,&H0 DDAB 0C INC C DDAC 280A JR Z,+&HA (&HDDB8) DDAE DBA2 IN A,(&HA2) DDB0 AB XOR E DDB1 F2ABDD JP P,&HDDAB DDB4 7B LD A,E DDB5 2F CPL DDB6 5F LD E,A DDB7 C9 RET DDB8 0D DEC C DDB9 C9 RET DDBA CDCBDD CALL &HDDCB DDBD D8 RET C DDBE DBA2 IN A,(&HA2) DDC0 07 RLCA DDC1 38F7 JR C,-&H9 (&HDDBA) DDC3 1E00 LD E,&H0 DDC5 CDA9DD CALL &HDDA9 DDC8 C3ABDD JP &HDDAB DDCB C5 PUSH BC DDCC ED4B04DA LD BC,(&HDA04) DDD0 1007 DJNZ +&H7 (&HDDD9) DDD2 ED4304DA LD (&HDA04),BC DDD6 C1 POP BC DDD7 37 SCF DDD8 C9 RET DDD9 ED4304DA LD (&HDA04),BC DDDD C1 POP BC DDDE C36F04 JP &H46F DDE1 43 LD B,E DDE2 4F LD C,A DDE3 50 LD D,B DDE4 59 LD E,C DDE5 2056 JR NZ,+&H56 (&HDE3D) DDE7 45 LD B,L DDE8 52 LD D,D DDE9 53 LD D,E DDEA 2032 JR NZ,+&H32 (&HDE1E) DDEC 2E31 LD L,&H31 DDEE 00 NOP Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 03 de Julio de 2014, 02:01:34 am Hola:
Estos días he estado mirando un poco tu Programa Ensamblador, PhSoft y tratando de entenderlo. Más o menos entiendo, o intuyo, lo que haces aunque bueno mis conocimientos de Ensamblador son muy muy MUY LIMITADOS. :-( "Googleando" también encontré un Documento sobre el Cassette en el MSX. El documento en cuestión está aquí: http://www.msxarchive.nl/pub/msx/docs/hardware/msx-tape.doc Como creo que puede resultar de interés hago un "Ana Rosa Quintana" (copy & paste) aquí: Código: MSX Tape I/O ------------- BIT AND BYTE ENCODING Information on tape is stored as square waves of 1200 or 2400 baud. The encoding used is FSK (frequency shifting key). The next table shows the relation between the selected recording speed, the bits and the pulses put on tape: bps bit encoding freq (Hz) _______ 1200 0 _______| | 1200 ___ ___ 1200 1 ___| |___| | 2400 ___ 2400 0 ___| | 2400 _ _ 2400 1 _| |_| | 4800 Each byte is put on tape as a sequence of 11 bits: 0 b0 b1 b2 b3 b4 b5 b6 b7 1 1 (one startbit, 2 stopbits, LSb first) Futhermore 2 kinds of headers are used: short and long, a long header being 4 times as long as a short one. They consist of a series of square wave pulses (bit value 1): bps header freq (Hz) nr of pulses 1200 short 2400 4000 (5/3 sec) 1200 long 2400 16000 (20/3 sec) 2400 short 4800 8000 2400 long 4800 32000 FILE FORMATS Files on tape are stored in two blocks. The first block is the filedescriptor, the second contains the filedata. Three types of files exist: BASIC file, memory dump and data file. BASIC File (CSAVE/CLOAD) filedescriptor: long header 10x #D3 (filetype) 6 bytes filename file data: short header tokenized BASIC 7x #00 memory dump (BSAVE/BLOAD) filedescriptor: long header 10x #D0 6 bytes filename file data: short header 2 bytes start address 2 bytes end address 2 bytes exec address memory dump data file (SAVE/LOAD/OPEN) filedescriptor: long header 10x #EA 6 bytes filename file data: short header block of 256 bytes short header block of 256 bytes .... last block contains 256x #1A (^Z/EoF) Así pues tenemos que en MSX hay 3 tipos de Carga/Grabación desde/en Cassette: -CLOAD/CSAVE. -LOAD/SAVE. -BLOAD/BSAVE. Hay 2 velocidades diferentes para grabar nuestros Programas: - 1200 baudios. - 2400 baudios. Cada Byte se graba siempre añadiendo un bit por la Izquierda (un 0) que indica el comienzo, luego iría el Byte propiamente dicho, y al final se añaden dos bits (dos CEROS) que indican el final del Byte. Los Ficheros-Programas para grabarse en Cinta se graban en 2 Bloques: - Un primer Bloque (Descriptor de Fichero) que nos indica el tipo de Fichero. - Un segundo Bloque que contiene los Datos propiamente dichos. Cada Tipo de Fichero (CLOAD, LOAD, BLOAD) tiene sus peculiaridades: 1. Ficheros CLOAD --> (BASIC) ■ Descriptor de Fichero, formado por: -Cabecera Larga. -10 bytes con el valor "D3" (el valor "D3" nos indica que es un Fichero CLOAD) -6 bytes que contienen el nombre del Fichero. ■ Datos propiamente dichos del Fichero, formados por: -Cabecera Corta -Caracteres del Programa BASIC "Tokenizados" -7 bytes con el valor "00" que indican el final del Fichero. 2.Ficheros LOAD/OPEN --> (ASCII) ■ Descriptor de Fichero, formado por: -Cabecera Larga -10 bytes con el valor "EA" (ese valor "EA" nos indica que es un fichero de tipo LOAD/OPEN) -6 bytes con el nombre del Fichero. ■ Datos propiamente dichos del Fichero, formados por: -Cabecera Corta. -Bloque de 256 bytes -Cabecera Corta. -Bloque de 256 bytes -Cabecera Corta. -Bloque de 256 bytes .......................... .......................... -Cabecera Corta. -Un último Bloque que contiene 256 bytes con el valor "1A" (ese valor "1A" indica el final del Fichero) 3.Ficheros BLOAD --> Código Máquina: ■ Descriptor de Fichero, formado por: -Cabecera Larga. -10 bytes que contienen el valor "D0" (este valor "D0" nos indica que es un Fichero de Tipo BLOAD) -6 bytes con el nombre del Fichero. ■ Datos propiamentes dichos del Fichero, formados por: -2 bytes, que contienen la Dirección de Inicio. -2 bytes, que contienen la Dirección Final. -2 bytes, que contienen la Dirección de Ejecución. -El Volcado de los Datos del Programa que están en memoria. -La Instrucción TAPION (Dir. &H00E1), hace un "Motor On" y lee una Cabecera del Cassette (tanto larga como corta). -La Instrucción TAPIN (Dir. &H00E4), lee solamente un Byte del Cassette. -La Instrucción TAPIOF (Dir. &H00E7), pone fin a la Lectura desde el Cassette. Preguntas que me surgen... 1. ¿La Instrucción "TAPION" lee CABECERAS tanto largas como cortas, ¿verdad? 2. Cuando se comienza a leer un Programa al principio hay un Bit/Byte que indica el tipo de velocidad: 1200 ó 2400 Baudos. El tipo de Velocidad lo obtenemos de la Cabecera Larga, ¿verdad? La velocidad con la que ha sido grabado el Programa entiendo que viene al Principio y es un Dato que siempre está presente para todos los Tipos de Fichero: CLOAD/LOAD/BLOAD, ¿cierto? 3. ¿Cuál es la Estructura de esa Cabecera Larga? 4. En los Ficheros de Tipo LOAD entiendo que cada Bloque de 256Bytes está precedido por una Cabecera Corta, ¿cierto? 5. Cuando leemos las Direcciones de Inicio/Fin/Ejecución en los Ficheros "BLOAD" se interprenta al revés, ¿verdad? Es decir si al leer de la Cinta primero tenemos "00" y luego "1A" la dirección sería "1A00", ¿correcto? Gracias & Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: mohai en 17 de Septiembre de 2014, 09:41:54 am 1. ¿La Instrucción "TAPION" lee CABECERAS tanto largas como cortas, ¿verdad?
Correcto. Al leer la cabecera o pitido inicial, lo que hace es leer un poquito de la cabecera y ajustar las variables del sistema para la velocidad detectada. Puedes hacer la prueba con una cinta, verás como esta rutina apenas lee un segundo de la cinta. 2. Cuando se comienza a leer un Programa al principio hay un Bit/Byte que indica el tipo de velocidad: 1200 ó 2400 Baudos. El tipo de Velocidad lo obtenemos de la Cabecera Larga, ¿verdad? La velocidad con la que ha sido grabado el Programa entiendo que viene al Principio y es un Dato que siempre está presente para todos los Tipos de Fichero: CLOAD/LOAD/BLOAD, ¿cierto? La deteccion de velocidad la hace la lectura de la cabecera, por la frecuencia que esa rutina detecta. Por lo que yo sé, se hacen 2 ajustes de velocidad, uno con la cabecera larga y otro con la corta. El BIOS, en realidad, al ajustarse a la velocidad de la grabación, es capaz de leer a otras velocidades diferentes a las que ofrece el BASIC. Un experimento interesante, consiste en tocar las variables del sistema para grabar a velocidades diferentes de 1200 o 2400. Yo he conseguido grabar a 1000 o 600 baudios y leerlo sin problema. No hay ningún bit ni byte que le diga al MSX la velocidad a cargar. La información que has puesto antes, es lo que hay. Ni más ni menos. 3. ¿Cuál es la Estructura de esa Cabecera Larga? La estructura no es más que una onda pura. 4. En los Ficheros de Tipo LOAD entiendo que cada Bloque de 256Bytes está precedido por una Cabecera Corta, ¿cierto? Correcto. Haz un programa de más 256 bytes, luego SAVE¨CAS:" y mira lo que hace. Por cierto, en el formato LOAD, lo que se graba es tipo ASCII, o sea, texto puro y duro. 5. Cuando leemos las Direcciones de Inicio/Fin/Ejecución en los Ficheros "BLOAD" se interprenta al revés, ¿verdad? Es decir si al leer de la Cinta primero tenemos "00" y luego "1A" la dirección sería "1A00", ¿correcto? Correcto. Esto es porque es un valor de 16 bits y el Z80 lo almacena así en memoria. Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 08 de Febrero de 2015, 08:10:07 am Hola de nuevo:
Revisando el código dices que con los Bloques ASCII te da problemas. No sé, quizás a mí me parezca muy obvio o quizás sea una chorrada lo que voy a decir pero... en la última insturcción del bloque que te pongo, ¿no deberías hacer LD B, 255? Citar bld1: push hl call TAPION pop hl jp c, EXIT ld b, 0 ; carga bloques de 256 bytes Por cierto, una pregunta chorra pero que no tengo clara. En los Ficheros de tipo "LOAD", el último Bloque está formado también por 256 bytes pero ¿ese último Bloque está formado por 256 bytes que contienen todos ellos el valor "1A" o hay 255 bytes de datos y el byte 256 es el que contiene el valor "1A"? Gracias & Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: e_sedes en 09 de Febrero de 2015, 02:07:31 am Revisando el código dices que con los Bloques ASCII te da problemas. No sé, quizás a mí me parezca muy obvio o quizás sea una chorrada lo que voy a decir pero... en la última insturcción del bloque que te pongo, ¿no deberías hacer LD B, 255? DJNZ primero decrementa B y luego mira si llegó a 0. Si lo pones a 0 al principio, en la primera pasada lo decrementa y lo pone a 255. Así consigues que el bucle pase 256 veces. Si cargas B con 255 solo haces 255 pasadas. No se si me explico :PTítulo: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 09 de Febrero de 2015, 02:34:53 am Hola:
Ok @e_sedes, ¡entendido! Ya me parecía a mí que sería un error muy evidente. XD Entonces, ¿dónde podría estar el error que comenta su autor, @Phsoft, en lo que refiere a los Bloques LOAD? Más cosas... ¿Qué hace la instrucción "EXX"?, ¿y "STMOTR? Respecto a lo de Grabar los Ficheros en Disco por lo que me han comentado el manejo de las Rutinas de Disco en Ensamblador puro y duro es pelín complejo, así que lo más fácil sería ejecutar desde el Programa el comando Basic "BSAVE". Sé que la dirección de la Instrucción BSAVE es la &H39CC. Intenté hacer una prueba con un "simple objetivo": quiero grabar el Código que hay en Memoria a partir de la Dirección inicial &HC00 y con Dirección Final &HC119 y darle como nombre al Programa en Disco "PATATA.BIN". He hecho un amago de Programa directamente en el MSX, en el "RSC-2". El caso es que en la línea 120 tendría que cargar el texto a ejecutar, pero que no sé como ponerlo (lo he puesto así para que se entienda) Además hay que tener en cuenta que habría que meterle también la pulsación de la tecla "INTRO" :-( Otra pregunta chorra... (y que nadie se ría...) Vale, sé que el código de este Programa va a empezar en &HC000 pero... ¿cómo sé dónde acaba? O dicho de otra forma, ¿cómo sé la dirección final para grabar el Binario resultante de mi Ejemplo ASM? Nota: estoy usando el RSC-2. Gracias & Saludetes. ;-( Pd. ¿Qué Ensamblador y Desensamblador me recomendaiss para usar en PC? ¿Alguien usa algún otro aparte del AsMSX? Código: 10 ORG &HC000 20 ; 30 INS: DEFM "BSAVE" 40 NOM: DEFM¨PATATA.BIN" 50 INI: DEFM "&HC000" 60 FIN: DEFM "&HC119" 70 ; 80 TECLA: EQU &H9F 90 INTRO: EQU &H00 100 SAVEDISK: EQU &H39CC 110 ; 120 LD HL, 130 LD IX, SAVEDISK 140 ; 150 CALL SAVEDISK 160 CALL TECLA 170 RET Título: Re:Ayuda para Modificar Programa Publicado por: e_sedes en 10 de Febrero de 2015, 12:47:56 am Esto nunca lo había mirado, pero le he echado un ojo al MSXTopSecret2 donde explica esto y veo un par de cositas (recomiendo muchísimo este documento).
HL tiene que apuntar a una línea de BASIC con los argumentos del comando que quieras utilizar. Puedes escribir la linea en un emulador y luego usar el debugger para ver como se guarda en memoria. Tiene que acabar con &h00. IX tiene que apuntar al comando que quieras usar. Ojo, BSAVE no está en &h39CC, como dices. Esa es una posición en una tabla que contiene la dirección de BSAVE. Deberías leer ahí la dirección, pero por lo visto en todos los modelos de MSX es siempre la misma, no la cambiaron nunca. La verdadera dirección es &h6E92. Despues tienes que llamar a la rutina CALBAS (&h0159), que es la que llama al comando. En teoría así te debería funcionar, yo no lo he probado. Tambien tienes que tener en cuenta que si hay algún error te saltaría al BASIC, por lo que tendrías que interceptar el gancho HERRO (&hFFB1) para que eso no te pasase. Título: Re:Ayuda para Modificar Programa Publicado por: Metalbrain en 11 de Febrero de 2015, 12:22:11 pm Más cosas... ¿Qué hace la instrucción "EXX"?, En el Z80, los principales registros tienen un duplicado, que se distingue del original con un apóstrofe. Así, tenemos los registros alternativos AF', BC', DE' y HL'. Estos registros no son accesibles directamente, pero mediante la instrucción "EXX" se intercambian los valores entre los principales y los alternativos en el caso de BC, DE y HL. Y con la instrucción "EX AF, AF'", se intercambia el que faltaba. En la práctica es como tener un juego alternativo de registros y puedes intercambiar entre uno y otro. El intercambio entre un juego y otro (en realidad entre sus valores, pero vamos, en la práctica es lo mismo), es mucho más rápido que usar variables en memoria o la pila cuando te quedas sin registros. Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 16 de Febrero de 2015, 07:04:24 pm Hola de nuevo:
Cierto @e_sedes. Lo expliqué mal. La dirección que puse no es la de BSAVE sino que se usa para obtener la dirección real de BSAVE. Estuve haciendo pruebas pero lo dejé por imposible ya que no fui capaz de que funcionara. :-( Gracias por la info @Metalbrain. Totalmente aclarado el tema de EXX. ;-) Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 14 de Octubre de 2015, 03:08:48 am Hola:
Por causalidad he llegado hasta este Hilo: http://www.zonadepruebas.org/backup/modules/newbb/viewtopic.php?topic_id=10152&forum=2&start=30 Y resulta curioso-útil lo que aquí comentan: Citar ............... Un sistema parecido lo utilicé para hacerme un copión de cinta a disco en ensamblador del Z80...... Cargaba el programa, y al ejecutarse desconectaba el BASIC, con lo que tenía 64KB de RAM. y leía un bloque de la cinta, que luego volcaba a un fichero en disco. La verdad es que funcionaba. A veces un poco lioso porque había que desconectar bloques de RAM, para acceder a la BIOS, pero bueno... Me faltaba hacer unos los menús bonitos.... ................ Interesante técnica para tener toda la Ram Libre. ;-) Una pregunta, quizás trivial para algunos pero desconocida para mí. Un MSX-1 POR DEFECTO tiene 64 Kb de RAM. Si tenemos una Disquetera, ¿esa disquetera resta Memoria Ram o solo nos quita Memoria Ram cuando tenemos una Segunda Disquetera? Gracias & Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 18 de Octubre de 2015, 01:16:31 pm Hola:
Bueno, pues como soy un poco "cabezota" he seguido haciendo pruebas con lo de ejecutar instrucciones BASIC desde un Programa en Ensamblador. En este caso en concreto quería ejecutar la Instrucción BSAVE. Quería grabar la zona de Memoria comprendida entre las &HC00 y &HC119 y darle como nombre al Fichero en Disco "PATATA.BIN". El "complejo" Código sería este: Código: RSC II MSX 1.0 10 ORG &HC000 20 BSAVEDSK: EQU &H39CC 30 CHGET: EQU &H9F 40 CALBAS: EQU &H159 50 LD HL, LINBAS 60 LD IX, (BSAVEDSK) 70 CALL CALBAS 80 CALL CHGET 90 RET 100 LINBAS: DEFB &H22 110 DEFM "PATATA.BIN" 120 DEFB &H22 130 DEFM ",&HC000" 140 DEFM ",&HC119" 150 DEFB &H00 160 FIN: NOP El Programa está hecho usando el RSC II. - En la Línea 20 tenemos la Dirección de la Instrucción BSAVE. - La línea 30 tiene como finalidad que pulsemos una Tecla. - La línea 40 nos servirá para ejecutar la Instrucción BSAVE. - En la línea 50 hacemos que HL apunte a una falsa línea en Basic (LINBAS) - En la línea 60 cargamos la dirección de la Rutina BSAVE. - En la línea 70 ejecutamos la instrucción BSAVE. - En la línea 80 esperamos a que se pulse una Tecla. - En la línea 100 y posteriores definimos nuestra línea Basic "virtual" en la lo que hacemos simplemente es definir todos los argumentos-parámetros necesarios para completar la Instrucción BSAVE (lo que pongo abajo en rojo) BSAVE"PATATA.BIN", &HC000, &HC119 Pues bien, yo con lo que me liaba, entre otras cosas era en la definición de todo eso que pongo en rojo. No sabía como poner las comillas usando la instrucción DEFM, ya que no sería posible hacer esto: DEFM ""PATATA.BIN"" así que lo tendremos que hacer por partes, es decir: - En la línea 100 lo que hacemos es definir las "comillas" (&H22) - En la línea 110 el nombre del Fichero (PATATA.BIN) - En la línea 120 otra vez las comillas (&H22) - En la línea 130 definimos la coma y la dirección inicial, es decir ,&HC000 - En la línea 140 definimos la coma y la dirección final, es decir ,&HC119 - Muy importante en la línea 150 hacemos que nuestra instrucción acabe con &H00. La verdad es que se me antoja una opción muy potente el usar este método para ejecutar comandos y funciones BASIC desde nuestros programas en Ensamblador. Toda esta Info viene recogida en el Libro-Manual "MSX TOP SECRET", en concreto en el Tema 2 páginas 36 a 39. ¡¡¡1.000 gracias a su autor por toda esta Info!!! Saludetes. ;-) Título: Re:Ayuda para Modificar Programa Publicado por: manolito74 en 14 de Diciembre de 2016, 02:57:01 am Hola de nuevo:
He estado revisando el Programa: Código: CSAVE_FILE equ 0xD3 ; eof = n data hasta 7bytes 0x0 SAVE_FILE equ 0xEA ; eof = n bloques 256 bytes hasta CTRL+Z BSAVE_FILE equ 0xD0 INI_BASIC equ 0x8001 ; lol! INI_PRG equ 0xF000 ; -------------------------------------- .bios .basic .org INI_PRG .start MAIN MAIN: di xor a ; limpiando la casa ld hl, iniram ld bc, endram-iniram-1 call CLSRAM call LHEADER ; leemos una cabecera ret ; -------------------------------------- ; inicia o detiene el motor del cassette MOTORON: ld a, 1 bmotor: call STMOTR ret MOTOROFF: xor a jr bmotor ; -------------------------------------- ; salimos (por error de lectura) o paramos el cassete EXIT: pop hl STOP: call TAPIOF ret ; -------------------------------------- ; leemos datos (un byte) del cassete; C si se produce un error READ: exx call TAPIN jr c, EXIT exx ret ; -------------------------------------- ; leemos la cabecera larga del cassete; tipo = 10 bytes + nombre = 6 bytes LHEADER: call TAPION jr c, EXIT ld b, 10 ; 10 bytes ld hl, tipo_fichero bucH: call READ ld [hl], a djnz bucH ld b, 6 ; 6 bytes ld hl, nom_fichero bucN: call READ ld [hl], a inc hl djnz bucN call STOP ld a, [tipo_fichero] ; tipo de fichero cp BSAVE_FILE jp z, BLOAD ; cargamos binario cp SAVE_FILE jp z, LOAD ; cargamos basic SAVE cp CSAVE_FILE jp z, CLOAD ; cargamos basic CSAVE ; TODO: fichero desconocido ; TODO: presentar informacion ; TODO: grabar fichero a disco ret ; -------------------------------------- ; cload tiene una cabecera corta que leemos con TAPION y luego ; los datos hasta encontrar 7 ceros seguidos CLOAD: call rstzeros xor a ld [INI_BASIC-1], a ; 0 en 0x8000; requerido ld hl, INI_BASIC push hl call TAPION pop hl jr c, EXIT bcld: call READ ld [hl], a inc hl cp 0 call nz, rstzeros call z, inczeros ld a, [temp1] cp 7 ; termina con 7 ceros jr nz, bcld jr STOP rstzeros: xor a ld [temp1], a ret inczeros: ld a, [temp1] inc a ld [temp1], a ret ; -------------------------------------- ; load contiene multiples bloques de 256 bytes hasta 0x1a (ctrl+z) ; cada bloque tiene su cabecera corta que leemos con TAPION LOAD: xor a ld [INI_BASIC-1], a ; 0 en 0x8000; requerido ld hl, INI_BASIC bld1: push hl call TAPION pop hl jp c, EXIT ld b, 0 ; carga bloques de 256 bytes bld2: call READ cp 0x1a ; ctrl + z jp z, STOP ld [hl], a inc hl djnz bld2 ; fin de bloque push hl call TAPIOF pop hl jr bld1 ; -------------------------------------- ; bload tiene una cabecera corta seguida de 6 bytes con ; las direcciones de inicio, fin y ejecución del programa ; a continuación va el bloque de datos, todo seguido BLOAD: xor a ld hl, inifile ld bc, finfile-inifile-1 call CLSRAM ; borra dirs fichero call TAPION jp c, EXIT ld b, 6 ; 6 bytes ld hl, inifile bblh: call READ ld [hl], a inc hl djnz bblh call MOTOROFF call calclng ; calculamos longitud push hl call MOTORON pop bc ; longitud ld hl,INI_BASIC ; inicio (temporal) bbld: call READ ld [hl], a inc hl dec bc ld a, b or c jr nz, bbld jp STOP calclng: ld ix,inifile ld e, [ix+0] ld d, [ix+1] ; de = ini (real) ld l, [ix+2] ld h, [ix+3] ; hl = fin (real) sbc hl, de ; longitud = fin - ini ret ; ------------------------------------- ; rellenamos bc+1 bytes de ram con el valor de A CLSRAM: ld [hl], a ld d, h ld e, l inc de ldir ret ; -------------------------------------- iniram: defb 0 tipo_fichero: defs 1 nom_fichero: defs 6 inifile: defs 2 finfile: defs 2 exefile: defs 2 temp1: defs 1 endram: defb 0 Si no me equivoco @PhSoft tú comentabas que el problema estriba en que con los Programas de tipo "LOAD/SAVE" el Código del Programa no aparece "tokenizado" en la Memoria del Emulador. Si yo te entiendo bien eso viene a decir que lo que tiene que aparecer a partir de la Dirección &h8000 cuando el Programa lee un Bloque LOAD las instrucciones de dicho Programa tal cual en esa zona de memoria, ¿no? Si es así comentarte que sí que funciona. Yo como no me aclaro con el Debugger del Open MSX he usado el del MAME que me ha resultado más cómodo e intuitivo (al menos para este propósito) Te pongo aquí la captura: (https://s30.postimg.org/jp5qvw28h/Captura_MEMORIA_MAME_PROGRAMA_PHSOFT.jpg) (https://postimg.org/image/s7f7088r1/)imag (https://postimage.org/index.php?lang=spanish) Por si a alguien le interesa y/o no sabía que con el MAME se puede emular el MSX y además usar un Debugger os pongo aquí cómo hacerlo. Tutorial Express: MAME - MSX - DEBUGGER: Nota: yo no sabía que el MAME emulaba al MSX y apenas encontré información sobre cómo hacerlo. :-( – Descargamos la Rom del MSX que vamos a usar. El MAME emula unos cuantos modelos de MSX y MSX-2. Yo había probado con la ROM del 8245 pero parece que no está bien o hay algún problema así que probé con la del 8250, que os podéis descargar desde aquí: http://www.planetemu.net/rom/mame-roms/nms8250-1 (y pulsamos en “Telecharger”) Descargamos dicha ROM y la copiamos sin descomprimir en la Carpeta "ROMS" del MAME. – Ahora abrimos una consola de MS-DOS (es decir, ejecutamos un CMD) y escribimos lo siguiente: mame64 nms8250 -windows -debug Con esto ejecutamos el MAME y se lanza su Debugger. Desde el Debugger en el apartado "Images" podemos elegir cómodamente el Disco y/o Cinta que queremos cargar. Yo cargo una imagen de Disquete con el Binario de tu Programa en ASM y una CINTA. Para ejecutar el MAME desde el Debugger lo hacemos con "F5". Luego ya dentro del MAME cuando ha cargado el BASIC ejecuto tu Programa desde el propio BASIC y en el Debugger hago un "New Memory Window" (para ver el contenido de la Memoria en una ventana aparte). Me voy a la dirección de memoria 8000....y allí veo el listado tokenizado del Programa BASIC. Así que si te referías a eso comentarte que sí que rula tu Programa. ;-) Y la prueba del delito es la imagen que puse más arriba. ;-) Ahora como siguiente pequeño paso a abarcar pues sería ir mostrando la info del Bloque que encuentra en la Cinta (nombre, tipo de bloque, dirección de inicio-fin-ejecución, etc) Luego una vez pulido esa pequeña labor habría que ver ya cómo gestionar la grabación de los Bloques que vamos cargando en Disco. Se me ocurre que la forma más rápida-cómoda (que no sé si la mejor) podría ser ejecutando directamente desde el Programa ".ASM" la instrucción Basic correspondiente (SAVE, BSAVE, CSAVE) a la cual le habría que pasar los parámetros correspondientes. ;-) Saludetes. ;-) |