Karoshi MSX Community
25 de Septiembre de 2017, 05:26:19 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Calendario Ingresar Registrarse  
Páginas: 1 [2] 3
  Imprimir  
Autor Tema: TUTORIAL: Desarrollo compatible para todas las familias de MSX  (Leído 25007 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Ramones
Visitante
« Respuesta #15 : 13 de Enero de 2007, 08:44:22 pm »


Respecto al PSG#7, no creo que deba ser incluido aquí ya que no se trata de un tema de compatibilidad entre máquinas, es simplemente de una cuestión de no debe de hacerse en ninguna máquina, sea de la generación que sea. Si se investigase un poco más el origen de esa recomendación hecha por los creadores de hardware igual habría tema para hacer un pequeño artículo...

Ahora pondré una inicialización de PSG (para callarlo), pero una cosa te puedo decir sobre tocar esos bits. Matar máquinas, pues hombre, no he visto que mate ninguna, pero si que produce un efecto negativo: En algunos ordenadores (me pasaba en el 2+), los Joysticks dejan de funcionar si toquiteas y cambias esos dos bits altos, como comentas en tu mensaje.

Así pues, no es que sea tema o no sea tema de incompatibilidad, es tema de que si los tocas, además de matar MSX (que sigo flipando con eso), si dejan de funcionar algunas partes de las que controla el PSG. En el 2+ los joysticks y en otro, pues vete tu a saber. Y como se puede evitar, con un código bien sencillito, pues lo evitamos y ya está. Y vale para todos los MSX.

Por lo tanto lo suyo es no tocarlos nunca, y es tan sencillo como enmascarar siempre que escribamos en el mixer, como se ha dicho ya por aquí.

Código:
; ---------------------

; INITPSG

; Inicializa el PSG

; ---------------------



initpsg:



ld b,0Eh
                        di
initpsg0:

ld a,0Eh

sub b

cp 7

jp z,initpsg1





out (0A0h),a

xor a

out (0A1h),a





djnz initpsg0
                        ei   ;  como se quiera o desee
ret

initpsg1:

out (0A0h),a

in a,(0A2h)

and 011000000b

or 000111111b

out (0A1h),a

djnz initpsg0

ret



Y ya puestos, pasando a ASM lo que escribia Andrea:

Código:

; A: Data

writepsg7:
di
and 00111111b
ld b,a
ld a,7
out (0A0h),a
in a,(0A2h)
and 011000000b
or b
out (0A1h),a
ei ; o no, a gustos
ret





Y bueno ya estoy preparando lo del disco. Smiley

Ah, otra rutina que he mandado a algunas personas aunque han pasado de ella. XD Esto es para el tema VDP, una rutina de trasnferencia masiva de datos, valida para VBL o no, y con cualquier número de datos.  (logicamente para pocos datos es lenta, y por ser válida para cualquier cantidad sin múltiplos y demás, pues tambien es lenta).

----------------------
vdp_reg98 y 99 los leo en otro sitio al principio de mis programas, son dos variables, con los datos de la BIOS, ya hay por ahí más ejemplos.


Código:
; -------------------
; FILLVRAM
; HL : Origen datos
; DE : Destino Vram
; BC : Datos
; -------------------


fillvram:


ex de,hl
push de
push bc
call initvramwr
pop bc
pop hl

fillvram_10:
ld a,c
or a
jr z,fillvram_11

ld d,b
ld b,c
ld a,(vdp_reg98)
ld c,a
fillvram_10l:
outi
jr nz,fillvram_10l

ld a,d
or a
ret z
     
ld b,a
fillvram_11:
ld a,(vdp_reg98)
ld c,a
ld a,b
fillvram_12:
ld b,0
fillvram_12l:
outi
jr nz,fillvram_12l
dec a
jr nz,fillvram_12
ret


; -------------------
; INITVRAM
; Inicializa la VRAM
;  HL : Puntero
; A = 1 Escritura
; A = 0 Lectura
; -------------------

initvram:
or a
jr z,initvramrd
initvramwr:
ld a,h
or 64
ld h,a
initvramrd:
di
ld a,(vdp_reg99)
ld c,a
out (c),l
nop
nop
nop
out (c),h
ret




Se puede mejorar el initvram para ahorrar unos ciclos y también cambiando el orden de los parámetros de entrada se puede evitar alguna instrucción, pero bueno, no os lo voy a dar todo hecho. Wink

Y si, yo pondría todo al principio ordenado por tipo (vram, psg, slot), y que quedasen esos mensajes siempre los primeros. ¿Es posible Jon?









 
En línea
andrear1979
Karoshi Newbie
*
Mensajes: 13



Ver Perfil WWW Email
« Respuesta #16 : 14 de Enero de 2007, 01:43:03 am »

Ola todos,

  and thanks Ramones  Grin for your much cleaner explanation
of what I meant.

  I fully agree, this is *not* an incompatibility between MSXes,
as it is part of the standard (I found some details in Konamiman's
MSXTH, chapter 5, section about PSG reg 7).

  But I thought it would be a useful mention, as this is often
an incompatibility between emulators and real MSXes, and
an easily forgotten detail; on my VG8010, joysticks 1 and 2
exchange or one stops working if wrong bits are set, which
is rather bad if you are playing a 2 player - 2 joysticks game...

  Bye friends,

                                                                  Andrea



 
En línea

"... all toghether, good bad and mean, shall last forever in the Software Bin"
Dioniso
Visitante
« Respuesta #17 : 14 de Enero de 2007, 11:51:09 am »

But I thought it would be a useful mention, as this is often
an incompatibility between emulators and real MSXes, and
an easily forgotten detail; on my VG8010, joysticks 1 and 2
exchange or one stops working if wrong bits are set, which
is rather bad if you are playing a 2 player - 2 joysticks game...

Thanks. If you have a look at this you'll see this problem was solved a year ago or so, when the problem was detected.
En línea
Ramones
Visitante
« Respuesta #18 : 14 de Enero de 2007, 12:22:24 pm »

Thanks. If you have a look at this you'll see this problem was solved a year ago or so, when the problem was detected.

El problema Dioniso, o mejor dicho, lo que se busca con este hilo, no es saber si se ha detectado y solucionado en players como PT3, si no, conseguir que la gente no lo cometa nunca más. Smiley

Digamos que la propuesta de este hilo es algo así como "programar con educación". Smiley Konamiman estaría orgulloso de nosotros. Tongue


En línea
Dioniso
Visitante
« Respuesta #19 : 14 de Enero de 2007, 12:40:21 pm »

Lo sé Ramones. Lo que digo es que en enero de 2006 el tema del registro 7 del AY-3-8910 causó muuucho revuelo y si algo tiene claro la gente es que hay que enmascarar los bits sexto y séptimo de susodicho registro.

Tan sólo echa un ojo a cualquier post de cualquier fórum cuando se habla del PSG ... siempre, siempre, siempre sale este tema. Esto lo digo sin malos rollos. Por eso digo que es un tema que hoy día está super rallado y es algo archiconocido.

Tema aparte:
Te mentiría si te dijera que no me toca un poco los mismos, cuando alguien hace comentarios jocosos al respecto; sobre todo porque le he dedicado mucho tiempo al tema y lo sigo haciendo y a veces pienso que no merece la pena (de hecho, en un momento de ralladura total, de sentirme vacío, un hazmereír, la noche del viernes borré todos mis posts del tema de desarrollo de un replayer PT3 más corto -1696 bytes- ). Es un año ya aguantando el mismo rollo y todo tiene un límite.

No quiero salpicarle mielda a Edu. Pero nadie ha dicho nada sobre el fallo de su replayer con el registro 7; léase, en Malaika. Jon lo arregló, actualizó la ROM y punto. La gente sólo recuerda al primer hombre que pisó la luna (o, en este caso, al primer hombre que pisó una mierda en la luna).
En línea
Ramones
Visitante
« Respuesta #20 : 14 de Enero de 2007, 01:12:14 pm »

Bueno, Dioniso. Smiley

No te lo tomes a mal, en mi caso JAMAS he intentado que cuando hablo del tema sea una "pulla" indirecta hacia a ti.

Para que veas que no eres el único que pecaste de pardillo en este ejemplo, te puedo decir que la primera versión de Dahku tenía el bug. Smiley Sip, como suena, yo mismo cometí la estupidez en mi replayer de PT3, y quizás en mi caso es MAS GRAVE que en los vuestros.

Me explico, yo *vendía* Dahku y si encima mataba un MSX, pues menuda cagada por mi parte, una vergüenza MUY GRANDE, y todo por culpa de no testear bien el tema de joystick en el 2+.  Embarrassed

Además, aquello ya pasó no le des más vueltas. Ya sabes, que encima yo estoy contigo. Se pasaron 4 pueblos, ya que no fue correcto atacar eso, y NO atacar a escrituras incorrectas en el VDP como las que acusan algunos juegos de ese Dev. Es decir, si se ataca una cosa, se ataca TODO lo que no es standard.  Es que precisamente el programa que ganó el concurso, escribe en 99 y 98, y ya me he hartado de decir que esto es correcto en MSX2 (lo dice el TH), pero en MSX1 NO LO ES.

En cualquier caso, repito lo mismo. Hay que apuntar esto y tenerlo presente para futuros Devs. De los errores se aprende, y al fin y al cabo Dev es un concurso sin ánimo de lucro.

Ahora, con este hilo, que sería interesante pasar a inglés todo o dejar ordenadito en una web, nadie tiene excusa para no hacerlo  como toca. Smiley

Y no te cortes con lo del PT3. Sería superinteresante dejarlo por aquí. A ver si termino lo que estoy preparando de teclado/joystick ... es que le Coche Fantástico me ha quitado una hora de programación. Wink



En línea
Dioniso
Visitante
« Respuesta #21 : 14 de Enero de 2007, 01:26:47 pm »

No te lo tomes a mal, en mi caso JAMAS he intentado que cuando hablo del tema sea una "pulla" indirecta hacia a ti.

Lo sé, lo sé. No lo decía por ti. Tan sólo me molesta que se hagan comentarios jocosos al respecto (no al principio, pero llega un momento ...)

Citar
Para que veas que no eres el único que pecaste de pardillo en este ejemplo, te puedo decir que la primera versión de Dahku tenía el bug. Smiley Sip, como suena, yo mismo cometí la estupidez en mi replayer de PT3, y quizás en mi caso es MAS GRAVE que en los vuestros.

Bueno, hasta diciembre 2005 / enero 2006 este tema era "desconocido". Mucha gente hizo demos, replayers bajo DOS y BASIC y juegos y nadie se dio cuenta ... tampoco estalló ningún MSX como se decía que podía pasar  Roll Eyes


Citar
Además, aquello ya pasó no le des más vueltas. Ya sabes, que encima yo estoy contigo. Se pasaron 4 pueblos

Seguimos totalmente de acuerdo. Y gracias.

Citar
Y no te cortes con lo del PT3. Sería superinteresante dejarlo por aquí. A ver si termino lo que estoy preparando de teclado/joystick ... es que le Coche Fantástico me ha quitado una hora de programación. Wink

Claro. Aquí tienes/tenéis el archivo de 1696 bytes.
En línea
Ramones
Visitante
« Respuesta #22 : 14 de Enero de 2007, 02:59:33 pm »

Ale, JL, lo siento, más faena para ti. Smiley

Aquí van unos ejemplillos de lectura de teclas y joystick, que seguro que también son interesantes. Lo dejo todo en un LZH, con la Rom de ejemplo ensamblada.  Abajo el código de la misma.

--------------------------------------------------
KEYBOARD / JOYSTICK
-------------------


Aquí van un ejemplo completito de como usar el teclado y el joystick. Este tema es un poco "duro", desde el punto de vista que existen muchas maneras de hacerlo, y además puede ser algo "no standard" cuando hablamos de algunas teclas.

Básicamente, existen muchos tipos de teclado en el ámbito del MSX. No todas las teclas están posicionadas en la misma fila/columna en todos los MSX. Pero cuando hablamos de las teclas comunmente utilizadas en los juegos, si tenemos una misma correspondencia.

Así pues el ejemplo nos demuestra como usar ambos joysticks, el teclado, formas de leer una tecla continuamente y esperar a que el player suelte, y además dos formas de leer el buffer del teclado, con y sin BIOS.

También podemos encontrar en MSX ASSEMBLY (http://map.tni.nl/), un interesante artículo del problema de algunos teclados MSX, que "autopulsan" teclas con la combinación de otras.

Breve explicación del programa.

INITMAIN:

Inicializa la Rom, de una forma sobradamente conocida, posiciona Screen 0 con 40 columnas y unos colores para poder escribir texto y que sea visible. Elimina el keyclick, obliga a la rutina OUTDO a escribir en pantalla e inicializa los textos.

También hace una lectura forzada de teclado para inicializar los bufferes de teclado, y seguidamente espera a que se produzca una interrupción para rellenar adecuadamente el buffer de teclado antiguo.

MAIN:

El bucle principal no tiene mucho misterio. En cada interrupción revisa si hemos pulsado/soltado:

a) Cualquier tecla, y mantiene a 1 hasta que no se suelta
b) Cualquier tecla, y solo mantiene a 1 durante una interrupción. No se volvera a poner a uno hasta que no soltemos y pulsemos de nuevo
c) El boton 1 de Joystick y SPACE, se pondrá a 1 solo cuando pulsemos y soltemos. Mientras no soltemos no se pondrá a 0.
d) Idem con boton 2 Joystick y CTRL, solo que siempre estará pulsado hasta que no soltemos.

