	INCLUDE	YAM3D86.LIB
	ASSUME	DS:DATA,CS:CODE
LINEXE	MACRO	X0,Y0,X1,Y1
	MOV	AX,X0
	MOV	BX,Y0
	MOV	CX,X1
	MOV	DX,Y1
	$LINE
	ENDM
BOX	MACRO	X0,Y0,X1,Y1
	LINEXE	X0,Y0,X1,Y0
	LINEXE	X0,Y0,X0,Y1
	LINEXE	X1,Y0,X1,Y1
	LINEXE	X0,Y1,X1,Y1
	ENDM
;
;**ABOUT CONDITION CODE
;
TAKEOFF	EQU	0000000000000001B
LANDING	EQU	0000000000000010B
ABOUT	EQU	1000000000000000B
BADPICH	EQU	0100000000000000B
LOWSPD	EQU	0010000000000000B
HISPD	EQU	0001000000000000B
COUT	EQU	0000100000000000B
;
;
;
DSPD	EQU	2
DPOW	EQU	1
TOSPD	EQU	60
TDSPD	EQU	30
LBOUND	EQU	5
LOWEST	EQU	3
HIGHEST	EQU	2000
SLOWEST	EQU	20
FASTEST	EQU	118
DWNSPD	EQU	35
RADSPC	EQU	15
ELVSPC	EQU	2
AILSPC	EQU	3
PORTX0	EQU	-15
PORTZ0	EQU	-750
PORTX1	EQU	15
PORTZ1	EQU	750
;
SCRNX0	EQU	150
SCRNY0	EQU	10
SCRNX1	EQU	489
SCRNY1	EQU	SCRNY0+250
CENTX	EQU	(SCRNX0+SCRNX1)/2
CENTY	EQU	(SCRNY0+SCRNY1)/2
;
RDX0	EQU	90
RDY0	EQU	SCRNY1+5
RDX1	EQU	RDX0+120
RDY1	EQU	RDY0+120
;
POWMAX	EQU	59
POWX0	EQU	RDX1+10
POWY0	EQU	RDY0
POWX1	EQU	POWX0+20
POWY1	EQU	POWY0+(POWMAX*2)+2
;
POSTX0	EQU	429
POSTY0	EQU	RDY0
POSTX1	EQU	POSTX0+120
POSTY1	EQU	POSTY0+120
POSTCX	EQU	(POSTX0+POSTX1)/2
POSTCY	EQU	(POSTY0+POSTY1)/2
;
HIGHTX	EQU	RDX0+25
HIGHTY0	EQU	SCRNY0
HIGHTY1	EQU	SCRNY1
HIGHTST	EQU	5
;
ILSH_X	EQU	CENTX
ILSH_Y	EQU	SCRNY1+20
;
DIRCX	EQU	CENTX
DIRCY	EQU	ILSH_Y+70
DIRR	EQU	40
;
SPDMAX	EQU	FASTEST
SPDX0	EQU	POSTX0-30
SPDY0	EQU	POSTY0
SPDX1	EQU	SPDX0+20
SPDY1	EQU	SPDY0+SPDMAX+2
;
DATA	SEGMENT	PUBLIC
	INCLUDE	EARTH.ASM
PROGRAM	DB	"1990 山川 総司作"
;
MX	DW	0
MY	DW	500
MZ	DW	-4000
MPICH	DW	0
MBANK	DW	0
MHEAD	DW	0
MSPEED	DW	0
MPOWER	DW	0
MFUEL	DW	0
CCODE	DW	0
PCTR	DW	0
;
POSTSX0	DW	0
POSTSY0	DW	0
POSTSX1	DW	0
POSTSY1	DW	0
HIGHTS	DW	0
POWSTK	DW	0
ILS_HS	DW	0
DIRSX	DW	0
DIRSY	DW	0
SPDS	DW	0
;
Y3WORK	DB	512 DUP(?)
DRWBUF	DB	4096 DUP(?)
ERSBUF	DB	4096 DUP(?)
;
MES_LS	DB	"失速しました。"
SIZ_LS	EQU	$-MES_LS
MES_HS	DB	"機の耐久速度をオーバーしました。"
SIZ_HS	EQU	$-MES_HS
MES_CO	DB	"コースアウトしました。"
SIZ_CO	EQU	$-MES_CO
MES_BP	DB	"機首から地面に突っ込みました。"
SIZ_BP	EQU	$-MES_BP
MES_SF	DB	"ＣＯＭＰＬＥＴＥ！"
SIZ_SF	EQU	$-MES_SF
MES_HR	DB	"Ｈｉｔ  ＲＥＴＵＲＮ(Ｖ１．０)"
SIZ_HR	EQU	$-MES_HR
MES_YM	DB	"Ｓ.Ｙａｍａｋａｗａ  Ｐｒｅｓｅｎｔｓ"
SIZ_YM	EQU	$-MES_YM
;
DATA	ENDS
;
;
CODE	SEGMENT	PUBLIC
;
CLIPF	PROC
;
;	DS:[DI]   +2   +4   +6  +8  +10  +12  +14  +16
;	     X1   Y1   X2   Y2  --  CPX1 CPY1 CPX2 CPY2
	MOV	AX,[DI+10]
	CMP	[DI  ],AX
	JGE	CPF_0
	CMP	[DI+4],AX
	JGE	CPF_0
	JMP	FAR PTR CPF_OUT
