参考サイト :
「NES 研究室」 sample1 ギコ猫でもわかるファミコンプログラミング 第5章 スプライト
フォントデータ character.chr を 「NES 研究室」 からダウンロードしておいてください.
;;; hello, nes!
;; 「NES 研究室」の sample1 を NESASM 向けに書き直したもの
;; http://hp.vector.co.jp/authors/VA042397/nes/sample.html
.inesprg 1 ; プログラムに使うバンクの数
.ineschr 1 ; CHR データに使うバンクの数
.inesmir 0 ; 水平ミラーリング
.inesmap 0 ; マッパー
; CHAR データバンク
.bank 2
.org $0000
; フォントデータのパターンテーブルを埋め込む
.incbin "character.chr" ; 「NES研究室」より
; プログラムバンク
.bank 0
.org $8000
start:
lda $2002 ; VBlankが発生し,$2002の7ビット目が1になるまで待機
bpl start
; PPU 初期化
lda #%00001000
sta $2000
lda #%00000110 ; スプライトと BG の表示を OFF にしておく
sta $2001
; VRAM 初期化レジスタ($2006)にパレットテーブルのロード先アドレスを指定($3f00)
lda #$3f
sta $2006
lda #$00
sta $2006
; パレットをロード
ldx #$00
ldy #$10
copypal:
lda palettes, x
sta $2007
inx
dey
bne copypal
; VRAM の真ん中あたりに書き込み位置を指定
lda #$21
sta $2006
lda #$c9
sta $2006
; $2007 経由で $2006 に指定した位置に BG としてフォントを書き込む
ldx #$00
ldy #$0b ; strlen("HELLO, NES!")
copymap:
lda string, x
sta $2007
inx
dey ; y をデクリメント
bne copymap
; スクロール設定
lda #$00
sta $2005
sta $2005
lda #%00011110 ; スプライトと BG の表示を ON
sta $2001
; 終了
main:
jmp main
; パレットテーブル
palettes:
.byte $0f, $00, $10, $20
.byte $0f, $06, $16, $26
.byte $0f, $08, $18, $28
.byte $0f, $0a, $1a, $2a
; 表示文字列
string:
.byte "HELLO, NES!"
; 割り込みハンドラバンク
.bank 1
.org $FFFA
.dw 0 ; VBlank割り込みハンドラ
.dw start ; リセット割り込みハンドラ
.dw 0 ; ハードウェア/ソフトウェア割り込みハンドラ
~/work/nes/hello$ ../BIN/NESASM hello.asm
NES Assembler (v2.51)
pass 1 pass 2
~/work/nes/hello$ fceu hello.nes
Starting FCE Ultra 0.98.12... Loading hello.nes...
PRG ROM: 1 x 16KiB CHR ROM: 1 x 8KiB ROM CRC32: 0xef24342b ROM MD5: 0x7dcb0331241a31cb379c0dcabca077f2 Mapper: 0 Mirroring: Horizontal
Initializing video... Initializing with OpenGL(Use "-opengl 0" to disable). Video Mode: 640 x 448 x 32 bpp Paletted texture extension not found. Using slower texture format... Initializing sound... Bits: 16 Rate: 48000 Channels: 1 Byte order: CPU Native Buffer size: 1152 sample frames(24.000000 ms)

|