	ifndef	??version
?debug	macro
	endm
publicdll macro	name
	public	name
	endm
	endif
	?debug	V 300h
	?debug	S "..\FOOLFLY.C"
	?debug	C E91DBD32310C2E2E5C464F4F4C464C592E43
	?debug	C E9C19D6F301F443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C535444494F2E48
	?debug	C E9B99D6F301F443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C5F444546532E48
	?debug	C E9B99D6F3020443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C5F4E46494C452E48
	?debug	C E9B99D6F301F443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C5F4E554C4C2E48
	?debug	C E9BB9D6F301D443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C444F532E48
	?debug	C E9C19D6F3020443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C5354444C49422E48
	?debug	C E9BA9D6F301F443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C434F4E494F2E48
	?debug	C E9BD9D6F301D443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C4D454D2E48
	?debug	C E9C29D6F301E443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C54494D452E48
	?debug	C E9BD9D6F301E443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C4D4154482E48
	?debug	C E9B99D6F301F443A5C4445565C424F524C414E44435C494E434C55+
	?debug	C 44455C414C4C4F432E48
FOOLFLY_TEXT	segment byte public 'CODE'
FOOLFLY_TEXT	ends
	assume	cs:FOOLFLY_TEXT,ds:FOOLFLY_DATA
FOOLFLY_DATA	segment word public 'FAR_DATA'
d@	label	byte
d@w	label	word
b@	label	byte
b@w	label	word
_VideoBuf	label	dword
	db	0
	db	0
	db	0
	db	160
_KEY_UP	label	word
	db	72
	db	0
_KEY_DOWN	label	word
	db	80
	db	0
_KEY_LEFT	label	word
	db	75
	db	0
_KEY_RIGHT	label	word
	db	77
	db	0
_KEY_ESC	label	word
	db	1
	db	0
_KEY_CTRL	label	word
	db	29
	db	0
_GameScore	label	word
	db	0
	db	0
	db	0
	db	0
_fly_pic	label	byte
	db	16
	db	0
	db	16
	db	0
	db	0
	db	0
	db	0
	db	29
	db	25
	db	0
	db	0
	db	0
	db	0
	db	25
	db	29
	db	196
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	25
	db	25
	db	0
	db	0
	db	0
	db	0
	db	25
	db	0
	db	196
	db	0
	db	0
	db	0
	db	0
	db	112
	db	112
	db	0
	db	25
	db	196
	db	40
	db	40
	db	29
	db	112
	db	112
	db	40
	db	112
	db	0
	db	112
	db	112
	db	112
	db	40
	db	40
	db	112
	db	112
	db	40
	db	40
	db	25
	db	25
	db	112
	db	40
	db	40
	db	112
	db	112
	db	112
	db	112
	db	112
	db	112
	db	40
	db	112
	db	25
	db	40
	db	40
	db	112
	db	112
	db	112
	db	40
	db	40
	db	25
	db	40
	db	112
	db	112
	db	0
	db	0
	db	112
	db	112
	db	25
	db	40
	db	40
	db	40
	db	112
	db	40
	db	40
	db	40
	db	25
	db	40
	db	112
	db	0
	db	0
	db	0
	db	0
	db	112
	db	25
	db	40
	db	112
	db	40
	db	112
	db	112
	db	112
	db	40
	db	25
	db	112
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	29
	db	112
	db	0
	db	40
	db	0
	db	112
	db	0
	db	112
	db	29
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	29
	db	112
	db	0
	db	40
	db	54
	db	112
	db	0
	db	112
	db	29
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	29
	db	0
	db	0
	db	40
	db	54
	db	112
	db	0
	db	0
	db	29
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	40
	db	112
	db	25
	db	112
	db	112
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	40
	db	112
	db	25
	db	112
	db	112
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	40
	db	112
	db	112
	db	112
	db	112
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	40
	db	112
	db	112
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	40
	db	25
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	112
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
FOOLFLY_DATA	ends
FOOLFLY_TEXT	segment byte public 'CODE'
	?debug	C E8010C2E2E5C464F4F4C464C592E431DBD3231
   ;	
   ;	void copyright(void)
   ;	
	?debug	L 49
	assume	cs:FOOLFLY_TEXT
_copyright	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{ printf("Game Over. your score %ld\n",GameScore);
   ;	
	?debug	L 50
	push	word ptr _GameScore+2
	push	word ptr _GameScore
	push	ds
	mov	ax,offset s@
	push	ax
	call	far ptr _printf
	add	sp,8
   ;	
   ;	  printf("Thank you for play it, if you have any question please call me\n");
   ;	
	?debug	L 51
	push	ds
	mov	ax,offset s@+27
	push	ax
	call	far ptr _printf
	pop	cx
	pop	cx
   ;	
   ;	  printf("(0871)7167710 or lwwind@yeah.net, Lin Wei\n");
   ;	
	?debug	L 52
	push	ds
	mov	ax,offset s@+91
	push	ax
	call	far ptr _printf
	pop	cx
	pop	cx
   ;	
   ;	
   ;	}
   ;	
	?debug	L 54
	pop	ds
	pop	bp
	ret	
	?debug	E
	?debug	E
_copyright	endp
   ;	
   ;	void main(void)
   ;	
	?debug	L 59
	assume	cs:FOOLFLY_TEXT
_main	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  if (!game_init()) return;                    /* 游戏初始化 */
   ;	
	?debug	L 61
	call	far ptr _game_init
	or	ax,ax
	jne	short @2@86
	jmp	short @2@114
@2@86:
   ;	
   ;	  printf("           - STAR WAR -\r");         /*  打印标题  */
   ;	
	?debug	L 62
	push	ds
	mov	ax,offset s@+134
	push	ax
	call	far ptr _printf
	pop	cx
	pop	cx
   ;	
   ;	  GameStart();                                 /* 游戏主循环 */
   ;	
	?debug	L 63
	call	far ptr _GameStart
   ;	
   ;	  game_restore();                              /* 还原初始化 */
   ;	
	?debug	L 64
	call	far ptr _game_restore
   ;	
   ;	  copyright();                                 /* 显示说明文 */
   ;	
	?debug	L 65
	push	cs
	call	near ptr _copyright
@2@114:
   ;	
   ;	}
   ;	
	?debug	L 66
	pop	ds
	pop	bp
	ret	
	?debug	E
	?debug	E
_main	endp
   ;	
   ;	int game_init(void)
   ;	
	?debug	L 68
	assume	cs:FOOLFLY_TEXT
