Z88DK (curso Radastan) - Dudas Varias

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor fupinet » Vie, 19 Ago 2016, 11:58

Hola a todos de nuevo, me gustaria pasar el juego a 128k, pero no se que tengo que hacer. En la churrera se pasaban imagenes a bin y en el archivo make.bat se ponian lo que ocupa cada archivo para poder compilarlo. mi estructura de archivos es la siguiente:

--juego.c
--make.bat
--loader.bas
--motor.h
--objetos.h (características de los items )
--cancionIntro.bin (cancion que se ejecuta al cargar el juego con la imagen de carga)
--loading.bin (imagen que aparece al cargar)
--sonidosFX.bin (sonidos fx generados con Soundfx.tap de DxTronics)
--sonidosFx.h (reproduce los sonidos del archivo sonidosFX.bin)
- mapa.h (coloca los sprites en pantalla por ejemplo: )
unsigned char mapa1[] = {

2,6,6,7,7,7,7,7,7,7,7,7,7,6,6,3,
8,12,13,14,15,1,1,1,1,1,1,31,30,29,28,9,
8,16,17,18,19,1,1,1,1,1,1,35,34,33,32,9,
8,20,21,22,23,1,1,1,1,1,1,39,38,37,36,9,
8,24,25,26,27,1,1,1,1,1,1,43,42,41,40,9,
4,10,10,11,11,11,11,11,11,11,11,11,11,10,10,5,

};
--sprites.h (todos los sprites del juego colocados asi)
._sprite_negro
defb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
defb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
defb 0,0,0,0

----------------------------------------

1) yo tengo #pragma output STACKPTR=65000
y lo he puesto a #pragma output STACKPTR=24500

2) he añadido un archivo mas 128k.h que contiene:
void SetRAMBank( char banco )
{
#asm
.SetRAMBank
ld hl, 2
add hl, sp
ld a, (hl)

ld b, a
ld A, ($5B5C)
and $f8
or B
ld BC, $7FFD
ld ($5B5C), A
out (C), A
#endasm
}

3) supongo que el make.bat tendre que compilar de forma diferente....en la churrera tenia algo como esto...pero viendo mis archivos no se como hacerlo
echo ### CONSTRUYENDO CINTA ###
..\utils\bas2tap -a10 -sLOADER loader.bas loader.tap
..\utils\bin2tap -o reubica.tap -a 25000 reubica.bin
..\utils\bin2tap -o ram1.tap -a 32768 ram1.bin
..\utils\bin2tap -o ram3.tap -a 32768 ram3.bin
..\utils\bin2tap -o screen.tap -a 16384 loading.bin
..\utils\bin2tap -o main.tap -a 24200 rabbitinwonderland.bin

-------------------------------------------------------

Y mas pasos que me faltan.... si alguien podría ayudarme lo agradecería!
La verdad que desde que me puse con la churrera hasta ahora con el z88dk estoy aprendiendo mucho! pero totalmente solo no puedo avanzar siempre...ya que no soy programador...quizas sea este mi ultimo juego para spectrum y me gustaria terminarlo :D

Un saludo y gracias! :tits:
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Lun, 22 Ago 2016, 13:49

Otro más interesado en el asunto de poder activar el modo 128 con Z88DK.... :D
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor fupinet » Lun, 22 Ago 2016, 20:44

Buenas Hark0 ! como vas con tu juego? las capturas que pusiste se veia muy bien :D
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Mar, 23 Ago 2016, 08:29

Uff, muy lento... voy a ratos picando líneas...

Tengo poco tiempo... :(
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Mar, 23 Ago 2016, 08:33

Sobre lo de los 128 kb... he encontrado esta info en z88dk:

int zx_type()

Identifies your Spectrum type
0 48K
1 128K
2 TS2068

link
http://www.z88dk.org/wiki/doku.php?id=l ... zxspectrum

A ver si tengo un hueco y veo si esto funciona con el kit Radastan. ;)
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Mar, 23 Ago 2016, 13:53

Vale, me respondo yo mismo:

He añadido el

