Saludos desde una lejana galaxia! XD

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 04 Oct 2013, 11:03

Los flags son unsigned char. Ya te digo que todo está hecho simplisimamente :)

Me gustan tus sugerencias. Me las apunto en la lista de cosas que añadir a la 3.99.3 (la 3.99.2 la tenemos lista ya :lol:). Siempre hay que darle vueltas a como implementar estas cosas sobre todo de cara al código generado: el msc genera, además del bytecode, el intérprete que lo ejecuta, y este intérprete debe ser lo más compacto posible. Eso me condiciona mucho el como implementar las cosas en el lenguaje. Tengo que pensarme bien cómo implementar el bitwise para que el código generado del intérprete de las condiciones/comandos implicados sea mínimo.
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 04 Oct 2013, 12:40

na_th_an escribió:Los flags son unsigned char. Ya te digo que todo está hecho simplisimamente :)


Perfecto es para saber si puede haber números negativos o no (no los necesito sólo pregunto :*), recuerda que signed char ocupa lo mismo ;)

na_th_an escribió:Me gustan tus sugerencias. Me las apunto en la lista de cosas que añadir a la 3.99.3 (la 3.99.2 la tenemos lista ya :lol:). Siempre hay que darle vueltas a como implementar estas cosas sobre todo de cara al código generado: el msc genera, además del bytecode, el intérprete que lo ejecuta, y este intérprete debe ser lo más compacto posible. Eso me condiciona mucho el como implementar las cosas en el lenguaje. Tengo que pensarme bien cómo implementar el bitwise para que el código generado del intérprete de las condiciones/comandos implicados sea mínimo.


Perfectamente entendido, yo hace muuuuuchos años hice un interprete para un juego de rol que nunca salió XD Igualmente sólo te sugiero tu sabes mejor que nadie como llevarlo, si fuera posible :)

Voy a ver si le pongo música a esto :tony:

Un Saludo! :corchoneta:
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 04 Oct 2013, 12:47

Si comparas lo que exporta Beepola en ASM y el archivo music.h sabrás qué hacer :) Es fácil.
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 04 Oct 2013, 12:48

na_th_an escribió:Si comparas lo que exporta Beepola en ASM y el archivo music.h sabrás qué hacer :) Es fácil.

Puedo usar el engine Savage? :_)

Un Saludo!
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 04 Oct 2013, 13:35

Entonces tendrás que cambiar todo el código del player también. Nosotros usamos Phaser porque ya tenemos cambiado el código del player y solo tenemos que cambiar los datos al final del archivo, y porque sabemos que Phaser funciona guay y no hace cosas raras. Supongo que no habrá problemas. ¡Puedes ser nuestro conejillo de indias!

Básicamente hay que ver que se utilice el punto de entrada correcto. En la función select_joyfunc de engine.h se llama a la rutina que toca la música:

Código: Seleccionar todo

   #asm
      ; Music generated by beepola
      call musicstart
   #endasm


Luego hay que coger lo que exporta beepola y pegarlo en lugar de lo que hay en music.h... Hay que tener cuidado y cambiar todas las etiquetas (z88dk necesita que sean .etiqueta y no etiqueta:). También hay que tener especial cuidado con las interrupciones: al salir del player tienen que estar desactivadas.
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 04 Oct 2013, 17:40

La primera en la frente...

Código: Seleccionar todo

cpp: line 154, Warning: Illegal digit in octal number
.FREQ_TABLE
              DEFW  $0E0D,$0D0C,$0C0C,$0C0B,$0B0A,$0A0A,$0A09,$0909,$0908,$0808,$0807,$0707


* He quitado los AF,AF' y substituído por AF,AF
* Los tags ahora no tienen dos puntos y van precedidos de puntos.
* No se que son llamadas a interrupciones, pero he modificado las mismas cosas que modificasteis para el player de phaser ... creo XD

UPDATE:
Vale ya se, por que si pones un cero delante cree que es octal y al poner 9 peta. Lo que no se es si es correcto entonces hacer de $09 a $9 o mejor a $0x09 ... ni idea XD


Un Saludo y tenemos que hacer que funcione el savage que la canción suena de PM con él ^^_
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 04 Oct 2013, 18:15

Lo de octal es un warning que puedes ignorar si quieres. De todos modos, para que no salga, cambia $XXXX por 0xXXXX. Debería funcionar.
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 04 Oct 2013, 18:28

Ahora tengo dos funciones que parece que llaman al firm que no se como substituir:

Código: Seleccionar todo

* .border_clr          EQU $0

En el phaser directamente lo borrais y añadis un "xor a"

Pero en el savage por ejemplo añaden:

Código: Seleccionar todo

.vector_table_loc    EQU $FE00


Que usan aqui:

Código: Seleccionar todo

