Llamar a |b desde ensamblador.

Programando el Amstrad en Ensamblador.
Reglas del Foro
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.

De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
dragon131
Forum Addict
Forum Addict
Mensajes: 486
Registrado: Mar 08 Jun , 2010 12:36 pm

Llamar a |b desde ensamblador.

Mensajepor dragon131 » Vie 19 Ago , 2016 10:20 am

Hola, ¿alguien sabe si se puede llamar a esta rsx desde ensamblador?. No tengo muy claro como funciona el tema de las rsx porque no tengo ramcards ni nada.

La idea es que me gustaria tener un |hxca y un |hxcb de tal manera que al llamarlos internamente antes de ejecuar la rom hagan un |a o |b automatico para no tener que hacerlo tu desde el basic. Independientemente de en que unidad estes tu en el basic.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Llamar a |b desde ensamblador.

Mensajepor MiguelSky » Vie 19 Ago , 2016 12:33 pm

Échale un vistazo a la rutina del firmware &BCD4, que busca un RSX en las ROM.

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

Re: Llamar a |b desde ensamblador.

Mensajepor Artaburu » Vie 19 Ago , 2016 3:50 pm

Fácil, en &A700 se establece la unidad de disco en uso, A=0 y B=1 así que es tan fácil como:

Código: Seleccionar todo

|A
xor a ; o ld a, 0
ld (&a700),a

|B
ld a,1
ld (&a700),a
EDITADO para corregir dirección de memoria.
Salu2,
Arta

dragon131
Forum Addict
Forum Addict
Mensajes: 486
Registrado: Mar 08 Jun , 2010 12:36 pm

Re: Llamar a |b desde ensamblador.

Mensajepor dragon131 » Vie 19 Ago , 2016 3:56 pm

Pues no parece tema sencilo.

Pongo esto:

org &8000
ld a,&c2
ld (&9002),a

ld hl,&9002

call &bcd4;

Y me dice que la dirección es c021 (hasta ahi vale es el salto en el amsdos que esta comentado en el desensamblado)

Y la rom me dice que es 84 ¿El burning rubber?. :-$

En cualquier caso si monto amsdos despues de eso en la upper rom y hago un jp a c021/call , desaparece en otra dimension y no vuelve. :mrgreen:

Dicho esto y despues de hacer el tonto voy a probar lo de artaburu que me ha saltado al enviar el mensaje.

edit: pues tampoco va, sigo estando en a.

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

Re: Llamar a |b desde ensamblador.

Mensajepor Artaburu » Vie 19 Ago , 2016 4:18 pm

Corcho, que me he colado, que es en &A700, no en &A000 :)

Código: Seleccionar todo

|A
xor a ; o ld a, 0
ld (&a700),a

|B
ld a,1
ld (&a700),a
Salu2,
Arta

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Llamar a |b desde ensamblador.

Mensajepor MiguelSky » Vie 19 Ago , 2016 4:28 pm

¿El Burning Rubber? Se estás trabajando en un Plus, cuidado con la numeración de las ROM que varía mucho. De todas maneras, lo que indica artaburu parece lo más sencillo para usar en código. Desde BASIC funciona :D

dragon131
Forum Addict
Forum Addict
Mensajes: 486
Registrado: Mar 08 Jun , 2010 12:36 pm

Re: Llamar a |b desde ensamblador.

Mensajepor dragon131 » Vie 19 Ago , 2016 4:35 pm

Claro miguelsky. Es para el parcheo al cartucho del sistema que estoy haciendo ¿No lo has visto en cpc wiki?.

Me he quedado para mi las llamadas rsx |juego equivalentes. Y las he desviado para que llamen al hxc y al c4cpc. :mrgreen:

Es que para mi era un toston acceder al hxc. c4cpc->seleccionar os-> |b ->cat->run" hxc". asi cada reinicio.

Ahora lo enciendo y solo tengo que hacer |b |hxc y espero eliminar el barra b. :mrgreen:

Eso si, ha sido un poco toston hacerlo, porque el hxc no se puede emular en el winape, he tenido que ir parcheando los saltos para ver cuando salia.

Tengo el |spiel libre para transformarlo en un |hxcb :mrgreen:

probare lo de artaburu, mientras Yo habia encontrado otra manera:

Código: Seleccionar todo

org &8000

ld a,&c2
ld (&9002),a
ld hl,&9002
call &bcd4;
call &001b

ret

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Llamar a |b desde ensamblador.

Mensajepor MiguelSky » Vie 19 Ago , 2016 4:44 pm

Correcto, funciona! No, no he leído el hilo en cpcwiki, hace meses que sólo leo los que me llaman la atención por el título. Mi tiempo ya no me da para mucho. Como no tengo c4cpc ni hxc me estoy saltando esos :D Últimamente sólo leo el juego de C|-|E, el wifi y ayer un reflote sobre el GAC. Y algún video de jgonza :D

dragon131
Forum Addict
Forum Addict
Mensajes: 486
Registrado: Mar 08 Jun , 2010 12:36 pm

Re: Llamar a |b desde ensamblador.

Mensajepor dragon131 » Vie 19 Ago , 2016 7:22 pm

Pues si, he aqui el resultado que dudo que le interese a nadie porque to cristo tiene rom cards(menos yo XD) :).

Al final he usado el parche artaburo que eran menos lineas. :mrgreen: Y lo he pasado por parametros,me reservo el spiel para otra cosa si se me ocurre

El firm 3.15 mas el parados no me va se reinicia constantemente espero que no sea culpa mia.

Queda tal que |game/spiel burning rubber |hxc lee de donde estes |hxc,"a"(o A) lee de a |hxc,"b" (o b) lee de b |c4cpc=c4cpc |hxc.0 o |hxc,1
Adjuntos
compilacion cartuchos españoles.rar
(487.68 KiB) Descargado 35 veces
Última edición por dragon131 el Vie 19 Ago , 2016 10:40 pm, editado 4 veces en total.

dragon131
Forum Addict
Forum Addict
Mensajes: 486
Registrado: Mar 08 Jun , 2010 12:36 pm

Re: Llamar a |b desde ensamblador.

Mensajepor dragon131 » Vie 19 Ago , 2016 10:10 pm

Pues artaburu he encontrado un fallo(si se le puede llamar asi) pokear a700 no funciona si cargas el fimrware 3.12 en la lower rom.

De echo un barra b no la modifica tampoco esa dire.

¿Alquien sabe donde esta la dirección?

dragon131
Forum Addict
Forum Addict
Mensajes: 486
Registrado: Mar 08 Jun , 2010 12:36 pm

Re: Llamar a |b desde ensamblador.

Mensajepor dragon131 » Lun 22 Ago , 2016 8:36 pm

Vale, pues ya me ha contado syx cual es el problema.

Asi no se hace. :mrgreen: No se puede mirar directamente &a700 porque forma parte de la zona de las variables de amsdos. Y la zona puede desplazarse hacia abajo segun necesidades del sistema operativo y entonces el invento se va al traste.

El codigo correcto es:

Código: Seleccionar todo

ld hl,(&be7d)
ld a,1 ;0 0
ld (hl),a
Porque en la variable &be7d se guarda la dirección de memoria donde empieza la zona de variables de amsdos. Y esta coincide casualmente con la de la disquetera a 0 b.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Llamar a |b desde ensamblador.

Mensajepor MiguelSky » Mar 23 Ago , 2016 1:13 am

Supertruco!! =D> =D> =D>


¿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