Por ultimo imprime los resultados de esa interrupción, espera a que se produzca una nueva interrupción y relee los buffers de teclado.

PANTALLITA:

Esta parte no creo que sea necesaria de explicar. Son unas rutinas rapiditas para imprimir en pantalla con la BIOS.

KEYBOARD AND JOY SUBR:

Aquí empieza la "chicha".

[] Presskey: Activará el flag Cy, si alguna tecla ha sido pulsada o está pulsada.

[] PressKeyTrigger: Activará el flag Cy si alguna tecla es pulsada, pero no lo activará de nuevo hasta que no sea soltada y vuelta a pulsar.

[] CheckFire: Aunque no se usa en los ejemplos, activa el flag Cy cuando el boton 1 del Joystick, Shift, Space, TAB y Return están pulsados. Una manera de tener más de un botón de fuego en nuestras aplicaciones, y evitar el "sobreuso" de SPACE.

[] CheckFireTrigger: Idem que el anterior, peeero, solo se activa el flag Cy, si se pulsa, se suelta y se vuelve a pulsar.

[] CheckFiretrigger2: Para botón 2 de Joystick, CTRL y GRAPH, con "trigger".

Aquí faltaría añadir la rutina Checkfire2, para saber si esta pulsado en cada interrupción sin soltar. Smiley La dejo como ejercicio.


[] CheckfireTriggerall: Pues para saber si cualquier boton de fuego, 1 o 2, de cualquier joystick y teclado esta pulsado y se suelta y se vuelve a pulsar.


[] TECLADO: Esta rutina se ha de llamar al principio de cada interrupción. El hacerlo así es para poder aprovechar las teclas leídas de la BIOS, en caso de usar ese modo. En caso de usar el modo manual, pues lee el teclado. Básicamente lo que hace es pasar el buffer actual a viejo, leer el nuevo teclado y leer los joysticks.

[] JOYSTICK Y JOYSTICK2:

Una manera muy curiosa de leer los joysticks, y aprovecharlos para el mismo player, ya que el ejemplo sería funcionar para un juego de 1 jugador. Lo que hacen estas rutinas, además de leer ambos joysticks (PORT 1 Y 2), es aprovechar el buffer de teclado para marcar si ha sido pulsado alguno de los botones, y las direcciones. De esta manera nuestro bucle principal solo lee "teclas", y no necesita leer teclado por un lado y joysticks por otro lado.

[] READKEYBOARD: Esta rutina solo se ensambla si usamos el modo de lectura de teclado NO BIOS. Basicamente lee todas las filas de teclado y las almacena en keys.

[] TECLAOLD: La madre del cordero. Smiley Le pasamos en A la fila que deseamos consultar con "trigger". Es decir que solo nos devolverá que una tecla de esa fila ha sido pulsada, en caso de que estuviese soltada. Si en el antiguo frame estaba pulsada la devuelve como no pulsada. Smiley

