CPCBasic: Compilador cruzado de BASIC

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 5:27 pm

Bueno, a ver qué pasa :), que está hoy el tema lanzado y no soy capaz de entender por donde vais. Al final, ¿cuáles son los problemas pendientes de resolver? Resumidme, que ya no sé qué habeis resuelto y lo que todavía no funciona.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mar 18 Sep , 2007 5:30 pm

Yo creo que ya funciona... pero quería probar si el resultado que devuelve una función (la última que hay colgada) es correcto y para ello quisiera imprimir en pantalla el resultado. ¿una ayudita?
Salu2,
Arta

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Mensajepor DaDMaN » Mar 18 Sep , 2007 5:31 pm

Y ya que me he picado con esto. ¿Cómo puedo imprimir el resultado de esa función? Si hago el print normal no me deja y si lo convierto a cadena se bloquea. ¿?



Ya cariño, tu no lo miras... pero si yo hago:

For x#=0 to 199
bla bla bla
next

La cosa en CPCBASIC no funciona (no recorre el bucle), pq 199 le da como resultado negativo... es una historia del copon xD
Lo pondré en INT a ver que tal :D
Vale, ahí me has dao, my darling. Pon int y ya tá. La función ira igual de bien (o de mal).
La funcion funciona cojonujda :D

El tema del print, es algo con lo que yo ando mosqueado.

No se pueden imprimir valores numéricos, tan solo cadenas de texto... duro, pero real.

Yo para la prueba lo he resuelto así:

Código: Seleccionar todo

CHAIN"CPCBASIC.BAS"
CHAIN"GRAFICOS.BAS"

dim x%,y%,char$

mode 2
for y%=0 to 199
for x%=0 to 80
char$=hex$(xydir%(x%,y%),4)
print char$
print
next
next
end

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 5:37 pm

No se pueden imprimir valores numéricos, tan solo cadenas de texto... duro, pero real.

Yo para la prueba lo he resuelto así:

Código: Seleccionar todo

CHAIN"CPCBASIC.BAS"
CHAIN"GRAFICOS.BAS"

dim x%,y%,char$

mode 2
for y%=0 to 199
for x%=0 to 80
char$=hex$(xydir%(x%,y%),4)
print char$
print
next
next
end
Un poco más abreviado se pude hacer PRINT HEX$(XYDIR%(X%,Y%),4):PRINT, sustituyendo el código del bucle x%. Por cierto, si se utilizan todas o casi todas las variables de tipo entero, se puede hacer un DEFINT A-Z la principio y así es más cómoda la escritura del código.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mar 18 Sep , 2007 5:38 pm

Me alegro que funcione, tronco. Si vas a convertir alguna rutineja más tienes que tener en cuenta lo que hemos hecho a esta última. Para la librería C los valores van en la pila, por lo tanto, se recojen de ella directamente. Para la librería en Basic, én la pila está la posición donde están los valores, por eso he añadido una búsqueda más:

Código: Seleccionar todo

"LD IX,2"+ _
"ADD IX,SP"+ _


"LD L,(IX+2)" + _
"LD H,(IX+3)" + _
Pongo en HL el valor que hay en la pila (2º parámetro)

Código: Seleccionar todo

"LD A,(HL)" + _
cogo el valor que hay en HL y lo pongo en A
Y

Código: Seleccionar todo

lo mismo para el primer parámetro:
"LD L,(IX+0)"+ _
"LD H,(IX+1)"+ _
"LD L,(HL)" + _
...
De todas formas si tienes algún problemo y te podemos ayudar, aquí estamos.
Salu2,
Arta

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mar 18 Sep , 2007 5:42 pm

Un poco más abreviado se pude hacer PRINT HEX$(XYDIR%(X%,Y%),4):PRINT, sustituyendo el código del bucle x%. Por cierto, si se utilizan todas o casi todas las variables de tipo entero, se puede hacer un DEFINT A-Z la principio y así es más cómoda la escritura del código.
Tomo nota. Se ve que no me conozco todavía este BASIC :D
Salu2,
Arta

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 5:59 pm

