HispaMSX

Re: [hispamsx] Gestion de memoria

2004-11-04 17:23:45
Existe un problema fundamental, para cambiar el SUB-SLOT, primero debes
cambiar el SLOT de la página 3, y después cambiar el SubSlot.

Suponiendo que el código que realiza el procedimiento está en la página 2
($8000-$BFFF) y deseamos buscar la RAM para la página 1 ($4000-$7FFF).



        DI

        exx                                ; Guarda config actual en [BC']
para luego restaurarla.
        in a,(a8)
        ld c,a
        ld a,($FFFF)
        ld b,a
        exx

        ld e, 0
        ld hl,$4000

        ld c,0

slot:  in a,(a8)
        and $33
        or c
        out (a8),a
        ld b,0
sslot:     ld a,($FFFF)
            cpl
            and $F3
            or b
            ld ($FFFF),a
                ld a,(hl)
                cpl
                ld (hl),a
                cp (hl)
                cpl
                ld (hl),a
                jr z, salida
            ld a,b
            add a, $04
            ld b,a
            and $0C
            jr nz, sslot
        ld a,c
        add a, $44
        ld c,a
        and $0C
        jr nz, slot

        ld e,$FF            ; Indica que no hay RAM para la página 1.

salida:   exx                 ; [C]= slot [B]= sslot
             ld a,c
            out ($a8),a
            ld a,b
            ld ($FFFF),a
            exx

            EI

            ld a,e
            ld (var1),a            ; =0 se encontró RAM.

            ld a,c
            ld (var2),a            ; número de slot en bits 2 y 3.
(%0000xx00)

            ld a,b
            ld (var3),a            ; número de sub-slot en bits 2 y 3
(%0000xx00)

            ret

Flyguille

----- Original Message ----- 
From: "Eduardo Robsy Petrus" <robsypetrus(_en_)hotmail(_punto_)com>
To: <hispamsx(_en_)yahoogroups(_punto_)com>
Sent: Thursday, November 04, 2004 12:14 PM
Subject: [hispamsx] Gestion de memoria



El WAVeR v.3 sigue dandome problemas con la gestion de memoria. Lo que hago
para localizar 64 KB de RAM es lo siguiente:

-Detecto si es un MSX1 o un MSX2 o superior. A continuacion:

-MSX1: busco RAM en las paginas 0 y 1 recorriendo recursivamente todos los
slots (0-3). Si no encuentro nada, error de memoria. Lo hago usando el
registro A8h del PPI a pelo. Para comprobar si hay RAM hago lo siguiente:

LD HL,4000h ; es un ejemplo
LD A,(HL)
NEG A
LD (HL),A
XOR (HL)
JR Z,RAM_ENCONTRADA





-MSX2: supongo que tendra siempre como minimo 64 KB en un mismo slot. Copio
el slot al que apuntan las paginas 2 y 3 para las paginas 0 y 1, manipulando
directamente el puerto A8h. A continuacion, hago lo mismo con la posicion de
memoria FFFFh.


Que puedo estar haciendo mal?

Un saludo,

Eduardo Robsy





_________________________________________________________________
Dale rienda suelta a tu tiempo libre. Encuentra mil ideas para exprimir tu
ocio con MSN Entretenimiento. http://entretenimiento.msn.es/



*HispaMSX. La mailing-list de MSX en castellano*
Para cualquier duda: hispamsx-owner(_en_)yahoogroups(_punto_)com
Web de lista: http://www.hispamsx.org
Enlaces a Yahoo! Grupos


    hispamsx-unsubscribe(_en_)yahoogroups(_punto_)com

    http://es.docs.yahoo.com/info/utos.html





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