NOTAS FINALES:

Para finalizar, comentar que el programa tiene dos maneras de leer el teclado, aunque ya se ha explicado por encima en las descripciones de las rutinas. Normalmente si hacemos una Rom y no "jugueteamos" con pilas y punteros, la rutina de 38h nos lee automáticamente el buffer del teclado, cual rutina "readkeyboard".  Si la BIOS lo hace, y ya que normalmente salta a 38h, ¿por qué hacerlo nosotros? Wink

El modo "sin bios", es muy recomendable para de todo tipo que parcheen completamente la rutina de interrupción.

Código:
; *** CONSTANTES ***

NEWKEY: equ 0FBE5h
CHGMOD: equ 05Fh

PTRFLG: equ 0F416h
PTRFIL: equ 0F864h
OUTDO: equ 18h
FORCLR: equ 0F3E9h
BAKCLR: equ 0F3EAh
BDRCLR: equ 0F3EBh
LINL40: equ 0F3AEh
CLIKSW: equ 0F3DBh
CSRY: equ 0F3DCh
CSRX: equ 0F3DDh

; *** CONDICIONALES ***

SUPPORT_BIOS_KEYBOARD: equ 1

; La bios solo lee 11 filas en muchos MSX1

    if (SUPPORT_BIOS_KEYBOARD)