#include <spectrum.h>

y también

int modelo = zx_model();

En Spectaculator con un 128 kb puesto, me dice 2, luego esto lo pilla sin problemas. He cambiado algunos parámetros y parece que funciona. No sé en máquina real.

He probado luego el:

int modelo_ram = zx_type();

Y me dice si es 48, 128, etc.


También he probado la función:
int modo128 = zx_128mode();

Y devuelve 0 y 1 dependiendo del modelo especificado en el emulador (vamos, si es o no 48/128 kb).

Ahora falta ver COMO FORZAR z88dk a que trabaje en este modo.

8-)

EDITO:
Probado en FUSE y seleccionando un Spectrum SE.... modelo 0 ("unknown").
Probando en ZEsarUX y seleccionando el ZX-UNO, con una ROM del Spectrum 48, me dice modelo 1.

;)
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor fupinet » Mar, 23 Ago 2016, 17:43

:pedal: te felicito por el avance! :D yo al final me doy por vencido..
Estoy haciendo el juego en 48k y voy a dividirlo en 2 partes.
No puedo dedicarle mucho mas tiempo y me gustaría terminarlo antes de que termine agosto.

Tu intención es hacer tu juego en 128k o en 48k?
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor radastan » Mié, 24 Ago 2016, 12:23

Vamos a ver, tengo poco tiempo pero trataré de daros algunas nociones:

El problema de un juego en 128K es la paginación, la memoria no es lineal. Dispones de páginas de 16K que debes intercambiar, por lo que tendrías que hacer que tu código se ejecutara siempre en un rango de memoria determinado y que no tocara esas páginas de intercambio, salvo para gráficos, música, y mapa. Para remate la carga tendrías que realizarla en bloques de 16K e ir cambiando de página, para meter todo en memoria. Y como punto final tenemos el problema que no puedes machacar algunas regiones de memoria o en los +3 impedirías la carga desde disco.

Es decir, hay que replantear el código para que se compile para funcionar a partir de una dirección de memoria, procurar que no exceda de las páginas que no vamos a mover, y que sólo gráficos y mapa se cambien en una página determinada.
Eso requiere de algo de planificación, aparte de eso poco más, no es necesario librería adicional porque puedes cambiar de página a base de mi rutina OUT.

¿Cómo se estructura la memoria?

pag_normal.png
pag_normal.png (3.47 KiB) Visto 4588 veces


El banco 7 es la Shadow Screen, pero si no la vas a usar puedes emplearla para almacenar datos también (si usas mis rutinas es lo suyo, no usan esa memoria de vídeo).

Recordar no usar los bancos 2 y 5, ya que machacáis el programa ensamblador o la pantalla.

Usando la paginación

La forma más sencilla: tienes que posicionar la pila de la CPU por debajo del penúltimo banco de 16K y usar la página de dirección más elevada como la intercambiable. Lo suyo es posicionar la pila en 49151 (CLEAR 49151 en el cargador BASIC).

Haces un OUT a la dirección 32765 con un valor entre 0 y 7, y con eso cambias la página. Fin. En el cargador BASIC debes hacer lo mismo para cargar cada página, antes de cada bloque paginas y cargas siempre los últimos 16K, cambiando a la siguiente página a emplear conforme cargues bloques.

Las páginas intercambiables comienzan, en decimal, a partir de 49152. Es lo único que hay que tener en cuenta, así que los punteros a mapas y gráficos deben apuntar a partir de esa dirección de memoria. Evidentemente esto supone que tienes que compilar los sprites y mapa por separado, y no de una tacada como hasta ahora, generando los binarios y añadiéndolos luego al make en las partes que se generan los TAP y luego se unen todos ellos. Trataré de haceros en próximas versiones un cargador a medida para 128K, aparte de simplificar el tema en el make. Algo como make128k.bat

Facilito, facilito.

Más información:

http://foro.speccy.org/viewtopic.php?f=6&t=592&hilit=ram+basic+compilado

https://magazinezx.speccy.org/17/128k-mode.html

Volver a “Ayuda”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados