Karoshi MSX Community
06 de Julio de 2021, 12:14:06 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]
  Imprimir  
Autor Tema: Pasar ASM a BASIC  (Leído 5675 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Tragamanzanas
Karoshi Fan
**
Mensajes: 71


« : 08 de Octubre de 2009, 05:33:38 pm »

Estoy intentando poner en un programa de Basic algunas rutinas en Código Máquina, pero no puedo. Se que las tengo que cargar con Datas y luego llamarlas con Defusr, pero ¿como saco los códigos de operación del listado ASM? Hay alguna opción a la hora de compilar??

Otra duda, ¿hay alguna forma de acceder a los registros desde Basic? En teoria y posiblemente en la práctica no, pero por preguntar que no quede.
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #1 : 08 de Octubre de 2009, 06:32:09 pm »

Respecto a tu primera pregunta....a manita... o miras el BIN o COM que generas (con un visor hexadecimal, por ejemplo la tecla F3 (opcion de visionado 3) del Total Comander) y lo vas pasando.
O miras la lista de Opcodes y a ir copiando.
(abajo te dejo unos enlaces)

Y de la segunda pregunta...creo q no hay forma de poner valores en los registros.

Una cosa te digo:
dentro de la rutina de ASM , LO PRIMERO HAZ PUSH de TODOS LOS REGISTROS !!! que a ver si luego no vuelve al Basic.

Enlaces :
Total Comander : http://www.ghisler.com/
Lista de Opcodes de ASM: http://map.grauw.nl/resources/z80instr.php

Ya me dirás que tal Wink
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
Tragamanzanas
Karoshi Fan
**
Mensajes: 71


« Respuesta #2 : 09 de Octubre de 2009, 08:55:14 am »

Gracias j4mk3.
Empezaré con el Total Comander a ver que tal, ya que la otra opción es mas pesada.
Espero aclararme mas con este programa, ya que algo he intentado con el NO$MSX pero sin resultados.

Ya te contaré el resultado...
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #3 : 09 de Octubre de 2009, 10:32:46 am »

Si no recuerdo mal, cuando pasas un entero a la rutina en código máquina desde BASIC, éste se carga directamente en el acumulador (registro A) y toma de vuelta el valor de salida del acumulador. Por lo tanto, con un pequeño programa en ensamblador previo podrías tanto leer como escribir los registros. Para pasar cadenas, enteros largos, flotantes, etc, hay posiciones de memoria para hacerlo a través de punteros, pero lo cierto es que no recuerdo cómo. Creo que en el libro "más allá del BASIC" se detallaban estas instrucciones. Si no, puede que el Red Book tenga algo.

Pero si empiezas con el ensamblador, sigue con él. Si lo que pretendes es presentar algo al concurso de BASIC de Konamito, tienes que restringirlo a las rutinas llamables desde BASIC, con lo que no tendrás acceso directo de lectura/escritura a los registros, excepto al acumulador.

Ánimos.
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #4 : 09 de Octubre de 2009, 11:27:44 am »

Me da palo escribir....
Así que pillo el Movil + "potoxop" y ...
MODO FOTOCOPIAS de los 80 ON !

Es algo más complejo de lo que cita pitpan
(fuente MSX-BASIC Manual de referencia para programacion SONY HIT BIT)


Visto esto, si hay q pasar muchos parametros, usaria una cadena de texto y luego ya lo trataria en ASM para coger bytes.
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
kabish
Karoshi Maniac
****
Mensajes: 470


caspaflims@hotmail.com
« Respuesta #5 : 09 de Octubre de 2009, 11:56:26 am »

Lo tienes explicado en el libro "Lenguaje maquina para msx" de Joe Pritchard. Supongo que lo tendras en la red escaneado -creo que en la pagina de konamito-

En las paginas 40 a 46 de dicho libro tienes explicado como pasar parametros entre basic y cm usando la instruccion defusr. Esta en castellano.

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


Kimochi-ii


WWW Email
« Respuesta #6 : 09 de Octubre de 2009, 02:47:59 pm »

Pa mi lo mas como es Pokear directamente una direccion RAM y que la rutina lea de esa direccion. Y a cascarla. Pero para cadenas seria algo pesao.  Saimazoom
En línea

--

Cindy Lauper She Bops!
OKI09
Karoshi Maniac
****
Mensajes: 275



WWW Email
« Respuesta #7 : 09 de Octubre de 2009, 02:58:53 pm »

Otra opcion seria, poner los valores que quieras pasar en posiciones de memoria mediante pokes que
meterias en los registros que tu quieras en el programas ASM.

Despues los podrias recuperar con peek.

Seria otra opcion, digo yo. Grin
En línea

La derrota no es una opción y no hay excusas.
"Parasiempre"
mohai
Karoshi Fan
**
Mensajes: 80



« Respuesta #8 : 10 de Octubre de 2009, 03:11:59 pm »

Para escribir en los registros, nada más fácil que modificar el programa en código máquina, desde el BASIC usando POKEs.

Por ejemplo, supongamos que tu programa va a así:

ld a,1
ld h,255
ld l,3
ld bc,100
.
.
.

A la hora de ensamblar, fíjate dónde está el valor de cadad registro. Luego desde BASIC POKEas ahí y ya lo tienes. Ten en cuenta que si usas LDs de 16 bits, tendrás que POKEar de forma diferente.

También lo puedes hacer de forma elegante, haciendo una tabla en memoria con los valores de los registros y luego la recuperas desde ASM.
En línea
Tragamanzanas
Karoshi Fan
**
Mensajes: 71


« Respuesta #9 : 10 de Octubre de 2009, 04:40:19 pm »

Correcto pitpan. Pretendía presentar algo al concurso BASIC de Konamito, ya que creo que si queremos que el tema retro continue, debemos ayudar en lo que podamos, y que solo se hayan presentado 3 juegos, no es mucho. Estoy seguro que la mayoría que sabe programar en ensamblador tambien lo sabe hacer en Basic (puede que lo tengan algo oxidado), pero no ocurre lo mismo al contrario. El juego que casi había terminado me ha quedado algo lento, y despues de conocer el Asm no es lento, es mmmuuuuyyy   leeeennnntooooo, con lo que es inviable presentarlo, pero he pensado terminarlo con la ayuda de un par de rutinas en ensamblador para acelerarlo, aunque solo sea para mi satisfación personal.
Ya he leido el libro "Lenguaje maquina para msx" de Joe Pritchard, donde habla de la instrucción Defusr y USR y la verdad es que lo explica muy bien, pero me parece que lo de pokear en direcciónes RAM y leerlo desde la rutina es la opción que voy a usar.
En línea
Páginas: [1]
  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!