.musicstart
              PUSH  AF
              LD    HL,VECTOR_TABLE_LOC
              LD    DE,VECTOR_TABLE_LOC + 1
              LD    BC,257             ; Length of vector table = 257 bytes
              LD    (HL),$FF           ; Point vector table at address $FFFF
              LDIR
              LD    HL,$FFFF
              LD    (HL),$18           ; Copy in a JR instruction for JR FFF4
              LD    HL,$FFF4
              LD    (HL),$C3           ; Copy in a JP instruction
              INC   HL
              LD    (HL),ISR_0
              LD    A,VECTOR_TABLE_LOC / 256
              LD    I,A
              IM    2
              EI                       ; Enable IM2 routine at $F0F0
              POP   AF
              CALL  INIT_MUSIC
              CALL  PLAY_MUSIC
              IM    1
              LD    IY,$5C3A           ; Set up IY and
              LD    HL,$2758           ; HL with sensible values for
              EXX                      ; returning to BASIC
              EI
              RET


Luego hay otras más como:

Código: Seleccionar todo

intvec_adr   EQU   $FFF5
...

.chan_data               EQU  0
.chan_patt_tbl_adr       EQU  2
.chan_curpos             EQU  4
.chan_endpos             EQU  5
.chan_songlooppos        EQU  6
.chan_transpose          EQU  7
.chan_note_len_remain    EQU  8
.chan_note_len_total     EQU  9
.CHAN_GENFX              EQU  10
.CHAN_SKEW_PARAM         EQU  11
.CHAN_CHANNEL_ON         EQU  12
.CHAN_ORN_BASE           EQU  13
.CHAN_ORN_COUNT          EQU  14
.CHAN_NOTE               EQU  15
.CHAN_SKEW_XORING        EQU  16


Podría coger VECTOR_TABLE_LOC y substituirlo por su valor pero para los otros labels no se si me vale esa solucion o si es correcta :?

Bueno a ver si me puedes echar un cable aquí, que ahora si que estoy perdido :(

Un Saludo!
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Sab, 05 Oct 2013, 10:21

Houston: tenemos un PROBLEMAZO.

Eso que ves ahí es la creación de una tabla de salto para instalar un ISR (rutina de servicio de interrupción) para el modo IM2 del z80. A grosso modo, como el spectrum y sus periféricos están mal diseñados, es necesario crear una tabla de 257 valores repetidos. Cuando llega una interrupción, el procesador saltará a la dirección almacenada en una dirección que está formada por el valor del registro I como byte más significativo y lo que haya en el bus de datos como byte menos significativos. Esto se hizo pensando en que pudiese haber varios dispositivos que interrumpiesen a la CPU poniendo su identificador en el bus de datos y levantando la linea INT, así la CPU saltaría a un sitio indicado para cada uno. El problema es que los periféricos hacen lo que le da la gana en el bus y además la ULA, cuando interrumpe a la CPU cada vez que va a dibujar un cuadro de video, no pone un valor fijo. Entonces hay que esperarse cualquier cosa.

Ahora mismo lo que hace ese programa es crear una tabla de 257 datos $FF para que cuando llegue la interrupción se salte a la dirección que pone en $FFFF y siguiente (0000). Un lío vaya.

La biblioteca de gráficos lo ocupa todo desde $ECEF hasta $FFFF. El player del savage intenta crear la tabla a partir de $FE00 y luego hace que se salte a $FFFF. Esas direcciones no están libres, así que hay que cambiarlas.

A lo que voy es que esto no funcionará a menos que encontremos un sitio en RAM para colocar la ISR cuya dirección de inicio tenga los dos bytes iguales (por ejemplo $F1F1, o $EEEE), aparte de otro sitio en ram donde haya 257 bytes libres para colocar la tabla.

Esto es muy complicado para mí, nunca me han llamado estos manejes a tan bajo nivel. Creo que podemos buscar ayuda en speccy.org y WOS, pero necesito saber qué porciones de la memoria están libres. Si tu juego está montado con la 3.99.1, tu binario empezará en 24200 y llegará hasta donde llegue, dependiendo del tamaño del archivo .bin que genera el z88dk (también lo puedes ver examinando el TAP y viendo cuando ocupa el último bloque). Tenemos libre desde esa dirección hasta 60654. Con suerte tendremos espacio suficiente y además una dirección cuyos dos bytes sean iguales para colocar el salto a la ISR. Pero, ya te digo, tendremos que pedir ayuda porque yo hasta ahí ya no llego.

Creo que esa fue una de las razones por las que usamos Phaser y no otro motor :lol:
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Sab, 05 Oct 2013, 11:30

Pues me da que tendremos que dejarlo...

Código: Seleccionar todo

Block type 0x10 (Standard Speed Data)
  Block duration: 1.10 sec
  Data length: 19 bytes
  CODE: justin.bin
  Checksum: pass
  Pause length: 1000 ms
Block type 0x10 (Standard Speed Data)
  Block duration: 194.97 sec
  Data length: 37392 bytes
  Checksum: pass
  Pause length: 1000 ms


De hecho ya me he pasado, no? XD
Adelgazar 938 bytes es complicado? se admiten sugerencias XD

Un Saludo!
David Skywalker
Weblog: http://david.dantoine.org

Volver a “General”

¿Quién está conectado?

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