第6章 サンプルプログラムリスト |
ここでは、ビジュアルメモリSDKに付属のサンプルプログラムを掲載します。
インフォメーションフォークのソースファイル“IFORK.ASM”の説明、“GHEAD.ASM”の詳細は割愛します。
![]() すべてのサンプルプログラムは、タブ(09H)を4(バイト)にしてご覧ください。 |
このサンプルでは、LCD(XRAM)に単純なパターンを表示させます。
51,55,59,63,67行目でパターンを指定し、matrixルーチンでLCD全体にこのパターンを描画します。
001 ; Tab width = 4 002 003 ;---------------------------------------------------------------------------- 004 ; ** LCD表示処理サンプル1 ** 005 ; 006 ; 表示用RAMにデータを転送してLCDに単純なパターンを表示する 007 ;---------------------------------------------------------------------------- 008 ; 1.01 990208 SEGA Enterprises,LTD. 009 ;---------------------------------------------------------------------------- 010 011 chip LC868700 ; チップの種類をアセンブラに指定 012 world external ; 外部メモリ用プログラム 013 014 public main ; ghead.asm から参照されるシンボル 015 016 extern _game_end ; アプリケーション終了 017 018 019 ; **** システム定数の定義 *************************************************** 020 021 ; OCR(発振制御レジスタ)設定値 022 osc_rc equ 04dh ; システムクロックに内蔵RC発振を指定 023 osc_xt equ 0efh ; システムクロックに水晶発振を指定 024 025 026 ; *** データセグメント ****************************************************** 027 028 dseg ; データセグメント開始 029 030 r0: ds 1 ; 間接アドレッシングレジスタ r0 031 r1: ds 1 ; 間接アドレッシングレジスタ r1 032 r2: ds 1 ; 間接アドレッシングレジスタ r2 033 r3: ds 1 ; 間接アドレッシングレジスタ r3 034 ds 12 ; その他のシステム予約レジスタ 035 036 037 ; *** コードセグメント ****************************************************** 038 039 cseg ; コードセグメント開始 040 041 ; *-------------------------------------------------------------------------* 042 ; * ユーザープログラム * 043 ; *-------------------------------------------------------------------------* 044 main: 045 mov #0f0h,c ; 表示用データ 046 call matrix ; LCDにパターンを表示 047 set1 PCON,0 ; HALTモードに移行して割り込みを待つ。 048 ; ベースタイマの割り込みがかかることにより 049 ; HALTモードは解除され処理が先に進む。 050 051 mov #00fh,c ; 以下同様に何パターンか表示する 052 call matrix 053 set1 PCON,0 054 055 mov #0cch,c 056 call matrix 057 set1 PCON,0 058 059 mov #033h,c 060 call matrix 061 set1 PCON,0 062 063 mov #055h,c 064 call matrix 065 set1 PCON,0 066 067 mov #0aah,c 068 call matrix 069 set1 PCON,0 070 071 ; ** [M](モード)ボタンチェック ** 072 ld P3 073 bn acc,6,finish ; [M]ボタンが押されていたらアプリ終了 074 075 jmp main ; 繰り返す 076 077 finish: ; ** アプリケーション終了処理 ** 078 jmp _game_end ; アプリケーション終了 079 080 081 ; *-------------------------------------------------------------------------* 082 ; * LCD全体にパターンを表示する * 083 ; * 入力 c: 基本表示パターン * 084 ; *-------------------------------------------------------------------------* 085 matrix: ; **** LCD 一面を描く **** 086 087 push acc ; 各レジスタを退避する 088 push b 089 push c 090 push XBNK 091 092 xb0_a: mov #000h,XBNK ; 表示用RAMのバンクアドレスを指定(BANK0) 093 mov #080h,b 094 095 la1: ld c ; c:表示データ 096 call line2 ; 2行表示 097 ld b ; 2行先へアドレスを進める 098 add #010h ; 099 st b ; 100 bnz la1 ; バンクの終端まで繰り返し 101 102 xb1_a: mov #001h,XBNK ; 表示用RAMのバンクアドレスを指定(BANK1) 103 mov #080h,b 104 105 la2: ld c ; c:表示データ 106 call line2 ; 2行表示 107 ld b ; 2行先へアドレスを進める 108 add #010h ; 109 st b ; 110 bnz la2 ; バンクの終端まで繰り返し 111 112 pop XBNK ; 退避レジスタの復帰 113 pop c 114 pop b 115 pop acc 116 117 ret ; matrix終了 118 119 120 line2: ; **** LCD 2行分表示 **** 121 122 push acc ; 各レジスタを退避する 123 push b ; 124 push c ; 125 push PSW ; 126 push OCR ; 127 mov #osc_rc,OCR ; システムクロックを指定 128 set1 PSW,1 ; データRAMバンク1を選択 129 st c ; 表示データを c に退避 130 ld b ; 表示用RAMアドレスを、r2にセット 131 st r2 ; 132 133 lp1: ; **** 1行目表示処理 **** 134 ld c ; 表示データを表示用RAMに転送 135 st @r2 ; 136 inc r2 ; 次の表示位置にアドレスを移動 137 ld r2 138 and #00fh ; 表示位置が 1行目右端にくるまで.. 139 xor #006h ; 140 bnz lp1 ; 繰り返し 141 142 ld c ; cレジスタのビットパターンを反転する 143 xor #0ffh ; 144 st c ; 145 146 lp2: ; **** 2行目表示処理 **** 147 ld c ; 表示データを表示用RAMに転送 148 st @r2 ; 149 inc r2 ; 次の表示位置にアドレスを移動 150 ld r2 ; 151 and #00fh ; 表示位置が 2行目右端にくるまで.. 152 xor #00ch ; 153 bnz lp2 ; 繰り返し 154 155 pop OCR ; 退避レジスタを復帰 156 pop PSW ; 157 pop c ; 158 pop b ; 159 pop acc ; 160 161 ret ; line2終了 162 163 end
[←] | [INDEX] | [→] |
(C)SEGA ENTERPRISES, LTD., 1998