KEYROWS: equ 11
  else
KEYROWS: equ 12
endif

; *** PROGRAMA ***

org 04000h
db 041h,042h
dw initmain
ds 12

initmain:
di
im 1
ld sp,0F380h
; Screen 0 colores 15,4,4

ld hl,0404h
ld (BAKCLR),hl
ld a,15
ld (FORCLR),a

; 40  columnas
ld a,39
ld (LINL40),a

xor a
ld hl,0
ld (PTRFLG),a ; Escritura en pantalla
ld (PTRFIL),hl
ld (CLIKSW),a ; Fuera key click
call CHGMOD

call initscreen ; pintamos la pantalla

call teclado ; Teclado inicial

jr mainwait ; Ejecutamos 1 int para rellenar teclado
; y que funcionen las teclas "trigger"
main:

ld a,'0'
ld (keytrigger),a
ld (keynotrigger),a
ld (keybutton1),a
ld (keybutton2),a

; key trigger

call presskeytrigger
jr nc,main1
ld a,'1'
ld (keytrigger),a

main1: ; key no trigger

call presskey
jr nc,main2
ld a,'1'
ld (keynotrigger),a

main2:
; button 1 TRIGGER
ld a,8
call teclaold
and 1
jr nz,main3
ld a,'1'
ld (keybutton1),a
main3:
; button 2 NO TRIGGER
ld a,(keys+6)
and 2
jr nz,mainend

ld a,'1'
ld (keybutton2),a

mainend:
; print results
call printresult

mainwait:
ei
halt
call teclado
jr main

; *** PANTALLITA ***

; --------------------
; INISCREEN
; Inicializa los valores
; y la pantalla
; ---------------------

initscreen:

ld a,'0'
ld (keytrigger),a
ld (keynotrigger),a
ld (keybutton1),a
ld (keybutton2),a

; pintamos

call printlogo
call printkeys
call printresult
ret


printresult:
ld de,(locatetxtrtrigger)
ld a,(keytrigger)
call printchar

ld de,(locatetxtrnotrigger)
ld a,(keynotrigger)
call printchar

ld de,(locatetxtrbutton1)
ld a,(keybutton1)
call printchar

ld de,(locatetxtrbutton2)
ld a,(keybutton2)
jp printchar





printkeys:
ld de,(locatetxttrigger)
ld hl,txttrigger
call print
ld de,(locatetxtnotrigger)
ld hl,txtnotrigger
call print
ld de,(locatetxtbutton1)
ld hl,txtbutton1
call print
ld de,(locatetxtbutton2)
ld hl,txtbutton2
jp print



printlogo:
ld de,(locatetxtlogo)
push de
ld hl,txtlogo
call print
pop de
inc e
ld hl,txtlogo2
jp print



; ----------------
; PRINTCHAR
; CutrePrintChar
; DE: XY
; A : Char
; -----------------

