Listado de MNEMÓNICOS del Z80 – Ordenados por NOMBRE

 

 

 

 

Como curiosidad comentar que estas Tablas las he sacado del Especial CM de la Revista MSX-EXTRA y siguen el mismo Formato.

En la versión que está ordenada por el NOMBRE-INSTRUCCIÓN me he permitido la “licencia” de poner primero la columna donde aparece el Código Fuente y luego en la que aparece el Código Objeto (creo que tiene mucho más sentido y así resulta mucho más legible y práctica a nivel visual).

Las he insertado en la Entrada como veis en Formato “.JPG” porque es imposible pegar el contenido desde el Word en el Blog y que se respete el Formato original de las Tablas que creé (Fuentes, Tamaños, Columnas, Colores….). Copiar y pegar texto manteniendo el Formato es tarea IMPOSIBLE en los Blog de WORDPRESS.COM (ya que no se puede tampoco insertar ningún Plugin que facilite esta Tarea) y lo de los saltos de línea es una LOCURA… (A menudo lo que ves mientras creas la Entrada y luego la publicas difiere bastante…)

Estas Tablas las creé haciendo OCR a los originales de la MSX-EXTRA pero tuve que corregir algún error que aparecía en el original. Para depurar las Tablas y corregir errores recurrí a comparar Listados de diferentes Libros. Increíblemente todos todos todos los Libros que consulté tenían algún error: se cambiaba algún caracter (a veces se cambiaban “0” por “O” o viceversa, otras “I” por “1” o viceversa, otras “8” por “B” o viceversa y algunos errores más).  Como curiosidad os comento que de hecho los de la Revista MSX-Extra sacaron estas Tablas del Libro “MSX – Más allá del Basic (Editorial RAMA)” y copiaron hasta los errores del original…(¡vamos, que no se molestaron en revisarlas-compararlas con otras “fuentes”…!)

Nota: como véis la tipografía de este Blog tampoco es muy allá… Los “ceros” parecen letras “o” minúsculas… 😦

Entiendo que en la mayoría de los casos cada Libro-Revista hizo lo mismo que yo: hizo OCR de otro Listado para adaptarlo-maquetarlo a las necesidades y longitud-extensión del Libro o Revista en cuestión. Si tenemos en cuenta que en muchos casos las Fuentes y Tipografías utilizadas no eran las más idóneas para distinguir esos caracteres y que la calidad de impresión no siempre era lo buena que debiera como resultado aparece ese “baile de caracteres” (os aseguro que según la Fuente que se utilice los caracteres mencionados se distinguen mucho mejor o peor, según el caso).

En fin…, que la depuración de estas Tablas ha sido una Tarea de “Chinos” y la he tenido que imprimir y rehacer varias veces para ir eliminando los errores encontrados. 😉

 

Para los que quieran trabajar en Ensamblador y usar un Desensamblador en un MSX real os dejo este LOTE “ENSAMBLADORIL que podéis descargar AQUÍ y que incluye lo siguiente:

 

  • Imagen “.DSK” del Ensamblador/Desensamblador RSC con todas sus versiones(RSC 1, RSC 1 versión 2 y RSC II).

Nota: una vez cargado el “.DSK” para ejecutarlo os recomiendo hacer LOAD”RSC.BAS”, R (de esta forma veréis que se ejecuta un Menú que os va a pedir qué versión del RSC queréis usar y también si queréis usar el modo de visualización de 40 ú 80 columnas) (el modo de 80 columnas sólo es válido para Ordenadores MSX-2)

  • Manual del RSC-II.  El RSC-II es un Ensamblador-Desensamblador bastante decente y que en su día fue publicado por la Revista MSX-CLUB. Incluyo el Manual en PDF (con Formato de 2 Páginas por Hoja) y un Documento aparte con una Portada  (fichero de Word) que yo creé.  Incluyo también el Manual original en Formato Word a partir del cual creé el PDF. Lo ideal es imprimirlo con el Formato de “2 páginas por hoja” y si queréis añadirle la Portada y así queda bastante cómodo y manejable.Yo lo tengo impreso en Formato “Revista” (con 2 Páginas por Hoja), con dos grapas en medio e incluyendo la Portada y queda muy chulo. 😉

 

  • Tabla de Mnemónicos del Ensamblador Z80. Os dejo los siguientes Ficheros-Formatos: 

– Versión en PDF original del Especial CM de la Revista MSX-EXTRA ordenada por NOMBRE.

– Versión en PDF original del Especial CM de la Revista MSX-EXTRA ordenada por NÚMERO.

– Versión en PDF de la versión realizada por mí partiendo del original del Especial CM de la Revista MSX-EXTRA ordenada por NOMBRE (se distingue porque al final del nombre del fichero pone “by Manolito74”) (también he incluido los respectivos Ficheros “.JPG” que aparecen en el Blog).

– Versión en PDF de la versión realizada por mí partiendo del original del Especial CM de la Revista MSX-EXTRA ordenada por NÚMERO (se distingue porque al final del nombre del fichero pone “by Manolito74”) (también he incluido los respectivos Ficheros “.JPG” que aparecen en el Blog).

– Versión en Fichero de WORD de la Tabla ordenada por NOMBRE (son 3 Ficheros “.doc”)

– Versión en Fichero de WORD de la Tabla ordenada por NÚMERO (son 3 Ficheros “.doc”)

Nota: he decidido incluir los originales en Word por si alguien quiere formatearlos a su gusto, cambiar las fuentes, el tamaño, la distribución, los colores o corregir alguna hipotética errata (que espero que no haya ninguna porque os aseguro que están revisados a conciencia…). No obstante por favor si alguien ve una errata que me lo notifique a mi dirección de GMAIL –> josemanuel74

 

Por supuesto me podéis contactar para cualquier comentario-crítica-sugerencia, etc, etc, etc.

Gracias & Saludetes. 😉

Anuncios
Publicado en Sin categoría | Deja un comentario

Entrevista a Ramón Sala, autor del Ensamblador/Desensamblador RSC / RSC II

Hola a todos:

Pues bien pese a que este material ya lo tengo desde hace tiempo por unas cosas y por otras lo he ido procrastinando, procrastinando y procrastinando y no ha sido hasta hoy que me he decidido a publicarlo. 😉

Si como yo lleváis ya tiempo en la escena MSX-era, eráis lectores de la MSX-Club y además os gustaba el tema de la Programación seguro que habéis oído hablar del Ensamblador/Desensamblador RSC / RSC II. Para quien no lo conozca decir que era un Ensamblador / Desensamblador de la época, en mi opinión MUY BUENO (yo era el que usaba y sigo usando) y encima “Made in Spain”. Desde luego para la época fue todo un lujo contar con Software como ese. Además recuerdo que incluso luego se llegó a incluir en la MSX-CLUB una Sección/Curso sobre el Ensamblador al hilo de la publicación del RSC.

Viendo Entrevistas publicadas en otras Web, como por ejemplo alguna de Konamito, a Carlos Mesa y otras que han aparecido de Jesús Manuel Montané y demás, siempre me ha “picado el gusanillo” de saber qué fue de otras de las personas que aparecían en la MSX-CLUB. Por ejemplo siento curiosidad de saber qué ha sido de Willy Miragall, Ronald Van Ginkel y que alguien les haga una Entrevista en “profundidad” y que nos cuente cosas de la época, entresijos de la MSX-Club, etc, etc, etc.

Pues bien, en esta ocasión, cosas de la vida y del “azahar” (que diría Millán, el de Martes y 13) di por causalidad con el autor del RSC y casi casi como que le “asalté” para hacerle un amago de “Entrevista”. Lamentablemente no le pillé en un buen momento porque no disponía de mucho tiempo pero tuvo la AMABILIDAD de responder e intentar saciar mi curiosidad.

