Easy68K - Programar en ensamblador nunca fué tan sencillo

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por radastan » Jue Jun 24, 2010 4:47 pm

Madre mia que programita acabo de descubrir:

http://www.easy68k.com/

Se trata de un ensamblador para Windows, con su propio editor y generador de BIN. Evidentemente el simulador no nos servirá de mucho (ya que emula el procesador, pero no el resto de un QL).

Esta misma noche voy a experimentar a ver que sale.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por radastan » Jue Jun 24, 2010 5:15 pm

No me he resistido y he intentado usar el primer ejemplo del curso (hola mundo) en:

http://www.speccy.org/sinclairql/articulos/programacion/le1.htm

Lo he ensamblado, pasado a bin, y lo cargo en QL realizando algo como:

10 CLS
20 addr = RESPR(49)
30 LBYTES flp1_hola,addr
40 CALL addr

Es decir:

- borro la pantalla
- reservo 49 de memoria para el código (lo que ocupa el fichero)
- cargo el binario a la memoria reservada
- llamo a la rutina

No hace absolutamente NADA, ni reservando más dle doble de memoria (por si las moscas también lo he probado).

¿Alguna idea? es que este editor se ve genial.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por radastan » Jue Jun 24, 2010 10:11 pm

Me respondo a mi mismo: solucionado. El problema es que al usar uan etiqueta el ensamblador lo pone en una dirección fija y la rutina no es reubicable. He probado a escribir directamente en pantalla y va como la seda...

Es facilísimo, basta escribir algo en ensamblador, crearte el .BIN, quitarle la extensión (.bin), abrir Q-Emulator, hacer el cargador BASIC, y a probar.

En breve jugosas rutinicas y puede que un mini-curso facilón de programación en ensamblador.

Esto es la bomba.

PD: para que el código de hola mundo funcione basta poner (pc) en la línea:

Código: Seleccionar todo

         LEA.L     SALUDO(PC),A3       apuntamos a la frase a escribir con A3
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por na_th_an » Vie Jun 25, 2010 8:32 am

Hombre, si el código no es reubicable y no podemos especificar desde BASIC dónde cargarlo, eso nos limita bastante ¿no?

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por radastan » Vie Jun 25, 2010 8:36 am

Ese es el detalle... y esa es la ventaja.

El 68008 permite que todo el código que escribas sea rehubicable sin problemas, y el BASIC permite reservar memoria sin que tengas que aprenderte el mapa de la misma. Basta seguir unas reglas en ensamblador y el código puede cargarse donde te de la gana, y el BASIC lo usará sin problemas.

Ya verás, ya.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por mcleod_ideafix » Mar Jun 29, 2010 3:34 am

Yo quisiera escribir una rutina pequeña, pero con la idea de grabarla en una EPROM y ejecutarla nada más encender el QL (es para hacer tests de memoria en un QL que está muertecito, y así averiguar qué chip de memoria es el que falla). ¿Con esto se pueden crear binarios "tal cual"? (sin cabeceras ni nada)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por badaman » Mar Jun 29, 2010 4:59 am

La ROM MINERVA te indica los bancos de memoria que están defectuosos al hacer el chequeo de inicio del sistema. Si te haces con una sólo debes sustituir la orn original (2 chips) por la nueva ROM que es un solo chip.

http://www.speccy.org/trastero/cosas/JL ... OM-QL.html

Captura de test de ROM.

Imagen

http://www.speccy.org/hardware/reparar.html
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por mcleod_ideafix » Mar Jun 29, 2010 8:07 am

badaman escribió:La ROM MINERVA te indica los bancos de memoria que están defectuosos al hacer el chequeo de inicio del sistema. Si te haces con una sólo debes sustituir la orn original (2 chips) por la nueva ROM que es un solo chip.


Ehhhhhhhh!!!! ¡Eso mola! ¿Se puede descargar de algún sitio el binario para crear las EPROM's?

EDITO: la he encontrado aquí:
http://www.dilwyn.me.uk/qlrom/index.html
Pero en mi QL hay dos ROM's, una de 32KB y otra de 16KB, y aquí veo un único archivo (para la Minerva 1.98) que no ocupa 49152 bytes, sino menos. ¿Esto es correcto?
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por radastan » Mar Jun 29, 2010 12:19 pm

mcleod_ideafix escribió:Yo quisiera escribir una rutina pequeña, pero con la idea de grabarla en una EPROM y ejecutarla nada más encender el QL (es para hacer tests de memoria en un QL que está muertecito, y así averiguar qué chip de memoria es el que falla). ¿Con esto se pueden crear binarios "tal cual"? (sin cabeceras ni nada)


Efectivamente, los binarios creados por este programa son sin cabecera, son "tal cual". Por este motivo nos sirve para programar en QL.

De todas formas si ya tiene realizado el trabajo en la ROM Minerva es una tontería que te líes la manta a la cabeza.