Acabo de ver que teniais dudas sobre el CALL _RESERVAR_HEAP. Es una rutina de uso interno que podeis aprovechar en las órdenes y funciones que definais y sirve para reservar en la memoria dinámica que usa el CPCBasic un cierto número de bytes, por ejemplo para almacenar en ellos el valor de retorno de una función. Se puede usar dando en A el número de bytes a reservar y en HL el valor #FFFF para indicar que es un espacio temporal, hasta que se use CALL _COMPACTAR_HEAP que libera todos los espacios temporales reservados.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mar 18 Sep , 2007 6:12 pm

Okis, entendido lo de heap.
DaD, me imagino que la rutina la vas a usar mucho así que, en vez de usar una posición variable con el heap, usar una posición fija para devolver los datos, algo de tiempo se ganará.

Código: Seleccionar todo

DEF FN XYDIR%(%,%)= _

"LD IX,2"+ _
"ADD IX,SP"+ _


"LD L,(IX+2)" + _
"LD H,(IX+3)" + _
"LD A,(HL)" + _

"LD L,(IX+0)"+ _
"LD H,(IX+1)"+ _
"LD L,(HL)" + _


"_inicio_rutina"+ _

"LD (_inc_ancho+1),A"+ _
"LD A,L"+ _
"SRL A"+ _
"SRL A"+ _
"SRL A"+ _
"LD D,A"+ _
"SLA A"+ _
"SLA A"+ _
"SLA A"+ _
"SUB L"+ _
"NEG"+ _
"LD E,A"+ _
"LD L,D"+ _
"LD H,0"+ _
"ADD HL,HL"+ _
"LD BC,BLOQUES"+ _
"ADD HL,BC"+ _
"LD C,(HL)"+ _
"INC HL"+ _
"LD H,(HL)"+ _
"LD L,C"+ _
"PUSH HL"+ _
"LD D,0"+ _
"LD HL,SUB_BLOQUES"+ _
"ADD HL,DE"+ _
"LD A,(HL)"+ _
"POP HL"+ _
"ADD H"+ _
"LD H,A"+ _
"_inc_ancho"+ _
"LD E,0"+ _
"ADD HL,DE"+ _

"EX DE,HL"+ _
"LD HL,RESULTADO" + _
"LD (HL),E"+ _
"INC HL"+ _
"LD (HL),D"+ _
"DEC HL"+ _

"RET"+ _
"BLOQUES"+ _
"dw &C000,&C050,&C0A0,&C0F0,&C140,&C190,&C1E0,&C230,&C280,&C2D0"+ _
"dw &C320,&C370,&C3C0,&C410,&C460,&C4B0,&C500,&C550,&C5A0,&C5F0"+ _
"dw &C640,&C690,&C6E0,&C730,&C780"+ _
"SUB_BLOQUES"+ _
"db &00,&08,&10,&18,&20,&28,&30,&38"+ _
"RESULTADO"+ _
"dw 0"
Salu2,
Arta

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 6:20 pm

DaD, me imagino que la rutina la vas a usar mucho así que, en vez de usar una posición variable con el heap, usar una posición fija para devolver los datos, algo de tiempo se ganará.
Buena idea lo de almacenar el valor en una posición fija, es cierto que se gana velocidad. Pero sólo un inconveniente, que no puede ser reentrante en la misma expresión, es decir, que así no se puede utilizar varias veces en la misma expresión. Por ejemplo Res%=XYDir%(0,0)-XYDir%(5,5) daría resultados inesperados. Si no se va a utilizar la función de esta forma, pues perfecto.
DaD, me imagino que la rutina la vas a usar mucho así que, en vez de usar una posición variable con el heap, usar una posición fija para devolver los datos, algo de tiempo se ganará.
Buena idea lo de almacenar el valor en una posición fija, es cierto que se gana velocidad. Pero sólo un inconveniente, que no puede ser reentrante en la misma expresión, es decir, que así no se puede utilizar varias veces en la misma expresión. Por ejemplo Res%=XYDir%(0,0)-XYDir%(5,5) daría resultados inesperados. Si no se va a utilizar la función de esta forma, pues perfecto.

