6-9 汎用シリアルドライバ


ポート3割り込みを利用したバッファ付き汎用シリアルドライバを使った、シリアル送受信プログラムです。

このプログラムを2つのビジュアルメモリで実行させると、お互いにデータを送信/受信し、その内容をLCDに表示します。

メインルーチンでは、受信バッファをチェックしデータがある限り最優先で、受信データをLCDに表示します。バッファが空になると、送信するデータ(0〜99)を出力します。送信するデータは、ベースタイマー割り込みにより0.5秒に1回カウントアップされます。

128〜161行目のSioInitルーチンは、ビジュアルメモリの接続確認、インターフェイスの初期化に加え、バッファ(RAM)を初期化し、SIO割り込みを有効にしています。203〜245行目のSioGet1ルーチンは、受信バッファに溜っているデータを1バイト取り出します。

SIO割り込みを受けて動作するSIO受信ハンドラは、278〜317行目のint_SioRxルーチンです。受信したデータをバッファに溜めていきます。

注意

このサンプル同士で通信を行う場合は、データの取りこぼしはありませんが、連続したデータ転送を行う場合は、送信後一定時間のウェイトを置くなどしてください。

先のサンプル「シリアル通信(受信側)」にデータを送信すると、データの取りこぼしが発生し、うまく通信できません。

●GHEAD.ASM
001	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
●TIMER1.ASM
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