Así que sin más dilación, vamos allá con el amago de “Entrevista”:

 




 ¡Hola Ramón!:

En primer lugar mil gracias por contestar.

No sé si sigues o no de alguna forma el mundo de la Emulación y en concreto el del MSX. El caso es que ayer charlando sobre temas de Ensamblador y demás en un Grupo de Desarrollo de MSX en Facebook salió el tema del RSC II.

Alguien me preguntaba que porqué no usaba otros Ensambladores/Desensambladores y yo respondí que bueno, que el RSC me gustaba, que me parecía un Ensamblador / Desensamblador bastante cómodo y potente y encima estaba hecho en España y en español. Luego además estuve releyendo varias Entrevistas que se han publicado sobre algunos miembros de la extinta MSX-CLUB:

http://www.msxblog.es/carlos-mesa-redactor-y-director-de-msx-club/

http://www.msxblog.es/entrevista-a-jesus-manuel-montane-msx-club/

Siempre sentí curiosidad por conocer algo sobre el autor del RSC ya que apenas se sabe nada y googleando un poco parece ser que he tenido la suerte de dar con él. En principio iba tan sólo a hacerte algunas preguntas a nivel particular pero ya que estamos y tras leer las Entrevistas hechas a Carlos Mesa y Jesús Manuel Montané pues creí que sería mejor hacerlo en modo de “Entrevista” y si te parece bien pues compartirlo. Así que vamos allá:

Nota: perdona que te “asalte” así pero es que me ha podido la emoción, así que espero que perdones este ímpetu mío y te agradecería respondieras a mis preguntas y cuentes todo lo que quieras, ¡qué bienvenido será…! Probablemente luego colgaré la Entrevista, si te parece bien, en mi Blog:   https://yotambientuveunmsx.wordpress.com/
(si logro ésto sería más feliz que una perdiz…) XD

Nota 2: te he reeenviado el Correo porque no sé si el otro se te traspapeló, o quizás tan sólo sea que no hayas tenido tiempo a contestarme o quizás que te hayas asustado y salido corriendo al leerlo…. (que espero que no sea el caso) XD

 

1. ¿Podrías contarnos algo sobre el pimer MSX que tuviste? (qué modelo/s tuviste, cuándo te lo regalaron, para qué lo usabas,  ….)

En estos momentos no le puedo dedicar tiempo al ordenador, así que voy a intentar comentarte brevemente todo lo que recuerdo (vagamente) de MSX.  Llegué a la informática tarde, a los 25 años, comparado con otras personas de mi generación, pero enseguida me sentí atraído por la programación de ordenadores.

Me compré yo mismo un MSX y, aunque no recuerdo el modelo, me parece que era el que tenía más prestaciones.

2. Yo al menos tan solo te “conocía” por ser el autor del RSC pero ayer me enteré que habías publicado algún Listado Basic en la MSX-CLUB. ¿Podrías comentarnos cuáles han sido tus colaboraciones en la MSX-CLUB, qué Listados y/o Artículos publicaste, etc?.

No estaba muy interesado en los juegos, aunque admito jugué con más de uno,  pero me interesó más la programación.

3. ¿Qué te llevó a hacer el Ensamblador/Desensamblador RSC?, ¿fue idea tuya?, ¿surgió de la necesidad que tuviste para poder programar más cómodamente sobre el MSX teniendo una Herramienta más potente?

Para hacer programas era necesario un ensamblador, así que me puse a programar el RSC.

4. ¿Qué versiones sacaste del RSC? Hasta donde yo sé creo que habría 3 versiones: el RSC, el RSC 2.0 y el RSC II. ¿es correcto?, ¿cuáles son las mejoras que incluían cada versión?

Creo recordar que, efectivamente, hubo tres versiones: RSC, el RSC 2.0 y el RSC II, pero lamento decir que no recuerdo las mejoras de cada una de ellas. Enseguida me compré un PC y el MSX quedó totalmente olvidado.

5. ¿Conservas alguna copia de esas versiones del RSC, Manuales, Código Fuente Original, etc?

Accidentalmente perdí los códigos fuente de todos los RSC, cosa que lamento porque me gustaría tenerlos.

6. ¿Tuviste contacto directo con alguno de los Colaboradores de la Revista (Willy MIragall, Carlos Mesa, Jesús Manuel Montané, Ronie Van Ginkel…)  y/o visitaste la Redacción de la MSX-Club?

Efectivamente, tuve contacto con casi todos los colaboradores de la revista y visité en muchas ocasiones la redacción de la MSX-Club. De hecho, ellos se pusieron en contacto conmigo para publicar el programa en su revista.

7. ¿Cuál era tu opinión sobre la Revista MSX-Club?, ¿y sobre los Redactores?.

Mi opinión era que la revista MSX-Club era la mejor que se podía encontrar y sus redactores eran gente seria.

8. ¿Alguna anécdota que nos puedas contar sobre tu relación con la MSX-CLUB o en general algo que nos quieras contar de aquella época dorada del MSX?

Hombre, anécdota en particular ninguna, simplemente tuve una buena relación con ellos.

9. No sé si después de la muerte comercial del MSX has seguido de alguna forma ligado al Sistema a través de Emuladores, de Foros, Web sobre el Sistema, etc. ¿Sigues en la actualidad el tema del MSX?, ¿usas algún Emulador o MSX Real?,  ¿estás al tanto de los Proyectos que han salido y van a salir? Por si no estás al tanto te dejo alguna información:

Cartucho MFR de Manuel Pazos para poder cargar imágenes DSK y juegos en formato “.dsk” en cualquier MSX, MSX-2, MSX-2+ o Turbo-R: 

https://www.msx.org/es/news/hardware/es/megaflashrom-scc-sd

Rookie Drive (es un proyecto que saldrá dentro de poco (de hecho acaba de salir ya) y que permite además conectar al MSX memorias USB para cargar Programas):

http://rookiedrive.com/es/inicio/

– Un nuevo modelo de MSX que vendría a ser un MSX “supervitaminado” y con muchísimas mejoras y ampliaciones: el MSX VroBit:

https://vrobit.com/en/blog/project-presentation-n2

Como te comentaba antes, poco después de un año me compré un PC y abandoné completamente el MSX. Desde entonces me he dedicado a la programación de los PC y actualmente hay un ensamblador para Windows (llamado Easy Code) que goza de muy buena prensa. Es gratuito y se puede bajar en  http://www.easycode.cat

10. ¿Sigues alguna Web o Foro relacionado con el MSX?

No.

11. ¿Cúales eran tus Juegos o Programas favoritos del MSX?

Lo cierto es que no lo recuerdo, pero es que más bien me dedicaba a programar utilidades.

12. ¿Qué opinabas sobre que la mayoría de los Juegos que nos llegaban fueran meras Conversiones de Spectrum?

Pues que me imagino que había pocos programadores de juegos que se dedicaran a MSX.

13. ¿Qué Programas llegaste a desarrollar para el MSX?, ¿Qué lenguajes usabas?, ¿llegaste a realizar algún Juego?

Desarrollé el Ensamblador RSC y un Programa de Utilidades (del tipo PC Tools) que permitía recuperar archivos borrados, etc.

14. Sobre el RSC, ¿cómo surgió comercializarlo a través de la MSX-Club?, ¿se lo pediste tú a la Revista presentándoles el Programa para que valoraran su comercialización?, ¿fue la Revista quién te lo pidió a ti?, ¿podrías darnos una aproximación sobre el número de copias que crees que se llegaron a vender de las diferentes versiones de tu RSC?

Envié el listado del código fuente de RSC a MSX-Club y Willy Miragall se puso en contacto conmigo. A partir de ese momento empezó mi relación con ellos.

15. ¿Qué supuso el MSX en tu vida?, ¿marcó el desarrollo de tu carrera profesional actual?

Efectivamente, supuso el inicio de mi carrera profesional. Actualmente, y desde hace muchos años, trabajo como programador de  aplicaciones para Windows.

16. Aparte del MSX, ¿fuiste Usuario de algún otro Sistema de 8 Bits o de 16 Bits?

Sí, como te comentaba antes, compré el primer modelo de IBM PC (un clon, para ser exacto) y desde entonces me he ido actualizando en este sistema. Actualmente tengo un ordenador con procesador Intel Core i7 6700 @ 3.40GHz.

17. Entiendo que el hecho de haber programado el RSC se debía a que te gustaba ese Lenguaje. ¿Cuál era la parte o funcionalidad de la que te sentiste más orgulloso al crear el RSC y qué era lo que menos te gustaba?, ¿Usas o usaste algún Ensamblador “cruzado” sobre PC para programar en MSX alguna vez?

En general me sentí y me siento orgulloso de RSC porque fue un programa importante en su momento, y así lo entendieron también en MSC-Club.

No, nunca  usé un Ensamblador “cruzado” sobre PC para programar en MSX.

18. Como Programador, ¿qué opinión te merecía el MSX?, ¿piensas que era realmente superior al resto de 8 Bits?, ¿piensas que el hecho de que hubiera tantos Modelos de MSX distintos con distintas con figuraciones de Memoria y pequeñas diferencias a nivel de Hardware eran una ventaja o un inconveniente?

En su momento creo que MSX fue el mejor ordenador personal que se podía tener. Lo que ocurrió es que enseguida apareció el IMB PC y aunque era muy superior también era muy caro, pero muy pronto aparecieron los “clones” a precios muy asequibles y eso marcó el fin del MSX.

19. ¿Llegaste a tener usar MSX-2, MSX-2+, MSX-Turbo R?

Llegué a tener un MSX-2

20. ¿Piensas que cualquier tiempo pasado fue mejor?, ¿qué ventajas e inconvenientes, o qué es lo que más te gusta y lo que menos te gusta de la Informática de los 8 Bits y de la Informática actual?, ¿A qué te dedicas en la actualidad?

Para mí la informática de 8 y 16 bits está totalmente obsoleta y hace más de una década que no trabajo con ella, incluso los 32 bits están empezando a pasar a la historia con la llegada de los 64 bits. Actualmente formo parte de un equipo de desarrollo de aplicaciones de una importante empresa catalana.

21. ¿Conservas en la actualidad algún vínculo-contacto con algún miembro de la MSX-CLUB?, ¿sabes algo de ellos?

No mantengo ningún contacto con nadie de MSX-Club ni sé nada de ninguno de ellos.

22. ¿Qué has pensado-sentido-…. cuándo has visto mi Correo y esta pseudo-“Entrevista”?, ¿te han venido recuerdos gratos que te ha apetecido “desenterrar” o te han dado ganas de echar a correr y no responder…?

Pues sí que me han venido buenos y gratos recuerdos, siempre los tendré, pero no me ha entusiasmado especialmente tener que responder a tantas preguntas porque no dispongo de mucho tiempo. Aun así, y por cortesía, lo estoy haciendo.

23. ¿Algo que quieras añadir  y que no esté reflejado en las anteriores preguntas?

Nada especial que no se haya dicho ya. El MSX fue un buen sistema que introdujo a mucha gente en el mundo informático.

Pues esto ha sido todo. Agradecerte Ramón que hayas respondido a mi Correo y que nos hayas dedicado esta parte de tu tiempo para responder a estas preguntas y a mi “malsana” curiosidad… 😉 




 

Pues lo dicho, desde aquí agradecer públicamente a Ramón el haberme dedicado parte de su tiempo y haber respondido a mi “batería” de preguntas… XD

Gracias & Saludetes. 😉

Publicado en Sin categoría | 3 comentarios

Listado TOKENS MSX – Cómo Ejecutar BASIC desde ENSAMBLADOR

¿Qué es un TOKEN?

Un TOKEN es un código que sustituye a un Comando Basic.

El MSX BASIC internamente nunca guarda en memoria el comando de forma “literal”, ya que esto ocuparía mucho espacio. Lo que hace después de finalizar la introducción/modificacion de una línea es reconocer todas los comandos usados y se sustituyen por sus respectivos códigos –> TOKEN.

El Ordenador, en su ROM, asigna a cada Comando un número y éste es el que se almacena cuando se utiliza dicho Comando.

Es decir, por ejemplo, para un comando PRINT, nuestro querido MSX  le asigna un valor numérico que se grabará con la instrucción.

Existe un truco muy simple para determinar la relación entre Comandos<–>Token. Introduzcamos en Basic esta línea:

10 REM Hola

El Token para el comando REM está inmediatamente después del número de línea. Sabiendo que la Dirección de inicio del Basic es &h8000 tenemos que nuestra línea se almacena a partir de la dirección &h8005. Si hacemos:

PRINT PEEK(&h8005) nos devuelve el valor 143 en decimal, que equivale a 8F en Hexadecimal. –> Luego sabremos que el Token asociado al Comando REM es el valor hexadecimal 8F.

Sustituyamos ahora ese Token por otro, haciendo esto:

POKE &h80005, &h91

Si ahora ejecutamos LIST veremos que nuestra línea ha cambiado y ahora tendremos:

10 PRINT Hola

Hagamos ahora POKE &h80005, &h84 y hagamos un LIST con lo que obtendremos ahora:

10 DATA Hola

Luego sabemos que el valor hexadecimal 84 es el Token asociando al comando DATA. Fácil, ¿verdad?. 😉

Para facilitarnos la vida y que no tengamos que comprobar uno por uno la relación entre Comandos Basic y Token aquí os dejo este Listado.

Nota: Para simplificar el Listado a nivel “visual” he omitido poner “H” o “&H” delante de cada Token / Dirección, pero debéis tener en cuenta que estamos hablando siempre de valores de Token y de Memoria hexadecimales.

Listado de Instrucciones BASIC con sus respectivos TOKEN y DIRECCIÓN

