Lección 1 - Mostrar un tile en pantalla

Escrito el Sábado 11 de Abril del 2009 por Ealdor

[A] Objetivo

Como objetivo de esta primera lección vamos a mostrar por pantalla unos tiles de nuestro archivo CHR, el cual contiene nuestro set de tiles. Para crear nuestro archivo CHR vamos a utilizar el programa YY-CHR.

Por ejemplo, ¿qué tal si mostramos un adorable champiñon?:

Imagen

El champiñon está compuesto de 4 tiles (cada uno de 8x8 pixeles). Da igual que colores pongamos en la paleta ya que estos serán definidos depués en nuestro código.

[B] El código

Aquí os dejo el código en cuestión, ha sido probado en el emulador fceux pero no en el hardware real. Si teneis alguna sugerencia sobre el código hacedmela saber, ya que no soy ningún experto y quizás tenga algún fallo:

;iNes Header.
.db "NES", $1A
.db $01
.db $01
.db %00000000, %00000000
.db $00, $00, $00, $00, $00, $00, $00, $00

;Solo tenemos un chip PGR-ROM, luego comenzamos en $C000.
.org $C000

RESET:
        ;Ignore IRQs.
        sei

        ;Desactiva el modo decimal. 
        cld 

        ;Disable APU frame IRQ.
        ldx #$40
        stx $4017

        ;Reseteamos el puntero de pila.
        ldx #$FF
        txs

        ;Desactivamos los gráficos.
        lda #$00
        sta $2000
        sta $2001
        
        ;Disable DMC IRQs.
        sta $4010
	
        ;Esperamos un VBlank.
-       lda $2002
        bpl -

        ;Borramos la RAM.
        lda #$00
        ldx #$00
-       sta $000,x
        sta $100,x
        sta $200,x
        sta $300,x
        sta $400,x
        sta $500,x
        sta $600,x
        sta $700,x
        inx
        bne -

        ;Esperamos un VBlank.
-       lda $2002
        bpl -

        ;Carga la paleta en $3F00.
        lda #$3F
        sta $2006
        lda #$00
        sta $2006
        ldx #$00
-       lda PALLETE,x
        sta $2007
        inx
        cpx #$20
        bne -

        ;Ponemos los 4 tiles en la name table 0 (en el $2000).
        lda #$20
        sta $2006
        lda #$20
        sta $2006
        lda #$02
        sta $2007
        lda #$03
        sta $2007
        lda #$20
        sta $2006
        lda #$40
        sta $2006
        lda #$12
        sta $2007
        lda #$13
        sta $2007

        ;Nos aseguramos de que la pantalla no hace scroll.
        lda #$00
        sta $2005
        sta $2005 

        ;Configuración básica de los registros de la PPU.
        lda #%10001000
        sta $2000
        lda #%00011110
        sta $2001

        cli

;Bucle infinito.
LOOP: 
        jmp LOOP

IRQ:
        rti

NMI: 
        rti

;Datos de la paleta.
PALLETE:
        .db $0F,$16,$34,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$15,$01,$24
        .db $0F,$20,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

.pad $FFFA
.dw NMI, RESET, IRQ

;Incluimos nuestro archivo chr.
.incbin "ex1.chr"

[C] Captura de pantalla

Utilizando el emulador FCEUX 2.1 en Debian:

Imagen

[D] Descargas

Source + rom