Otra ventaja de este sistema es el de poder programar una ROM externa utilizable en el puerto de cartucho...
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por badaman » Mar Jun 29, 2010 10:53 pm

mcleod_ideafix escribió:Pero en mi QL hay dos ROM's, una de 32KB y otra de 16KB, y aquí veo un único archivo (para la Minerva 1.98) que no ocupa 49152 bytes, sino menos. ¿Esto es correcto?


Sí es correcto. Puedes montar un sólo chip tal como se ve en el primero de los dos enlaces que te dejé, e incluso pinchar la ROM MINERVA en cualquiera de los dos zócalos independientemente.

Saludos
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por mcleod_ideafix » Mié Jun 30, 2010 9:32 am

badaman escribió:
mcleod_ideafix escribió:Pero en mi QL hay dos ROM's, una de 32KB y otra de 16KB, y aquí veo un único archivo (para la Minerva 1.98) que no ocupa 49152 bytes, sino menos. ¿Esto es correcto?


Sí es correcto. Puedes montar un sólo chip tal como se ve en el primero de los dos enlaces que te dejé

Sobre el circuito del enlace... ¿Es correcto? Es que está negando la señal OE\ que se supone habilita el bus de datos del chip cuando está a nivel bajo en el original, pero al negarla, lo que hace en la EPROM que tenga la MINERVA es precisamente lo contrario, deshabilitar su bus. ¿No debería haber un cable directo desde el pin 22 del zócalo hasta el pin 22 de la EPROM 27C512, sin el inversor de por medio?
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por badaman » Mié Jun 30, 2010 10:15 am

Con toda sinceridad te digo que no voy a poder responderte a eso. La electrónica no es lo mio. Aunque está bien que dejes la consulta por si algún entendido se anima a contestarla. Mi obvia recomendación es que hables con José Leandro. :)

Saludos
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por mcleod_ideafix » Sab Jul 17, 2010 11:21 pm

Bueno, pues misterio resuelto. La cosa es que el 23128 y el 23256 son un poco particulares, y lo que es negado para uno, no lo es para el otro. Vamos, que el circuito de José Leandro es correcto.
Bueno, la cosa es que con la información de la página de JL, me hice un adaptador para la Minerva y la probé con el QL escacharrado, pero no saqué nada en claro (no me daba ningún numerito ni nada) así que al final, aprovechando el adaptador para Minerva, y el Easy68K, me escribí unos programitas sencillos para testear determinadas combinaciones de memoria y los flasheé en la EEPROM de 64K, y ahí ya comprobé que uno de los multiplexores, concretamente IC19, estaba de fiesta. Todo fue cambiarlo y el QL volvió a la normalidad :)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por radastan » Dom Jul 18, 2010 10:51 am

mcleod_ideafix escribió:Bueno, pues misterio resuelto. La cosa es que el 23128 y el 23256 son un poco particulares, y lo que es negado para uno, no lo es para el otro. Vamos, que el circuito de José Leandro es correcto.
Bueno, la cosa es que con la información de la página de JL, me hice un adaptador para la Minerva y la probé con el QL escacharrado, pero no saqué nada en claro (no me daba ningún numerito ni nada) así que al final, aprovechando el adaptador para Minerva, y el Easy68K, me escribí unos programitas sencillos para testear determinadas combinaciones de memoria y los flasheé en la EEPROM de 64K, y ahí ya comprobé que uno de los multiplexores, concretamente IC19, estaba de fiesta. Todo fue cambiarlo y el QL volvió a la normalidad :)


De mayor quiero ser como tu.

Yo estoy dejándome la piel para dejarlo todo preparado... porque la semana que viene sale de cuentas mi mujer y ya mismo seré padre por segunda vez. Con surte podré aprovechar algún hueco de la baja paternal para terminar las rutinas que tengo pendietes.

No sería mala idea que hicieras un post con el código fuente de la ROM que te has creado, que por cierto no hacía falta que la pusieras en el zócalo de la ROM original... para eso está el puerto de cartucho.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Easy68K - Programar en ensamblador nunca fué tan sencillo

Mensaje por mcleod_ideafix » Dom Jul 18, 2010 12:40 pm

radastan escribió:No sería mala idea que hicieras un post con el código fuente de la ROM que te has creado, que por cierto no hacía falta que la pusieras en el zócalo de la ROM original... para eso está el puerto de cartucho.


Ponerlo en el zócalo de la ROM original es más sencillo... ¡No hay que hacer ningún circuito! (al menos no ninguno de doble cara, claro). De hecho creo que puedo poner la Minerva sin tener que hacer el circuito de JL, sino directamente poniendo la ROM en uno de los zócalos, y el 74LS00 en zócalo de la otra ROM, cableándolo adecuadamente. Si lo consigo, postearé fotos :)

Por otra parte, creo que a la ROM de cartucho se la invoca desde la ROM principal, una vez que se ha testeado la memoria y el SuperBASIC ha alojado sus variables del sistema, por lo que si algo falla antes, el cartucho de ROM no entra en escena. Además, prefiero algo que desde el mismísimo principio de los tiempos, tome el control del sistema. He usado de hecho, esta misma filosofía para diagnosticar un Amstrad CPC464 y una consola Vectrex. En el caso de la Vectrex no he usado un cartucho ROM con el test, sino que he sustituido la ROM del sistema por la de mi test. En el Amstrad, que no tiene puerto de cartucho, pues sustituí la ROM de 32K por una con un test parecido al que uso en el Spectrum.

Respecto al código fuente, no puede ser más sencillo (ni más poco optimizado :D ). Ahí va:

Código: Seleccionar todo

   ORG   $0
   dc.l   $ffff      ;Dirección de pila. No la uso.
   dc.l   start      ;Dirección de comienzo de ejecución de la ROM.
   
start:
   move.l #$18063,a0      ;El MCSR (Master Chip Status Register)
   move.b #$08,(a0)      ;Modo de 8 colores, pantalla #0, display ON
   move.b #$aa,d1
   move.b #$55,d2

OtraVez:
   move.l #$20000,a1   ;Comienzo de la RAM de pantalla
   move.l #$4000,d3   ;Contador de bucle de 4000 a 0000 inclusive (en cada vuelta se rellenan 2 bytes)
   
BucRAM:
   move.b d1,(a1)+
   move.b d2,(a1)+
   dbra d3,BucRAM
   
   eor.b #$ff,d1
   eor.b #$ff,d2   ;Ahora pruebo con los valores complementados
   jmp OtraVez

   end   start


Este código fuente lo paso por el Easy68K y lo ensamblo con F9, dándome un fichero S-record (.S68). Con un pequeño programa de línea de comandos, MOT2BIN, convierto el S-record en un binario, que flasheo a la EEPROM.

Para probar diferentes valores en pantalla, simplemente desde el propio grabador universal leo la EEPROM, cambio los valores iniciales que van a d1 y d2, y vuelvo a grabar. Usando el libro "Assembly Language Programming on Sinclair QL", concretamente el capítulo dedicado al video, compruebo qué debería ver en pantalla con la combinación que he escrito y lo comparo con lo que realmente veo (usando la salida RGB, claro). A partir de ahí es hacer cábalas.

En mi caso, lo que pasó es que veía la pantalla dividida en franjas verticales. Conté 16 franjas, así que como estaba en el modo de 256x256, pues cada franja consistía en 16 píxeles. Las franjas en posición par (0,2,4...) no se inmutaban cuando escribía en ellas con el programa, mientras que las impares sí cambiaban, aunque no mostraban la secuencia de colores esperada.

En el esquemático vi que los 16 bits del bus de direcciones (los 16 bits más bajos) se multiplexaban a través de sendos 74LS257. Ya conocía esta disposición porque es la misma que usa el Commodore 64. Si hay barras verticales que cambian y otras no, es porque a las que no, no les "llega" el dato, pero no puede ser culpa del 74LS245 porque si fuera así, no le llegaría a nadie, así que debe ser algo del direccionamiento, lo que significa, algo relacionado con los multiplexores. Hay dos, ¿cuál de ellos?

Pues como el "fallo" se produce cada 16 píxeles, veamos... según el libro mencionado, una palabra de 16 bits controla 4 píxeles en el modo de 8 colores, así que 4 palabras (8 bytes) controlarán 16 píxeles.

Para direccionar 8 bytes se emplean A0, A1 y A2. A3 es el que cambia de 0 a 1, y de 1 a 0 en cada franja de 16 píxeles. El multiplexor IC19 es quien se encarga de los bits de direcciones A0 a A7. Si a este multiplexor le llegara, por ejemplo, siempre A3=1, entonces nunca se pintarían las franjas pares. A3 viene directamente del 68008. ¿Está mal la CPU? No, porque direcciona la ROM correctamente, así que A3 debe llegar con su valor correcto al multiplexor, y salir de él siempre con un 1. Ergo, el multiplexor está mal.

¿Y el otro multiplexor? (IC20). Ese otro multiplexa los bits de direcciones desde A8 hasta A15. Si estuviera mal, no podría estar direccionando la RAM de pantalla bien. O no vería nada, o vería como la pantalla se rellena pero no en el orden esperado (de izquierda a derecha y de arriba a abajo). La cosa es que podía ver que se rellenaba, y en el orden correcto, así que descarté IC20.

Total, que después de estas cábalas me decidí por IC19, y ya está :) El test de RAM de la Minerva daba fallo, obviamente, pero no podía ver ningún número en pantalla porque el fallo del multiplexor impedía que se viera nada legible en pantalla.

No es la primera vez que veo freirse un 74LS257. La otra vez fue reparando un C64, cosa que documenté (en inglés, sorry), aquí:
http://www.lemon64.com/forum/viewtopic. ... 6&start=23
Web: ZX Projects | Twitter: @zxprojects

Responder

¿Quién está conectado?

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