AUA – Chessmaster 2000

Empezamos la semana con este nuevo artículo de AUA, dedicado a Chessmaster 2000.

AUA abre la semana con un artículo dedicado a Chessmaster 2000, juego de ajedrez publicado en 1986 por Ubisoft.

En esta ocasión, además de hacer una review del juego, nos desvelan el misterio de quién hay tras el anciano que sale en la portada.

Una buena lectura para empezar la semana.

AUA – 8BP: Tabla de secuencias de animación

Sin apenas darnos tiempo a asimilar la entrada de ayer, AUA nos vuelve a regalar otro interesante artículo.

En esta ocasión nos guían a través del proceso de crear secuencias de animación con 8BP.

Esta nueva entrada forma parte del curso que están publicando sobre el uso de 8BP para crear juegos para Amstrad CPC, a razón de una entrega semanal. No dejéis de leer la primera entrega y, por supuesto, las siguientes.

Esperamos ver pronto los juegos que vayáis desarrollando.

AUA – La pantalla gris de la muerte

Abrimos esta sección con un más que interesante artículo publicado por AUA (Amigos y usuarios de Amstrad), en la que nos enseñan como arreglar «La pantalla gris de la muerte».

En este artículo, redactado por Pablo Forcén Soler, nos muestran paso a paso como arreglar nuestro CPC cuándo, al encenderlo, no vemos más que una pantalla gris con un borde negro.

No te pierdas este artículo, uno de tantos, en los que se nos enseñan a reparar o ampliar nuestro querido CPC.

Seguiremos atentos a todo lo que publiquen nuestros amigos de AUA.

Numeros BCD

Los números BCD se ven representados de manera natural, tal y como nosotros los veríamos; el 99 hexadecimal, representa al 99 decimal.

Para conseguir esto, un byte puede representar números del 0 al 99, dividiendo el byte en dos nibbles (4 bits). Cada nibble puede representar números del 0 a 9.

De esta manera, el 10 hexadecimal, que en decimal es 16, en BCD representa el 10 decimal. Dicho de otra manera, vemos los números hexadecimales como si de números decimales se tratara.

Para representar un número de 10 dígitos, se necesitan 5 bytes. Se puede usar un byte extra para indicar la posición de la coma, y así poder trabajar con decimales. Los números BCD se usan para operar con cifras de más de 16 bits.

A la hora de operar con números BCD, hay que tener muy presente la instrucción DAA (Decimal Adjust Accumulator). DAA realiza ajustes en los resultados de operaciones con números BCD, y funciona de la siguiente manera:

  • Comprueba los bits 0, 1, 2 y 3. Si contienen un dígito no BCD (mayor de 9) o se establece el flag H; suma o resta, dependiendo de la operación, 06h (0000 0110b) al byte.
  • Comprueba los bits 4, 5, 6 y 7. Si contienen un dígito no BCD (mayor de 9) o se establece el flag C; suma o resta, dependiendo de la operación, 60h (0110 0000b) al byte.

De esta manera, si tenemos $09 y sumamos $01, el resultado es $0A. Tras ejecutar DAA, el resultado es $10. Después de cada instrucción aritmética, incremento o decremento hay que ejecutar DAA.

ld a, $09     ; A = $09
inc a ; A = $0A
daa ; A = $10

dec a ; A = $0F
daa ; A = $09

add a, $03 ; A = $0C
daa ; A = $12

sub $03 ; A = $0F
daa ; A = $09

Por otro lado, la manera de obtener el código ASCII de cada nibble, es relativamente sencilla.

La rutina que se muestra a continuación, recibe un número BCD en el registro B y lo muestra en pantalla.

; -----------------------------------------------------
; Imprime en pantalla un número BCD.
; Entrada: B -> Número BCD a imprimir.
; Altera el valor del registro AF.
; -----------------------------------------------------
PrintBCD:
ld a, b ; Carga en A el número a imprimir
and $f0 ; Se queda con el nibble superior
rrca
rrca
rrca
rrca ; Lo rota cuatro veces para pasarlo al nibble inferior
add a, '0' ; Suma el ASCII del 0 para obtener el ASCII del número
rst $10 ; Muestra el número en pantalla (Spectrum)
;call $bb5a ; Muestra el número en pantalla (Amstrad CPC)

ld a, b ; Vuelve a cargar el número a imprimir en A
and $0f ; Se queda con el nibble inferior
add a, '0' ; Suma el ASCII del 0 para obtener el ASCII del número
rst $10 ; Muestra el número en pantalla (Spectrum)
;call $bb5a ; Muestra el número en pantalla (Amstrad CPC)

ret ; Sale de la rutina

RST $10, en ZX Spectrum, imprime en pantalla el carácter correspondiente al código Ascii cargado en el registro A.

CALL $bb5a, hace lo propio en Amstrad CPC.