開発環境

  • Windows 10 Home (64bit)
  • ASM6

操作

Aボタンでパレット切り替え。

ソース

sample.chr

>fsutil file createNew sample.chr 8192

00000000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010  FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
00000020  00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
00000030  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

palette.asm

;asm6 palette.asm palette.nes
 
pallette_idx	equ	$00
button_a	equ	$01
 
	; iNES header
	db	"NES", $1a
	db	$01	; PRG-ROM
	db	$01	; CHR-ROM
	db	$00	; mapper / mirroring
	dsb	9, $00
 
	base	$c000
Reset:
	lda	#0
	sta	pallette_idx
	sta	button_a
 
	lda	#$00
	sta	$2000	; PPU制御レジスタ1
	sta	$2001	; PPU制御レジスタ2
 
	; ネームテーブル $2000-$23bf
	lda	#$20
	sta	$2006	; VRAMアドレスレジスタ
	lda	#$00
	sta	$2006
	ldy	#240
--
	ldx	#0
-
	stx	$2007	; VRAMアクセスレジスタ
	inx
	cpx	#4
	bne	-
	dey
	bne	--
 
	; 属性テーブル   $23c0-$23ff
	lda	#$23
	sta	$2006	; VRAMアドレスレジスタ
	lda	#$c0
	sta	$2006
	ldy	#16
--
	ldx	#0
-
	lda	attr_table, x
	sta	$2007	; VRAMアクセスレジスタ
	inx
	cpx	#4
	bne	-
	dey
	bne	--
 
	jsr	set_palette
-
	jmp	-
 
set_palette:
	; パレットテーブル $3f00-3f1f
	lda	#$3f
	sta	$2006	; VRAMアドレスレジスタ
	lda	#$00
	sta	$2006
	ldx	pallette_idx
	ldy	#$10
-
	lda	pal_table, x
	sta	$2007	; VRAMアクセスレジスタ
	inx
	dey
	bne	-
 
	cpx	#$50
	bne	+
	ldx	#$00
+
	stx	pallette_idx
 
	lda	#$00
	sta	$2005	; スクロールレジスタ
	sta	$2005
 
	; 表示開始
	lda	#$88
	sta	$2000	; PPU制御レジスタ1
	lda	#$0e
	sta	$2001	; PPU制御レジスタ2
 
	rts
 
VBlank:
	lda	#$01
	sta	$4016	; ジョイパッド1レジスタ
	lda	#$00
	sta	$4016
	lda	$4016
	and	#$01
	bne	+
	sta	button_a	; Aボタンが押されてなければ0をセット
	rti
+
	lda	button_a
	bne	+		; Aボタンが押され続けていればスルー
	jsr	set_palette
	lda	#1
	sta	button_a
+
	rti
 
pal_table:
	db	$00, $01, $02, $03
	db	$00, $04, $05, $06
	db	$00, $07, $08, $09
	db	$00, $0a, $0b, $0c
 
	db	$10, $11, $12, $13
	db	$00, $14, $15, $16
	db	$00, $17, $18, $19
	db	$00, $1a, $1b, $1c
 
	db	$20, $21, $22, $23
	db	$00, $24, $25, $26
	db	$00, $27, $28, $29
	db	$00, $2a, $2b, $2c
 
	db	$30, $31, $32, $33
	db	$00, $34, $35, $36
	db	$00, $37, $38, $39
	db	$00, $3a, $3b, $3c
 
	db	$00, $0d, $0e, $0f
	db	$00, $1d, $1e, $1f
	db	$00, $2d, $2e, $2f
	db	$00, $3d, $3e, $3f
 
attr_table:
	db	$00, $55, $aa, $ff
 
	org	$fffa
	dw	VBlank	; NMI VBlank
	dw	Reset
	dw	0	; IRQ/BRK
 
	incbin	"sample.chr"
 
最終更新:2020年12月12日 20:28
添付ファイル