Se puede sacar el Acumulador desde Basic?¿

Sistemas 464, 664, 6128, 472, ...
Avatar de Usuario
mentalthink
Amiga 2500
Amiga 2500
Mensajes: 2840
Registrado: 11 Abr 2010, 15:06
Gracias dadas: 45 veces
Gracias recibidas: 14 veces

Se puede sacar el Acumulador desde Basic?¿

Mensajepor mentalthink » 18 Feb 2013, 15:20

Bueno el tema es que me pusé ayer un ratillo con el ASM, y con el Basic de CPC, que me encantá, y al ver que al llamar a las rutinas del Firware desde el Basic, se gana una velocidad asombrosa.... me preguntaba si se puden hacer "trapicheos" como sacar la info que tiene el Acumulador del Z80 directamente desde basic...

Estuve pensando que con el peek, supongo que se puede hacer, lo que no sé si la dirección de memoria es siempre la misma, o es algo que cambia... en ese caso se podría sacar la info de los registros HL, DE, BC etc...

Supongo que no séra muy complejo mezclar el Basic con el ASM, y creo que inclusive se podrían hacer librerias para hacer juegos en medio basic o aplicaciones con un desempeño muy rápido... Creo que esto es lo típico llamado RSX, pero con la facilidad que tienen a dia de hoy los editores de los Emuladores, quizás se pudiera generar un código basic más avanzado sabiendo como llamar a los entresijos del ASM...

Saludos!!!

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Se puede sacar el Acumulador desde Basic?¿

Mensajepor mcleod_ideafix » 18 Feb 2013, 15:26

El valor del acumulador cambia continuamente, ya que es precisamente el registro destino de la gran mayoría de operaciones aritmético-lógicas, por lo que sacar su valor para BASIC... no sé qué sentido tiene. Otra cosa es que tú quieras llamar a una rutina de la ROM cuyo resultado lo saca en el acumulador. En ese caso, desde ASM llama a la rutina y que al volver de ella, tu código ASM guarde dicho valor en alguna posición de memoria que puedas examinar con PEEK. No sé en el Amstrad, pero en el Spectrum, cuando llamas a código máquina con USR, el valor de vuelta de USR es el valor que tenga el registro BC, así que si quisiera hacer esto con el Spectrum, lo que haría a la vuelta de la rutina es cargar el registro A en C, poner B a 0, y volver con RET.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3012
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 356 veces
Contactar:

Re: Se puede sacar el Acumulador desde Basic?¿

Mensajepor zup » 18 Feb 2013, 15:38

Mírate la instrucción BASIC call, pero no confíes en el manual del CPC.

En el libro "Rutinas en Lenguaje Máqina para Amstrad" (Joe Pritchard), se describe el funcionamiento de call. Hay tres modos:
- Ejecutar código máquina.
- Ejecutar código máquina pasándole variables por valor.
- Ejecutar código máquina pasándole variables por referencia.
- ...más alguna variante referida a cadenas.

En el primer caso, ejecutas el código y punto.
En el segundo caso, se te pasa un puntero a un área que contiene los valores de las variables. Con esto puedes pasar valores del BASIC al código máquina, pero no puedes modificar esos valores (o más bien las modificaciones se perderán al retornar).
En el tercer caso, vas a disponer de punteros a las direcciones de memoria de las variables. Podrás (o no) leer las variables y modificarlas para utilizarlas después en BASIC, o leer unas y escribir otras, o cualquier cosa que se te ocurra.

Yo no sé mucho de CPCs (el libro es de mi mujer, que no hace nada con el CPC desde los 80), seguro que otras personas te pueden ilustrar mejor. O si no, intenta encontrar el libro que te he citado y saca tus propias conclusiones.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
mentalthink
Amiga 2500
Amiga 2500
Mensajes: 2840
Registrado: 11 Abr 2010, 15:06
Gracias dadas: 45 veces
Gracias recibidas: 14 veces

Re: Se puede sacar el Acumulador desde Basic?¿

Mensajepor mentalthink » 18 Feb 2013, 16:03

El valor del acumulador cambia continuamente, ya que es precisamente el registro destino de la gran mayoría de operaciones aritmético-lógicas


De momento estó ya lo tengo claro, porque pensaba que era una posición fija, si siempre se guardan cosas pensaba que sería un sitio fijo... lo de tener sentido, hombre yo lo veo igual que cuando picas el código en ASM, tienes que saber que estás haciendo aunque sea una suma... Si se puede llamar desde el Basic, pues algo se podrá hacer con él.

Sobre lo que me comentas ZUP, me lo voy a mirar, de hecho recuerdo cuando empecé a ver el libro del Amstrad, que me llamo mucho la atención eso de que los Calls, tuvieran varios parametros, recordaba con 8 años que los ponia al voleo a ver que pasaba, pero ni sabía que eran... También gracias por eso de que se pasan los valores por copia o referencia... La verdad que el Basic del Amstrad es una gozada...

Saludetes!!!

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Se puede sacar el Acumulador desde Basic?¿

Mensajepor mcleod_ideafix » 18 Feb 2013, 21:08

Creo que el libro que necesitas es éste: "Domine el Código Máquina en su Amstrad CPC464"
http://www.amstrad.es/programacion/ensa ... quina.html
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
mentalthink
Amiga 2500
Amiga 2500
Mensajes: 2840
Registrado: 11 Abr 2010, 15:06
Gracias dadas: 45 veces
Gracias recibidas: 14 veces

Re: Se puede sacar el Acumulador desde Basic?¿

Mensajepor mentalthink » 18 Feb 2013, 21:37

Gracias McLeod, si si todos estos los tengo "enfiláos", poquito a poco tampoco es una cosa que me corra mucha prisa... pero esas dudillas así que se me ocurren, pues supongo que por aquí es más sencillo encontrar una respuesta...

Saludos!!!

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 840
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 18 veces
Gracias recibidas: 63 veces

Re: Se puede sacar el Acumulador desde Basic?¿

Mensajepor Namek » 18 Feb 2013, 21:44

En el Spectrum es muy facil pasar el valor de cualquier registro a BASIC, ya que la funcion USR que se usa para saltar a la direccion de memoria donde esta el programa en ASM devuelve como resultado el valor que tenga el registro BC en el momento de retornar al BASIC, por tanto si tenemos un programa en ASM que carga un valor en BC, por ejemplo LD BC,1 y luego RET, al saltar al programa en ASM con PRINT USR "direccion del programa" veremos en pantalla el valor 1 que es lo que tiene BC en el momento del RET, si en el AMSTRAD no hay nada parecido lo mas facil seria meter el valor que queramos recuperar desde BASIC en una direccion de memoria fija y leer el valor con peek.


Volver a “Amstrad CPC”

¿Quién está conectado?

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