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!
arrays en ensamblador
Moderador: Sir Cilve Sinclair
- Rafa
- Jack The Nipper
- Mensajes: 181
- Registrado: Lun May 07, 2007 11:59 am
Re: arrays en ensamblador
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.
Casi igual que en las matrices.
RANDOMIZE USR 0
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: arrays en ensamblador
Muchas gracias, Rafa. Al final conseguí hacerlo pero de la forma que propones creo que resulta más optimizado. Probaré. Un saludo.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.
- Scooter
- Freddy Hardest
- Mensajes: 711
- Registrado: Jue Nov 11, 2010 10:17 pm
Re: arrays en ensamblador
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
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...
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: arrays en ensamblador
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
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
- haplo
- rst 0
- Mensajes: 26
- Registrado: Mié Sep 24, 2014 3:46 pm
Re: arrays en ensamblador
Pon un salto condicional en caso de no acarreo antes de un INC H y solucionado
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: arrays en ensamblador
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.haplo escribió:Pon un salto condicional en caso de no acarreo antes de un INC H y solucionado
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 30 invitados