printchar:
ld (CSRY),de
RST OUTDO
ret

; ------------------
; PRINT
; CutrePrint
; DE : XY
; HL : Puntero a texto
; ------------------

print:
ld (CSRY),de
print0:
ld a,(hl)
inc hl
or a
ret z
push hl
RST OUTDO
pop hl
jr print0




; *** KEYBOARD AND JOY SUBR ***



; -----------------
; PRESSKEY
; Press any key
; -----------------

presskey:

ld hl,keys
ld b,KEYROWS
presskey0:
ld a,(hl)
inc hl
inc a
jr nz,checkfirepush
djnz presskey0
or a
ret


; -----------------
; PRESSKEY
; Press any key trigger
; -----------------

presskeytrigger:


ld b,KEYROWS
ld c,0

presskeytrigger0:
push bc
ld a,c
call teclaold
pop bc
inc a
jr nz,checkfirepush
inc c
djnz presskeytrigger0
or a
ret



;----------------
; CHECKFIRE
; Chequea fuego
; Cy = 1 Si
; ----------------

checkfire:

ld a,(keys+8)
and 1
jr z,checkfirepush
ld a,(keys+7)
bit 3,a
jr z,checkfirepush
bit 7,a
jr z,checkfirepush
ld a,(keys+6)
and 1
jr z,checkfirepush
or a
ret

checkfirepush:
scf
ret




;----------------
; CHECKFIRETRIGGER
; Chequea fuego
; Cy = 1 Si
; ----------------

checkfiretrigger:

ld a,8
call teclaold
and 1
jr z,checkfirepush
ld a,7
call teclaold
bit 3,a
jr z,checkfirepush
bit 7,a
jr z,checkfirepush
ld a,6
call teclaold
and 1
jr z,checkfirepush
or a
ret


; -------------------------
; CHECKFIRETRIGGERALL
; Chequea AMBOS fires 1 y 2
; --------------------------

checkfiretriggerall:

call checkfiretrigger
ret c



; ----------------------
; CHECKFIRETRIGGER2
; Checkfiredos (CTRL / GRAPH)
; ----------------------

checkfiretrigger2:
ld a,6
call teclaold
bit 2,a
jr z,checkfirepush
and 2
jr z,checkfirepush
or a
ret


; ------------------
; TECLADO
; Lee el mapa del
; teclado
; ------------------

teclado:
; pasamos lo anterior a old
di
ld hl,keys
ld de,keysold
ld bc,KEYROWS
ldir

if (!SUPPORT_BIOS_KEYBOARD)
call readkeyboard
else
ld hl,NEWKEY
ld de,keys
ld bc,KEYROWS
ldir

endif

call tecladogen
ei
ret

tecladogen:
call joystick

joystick2:

ld a,0Fh
out (0A0h),a
in a,(0A2h)
and %10111111
or %01000000
out (0A1h),a

ld a,0Eh
out (0A0h),a
in a,(0A2h)
or %11000000
ld hl,keys+8

bit 0,a
call z,set_arriba

bit 1,a
call z,set_abajo

bit 2,a
call z,set_izq

bit 3,a
call z,set_derecha

bit 4,a
call z,set_fire

bit 5,a
call z,set_fire2
ret





joystick:
ld hl,keys+8
ld a,0Fh
out (0A0h),a
in a,(0A2h)
and %10111111

out (0A1h),a

ld a,0Eh
out (0A0h),a
in a,(0A2h)
or %11000000

bit 0,a
call z,set_arriba

bit 1,a
call z,set_abajo

bit 2,a
call z,set_izq

bit 3,a
call z,set_derecha

bit 4,a
call z,set_fire

bit 5,a
call z,set_fire2
ret

set_arriba:
res 5,(hl)
ret
set_abajo:
res 6,(hl)
ret
set_izq:
res 4,(hl)
ret
set_derecha:
res 7,(hl)
ret
set_fire:
res 0,(hl)
ret
set_fire2:
ld hl,keys+6
res 1,(hl) ; Control
ret

if (!SUPPORT_BIOS_KEYBOARD)

; -------------------------
; READKEYBOARD
; Lee el teclado tal cual
; Y lo mete en su sitio
; -----------------------

