Karoshi MSX Community
06 de Julio de 2021, 12:35:05 am *
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 Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: Estrellado con el Assembler...  (Leído 11653 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« : 31 de Mayo de 2007, 09:35:09 am »

Buen comienzo tengo yo.

He conseguido imprimir un caracter en la pantalla usando las rutinas BIOS. Bien, hasta aquí perfecto.

Pero hay madre de todos los corderos, yo siempre voy a mas. Ahora quiero imprimir una cadena definida. Lo he intentado todo, pero como soy Lerdosky, lo unico que me hace es sacar basura y bloquearse (estoy con el BlueMSX). Veamos la rutina de marras:

; Rutina para imprimpir una cadena de texto en la pantalla (Screen 0)
; recogiendola de una cadena definida (DATOS:)

CHPUT:   EQU   &H00A2
CHGMOD:   EQU   &H008C

      LD    A, 0      ; Seleccionamos el modo de pantalla (0=Screen 0)
      CALL   CHGMOD   ; Cambio a Screen 0

      LD    HL, DATOS   ; Cargo en HL la cadena de texto
BUCLE:      LD   A, (HL)   ; Se coge el siguiente caracter de la cadena
      CP   "$"      ; Se compara el caracter de A con $
      JR   Z, FIN      ; Si es $, salta a FIN
      PUSH   HL      ; Sino...: GUARGO HL
      CALL   CHPUT      ; El caracter de A se imprime
      POP    HL      ; Se recupera la cadena
      INC    HL      ; Coge el siguiente caracter de la cadena
      JR   BUCLE      ; Repite el Bucle

FIN:      END         ; Fin de programa

DATOS:   DEFM    "Esta es la cadena de texto que quiero imprimir"
      DEFB   &H07, &H07, &H07, "$"

               ; El "$" es el último caracter de la cadena
               ; El &H07 no tengo ni idea de que es...


Despues de examinar la rutina 100 veces, me rindo, me veo incapaz de arreglarlo. Entiendo la rutina, ese no es el problema, pero no se porque no funciona Sad

Bueno, almas caritativas. Dadme un poco de tregua y dedidme... ¿dónde está el fallo?

Agradecido como para invitar a unas cervezas Smiley
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #1 : 31 de Mayo de 2007, 10:12:03 am »

¡Hola!

¿Estás llamando la rutina desde el basic? Si es así, sustituye el FIN: END por un FIN: RET, porque siempre debes volver al basic con RET, si no no volverá y se acabará colgando.

No recuerdo si CHPUT modifica el registro HL, si no es así (que alguien lo confirme, please, ahora mismo no tengo tablas aquí) te puedes ahorrar los PUSH HL y POP HL

Si así no te funciona, entonces hay que ver qué parámetros necesita CHPUT. No la uso nunca, pero supongo que A contendrá el caracter a imprimir, así que por lo que veo la rutina debe funcionar.

Un saludo  Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Dioniso
Visitante
« Respuesta #2 : 31 de Mayo de 2007, 10:22:20 am »

Je, je. Es eso. El RET ... no me ha pasado veces  Cheesy
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #3 : 31 de Mayo de 2007, 10:33:24 am »

Shinzon: Pon un RET en tu vida! Wink. Efectivamente, tu rutina debe funcionar perfectamente.  Wink
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.]
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« Respuesta #4 : 31 de Mayo de 2007, 10:49:23 am »

Yuuujjjuuuuu. Sabia que el fallo estaba en esa maldita línea, pero no sabía porque. Había comprobado toda la rutina, pero...

Tomo nota de lo del RET para el basic. Eso si que no lo sabia. La verdad es que lo estaba probando con el RSCII, pero la rutina colgaba el "msx". Aun así ha sido muy interesante. Creo que esto me va a gustar... Smiley

Por cierto, la rutina BIOS CHPUT si modifica el par de registros HL. De hecho, creo que modifica todos.

Graccie, bambinos! Estais invitados a una buena cerveza fría. Pasarme la factura Smiley
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #5 : 31 de Mayo de 2007, 11:52:37 am »

En lugar de usar

LD A,0
CALL CHGMOD

Puedes usar

CALL INITXT

Y, además,

XOR A

equivale a

LD A,0

aunque cambia las banderas de estado (registro F)