Comando  Token Dirección     Comando  Token Dirección
ABS      06    39E8          LOC      2C    3A34
AND      F6    3A18          LOCATE   D8    39DC
ASC      15    3A06          LOF      2D    3A36
ATN      0E    39F8          LOG      0A    39F0
ATTR$    E9    39FE          LPOS     1C    3A14
AUTO     A9    3973          LPRINT   9D    394C
BASE     C9    39BE          LSET     B8    399C
BEEP     C0    39AC          MAX      CD    39C6
BIN$     1D    3A16          MERGE    B6    3998
BLOAD    CF    39CA          MID$     03    39E2
BSAVE    D0    39CC          MKD$     30    3A3C
CALL     CA    39C0          MKI$     2E    3A38
CDBL     20    3A1C          MKS$     2F    3A3A
CHR$     16    3A08          MOD      FB    3A22
CINT     1E    3A18          MOTOR    CE    39C8
CIRCLE   BC    39A4          NAME     D3    39D2
CLEAR    92    3950          NEW      94    3954
CLOAD    9B    3962          NEXT     83    3932
CLOSE    B4    3994          NOT      E0    39EC
CLS      9F    396A          OCT$     1A    3A10
CMD      D7    39DA          OFF      EB    3A02
COLOR    BD    39A6          ON       95    3956
CONT     99    395E          OPEN     B0    398C
COPY     D6    39D8          OR       F7    3A1A
COS      0C    39F4          OUT      9C    3964
CSAVE    9A    3960          PAD      25    3A26
CSNG     1F    3A1A          PAINT    BF    39AA
CSRLIN   E8    39FC          PDL      24    3A24
CVD      2A    3A30          PEEK     17    3A0A
CVI      28    3A2C          PLAY     C1    39AE
CVS      29    3A2E          POINT    ED    3A06
DATA     84    3934          POKE     98    395C
DEF      97    395A          POS      11    39FE
DEFDBL   AE    3988          PRESET   C3    39B2
DEFINT   AC    3984          PRINT    91    394E
DEFSNG   AD    3986          PSET     C2    39B0
DEFSTR   AB    3982          PUT      B3    3992
DELETE   A8    397C          READ     87    393A
DIM      86    3938          REM      8F    394A
DRAW     BE    39A8          RENUM    AA    3980
DSKF     26    3A28          RESTORE  8C    3944
DSKI$    EA    3A00          RESUME   A7    397A
DSKO$    D1    39CE          RETURN   8E    3948
ELSE     A1    396E          RIGHT$   02    39E0
END      81    392E          RND      08    39EC
EOF      2B    3A32          RSET     B9    399E
EQU      F9    3A1E          RUN      8A    3940
ERASE    A5    3976          SAVE     BA    39A0
ERL      E1    39EE          SCREEN   C5    39B6
ERR      E2    39F0          SET      D2    39D0
ERROR    A6    3978          SGN      04    39E4
EXP      0B    39F2          SIN      09    39EE
FIELD    B1    398E          SOUND    C4    39B4
FILES    B7    39AA          SPACE$   19    397E
FIX      21    3A1E          SPACE$   19    3A0E
FN       DE    39E8          SPC      DF    39EA
FOR      82    3920          SPRITE   C7    39BA
FPOS     27    3A2A          SQR      07    39EA
FRE      0F    39FA          STEP     DC    39E4
GET      B2    3990          STICK    22    3A20
GOTO     89    393E          STOP     90    394C
GOSUB    8E    3948          STR$     13    3A02
GOTO     89    393E          STRIG    23    3A22
HEX$     1B    3A12          STRING$  E3    39F2
IF       8B    3942          SWAP     A4    3974
IMP      FA    3A20          TAB      DB    39E2
INKEY$   EC    3A04          TAN      0D    39F6
INP      10    39FC          THEN     DA    39E0
INPUT    85    3936          TIME     CB    39C2
INSTR    E5    39F6          TO       D9    39DE
INT      05    39E6          TROFF    A3    3972
IPL      D5    39D6          TRON     A2    3970
KEY      CC    3964          USING    E4    39F4
KILL     D4    39D4          USR      DD    39E6
LEFT$    01    39DE          VAL      14    3A04
LEN      12    3A00          VARPTR   E7    39FA
LET      88    393C          VDP      C8    39BC
LFILES   BB    39A2          VPEEK    18    3A0C
LINE     AF    398A          VPOKE    C6    39B8
LIST     93    3952          WAIT     96    3958
LLIST    9E    3968          WIDTH    A0    396C
LOAD     B5    3996          XOR      F8    3A1C

 

Ejecutar un Comando BASIC desde Ensamblador

Veamos ahora un ejemplo práctico del uso de los TOKEN…

Imaginemos que estás haciendo un Programa Ensamblador y necesitas ejecutar un Comando BASIC. Evidentemente puedes hacer el equivalente a dicho Comando a base de instrucciones Ensamblador pero si no dominas el tema puede que te resulte complejo. Algo tan simple como grabar un Programa en Disco supongo que requeriría muchas o bastantes líneas de Código lo cual implicaría además que tienes que conocer cómo funciona la Unidad de Disco, qué Rutinas de la BIOS utiliza, etc, etc, etc.

La idea Básica para hacer esto sería:

– Primero obtener la Dirección de la Instrucción BASIC que queremos ejecutar (podéis obtenerla de la Tabla que os  he puesto arriba).

– Definir una línea BASIC “virtual, que va a contener los parámetros necesarios que van a acompañar a esa Función.

– Importante acabar nuestra línea BASIC “virtual” con “&H00“.

Vamos a ver un ejemplo “chorra” en el que vamos a ejecutar desde Ensablador la instrucción: BSAVE”PATATA.BIN”, &HC000, &HC119

Es decir, vamos a grabar un Programa en Disco que se llama PATATA.BIN y que tiene como Dirección Inicial &HC000 y como Dirección Final &HC110.

El “complejo” Código sería este:

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 Ensamblador/Desensamblador para MSX RSC II.

Vamos allá con las explicaciones:

– En la línea 10 indicamos a partir de que dirección queremos ubicar el Código del Programa. En nuestro caso: &HC000
– 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 negrita)

BSAVE “PATATA.BIN”, &HC000, &HC119

Pues bien, yo con lo que me liaba, entre otras cosas era en la definición de todos esos parámetros que pongo en negrita. No sabía como poner las comillas usando la instrucción DEFM, ya que no sería posible hacer esto: DEFM “”PATATA.BIN”” (no podemos meter el caracter “comillas”) así que lo tendremos que hacer por partes, es decir:

– En la línea 120 lo que hacemos es definir las “comillas” (&H22)
– En la línea 130 el nombre del Fichero (PATATA.BIN)
– En la línea 140 otra vez las comillas (&H22)
– 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!!!

Las Aplicaciones prácticas de todo ésto son ¡INFINITAS! y seguro que os pueden sacar de algún apuro en vuestro Programa Ensamblador. No sé si es la mejor forma, ni la más pedagógica pero desde luego seguro que es la más sencilla para hacer pruebas rápidas en vuestros Programas y no complicaros la vida si no domináis el Ensamblador. 😉

Nota: Las explicaciones del principio las he tomado del Libro “MSX – Consejos y Trucos“, de Data Becker.

Publicado en Sin categoría | Deja un comentario

MSX BASIC

MSX BASIC 1.0

  • ABS
  • AND
  • AS #
  • ASC
  • ATN
  • AUTO
  • BASE
  • BEEP
  • BIN$
  • BLOAD
  • BSAVE
  • CALL
  • CDBL
  • CHR$
  • CINT
  • CIRCLE
  • CLEAR
  • CLOAD
  • CLOAD?
  • CLOSE #
  • CLS
  • COLOR
  • CONT
  • COS
  • CSAVE
  • CSNG
  • CSRLIN
  • DATA
  • DEF FN
  • DEFDBL
  • DEFINT
  • DEFSNG
  • DEFSTR
  • DEFUSR
  • DELETE
  • DIM
  • DRAW
  • END
  • EOF
  • ERASE
  • ERR
  • ERL
  • ERROR
  • EQV
  • EXP
  • FIX
  • FOR TO STEP
  • FRE
  • GOSUB
  • GOTO
  • HEX$
  • IF THEN ELSE
  • INKEY$
  • IMP
  • INP
  • INPUT
  • INPUT$
  • INSTR
  • INT
  • INTERVAL ON/OFF/STOP
  • KEY
  • KEY LIST
  • KEY ON/OFF
  • KEY ON/OFF/STOP
  • FOR TO STEP NEXT
  • LEFT$
  • LEN
  • LET
  • LINE
  • LINE INPUT
  • LIST
  • LLIST
  • LOAD
  • LOCATE
  • LOG
  • LPOS
    LPRINT
  • MAXFILES
  • MERGE
  • MID$
  • MOD
  • MOTOR
  • NEW
  • NOT
  • OCT$
  • ON ERROR GOTO
  • ON GOSUB
  • ON GOTO
  • ON INTERVAL GOSUB
  • ON KEY GOSUB
  • ON SPRITE GOSUB
  • ON STOP GOSUB
  • ON STRIG GOSUB
  • OPEN
  • OR
  • OUT
  • PAD
  • PAINT
  • PDL
  • PEEK
  • PLAY
  • PLAY()
  • POINT
  • POKE
  • POS
  • PRESET
  • PRINT
  • PSET
  • PUT SPRITE
  • READ
  • REM
  • RENUM
  • RESTORE
  • RESUME
  • RETURN
  • RIGHT$
  • RND
  • RUN
  • SAVE
  • SCREEN
  • SGN
  • SIN
  • SOUND
  • SPACE$
  • SPC
  • SPRITE ON/OFF/STOP
  • SPRITE$
  • SQR
  • STICK
  • STOP
  • STOP ON/OFF/STOP
  • STRIG
  • STRIG ON/OFF/STOP
  • STR$
  • STRING$
  • SWAP
  • TAB
  • TAN
  • TIME
  • TROFF
  • TRON
  • USR
  • VAL
  • VARPTR
  • VDP
  • VPEEK
  • VPOKE
  • WAIT
  • WIDTH
  • XOR