Sí creo que se podría ganar velocidad al tomar los parámetros quizás con esto (si no me equivoco):

Código: Seleccionar todo

"LD HL,6" + _
"ADD HL,SP ; HL = SP+6" + _
"LD A,(HL) ; A = byte bajo de primer parámetro" + _
"DEC HL" + _
"DEC HL" + _
"LD L,(HL) ; L = byte bajo de segundo parámetro" + _
...
Última edición por dinoneno el Mar 18 Sep , 2007 6:27 pm, editado 1 vez en total.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mar 18 Sep , 2007 6:27 pm

DaD, me imagino que la rutina la vas a usar mucho así que, en vez de usar una posición variable con el heap, usar una posición fija para devolver los datos, algo de tiempo se ganará.
Buena idea lo de almacenar el valor en una posición fija, es cierto que se gana velocidad. Pero sólo un inconveniente, que no puede ser reentrante en la misma expresión, es decir, que así no se puede utilizar varias veces en la misma expresión. Por ejemplo Res%=XYDir%(0,0)-XYDir%(5,5) daría resultados inesperados. Si no se va a utilizar la función de esta forma, pues perfecto.
Caramba, es bueno saberlo. ¿no recoge el valor en cada paso? ¿cómo evalúa el compilador esa expresión?
Salu2,
Arta

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 6:31 pm

Tienes razón, en esa expresión funcionaría bien porque los resultados de cada llamada se van copiando en la memoria dinámica y no se sobreescriben. Fallaría en otras expresiónes del tipo Funcion(Funcion(<parámetro>)) o bien si la función estuviese programada recursivamente.

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Mensajepor DaDMaN » Mar 18 Sep , 2007 7:41 pm

Probaré esa rutina a ver :D

A ver... ya tengo un sprite moviendose suavemente por la pantalla...

Ahora me surgen varias dudas MUY importantes:

Amos a ver... el bicho restaura el fondo y toda la pesca... pero al moverse, parpadea del carajo!

Entonces se me ha ocurrido esperar al Vsync antes de poner el sprite en pantalla...
Así:

ponsprite
PUT_TILE @buffer#(0),20,5,XYDIR%(xb%,yb%)
GET_TILE @buffer#(0),20,5,XYDIR%(x%,y%)
CALL &BD19
PUT_TILE t%(9),20,5,XYDIR%(x%,y%)
xb%=x%
yb%=y%
RETURN


Entonces va suave de cojones... hasta que llega a la parte baja de la pantalla, que curiosamente, desaparece el sprite hasta que no dejo de moverlo...
Si pongo el call &bd19 justo al principio de la rutina, ocurre lo mismo pero en la parte superior...

Voy apañao! Como arreglo esto? O me voy a tener que conformar con sprites parpadeantes de la muerte??

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 7:48 pm

¿Puedes poner o pasarme la aplicación completa para probarla a ver si es que alguna variable se descontrola?

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Mensajepor DaDMaN » Mar 18 Sep , 2007 8:13 pm

Por supuesto.... :D

Te adjunto un RAR con los fuentes (menos el de los tiles, que se me ha olvidao, pero te lo dejo aquí escrito) y con la biblioteca GRAFICOS.BAS

La definicion de tiles (en &5000)

Código: Seleccionar todo

;DEFINICION DE TILES
ORG &5000

SUELO1A
db &39,&39,&2C,&25,&1A
db &37,&37,&76,&35,&2F
db &37,&B9,&76,&35,&2F
db &37,&B9,&76,&35,&2F
db &BD,&FC,&2C,&0F,&2F
db &B9,&7C,&38,&3A,&1A
db &39,&7C,&38,&3A,&0F
db &39,&1C,&18,&0F,&3A
db &39,&1C,&18,&0F,&3A
db &5C,&1C,&18,&35,&3A
db &1C,&1C,&30,&1F,&2F
db &1C,&1C,&25,&2F,&0F
db &34,&24,&35,&2F,&30
db &34,&24,&35,&2F,&30
db &24,&24,&1F,&3A,&1A
db &1A,&3A,&25,&0F,&3A
db &25,&3F,&1F,&0F,&3A
db &35,&0F,&3F,&35,&2F
db &35,&0F,&3F,&35,&2F
db &0F,&1A,&0F,&0F,&2F

