Página 4 de 9

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 11:03
por na_th_an
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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 12:40
por D_Skywalk
$this->bbcode_second_pass_quote('na_th_an', 'L')os 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 ;)

$this->bbcode_second_pass_quote('na_th_an', 'M')e 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:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 12:47
por na_th_an
Si comparas lo que exporta Beepola en ASM y el archivo music.h sabrás qué hacer :) Es fácil.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 12:48
por D_Skywalk
$this->bbcode_second_pass_quote('na_th_an', 'S')i 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!

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 13:35
por na_th_an
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:

$this->bbcode_second_pass_code('', ' #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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 17:40
por D_Skywalk
La primera en la frente...

$this->bbcode_second_pass_code('', '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 ^^_

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 18:15
por na_th_an
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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 04 Oct 2013, 18:28
por D_Skywalk
Ahora tengo dos funciones que parece que llaman al firm que no se como substituir:
$this->bbcode_second_pass_code('', '* .border_clr EQU $0')
En el phaser directamente lo borrais y añadis un "xor a"

Pero en el savage por ejemplo añaden:
$this->bbcode_second_pass_code('', '.vector_table_loc EQU $FE00')

Que usan aqui:
$this->bbcode_second_pass_code('', '.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:
$this->bbcode_second_pass_code('', '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!

Re: Saludos desde una lejana galaxia! XD

Publicado: Sab, 05 Oct 2013, 10:21
por na_th_an
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:

Re: Saludos desde una lejana galaxia! XD

Publicado: Sab, 05 Oct 2013, 11:30
por D_Skywalk
Pues me da que tendremos que dejarlo...
$this->bbcode_second_pass_code('', '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!