MSX BASIC 2.0[editar]

  • COLOR SPRITE
  • COLOR SPRITE$
  • COLOR=
  • COLOR=RESTORE
  • COLOR=NEW
  • CALL MEMINI
  • CALL MKILL
  • CALL MNAME
  • CALL MFILES
  • SET PAGE
  • SET VIDEO
  • SET ADJUST
  • SET BEEP
  • SET TITLE
  • SET PASSWORD
  • SET PROMPT
  • SET SCREEN
  • SET DATE
  • SET TIME
  • GET DATE
  • GET TIME

MSX BASIC 3.0[editar]

  • SET SCROLL

MSX BASIC 4.0[editar]

  • CALL PAUSE
  • CALL PCMPLAY
  • CALL PCMREC

 

 

Publicado en Sin categoría | Deja un comentario

Programa para Listar los Datos de una Cinta

Programa que Lista TODOS los Ficheros que se encuentran en la Cinta, mostrando el Tipo de Programa y Direcciones de Inicio, Final y Ejecución.
Luego todo lo que encuentra puede grabarse en Basic con Líneas “Rem”.

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?"

Versión “preliminar” y equivalente en Código Máquina:

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

 

 

 

Publicado en Sin categoría | Deja un comentario

El Casete en MSX – Info técnica

Codificación de BIT y BYTE

La información en el Casete es almacenada como ondas cuadradas de 1.200 ó 2.400 baudios.

La codificación usada es FSK (Frequency Shifting Key)

En la siguiente figura podemos ver la relación que existe entre la Velocidad de Grabación, los Bits y los Pulsos almacenados en el Casete:

onda-casete

Cada BYTE es almacenado en Cinta como una secuencia formada por 11 Bits:

0 b0 b1 b2 b3 b4 b5 b6 b7 1 1

Como podemos ver hay un bit de comienzo 0 luego va el Byte propiamente dicho y a continuación dos bit 11 que indican el fin del Byte.

Además son usados 2 Tipos de Cabecera:

  • cabecera corta
  • cabecera larga

La cabecera larga tiene 4 veces la longitud de la corta. Están formadas por una serie de ondas cuadradas (con bit de valor 1)

 Bps     Cabecera   Frecuencia (Hz)   Nº de Pulsos
 1.200   Corta         2.400           4.000 ( 5/3 sec)
 1.200   Larga         2.400          16.000 (20/3 sec)
 2.400   Corta         4.800           8.000
 2.400   Larga         4.800          32.000

 

Formatos de Fichero en Casete:

Los Ficheros en Cinta están formados por 2 Bloques:

-el primer bloque es el Descriptor de Fichero (nos indica el Tipo de Fichero)
-el segundo bloque contiene los Datos del Fichero propiamente dichos.

Existen 3 Tipos de Ficheros:

1.Ficheros BASIC (CSAVE/CLOAD)

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 del Fichero propiamente dichos, formados por:
-Cabecera Corta
-Caracteres del Programa BASIC “Tokenizados
7 bytes  con el valor “00” que indican el final del Fichero.

 

2.Ficheros con Código Máquina (BSAVE/BLOAD)

Descriptor de Fichero, formado por:
-Cabecera Larga.
10 bytes con el valor “D0” (el valor “D0” nos indica que es un Fichero BLOAD)
6 bytes con el nombre del Fichero.

Datos del Fichero propiamente dichos, 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.

 

3.Ficheros LOAD/OPEN  –> (ASCII)

Descriptor de Fichero, formado por:
-Cabecera Larga
10 bytes con el valor “EA” (el valor “EA”  indica que es un Fichero LOAD/OPEN)
6 bytes con el nombre del Fichero.

Datos del Fichero propiamente dichos, 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” (–> final del Fichero)

 

 

Rutinas BIOS para el Casete

TAPION

Address  : #00E1
Function : Reads the header block after turning the casete motor ON
Output   : C-flag set if failed
Registers: All

TAPIN

Address  : #00E4
Function : Read data from the tape
Output   : A  - read value
           C-flag set if failed
Registers: All

TAPIOF

Address  : #00E7
Function : Stops reading from the tape

TAPOON

Address  : #00EA
Function : Turns on the cassette motor and writes the header
Input    : A  - #00 short header
            not #00 long header
Output   : C-flag set if failed
Registers: All

TAPOUT

Address  : #00ED
Function : Writes data on the tape
Input    : A  - data to write
Output   : C-flag set if failed
Registers: All

TAPOOF

Address  : #00F0
Function : Stops writing on the tape

STMOTR

Address  : #00F3
Function : Sets the cassette motor action
Input    : A  - #00 stop motor
                #01 start motor
                #FF reverse the current action
Registers: AF
Publicado en Sin categoría | Deja un comentario

Emulando el MSX

Pues bien, en esta ocasión vamos a hacer un pequeño repaso a los principales EMULADORES que hay en MSX.

Antes de meternos con el tema de los Emuladores en sí vamos a ver los diferentes Tipos que existen de MSX, los diferentes tipos de Programas que existen para el MSX y cómo nos vamos a encontrar estos Ficheros aplicados al mundo de la EMULACIÓN.

Tipos de Sistemas MSX existentes:

 Antes de nada decir que el MSX fue un Sistema “abierto”. Fue desarrollado y fabricado por diferentes Empresas: Sony, Philips, Sanyo, Mitsubishi, Panasonic y un largooooo etc.  Respetando unos estándares mínimos cada Fabricante sacó su propio Modelo con algunas características peculiares y diferenciadoras. Esta Compatibilidad permitía que podíamos usar cualquier Periférico MSX en cualquier Ordenador MSX independientemente de su Marca-Fabricante. Vamos, que el MSX fue concebido en su momento como el “PC de los 8 Bits”, un Sistema abierto, flexible y COMPATIBLE.

MSX-1: Primera generación del Sistema MSX, Estos modelos al ser los primeros en salir al Mercado no disponían de Disquetera (aunque se les podía añadir de forma externa mediante un Interfaz en forma de Cartucho). Su uso era exclusivamente a través de cintas de cassette de toda la vida. Venían con 64 Kb de Ram y dos conectores de Cartuchos.

MSX-2: Supuso un avance tecnológico en cuanto a características, prestaciones y mejoras respecto a la primera generación. Solían tener un mínimo de 128 Kb de Ram y la gran mayoría disponían de una ,y algunos modelos de dos, disqueteras. Estos Ordenadores son los ideales de cara a empezar en el mundillo MSX. Si estás interesado en adquirir un MSX te aconsejo que te hagas con un MSX-2 y con Disquetera. Especialmente recomendable y querido entre los Usuarios de MSX en general es el Philips 8245. Es un Ordenador bastante robusto y con Teclado y Disquetera integrada “todo en uno”. No requieren de ningún transformador externo o similar. También hay modelos en los que la “CPU” y el Teclado van separados, por ejemplo El Philips 8250, 8280, Sony F700 y similares.

