arrays en ensamblador

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

arrays en ensamblador

Notapor Kodaly el Dom Dic 27, 2015 5:38 pm

Muy buenas. Quiero escribir una rutina en ensamblador para pintar una pantalla con tiles de un solo carácter. En Zxbasic se suele hacer con arrays y me gustaría realizarlo en ensamblador de la misma forma. Es decir, tomo el valor del tile en una fila de defb y ese valor (0,1,2,etc) correspondería a una fila de bytes del tile correspondiente en otro defb. Lo he intentado con el registro IX pero no lo consigo.
¿Alguna pista? Muchas gracias!
Kodaly
Herbert
 
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: arrays en ensamblador

Notapor Rafa el Mie Dic 30, 2015 8:44 pm

Con tablas. Yo usaría una tabla donde estuvieran las direcciones de definición de cada tile. Si hubieran por ejemplo, tres tiles, la tabla ocuparía 6 bytes. Si por ejemplo esa tabla empieza en dir 40000, multiplicas el código de la tile por dos y le sumas 40000. Eso te dará la dirección de definición de esa tile, y la rutina de impresión cogería de ahí los parámetros.

Casi igual que en las matrices.
RANDOMIZE USR 0
Avatar de Usuario
Rafa
Jack The Nipper
 
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: arrays en ensamblador

Notapor Kodaly el Vie Ene 01, 2016 12:21 am

Rafa escribió:Con tablas. Yo usaría una tabla donde estuvieran las direcciones de definición de cada tile. Si hubieran por ejemplo, tres tiles, la tabla ocuparía 6 bytes. Si por ejemplo esa tabla empieza en dir 40000, multiplicas el código de la tile por dos y le sumas 40000. Eso te dará la dirección de definición de esa tile, y la rutina de impresión cogería de ahí los parámetros.

Casi igual que en las matrices.


Muchas gracias, Rafa. Al final conseguí hacerlo pero de la forma que propones creo que resulta más optimizado. Probaré. Un saludo.
Kodaly
Herbert
 
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: arrays en ensamblador

Notapor Scooter el Vie Ene 01, 2016 11:59 am

Pues depende de cuantos tengas y si todos son igual de largos.
Si son diferentes puedes hacer una tabla de vectores o punteros que apunten al inició de cada uno y luego necesitarías o un carácter que marque el final o bien un byte junto al vector que indique la longitud.
Si son todos iguales es más sencillo, apuntas al inició de los tiles y le simas n×longitud si es potencia de dos la mejor forma de multiplicar es rotando.

Enviado desde mi fnac 5.7 mediante Tapatalk
Aquellos chalados en sus viejos cacharros...
Avatar de Usuario
Scooter
Freddy Hardest
 
Mensajes: 710
Registrado: Jue Nov 11, 2010 11:17 pm

Re: arrays en ensamblador

Notapor Kodaly el Lun Ene 04, 2016 5:27 pm

Muchas gracias también, scooter.

Al intentar seguir vuestros consejos me encuentro con el problema del acarreo al rotar para multiplicar. Si hago tres veces rlca para así multiplicar un valor (en a) por 8, como es lógico, a veces me da más de 255. Se lo sumo luego al registro l para que modifique hl pero no sé cómo hacer para que tenga en cuenta el bit de acarreo y se incremente h automáticamente.

Gracias
Kodaly
Herbert
 
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: arrays en ensamblador

Notapor haplo el Mar Ene 05, 2016 10:52 am

Pon un salto condicional en caso de no acarreo antes de un INC H y solucionado
Avatar de Usuario
haplo
rst 0
 
Mensajes: 26
Registrado: Mie Sep 24, 2014 3:46 pm

Re: arrays en ensamblador

Notapor Kodaly el Mar Ene 05, 2016 11:22 am

haplo escribió:Pon un salto condicional en caso de no acarreo antes de un INC H y solucionado

Muchas gracias, haplo. Al final lo que hice es sumar a l el resultado de rotar a a. Luego sumo h a 0 con adc y ya lleva el acarreo de la suma anterior.
Kodaly
Herbert
 
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm


Volver a Programación y nuevos desarrollos

¿Quién está conectado?

Usuarios navegando este Foro: No hay usuarios registrados visitando el Foro y 1 invitado