readkeyboard:
ld b,KEYROWS ; Numero de filas a leer
ld hl,keys ; Buffer teclas
readkeyboard0:
push bc
ld a,KEYROWS
sub b ; Para empezar por la 0
call keyboard
ld (hl),a
inc hl
pop bc
djnz readkeyboard0
ret

keyboard:
ld      c,a
in      a,(0AAh)
and     0F0h
or      c
out     (0AAh),a
in      a,(0A9h)
ret

endif

; --------------
; TECLAOLD
; A : Fila
; -----------

teclaold:
push    hl
ld      c,a
ld      hl,keys
call    sumahl
ld      a,(hl)
ld      b,a
ld      a,c
ld      hl,keysold
call    sumahl
ld      a,(hl)
xor     b
cpl
or      b
pop     hl
ret

; *** GENERICAS ***

; -------------
; SUMAHL
; HL = HL + A
; ------------

sumahl:

add     a,l
ld      l,a
ret nc
inc h
ret

; *** DATA ***

locatetxtlogo: db 1,5
txtlogo: db "KEYBOARD AND JOYSTICK EXAMPLE.",0
txtlogo2: db "------------------------------",0


locatetxttrigger: db 4,1
txttrigger: db "KEY TRIGGER    : ",0
locatetxtnotrigger: db 6,1
txtnotrigger: db "KEY NO TRIGGER : ",0
locatetxtbutton1: db 8,1
txtbutton1: db "KEY BUTTON1    : ",0
locatetxtbutton2: db 10,1
txtbutton2: db "KEY BUTTON2    : ",0



locatetxtrtrigger: db 4,21
locatetxtrnotrigger: db 6,21
locatetxtrbutton1: db 8,21
locatetxtrbutton2: db 10,21




; 8k Rom

ds 06000h - $,0FFh



;  *** VARIABLES ***


keys: equ 0E000h ; Tecla actual
keysold: equ keys + KEYROWS ; Para tecla old
keytrigger: equ keysold + KEYROWS
keynotrigger: equ keytrigger + 1
keybutton1: equ keynotrigger + 1
keybutton2: equ keybutton1 + 1





En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


Ver Perfil WWW Email
« Respuesta #23 : 14 de Enero de 2007, 03:58:42 pm »

No te lo tomes a mal, en mi caso JAMAS he intentado que cuando hablo del tema sea una "pulla" indirecta hacia a ti.

Lo sé, lo sé. No lo decía por ti. Tan sólo me molesta que se hagan comentarios jocosos al respecto (no al principio, pero llega un momento ...)

Dioniso, siento si he molestado con el comentario Sad Como he dicho, por mucho que se montara, no vi ni veo el error tan grave (como ha dicho Andrea, solo le ha pasado que le intercambiaba joystciks, NO que rompiera nada) y por eso me lo tomo mas a la ligera. Y tampoco pensaba que a estas alturas aun afectara. Aun asi, no volvere a referirme al tema, y te pido perdon, en serio. Es que no suelo tomarme la vida tan en serio, bastante mierda es ya como para hacerla mas dura. Sigue con el trabajo PT3 (y 1bit, y demas), que es muy bueno. Animo payo Smiley

P.D.: Creo que he puesto algun quote de mas  Undecided ?
Citar
Citar
« Última modificación: 14 de Enero de 2007, 04:00:50 pm por MsxKun » En línea

--

Cindy Lauper She Bops!
Dioniso
Visitante
« Respuesta #24 : 14 de Enero de 2007, 04:05:36 pm »

Dioniso, siento si he molestado con el comentario Sad Como he dicho, por mucho que se montara, no vi ni veo el error tan grave (como ha dicho Andrea, solo le ha pasado que le intercambiaba joystciks, NO que rompiera nada) y por eso me lo tomo mas a la ligera. Y tampoco pensaba que a estas alturas aun afectara.

Las 1000 primeras veces sí me hizo gracia.

No te preocupes, sé que no había maldad en tu comentario. No sé si has comprendido por qué me molesta "ahora".
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


Ver Perfil WWW Email
« Respuesta #25 : 14 de Enero de 2007, 04:11:17 pm »

