ds_name db 'MOJ\NAME_L',0

;***********************プログラムに残す履歴*************************

db 'NAME_LK1.HD6 / 1995 1  20 かな漢字に対応 ',0
db 'NAME_L25.HD6 / 1993 12 15 音楽の組み込み',0
db 'NAME_L19.HD6 / 1993 12 15 キーボードパレット追加',0
db '1993 10 19 NAME_L3.HD6 _L2の表示部分 人物読み込み',0   ; 単なるメモ
db '800/804',0                         ;----使用している共通データ領域

;****************システムとのやり取り関係**********************

;-----------------------------このモジュールのウインドウ情報
look_me:
       call sub_esi
       dd 0,0
       dw 1,0,640,480,0,0,0,1,0,0

;-----------------------------このモジュールが使用する他のモジュール
moj1:	call sub_edi
	dw 0
	db 'NAME_O',0
moj2:	call sub_edi
	dw 0
	db 'WORD_O',0
moj_iroke:	call sub_edi
	dw 0
	db 'IROKE',0			;カラーパレット担当
moj_ura:	call sub_edi
	dw 0
	db 'URA',0			;アニメ担当
moj_end1:	call sub_edi
	dw 0
	db 'END1',0			;音楽演奏担当
moj_ongak:	call sub_edi
	dw 0
	db 'ONGAK',0			;曲管理担当

;---------------------------------------------使用するマクロ
kesu_ms:	M_KESUMS
matu:		M_MATUMS
p_call:		M_P_CALL
p_set:		M_P_SET

;*****モジュールのプログラム*********************↓

;**************データの部分******↓
ad_x	equ	40
max	equ	0
min	equ	4
lst	equ	8
k_wk	equ	12
;----------------------------------------------表示部分の設計↓

;------------------------文字のデータ↓
p0_zi:	call sub_edi
	dw 0,14,24,10,0,20,1
	db '＝＝　ｗｅｌｃｏｍｅ　ｔｏ　ＹＯＺＯ’Ｓ　ｗｏｒｌｄ　＝＝',0

p4_zi:	call sub_edi
	dw 0,11,0,480-33-40,0,20,2
db 'このソフトは [諸葛亮] のシステムで開発 実行されています｡',0
db'『諸葛亮』All Right Reserved, Copyright(C) YOZO&DAIHEI YASUDA 1990-1995',0

p1_zi:  call sub_edi
	dw 0,13,24+ad_x,27+40,0,20,2
	db 'push here first',0
	db '  ↓',0
	
p2_zi: 		 call sub_edi
	dw 0,13,0,27+40*3,0,20,1
	db '2nd →',0
	
p3_zi:		call sub_edi
	dw 0,12,8*13+ad_x,25+2+40*6-10,0,40,1
	db '  ↑  as you like',0
	
p5_zi:		call sub_edi
	dw 0,12,100,300+40,0,20,2
	db ' ↑ ',0
	db 'start',0
	
mozidt1:	call sub_edi
	dw 0,15,20+ad_x,27+80,0,40,4
	db '[ 名前 ]',0
	db '[ 問題 ]',0
	db '[ 最初 ]',0
	db '[ 最後 ]',0

;---------------------------------------------------BOX データ
boxdt1:      call sub_edi
       dw 4,8*10,20,20+ad_x,26+80,0,40,15,5,0

boxdt2:      call sub_edi
       dw 2,8*10,20,20+ad_x,26+80,0,40,15,2,0

monzidt:	call sub_edi
	dw 0,15,8*13+ad_x,25+2+80,0,40,1
db ' ----------------------------------------------  ',0

kotazidt:	call sub_edi
	dw 0,15,8*13+ad_x,25+2+40*3,0,40,1
db ' ----------------------------------------------  ',0

seizidt:	call sub_edi
	dw 0,15,8*13+ad_x,25+2+40*4,0,40,1
db ' 000  ',0

comezidt:	call sub_edi
	dw 0,15,8*13+ad_x,25+2+40*5,0,40,1
