Principiante en apuros.

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
droman
Lechoncillo
Lechoncillo
Mensajes: 12
Registrado: Vie 23 Oct , 2015 6:59 pm

Principiante en apuros.

Mensajepor droman » Sab 31 Oct , 2015 7:10 pm

No os riais... que os juro que lo pillo con ganas... pero son ellos... que no me dejan... XD

En el libro que he descargado de esta web... "Domine el Código Máquina de su Amstrad..." en el primer programa especifica esto:

"

Código: Seleccionar todo

10 SYMBOL AFTER 256:MEMORY [b]39999[/b]:
SYMBOL AFTER 240

Esta línea libera toda la memoria reservada para los UDGs, altera
HIMEM bajándolo a 39999 (lo que significa que la primera dirección
disponible para la rutina de código máquina es 4000, uno por encima) y
después reserva memoria para 16 UDGs, empezando desde la nueva
posición de HIMEM hacia abajo. (Para una explicación más detallada de
SYMBOL AFTER y de los gráficos definidos por el usuario, diríjase al
manual del Amstrad).
"
Claro... lo primero que he pensado es que el 4000 estaba mal y debía ser 40000. Luego he pensado que en todos los listados que aparecen en este foro y por ahí... siempre empiezan con "ORG &4000"

El caso es que cuando he tecleado su cargador, me da MEMMORY OVERFLOW" siempre.

Para centrarme.... ¿Que es lo correcto, 40000 o 4000? ¿Debería cambiar el MEMORY 39999 de los listados por 3999 que es lo que parece correcto?

Hay algo super evidente que se me escapa y debo dejar de lado el ensamblador y dedicarme al BASIC que es a lo más que debo llegar?

Muchas gracias XD

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

Re: Principiante en apuros.

Mensajepor Artaburu » Sab 31 Oct , 2015 7:37 pm

Sorry pero no me he enterado muy bien del problema. Si tienes un código (imagino que un listado) que empieza en &4000 pon MEMORY &3FFF con eso ya reservas para BASIC hasta &3fff y el resto para tu programa en ensamblador.
Salu2,
Arta

droman
Lechoncillo
Lechoncillo
Mensajes: 12
Registrado: Vie 23 Oct , 2015 6:59 pm

Re: Principiante en apuros.

Mensajepor droman » Sab 31 Oct , 2015 7:53 pm

Me explico (mejor)

En el libro de "Domine el código...." al principio te explican la reserva de memoria en el CPC y lo hacen de este modo:

Lo ponen en 1 linea, pero para explicarme lo pongo en varias:

Código: Seleccionar todo

10 SYMBOL AFTER 256      ' Se supone que borramos el espacio de memoria dedicado a los UDG.
20 MEMORY 39999            ' Bajamos el HIMEM a 39999 para que nuestro programa empiece en 40000
30 SYMBOL AFTER 240      ' Reservamos memoria para los 16 UDG. Por si los fuesemos a utilizar.


Vale, creo que este código funciona como lo he comentado. El problema lo tengo en estas lineas.

Código: Seleccionar todo


40 n= 40000           ' Dirección de la memoria donde empieza nuestro programa... 1 byte más abajo que la zona HIMEM
50 INPUT A$           ' Obtenemos el código HEX de la operación a meter en memoria.
                             ' Me salto la parte donde comprobamos que el código o los códigos introducidos sean par o mostramos mensaje de                                                                    ' error.
60 POKE n,VAL("&" + a$)  ' Vamos a suponer que el usuario solo va a pasar 1 sentencia HEX, en este caso un simple C9 (RET)



El código siempre que lo ejecuto, me da un "Memory Overflow"
Si le digo que me lea la posición de memoria a pelo PRINT PEEK(&40000) da ese error, como si estubiese fuera de mis límites.

Y lo que me pasa es que siempre que he seguido uno de vustros tutoriales, el primer comando en ASM es ORG &4000

Y me ha dado por pensar que puede que estubiese mal el 39999 y fuese 3999 y el 40000 en realidad fuese 4000... pero después de hacer una prueba me da "Improper argument" en la sentencia MEMORY 3999... que imagino que es por que estoy bajando demasiado la memoria alta y eso pertenece a otra cosa.

¿Cual es el error?

droman
Lechoncillo
Lechoncillo
Mensajes: 12
Registrado: Vie 23 Oct , 2015 6:59 pm

Re: Principiante en apuros.

Mensajepor droman » Sab 31 Oct , 2015 7:56 pm

Cuando exploro la memoria desde el MAXAM en ROM... no me deja poner más de 4 dígitos... lo que refuerza mi pensar de que es 4000 y no 40000....