_game_init	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,20
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  long i;
   ;	  union REGS regs;
   ;	  MemBuf=(char far*)farmalloc(320L*(MAXY+1));
   ;	
	?debug	L 72
	xor	ax,ax
	mov	dx,-11136
	push	ax
	push	dx
	call	far ptr _farmalloc
	pop	cx
	pop	cx
	mov	word ptr _MemBuf+2,dx
	mov	word ptr _MemBuf,ax
   ;	
   ;	  if (!MemBuf) {
   ;	
	?debug	L 73
	mov	ax,word ptr _MemBuf
	or	ax,word ptr _MemBuf+2
	jne	short @3@114
   ;	
   ;	     printf("not enough memory\n"); return 0;
   ;	
	?debug	L 74
	push	ds
	mov	ax,offset s@+159
	push	ax
	call	far ptr _printf
	pop	cx
	pop	cx
	xor	ax,ax
@3@86:
	jmp	@3@730
@3@114:
   ;	
   ;	  }
   ;	  memset(MemBuf,0,320L*(MAXY+1));
   ;	
	?debug	L 76
	mov	ax,-11136
	push	ax
	xor	ax,ax
	push	ax
	push	word ptr _MemBuf+2
	push	word ptr _MemBuf
	call	far ptr _memset
	add	sp,8
   ;	
   ;	  randomize();                                          /* 初始化随机函数 */
   ;	
	?debug	L 77
	xor	ax,ax
	xor	dx,dx
	push	ax
	push	dx
	call	far ptr _time
	pop	cx
	pop	cx
	push	ax
	call	far ptr _srand
	pop	cx
   ;	
   ;	  for (i=0;i<128;i++) keys[i]=0;                        /* 键盘码初始化 */
   ;	
	?debug	L 78
	mov	word ptr [bp-2],0
	mov	word ptr [bp-4],0
	jmp	short @3@198
@3@142:
	mov	bx,word ptr [bp-4]
	mov	byte ptr _keys[bx],0
	add	word ptr [bp-4],1
	adc	word ptr [bp-2],0
@3@198:
	cmp	word ptr [bp-2],0
	jl	short @3@142
	jne	short @3@282
	cmp	word ptr [bp-4],128
	jb	short @3@142
@3@282:
   ;	
   ;	  for (i=0;i<MAX_STAR;i++) {                            /* 星空初始化   */
   ;	
	?debug	L 79
	mov	word ptr [bp-2],0
	mov	word ptr [bp-4],0
	jmp	@3@450
@3@310:
   ;	
   ;	      Stars[i].x=random(320);
   ;	
	?debug	L 80
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,320
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	push	ax
	mov	ax,word ptr [bp-4]
	mov	dx,6
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Stars[bx],ax
   ;	
   ;	      Stars[i].y=-20+random(250);
   ;	
	?debug	L 81
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,250
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	add	ax,-20
	push	ax
	mov	ax,word ptr [bp-4]
	mov	dx,6
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Stars[bx+2],ax
   ;	
   ;	      Stars[i].v=1;
   ;	
	?debug	L 82
	mov	ax,word ptr [bp-4]
	mov	dx,6
	imul	dx
	mov	bx,ax
	mov	word ptr _Stars[bx+4],1
   ;	
   ;	      if (i<MAX_STAR/3) Stars[i].v++;
   ;	
	?debug	L 83
	cmp	word ptr [bp-2],0
	jg	short @3@422
	jl	short @3@394
	cmp	word ptr [bp-4],26
	jae	short @3@422
@3@394:
	mov	ax,word ptr [bp-4]
	mov	dx,6
	imul	dx
	mov	bx,ax
	inc	word ptr _Stars[bx+4]
@3@422:
	?debug	L 79
	add	word ptr [bp-4],1
	adc	word ptr [bp-2],0
@3@450:
	cmp	word ptr [bp-2],0
	jge	@@31
	jmp	@3@310
@@31:
	jne	short @3@534
	cmp	word ptr [bp-4],80
	jae	@@32
	jmp	@3@310
@@32:
@3@534:
   ;	
   ;	  }
   ;	  for (i=0;i<MAX_OBJ;i++) Objs[i].mode=0;	/* 物体初始化 */
   ;	
	?debug	L 85
	mov	word ptr [bp-2],0
	mov	word ptr [bp-4],0
	jmp	short @3@618
@3@562:
	mov	ax,word ptr [bp-4]
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],0
	add	word ptr [bp-4],1
	adc	word ptr [bp-2],0
@3@618:
	cmp	word ptr [bp-2],0
	jl	short @3@562
	jne	short @3@702
	cmp	word ptr [bp-4],30
	jb	short @3@562
@3@702:
   ;	
   ;	
   ;	  /* 键盘中断初始化：设置新的中断 */
   ;	  OldInt9=getvect(9);
   ;	
	?debug	L 88
	mov	ax,9
	push	ax
	call	far ptr _getvect
	pop	cx
	mov	word ptr _OldInt9+2,dx
	mov	word ptr _OldInt9,ax
   ;	
   ;	  disable();
   ;	
	?debug	L 89
	db	250
   ;	
   ;	  setvect(9,NewInt9);
   ;	
	?debug	L 90
	mov	ax,seg _NewInt9
	push	ax
	mov	ax,offset _NewInt9
	push	ax
	mov	ax,9
	push	ax
	call	far ptr _setvect
	add	sp,6
   ;	
   ;	  enable();
   ;	
	?debug	L 91
	db	251
   ;	
   ;	
   ;	  /* 设置 320x200x256c图形模式 */
   ;	  regs.x.ax=0x13;
   ;	
	?debug	L 94
	mov	word ptr [bp-20],19
   ;	
   ;	  int86(0x10,&regs,&regs);
   ;	
	?debug	L 95
	push	ss
	lea	ax,word ptr [bp-20]
	push	ax
	push	ss
	lea	ax,word ptr [bp-20]
	push	ax
	mov	ax,16
	push	ax
	call	far ptr _int86
	add	sp,10
   ;	
   ;	  return 1;
   ;	
	?debug	L 96
	mov	ax,1
	jmp	@3@86
@3@730:
   ;	
   ;	}
   ;	
	?debug	L 97
	pop	ds
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E318045245475310001F01
	?debug	C E31908574F52445245475310001E04
	?debug	C E31A08425954455245475308001E0D
	?debug	C E604726567731802ECFF0001690602FCFF00
	?debug	E
	?debug	E
_game_init	endp
   ;	
   ;	int game_restore(void)
   ;	
	?debug	L 99
	assume	cs:FOOLFLY_TEXT
_game_restore	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,16
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  union REGS regs;
   ;	  /* 还原设置：还原老的中断 */
   ;	  disable();
   ;	
	?debug	L 103
	db	250
   ;	
   ;	  setvect(9,OldInt9);
   ;	
	?debug	L 104
	push	word ptr _OldInt9+2
	push	word ptr _OldInt9
	mov	ax,9
	push	ax
	call	far ptr _setvect
	add	sp,6
   ;	
   ;	  enable();
   ;	
	?debug	L 105
	db	251
   ;	
   ;	
   ;	  regs.x.ax=3;
   ;	
	?debug	L 107
	mov	word ptr [bp-16],3
   ;	
   ;	  int86(0x10,&regs,&regs);
   ;	
	?debug	L 108
	push	ss
	lea	ax,word ptr [bp-16]
	push	ax
	push	ss
	lea	ax,word ptr [bp-16]
	push	ax
	mov	ax,16
	push	ax
	call	far ptr _int86
	add	sp,10
   ;	
   ;	  farfree(MemBuf);
   ;	
	?debug	L 109
	push	word ptr _MemBuf+2
	push	word ptr _MemBuf
	call	far ptr _farfree
	pop	cx
	pop	cx
   ;	
   ;	  return 0;
   ;	
	?debug	L 110
	xor	ax,ax
	jmp	short @4@58
@4@58:
   ;	
   ;	}
   ;	
	?debug	L 111
	pop	ds
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E604726567731802F0FF00
	?debug	E
	?debug	E
_game_restore	endp
   ;	
   ;	void interrupt NewInt9(void)
   ;	
	?debug	L 114
	assume	cs:FOOLFLY_TEXT
