¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Avatar de Usuario
40crisis
Mensajes: 15
Registrado: 04 Feb 2017, 23:42

¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por 40crisis » 05 Feb 2017, 09:01

Hola,

Tengo una pregunta sobre el uso del DIVMMC RAM.

Mi proyecto es utilizar en un spectrum +2A/+2B/+3 64K de RAM (de $0000 a $FFFF)

Eso funciona bien si no utilizo el DIVMMC. Creo que es porque el RAM $0000-$4000 del Divmmc
entra en conflicto con el RAM del Spectrum.

Intenté de utilizar la pagina RAM 0 y 3 del Divide.
Puedo poner data sin problema en la pagina 0. Pero la pagina 3 ne suele funcionar.


Veo le siguiente en el emulador ZesarUX utilizando el DIVMMC Zxuno:
Cuando escribo en el RAM pagina 3, solo el valor en la dirección 0 esta correcta y se repite
en toda la pagina.

El codigo fuente:

.org $8000

; test divide ram

; divide specific code to select divide ram

di

ld a,$0F ; bank 7 at $C000 screen at shadow at $c000
ld bc,$7FFD
out (c),a

ld a,%10000011 ; DivIDE page 3
out ($E3),a ; page in at $2000, if present

; fill ram with test data: 0,1,2,3....

ld bc,8192
ld hl,$2000
fillbyte:
ld (hl),l
dec bc
inc hl
ld a,b
cp $ff
jr nz,fillbyte

ld a,%10000000 ; DivIDE page 0
out ($E3),a ; page in at &2000, if present

ld bc,8192
ld hl,$2000

; fill ram with test data: 0,1,2,3....
fillbyte1:
ld (hl),l
dec bc
inc hl
ld a,b
cp $ff
jr nz,fillbyte1

ld a,%01000000 ; MAPRAM
out ($E3),a ; page 3 at &0000 (read-only), page 0 at &2000

wait:
jr wait

.end

He añadido el test en fichero TAP y el codigo fuente:

Ver fichero actualizado con salida a pantalla más abajo
Última edición por 40crisis el 10 Feb 2017, 15:24, editado 3 veces en total.

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por chernandezba » 08 Feb 2017, 11:18

Hola

En el emulador , la paginación de divide es excluyente con la de divmmc , y a la inversa, si activas uno se desactiva el otro.
Esto lo hago porque internamente utilizan mismo sistema de paginación (diviface.c).
Es mas, en un entorno real, tener los dos interfaces conectados no puede ser "bueno", dado que ambos activan la paginación automática en los mismos casos , y no estoy seguro qué leerá el z80 en esos casos

Según la documentación oficial:
"Automatic mapping occurs at the begining of refresh cycle after fetching
opcodes (M1 cycle) from 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h. It's
also mapped instantly (100ns after /MREQ of that fetch is falling down) after
executing opcode from area 3d00..3dffh. Memory is automatically disconnected in
refresh cycle of the instruction fetch from so called off-area, which is
1ff8-1fffh.
"

Por tanto mi consejo es que no uses los dos a la vez.
Alguien puede validar en un entorno real qué sucede?
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
40crisis
Mensajes: 15
Registrado: 04 Feb 2017, 23:42

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por 40crisis » 08 Feb 2017, 17:42

Mi codigo funciona con la emulacíon DIVIDE de FUSE.

Otro ejemplo utilizando RAM at $0000-$4000 que soporta el DIVIDE: Pac-Man Emulator para ZX Spectrum +2A
http://simonowen.com/spectrum/pacemuzx/

Este ejemplo funciona con FUSE con Divide interface activado pero no carga con ZesarUX o ZX-UNO con Divmmc activado.
Desactivando el Divmmc carga con ZesarUX o ZX-UNO

¿ Hay alguna diferencia entre la memoría RAM del DIVIDE y DIVMMC ?

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por chernandezba » 08 Feb 2017, 22:35

