アクセス手続き。アセンブラ編。


ASM保存して、インクルードすれば直ぐ利用可能なコード。
擬似命令RSSETでゼロページ$20から12バイトを変数領域としてる。
キー押→離、離→押状態までとりあえず保存。


コピペが億劫な人向けにアセンブリソースもUPしといたす。


井出洋介名人の実践麻雀、実践麻雀II 専用コントローラー - NESASM用サブルーチンソース
http://akiba.geocities.jp/consolehomebrewprogramming/fc/index.html#MJPAD


NESASM用。
違う6502アセンブラでビルドする場合、読み替えて解釈する必要あり。
テストプログラム書いて動作確認済み。


(ゼロページ参照の'<'は省いてる。無くてもビルド可能。)

;井出洋介名人の実践麻雀、井出洋介名人の実践麻雀II
;専用コントローラーアクセスルーチン
;
;
;Ide Yosuke Meijin no Jissen Mahjong,
;Ide Yosuke Meijin no Jissen Mahjong 2
;Special Controller access routine.
;
;
;Mar 30,2008 - Apr 06,2008
;ANALYZED BY. GOCCHI
;
;this web site.
;(c)都立城北高等学校 レトロゲーム活用研究同好会 (レゲ活)
; - Console/Homebrew Programming - 
;http://akiba.geocities.jp/consolehomebrewprogramming/
;
;
;ロン = Ron(RN)
;リーチ = Reach(RC)
;チー = Chii(CH)
;ポン = Pon(PO)
;カン = Kan(KA)
;スタート = Start(ST)
;セレクト = Select(SL)
;
;
	.rsset	$20
;
				;I/O $4017 OUTPUT CYCLE
				;1, 2, 3, 4, 5, 6, 7, 8
				;MSB                LSB
				;7, 6, 5, 4, 3, 2, 1, 0 bit
MJPAD1_ON	.rs	1		;H, G, F, E, D, C, B, A
MJPAD2_ON	.rs	1		;0, 0, N, M, L, K, J, I
MJPAD3_ON	.rs	1		;0,WN,RC,CH,PN,KN,ST,SL
MJPAD1_OLD	.rs	1	;MJPAD1 old mahjong pad data.
MJPAD2_OLD	.rs	1	;MJPAD2 old mahjong pad data.
MJPAD3_OLD	.rs	1	;MJPAD3 old mahjong pad data.
MJPAD1_TRG	.rs	1	;MJPAD1 now flame up edge(0 -> 1) trigger data.
MJPAD2_TRG	.rs	1	;MJPAD2 now flame up edge(0 -> 1) trigger data.
MJPAD3_TRG	.rs	1	;MJPAD3 now flame up edge(0 -> 1) trigger data.
MJPAD1_RLS	.rs	1	;MJPAD1 now flame down edge(1 -> 0) release data.
MJPAD2_RLS	.rs	1	;MJPAD2 now flame down edge(1 -> 0) release data.
MJPAD3_RLS	.rs	1	;MJPAD3 now flame down edge(1 -> 0) release data.
;
MJPAD_ON	.equ	MJPAD1_ON
MJPAD_OLD	.equ	MJPAD1_OLD
MJPAD_TRG	.equ	MJPAD1_TRG
MJPAD_RLS	.equ	MJPAD1_RLS
;
;
;
MJPADGET:
;
;1st initialize.
;
	LDA	#$05
	STA	$4016
	AND	#$FE
	STA	$4016
	LDX	#$00
	JSR	.MJPADGET
;
;2nd initialize.
;
	LDA	#$03
	STA	$4016
	AND	#$FE
	STA	$4016
	INX
	JSR	.MJPADGET
;
;3rd initialize.
;
	LDA	#$07
	STA	$4016
	AND	#$FE
	STA	$4016
	INX
;
.MJPADGET:
;
;old input data backup.
;
	LDA	MJPAD_ON,X
	STA	MJPAD_OLD,X
;
;now input data read.
;
	LDY	#$08
.LOOP
	PHA
	LDA	$4017
	LSR	A
	LSR	A
	PLA
	ROL	A
	DEY
	BNE	.LOOP
	STA	MJPAD_ON,X
;
;get now flame up edge(0 -> 1) trigger data(PAD_TRG).
;get now flame down edge(1 -> 0) release data(PAD_RLS).
;
	LDA	MJPAD_ON,X
	EOR	MJPAD_OLD,X
	TAY
	AND	MJPAD_ON,X
	STA	MJPAD_TRG,X
	TYA
	AND	MJPAD_OLD,X
	STA	MJPAD_RLS,X
;
	RTS
;


(*´Д`)。o○(誰かファミコンで萌え萌えな麻雀ゲームを!希望!)