;
CPF_0:	MOV	AX,[DI+14]
	CMP	[DI  ],AX
	JLE	CPF_1
	CMP	[DI+4],AX
	JLE	CPF_1
	JMP	FAR PTR CPF_OUT
;
CPF_1:	MOV	AX,[DI+12]
	CMP	[DI+2],AX
	JGE	CPF_2
	CMP	[DI+6],AX
	JGE	CPF_2
	JMP	FAR PTR CPF_OUT
;
CPF_2:	MOV	AX,[DI+16]
	CMP	[DI+2],AX
	JLE	CPF_3
	CMP	[DI+6],AX
	JLE	CPF_3
	JMP	FAR PTR CPF_OUT
;
;	完全に画面外ではない
;
;
;	X1<CPX1?
CPF_3:	MOV	BX,[DI+10]
	CMP	[DI  ],BX
	JGE	CP_X21
;CLIP	X1=CPX1
	MOV	[DI+8],BX
	$CLIPX
	MOV	[DI  ],BX
	MOV	[DI+2],AX
	JMP	[CP_X21]
;
;	X2<CPX1?
CP_X21:	MOV	BX,[DI+10]
	CMP	[DI+4],BX
	JGE	CP_X12
;CLIP	X2=CPX1
	MOV	[DI+8],BX
	$CLIPX
	MOV	[DI+4],BX
	MOV	[DI+6],AX
;
;	X1>CPX2?
CP_X12:	MOV	BX,[DI+14]
	CMP	[DI  ],BX
	JLE	CP_X22
;CLIP	X1=CPX2
	MOV	[DI+8],BX
	$CLIPX
	MOV	[DI  ],BX
	MOV	[DI+2],AX
	JMP	[CP_Y11]
;
;	X2>CPX2?
CP_X22:	MOV	BX,[DI+14]
	CMP	[DI+4],BX
	JLE	CP_Y11
	MOV	[DI+8],BX
	$CLIPX
	MOV	[DI+4],BX
	MOV	[DI+6],AX
;
;	Y1<CPY1?
CP_Y11:	MOV	BX,[DI+12]
	CMP	[DI+2],BX
	JGE	CP_Y21
	MOV	[DI+8],BX
	$CLIPY
	MOV	[DI  ],AX
	MOV	[DI+2],BX
	JMP	[CP_Y22]
;
;	Y2<CPY1?
CP_Y21:	MOV	BX,[DI+12]
	CMP	[DI+6],BX
	JGE	CP_Y12
	MOV	[DI+8],BX
	$CLIPY
	MOV	[DI+4],AX
	MOV	[DI+6],BX
;
;	Y1>CPY2?
CP_Y12:	MOV	BX,[DI+16]
	CMP	[DI+2],BX
	JLE	CP_Y22
	MOV	[DI+8],BX
	$CLIPY
	MOV	[DI  ],AX
	MOV	[DI+2],BX
	JMP	[CLP_EX]
;
;	Y2>CPY2?
CP_Y22:	MOV	BX,[DI+16]
	CMP	[DI+6],BX
	JLE	CLP_EX
	MOV	[DI+8],BX
	$CLIPY
	MOV	[DI+4],AX
	MOV	[DI+6],BX
;
;	LAST CHECK
CLP_EX:	MOV	AX,[DI+10]
	CMP	[DI  ],AX
	JL	CPF_OUT
	CMP	[DI+4],AX
	JL	CPF_OUT
	MOV	AX,[DI+14]
	CMP	[DI  ],AX
	JG	CPF_OUT
	CMP	[DI+4],AX
	JG	CPF_OUT
;
	MOV	AX,[DI+12]
	CMP	[DI+2],AX
	JL	CPF_OUT
	CMP	[DI+6],AX
	JL	CPF_OUT
	MOV	AX,[DI+16]
	CMP	[DI+2],AX
	JG	CPF_OUT
	CMP	[DI+6],AX
	JG	CPF_OUT
	RET
;
CPF_OUT:MOV	AX,0
	MOV	[DI  ],AX
	MOV	[DI+2],AX
	MOV	[DI+4],AX
	MOV	[DI+6],AX
	RET
CLIPF	ENDP
;
;
;
MAKEDSP	PROC
	MOV	DI,OFFSET Y3WORK
	$PALET	0,0
	$PALET	1,9
	$PALET	2,10
	$PALET	3,11
	$PALET	4,12
	$PALET	5,13
	$PALET	6,14
	$PALET	7,15
	$PALET	8,0
	$PALET	9,9
	$PALET	10,10
	$PALET	11,11
	$PALET	12,12
	$PALET	13,13
	$PALET	14,14
	$PALET	15,15