_NewInt9	proc	far
	?debug	B
	push	ax
	push	bx
	push	cx
	push	dx
	push	es
	push	ds
	push	si
	push	di
	push	bp
	mov	bp,FOOLFLY_DATA
	mov	ds,bp
	mov	bp,sp
	?debug	B
   ;	
   ;	{
   ;	  unsigned char key;
   ;	  key=inportb(0x60);                                    /* 读键盘扫描码 */
   ;	
	?debug	L 117
	mov	dx,96
	in	al,dx
	mov	cl,al
   ;	
   ;	  if (key<0x80) keys[key]=1;                            /* 如果最高位是0,则为按下 */
   ;	
	?debug	L 118
	cmp	cl,128
	jae	short @5@86
	mov	al,cl
	mov	ah,0
	mov	bx,ax
	mov	byte ptr _keys[bx],1
	jmp	short @5@114
@5@86:
   ;	
   ;	    else keys[key&0x7f]=0;                              /* 如果最高位是1,则为放开 */
   ;	
	?debug	L 119
	mov	al,cl
	mov	ah,0
	and	ax,127
	mov	bx,ax
	mov	byte ptr _keys[bx],0
@5@114:
   ;	
   ;	  key=inportb(0x61); key|=0x80; outportb(0x61,key);     /* 告诉键盘已接收 */
   ;	
	?debug	L 120
	mov	dx,97
	in	al,dx
	mov	cl,al
	or	cl,128
	mov	dx,97
	mov	al,cl
	out	dx,al
   ;	
   ;	  outportb(0x61,key&0x7f);
   ;	
	?debug	L 121
	mov	al,cl
	and	al,127
	mov	dx,97
	out	dx,al
   ;	
   ;	  outportb(0x20,0x20);                                  /* 发送中断结束信号 */
   ;	
	?debug	L 122
	mov	dx,32
	mov	al,32
	out	dx,al
   ;	
   ;	}
   ;	
	?debug	L 123
	pop	bp
	pop	di
	pop	si
	pop	ds
	pop	es
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	iret	
	?debug	C E6036B657908040100
	?debug	E
	?debug	E
_NewInt9	endp
   ;	
   ;	void pixel(unsigned x,unsigned y,char c)                /* 画点 */
   ;	
	?debug	L 126
	assume	cs:FOOLFLY_TEXT
_pixel	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	si
	push	di
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	C E60163020A0A000001790A0A08000001780A0A06+
	?debug	C 0000
	mov	di,word ptr [bp+6]
	mov	si,word ptr [bp+8]
	?debug	B
   ;	
   ;	{
   ;	  if (x>=320||y>MAXY) return;                           /* 判断范围 */
   ;	
	?debug	L 128
	cmp	di,320
	jae	short @6@86
	cmp	si,169
	jbe	short @6@114
@6@86:
	jmp	short @6@142
@6@114:
   ;	
   ;	  MemBuf[(y<<8)+(y<<6)+x]=c;                            /* MemBuf[y*320+x]=c */
   ;	
	?debug	L 129
	mov	ax,si
	mov	cl,8
	shl	ax,cl
	mov	dx,si
	mov	cl,6
	shl	dx,cl
	add	ax,dx
	add	ax,di
	les	bx,dword ptr _MemBuf
	add	bx,ax
	mov	al,byte ptr [bp+10]
	mov	byte ptr es:[bx],al
@6@142:
   ;	
   ;	}
   ;	
	?debug	L 130
	pop	ds
	pop	di
	pop	si
	pop	bp
	ret	
	?debug	C E601780A0C070001790A0C06000163020A0A0000
	?debug	E
	?debug	E
_pixel	endp
   ;	
   ;	void show(void)
   ;	
	?debug	L 133
	assume	cs:FOOLFLY_TEXT
_show	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,2
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  int offset=(199-MAXY)*160;
   ;	
	?debug	L 135
	mov	word ptr [bp-2],4800
   ;	
   ;	  memcpy(VideoBuf+offset,MemBuf,320L*(MAXY+1));
   ;	
	?debug	L 136
	mov	ax,-11136
	push	ax
	push	word ptr _MemBuf+2
	push	word ptr _MemBuf
	mov	ax,word ptr _VideoBuf
	add	ax,word ptr [bp-2]
	push	word ptr _VideoBuf+2
	push	ax
	call	far ptr _memcpy
	add	sp,10
   ;	
   ;	}
   ;	
	?debug	L 137
	pop	ds
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E6066F66667365740402FEFF00
	?debug	E
	?debug	E
_show	endp
   ;	
   ;	void clear(void)
   ;	
	?debug	L 140
	assume	cs:FOOLFLY_TEXT
_clear	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  memset(MemBuf,0,320L*(MAXY+1));
   ;	
	?debug	L 142
	mov	ax,-11136
	push	ax
	xor	ax,ax
	push	ax
	push	word ptr _MemBuf+2
	push	word ptr _MemBuf
	call	far ptr _memset
	add	sp,8
   ;	
   ;	}
   ;	
	?debug	L 143
	pop	ds
	pop	bp
	ret	
	?debug	E
	?debug	E
_clear	endp
   ;	
   ;	void putimage(int x,int y,char *b,int mode)
   ;	
	?debug	L 148
	assume	cs:FOOLFLY_TEXT
_putimage	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,4
	push	si
	push	di
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	C E31B000400160200
	?debug	C E6046D6F6465040A0E000001621B0A0A00000179+
	?debug	C 040A0800000178040A060000
	?debug	B
   ;	
   ;	{
   ;	  int len, wid, i, j;
   ;	  len = b[0] + (int)b[1] * 256;
   ;	
	?debug	L 151
	les	bx,dword ptr [bp+10]
	mov	al,byte ptr es:[bx]
	cbw	
	les	bx,dword ptr [bp+10]
	push	ax
	mov	al,byte ptr es:[bx+1]
	cbw	
	mov	cl,8
	shl	ax,cl
	pop	dx
	add	dx,ax
	mov	word ptr [bp-2],dx
   ;	
   ;	  wid = b[2] + (int)b[3] * 256;
   ;	
	?debug	L 152
	les	bx,dword ptr [bp+10]
	mov	al,byte ptr es:[bx+2]
	cbw	
	les	bx,dword ptr [bp+10]
	push	ax
	mov	al,byte ptr es:[bx+3]
	cbw	
	mov	cl,8
	shl	ax,cl
	pop	dx
	add	dx,ax
	mov	word ptr [bp-4],dx
   ;	
   ;	  x-=len/2; y-=wid/2;                                   /* 中心对称 */
   ;	
	?debug	L 153
	mov	ax,word ptr [bp-2]
	cwd	
	sub	ax,dx
	sar	ax,1
	sub	word ptr [bp+6],ax
	mov	ax,word ptr [bp-4]
	cwd	
	sub	ax,dx
	sar	ax,1
	sub	word ptr [bp+8],ax
   ;	
   ;	  for (j=0,b=b+4;j<wid;j++) for (i=0;i<len;i++,b++)
   ;	
	?debug	L 154
	xor	di,di
	mov	ax,word ptr [bp+12]
	mov	dx,word ptr [bp+10]
	add	dx,4
	mov	word ptr [bp+12],ax
	mov	word ptr [bp+10],dx
	jmp	short @9@338
@9@58:
	xor	si,si
	jmp	short @9@282
@9@86:
   ;	
   ;	    { if (*b&&!mode) pixel(x+i,y+j,*b);                 /* 是否镜面翻转 */
   ;	
	?debug	L 155
	les	bx,dword ptr [bp+10]
	cmp	byte ptr es:[bx],0
	je	short @9@170
	cmp	word ptr [bp+14],0
	jne	short @9@170
	les	bx,dword ptr [bp+10]
	mov	al,byte ptr es:[bx]
	push	ax
	mov	ax,word ptr [bp+8]
	add	ax,di
	push	ax
	mov	ax,word ptr [bp+6]
	add	ax,si
	push	ax
	push	cs
	call	near ptr _pixel
	add	sp,6
@9@170:
   ;	
   ;	      if (*b&&mode)  pixel(x+i,y+wid-j-1,*b);
   ;	
	?debug	L 156
	les	bx,dword ptr [bp+10]
	cmp	byte ptr es:[bx],0
	je	short @9@254
	cmp	word ptr [bp+14],0
	je	short @9@254
	les	bx,dword ptr [bp+10]
	mov	al,byte ptr es:[bx]
	push	ax
	mov	ax,word ptr [bp+8]
	add	ax,word ptr [bp-4]
	sub	ax,di
	dec	ax
	push	ax
	mov	ax,word ptr [bp+6]
	add	ax,si
	push	ax
	push	cs
	call	near ptr _pixel
	add	sp,6
@9@254:
	?debug	L 154
	inc	si
	inc	word ptr [bp+10]
@9@282:
	cmp	si,word ptr [bp-2]
	jl	short @9@86
	inc	di
@9@338:
	cmp	di,word ptr [bp-4]
	jl	short @9@58
   ;	
   ;	    }
   ;	}
   ;	
	?debug	L 158
	pop	ds
	pop	di
	pop	si
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E6016A04040700016904040600037769640402FC+
	?debug	C FF00036C656E0402FEFF000178040A0600000179+
	?debug	C 040A08000001621B0A0A0000046D6F6465040A0E+
	?debug	C 0000
	?debug	E
	?debug	E
_putimage	endp
   ;	
   ;	void drawfire(int x,int y)                              /* 画出激光 */
   ;	
	?debug	L 160
	assume	cs:FOOLFLY_TEXT
_drawfire	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	si
	push	di
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	C E60179040A0800000178040A060000
	mov	di,word ptr [bp+6]
	?debug	B
   ;	
   ;	{ int i,j;
   ;	  for (i=-6;i<6;i++) { pixel(x-5,y+i,9); pixel(x+3,y+i,9); }
   ;	
	?debug	L 162
	mov	si,-6
	jmp	short @10@114
@10@58:
	mov	al,9
	push	ax
	mov	ax,word ptr [bp+8]
	add	ax,si
	push	ax
	mov	ax,di
	add	ax,-5
	push	ax
	push	cs
	call	near ptr _pixel
	add	sp,6
	mov	al,9
	push	ax
	mov	ax,word ptr [bp+8]
	add	ax,si
	push	ax
	mov	ax,di
	add	ax,3
	push	ax
	push	cs
	call	near ptr _pixel
	add	sp,6
	inc	si
@10@114:
	cmp	si,6
	jl	short @10@58
   ;	
   ;	}
   ;	
	?debug	L 163
	pop	ds
	pop	di
	pop	si
	pop	bp
	ret	
	?debug	C E60169040406000178040C07000179040A080000
	?debug	E
	?debug	E
_drawfire	endp
FOOLFLY_TEXT	ends
FOOLFLY_DATA	segment word public 'FAR_DATA'
_Sound	label	word
	db	0
	db	0
_fly_x	label	word
	db	160
	db	0
_fly_y	label	word
	db	112
	db	0
_fly_flag	label	word
	db	1
	db	0
_fire_flag	label	word
	db	1
	db	0
FOOLFLY_DATA	ends
FOOLFLY_TEXT	segment byte public 'CODE'
   ;	
   ;	int  AllocObj(void) 					/* 分配空余对象 */
   ;	
	?debug	L 171
	assume	cs:FOOLFLY_TEXT
_AllocObj	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{ int i=0;
   ;	
	?debug	L 172
	xor	cx,cx
	jmp	short @11@86
@11@58:
   ;	
   ;	  while (i<MAX_OBJ&&Objs[i].mode) i++;
   ;	
	?debug	L 173
	inc	cx
@11@86:
	cmp	cx,30
	jge	short @11@142
	mov	ax,cx
	mov	dx,12
	imul	dx
	mov	bx,ax
	cmp	word ptr _Objs[bx],0
	jne	short @11@58
@11@142:
   ;	
   ;	  if (i>=MAX_OBJ) i=MAX_OBJ-1;
   ;	
	?debug	L 174
	cmp	cx,30
	jl	short @11@198
	mov	cx,29
@11@198:
   ;	
   ;	  return i;
   ;	
	?debug	L 175
	mov	ax,cx
	jmp	short @11@226
@11@226:
   ;	
   ;	}
   ;	
	?debug	L 176
	pop	ds
	pop	bp
	ret	
	?debug	C E6016904040100
	?debug	E
	?debug	E
_AllocObj	endp
   ;	
   ;	int  CheckHit(int x1,int y1,int x2,int y2,int r)	/* 检查碰撞 */
   ;	
	?debug	L 178
	assume	cs:FOOLFLY_TEXT
_CheckHit	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	C E60172040A0E0000027932040A0C000002783204+
	?debug	C 0A0A0000027931040A080000027831040A060000
	mov	bx,word ptr [bp+14]
	?debug	B
   ;	
   ;	{
   ;	  if (abs(x1-x2)<=r&&abs(y1-y2)<=r) return 1;
   ;	
	?debug	L 180
	mov	ax,word ptr [bp+6]
	sub	ax,word ptr [bp+10]
	cwd	
	xor	ax,dx
	sub	ax,dx
	cmp	ax,bx
	jg	short @12@142
	mov	ax,word ptr [bp+8]
	sub	ax,word ptr [bp+12]
	cwd	
	xor	ax,dx
	sub	ax,dx
	cmp	ax,bx
	jg	short @12@142
	mov	ax,1
@12@114:
	jmp	short @12@170
@12@142:
   ;	
   ;	  return 0;
   ;	
	?debug	L 181
	xor	ax,ax
	jmp	short @12@114
@12@170:
   ;	
   ;	}
   ;	
	?debug	L 182
	pop	ds
	pop	bp
	ret	
	?debug	C E6027831040A060000027931040A080000027832+
	?debug	C 040A0A0000027932040A0C00000172040C0300
	?debug	E
	?debug	E
_CheckHit	endp
   ;	
   ;	ulong fclock(void)					/* 读取 1.19MHz的32位系统时钟 */
   ;	
	?debug	L 184
	assume	cs:FOOLFLY_TEXT
_fclock	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,4
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  ulong t;
   ;	  disable(); outportb(0x43,0); t=inportb(0x40);
   ;	
	?debug	L 187
	db	250
	mov	dx,67
	mov	al,0
	out	dx,al
	mov	dx,64
	in	al,dx
	mov	ah,0
	cwd	
	mov	word ptr [bp-2],dx
	mov	word ptr [bp-4],ax
   ;	
   ;	  t+=(inportb(0x40)<<8); t=0xffff^t; enable();		/* (not t) + (clock()<<16) */
   ;	
	?debug	L 188
	mov	dx,64
	in	al,dx
	mov	ah,0
	mov	cl,8
	shl	ax,cl
	cwd	
	add	word ptr [bp-4],ax
	adc	word ptr [bp-2],dx
	xor	ax,ax
	mov	dx,-1
	xor	dx,word ptr [bp-4]
	xor	ax,word ptr [bp-2]
	mov	word ptr [bp-2],ax
	mov	word ptr [bp-4],dx
	db	251
   ;	
   ;	  return (clock()<<16)+t;
   ;	
	?debug	L 189
	call	far ptr _clock
	push	ax
	xor	ax,ax
	add	ax,word ptr [bp-4]
	pop	dx
	adc	dx,word ptr [bp-2]
	jmp	short @13@58
@13@58:
   ;	
   ;	}
   ;	
	?debug	L 190
	pop	ds
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E601740C02FCFF00
	?debug	E
	?debug	E
_fclock	endp
   ;	
   ;	char GameStart(void)
   ;	
	?debug	L 192
	assume	cs:FOOLFLY_TEXT
_GameStart	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,4
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  ulong start=0;
   ;	
	?debug	L 194
	mov	word ptr [bp-2],0
	mov	word ptr [bp-4],0
   ;	
   ;	  timepass=0;
   ;	
	?debug	L 195
	mov	word ptr _timepass+2,0
	mov	word ptr _timepass,0
	jmp	@14@338
@14@58:
	jmp	short @14@86
@14@86:
   ;	
   ;	  while (!GameOver)
   ;	   {
   ;	     while (fclock()-start<=45000L); start=fclock(); 	/* 时间控制 */
   ;	
	?debug	L 198
	push	cs
	call	near ptr _fclock
	sub	ax,word ptr [bp-4]
	sbb	dx,word ptr [bp-2]
	or	dx,dx
	jb	short @14@86
	ja	short @14@170
	cmp	ax,-20536
	jbe	short @14@86
@14@170:
	push	cs
	call	near ptr _fclock
	mov	word ptr [bp-2],dx
	mov	word ptr [bp-4],ax
   ;	
   ;	     clear();						/* 1.清屏. 以下5点为游戏的主循环 */
   ;	
	?debug	L 199
	push	cs
	call	near ptr _clear
   ;	
   ;	     timepass++; 					/* 2.时间基数++ */
   ;	
	?debug	L 200
	add	word ptr _timepass,1
	adc	word ptr _timepass+2,0
   ;	
   ;	     control();  					/* 3.事件处理   */
   ;	
	?debug	L 201
	call	far ptr _control
   ;	
   ;	     drivers();  					/* 4.事件引擎   */
   ;	
	?debug	L 202
	call	far ptr _drivers
   ;	
   ;	     show();     					/* 5.显示       */
   ;	
	?debug	L 203
	push	cs
	call	near ptr _show
   ;	
   ;	     if (--Sound<=0) nosound(); 			/* 声音处理 */
   ;	
	?debug	L 204
	dec	word ptr _Sound
	jg	short @14@226
	call	far ptr _nosound
@14@226:
   ;	
   ;	     if ((timepass&3)==0) printf("%d\r",GameScore);	/* 到一定的时间更新显示分数 */
   ;	
	?debug	L 205
	mov	ax,word ptr _timepass+2
	mov	dx,word ptr _timepass
	and	dx,3
	and	ax,0
	or	dx,ax
	jne	short @14@282
	push	word ptr _GameScore+2
	push	word ptr _GameScore
	push	ds
	mov	ax,offset s@+178
	push	ax
	call	far ptr _printf
	add	sp,8
@14@282:
   ;	
   ;	     if (keys[KEY_ESC]) GameOver=1;
   ;	
	?debug	L 206
	mov	bx,word ptr _KEY_ESC
	cmp	byte ptr _keys[bx],0
	je	short @14@338
	mov	word ptr _GameOver,1
@14@338:
	?debug	L 196
	cmp	word ptr _GameOver,0
	jne	@@33
	jmp	@14@58
@@33:
   ;	
   ;	   }
   ;	  sound(105); delay(700); nosound();                    /* Game Over发音 */
   ;	
	?debug	L 208
	mov	ax,105
	push	ax
	call	far ptr _sound
	pop	cx
	mov	ax,700
	push	ax
	call	far ptr _delay
	pop	cx
	call	far ptr _nosound
   ;	
   ;	  return 1;
   ;	
	?debug	L 209
	mov	al,1
	jmp	short @14@394
@14@394:
   ;	
   ;	}
   ;	
	?debug	L 210
	pop	ds
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E60573746172740C02FCFF00
	?debug	E
	?debug	E
_GameStart	endp
   ;	
   ;	void control(void)
   ;	
	?debug	L 218
	assume	cs:FOOLFLY_TEXT
_control	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,6
	push	si
	push	di
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{ 
   ;	  int i,j,x,y, ok;
   ;	  
   ;	  /* 星星处理 */
   ;	  for (i=0;i<MAX_STAR;i++) { 
   ;	
	?debug	L 223
	xor	si,si
	jmp	@15@254
@15@58:
   ;	
   ;	    Stars[i].y+=Stars[i].v;       /* 向下移动 */
   ;	
	?debug	L 224
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	mov	ax,word ptr _Stars[bx+4]
	push	ax
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	pop	ax
	add	word ptr _Stars[bx+2],ax
   ;	
   ;	    if (Stars[i].y>MAXY) {        /* 如果移出屏幕就让它重新出现在屏幕上方某位置 */
   ;	
	?debug	L 225
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	cmp	word ptr _Stars[bx+2],169
	jle	short @15@114
   ;	
   ;		Stars[i].x=random(320);
   ;	
	?debug	L 226
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,320
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	push	ax
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Stars[bx],ax
   ;	
   ;		Stars[i].y=-random(60);
   ;	
	?debug	L 227
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,60
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	neg	ax
	push	ax
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Stars[bx+2],ax
@15@114:
   ;	
   ;	    }
   ;	    if (Stars[i].v==1) pixel(Stars[i].x,Stars[i].y,23);	/* 速度不一样颜色也不一样 */
   ;	
	?debug	L 229
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	cmp	word ptr _Stars[bx+4],1
	jne	short @15@170
	mov	al,23
	jmp	short @15@198
@15@170:
   ;	
   ;	      else pixel(Stars[i].x,Stars[i].y,28);
   ;	
	?debug	L 230
	mov	al,28
@15@198:
	push	ax
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	push	word ptr _Stars[bx+2]
	mov	ax,si
	mov	dx,6
	imul	dx
	mov	bx,ax
	push	word ptr _Stars[bx]
	push	cs
	call	near ptr _pixel
	add	sp,6
	?debug	L 223
	inc	si
@15@254:
	cmp	si,80
	jge	@@34
	jmp	@15@58
@@34:
   ;	
   ;	  }
   ;	
   ;	  /* 对象处理 */
   ;	  for (i=0;i<MAX_OBJ;i++)				/* 扫描对象数组 */
   ;	
	?debug	L 234
	xor	si,si
	jmp	@15@1626
@15@310:
   ;	
   ;	   { x=Objs[i].x; y=Objs[i].y; ok=1;
   ;	
	?debug	L 235
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	ax,word ptr _Objs[bx+8]
	mov	word ptr [bp-4],ax
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	di,word ptr _Objs[bx+10]
	mov	word ptr [bp-6],1
   ;	
   ;	     switch (Objs[i].mode)				/* mode表示敌人，子弹等 */
   ;	
	?debug	L 236
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	ax,word ptr _Objs[bx]
	cmp	ax,1
	je	short @15@450
	cmp	ax,2
	jne	@@35
	jmp	@15@1262
@@35:
	jmp	@15@1570
@15@450:
   ;	
   ;	      {
   ;		/* 敌人处理 */
   ;		case 1: if (Objs[i].index==0) {
   ;	
	?debug	L 239
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	cmp	word ptr _Objs[bx+4],0
	je	@@36
	jmp	@15@1066
@@36:
   ;	
   ;			 switch (Objs[i].type)                  /* 检测敌人的三种状态 */
   ;	
	?debug	L 240
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	ax,word ptr _Objs[bx+2]
	or	ax,ax
	je	short @15@618
	cmp	ax,1
	je	short @15@702
	cmp	ax,2
	jne	@@37
	jmp	@15@898
@@37:
	jmp	@15@898
@15@618:
   ;	
   ;			 { case 0: if (!random(30)) Objs[i].type=1; break; /* 3种动作状态 */
   ;	
	?debug	L 241
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,30
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	or	ax,ax
	jne	short @15@674
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx+2],1
@15@674:
	jmp	short @15@982
@15@702:
   ;	
   ;			   case 1: if (x<fly_x) x++; if (x>fly_x) x--;
   ;	
	?debug	L 242
	mov	ax,word ptr [bp-4]
	cmp	ax,word ptr _fly_x
	jge	short @15@758
	inc	word ptr [bp-4]
@15@758:
	mov	ax,word ptr [bp-4]
	cmp	ax,word ptr _fly_x
	jle	short @15@814
	dec	word ptr [bp-4]
@15@814:
   ;	
   ;				   if (!random(40)) Objs[i].type=2; break;
   ;	
	?debug	L 243
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,40
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	or	ax,ax
	jne	short @15@870
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx+2],2
@15@870:
	jmp	short @15@982
@15@898:
   ;	
   ;			   case 2:
   ;			   default:if (!random(3)) y+=3;
   ;	
	?debug	L 245
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,3
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	or	ax,ax
	jne	short @15@954
	add	di,3
@15@954:
   ;	
   ;				   break;
   ;	
	?debug	L 246
	jmp	short @15@982
@15@982:
   ;	
   ;			 }
   ;			 if (CheckHit(x,y,fly_x,fly_y,15)) fly_flag=0;	/* 与主角相撞 */
   ;	
	?debug	L 248
	mov	ax,15
	push	ax
	push	word ptr _fly_y
	push	word ptr _fly_x
	push	di
	push	word ptr [bp-4]
	push	cs
	call	near ptr _CheckHit
	add	sp,10
	or	ax,ax
	je	short @15@1038
	mov	word ptr _fly_flag,0
@15@1038:
   ;	
   ;			 putimage(x,y,fly_pic,0);
   ;	
	?debug	L 249
	xor	ax,ax
	push	ax
	push	ds
	mov	ax,offset _fly_pic
	push	ax
	push	di
	push	word ptr [bp-4]
	push	cs
	call	near ptr _putimage
	add	sp,10
   ;	
   ;			} else { /* 如果被击中就闪烁地绘制飞机，然后消失 */
   ;	
	?debug	L 250
	jmp	short @15@1178
@15@1066:
   ;	
   ;			 if ((Objs[i].index&3)==0) putimage(x,y,fly_pic,0);
   ;	
	?debug	L 251
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	test	word ptr _Objs[bx+4],3
	jne	short @15@1122
	xor	ax,ax
	push	ax
	push	ds
	mov	ax,offset _fly_pic
	push	ax
	push	di
	push	word ptr [bp-4]
	push	cs
	call	near ptr _putimage
	add	sp,10
@15@1122:
   ;	
   ;			 if (++Objs[i].index>50) Objs[i].mode=0;
   ;	
	?debug	L 252
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	inc	word ptr _Objs[bx+4]
	mov	ax,word ptr _Objs[bx+4]
	cmp	ax,50
	jle	short @15@1178
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],0
@15@1178:
   ;	
   ;			}
   ;			y++; if (y>MAXY) Objs[i].mode=0;	/* 移出屏幕就清除 */
   ;	
	?debug	L 254
	inc	di
	cmp	di,169
	jle	short @15@1234
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],0
@15@1234:
   ;	
   ;			break;
   ;	
	?debug	L 255
	jmp	@15@1570
@15@1262:
   ;	
   ;		/* 激光处理 */
   ;		case 2: y-=4; if (y<-20) Objs[i].mode=0; drawfire(x,y);
   ;	
	?debug	L 257
	sub	di,4
	cmp	di,-20
	jge	short @15@1318
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],0
@15@1318:
	push	di
	push	word ptr [bp-4]
	push	cs
	call	near ptr _drawfire
	pop	cx
	pop	cx
   ;	
   ;			for (j=0;j<MAX_OBJ;j++)                 /* 检查与敌机相碰 */
   ;	
	?debug	L 258
	mov	word ptr [bp-2],0
	jmp	@15@1514
@15@1346:
   ;	
   ;			if (Objs[j].mode==1&&CheckHit(x,y,Objs[j].x,Objs[j].y,15)&&
   ;	
	?debug	L 259
   ;	
   ;			    !Objs[j].index&&ok)			/* 击中敌机 */
   ;	
	?debug	L 260
	mov	ax,word ptr [bp-2]
	mov	dx,12
	imul	dx
	mov	bx,ax
	cmp	word ptr _Objs[bx],1
	je	@@38
	jmp	@15@1486
@@38:
	mov	ax,15
	push	ax
	mov	ax,word ptr [bp-2]
	mov	dx,12
	imul	dx
	mov	bx,ax
	push	word ptr _Objs[bx+10]
	mov	ax,word ptr [bp-2]
	mov	dx,12
	imul	dx
	mov	bx,ax
	push	word ptr _Objs[bx+8]
	push	di
	push	word ptr [bp-4]
	push	cs
	call	near ptr _CheckHit
	add	sp,10
	or	ax,ax
	je	short @15@1486
	mov	ax,word ptr [bp-2]
	mov	dx,12
	imul	dx
	mov	bx,ax
	cmp	word ptr _Objs[bx+4],0
	jne	short @15@1486
	cmp	word ptr [bp-6],0
	je	short @15@1486
   ;	
   ;			 {
   ;			   Objs[j].index=1; ok=0; Objs[i].mode=0;
   ;	
	?debug	L 262
	mov	ax,word ptr [bp-2]
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx+4],1
	mov	word ptr [bp-6],0
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],0
   ;	
   ;			   sound(220); Sound=10; GameScore+=10;
   ;	
	?debug	L 263
	mov	ax,220
	push	ax
	call	far ptr _sound
	pop	cx
	mov	word ptr _Sound,10
	add	word ptr _GameScore,10
	adc	word ptr _GameScore+2,0
@15@1486:
	?debug	L 258
	inc	word ptr [bp-2]
@15@1514:
	cmp	word ptr [bp-2],30
	jge	@@39
	jmp	@15@1346
@@39:
   ;	
   ;			 }
   ;			break;
   ;	
	?debug	L 265
	jmp	short @15@1570
@15@1570:
   ;	
   ;	      }
   ;	     Objs[i].x=x; Objs[i].y=y;				/* 更新坐标 */
   ;	
	?debug	L 267
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	dx,word ptr [bp-4]
	mov	bx,ax
	mov	word ptr _Objs[bx+8],dx
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx+10],di
	?debug	L 234
	inc	si
@15@1626:
	cmp	si,30
	jge	@@40
	jmp	@15@310
@@40:
   ;	
   ;	   }
   ;	
   ;	  /* 主角控制 */
   ;	  if (keys[KEY_UP])  if (--fly_y<0) fly_y=0; 		/* 如果上键被按下 */
   ;	
	?debug	L 271
	mov	bx,word ptr _KEY_UP
	cmp	byte ptr _keys[bx],0
	je	short @15@1738
	dec	word ptr _fly_y
	jge	short @15@1738
	mov	word ptr _fly_y,0
@15@1738:
   ;	
   ;	  if (keys[KEY_DOWN]) if (++fly_y>MAXY) fly_y=MAXY;	/* 如果下键被按下 */
   ;	
	?debug	L 272
	mov	bx,word ptr _KEY_DOWN
	cmp	byte ptr _keys[bx],0
	je	short @15@1822
	inc	word ptr _fly_y
	mov	ax,word ptr _fly_y
	cmp	ax,169
	jle	short @15@1822
	mov	word ptr _fly_y,169
@15@1822:
   ;	
   ;	  if (keys[KEY_LEFT]) if (--fly_x<0) fly_x=0;		/* 如果左键被按下 */
   ;	
	?debug	L 273
	mov	bx,word ptr _KEY_LEFT
	cmp	byte ptr _keys[bx],0
	je	short @15@1906
	dec	word ptr _fly_x
	jge	short @15@1906
	mov	word ptr _fly_x,0
@15@1906:
   ;	
   ;	  if (keys[KEY_RIGHT]) if (++fly_x>319) fly_x=319;	/* 如果右键被按下 */
   ;	
	?debug	L 274
	mov	bx,word ptr _KEY_RIGHT
	cmp	byte ptr _keys[bx],0
	je	short @15@1990
	inc	word ptr _fly_x
	mov	ax,word ptr _fly_x
	cmp	ax,319
	jle	short @15@1990
	mov	word ptr _fly_x,319
@15@1990:
   ;	
   ;	  if (keys[KEY_CTRL]&&fire_flag) { 			/* 如果按下CTRL */
   ;	
	?debug	L 275
	mov	bx,word ptr _KEY_CTRL
	cmp	byte ptr _keys[bx],0
	je	short @15@2074
	cmp	word ptr _fire_flag,0
	je	short @15@2074
   ;	
   ;	     i=AllocObj(); Objs[i].x=fly_x,
   ;	
	?debug	L 276
	push	cs
	call	near ptr _AllocObj
	mov	si,ax
   ;	
   ;	     Objs[i].y=fly_y-10, Objs[i].mode=2; fire_flag=0;
   ;	
	?debug	L 277
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	dx,word ptr _fly_x
	mov	bx,ax
	mov	word ptr _Objs[bx+8],dx
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	dx,word ptr _fly_y
	add	dx,-10
	mov	bx,ax
	mov	word ptr _Objs[bx+10],dx
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],2
	mov	word ptr _fire_flag,0
@15@2074:
   ;	
   ;	  }
   ;	  if (!keys[KEY_CTRL]) fire_flag=1;			/* 如果放开CTRL */
   ;	
	?debug	L 279
	mov	bx,word ptr _KEY_CTRL
	mov	al,byte ptr _keys[bx]
	cbw	
	or	ax,ax
	jne	short @15@2130
	mov	word ptr _fire_flag,1
@15@2130:
   ;	
   ;	  putimage(fly_x,fly_y,fly_pic,1);			/* 画出主角     */
   ;	
	?debug	L 280
	mov	ax,1
	push	ax
	push	ds
	mov	ax,offset _fly_pic
	push	ax
	push	word ptr _fly_y
	push	word ptr _fly_x
	push	cs
	call	near ptr _putimage
	add	sp,10
   ;	
   ;	  if (!fly_flag) GameOver=1;				/* 判断主角状态 */
   ;	
	?debug	L 281
	cmp	word ptr _fly_flag,0
	jne	short @15@2186
	mov	word ptr _GameOver,1
@15@2186:
   ;	
   ;	}
   ;	
	?debug	L 282
	pop	ds
	pop	di
	pop	si
	mov	sp,bp
	pop	bp
	ret	
	?debug	C E6026F6B0402FAFF0001790404070001780402FC+
	?debug	C FF00016A0402FEFF00016904040600
	?debug	E
	?debug	E
_control	endp
   ;	
   ;	void drivers(void)
   ;	
	?debug	L 285
	assume	cs:FOOLFLY_TEXT
_drivers	proc	far
	?debug	B
	push	bp
	mov	bp,sp
	push	si
	push	ds
	mov	ax,FOOLFLY_DATA
	mov	ds,ax
	?debug	B
   ;	
   ;	{
   ;	  if (random(30)==0)
   ;	
	?debug	L 287
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,30
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	or	ax,ax
	je	@@41
	jmp	@16@114
@@41:
	?debug	B
   ;	
   ;	  { int i=AllocObj(); Objs[i].x=random(320); Objs[i].y=-random(20);
   ;	
	?debug	L 288
	push	cs
	call	near ptr _AllocObj
	mov	si,ax
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,320
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	push	ax
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Objs[bx+8],ax
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,20
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	neg	ax
	push	ax
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Objs[bx+10],ax
   ;	
   ;	    Objs[i].mode=1; Objs[i].type=Objs[i].index=0;
   ;	
	?debug	L 289
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx],1
	mov	ax,si
	mov	dx,12
	imul	dx
	xor	dx,dx
	mov	bx,ax
	mov	word ptr _Objs[bx+4],dx
	mov	ax,dx
	push	ax
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	pop	ax
	mov	word ptr _Objs[bx+2],ax
   ;	
   ;	    if (!random(20)) Objs[i].type=2;
   ;	
	?debug	L 290
	xor	ax,ax
	mov	dx,-32768
	push	ax
	push	dx
	call	far ptr _rand
	cwd	
	push	ax
	push	dx
	xor	dx,dx
	mov	ax,20
	pop	cx
	pop	bx
	call	far ptr F_LXMUL@
	push	dx
	push	ax
	call	far ptr F_LDIV@
	or	ax,ax
	jne	short @16@114
	mov	ax,si
	mov	dx,12
	imul	dx
	mov	bx,ax
	mov	word ptr _Objs[bx+2],2
@16@114:
	?debug	C E6016904040600
	?debug	E
   ;	
   ;	  }
   ;	}
   ;	
	?debug	L 292
	pop	ds
	pop	si
	pop	bp
	ret	
	?debug	E
	?debug	E
_drivers	endp
FOOLFLY_TEXT	ends
FOOLFLY_DATA	segment word public 'FAR_DATA'
_GameOver	label	word
	db	2 dup (0)
_timepass	label	word
	db	4 dup (0)
_Objs	label	word
	db	360 dup (0)
_Stars	label	word
	db	480 dup (0)
_OldInt9	label	dword
	db	4 dup (0)
_keys	label	byte
	db	128 dup (0)
_MemBuf	label	dword
	db	4 dup (0)
	?debug	C E9
	?debug	C FA00000000
s@	label	byte
	db	'Game Over. your score %ld'
	db	10
	db	0
	db	'Thank you for play it, if you have any question please call m'
	db	'e'
	db	10
	db	0
	db	'(0871)7167710 or lwwind@yeah.net, Lin Wei'
	db	10
	db	0
	db	'           - STAR WAR -'
	db	13
	db	0
	db	'not enough memory'
	db	10
	db	0
	db	'%d'
	db	13
	db	0
FOOLFLY_DATA	ends
FOOLFLY_TEXT	segment byte public 'CODE'
FOOLFLY_TEXT	ends
	public	_fclock
	public	_CheckHit
	public	_AllocObj
	public	_control
	public	_drivers
	public	_fire_flag
	public	_fly_flag
	public	_fly_y
	public	_fly_x
	public	_Sound
	public	_GameOver
	public	_timepass
	public	_drawfire
	public	_putimage
	public	_clear
	public	_show
	public	_pixel
	extrn	F_LDIV@:far
	extrn	F_LXMUL@:far
	public	_main
	public	_game_restore
	public	_game_init
	public	_copyright
	public	_fly_pic
	public	_GameScore
	public	_Objs
	public	_Stars
	public	_GameStart
	public	_NewInt9
	public	_OldInt9
	public	_KEY_CTRL
	public	_KEY_ESC
	public	_KEY_RIGHT
	public	_KEY_LEFT
	public	_KEY_DOWN
	public	_KEY_UP
	public	_keys
	public	_MemBuf
	public	_VideoBuf
	extrn	_farmalloc:far
	extrn	_farfree:far
	extrn	_clock:far
	extrn	_time:far
	extrn	_memset:far
	extrn	_memcpy:far
	extrn	_srand:far
	extrn	_rand:far
	extrn	_setvect:far
	extrn	_getvect:far
	extrn	_sound:far
	extrn	_nosound:far
	extrn	_int86:far
	extrn	_delay:far
	extrn	_printf:far
_s@	equ	s@
	?debug	C EA010D
	?debug	C E31C000000230C0400
	?debug	C EC075F66636C6F636B1C1800
	?debug	C E31D00000023040400
	?debug	C EC095F436865636B4869741D1800
	?debug	C E31E00000023040400
	?debug	C EC095F416C6C6F634F626A1E1800
	?debug	C E31F00000023010400
	?debug	C EC085F636F6E74726F6C1F1800
	?debug	C E32000000023010400
	?debug	C EC085F64726976657273201800
	?debug	C EC0A5F666972655F666C6167040000
	?debug	C EC095F666C795F666C6167040000
	?debug	C EC065F666C795F79040000
	?debug	C EC065F666C795F78040000
	?debug	C EC065F536F756E64040000
	?debug	C EC095F47616D654F766572040000
	?debug	C EC095F74696D65706173730C0000
	?debug	C E32100000023010400
	?debug	C EC095F6472617766697265211800
	?debug	C E32200000023010400
	?debug	C EC095F707574696D616765221800
	?debug	C E32300000023010400
	?debug	C EC065F636C656172231800
	?debug	C E32400000023010400
	?debug	C EC055F73686F77241800
	?debug	C E32500000023010400
	?debug	C EC065F706978656C251800
	?debug	C E32600000023040500
	?debug	C EB07465F4C444956402600
	?debug	C EB08465F4C584D554C402600
	?debug	C E32700000023010400
	?debug	C EC055F6D61696E271800
	?debug	C E32800000023040400
	?debug	C EC0D5F67616D655F726573746F7265281800
	?debug	C E32900000023040400
	?debug	C EC0A5F67616D655F696E6974291800
	?debug	C E32A00000023010400
	?debug	C EC0A5F636F707972696768742A1800
	?debug	C E32B0004011A08
	?debug	C EC085F666C795F7069632B0000
	?debug	C EC0A5F47616D6553636F7265060000
	?debug	C E32D04544F626A0C001E16
	?debug	C E32C0068011A2D
	?debug	C EC055F4F626A732C0000
	?debug	C E32F0654537461727306001E1D
	?debug	C E32E00E0011A2F
	?debug	C EC065F53746172732E0000
	?debug	C E33000000023020400
	?debug	C EC0A5F47616D655374617274301800
	?debug	C E33100000023010700
	?debug	C EC085F4E6577496E7439319800
	?debug	C E33300000023010700
	?debug	C E332000400163300
	?debug	C EC085F4F6C64496E7439320000
	?debug	C EC095F4B45595F4354524C040000
	?debug	C EC085F4B45595F455343040000
	?debug	C EC0A5F4B45595F5249474854040000
	?debug	C EC095F4B45595F4C454654040000
	?debug	C EC095F4B45595F444F574E040000
	?debug	C EC075F4B45595F5550040000
	?debug	C E3340080001A02
	?debug	C EC055F6B657973340000
	?debug	C EC075F4D656D4275661B0000
	?debug	C EC095F566964656F4275661B0000
	?debug	C E336000400160100
	?debug	C E33500000023360400
	?debug	C EB0A5F6661726D616C6C6F633500
	?debug	C E33700000023010400
	?debug	C EB085F666172667265653700
	?debug	C E33800000023060400
	?debug	C EB065F636C6F636B3800
	?debug	C E33900000023060400
	?debug	C EB055F74696D653900
	?debug	C E33A00000023360400
	?debug	C EB075F6D656D7365743A00
	?debug	C E33B00000023360400
	?debug	C EB075F6D656D6370793B00
	?debug	C E33C00000023010400
	?debug	C EB065F7372616E643C00
	?debug	C E33D00000023040400
	?debug	C EB055F72616E643D00
	?debug	C E33E00000023010400
	?debug	C EB085F736574766563743E00
	?debug	C E34100000023010700
	?debug	C E340000400164100
	?debug	C E33F00000023400400
	?debug	C EB085F676574766563743F00
	?debug	C E34200000023010400
	?debug	C EB065F736F756E644200
	?debug	C E34300000023010400
	?debug	C EB085F6E6F736F756E644300
	?debug	C E34400000023040400
	?debug	C EB065F696E7438364400
	?debug	C E34500000023010400
	?debug	C EB065F64656C61794500
	?debug	C E34600000023040401
	?debug	C EB075F7072696E74664600
	?debug	C E605756C6F6E670C060007636C6F636B5F740606+
	?debug	C 000674696D655F7406060009707472646966665F+
	?debug	C 740606000777636861725F740206000666706F73+
	?debug	C 5F740606000673697A655F740A060004544F626A+
	?debug	C 2D0700065453746172732F070004524547531807+
	?debug	C 000842595445524547531A070008574F52445245+
	?debug	C 4753190700
	?debug	C E2000178190001681AC010000000
	?debug	C E2000261780A000262780A000263780A00026478+
	?debug	C 0A000273690A000264690A000563666C61670A00+
	?debug	C 05666C6167730AC010000000
	?debug	C E20002616C0800026168080002626C0800026268+
	?debug	C 080002636C0800026368080002646C0800026468+
	?debug	C 08C008000000
	?debug	C E200046D6F646504000474797065040005696E64+
	?debug	C 65780400046E657874040001780400017904C00C+
	?debug	C 000000
	?debug	C E2000178040001790400017604C006000000
	end
