HispaMSX

Re: Espacio en diskettes -Respuesta -Respuesta -Respuesta

2000-02-22 02:26:46
Fernandez D. Sopra-Bull soltó algo así como: 

Lo que realmente me pasa es que quiero meter todo el juego en un solo
diskette y no cabe. Estoy intentando reducir cosas y está la cosa mu
mala!! espero poder hacerlo al final.

Pues no es difícil de hacer. Para leer o escribir sectores puedes usar
las rutinas que hemos dicho de la BIOS. Sería muy fácil hacer una
pequeña rutina en ASM para lanzar un programa en BASIC leído desde
sectores.  Supón que en el sector #13 comienza un trozo de programa
en BASIC que ocupa 10.000 bytes (20 sectores). Harías esta pequeña
rutina:

        ORG     #F975   ;(esta zona de memoria suele estar vacía)
        
        LD      C,#1A   ;coloca el DTA en #8000
        LD      DE,#8000
        CALL    #F37D   ;la dirección del DTA será aquella a la que
                        ;irán a parar los sectores leídos.

        LD      C,#2F   ;(función READ SECTORS)
        LD      H,20    ; (supongamos que ocupa 20 sectores)
        LD      L,0     ; (de la unidad A:, por ejemplo)
        LD      DE,#0013        ;primer sector a transferir
        CALL    #F37D   ;(llama a la función de disco)
        OR      A
        JP      NZ,ERROR_DISCO

        LD      HL,#8001
        LD      (#F676),HL      ;en esta dirección se guarda
                                ;siempre la dirección de
                                ;comienzo del texto (más 1)
        LD      HL,#A711
        LD      (#F6C2),HL      ;y aquí el final del programa en BASIC,
                                ;o mejor dicho, la dirección donde
                                ;comienza el BASIC a guardar las
                                ;variables.
        JP      #73AC           ;llamando a esta dirección en la ROM
                                ;del BASIC se ejecuta el programa, vaya,
                                ;que hacemos RUN.

Puedes arreglar esta rutina de forma que la llames con un DEFUSR dándole
la información de qué sectores quieres cargar.
Haciéndolo así, sólo necesitarías respetar las dos primeras entradas
de la FAT: una para el AUTOEXEC.BAT y otra para el LOADER.BIN que
dejaría esta mini rutina preparada en RAM y cargaría el Nbasic y el
primer bloque en BASIC.

Si la rutina la dejas ahí (la dirección que te he dado es buen ejemplo
siempre y cuando no uses la instrucción PLAY del BASIC), la puedes
ir usando para seguir cargando sectores, aunque supongo que no hará
falta porque el propio NBASIC ya tendrá una función para eso.


Un saludo,


Jose Angel Morente (msxjam(_en_)crosswinds(_punto_)net)
*MSX DREAMS*       (msxdreams(_en_)hotmail(_punto_)com)

¡Suscríbete a HispaMSX!
http://es.onelist.com/community/hispamsx
hispamsx-subscribe(_en_)onelist(_punto_)com

msxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsx



<Anterior en la conversación] Conversación actual [Siguiente en la conversación>