;
	MOV	AL,7
	$GCOLOR
	$PSET
	BOX	SCRNX0,SCRNY0,SCRNX1,SCRNY1
	BOX	RDX0,RDY0,RDX1,RDY1
	BOX	POWX0,POWY0,POWX1,POWY1
	BOX	POSTX0,POSTY0,POSTX1,POSTY1
	BOX	SPDX0,SPDY0,SPDX1,SPDY1
	LINEXE	SPDX0-4,SPDY1-SLOWEST-3,SPDX0  ,SPDY1-SLOWEST-3
	LINEXE	SPDX1  ,SPDY1-SLOWEST-3,SPDX1+4,SPDY1-SLOWEST-3
;
	MOV	BX,HIGHTY1
	MOV	DX,HIGHTY1
HIGHTL:	MOV	AX,HIGHTX
	MOV	CX,HIGHTX+9
	PUSH	BX
	$LINE
	POP	BX
	MOV	DX,BX
;
	MOV	AX,HIGHTX+20
	MOV	CX,HIGHTX+29
	PUSH	BX
	$LINE
	POP	BX
	MOV	DX,BX
	SUB	BX,HIGHTST*5
	SUB	DX,HIGHTST*5
	CMP	DX,HIGHTY0
	JGE	HIGHTL
;
	MOV	BX,HIGHTY1
	MOV	DX,HIGHTY1
HIGHT2:	MOV	AX,HIGHTX
	MOV	CX,HIGHTX+4
	PUSH	BX
	$LINE
	POP	BX
	MOV	DX,BX
;
	MOV	AX,HIGHTX+25
	MOV	CX,HIGHTX+29
	PUSH	BX
	$LINE
	POP	BX
	MOV	DX,BX
	SUB	BX,HIGHTST
	SUB	DX,HIGHTST
	CMP	DX,HIGHTY0
	JGE	HIGHT2
;
;ILS_HORIZONTAL
	LINEXE	ILSH_X           ,ILSH_Y,ILSH_X         ,ILSH_Y+9
	LINEXE	ILSH_X+PORTX0*2  ,ILSH_Y,ILSH_X+PORTX0*2,ILSH_Y+4
	LINEXE	ILSH_X+PORTX1*2  ,ILSH_Y,ILSH_X+PORTX1*2,ILSH_Y+4
	BOX	ILSH_X+PORTX0*4-5,ILSH_Y,ILSH_X+PORTX0*4,ILSH_Y+9
	BOX	ILSH_X+PORTX1*4+5,ILSH_Y,ILSH_X+PORTX1*4,ILSH_Y+9
;
	MOV	BX,0
DIRL:	MOV	AX,DIRR
	$COS
	MOV	CX,AX
	MOV	AX,DIRR
	$SIN
	MOV	DX,AX
	PUSH	BX
	ADD	CX,DIRCX
	ADD	DX,DIRCY
	$POINT
	POP	BX
	INC	BX
	CMP	BX,1024
	JNE	DIRL
;
	RET
MAKEDSP	ENDP
;
;
;
DRAWEXE	PROC
	MOV	SI,OFFSET EARTH
	MOV	DI,OFFSET DRWBUF
	$MKFRM	4000H+32*3+31
	MOV	DI,OFFSET ERSBUF
	$MKFRM	4000H+32*3+31
;
	MOV	DI,OFFSET Y3WORK
	$PSET
	;
	MOV	AX,1
	PUSH	AX
DEX_0:	MOV	DI,OFFSET Y3WORK
;
	MOV	AX,[MHEAD]
	NEG	AX
	MOV	[DI+6],AX
	MOV	AX,[MPICH]
	NEG	AX
	MOV	[DI+8],AX
	MOV	AX,[MBANK]
	NEG	AX
	MOV	[DI+10],AX
;
DEX_1:	MOV	DI,OFFSET Y3WORK
	MOV	AX,[SI]
	SUB	AX,[MX]
	MOV	[DI],AX
;
	MOV	AX,[MY]
	NEG	AX
	MOV	[DI+2],AX
;
	MOV	AX,[SI+2]
	SUB	AX,[MZ]
	MOV	[DI+4],AX
	$3DROLL
	MOV	AX,[DI+4]
	CMP	AX,1
	JG	DEX_1_2
	JMP	FAR PTR DEX_OUT
;
DEX_1_2:MOV	AX,[DI]
	MOV	DX,100
	IMUL	DX
	MOV	BX,DX
	AND	BX,BX
	JNS	DEX122
	NEG	BX
DEX122:	SHL	BX,1
	SHL	BX,1
	CMP	BX,[DI+4]
	JL	DEX_1_3
	JMP	[DEX_OUT]
;
DEX_1_3:MOV	BX,[DI+4]
	IDIV	BX
	MOV	CX,AX
;
	MOV	AX,[DI+2]
	MOV	DX,100
	IMUL	DX
	MOV	BX,DX
	AND	BX,BX
	JNS	DEX132
	NEG	BX
DEX132:	SHL	BX,1
	SHL	BX,1
	CMP	BX,[DI+4]
	JL	DEX_1_4
	JMP	[DEX_OUT]
;
DEX_1_4:MOV	BX,[DI+4]
	IDIV	BX
	MOV	DX,AX
;
	ADD	CX,CENTX
	NEG	DX
	ADD	DX,CENTY
;
	CMP	CX,SCRNX0
	JLE	DEX_OUT
	CMP	CX,SCRNX1
	JGE	DEX_OUT
	CMP	DX,SCRNY0
	JLE	DEX_OUT
	CMP	DX,SCRNY1
	JGE	DEX_OUT
;
	MOV	DI,OFFSET DRWBUF
	$ADFRM
	MOV	DI,OFFSET ERSBUF
	$ADFRM
;
DEX_OUT:ADD	SI,4
	MOV	AX,[SI]
	CMP	AX,7FFFH
	JE	DEX_O_2
	JMP	[DEX_1]
;
DEX_O_2:ADD	SI,2
	POP	AX
	MOV	DI,OFFSET Y3WORK
	$GCOLOR
	MOV	DI,OFFSET DRWBUF
	$GDRAW
	$MKFRM	4000H+3*32+31
	INC	AX
	CMP	AX,7
	JE	DEX_END
	PUSH	AX
	JMP	[DEX_0]
;
DEX_END:RET
DRAWEXE	ENDP
;
GOFWRD	PROC
	PUSH	AX
	PUSH	BX
	PUSH	DX
;
	MOV	AX,[MSPEED]
	MOV	BX,[MPICH]
	$COS
	MOV	BX,[MHEAD]
	$SIN
	SUB	[MX],AX
;
	MOV	AX,[MSPEED]
	MOV	BX,[MPICH]
	$COS
	MOV	BX,[MHEAD]
	$COS
	ADD	[MZ],AX
;
	MOV	AX,[MSPEED]
	MOV	BX,[MPICH]
	$SIN
	ADD	[MY],AX
	CMP	[MY],LOWEST
	JG	GF_0
	MOV	[MY],LOWEST
;
GF_0:	CMP	[MY],HIGHEST
	JL	GF_1
	MOV	[MY],HIGHEST
;
GF_1:	POP	DX
	POP	BX
	POP	AX
	RET
GOFWRD	ENDP	
;
CENTLIN	PROC
	MOV	DI,OFFSET Y3WORK
	$PSET
	MOV	AL,7
	$GCOLOR
	LINEXE	CENTX-10,CENTY  ,CENTX-5,CENTY
	LINEXE	CENTX+10,CENTY  ,CENTX+5,CENTY
	LINEXE	CENTX   ,CENTY-8,CENTX  ,CENTY-5
	LINEXE	CENTX   ,CENTY+8,CENTX  ,CENTY+5
	RET
CENTLIN	ENDP
;
;
;
RADER	PROC
	PUSH	AX
	PUSH	CX
	PUSH	DX
	PUSH	DI
	MOV	DI,OFFSET Y3WORK
	MOV	AL,1
	$GCOLOR	
	LINEXE	RDX0+1,(RDY0+RDY1)/2,RDX1-1,(RDY0+RDY1)/2
	LINEXE	(RDX0+RDX1)/2,RDY0+1,(RDX0+RDX1)/2,RDY1-1
	MOV	AL,6
	$GCOLOR
	MOV	AX,[MX]
	CWD
	MOV	DI,273
	IDIV	DI
	MOV	CX,AX
	MOV	AX,[MZ]
	CWD
	MOV	DI,-273
	IDIV	DI
	MOV	DX,AX
	ADD	CX,(RDX0+RDX1)/2
	ADD	DX,(RDY0+RDY1)/2
	CMP	CX,RDX0
	JLE	RDR_EX
	CMP	CX,RDX1
	JGE	RDR_EX
	CMP	DX,RDY0
	JLE	RDR_EX
	CMP	DX,RDY1
	JGE	RDR_EX
	MOV	DI,OFFSET ERSBUF
	$ADFRM
	MOV	DI,OFFSET Y3WORK
	$POINT
RDR_EX:	POP	DI
	POP	DX
	POP	CX
	POP	AX
	RET
RADER	ENDP
;
;
;
HIGHTM	PROC
	MOV	DI,OFFSET Y3WORK
	$PRESET
	MOV	BX,[HIGHTS]
	MOV	DX,[HIGHTS]
	MOV	AX,HIGHTX+10
	MOV	CX,HIGHTX+19
	$LINE
	$PSET
	MOV	AL,2
	$GCOLOR
;
	MOV	DX,[MY]
	SUB	DX,LOWEST
	SHR	DX,1
	NEG	DX
	ADD	DX,HIGHTY1
	CMP	DX,HIGHTY0
	JGE	HIGHTE
	MOV	DX,HIGHTY0