MSX-2+: Surgieron con posterioridad a las anteriores generaciones. Supusieron un avance en cuanto a mejoras gráficas, de sonido, etc.

MSX-Turbo R: Fue la última generación en salir al mercado. El único fabricante que sacó estos Modelos fue Panasonic y hay principalmente 2 Modelos. Fue la última generación de MSX que se ha conocido comercialmente hablando.

Nota: por desgracia ni los MSX-2+  ni los Turbo-R llegaron oficialmente a Europa y solo podían conseguirse mediante importación directa. En España lo poco que llegó pudo conseguirse gracias a “LASP”, que era una Empresa de la Época que se anunciaba en la Revista MSX-Club.

 Esta descripción de la Familia MSX es muy a “grosso modo”. Si queréis info un poco más detallada la podéis encontrar aquí:

Info sobre MSX en general:
  http://es.wikipedia.org/wiki/Msx

-Modelos de MSX-1:
  http://www.museo8bits.com/msx1.htm

-Modelos de MSX-2:
  http://www.museo8bits.com/msx2.htm

-Modelos de MSX-2+:
  http://www.old-computers.com/museum/computer.asp?c=291

-Modelos de Turbo-R:
  http://www.old-computers.com/museum/computer.asp?st=1&c=290

Tipos De Ficheros en un MSX Real y diferentes instrucciones de Carga: 

Existen básiciamente 3 tipos de Instrucciones de Carga en el MSX:

CLOAD: Carga un Juego desde CINTA, un programa Basic, que ha sido grabado con la sentencia “CSAVE

Ejemplo de Carga: CLOAD”JUEGO1” (cargaríamos el programa desde cinta “JUEGO1” que ha sido grabado con CSAVE). Después de la Carga pulsaríamos “F5” o escribimos “Run” y pulsamos Intro para ejecutarlo.

LOAD: Carga un Programa Basic tanto desde Cinta como desde Disco, que fue grabado con la sentencia “SAVE“.

Ejemplos de Carga 1:  LOAD”CAS:” (cargamos desde Cinta el primer programa Basic que se encuentre y que ha sido grabado con la sentencia “SAVE”). Para ejecutar el Programa tenemos que pulsar “F5” o escribir “Run” desde el Basic. También podemos cargar y ejecutar el Programa a la vez si usamos la instrucción anterior pero poniendo una “erre” al final, de esta forma: LOAD”CAS:”, R

Ejemplo de Carga 2: LOAD”JUEGO1”,R (carga el Programa Basic llamado “Juego1” que fue grabado con “SAVE” desde DISCO y lo ejecuta)

BLOAD:  Se usa para cargar Programas en Código Máquina que han sido grabados con la sentencia “BSAVE

Ejemplo de Carga 1: BLOAD”CAS:”,R (carga y ejecuta el primer programa de Código Máquina y que se encuentra en la Cinta ) (Si no ponemos la “erre” final lo carga pero no se ejecuta)

Ejemplo de Carga 2: BLOAD”JUEGO1”,R (carga el Programa en Código Máquina llamado “Juego1” desde DISCO y lo ejecuta) (Si no ponemos la “erre” final lo carga pero no se ejecuta)

 Esas son las cargas “estándar”. Luego, la mayoría de los Juegos Comerciales después de un Bloque estándar de tipo “BLOAD” usan un Cargador específico, comúnmente llamado “Turbo”,  que a menudo suele ir acompañado de unas rayas de Colores en la Pantalla, similar a lo que se produce en Spectrum (ejemplos típicos de Juegos con carga “Turbo” eran los de “Gremlim Graphics” y “Topo Soft”). Así pues todos los Juegos que tengamos en Cinta que usen instrucciones-bloques de Carga estándar pueden copiarse fácilmente a disco. Sin embargo los Juegos-Programas que usen un Cargador Turbo NO pueden pasarse DIRECTAMENTE a Disco: requieren de un Trabajo de Programación para desensamblarlos, ver su Código, modificar el programa Cargador del Inicio para cargar un Bloque y tomar el control, etc.

Diferentes Formatos de Software existente para MSX aplicado al mundo de la EMULACIÓN:

 Bien, como decíamos en líneas generales un MSX puede ejecutar Software en formato Cinta, en Formato Cartucho y en Formato Disquete. Hoy en día en Internet todo este Software os lo vais a encontrar de la siguiente forma:

Ficheros “.CAS”: son ficheros que contienen una imagen de una Cinta de MSX real y que están listos para ser usados en un Emulador e incluso mediante alguna Herramienta en un MSX REAL.

Ficheros “.ROM”: son ficheros que contienen una imagen de un Cartucho de MSX real y que están listos para ser usados en un Emulador e incluso mediante alguna Herramienta en un MSX REAL.

Ficheros “.DSK”: son ficheros que contienen una imagen de un Disco de MSX real y que están listos para ser usados en un Emulador e incluso mediante alguna Herramienta en un MSX REAL.

Nota: Esta es una versión muy simplificada y eminentemente práctica de los Formatos existentes más comunes. Para Info más detallada véase este enlace:
  http://www.faq.msxnet.org/suffix.html

Ahora sí, vamos a ver los Principales Emuladores que existen en el MSX….

Consejos Generales a tener en cuenta (tanto en un MSX-Real como en un Emulador)

-Si usas un MSX-2 y quieres cargar Juegos de Cinta y tienes algún problema antes de ejecutar dichos Juegos tendrías que ejecutar ese Poke tal cual te lo pongo desde el BASIC:

POKE -1,(15-PEEK(-1)/16)*17  

-Si intentas cargar un Juego de Cinta en un MSX-2 a veces puedes tener problemas para cargarlos debido a que la Unidad de Disco y el MSX-DISK Basic ocupan varios KB de memoria RAM. Si te pasa eso, prueba a mantener pulsado durante el arranque del MSX (desde que ves el Logo hasta que aparece el Basic) una de estas Teclas:

CTRL –> Desactiva el espacio usado por la segunda Disquetera.

SHIFT –> Desactiva el MSX-DISk Basic.

Emuladores MSX

1.OpenMSX: Se trata de un Emulador que funciona bastante bien y es muy fácil de usar gracias al Front-End que incluye.

Enlace para su descarga:
http://openmsx.org/

En su Web Oficial debemos elegir la versión adecuada según nuestro Sistema Operativo:

openmsx-1

Este emulador para poder funcionar requiere que os descarguéis aparte la ROM específica del Modelo de MSX que queráis emular.

Desde aquí podéis descargar TODAS LAS ROM DE TODOS LOS MSX que emula el OpenMSX:

http://www.msxarchive.nl/pub/msx/emulator/openMSX/systemroms.zip

Una vez descargado el Open MSX lo instalamos. A continuación descomprimimos el Fichero con todas las ROM del MSX y lo copiamos en la siguiente Ruta —> C:\Program Files\openMSX\share\systemroms

Ahora ya tenemos nuestro OpenMSX preparado para emular cualquier de los Modelos de MSX. Para simplificar las cosas yo os recomiendo como modelo de MSX-1 más estándar el SONY-HB20P y para emular un MSX-2 por ejemplo podéis usar el Philips NMS-8245.

Nota: si usas el SONY-HB20P como Sistema a emular te informo que este Modelo NO TIENE DISQUETERA, por lo que no podrás cargar ningún Fichero “.DSK”

Pues bien, como ya tenemos todo preparado ahora vamos a ejecutar el Emulador y lo haremos a través de su Front-End llamado “Catapult“. Si ejecutamos este Front-End vemos que nos simplifica enormemente la Configuración y Ejecución del Emulador. Desde aquí podemos elegir el tipo de MSX que queremos ejecutar, si queremos ejecutar un Juego en Cinta–> “.CAS“, en Disco–> “.DSK” o en formato Cartucho–> “.ROM

openmsx-2

a) En nuestro caso vamos a ejecutar un Juego en CINTA: el Juego “STARDUST”, de TOPO SOFT. (Rercordad que los Ficheros con Juegos en Cinta tienen la Extensión “.CAS“) Lo seleccionamos a través del Catapult, elegimos el Modelo de MSX que queremos (en nuestro caso el “Philips 8245”) y pulsamos en “Start”. Tras ello se ejecuta el Ordenador y en este caso el Juego se carga automáticamente. Tras esperar un poco ya tenemos nuestro Juego listo para jugar:

openmsx-3

Nota: En este caso el Fichero “.CAS” se ejecuta automáticamente pero normalmente con un Juego de Cinta real en un MSX real los Juegos en cinta se cargarían usando una de estas 3 instrucciones:

  1. Load”CAS:”,R
  2. BLOAD¨CAS:”,R
  3. CLOAD”juego

En el caso de las dos primeras instrucciones cuando ponemos cas: estamos diciendo que cargue de casete ejecutando el primer juego que encuentre.

En el caso de CLOAD tendremos que especificar el nombre exacto del Juego que queremos cargar.

b) Si queremos cargar un Juego en Formato DISCO haríamos lo mismo que en el caso anterior pero en el CataPult seleccionariamos en el desplegable correspondiente el Disco que queremos Cargar (recordad que es un Fichero “.DSK“)

openmsx-4

Una vez elegido pulsamos en “Start” para que se ejecute el Emulador. En este ejemplo voy a cargar un Disquete que contiene una Recopilación de Juegos y que se llama “MSX Manía” (en concreto el número 1) Para que cargue correctamente estad atentos y nada más ejecutar el Open MSX cuando veáis el Logo de MSX mantened pulsada la tecla CTRL izquierda hasta que cargue el BASIC. Una vez cargado veréis que el Disquete se ejecuta automáticamente ya que tiene un Fichero autoejecutable. Normalmente para cargar un Juego en Disco tendréis que:

  • Primero ejecutar el comando FILES (que nos mostrará los Ficheros que contiene el Disco)
  • Si se trata de un Fichero en Basic (con la extensión “.BAS”) tendréis que ejecutar el Comando LOAD y poner entrecomillas el nombre del Juego a cargar seguido de una coma y una R, tal que así: LOAD”JUEGO.BAS”,R
  • Si se trata de un Fichero con una Extensión distinta (normalmente serán “.BIN”) tendrías que ejecutar esta otra instrucción con el nombre del Juego correspondiente: BLOAD”JUEGO.BIN”,R

En nuestro caso como os decía el Disquete se ha ejecutado automáticamente así que tan sólo tendrías que elegir el número de Juego que quieres y ya está. 😉

Yo he cargado el primer Juego y este es el resultado:

openmsx-5

c) Por último vamos a cargar un Juego en CARTUCHO, que os recuerdo tiene la Extensión “.ROM” Los Juegos en Cartucho, para los que no lo sepan, se ejecutan siempre automáticamente al arrancar el Emulador. Así pues al igual que en los otros casos ejecutamos el CataPult y seleccionamos el Juego a cargar (en mi ejemplo voy a cargar el Juego “Pippols” de Konami)

Y tras pulsar “Start” en el Catapult se ejecuta el OpenMSX y este es el resultado:

openmsx-7

Como véis es un Emulador muy muy fácil de usar.

 

2.BLUE  MSX: Otro Emulador bastante bueno y también muy fácil de usar. En este caso no hace falta usar un Front-Ent externo ya que se ejecuta todo desde el mismo Emulador.

Dentro de su Web pulsamos sobre el Icono de “Download” (arriba a la derecha, el tercer Icono empezando por la izquierda tal que así):

blue-msx-1

En la Página de Descargas elegimos la versión que nos interese, la descargamos y la ejecutamos para que se instale.

Una vez instalador ejecutamos el Emulador y en él en la parte superior nos aparecerán todas las Opciones dispuestas como en cualquier Programa.

a) Para cargar un Juego en CINTA vamos a la Opción del Menú “Archivo”–> “Cassette” –> “Insertar” con lo cual nos mostrará el típico cuadro de diálogo para seleccionar el fichero que queramos cargar. En mi ejemplo voy a cargar otra vez el Juego “STARDUST” de Topo Soft.

Nota: sería conveniente que activéis siempre la opción “Rebobinar tras insertar” (así nos aseguramos que la Cinta carga desde el principio)

blue-msx-2

Una vez cargado pulsáis F9 y el Emulador se ejecutará, aunque vemos que en este caso el Juego no se ha ejecutado automáticamente:

blue-msx-3

En este caso desde la Pantalla del Basic escribimos:

LOAD”CAS:”,R 

Con lo cual nuestro Juego en cinta se cargará automáticamente y se ejecutará. 😉

blue-msx-4

b) Para cargar un Juego en DISCO vamos a la Opción del Menú “Archivo”–> “Unidad de Disco A” –> “Insertar” con lo cual nos mostrará el típico cuadro de diálogo para seleccionar el fichero que queramos cargar y pulsamos F9 para ejecutar el Emulador. Vemos que en mi ejemplo el Emulador no ha ejecutado el Disquete automáticamente (porque el Disquete no tenía ningún Fichero de “Autoarranque”) así que toca investigar qué Ficheros tenemos en el Disco para lo cual ejecutamos el Comando:

FILES   y pulsamos INTRO, mostrándonos ahora el Listado de Ficheros del Disquete.

blue-msx-5

Ahora para cargar el Fichero que queremos, en este caso el Fichero WAR.BAS, ejecutaremos el siguiente Comando:

LOAD¨WAR.BAS“,R  y pulsamos INTRO.

El Juego se ejecutará automáticamente y este es el resultado:

blue-msx-6

c) Para cargar un Juego en CARTUCHO vamos a la Opción del Menú “Archivo”–> “Cartucho Slot 1” –> “Insertar” con lo cual nos mostrará el típico cuadro de diálogo para seleccionar el fichero que queramos cargar. En mi ejemplo voy a cargar el Juego “PIPOLS” de Konami.

Conviene que activemos la opción de “Reinicio tras Insertar/Sacar”, de esta forma cada vez que insertemos un Cartucho el Emulador se reinicia automáticamente y nos carga el Cartucho seleccionado.

Si no tienes activada la opción de “Reinicio tras insertar/sacar” tendrías que pulsar F9 para ejecutar el Emulador.

blue-msx-7

Y aquí tenemos nuestro Juego ejecutado:

blue-msx-8

Pues bien esos 2, el OpenMSX y el BlueMSX son los 2 Emuladores más famosos/usados. También existe alguno más que os voy a comentar a continuación:

 

3.RuMSX: Es un Emulador que llevaba años sin actualizarse aunque su autor sorprendentemente lo actualizó el año pasado. Esta es su Web para Descargar dicho Emulador:

http://www.lexlechz.at/en/software.html

Si os fijáis aparte del Emulador el Autor dispone de otras Herramientas para descargarnos. Especialmente útil es su Herramienta “Disk Manager” que nos permite manipular cualquier Imagen de Disco (Fichero con extensión “.DSK”) pudiendo ver su contenido, añadir archivos, borrar archivos, extraer archivos, crear una imagen “.dsk” de un Disquete Físico, volcar una imagen “.dsk” a un Disquete Físico, etc, etc, etc.

Es también muy fácil e intuitivo de usar.

RU_MSX-EMU

 

4.FMSX: Otro Emulador de MSX que si mi memoria no me f@lla fue sino el primero sí de los primeros que hubo para el MSX. Su autor, Marat Fayzullin, fue como digo pionero en esto de la Emulación y podemos considerarlo el padre de este mundillo puesto que la gran mayoría de Emuladores posteriores se inspiraron-basaron y/o bebieron de las fuentes del FMSX. Aquí os dejo su Página Web:

http://fms.komkon.org/fMSX/#Downloads

Por cierto, me acabo de llevar una gran sorpresa puesto que éste era otro de los Emus que llevaba años sin actualizarse y ahora veo que hace un par de meses que ha sacado ¡una nueva versión!

EMU-FMSX_5_0

 

5.MAME: Pues sí, aunque no te lo creas el MAME también emula el MSX. Antiguamente existía un Emulador que se llamaba “MESS” y que emulaba el MSX. Desde hace tiempo el MESS ha pasado a integrase dentro del MAME. A decir verdad no tengo mucha Experiencia con el MAME en lo que a MSX se refiere pero al menos debemos saber que es una opción más de cara a hacer pruebas.

Es de destacar que (hasta donde yo sé y al menos hasta el día de hoy) es el único Emulador junto con el Open MSX que soporta la Carga de Juegos en Cinta mediante Ficheros “.WAV”. Lo “feo” de este Emulador es que funciona bajo línea de Comandos. 😦

Os dejo un Tutorial “Express”  para la Emulación del MSX en el MAME:

– Descargamos el Emulador MAME en la versión que vayamos a usar desde aquí:

http://mamedev.org/release.php

MAME-DESCARGA

En mi caso he descargado la versión de 64 bits para Windows.

– Descargamos la Rom del MSX que vamos a usar. En este caso voy a usar dos MSX diferentes: el SONY HB-20P  y el PHILIPS 8245. Podéis descargarlas de aquí:

http://www.planetemu.net/rom/mame-roms/hb20p-1   (y pulsamos en “Telecharger”)

MAME-DESCARGA-SONYHB20P

http://www.planetemu.net/rom/mame-roms/nms8245-1   (y pulsamos en “Telecharger”)

MAME-8245

NB: Para que no os volváis locos porque nos os funciona el MAME recordad que tenéis que copiar esos Ficheros que contienen la ROM del Modelo de MSX en cuestión dentro de la Carpeta:  …..\MAME\roms

  • Si queremos cargar un Juego en CINTA abrimos una consola de MS-DOS (es decir, ejecutamos un CMD) y escribimos lo siguiente:

mame64 hb20p –cass C:\Mis_Juegos_MSX\file.wav

El último parámetro es el Juego que queremos cargar (en este caso el Fichero “file.wav”) y la Ruta en la que está dicho Fichero (en este caso “C:\Mis_Juegos_MSX\file.wav”)

Luego una vez en el MAME ya tocaría ejecutar el Comando que corresponda en función del Tipo de Juego:

        LOAD”CAS:”,R     /    CLOAD”nombre”    /     BLOAD”CAS:”,R

  • Si quisiéramos cargar un Juego en Disco desde MAME haríamos:

mame64 nms8245 –flop C:\Mis_Juegos_MSX\file.dsk

Si queremos ver los Ficheros que tiene el Disco hacemos desde el Basic: FILES y se nos muestra en pantalla el contenido del Disco. Luego ya solo nos quedaría cargar el contenido del Programa que queramos con LOAD”nombre”,R o BLOAD”nombre”,R según el tipo de Fichero.

  • Si quisiéramos cargar un Juego en Cartucho desde MAME haríamos:

mame64 nms8245 –cart1 C:\Mis_Juegos_MSX\file.rom

 

Nota: para obtener un listado de los periféricos que soporta el Ordenador que estamos emulando podemos ejecutar el Emulador así:

mame64 nms8245 –listmedia

 

De todas formas si no queremos complicarnos y hacernos la vida mucho más fácil podemos ejecutar MAME lanzando el DEBUGGER así:

mame64 -window –debug

Con lo cual nos aparecerá esta Pantalla:

MAME-DEBUG

Si nos fijamos un poquito veremos que desde el Debugger en la Opción “IMAGES” nos aparecer un Cuadro de Diálogo para elegir cómodamente qué tipo de Juego/Programa queremos cargar y desde dónde:

MAME-DEBUG-IMAGES

Una vez elegido el Juego que queremos cargar tenemos que ir a la Opción “DEBUG” y seleccionar “Run F5” para ejecutar el Juego en el MAME:

MAME-DEBUG-RUN

Y con eso ya tenéis ejecutado vuestro Juego favorito (en este caso he ejecutado el PIPPOLS de Konami) 😉

MAME-PIPPOLS

Nota: Lo bueno de ejecutar MAME activando el Debugger es que es infinitamente más cómodo selecconar el Juego a cargar y que además te muestra todos los FORMATOS QUE SOPORTA el Modelo de Ordenador que estás emulando. Si os fijáis en las anteriores Capturas la opción para cargar un DISCO no aparece (ya que se trata del Sony-HB20P que es un MSX-1 que no tiene Disquetera. Sin embargo os pongo aquí la Captura del Debugger cuando emulamos el Philips 8245 que es un MSX-2 y sí que tiene Disquetera:

 MAME-DEBUGGER-8245

Como veis aunque en principio el MAME puede parecer un Emulador “tosco-difícil” de usar es muy muy potente y no tiene nada que envidiar, salvando las distancias, a los Emus más conocidos. Además el MAME es el único Emulador (junto con el OpenMSX) que soporta Ficheros “.WAV” y si me apuráis me atrevo a decir que los emula mejor que el OpenMSX.

Al final me he decidido a hacer este Tutorial del MAME ya que resulta difícil encontrar info para su uso con la Emulación del MSX y además de ser difícil de encontrar a menudo la Info está demasiado dispersa (yo al menos no he encontrado ninguna Web en la que expliquen todo esto dentro de la misma Web) (de hecho en general he encontrado muy poca info de la Emulación del MSX en el MAME)

 

CONSEJO IMPORTANTE:

Antes de finalizar me vais a permitir un último comentario basado en mi Experiencia personal como Usuario de MSX real y como Usuario de Emuladores. Todos, todos, todos, todos los diferentes Modelos de MSX son totalmente COMPATIBLES (digan lo que digan y os cuenten lo que os cuenten). Lo que ocurre que para garantizar esa compatibilidad había que respetar unas normas mínimas a la hora de Programa y por desgracia la gran mayoría de las Compañías de la Época no las seguían a la hora de sacar la versión de sus Juegos para el MSX. En la mayoría de los casos eran cutre-conversiones a partir de la de Spectrum hechas deprisa y corriendo y con los cambios justos para que funcionara en MSX. Esta es la teoría pero por desgracia algunos Juegos NO cargaban correctamente en todos los Modelos de MSX…. 😦

Así que si queréis un consejo práctico tanto a la hora de usar un MSX real como a la hora de Emularlo os recomiendo que utilicéis el SONY – HB20P (que además da la causalidad que es el Ordenador que yo tuve en la época). En este Ordenador cargaban todos todos TODOS LOS PROGRAMAS, así que podemos considerarlo el más compatible (aunque como digo compatibles son TODOS LOS MSX) y que funciona con TODAS las cutre-conversiones de la Época.

 

Pues nada, dicho queda. ¡A disfrutarlo! (y cualquier comentario que me queráis hacer o cualquier cosa que queráis añadir a lo expuesto bienvenido será)

 

Gracias a todos & Saludetes. 😉

Publicado en Sin categoría | Deja un comentario