Pasar de modo 128K a 48k sin usar el comando SPECTRUM en +3

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
NeilParsons
Dizzy
Mensajes: 1094
Registrado: Mar Oct 02, 2007 5:13 pm

Pasar de modo 128K a 48k sin usar el comando SPECTRUM en +3

Mensaje por NeilParsons » Mar Ago 14, 2018 9:29 pm

Buenas, de nuevo. ¡¡Cuánto tiempo!!

Tengo una duda que no sé si ya se comentó con anterioridad en el foro. Por si acaso, la planteo como si fuera la primera vez.

¿Hay algún POKE o rutina especial que permita pasar, en un Spectrum +2A y +3, del modo 128 al modo normal de 48 K, sin emplear el comando especial SPECTRUM y sin necesidad de saltar al BASIC? Quisiera usarlo en juegos que estoy pasando a disco (DSK) y no funcionan directamente en modo 128, pero sí en modo 48K, para poder implementarlo en cada programa donde me encuentre con esta situación. Por ejemplo, en la aventura "Human Torch and the Thing" de Adventure International, por poner un caso.

Saludos.

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Pasar de modo 128K a 48k sin usar el comando SPECTRUM en

Mensaje por zup » Mar Ago 14, 2018 10:16 pm

Sí, si no vas a volver al BASIC en ningún momento. Dos métodos:

- El más básico es poner la página 0 y bloquear la paginación desde c/m y luego un jp al inicio del juego. Básicamente:

Código: Seleccionar todo

di
ld bc,32765
ld a,48
out (c),a
ld hl,23388
ld (hl),a
res 4,(iy+1)
ei ; ...o no, según lo requiera el juego
jp xxxx
De esta rutina, lo de actualizar BANKM es cortesía... si no pretendemos usar la ROM, no hace falta. Lo mismo para la línea del RES 4...

- En algunos juegos esto no es suficiente (porque intentan usar la ROM para imprimir o por otros motivos). En alguna parte encontré esta rutina (algo) más elaborada:

Código: Seleccionar todo

DI
LD HL,(5C3Dh)   ; ERR_SP
INC HL
LD (HL),13h
DEC HL
LD (HL),3
DEC HL
LD (HL),1Bh
DEC HL
LD (HL),76h
DEC HL
LD (HL),0
DEC HL
LD (HL),51h
LD SP,HL
LD BC,7FFDh
LD A, 30h       ; 10h for USR0, 30h for 48 BASIC
OUT (C), A
RES 4,(IY+1)  ; Reset '128 BASIC' flag.
RET
De esta lo único que entiendo es que bloquea la paginación al final y que resetea el flag de 128 BASIC (si mal no recuerdo, este flag hace que los dos últimos UDG se expandan a SPECTRUM y PLAY al imprimirlos). El resto de tejemanejes con el stack no lo he pillado.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
NeilParsons
Dizzy
Mensajes: 1094
Registrado: Mar Oct 02, 2007 5:13 pm

Re: Pasar de modo 128K a 48k sin usar el comando SPECTRUM en

Mensaje por NeilParsons » Mié Ago 15, 2018 7:46 pm

Según tu criterio, cuál de estas dos opciones me valdría (obviamente, la segunda parece mejor), en caso de tener que usarlos en algunos juegos como el que cité antes y pongo otro caso, el juego "Hypa Raid". Tengo una versión con su programa lanzador y dos bloques de código y con varios RANDOMIZE USR xxx al final

Ahora necesito pasar este listado en assembler a datos decimales e insertarlos en una linea REM del programa cargador y quitar lo que tenía en un principio, algo tan básico como usar el comando SPECTRUM. Curiosamente, sí funciona en modo 128K pero usa los caracteres gráficos T y U y, claro, se imprimen los comandos PLAY y SPECTRUM en pantalla, así que no cuela. Así lo tenía hasta ahora:

Imagen

Gracias por la ayuda, zup

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Pasar de modo 128K a 48k sin usar el comando SPECTRUM en

Mensaje por zup » Mié Ago 15, 2018 11:01 pm

Ni idea, yo lo que hago es probar el método corto y luego el largo. Con ZX Spin, la prueba rápida es poner un breakpoint en el inicio del programa (en el caso del Hypa Raid 43100). Cuando salte el debugger, vas a Tools > Output byte to port y le haces un out 32765,48. Si el juego funciona, usas la rutina corta; si el juego falla usas la larga.

En el caso del Hypa Raid, no he visto que el juego casque por ejecutarse en un +3, pero usa las rutinas de impresión de la ROM y aparecen las palabras SPECTRUM y PLAY en pantalla. Eso lo puedes arreglar con un POKE 23611,204 antes del RANDOMIZE USR.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
NeilParsons
Dizzy
Mensajes: 1094
Registrado: Mar Oct 02, 2007 5:13 pm

Re: Pasar de modo 128K a 48k sin usar el comando SPECTRUM en

Mensaje por NeilParsons » Jue Ago 16, 2018 12:29 pm

zup escribió:Ni idea, yo lo que hago es probar el método corto y luego el largo. Con ZX Spin, la prueba rápida es poner un breakpoint en el inicio del programa (en el caso del Hypa Raid 43100). Cuando salte el debugger, vas a Tools > Output byte to port y le haces un out 32765,48. Si el juego funciona, usas la rutina corta; si el juego falla usas la larga.

En el caso del Hypa Raid, no he visto que el juego casque por ejecutarse en un +3, pero usa las rutinas de impresión de la ROM y aparecen las palabras SPECTRUM y PLAY en pantalla. Eso lo puedes arreglar con un POKE 23611,204 antes del RANDOMIZE USR.
Perfecto. Gracias de nuevo.

Responder

¿Quién está conectado?

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