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○(誰かファミコンで萌え萌えな麻雀ゲームを!希望!)