Karoshi MSX Community
06 de Julio de 2021, 12:15:34 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: El MSX-DOS  (Leído 6809 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« : 02 de Noviembre de 2007, 10:15:54 am »

Ahora que ya disfruto de no uno, sino dos F-700, me meto de pleno en el Ensamblador.

Teóricamente, puedo meter un programa entre &H8000 y &HF... y poco, ya que esta zona final, almacena variables y cosas del estilo, por lo que mejor no tocarla. En cualquier caso, suficiente para empezar. Esto para programas Ensamblador puros y duros... ¿pero y en MSX-DOS? Según tengo entendido, estos programas deben ubicarse a partir de la dirección &H0100 (creo). ¿Voy bien con esto? ¿O quizás necesito saber algo más? ¿El hecho de programar en MSX-DOS afecta en algo a las rutinas BIOS, quiero decir, si deben observarse algunas normas especiales para el MSX-DOS? Cualquier información sobre este tema será muy bien recibida.

Por si surge la pregunta, uso en principio MSX-DOS 1.3 de Microsoft, y espero seguir hacia el MSX-DOS 2, para ir cogiendo practica.

Bueno, ahí queda la pregunta. Un cordial saludo a todos, y muchas gracias por picarme con el Ensamblador, jejeje Smiley

P.D.: Uso el Compass ver 1, por si acaso eso representa limitaciones... Abstenerse por ahora los comentaristas del ASM. Algún día me meteré con él Wink jejeje... si es que soy malo por definición Tongue
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #1 : 02 de Noviembre de 2007, 10:22:47 am »

Vaya hombre, yo de ensamblador con el MSX-DOS por ahí na, de na... ni pajolera, tendría que ponerme... Alguien?  Smiley

Mucha suerte con el ensamblador!!!  Wink Wink
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
Sd-Snatcher
Karoshi Lover
***
Mensajes: 141


popolon@hotmail.com
Email
« Respuesta #2 : 02 de Noviembre de 2007, 10:34:36 am »

Depende si vas a hacer uso del msx-dos en si mismo (leer de disco, escribir en pantalla) o solo lo usas para lanzar tu programa. En el segundo caso puedes hacer lo que quieras, un ejemplo seria el driver de ansi que me preparo T00b, que precisamente se cargaba de la 8000 en adelante, ya no me acuerdo donde exactamente, la cosa es que tenia que huir del propio codigo Pascal mio, y del INL (driver de internet) y no quedaba mucho sitio en memoria. Otro seria por ejemplo symbos, que usa toda la memoria y sobreescribe todo al no usar la bios para nada.
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #3 : 02 de Noviembre de 2007, 10:37:56 am »

Efectivamente, tienes que ubicar el código a partir de 0100h.

En cuanto a las llamadas a la BIOS, no se pueden hacer directamente, porque ten en cuenta que en MSX-DOS, la memoria principal está mapeada a la RAM, es decir, tienes 64 KB de RAM disponibles, pero ninguna página apunta a la ROM. Afortunadamente, fueron previsores y hay un camino para llamar a la BIOS bastante cómodo:

Lo que sería normalmente

CALL ENASCR

En MSX-DOS deberías escribirlo más o menos así:

LD IY,[EXPTBL-1]
LD IX,ENASCR
call CALSLT

Es decir, en lugar de hacer CALL XXXX directamente, debes cargar la dirección de la rutina en IX, mantener siempre el valor indicado en IY (que suele ser 0 en todos los MSX) y hacer un CALL CALSLT, que permite hacer llamadas a rutinas alojadas en otros slots no visibles.

Por si acaso, te lo explican con más cariño en The MSX Assembly Page (M.A.P.).

Ahora viene la publicidad: asMSX lo hace solito. Con las directivas MSXDOS y alguna macro adicional te hace el trabajo directamente...
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #4 : 02 de Noviembre de 2007, 10:38:05 am »

El mapa de memoría del MSX-DOS es el siguiente (extraido directamente del MSX2 Technical handbook):

Código:
0000H -----------------------------------
| system scratch area      |
0100H ---------------------------------            4000H  -------------------------
|                         |  ^            | disk driver      |
|                         |  |             | DOS kernel     |
|                         |  |             | DISK BASIC    |
|                         |  |             | interpreter       |
|                         | TPA      7FFFH  --------------------------
|                         |  |
|                         |  |             disk interface ROM
----------------------------------------  |
|     COMMAND.COM     |  V
(0006H) -------------------------------
|     MSXDOS.SYS          |
-------------------------------------
|      work area                 |
FFFFH --------------------------------


The area 00H to FFH of RAM is called the system scratch area, which is used
by MSX-DOS for exchanging data with other programs. This area is important
when using system calls, which are described later. The area which begins at
0100H and ends where the contents of 0006H of RAM indicates is calles the TPA
(Transient Program Area). This area is accessible by the user. MSXDOS.SYS
always resides at a higher address than TPA (when destroyed, the result is
unpredictable), and COMMAND.COM is placed in TPA.

Como podrás ver, los programas deberán ensamblarse a partir de la dirección $0100 y se podrán extender hasta el limite marcado por la dirección contenida en $0006. ¡Ojo con lo anterior!, si lo que estás haciendo es un comando de MSX-DOS tendrás que respetar el COMMAND.COM cargado en la TPA, por lo que habra que tratar de no superar ($0006)-tamaño del COMMAND.COM correspondiente.

La programación no necesita nada especial, lo único que has de tener en cuenta es que la BIOS no está disponible, todo el acceso a la misma deberás hacerlo a través de llamadas interslot (no es que no esté, es que cambia el slot). Para empollar un poco este tema, mira en esta página del MAP. Esto podrá parecer un inconveniente; pero como contrapartida hay que pensar que en MSX-DOS tenemos los 64K a nuestra disposición (bueno, casi).

Entre el MSX-DOS1 y el MSX-DOS2 las principales diferencias que hay giran en torno al acceso a discos, mucho menos engorrosas y sencillas en MSX-DOS2. Un día de estos finalizaré esa parte de mi tutorial de desarrollo compatible para MSX...Tongue

Edito: Aquí el que no corre vuela Cheesy, por lo que veo Robsy ya te ha indicado ese apartado en el MAP (magnífica página que deberiamos leernos enterita todos, vaya que sí...)
« Última modificación: 02 de Noviembre de 2007, 10:41:26 am por jltursan » En línea

Doom dee doom dee doom
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #5 : 02 de Noviembre de 2007, 10:40:12 am »

JL: perdón por el adelantamiento en rasante que te he hecho... En cualquier caso, Shinzon, dale cañita al asm!
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #6 : 02 de Noviembre de 2007, 10:44:02 am »

Citar
JL: perdón por el adelantamiento en rasante que te he hecho... En cualquier caso, Shinzon, dale cañita al asm!

 Cheesy porque le echo goma al peluquín, que si no...

Y eso, eso, a darle cañita al ASM Smiley
En línea

Doom dee doom dee doom
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« Respuesta #7 : 02 de Noviembre de 2007, 11:02:14 am »

Bueno, a pesar de mis años, no he perdido ciertos conocimientos. Bien, he entendido el tema perfectamente. Y ahora entiendo porque pasaba lo que pasaba... Me explico.

Por aquellos años en los que yo era joven -no os confundais, lo sigo siendo, aunque menos- probé a hacer una sencilla rutina que llamase a la BIOS para borrar la pantalla. Vamos, un CLS como el del BASIC pero para MSX-DOS. Hacía algo así:

CLS: EQU &HC3 ; Creo que esta es la rutina, pero ahora no me acuerdo
ORG &H0100
CALL CLS
RET

Evidentemente, al no haber BIOS visible, el cuelgue es inmediato. Por fin entiendo lo que pasaba, y que no volverá a pasar. Gracias por millares.

Por último, conste que no es que no me guste el asMSX. Es que primero me quiero hacer con el sistema. Cuando ya tenga dominado este tema, el asMSX será mío. Pero no quiero dar por sabido nada, porque entonces me colaré.  Grin

Vaya que si le voy a dar caña. Espero que para la próxima DEV pueda hacer alguna cosa.

Saludos a raudales. Wink
En línea
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« Respuesta #8 : 05 de Noviembre de 2007, 02:13:51 pm »

Consegui el otro dia hacer este programa en MSX-DOS y por fin funciona. Si es que el que no sabe, es como el que no ve...

Siguiendo con el MSX-DOS, hay una cuestión que me ronda el coco. Vi en una revista, dos POKES que tenían una función bastante majetona, y que me hacen falta ahora. Uno de ellos acelera el acceso a la unidad de discos, porque en el caso del F-700 es bastante lentorra. El otro POKE, permitía efectuar un CALL SYSTEM sin haber cargado previamente el MSX-DOS.

Si alguien tiene esta info, bienvenida es. Thanks.
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #9 : 05 de Noviembre de 2007, 03:09:19 pm »

Ni idea, aunque el segundo poke me quiere sonar. Respecto a la lentitud del F700 me temo que la única solución razonable es la de sustituir la BIOS de disco por una que acelera los accesos, que es lo habitual en los equipos que han pasado por manos de holandeses.
Echo de menos un hilo en snippets que contenga pokes Smiley, la verdad es que hay muchos, muy útiles y que la gente no conoce
En línea

Doom dee doom dee doom
Sd-Snatcher
Karoshi Lover
***
Mensajes: 141


popolon@hotmail.com
Email
« Respuesta #10 : 05 de Noviembre de 2007, 09:19:16 pm »

el segundo es &f346,1
En línea
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« Respuesta #11 : 06 de Noviembre de 2007, 12:22:54 pm »

Gracias, SD-Snatcher. Creo recordar que ese es el poke del MSX-DOS. Lo probaré dentro de unos minutos.

Lo de cambiar la BIOS de Disco del F-700, es algo complicadillo, la verdad. Pero recuerdo que alguien me lo dió (ó lo leír en una revista), en la que se comentaba el citado POKE de aceleración de la disquetera. Según recuerdo, aceleraba bastante el acceso al disco, pero bueno, se agredece la info.

Y tienes toda la razón, JL-Tursan, sobre algún snippet sobre tema de Pokes, ya que sería tremendamente útil. A ver si nos animamos un poquillo y entre todos ponemos alguno. Una vez mas, gracias.

Salu2.
En línea
Sd-Snatcher
Karoshi Lover
***
Mensajes: 141


popolon@hotmail.com
Email
« Respuesta #12 : 06 de Noviembre de 2007, 12:48:14 pm »

es poke &hf346,1    que me comi la h
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #13 : 06 de Noviembre de 2007, 02:26:47 pm »

A ver si me pongo y me hago una listilla con los pokes que conozco y que son curiosos o útiles. Espero que se anime todo el mundo... Smiley
En línea

Doom dee doom dee doom
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!