No te preocupes, sé que no había maldad en tu comentario. No sé si has comprendido por qué me molesta "ahora".

Pues no  Huh
En línea

--

Cindy Lauper She Bops!
Dioniso
Visitante
« Respuesta #26 : 14 de Enero de 2007, 04:31:45 pm »

Dioniso, siento si he molestado con el comentario Sad Como he dicho, por mucho que se montara, no vi ni veo el error tan grave (como ha dicho Andrea, solo le ha pasado que le intercambiaba joystciks, NO que rompiera nada) y por eso me lo tomo mas a la ligera. Y tampoco pensaba que a estas alturas aun afectara.

Las 1000 primeras veces sí me hizo gracia.

No te preocupes, sé que no había maldad en tu comentario. No sé si has comprendido por qué me molesta "ahora".

Que se ha transformado en una coletilla cuando se habla del PSG. Que tú y otros no lo decís con maldad pero que tras 1000 veces ya no me hace tanta gracia y me jode. Que se me quitan las ganas de hacer nada para vosotros. Que intento ayudar y todo sale siempre alrevés. Lo entiendes ahora?

No sé, me estoy empezando a rallar. Mejor dejamos el tema por ahora. La verdad es que se han juntado muchas cosas; de mi vida real y de esta otra ... A veces vengo aquí para evadirme y ... en fin, el resto ya lo has podido ver.
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


Ver Perfil WWW Email
« Respuesta #27 : 14 de Enero de 2007, 04:48:08 pm »

Dioniso, siento si he molestado con el comentario Sad Como he dicho, por mucho que se montara, no vi ni veo el error tan grave (como ha dicho Andrea, solo le ha pasado que le intercambiaba joystciks, NO que rompiera nada) y por eso me lo tomo mas a la ligera. Y tampoco pensaba que a estas alturas aun afectara.

Las 1000 primeras veces sí me hizo gracia.

No te preocupes, sé que no había maldad en tu comentario. No sé si has comprendido por qué me molesta "ahora".

Que se ha transformado en una coletilla cuando se habla del PSG. Que tú y otros no lo decís con maldad pero que tras 1000 veces ya no me hace tanta gracia y me jode. Que se me quitan las ganas de hacer nada para vosotros. Que intento ayudar y todo sale siempre alrevés. Lo entiendes ahora?

No sé, me estoy empezando a rallar. Mejor dejamos el tema por ahora. La verdad es que se han juntado muchas cosas; de mi vida real y de esta otra ... A veces vengo aquí para evadirme y ... en fin, el resto ya lo has podido ver.

Entendido y dejado, solo recuerda que algunos podemos tener musica gracias a ti. Smiley. Venga, espero que esas cosillas que dices tiren para el lado bueno, ok?
En línea

--

Cindy Lauper She Bops!
Dioniso
Visitante
« Respuesta #28 : 14 de Enero de 2007, 04:57:31 pm »

Gracias.
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



Ver Perfil WWW Email
« Respuesta #29 : 14 de Enero de 2007, 07:59:05 pm »

Pero nadie ha dicho nada sobre el fallo de su replayer con el registro 7; léase, en Malaika. Jon lo arregló, actualizó la ROM y punto. La gente sólo recuerda al primer hombre que pisó la luna (o, en este caso, al primer hombre que pisó una mierda en la luna).

En el caso del Caruso, el problema es de inicialización Cry. Es decir, para eliminar el "problema", era tan fácil como llenar de "0"s la zona de RAM destinada a las variables del raplayer antes de inicailizar el mismo (cosa que se me olvidó hacer en el Malaika. Por lo demás, estoy de acuerdo con los comentarios en este hilo acerca de que fué exagerado todo lo que ocurrió el año pasado... pero no creo que nadie siga hablando de ello y apuntántode a ti por el error, Dioniso: y si hay alguien, solo dime a quien hay que matar  2 Guns Firing

Yo solo espero que sigas en la cresta de la ola y que nos regales un nuevo juego con la misma calidad del Magical Stones!. Por cierto, el TT-Virus es un proyecto abandonado, o podremos ver la luz del mismo??  Wink

Un abrazo, Alfonso!
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
Páginas: 1 [2] 3
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!