Página 10 de 10

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Vie, 19 Ago 2016, 11:58
por fupinet
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:

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Lun, 22 Ago 2016, 13:49
por Hark0
Otro más interesado en el asunto de poder activar el modo 128 con Z88DK.... :D

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Lun, 22 Ago 2016, 20:44
por fupinet
Buenas Hark0 ! como vas con tu juego? las capturas que pusiste se veia muy bien :D

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Mar, 23 Ago 2016, 08:29
por Hark0
Uff, muy lento... voy a ratos picando líneas...

Tengo poco tiempo... :(

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Mar, 23 Ago 2016, 08:33
por Hark0
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. ;)

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Mar, 23 Ago 2016, 13:53
por Hark0
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.

;)

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Mar, 23 Ago 2016, 17:43
por fupinet
: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?

Re: Z88DK (curso Radastan) - Dudas Varias

Publicado: Mié, 24 Ago 2016, 12:23
por radastan
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 5089 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