arrays en ensamblador

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

Moderador: Sir Cilve Sinclair

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

arrays en ensamblador

Mensaje por Kodaly » Dom Dic 27, 2015 4: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!

Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: arrays en ensamblador

Mensaje por Rafa » Mié Dic 30, 2015 7: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

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

Re: arrays en ensamblador

Mensaje por Kodaly » Jue Dic 31, 2015 11:21 pm

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.

Avatar de Usuario
Scooter
Freddy Hardest
Mensajes: 711
Registrado: Jue Nov 11, 2010 10:17 pm

Re: arrays en ensamblador

Mensaje por Scooter » Vie Ene 01, 2016 10: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...

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

Re: arrays en ensamblador

Mensaje por Kodaly » Lun Ene 04, 2016 4: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

Avatar de Usuario
haplo
rst 0
Mensajes: 26
Registrado: Mié Sep 24, 2014 3:46 pm

Re: arrays en ensamblador

Mensaje por haplo » Mar Ene 05, 2016 9:52 am

Pon un salto condicional en caso de no acarreo antes de un INC H y solucionado

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

Re: arrays en ensamblador

Mensaje por Kodaly » Mar Ene 05, 2016 10: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.

Responder

¿Quién está conectado?

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