db ' 000  ',0

bg_box:      call sub_edi
       dw 3,8,20,8*14+ad_x,25+2+40*4,8,0,2,4,0

ed_box:      call sub_edi
       dw 3,8,20,8*14+ad_x,25+2+40*5,8,0,2,4,0

boxmon:      call sub_edi
       dw 1,8*52,20,8*12+ad_x,26+80,0,40,2,5,0

boxkota:      call sub_edi
       dw 1,8*52,20,8*12+ad_x,26+40*3,0,40,3,5,0

boxsei:      call sub_edi
       dw 1,8*52,20,8*12+ad_x,26+40*4,0,40,4,5,0

boxcome:      call sub_edi
       dw 1,8*52,20,8*12+ad_x,26+40*5,0,40,5,5,0

;------------------------------------------ アイコンデータ
icon_box:	call sub_edi
       	dw 3,33,33,100,300,150,0,4,15,0

condt0:	call	sub_edi
	dw	0,101,301,11,150,0  ;scr_no,X1,Y1,color,+X,+Y
	dw	210,252,230,0  		 ;icon_no,icon_no,.......,0
	
condt1:	call	sub_edi
	dw	0,101,301,1,150,0  ;scr_no,X1,Y1,color,+X,+Y
	dw	209,251,229,0  		 ;icon_no,icon_no,.......,0

;--------------------------------------------------ワークです
m_bot:	call	sub_edi
	dw	0		;botton 情報

dd_kazu:	call	sub_edx
	dd	4 dup(0)

m_flg:		call	sub_esi		;音楽演奏状態
	dw	3

;******************プログラム部分********************↓

;***********システムから呼ばれる部分↓

;--------------モジュールとウインドウの初期化
paint_wd:

        call kesu_ms
	SET_P moj_end1		;使用モジュールの宣言
	SET_P moj_ongak
	SET_P moj1
	SET_P moj2
	SET_P moj_iroke
	SET_P moj_ura
	call	monzidt
	add	edi,14
	KAKU	800,edi    ;他のモジュールが参照出来る様共通データ領域に保存
	call	kotazidt   ;しかしこう言う使い方をすると他の物に消される事有り
	add	edi,14
	KAKU	804,edi		;共通データ領域に保存
	KAKU	word ptr 300,1
	KAKU	word ptr 302,6
	CALL_P moj_ongak		;演奏曲目指定
	KAKU	word ptr 300,2		;新しい曲の準備
	CALL_P  moj_end1
	KAKU	word ptr 300,3		;演奏開始
	CALL_P  moj_end1

re_paint:		;---------------------------画面表示
	WD_CLS 0
        BOX boxdt1,4		;箱を書きます
        BOX boxdt2,2
        BOX boxmon,1
        BOX boxkota,1
        BOX boxsei,1
        BOX boxcome,1
        BOX bg_box,3
        BOX ed_box,3
MOZI mozidt1			;文字を書きます
MOZI monzidt
MOZI kotazidt
MOZI seizidt
MOZI comezidt
MOZI p1_zi
MOZI p2_zi
MOZI p3_zi
MOZI p0_zi
MOZI p4_zi
MOZI p5_zi
	BOX icon_box,3
	call com_icon
	KAKU	word ptr 312,3
	CALL_P moj_ura			;アニメのスタートです
	ret
;---------------ウインドウの初期化終了↑

be_called:      ret    ;他のモジュールからコールされた時の入口

;------------------------------ウインドウにマウスがあるとここがコールされます
mouse_in:	cmp ch,0
		jne moeck
		KAKU	word ptr 312,2
		CALL_P moj_ura
		ret

;************************独自のプログラム部分↓

;-------単独のサブルーチン
;------------------------------音楽関係↓
chg_music:
	push	eax
	KAKU	word ptr 300,4
	CALL_P  moj_end1            ;音楽の停止
	pop	eax
	KAKU	word ptr 300,1
	KAKU	word ptr 302,ax		;曲を指定
	CALL_P	moj_ongak
	KAKU	word ptr 300,2
	CALL_P  moj_end1            ;音楽の変更
	call	m_flg
	mov	ax,[esi]
	KAKU	word ptr 300,ax
	CALL_P  moj_end1            ;音楽の開始
	ret

no_cho2:	call	re_paint
	mov	ax,6
	call	chg_music
	ret

m_on:
	call	m_flg
	mov	ax,[esi]
	cmp	ax,3
	je	m_stop
	mov	ax,3
	mov	[esi],ax
	call	condt0
	mov	word ptr [edi+16],230    ;ロムアイコンの番号です
	call	condt1
	mov	word ptr [edi+16],229
	jmp	m_on_1

m_stop:
	mov	ax,4
	mov	[esi],ax
	call	condt0
	mov	word ptr [edi+16],50
	call	condt1
	mov	word ptr [edi+16],49

m_on_1:
	KAKU	300,ax
	CALL_P  moj_end1            ;音楽の開始
	BOX	icon_box,3
	call	com_icon
	call	kesu_ms
	ret

;------------------------------------アイコンの表示部分↓

com_icon:	call	condt0		;表示データ
		call	r_con_put	;表示命令
		call	condt1
		call	r_con_put
		ret

r_con_put:	 mov	ax,0200h
		 call	MOUSE
		 mov	ah,100  ;rom icon の表示
		 mov	al,29
		 call	komei1
		 mov	ax,0201h
		 call	MOUSE
		 ret

;---------------- 数字を文字で表示  eax = 数 edi = 文字 buf

winput:	mov	ebx,3  ;桁数
	mov ecx,10
stom3:	 xor edx,edx
	 div ecx
	 add dl,30h
	 mov [edi+ebx-1],dl
	 dec ebx
	 jnz stom3
	ret

;-------------------------------------------- 押された数字を表す
ck_jp:	mov	bx,3		;桁数 いくら大きくても構わない
	sub	bx,ax
	test	bx,bx
	jz	ckjp1
	mov	eax,1
	xor edx,edx
	mov	ecx,10		;桁により10倍ずつ
ckjp2:	mul	ecx
	dec	bx		;10のなんじょうかの計算
	jnz	ckjp2
	jmp	short ckjp3
ckjp1:	mov	eax,1
ckjp3:	call	dd_kazu
	call	m_bot
	mov	cx,[edi]
	cmp	ch,2		;右ボタンならそれを引く
	je	ckjp4
	add	eax,[edx+k_wk]
	cmp	eax,[edx+max]
	jbe	ckpj5
	ret
ckpj5:	mov	[edx+k_wk],eax
	ret
ckjp4:	mov	ebx,[edx+k_wk]
	sub	ebx,eax
	cmp	ebx,1
	jge	ckjp6
	ret
ckjp6:	mov	[edx+k_wk],ebx
	ret

;------------------------------プログラムを終わらせます
totowns:	mov	ah,25
	mov	al,2
	mov	bx,0		;画面0 cls
	call	komei
	mov	ah,25
	mov	al,2
	mov	bx,1		;画面１ cls
	call	komei

	mov ah,0
	int 90h		         ;key boad bios 初期化
	mov ah,02h
	mov dx,0000001000000000b
	int 90h           ;key coad style set
	mov ah,03h
	mov dx,0000001000000000b
	int 90h			;key coad read style set
	mov	ax,0600h	; キーボードバッファークリア
	int	90h
	KAKU	word ptr 300,7
	CALL_P moj_iroke           ; パレットを初期化して変化が有れば保存｡
	KAKU	word ptr 300,1000
	CALL_P moj_end1            ;割り込みを戻す
     mov ah,1
      call MOUSE
      mov	ah,203		;プログラム終了命令
      jmp	komei

;----------------------------マウスが押されていた時のチエック↓
moeck:	call	m_bot
	mov	[edi],cx	;ボタン情報の保存

	MOU icon_box,3		; アイコイが押されているか調べる
	cmp bx,1
	je ckkk			; 押されていた様だ

        MOU  bg_box,3  	        ;アイコンで無ければこれかと調べる
	cmp bx,1
	je bg_ck         ;問題開始番号の変更が押されていた様だ

        MOU ed_box,3
	cmp	bx,1
	je	ed_ck   ;問題終了位置の変更が押されていた様だ

	MOU boxdt1,2	; コマンドが押されているか
	cmp bx,1
	je ck_1         ;名前か問題の読み込み
	ret		;コマンドの外が押されていた

;--------------------------押されたそれぞれの命令↓
;----名前と問題の読み込み↓
ck_1:	cmp ax,1
	je get_num
	cmp	ax,2
	je	monda
	ret
;---------------------------アイコンが押されていた
ckkk:	cmp	ax,1
	je	siken		;最初の箱ならテスト
	cmp	ax,2
	je	totowns		;次の箱なら終わり
	cmp	ax,3
	je	m_on		;音楽の停止と開始
	ret
;-----------------------------問題スタート位置の変更
bg_ck:	call	dd_kazu
	mov	ebx,[edx+min]
	mov	[edx+k_wk],ebx    ;別の物が一つのプログラムを使うので
	call	ck_jp
	mov	eax,[edx+k_wk]
	mov	[edx+min],eax
	call	seizidt
	add	edi,15
	call	winput
	BOX	 bg_box,3
	MOZI	 seizidt
	call	kesu_ms
	ret

;-----------------------------------問題終了位置の変更

ed_ck:	call	dd_kazu
	mov	ebx,[edx+lst]
	mov	[edx+k_wk],ebx    ;別の物が一つのプログラムを使うので
	call	ck_jp
	mov	eax,[edx+k_wk]
	mov	[edx+lst],eax
	call	comezidt
	add	edi,15
	call	winput
	BOX	 ed_box,3
	MOZI	 comezidt
	call	kesu_ms
	ret

;---------------------------------------------テストです
siKen:	call	dd_kazu
	mov	eax,[edx+min]
	mov	ebx,[edx+lst]
	cmp	ebx,eax		;最後が最初より大きいか｡
	jae	siken2
	xchg	eax,ebx
siken2:	mov	[edx+min],eax	;念の為に
	mov	[edx+lst],ebx
	dec	eax
	shl	eax,1
	shl	ebx,1     ;ebx*2
	KAKU    840,eax
	KAKU	844,ebx
	WD_ERZ 0		;ウインドウの消去
	WD_LEFT			;ウインドウからの離脱
	mov	ax,4
	call	chg_music
	mov	ax,3
	KAKU	300,ax
	CALL_P moj1           ; テスト開始
	WD_WANT               ; テスト終了プログラムとして復活
	call	re_paint
	mov	ax,6
	call	chg_music
	ret
;-------------------------------成績ファイルの読み込み	
get_num:
	mov	ax,1
	call	chg_music
	call	syokika
	KAKU	word ptr 300,1
	CALL_P	moj1			;成績ファイルの読み込み
	jmp	no_cho2

syokika:	KAKU	dword ptr 836,0
	ret
;-----------------------------------
;問題の読み込み
monda:
	mov	ax,3
	call	chg_music
	KAKU	word ptr 300,2
	CALL_P	moj1
	call	re_paint
	YOMU	eax,836
	KAKU	dword ptr 840,0  ;最初の問題
	KAKU	844,eax     ;取り合えず最大問題数
	shr	eax,1       ;eax/2  
	call	dd_kazu
	mov	[edx+max],eax
	mov	[edx+lst],eax
	mov	dword ptr [edx+min],1
	call	comezidt
	add	edi,15
	call	winput
	mov	eax,'100 '
	call	seizidt
	mov	[edi+14],eax
	call	re_paint
	mov	ax,6
	call	chg_music
	ret


