; ***********************************
; **** テスト(音を鳴らす) ***********
; ***********************************

	ORG &H0000

DIREN:	EQU &H18D1		;システムポインタ(RAM最終アドレス)
WORK:	EQU &H1793
BEEP:	EQU &H33B3		;BEEP音を鳴らすシステムコール
FBFRES:	EQU &H17A7		;FBFのリザルトコード

	START MAIN

MAIN:	LD $0,9+128		;ワークエリアをクリアする:機能番号9+128(CAL呼び出し)。
	PRE IX,WORK		
	ST $0,(IX+$31)
	CAL FBFCAL		;FBFのCAL呼び出し

	PRE IX,DAT		;ファイル名("F3.r")をワークエリアに出力
	PRE IY,DATEND-1
	PRE IZ,WORK+2
	BUP

	LD $0,10+128		;RR形式のプログラムの実行:機能番号10+128(CAL呼び出し)
	PRE IX,WORK
	ST $0,(IX+$31)
	CAL FBFCAL		;FBFを呼び出す
	JR NC,RET		;失敗(キャリーフラグOFF)の場合は、音を鳴らさずに抜ける。

	CAL BEPCAL		;BEEP音を鳴らす

RET:
	RTN			;抜ける(CAL呼び出しで実行されているので、RTNだけにする)

;*-------------------------------------*
;*  システムコール呼び出しルーチン     *
;*-------------------------------------*
BEPCAL:	LDW $28,BEEP ;BEEPアドレス
RCS:	PST UA,&H54
	JP &H5321
	RTN

;*-------------------------------------*
;*     FBF CAL呼び出しテンプレート     *
;*-------------------------------------*
; 必要パラメータをワークエリアに設定して
; FBFCAL を 実行します。
; (DIREN を 定義してください。
; DIREN:EQU &H18D1)
;
; 実行後 キャリーフラグ ON => 正常終了 / OFF => 失敗 
;        $0 => リザルトコード (0 or 1) 


FBFCAL:	PRE IX,DIREN		;ポインタ DIREN の示すアドレスを読み込む
	LDW $0,(IX+$31)
	ADW $0,$30
	PRE IZ,FBFIZ		;ワークエリアを指定してFBF実行
	PRE IX,FBFCAL2+1	;FBFCAL2のアドレスを自己書き換え
	STW $0,(IX+$31)
	PRE IX,0		;CAL呼び出しの為に IX を 0 にする
FBFCAL2:CAL &H0000		;FBFをCAL呼び出し

	PRE IX,FBFRES		;FBFのリザルトコードを取得
	LD $0,(IX+$31)		; $0 = リザルトコード	
	SBC $0,$30		; キャリーON→OK(0) OFF→NG(1)
	RTN

FBFIZ:  DB 0			;IZポインタ更新用
;*-------------------------------------*

DAT:	DB "F3.r"
DATEND:


DW &H0000
DW &HFFFF
DW &H000A,&H0036
DW &H000E,&H0059
DW &H0012,&H005C
DW &H0023,&H0036
DW &H0028,&H002B
DW &H0040,&H0058
DW &H0044,&H004D
DW &H007F