Es lo que ya te decía, no puedes tener los dos interfaces paginando a la vez
No hay ninguna diferencia en la RAM de los dos, funcionan exactamente igual
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
40crisis
Mensajes: 15
Registrado: 04 Feb 2017, 23:42

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por 40crisis » 09 Feb 2017, 15:20

No entiendo el conflicto de paginación. Porque en el caso que haya DIVIDE disponible, no utilizo el modo de paginación especial disponible a partir del Spectrum +2A en mi codigo (puerto #1FFD ).
Estoy en modo 128/+2 estandar y intento solamente substituir el contenido del EEPROM at #0000-#1FFF con la pagina 3 RAM del DIVIDE y
poner en la zona #2000-3FFF la pagina 0 RAM del DIVIDE.

Como veo que el codigo funciona perfectamente en el emulador FUSE con Divide activado, me pregunto si el problema no puede venir del ZesarUX y del ZXUno.

Me gustaría que funcionaría en el ZX-UNO con divmmc también porque es mi plataforma de pruebas y desarollo.

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por antoniovillena » 09 Feb 2017, 16:38

Habría que ver cual es el comportamiento correcto. En un emulador funciona y en otro no. Es cuestión de probarlo en spectrum real. Si en real funciona es porque hay algo en zesarux y zxuno que no está bien. Si no, el problema está en el spectaculator

Avatar de Usuario
40crisis
Mensajes: 15
Registrado: 04 Feb 2017, 23:42

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por 40crisis » 09 Feb 2017, 23:24

Hola,

como dice Antonio, alguien me puede ayudar a comprobarlo en un verdadero Spectrum.
En el emulador Fuse está funcionando.

Tiene que ser un Spectrum 128 / +2 / +2A / +2B / +3 con Divide o Divmmc
Porque no tengo nada de eso.

Si es correcto se ve así:
http://dl.free.fr/njgeuvR73

Si no es correcto se ve el rom:
http://dl.free.fr/iBTwWdMTg

Al archivo con el TAP para probar:
http://dl.free.fr/kVQAXbfIC

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por chernandezba » 09 Feb 2017, 23:56

A ver, o bien lo he entendido mal, o lo he entendido bien y la explicación es la misma que ya he dado, es decir:
Si estamos hablando de activar divmmc y divide a la vez, esto NO va a funcionar, ni en emulador ni en real. El emulador además ya se encarga de desactivar la paginación del otro dispositivo (divide o divmmc) pues los dos a la vez no pueden usarse, ni en real tampoco.
Pero si no es esto que yo digo, por favor acláralo porque no queda nada bien explicado
Saludos
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por chernandezba » 10 Feb 2017, 00:49

Misterio resuelto

:tepego:

Olvida mis comentarios sobre conflictos entre divide y divmmc. Cuando lo mencionabas al principio pensaba que el problema venía de ahí y me ofusqué.
Probé tu programa de testeo y entendí que pasaba: básicamente un bug en ZEsarUX. Cuando activas al final MAPRAM, el segmento 0000-1fffh siempre aparecía con 0 porque en todas las direcciones estaba retornando la misma posición 0 de la página 3. Me faltaba sumar a la posición la dirección indicada (0000-1fffh).

Fallo absurdo :P

Gracias por tus comentarios, bug corregido en el último codigo fuente. Y en este lógicamente ya se ve el patrón de pantalla perfecto

Lo que ya no se porque en ZX-Uno falla también :P

Saludos
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: ¿ Como Usar la RAM del Divmmc teniendo RAM en la zona $0000-$3FFF ?

Mensaje por chernandezba » 10 Feb 2017, 00:56

Por cierto no se exactamente en qué usaras la RAM que mapeas entre 0-3fffh pero acuérdate sobre la paginación automática de divide/divmmc: si ejecutas código en esas direcciones, hay direcciones concretas que hacen saltar la paginación y te pueden colgar la máquina...
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Responder