SUELO1B
db &25,&1A,&1C,&36,&36
db &1F,&3A,&B9,&3B,&3B
db &1F,&3A,&B9,&76,&3B
db &1F,&3A,&B9,&76,&3B
db &1F,&0F,&1C,&FC,&7E
db &25,&35,&34,&BC,&76
db &0F,&35,&34,&BC,&36
db &35,&0F,&24,&2C,&36
db &35,&0F,&24,&2C,&36
db &35,&3A,&24,&2C,&AC
db &1F,&2F,&30,&2C,&2C
db &0F,&1F,&1A,&2C,&2C
db &30,&1F,&3A,&18,&38
db &30,&1F,&3A,&18,&38
db &25,&35,&2F,&18,&18
db &35,&0F,&1A,&35,&25
db &35,&0F,&2F,&3F,&1A
db &1F,&3A,&3F,&0F,&3A
db &1F,&3A,&3F,&0F,&3A
db &1F,&0F,&0F,&25,&0F

SUELO2
db &39,&39,&1C,&36,&36
db &37,&37,&B9,&3B,&3B
db &37,&B9,&B9,&33,&3B
db &37,&B9,&B9,&33,&3B
db &BD,&FC,&1C,&B9,&7E
db &B9,&7C,&3C,&FC,&76
db &39,&7C,&3C,&FC,&36
db &39,&1C,&0C,&7C,&36
db &39,&1C,&0C,&7C,&36
db &5C,&1C,&24,&3C,&AC
db &1C,&1C,&30,&2C,&2C
db &1C,&1C,&25,&2C,&2C
db &34,&24,&35,&0C,&38
db &34,&24,&1F,&0C,&38
db &24,&24,&1F,&18,&18
db &1A,&3A,&25,&25,&25
db &25,&3F,&1F,&0F,&3A
db &35,&0F,&3F,&35,&2F
db &35,&0F,&3F,&35,&2F
db &0F,&1A,&0F,&0F,&2F

SUELO3
db &35,&0F,&3F,&25,&1A
db &1F,&25,&0F,&35,&2F
db &2F,&3F,&25,&35,&3F
db &2F,&3F,&25,&35,&2F
db &3F,&2F,&1F,&0F,&3A
db &30,&1A,&2F,&3A,&0F
db &0F,&25,&3F,&3A,&1F
db &35,&1F,&1F,&25,&2F
db &35,&1F,&35,&0F,&3A
db &1F,&1F,&0F,&35,&3A
db &2F,&1F,&1A,&1F,&2F
db &2F,&25,&0F,&2F,&1F
db &2F,&25,&1F,&2F,&35
db &2F,&1A,&1F,&2F,&30
db &2F,&2F,&35,&3A,&1A
db &1A,&3F,&25,&25,&2F
db &25,&3F,&1F,&0F,&3F
db &35,&25,&3F,&35,&3F
db &35,&0F,&3F,&35,&3F
db &0F,&1A,&0F,&0F,&2F

SUELO4A
db &C0,&39,&3C,&36,&36
db &95,&37,&33,&3B,&3B
db &95,&B9,&B9,&33,&76
db &95,&B9,&B9,&33,&76
db &BD,&FC,&B9,&B9,&FC
db &B9,&7C,&39,&B9,&FC
db &39,&7C,&7C,&39,&BC
db &39,&1C,&5C,&39,&3C
db &39,&1C,&5C,&39,&3C
db &5C,&1C,&1C,&5C,&3C
db &FC,&BC,&2C,&1C,&2C
db &33,&76,&BC,&3C,&0C
db &33,&FC,&3C,&0C,&0C
db &33,&FC,&2C,&0C,&0C
db &B9,&33,&BC,&2C,&18
db &37,&76,&FC,&3C,&18
db &33,&3C,&0C,&18,&0D
db &37,&33,&BC,&0C,&25
db &37,&33,&BC,&0C,&25
db &B9,&76,&3C,&2C,&18

