ポート3割り込みを利用したバッファ付き汎用シリアルドライバを使った、シリアル送受信プログラムです。
このプログラムを2つのビジュアルメモリで実行させると、お互いにデータを送信/受信し、その内容をLCDに表示します。
メインルーチンでは、受信バッファをチェックしデータがある限り最優先で、受信データをLCDに表示します。バッファが空になると、送信するデータ(0〜99)を出力します。送信するデータは、ベースタイマー割り込みにより0.5秒に1回カウントアップされます。
128〜161行目のSioInitルーチンは、ビジュアルメモリの接続確認、インターフェイスの初期化に加え、バッファ(RAM)を初期化し、SIO割り込みを有効にしています。203〜245行目のSioGet1ルーチンは、受信バッファに溜っているデータを1バイト取り出します。
SIO割り込みを受けて動作するSIO受信ハンドラは、278〜317行目のint_SioRxルーチンです。受信したデータをバッファに溜めていきます。
![]() このサンプル同士で通信を行う場合は、データの取りこぼしはありませんが、連続したデータ転送を行う場合は、送信後一定時間のウェイトを置くなどしてください。 先のサンプル「シリアル通信(受信側)」にデータを送信すると、データの取りこぼしが発生し、うまく通信できません。 |
●TIMER1.ASM001 chip LC868700 002 world external 003 ; *-----------------------------------------------------* 004 ; * External header program Ver 1.00 * 005 ; * 05/20-'98 * 006 ; *-----------------------------------------------------* 007 008 public fm_wrt_ex_exit,fm_vrf_ex_exit 009 public fm_prd_ex_exit,timer_ex_exit,_game_start,_game_end 010 other_side_symbol fm_wrt_in,fm_vrf_in 011 other_side_symbol fm_prd_in,timer_in,game_end 012 013 extern main ;ユーザープログラム側にあるシンボル 014 extern int_BaseTimer ;ユーザープログラム側にあるシンボル 015 extern int_SioRx ;ユーザープログラム側にあるシンボル 016 017 ; *-----------------------------------------------------* 018 ; * Vector table(?) * 019 ; *-----------------------------------------------------* 020 cseg 021 org 0000h 022 _game_start: 023 ;reset: 024 jmpf main ; main program jump 025 org 0003h 026 ;int_03: 027 jmp int_03 028 org 000bh 029 ;int_0b: 030 jmp int_0b 031 org 0013h 032 ;int_13: 033 jmp int_13 034 org 001bh 035 ;int_1b: 036 jmp int_1b 037 org 0023h 038 ;int_23: 039 jmp int_23 040 org 002bh 041 ;int_2b: 042 jmp int_2b 043 org 0033h 044 ;int_33: 045 jmp int_33 046 org 003bh 047 ;int_3b: 048 jmp int_3b 049 org 0043h 050 ;int_43: 051 jmp int_43 052 org 004bh 053 ;int_4b: 054 jmp int_4b 055 ; *-----------------------------------------------------* 056 ; * interrupt programs * 057 ; *-----------------------------------------------------* 058 int_03: 059 reti 060 int_0b: 061 reti 062 int_13: 063 reti 064 int_23: 065 reti 066 int_2b: 067 reti 068 int_33: 069 reti 070 int_3b: 071 jmp int_SioRx ; SIO受信割り込みハンドラ 072 073 ; *-----------------------------------------------------* 074 int_43: 075 reti 076 int_4b: 077 clr1 p3int,1 ;interrupt flag clear 078 reti 079 080 org 0100h 081 ; *-----------------------------------------------------* 082 ; * flash memory write external program * 083 ; *-----------------------------------------------------* 084 fm_wrt_ex: 085 change fm_wrt_in 086 fm_wrt_ex_exit: 087 ret 088 org 0110h 089 ; *-----------------------------------------------------* 090 ; * flash memory verify external program * 091 ; *-----------------------------------------------------* 092 fm_vrf_ex: 093 change fm_vrf_in 094 fm_vrf_ex_exit: 095 ret 096 097 org 0120h 098 ; *-----------------------------------------------------* 099 ; * flash memory page read external program * 100 ; *-----------------------------------------------------* 101 fm_prd_ex: 102 change fm_prd_in 103 fm_prd_ex_exit: 104 ret 105 106 org 0130h 107 ; *-----------------------------------------------------* 108 ; * flash memory => timer call external program * 109 ; *-----------------------------------------------------* 110 int_1b: 111 timer_ex: 112 push ie 113 clr1 ie,7 ;interrupt prohibition 114 change timer_in 115 timer_ex_exit: 116 call int_BaseTimer ;(ユーザー側割り込み処理) 117 pop ie 118 reti 119 120 org 01f0h 121 _game_end: 122 change game_end 123 end
001 ; Tab width = 4 002 003 ;---------------------------------------------------------------------------- 004 ; ** シリアル通信サンプル3 (割り込み駆動受信バッファ付きシリアルドライバ) ** 005 ; 006 ; ・16byte受信バッファ付きシリアル送受信通信ドライバと利用サンプル 007 ; ・受信データを数値表示する 008 ; ・一定期間ごとに単純なデータを送信する 009 ;---------------------------------------------------------------------------- 010 ; 1.01 990208 SEGA Enterprises,LTD. 011 ;---------------------------------------------------------------------------- 012 013 chip LC868700 ; チップの種類をアセンブラに指定 014 world external ; 外部メモリ用プログラム 015 016 public main ; ghead.asm から参照されるシンボル 017 public int_BaseTimer ; ghead.asm から参照されるシンボル 018 public int_SioRx ; ghead.asm から参照されるシンボル 019 020 extern _game_end ; アプリケーション終了 021 022 023 ; **** システム定数の定義 *************************************************** 024 025 ; OCR(発振制御レジスタ)設定値 026 osc_rc equ 04dh ; システムクロックに内蔵RC発振を指定 027 osc_xt equ 0efh ; システムクロックに水晶発振を指定 028 029 LowBattChk equ 06eh ; ローバッテリ検出フラグ(RAMバンク0) 030 031 SioRxCueSize equ 16 ; シリアル受信バッファサイズ 032 033 034 ; *** データセグメント ****************************************************** 035 036 dseg ; データセグメント開始 037 038 r0: ds 1 ; 間接アドレッシングレジスタ r0 039 r1: ds 1 ; 間接アドレッシングレジスタ r1 040 r2: ds 1 ; 間接アドレッシングレジスタ r2 041 r3: ds 1 ; 間接アドレッシングレジスタ r3 042 ds 12 ; その他のレジスタ 043 044 ; ** シリアルドライバ用 ** 045 SioRxCueBehind: ds 1 ; 受信データ溜り量 046 SioRxCueRPnt: ds 1 ; 受信バッファ読み出しポイント 047 SioRxCueWPnt: ds 1 ; 受信バッファ書き込みポイント 048 SioRxCue: ds SioRxCueSize ; 受信バッファ 049 SioOverRun: ds 1 ; 受信オーバーランフラグ 050 051 ; ** 利用サンプル用ワーク ** 052 bcount: ds 1 ; ベースクロックカウンタ 053 work1: ds 1 ; ワーク1 054 work2: ds 1 ; ワーク2 055 056 work0: ds 1 ; ワーク(put2digit) 057 058 059 ; *** コードセグメント ****************************************************** 060 061 cseg ; コードセグメント開始 062 063 ; *-------------------------------------------------------------------------* 064 ; * シリアル通信ドライバ使用サンプル * 065 ; * 一定期間後とに単純なデータを送信する。 * 066 ; * 受信したデータは順次LCDに数値表示する。 * 067 ; *-------------------------------------------------------------------------* 068 main: 069 mov #0,bcount 070 mov #0,work1 ; 送信データの初期値 071 clr1 P3INT,0 ; P3割り込みをマスク 072 call cls ; LCDを消去する 073 call BattChkOff ; ローバッテリ自動検出機能 OFF 074 call SioInit ; シリアル通信の初期化 075 bnz finish ; VM が接続されていなければ終了 076 077 stlp1: 078 ; *** 受信データがあれば表示 *** 079 call SioGet1 ; 1byte受信 080 be #0ffh,stnx1 ; 受信データがなければスキップ 081 bz stnx3 ; 正常受信データありのときstnx3へ 082 error: br finish ; 各種エラーを検出したとき強制終了 083 stnx3: 084 ld b ; acc <- b 受信データ 085 mov #0,c ; 表示座標(水平) 086 mov #0,b ; 表示座標(垂直) 087 call put2digit ; LCDに数値表示 088 br stlp1 ; 受信データがある限り優先して繰り返す 089 stnx1: ; 090 091 set1 pcon,0 ; 次の割り込みまで待つ 092 093 ; *** 一定期間毎に単純なデータ送信する *** 094 ld bcount ; ベースタイマのカウンタ値 095 be work2,stnx4 ; 前回と同じならば送信しない 096 st work2 ; work2を更新 097 098 ld work1 ; 送信用データを取り出す 099 call SioPut1 ; 送信する 100 101 inc work1 ; 送信用データの更新 102 ld work1 ; (0〜99 の値を次々に送信する) 103 bne #100,stnx2 ; 104 mov #0,work1 ; 105 stnx2: ; 106 stnx4: 107 108 ; ** [M](モード)ボタンチェック ** 109 ld P3 110 bn acc,6,finish ; [M]ボタンが押されていたらアプリ終了 111 112 jmp stlp1 ; 繰り返す 113 114 finish: ; ** アプリケーション終了処理 ** 115 call SioEnd ; シリアル通信終了処理 116 call BattChkOn ; ローバッテリ自動検出機能 ON 117 jmp _game_end ; アプリケーション終了 118 119 ; *=========================================================================* 120 ; ***** 簡易シリアル通信ドライバ ***** 121 ; *=========================================================================* 122 123 ; *-------------------------------------------------------------------------* 124 ; * シリアル通信の初期化 * 125 ; * * 126 ; * システムクロックが水晶モードであることを前提としている。 * 127 ; *-------------------------------------------------------------------------* 128 SioInit: 129 ; **** VM同士の接続を確認 **** 130 ld P7 ; 接続状態の確認 131 and #%00001101 ; P70, P72, P73 をチェック 132 be #%00001000,next3 ; P70=0, P72=0, P73=1 か判定し 133 ; 接続されているときnext3へ 134 mov #0ffh,acc ; 接続されていないとき acc=0ffh で異常終了 135 ret ; SioInit終わり 136 next3: 137 138 ; **** シリアル通信の初期化 **** 139 mov #0,SCON0 ; LSBを先頭に出力するよう指定 140 mov #0,SCON1 ; LSBを先頭に入力するよう指定 141 mov #088h,SBR ; 転送レートを設定する 142 clr1 P1,0 ; P10ラッチをクリア(P10/SO0) 143 clr1 P1,2 ; P12ラッチをクリア(P12/SCK0) 144 clr1 P1,3 ; P13ラッチをクリア(P13/SO1) 145 146 mov #%00000101,P1FCR ; 端子機能設定 147 mov #%00000101,P1DDR ; 端子機能設定 148 149 mov #0,SBUF0 ; 転送バッファクリア 150 mov #0,SBUF1 ; 転送バッファクリア 151 152 mov #0,acc 153 st SioRxCueBehind ; 受信データ溜り量リセット 154 st SioRxCueRPnt ; 受信バッファ読み出しポイント 155 st SioRxCueWPnt ; 受信バッファ書き込みポイント 156 st SioOverRun ; 受信オーバーランフラグのリセット 157 158 set1 SCON1,0 ; 受信側転送終了割り込み有効 159 set1 SCON1,3 ; 受信待機 160 161 ret ; SioInit終わり 162 163 164 ; *-------------------------------------------------------------------------* 165 ; * シリアル通信の終了 * 166 ; *-------------------------------------------------------------------------* 167 SioEnd: ; **** シリアル通信終了処理 **** 168 169 mov #0,SCON0 ; SCON0 = 0 170 mov #0, SCON1 ; SCON1 = 0 171 mov #0bfh,P1FCR ; P1FCR = 0bfh 172 mov #0a4h,P1DDR ; P1DDR = 0a4h 173 174 ret ; SioEnd終わり 175 176 177 ; *-------------------------------------------------------------------------* 178 ; * 1byte送信する * 179 ; * * 180 ; * 入力 acc: 送信データ * 181 ; *-------------------------------------------------------------------------* 182 SioPut1: 183 push acc ; 送信データを退避 184 splp1: ld SCON0 ; 転送中なら転送終了まで待つ 185 bp acc,3,splp1 ; 186 pop acc ; 送信データ復帰 187 188 st SBUF0 ; 転送するデータをセットする 189 set1 SCON0,3 ; 転送開始 190 191 ret ; SioPut1終わり 192 193 194 ; *-------------------------------------------------------------------------* 195 ; * 受信バッファから1byte読み込む(非同期受信) * 196 ; * * 197 ; * 出力 acc: 0=正常終了 * 198 ; * 0ffh=受信データなし * 199 ; * 0feh=バッファ・オーバーフロー * 200 ; * 0fdh=オーバーラン・エラー * 201 ; * b: 受信したデータ(正常終了時のみ有効) * 202 ; *-------------------------------------------------------------------------* 203 SioGet1: 204 ; ** 溜まっているデータ量をチェック ** 205 ld SioRxCueBehind ; 溜まり量 206 bnz sgnx1 ; 溜まり量 != 0 のとき 207 mov #0ffh,acc ; 溜まり量 == 0 のとき.. 208 ret ; acc = 0ffh で返る (受信データなし) 209 sgnx1: 210 ; ** バッファオーバーフローの検出 ** 211 ; SioRxCueBehind - SioRxCueSize 212 be #SioRxCueSize,sgnx3 ; SioRxCueBehind == SioRxCueSize 213 bp PSW,7,sgnx3 ; SioRxCueBehind < SioRxCueSize 214 ; SioRxCueBehind > SioRxCueSize 215 mov #0feh,acc ; バッファ量を越えてしまったとき 216 ret ; acc = 0feh で返る (Buffer overflow) 217 sgnx3: 218 ; ** オーバーランエラーの検出 ** 219 ld SioOverRun ; オーバーランフラグ 220 bz sgnx4 ; 検出されていないとき 221 mov #0fdh,acc ; 検出されているとき 222 ret ; acc = 0fdh で返る (Overrun error) 223 sgnx4: 224 225 dec SioRxCueBehind ; dec 溜まり量 226 227 ; ** 受信データ取り出しポイントの計算 228 ld SioRxCueRPnt ; r0 = SioRxCue + SioRxCueRPnt 229 add #SioRxCue ; 230 st r0 ; 231 232 inc SioRxCueRPnt ; inc データ取り出しポイント 233 234 ; ** 取り出しポイント==バッファサイズ なら 235 ; ** 取り出しポイント=0にリセットする 236 ld SioRxCueRPnt 237 bne #SioRxCueSize,sgnx2 ; SioRxCueRPnt != SioRxCueSize のとき 238 mov #0,SioRxCueRPnt ; SioRxCueRPnt == SioRxCueSize のとき 239 sgnx2: 240 241 ld @r0 ; 入力データをaccに取り込み.. 242 st b ; bへ 243 mov #0,acc ; acc = 0 (正常終了 - データあり) 244 245 ret ; SioGet1終わり 246 247 248 ; *-------------------------------------------------------------------------* 249 ; * 受信バッファから1byte読み込む * 250 ; * (受信データが無い場合はデータがくるまで待つ) * 251 ; * * 252 ; * 出力 acc: 0=正常終了 * 253 ; * 0feh=バッファ・オーバーフロー * 254 ; * 0fdh=オーバーラン・エラー * 255 ; * b: 受信したデータ(正常終了時のみ有効) * 256 ; *-------------------------------------------------------------------------* 257 SioGet1W: 258 call SioGet1 ; 非同期受信 259 be #0ffh,SioGet1W ; データがくるまで待つ 260 261 ret ; SioGet1W終わり 262 263 264 ; *-------------------------------------------------------------------------* 265 ; * 受信バッファに溜まっているデータ量を取得する * 266 ; * * 267 ; * 出力 acc: データ量(bytes) * 268 ; *-------------------------------------------------------------------------* 269 SioGetRxLen: 270 ld SioRxCueBehind ; 溜まり量 271 272 ret ; SioGetRxLen終わり 273 274 275 ; *-------------------------------------------------------------------------* 276 ; * SIO受信割り込みハンドラ * 277 ; *-------------------------------------------------------------------------* 278 int_SioRx: 279 push acc ; 使用レジスタ退避 280 push PSW ; 281 set1 PSW,1 ; データRAMバンク1を選択 282 push r0 ; レジスタ退避 283 284 ; ** 書き込みポイントの計算 ** 285 ld SioRxCueWPnt ; r0 = SioRxCue + SioRxCueWPnt 286 add #SioRxCue ; 287 st r0 ; 288 289 ld SBUF1 ; 受信データを読み込む 290 st @r0 ; バッファに書き込む 291 292 inc SioRxCueWPnt ; 書き込みポイント++ 293 294 ; ** 書き込みポイントがバッファサイズに 295 ; ** 達したらポイントをリセット 296 ld SioRxCueWPnt ; 297 bne #SioRxCueSize,isnx1 ; 298 mov #0,SioRxCueWPnt ; 299 isnx1: 300 301 inc SioRxCueBehind ; データ溜まり量++ 302 303 clr1 SCON1,1 ; 転送終了フラグをリセット 304 305 ; ** オーバーランエラーのチェック ** 306 bn SCON1,6,isnx2 ; オーバーランしていないならisnx2 307 mov #1,SioOverRun ; オーバーランしている→フラグセット 308 clr1 SCON1,6 ; オーバーランフラグをリセット 309 isnx2: 310 311 set1 SCON1,3 ; 次の転送を開始 312 313 pop r0 ; 使用レジスタ復帰 314 pop PSW ; 315 pop acc ; 316 317 reti ; int_SioRx終わり 318 319 320 ; *-------------------------------------------------------------------------* 321 ; * 2桁の数値を表示する * 322 ; * 入力 acc : 数値 * 323 ; * c : 文字水平位置 * 324 ; * b : 文字垂直位置 * 325 ; *-------------------------------------------------------------------------* 326 put2digit: 327 push b ; 座標データを退避 328 push c ; 329 st c ; 10の位と1の位の値をそれぞれ計算 330 xor a ; ( acc = acc/10, work0 = acc mod 10 ) 331 mov #10,b ; 332 div ; 333 ld b ; 334 st work0 ; 1の位の計算結果をwork0に保存 335 ld c ; 336 pop c ; 座標値を(c.b)に復帰 337 pop b ; 338 push b ; また退避 339 push c ; 340 call putch ; 10の位を表示 341 ld work0 ; 1の位の値を読み込み 342 pop c ; 座標値を(c,b)に復帰 343 pop b ; 344 inc c ; 表示座標を右へ 345 call putch ; 1の位を表示 346 347 ret ; put2digit終わり 348 349 350 ; *-------------------------------------------------------------------------* 351 ; * LCD表示イメージを消去する * 352 ; *-------------------------------------------------------------------------* 353 cls: 354 push OCR ; OCR値を退避 355 mov #osc_rc,OCR ; システムクロックを指定 356 357 mov #0,XBNK ; 表示用RAMのバンクアドレスを指定(BANK0) 358 call cls_s ; そのバンク内のデータをクリア 359 360 mov #1,XBNK ; 表示用RAMのバンクアドレスを指定(BANK1) 361 call cls_s ; そのバンク内のデータをクリア 362 pop OCR ; OCR値を復帰 363 364 ret ; cls終わり 365 366 cls_s: ; *** 表示用RAM 1BANK分の消去 *** 367 mov #80h,r2 ; 間接アドレッシングレジスタを表示用RAMの先頭に 368 mov #80h,b ; ループカウンタbにループ数をセット 369 loop3: 370 mov #0,@r2 ; アドレスをインクリメントしながら0を書き込む 371 inc r2 ; 372 dbnz b,loop3 ; bが0になるまで繰り返す 373 374 ret ; cls_s終わり 375 376 377 ; *-------------------------------------------------------------------------* 378 ; * 指定位置に1キャラクタ表示する * 379 ; * 入力 acc : キャラクタコード * 380 ; * c : 文字水平位置 * 381 ; * b : 文字垂直位置 * 382 ; *-------------------------------------------------------------------------* 383 putch: 384 push XBNK 385 push acc 386 call locate ; 座標から表示RAMのアドレスを計算 387 pop acc 388 call put_chara ; 1キャラクタ表示する 389 pop XBNK 390 391 ret ; putch終わり 392 393 394 locate: ; **** 表示位置指定から表示用RAMのアドレスを計算 **** 395 ; ** 入力 c: 水平位置(0〜5) b: 垂直位置(0〜3) 396 ; ** 出力 r2: RAMアドレス XBNK: 表示用RAMバンク 397 398 ; *** 表示用RAMバンクアドレスの判断 *** 399 ld b ; b>=2 のとき next1 へ 400 sub #2 ; 401 bn PSW,7,next1 ; 402 403 mov #00h,XBNK ; 表示用RAMのバンクアドレスを指定(BANK0) 404 br next2 405 next1: 406 st b 407 mov #01h,XBNK ; 表示用RAMのバンクアドレスを指定(BANK1) 408 next2: 409 410 ; *** 表示指定位置のRAMアドレス計算 *** 411 ld b ; b * 40h + c + 80h 412 rol ; 413 rol ; 414 rol ; 415 rol ; 416 rol ; 417 rol ; 418 add c ; 419 add #80h ; 420 st r2 ; RAMアドレスをr2に格納 421 422 ret ; locate終わり 423 424 425 put_chara: 426 push PSW ; PSW値を退避 427 set1 PSW,1 ; データRAMバンク1を選択 428 429 ; *** キャラクタデータアドレスの計算 *** 430 rol ; (TRH,TRL) = acc*8 + fontdata 431 rol ; 432 rol ; 433 add #low(fontdata) ; 434 st TRL ; 435 mov #0,acc ; 436 addc #high(fontdata) ; 437 st TRH ; 438 439 push OCR ; OCR値を退避 440 mov #osc_rc,OCR ; システムクロックを指定 441 442 mov #0,b ; キャラクタデータ読み出し用オフセット値 443 mov #4,c ; ループカウンタ 444 loop1: 445 ld b ; 1ライン目の表示データを読み出す 446 ldc ; 447 inc b ; 読み出しデータのオフセットを +1 448 st @r2 ; 表示データを表示用RAMに転送 449 ld r2 ; 表示用RAMアドレス +6 450 add #6 ; 451 st r2 ; 452 453 ld b ; 2ライン目の表示データを読み出す 454 ldc ; 455 inc b ; 読み出しデータのオフセットを +1 456 st @r2 ; 表示データを表示用RAMに転送 457 ld r2 ; 表示用RAMアドレス +10 458 add #10 ; 459 st r2 ; 460 461 dec c ; ループカウンタのデクリメント 462 ld c ; 463 bnz loop1 ; 8ライン分(4回)繰り返し 464 465 pop OCR ; OCR値を復帰 466 pop PSW ; PSW値を復帰 467 468 ret ; put_chara終わり 469 470 471 ; *-------------------------------------------------------------------------* 472 ; * キャラクタのビットイメージデータ * 473 ; *-------------------------------------------------------------------------* 474 fontdata: 475 db 07ch, 0e6h, 0c6h, 0c6h, 0c6h, 0ceh, 07ch, 000h ;0 476 db 018h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h ;1 477 db 07ch, 0c6h, 0c6h, 00ch, 038h, 060h, 0feh, 000h ;2 478 db 07ch, 0e6h, 006h, 01ch, 006h, 0e6h, 07ch, 000h ;3 479 db 00ch, 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 000h ;4 480 db 0feh, 0c0h, 0fch, 006h, 006h, 0c6h, 07ch, 000h ;5 481 db 01ch, 030h, 060h, 0fch, 0c6h, 0c6h, 07ch, 000h ;6 482 db 0feh, 0c6h, 004h, 00ch, 018h, 018h, 038h, 000h ;7 483 db 07ch, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 07ch, 000h ;8 484 db 07ch, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h ;9 485 486 487 ; *-------------------------------------------------------------------------* 488 ; * ローバッテリ自動検出機能 ON * 489 ; *-------------------------------------------------------------------------* 490 BattChkOn: 491 push PSW ; PSW値を退避 492 clr1 PSW,1 ; データRAMバンク0を選択 493 494 mov #0,LowBattChk ; ローバッテリ検出をする(0) 495 496 pop PSW ; PSW値を復帰 497 ret ; BattChkOn終わり 498 499 500 ; *-------------------------------------------------------------------------* 501 ; * ローバッテリ自動検出機能 OFF * 502 ; *-------------------------------------------------------------------------* 503 BattChkOff: 504 push PSW ; PSW値を退避 505 clr1 PSW,1 ; データRAMバンク0を選択 506 507 mov #0ffh,LowBattChk ; ローバッテリ検出をしない(0ffh) 508 509 pop PSW ; PSW値を復帰 510 ret ; BattChkOff終わり 511 512 513 ; *-------------------------------------------------------------------------* 514 ; * ベースタイマ割り込みハンドラ * 515 ; *-------------------------------------------------------------------------* 516 int_BaseTimer: 517 clr1 btcr,1 ; ベースタイマ割り込み要因クリア 518 inc bcount ; カウンタ++ 519 ret ; ユーザー側割り込み処理終了
[←] | [INDEX] | [→] |
(C)SEGA ENTERPRISES, LTD., 1998