Por otra parte, acostúmbrate a no usar el modo "consola" para volcar caracteres. Si lo que quieres es hacer juegos, empieza a escribir directamente a VRAM. La BIOS es de mucha ayuda. Te pongo una versión modificada de tu rutina:

CALL INITXT ; SCREEN 0

ld HL,NAMTBL+POS_X+POS_Y*40 ; equivalente a LOCATE X,Y. NAMTBL para SCREEN 0 es igual a 0000h
ld de,TEXTO

BUCLE:

ld a,[de]
inc de
cp '$'
jr z,FIN

call WRTVRM ; escribe el contenido del acumulador A en la posición de VRAM a la que apunta HL. No modifica registros.
inc hl
jr BUCLE

FIN:
ret

Estudia la rutina y haz todas las modificaciones que se te ocurran. De todos modos, lo de usar como terminador el carácter "$" sólo tiene sentido para MSX-DOS y MS-DOS/Windows. Lo más cómodo es predefinir la longitud de la cadena, o usar un terminador más sencillo de tratar, como por ejemplo, 00h.

Con 00h podrías ahorrarte el CP '$' y substituirlo por OR A. Más rápido y más compacto.

En fin. Bienvenido al mundo del asm.
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #6 : 31 de Mayo de 2007, 12:11:39 pm »

Eso, eso, animándote con pequeños programas y siguiendo los consejos de Edu, prácticamente has caído en el lado oscuro y lo peor... ¡ya no hay vuelta atrás!  Grin

 :guitar:
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Shinzon
Karoshi Lover
***
Mensajes: 116


Email
« Respuesta #7 : 31 de Mayo de 2007, 12:20:29 pm »

Entre esta tarde y mañana me pondré con la rutina de Robsy -gracias, se ve que aún existen caballeros jeje- a estudiarla y analizarla. Me he propuesto meterme de lleno en esto, y cuando la cabeza se me hincha... -la de arriba, ¡mal pensados!- no hay quien me pare.

En fin. En cualquier caso, la rutina que yo he puesto, no me sirve. He efectuado las modificaciones oportunas y no hay manera. Se queda colgado. Estoy empezando a sospechar del BlueMSX. He decir, que la rutina en cuestión, está extraida del Technical HandBook of MSX2, de ASCII Corporation. La rutina entera de ASCII me funciona perfectamente, pero la parte en cuestión, me tira de los pelos...

Si quereis la pongo entera por aquí, para a ver si sabeis decirme donde he metido el pezuño.

Y si, es cierto, siento la llamada del lado oscuro... ¡del assembler! Ya me habeis contaminado. Ahora estoy corrupto. Solo me falta saber quien es "Casco Oscuro" jajajajajaja

Saludos again te again!
En línea
Dioniso
Visitante
« Respuesta #8 : 31 de Mayo de 2007, 12:28:08 pm »

Solo me falta saber quien es "Casco Oscuro" jajajajajaja

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



WWW Email
« Respuesta #9 : 31 de Mayo de 2007, 12:30:59 pm »

Que me parto!!!!!  Cheesy Cheesy Cheesy Cheesy Cheesy Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin
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.]
doraemonppc
Karoshi Maniac
****
Mensajes: 358



WWW
« Respuesta #10 : 31 de Mayo de 2007, 12:35:06 pm »

Brutal!
Se le salula lord darth vader
En línea

- El ensamblador con sangre entra-
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #11 : 31 de Mayo de 2007, 12:50:14 pm »

jajajajajajaja  Cheesy  Cheesy  Cheesy

Veo que tenemos los mismos monitores ESI Near, Mr.Dioniso  Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Dioniso
Visitante
« Respuesta #12 : 31 de Mayo de 2007, 01:00:13 pm »

Veo que tenemos los mismos monitores ESI Near, Mr.Dioniso  Wink

Bueno, esto fue en casa de un colega y una colega ... yo, ahora, sólo tengo portátil para programar. De ese ordenador salieron los samples del BEEPERTRON, una versión metal con guitarraca del tema intro del mismo juego y ...  Roll Eyes
En línea
SapphiRe_MSX
Visitante
« Respuesta #13 : 31 de Mayo de 2007, 01:48:28 pm »

JUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASSSSSSSSSSS Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin Grin
En línea
WYZ
Visitante
« Respuesta #14 : 31 de Mayo de 2007, 02:08:56 pm »

Juas juas juas! Dioniso en el Bar Daver.  Grin
En línea
Páginas: [1] 2
  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!