SUELO4B
db &39,&39,&3C,&36,&C0
db &37,&37,&33,&3B,&6A
db &B9,&33,&76,&76,&6A
db &B9,&33,&76,&76,&6A
db &FC,&76,&76,&FC,&7E
db &FC,&76,&36,&BC,&76
db &7C,&36,&BC,&BC,&36
db &3C,&36,&AC,&2C,&36
db &3C,&36,&AC,&2C,&36
db &3C,&AC,&2C,&2C,&AC
db &1C,&2C,&1C,&7C,&FC
db &0C,&3C,&7C,&B9,&33
db &0C,&0C,&3C,&FC,&33
db &0C,&0C,&1C,&FC,&33
db &24,&1C,&7C,&33,&76
db &24,&3C,&FC,&B9,&3B
db &0E,&24,&0C,&3C,&33
db &1A,&0C,&7C,&33,&3B
db &1A,&0C,&7C,&33,&3B
db &24,&1C,&3C,&B9,&76

SUELO5A
db &B9,&BC,&0C,&30,&0F
db &33,&76,&3C,&18,&25
db &37,&33,&BC,&2C,&18
db &37,&33,&BC,&2C,&18
db &B9,&FC,&2C,&18,&0F
db &FC,&3C,&0C,&30,&25
db &33,&FC,&3C,&0C,&18
db &37,&76,&2C,&18,&25
db &37,&76,&2C,&18,&25
db &FC,&3C,&0C,&18,&25
db &B9,&76,&3C,&2C,&18
db &37,&33,&BC,&0C,&25
db &33,&BC,&0C,&18,&25
db &33,&BC,&0C,&18,&25
db &37,&76,&FC,&2C,&18
db &B9,&33,&BC,&2C,&25
db &33,&FC,&2C,&0C,&18
db &33,&76,&BC,&38,&25
db &33,&FC,&BC,&38,&25
db &FC,&BC,&2C,&18,&0F

SUELO5B
db &0F,&30,&0C,&7C,&76
db &1A,&24,&3C,&B9,&33
db &24,&1C,&7C,&33,&3B
db &24,&1C,&7C,&33,&3B
db &0F,&24,&1C,&FC,&76
db &1A,&30,&0C,&3C,&FC
db &24,&0C,&3C,&FC,&33
db &1A,&24,&1C,&B9,&3B
db &1A,&24,&1C,&B9,&3B
db &1A,&24,&0C,&3C,&FC
db &24,&1C,&3C,&B9,&76
db &1A,&0C,&7C,&33,&3B
db &1A,&24,&0C,&7C,&33
db &1A,&24,&0C,&7C,&33
db &24,&1C,&FC,&B9,&3B
db &1A,&1C,&7C,&33,&76
db &24,&0C,&1C,&FC,&33
db &1A,&34,&7C,&B9,&33
db &1A,&34,&7C,&FC,&33
db &0F,&24,&1C,&7C,&FC

PLATAFORMA1
db &30,&30,&30,&30,&30
db &B5,&2F,&D0,&3F,&9A
db &2F,&5A,&35,&CF,&B0
db &2F,&0F,&35,&CF,&9A
db &0F,&5A,&65,&CF,&B0
db &A5,&F0,&D0,&DA,&B0
db &30,&30,&C0,&C0,&30
db &6F,&95,&2F,&95,&1A
db &6F,&35,&0F,&35,&1A
db &DA,&35,&5A,&25,&B0
db &CF,&25,&0F,&25,&1A
db &DA,&25,&5A,&25,&B0
db &F0,&85,&F0,&70,&B0
db &60,&C0,&C0,&30,&90
db &B5,&6F,&D0,&3F,&1A
db &6F,&DA,&35,&0F,&B0
db &6F,&CF,&35,&0F,&1A
db &CF,&DA,&25,&0F,&B0
db &E5,&F0,&D0,&5A,&B0
db &30,&30,&30,&30,&30