Sigo perdido....

Avatar de Usuario
McKlain
I am The Forum
I am The Forum
Mensajes: 2394
Registrado: Mar 28 Nov , 2006 2:48 pm
Ubicación: Málaga
Contactar:

Re: Principiante en apuros.

Mensajepor McKlain » Sab 31 Oct , 2015 8:38 pm

A ver, estás mezclando decimal y hexadecimal. En el maxam supongo que le tienes que poner la dirección en hex, y por eso tienes que poner 4000. El amstrad tiene 64K de memoria, eso son 65535 bytes o posiciones de memoria posibles. 65535 en hexadecimal es &FFFF. Por eso no puedes poner más de 4 dígitos.

Si tu pones memory 40000, lo estás poniendo en decimal (base 10). Si pones &4000, el & de delante indica que es en hexadecimal (base 16).

Vamos, que lo correcto debería ser &3999 si va todo en hexadecimal.
Mi música: https://mcklain.bandcamp.com

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

Re: Principiante en apuros.

Mensajepor MiguelSky » Sab 31 Oct , 2015 8:57 pm

McKlain escribió:Vamos, que lo correcto debería ser &3999 si va todo en hexadecimal.
Quieres decir &3FFF...

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

Re: Principiante en apuros.

Mensajepor Artaburu » Sab 31 Oct , 2015 9:18 pm

Es que es lo que te cuentan, no mezcles decimal con hexadecimal :)
PRINT PEEK(&40000) es una burrada, el amstrad no tiene tanta memoria accesible :)
prueba print peek(40000)
Salu2,

Arta

Urusergi
Megaforero
Megaforero
Mensajes: 301
Registrado: Sab 25 Feb , 2006 5:45 pm

Re: Principiante en apuros.

Mensajepor Urusergi » Sab 31 Oct , 2015 10:09 pm

Esto es lo que me pone malo :-8 cuando revistas y libros de la época insistían en poner las direcciones en decimal (era aún más habitual con los listados de spectrum, que recuerde)
Por eso todas mis chorradillas de ensamblador están siempre en hexadecimal.

El ejemplo de arriba

Código: Seleccionar todo

10 SYMBOL AFTER 256:MEMORY &9C3F:SYMBOL AFTER 240
40 n=&9C40         
50 INPUT A$     
60 POKE n,VAL("&" + a$)

está mucho mejor así :D después del run+enter tienes que introducir un dato de dos dígitos en hexadecimal sin el ampersand (de 00 a FF) +enter y podrás comprobar que ha funcionado escribiendo a continuación: PRINT HEX$(PEEK(&9C40)) o bien PRINT HEX$(PEEK(40000))

Código: Seleccionar todo

00000 -> &0000
00001 -> &0001
00009 -> &0009
00010 -> &000A
00015 -> &000F
00016 -> &0010
00032 -> &0020
00064 -> &0040
00128 -> &0080
04096 -> &1000
08192 -> &2000
16384 -> &4000
32768 -> &8000
39999 -> &9C3F
40000 -> &9C40
40960 -> &A000
49152 -> &C000
65535 -> &FFFF

droman
Lechoncillo
Lechoncillo
Mensajes: 12
Registrado: Vie 23 Oct , 2015 6:59 pm

Re: Principiante en apuros.

Mensajepor droman » Dom 01 Nov , 2015 10:46 pm

Que haría yo sin este foro y los Masters que pululan por él :)

Muchas gracias, efectivamente es eso... ya lo decian mis compis de parranda... mezclar es malo.

Voy a seguir trasteando y para ir haciendolo todo bien, cada vez que vea algo en el librito... lo voy a convertir a hex.

Gracias de verdad...

Avatar de Usuario
McKlain
I am The Forum
I am The Forum
Mensajes: 2394
Registrado: Mar 28 Nov , 2006 2:48 pm
Ubicación: Málaga
Contactar:

Re: Principiante en apuros.

Mensajepor McKlain » Lun 02 Nov , 2015 9:52 am

MiguelSky escribió:
McKlain escribió:Vamos, que lo correcto debería ser &3999 si va todo en hexadecimal.
Quieres decir &3FFF...


A la rica empanada mental #-o

Y no será porque no tengo que andar trasteando en hexadecimal en el arkos tracker...
Mi música: https://mcklain.bandcamp.com

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

Re: Principiante en apuros.

Mensajepor MiguelSky » Lun 02 Nov , 2015 11:46 am

<XX


Volver a “Ensamblador”

¿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 El portal del CPC Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) El sitio del Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic