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?:

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:

[D] Descargas