HIGHTE:	MOV	[HIGHTS],DX
	MOV	BX,DX
	MOV	AX,HIGHTX+10
	MOV	CX,HIGHTX+19
	$LINE
	RET
HIGHTM	ENDP
;
;
;
POWMTR	PROC
	MOV	DI,OFFSET Y3WORK
	MOV	SI,[MPOWER]
	SUB	SI,[POWSTK]
	JNE	PWMTR0
;
	RET
;
PWMTR0:	JG	PWUP0
PWDWN0:	$PRESET
	MOV	BX,[MPOWER]
	INC	BX
	SHL	BX,1
	NEG	BX
	ADD	BX,POWY1
	MOV	DX,BX
PWDWN1:	MOV	AX,POWX0+1
	MOV	CX,POWX1-1	
	PUSH	BX
	PUSH	SI
	$LINE
	POP	SI
	POP	BX
	SUB	BX,2
	MOV	DX,BX
;	
	INC	SI
	JNE	PWDWN1
	MOV	AX,[MPOWER]
	MOV	[POWSTK],AX
	RET
POWMTR	ENDP
;
PWUP0:	$PSET
	MOV	AL,2
	$GCOLOR
	MOV	BX,[MPOWER]
	SHL	BX,1
	NEG	BX
	ADD	BX,POWY1
	MOV	DX,BX
PWUP1:	MOV	AX,POWX0+1
	MOV	CX,POWX1-1
	PUSH	BX
	PUSH	SI
	$LINE
	POP	SI
	POP	BX
	ADD	BX,2
	MOV	DX,BX
	DEC	SI
	JNE	PWUP1
	MOV	AX,[MPOWER]
	MOV	[POWSTK],AX
	RET
;
;
;
POSTURE	PROC
	MOV	DI,OFFSET Y3WORK
;
	MOV	BX,[MPICH]
	AND	BX,1023
;
	CMP	BX,768
	JL	POST0
	SUB	BX,1024
	JMP	POST1
;
POST0:	CMP	BX,256
	JL	POST1
	SUB	BX,512
;
POST1:	NEG	BX
	MOV	[DI+2],BX
	MOV	[DI+6],BX
;
	MOV	BX,[MBANK]
	NEG	BX
	MOV	CX,400
	MOV	DX,[DI+2]
	$ROLL
	MOV	[DI  ],CX
	NEG	DX
	MOV	[DI+2],DX
;
	MOV	BX,[MBANK]
	NEG	BX
	MOV	CX,-400
	MOV	DX,[DI+6]
	$ROLL
	MOV	[DI+4],CX
	NEG	DX
	MOV	[DI+6],DX
;
	ADD	WORD PTR [DI  ],POSTCX
	ADD	WORD PTR [DI+2],POSTCY
	ADD	WORD PTR [DI+4],POSTCX
	ADD	WORD PTR [DI+6],POSTCY
;
	MOV	WORD PTR [DI+10],POSTX0+1
	MOV	WORD PTR [DI+12],POSTY0+1
	MOV	WORD PTR [DI+14],POSTX1-1
	MOV	WORD PTR [DI+16],POSTY1-1
;
	CALL	[CLIPF]
;
	ADD	DI,8
	$PRESET
	MOV	AX,[POSTSX0]
	MOV	BX,[POSTSY0]
	MOV	CX,[POSTSX1]
	MOV	DX,[POSTSY1]
	$LINE
	MOV	AL,7
	$GCOLOR
	$PSET
	LINEXE	(POSTCX+POSTX0)/2,POSTCY,(POSTCX+POSTX1)/2,POSTCY
	SUB	DI,8
;
	MOV	AX,[DI  ]
	MOV	BX,[DI+2]
	MOV	CX,[DI+4]
	MOV	DX,[DI+6]
	MOV	[POSTSX0],AX
	MOV	[POSTSY0],BX
	MOV	[POSTSX1],CX
	MOV	[POSTSY1],DX
	$LINE
;
	RET
POSTURE	ENDP
;
;
;
ILS_HOR	PROC
	MOV	DI,OFFSET Y3WORK
	$PRESET
	MOV	AX,[ILS_HS]
	MOV	BX,ILSH_Y-1
	MOV	CX,[ILS_HS]
	SUB	CX,5
	MOV	DX,ILSH_Y-6
	$LINE
	MOV	AX,[ILS_HS]
	MOV	BX,ILSH_Y-1
	MOV	CX,[ILS_HS]
	ADD	CX,5
	MOV	DX,ILSH_Y-6
	$LINE
	MOV	AL,2
	$GCOLOR
;
	MOV	AX,(PORTX0+PORTX1)/2
	SUB	AX,[MX]
	CMP	AX,PORTX0*2
	JG	ILS_H0
	MOV	AX,PORTX0*2
ILS_H0:	CMP	AX,PORTX1*2
	JL	ILS_H1
	MOV	AX,PORTX1*2
;
ILS_H1:	MOV	BX,[MZ]
	AND	BX,BX
	JS	ILS_H2
	NEG	AX
ILS_H2:	MOV	BX,2
	IMUL	BX
	ADD	AX,ILSH_X
	MOV	[ILS_HS],AX
;
	$PSET
	MOV	AX,[ILS_HS]
	MOV	BX,ILSH_Y-1
	MOV	CX,[ILS_HS]
	SUB	CX,5
	MOV	DX,ILSH_Y-6
	$LINE
	MOV	AX,[ILS_HS]
	MOV	BX,ILSH_Y-1
	MOV	CX,[ILS_HS]
	ADD	CX,5
	MOV	DX,ILSH_Y-6
	$LINE
;
	RET
ILS_HOR	ENDP
;
;
;
HEADANG	PROC
	MOV	DI,OFFSET Y3WORK
	$PRESET
	MOV	AX,DIRCX
	MOV	BX,DIRCY
	MOV	CX,[DIRSX]
	MOV	DX,[DIRSY]
	$LINE
	MOV	AL,6
	$GCOLOR
	$PSET
;
	MOV	BX,[MHEAD]
	ADD	BX,256
	MOV	AX,DIRR-5
	$COS
	MOV	CX,AX
	MOV	BX,[MHEAD]
	ADD	BX,256
	MOV	AX,DIRR-5
	$SIN
	MOV	DX,AX
;
	ADD	CX,DIRCX
	NEG	DX
	ADD	DX,DIRCY
	MOV	[DIRSX],CX
	MOV	[DIRSY],DX
;
	MOV	AX,DIRCX
	MOV	BX,DIRCY
	$LINE
	RET
HEADANG	ENDP
;
;
;
SPEEDM	PROC
	MOV	DI,OFFSET Y3WORK
	MOV	AL,2
	$GCOLOR
	CMP	WORD PTR [MSPEED],TOSPD
	JL	SPDM2
	MOV	AL,6
	$GCOLOR
SPDM2:	$PRESET
	MOV	AX,SPDX0+1
	MOV	BX,[SPDS]
	MOV	CX,SPDX1-1
	MOV	DX,[SPDS]
	$LINE
	$PSET
	MOV	AX,SPDX0+1
	MOV	CX,SPDX1-1
	MOV	BX,SPDY1-1
	SUB	BX,[MSPEED]
	MOV	DX,BX
	MOV	[SPDS],BX
	$LINE
	RET
SPEEDM	ENDP
;
;
;
RADDER	PROC
	MOV	BX,[MBANK]
	AND	BX,1023
	JNE	RAD0
	RET
;
RAD0:
; -6<BX<6 not care
	CMP	BX,1018		;1018 = -6
	JGE	RAD_EX
	CMP	BX,6
	JLE	RAD_EX
; 506<BX<518 not care
	CMP	BX,506
	JL	RAD1
	CMP	BX,518
	JLE	RAD_EX
;
RAD1:
	MOV	AX,RADSPC
	$SIN
	ADD	[MHEAD],AX
;
RAD_EX:
	RET
RADDER	ENDP
;
;
;
PULLUP	PROC
	MOV	AX,ELVSPC
	MOV	BX,[MBANK]
	$COS
	ADD	[MPICH],AX
	MOV	AX,ELVSPC
	MOV	BX,[MBANK]
	$SIN
	ADD	[MHEAD],AX
;  256<MPICH<768 must be corrected
	AND	[MPICH],1023
	CMP	[MPICH],256
	JL	PLUP_EX
	CMP	[MPICH],768
	JG	PLUP_EX
;
	SUB	[MPICH],512
	NEG	[MPICH]
	AND	[MPICH],1023
	ADD	[MBANK],512
	AND	[MBANK],1023
PLUP_EX:
	RET
PULLUP	ENDP
;
PULLDWN	PROC	
	MOV	AX,ELVSPC
	MOV	BX,[MBANK]
	$COS
	SUB	[MPICH],AX
	MOV	AX,ELVSPC
	MOV	BX,[MBANK]
	$SIN
	SUB	[MHEAD],AX
;  256<MPICH<768 must be corrected
	AND	[MPICH],1023
	CMP	[MPICH],256
	JL	PLDN_EX
	CMP	[MPICH],768
	JG	PLDN_EX
;
	SUB	[MPICH],512
	NEG	[MPICH]
	AND	[MPICH],1023
	ADD	[MBANK],512
	AND	[MBANK],1023
PLDN_EX:
	RET
PULLDWN	ENDP
;
KEYSCAN	PROC
	MOV	DI,OFFSET Y3WORK
	$K_READ
;
	$K_CHK	4FH	;←
	JE	KS_2
	MOV	AX,[CCODE]
	AND	AX,LANDING
	JNE	KS_1L
	ADD	[MBANK],AILSPC
	JMP	KS_2
KS_1L:	ADD	[MHEAD],AILSPC
KS_2:	$K_CHK	51H	;→
	JE	KS_3
	MOV	AX,[CCODE]
	AND	AX,LANDING
	JNE	KS_2L
	SUB	[MBANK],AILSPC
	JMP	KS_3
KS_2L:	SUB	[MHEAD],AILSPC
KS_3:	$K_CHK	4DH
	JE	KS_4
	CALL	[PULLDWN]
KS_4:	$K_CHK	50H
	JE	KS_7
	CALL	[PULLUP]
KS_7:	$K_CHK	11H
	JE	KS_8
	ADD	[MPOWER],DPOW
	CMP	[MPOWER],POWMAX
	JL	KS_8
	MOV	[MPOWER],POWMAX
KS_8:	$K_CHK	1EH
	JE	KS_9
	SUB	[MPOWER],DPOW
	JNS	KS_9
	MOV	[MPOWER],0
KS_9:	$K_CHK	01H
	JE	KS_10
	MOV	AH,4CH
	INT	21H
KS_10:	$K_BUFC
	RET
KEYSCAN	ENDP
;
;
;
POWSPD	PROC
	MOV	AX,[MPOWER]
	CMP	AX,20
	JG	PS1
	SUB	WORD PTR [MSPEED],DSPD
	JMP	PSX
;
PS1:	CMP	AX,40
	JG	PS2
	JMP	PSX
;
PS2:	CMP	AX,45
	JG	PS3
	ADD	WORD PTR [MSPEED],DSPD
	JMP	PSX
;
PS3:	CMP	AX,50
	JG	PS4
	ADD	WORD PTR [MSPEED],DSPD*2
	JMP	PSX
;
PS4:	ADD	WORD PTR [MSPEED],DSPD*3
;
PSX:	CMP	WORD PTR [MSPEED],0
	JG	PSY
	MOV	WORD PTR [MSPEED],0
;
PSY:	CMP	WORD PTR [MSPEED],FASTEST
	JL	C_LAND
	MOV	WORD PTR [MSPEED],FASTEST
POWSPD	ENDP
;
;
;
CONDITN	PROC
C_LAND:	MOV	AX,[CCODE]
	AND	AX,LANDING
	JNE	C_LAN0
	JMP	C_PRUN
;
C_LAN0:	CMP	[MY],LOWEST+LBOUND
	JLE	C_LN01
	JMP	C_PRUN
;
C_LN01:	MOV	[MY],LOWEST
	MOV	AX,[MSPEED]
	AND	AX,AX
	JNE	C_LAN1
;
	MOV	WORD PTR [CCODE],ABOUT
	RET
;
;
C_LAN1:	CMP	WORD PTR [MSPEED],TDSPD
	JG	C_LAN2
	SUB	WORD PTR [MPICH],4
C_LAN2:	CMP	WORD PTR [MPICH],0
	JG	C_LAN3
	MOV	WORD PTR [MPICH],0
C_LAN3:	MOV	WORD PTR [MBANK],0
;
	CMP	WORD PTR [MX],PORTX0
	JL	C_LOUT
	CMP	WORD PTR [MX],PORTX1
	JG	C_LOUT
	CMP	WORD PTR [MZ],PORTZ0
	JL	C_LOUT
	CMP	WORD PTR [MZ],PORTZ1
	JG	C_LOUT
	RET 
;
C_LOUT:	OR	WORD PTR [CCODE],ABOUT
	OR	WORD PTR [CCODE],COUT
	RET
;
;
C_PRUN:	MOV	AX,[CCODE]
	AND	AX,TAKEOFF
	JE	C_PR0
	JMP	C_FLT
;
C_PR0:	CMP	[MY],LOWEST
	JG	C_PR2
;
	JMP	C_LAN1	;COURSE OUT CHECK
;
C_PR2:	CMP	WORD PTR [MSPEED],TOSPD
	JL	C_LOW
	OR	WORD PTR [CCODE],TAKEOFF
	MOV	AX,NOT LANDING
	AND	WORD PTR [CCODE],AX
	RET
;
C_LOW:	OR	WORD PTR [CCODE],ABOUT
	OR	WORD PTR [CCODE],LOWSPD
	RET
;
C_FLT:	CMP	WORD PTR [MY],LOWEST
	JG	C_FLT1
	CMP	WORD PTR [MPICH],0
	JL	C_CRSH
	OR	WORD PTR [CCODE],LANDING
	MOV	AX,NOT TAKEOFF
	AND	WORD PTR [CCODE],AX
	RET
;
C_CRSH:	OR	WORD PTR [CCODE],ABOUT
	OR	WORD PTR [CCODE],BADPICH
	RET
;
;
C_FLT1:	CMP	WORD PTR [MSPEED],SLOWEST
	JG	C_FLT2
	OR	[CCODE],ABOUT
	OR	[CCODE],LOWSPD
	RET
;
C_FLT2:	CMP	[MSPEED],DWNSPD
	JG	C_FLT3
	SUB	[MY],3
	JG	C_FLT3
	MOV	[MY],LOWEST
C_FLT3:	RET
;
	RET
CONDITN	ENDP
;
;
;
WAITR	PROC
	MOV	DI,OFFSET Y3WORK
WAITR0:	$K_READ
	$K_CHK	1DH
	JE	WAITR0
	RET
WAITR	ENDP
;
;
;
ENTRY	PROC
	MOV	AX,DATA
	MOV	DS,AX
;
	MOV	AH,02H
	MOV	DL,12
	INT	21H
;
INITALL:MOV	DI,OFFSET Y3WORK
	$C_INIT
	$GBINIT
	$GCLS
	$K_INIT
	$C_COFF
	$K_COFF
;	
	CALL	[MAKEDSP]
;	INITIALIZE
	MOV	WORD PTR [POWSTK],0
	MOV	WORD PTR [MPOWER],0
	MOV	WORD PTR [MSPEED],0
	MOV	WORD PTR [ILS_HS],ILSH_X
	MOV	WORD PTR [DIRSX],DIRCX
	MOV	WORD PTR [DIRSY],DIRCY
	MOV	WORD PTR [SPDS],SPDY1-1
	MOV	WORD PTR [CCODE],0
	MOV	WORD PTR [MX],0
	MOV	WORD PTR [MZ],-750
	MOV	WORD PTR [MY],LOWEST
	MOV	WORD PTR [MHEAD],0
	MOV	WORD PTR [MPICH],0
	MOV	WORD PTR [MBANK],0
	CALL	[DRAWEXE]
;
	$LOCATE 40-SIZ_HR/2,7
	MOV	DI,OFFSET MES_HR
	MOV	CX,SIZ_HR
	$PRINT
	$LOCATE	40-SIZ_YM/2,5
	MOV	DI,OFFSET MES_YM
	MOV	CX,SIZ_YM
	$PRINT
	CALL	[WAITR]
	$C_CLS
;
MLOOP:	CMP	WORD PTR [MY],LOWEST
	JGE	MLP2
	MOV	WORD PTR [MY],LOWEST
MLP2:	CALL	[DRAWEXE]
;
	CALL	[KEYSCAN]
;
	CALL	[RADER]
	CALL	[POWMTR]
;
	CALL	[KEYSCAN]
;
	CALL	[POSTURE]
	CALL	[HIGHTM]
	CALL	[ILS_HOR]
	CALL	[HEADANG]
;
	CALL	[KEYSCAN]
;
	CALL	[SPEEDM]
	CALL	[RADDER]
	CALL	[GOFWRD]
	CALL	[CONDITN]
;
	INC	WORD PTR [PCTR]
	MOV	AX,[PCTR]
	AND	AX,3
	JNE	PSCHK
	CALL	[POWSPD]
PSCHK:	CALL	[KEYSCAN]	
;
	MOV	AX,[CCODE]
	AND	AX,ABOUT
	JNE	MLOUT
;
	MOV	DI,OFFSET Y3WORK
	$PRESET
	MOV	DI,OFFSET ERSBUF
	$GDRAW
	MOV	DI,OFFSET Y3WORK
	CALL	[CENTLIN]
;
	JMP	[MLOOP]
;
MLOUT:	MOV	AX,[CCODE]
	AND	AX,LOWSPD
	JE	MLOUT2
	$LOCATE	40-SIZ_LS/2,8
	MOV	DI,OFFSET MES_LS
	MOV	CX,SIZ_LS
	$PRINT
	CALL	[WAITR]
	JMP	[INITALL]
MLOUT2:	MOV	AX,[CCODE]
	AND	AX,HISPD
	JE	MLOUT3
	$LOCATE	40-SIZ_HS/2,8
	MOV	DI,OFFSET MES_HS
	MOV	CX,SIZ_HS
	$PRINT
	CALL	[WAITR]
	JMP	[INITALL]
MLOUT3:	MOV	AX,[CCODE]
	AND	AX,BADPICH
	JE	MLOUT4
	$LOCATE	40-SIZ_BP/2,8
	MOV	DI,OFFSET MES_BP
	MOV	CX,SIZ_BP
	$PRINT
	CALL	[WAITR]
	JMP	[INITALL]
MLOUT4:	MOV	AX,[CCODE]
	AND	AX,COUT
	JE	MLOUT5
	$LOCATE	40-SIZ_CO/2,8
	MOV	DI,OFFSET MES_CO
	MOV	CX,SIZ_CO
	$PRINT
	CALL	[WAITR]
	JMP	[INITALL]
MLOUT5:	$LOCATE	40-SIZ_SF/2,8
	MOV	DI,OFFSET MES_SF
	MOV	CX,SIZ_SF
	$PRINT
	CALL	[WAITR]
	JMP	[INITALL]
;
;
ENTRY	ENDP
;
;
CODE	ENDS
;
;
;
STACK	SEGMENT	STACK
	DW	2048 DUP(?)
STACK	ENDS
;
	END	ENTRY