PLATAFORMA2
db &0C,&0C,&0C,&0C,&0C
db &F9,&A3,&C4,&C3,&AC
db &A3,&56,&49,&FC,&8C
db &A3,&03,&49,&FC,&AC
db &03,&56,&5C,&FC,&8C
db &A9,&FC,&C4,&EC,&8C
db &0C,&0C,&C0,&C0,&0C
db &D6,&D1,&A3,&D1,&06
db &D6,&59,&03,&59,&06
db &EC,&59,&56,&09,&AC
db &FC,&09,&03,&09,&06
db &EC,&09,&56,&09,&AC
db &CC,&81,&FC,&5C,&AC
db &48,&C0,&C0,&0C,&84
db &C9,&D6,&D4,&F3,&06
db &D6,&EC,&59,&03,&AC
db &D6,&FC,&59,&03,&06
db &FC,&EC,&09,&03,&AC
db &DC,&CC,&D4,&56,&AC
db &0C,&0C,&0C,&0C,&0C
Y el programa de CPCBASIC que mueve todo el cotarro. Después de compilarlo, modifica el ASM y cambialo a ORG &2000 (sino, sobreescribe los tiles)

Código: Seleccionar todo

CHAIN"CPCBasic.BAS"
CHAIN"GRAFICOS.BAS"


dim t%(10),i%,cc#,mov#,x%,xb%,y%,yb%,a$
dim buffer#(99)

'Cargamos precalculos direcciones de los tiles
RESTORE tiles
FOR i%=1 TO 10
READ t%(i%)
NEXT

'Cargamos colores
RESTORE paleta
FOR i%=0 TO 15
READ cc#
INK i%,cc#
NEXT
BORDER 11

' nos movemos por el mapa o que?

MODE 0
SPEEDKEY 1,1

x%=39
y%=99
xb%=x%
yb%=y%

GET_TILE @buffer#(0),20,5,XYDIR%(x%,y%)
GOSUB ponsprite

bucle
a$=UPPER$(INKEY$())
IF a$="P" THEN x%=x%+1:mov#=1:IF x%>74 THEN x%=74
IF a$="O" THEN x%=x%-1:mov#=1:IF x%<0 THEN x%=0
IF a$="Q" THEN y%=y%-2:mov#=1:IF y%<0 THEN y%=0
IF a$="A" THEN y%=y%+2:mov#=1:IF y%>179 THEN y%=179
IF mov#=1 THEN mov#=0:GOSUB ponsprite
GOTO bucle


' Dibujamos mapa en pantalla

ponsprite
PUT_TILE @buffer#(0),20,5,XYDIR%(xb%,yb%)
GET_TILE @buffer#(0),20,5,XYDIR%(x%,y%)
CALL &BD19
PUT_TILE t%(9),20,5,XYDIR%(x%,y%)
xb%=x%
yb%=y%
RETURN

'paleta de colores
paleta: DATA 11#,0#,1#,2#,3#,6#,9#,10#,13#,14#,15#,16#,18#,20#,25#,26#

'direcciones de memoria de los tiles
tiles: DATA 20480%, 20580%, 20680%, 20780%, 20880%, 20980%, 21080%, 21180%, 21280%, 21380%
Adjuntos
CPCBASIC.rar
Aqui dentro están los fuentes y la biblioteca GRAFICOS.BAS
(14.76 KiB) Descargado 121 veces

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Mensajepor dinoneno » Mar 18 Sep , 2007 8:40 pm

Pues lo que es el programa en Basic está perfecto. Y las rutinas seguramente también porque funciona en casi toda la pantalla sin ningún problema. Tampoco debe ser algo de la rutina BB19. Aún si la quitas, cuando la piedra llega a esa zona inferior o superior el programa también hace algo extraño, como que parpadea más el sprite. A ver si alguien más experto sabe decirte algo porque yo no encuentro nada extraño.


¿Quién está conectado?

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


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic