Coordenadas de pantalla en modo 0

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
Chus
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Jue 09 Ago , 2012 11:22 am
Ubicación: Roaes
Contactar:

Coordenadas de pantalla en modo 0

Mensajepor Chus » Vie 21 Sep , 2012 11:07 pm

Tengo varias rutinas que he recopilado por el foro donde calculan la dirección de memoria donde colocar un sprite a partir de sus coordenadas de pantalla. Para mi propósito (crear mi primer juego en asm) ya esta bien, lo que pasa es que no las entiendo. No se como se calcula "a mano" una dirección a partir de X y Y, no se si me explico.
Si alguien tiene paciencia y me lo explica...
Gracias.

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

Re: Coordenadas de pantalla en modo 0

Mensajepor Artaburu » Sab 22 Sep , 2012 2:04 am

Lo complicado de la ecuación es debido a la organización de la memoria de video del CPC. El punto de partida es &C000 que es el byte de arriba a la izquierda. A partir de el, hacia la derecha sumas un byte (lo normal) pero hacia abajo la cosa cambia, tienes que sumar &800 si no hay salto de carácter u otro valor si hay salto de carácter :D

Los siguientes valores son los bytes de la columna de la izquierda de la pantalla:

Código: Seleccionar todo

C000 (*)
C800
D000
D800
E000
E800
F000
F800
C050(*)
C850
D050
D850
E050
E850
F050
F850
Donde hay un (*) es un nuevo carácter (bloque de 8 líneas). Los saltos dentro del mismo carácter son de &800 en &800 pero, como ves, para pasar de F800 a C050, que es otro carácter, hay que hacer otra operación. Se resta &37b0 a &F800 y te da el &C050 buscado.
Las rutinas lo normal es que detecten el salto de carácter al hacer la suma puesto que desborda, prueba a sumar &0800 a &F800. Si desborda sabes que en lugar de sumar &0800 debes restar &37b0.

Depende de la rutina que hayas mirado puede hacer las cosas de forma diferente pero en el fondo seguro que se basa en esto o parecido :)
Salu2,
Arta

Chus
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Jue 09 Ago , 2012 11:22 am
Ubicación: Roaes
Contactar:

Re: Coordenadas de pantalla en modo 0

Mensajepor Chus » Sab 22 Sep , 2012 11:00 am

Que manera de complicares la vida! Y no hubiera sido más fácil posiciones de memoria correlativas? Jejej

Urusergi
Forum Addict
Forum Addict
Mensajes: 380
Registrado: Sab 25 Feb , 2006 5:45 pm

Re: Coordenadas de pantalla en modo 0

Mensajepor Urusergi » Jue 11 Oct , 2012 4:30 pm

Los saltos dentro del mismo carácter son de &800 en &800 pero, como ves, para pasar de F800 a C050, que es otro carácter, hay que hacer otra operación. Se resta &37b0 a &F800 y te da el &C050 buscado.
Las rutinas lo normal es que detecten el salto de carácter al hacer la suma puesto que desborda, prueba a sumar &0800 a &F800. Si desborda sabes que en lugar de sumar &0800 debes restar &37b0.
El problema de restar es que tienes que usar la instrucción SBC, que aparte de gastar 4 uS tiene el inconveniente del Carry, por lo que según qué casos igual necesitas meter un AND A (1 uS más) para asegurar que vale cero.

Asi que lo mejor es pasar el número a negativo y hacer una suma en lugar de la resta (3 uS):

(LD BC,&37b0 : AND A : SBC HL,BC) = (LD BC,&C850 : ADD HL,BC)

Esto lo he descubierto hace poco gracias a los programillas que estoy haciendo relacionados con la compresión de pantallas... dentro de un rato publicaré una nueva rutina.

Un saludo


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