Compucolor.org – Virtual Media

Listing of file='FIREJ.MAC;23' on disk='vmedia/dogfight-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	FIRCTL - FIRE CONTROL ROUTINE
;
;	   DOES ALL THE SHOOTING AT SHIPS. INTERNAL HIT
;	   AND SHOT COUNTERS ARE PUBLIC, AS ARE THE
;	   MESSAGES THAT PRINT THEM. MAKES SOUNDS FOR THE
;	   SHOT AND EXPLOSIONS (HITS). THE COUNT TO BE USED
;	   IN DEBOUNCING THE PUSH-BUTTON IS PUBLIC.
;
;		*** JOYSTICK VERSION ***
;
;	(USES JOYSTICK FOR BOTH DISTANCE AND DIRECTION)
;
	TITLE	FIRCTL

	ENTRY	FIRCTL

	PUBLIC	FIRCNT,HITCNT,FIRMSG,HITMSG,DBCNT

;
;	VALUES ON ENTRY:
;	   IRRELEVANT
;
;	RETURNS:
;	   NOTHING - HITS AND SHOTS FIRED ARE PUBLIC
;
;	DESTROYS:
;	   ALL REGISTERS
;
;
;	EXTERNALS - REQUIRED SUBROUTINES
;
	EXTRN	DECOUT	;CONVERTS A BYTE TO ASCII DECIMAL NO.
	EXTRN	DELAY	;WASTE TIME
	EXTRN	RANDOM	;RANDOM NUMBER GENERATOR
	EXTRN	GENSND,FINFLG
			;SOUNDWARE ROUTINE AND PUBLICS
	EXTRN	BOOM

	EXTRN	OSTR	;OUTPUT A STRING
	EXTRN	JOYSTK,PSHBUT	;JOYSTICK ROUTINES

;
;	THE FOLLOWING ARE IN THE MAIN PROGRAM:
;

	EXTRN	SCT,HLSCT,GRPTR,XPOS,YPOS
	EXTRN	XPLCNT,EXPLDE
	EXTRN	XSPD,XDIRN,YSPD,YDIRN

;
;	PROGRAM PARAMETERS
;

SHPHGT	EQU	3
SHPWID	EQU	14
ADJDEL	EQU	30	;DELAY TO ADJUST TIMING FOR WHEN A SHOT
			;  IS NOT FIRED. SHOULD BALANCE OUT THE
			;  TIME TAKEN IF A SHOT IS FIRED.

;..............................................................

FIRCTL:	LDA	SHOT2
	ORA	A
	JZ	FIRC10
	LXI	H,SH2MSG
	CALL	OSTR
	XRA	A
	STA	SHOT2
	LDA	XPOS
	ADI	SHPWID/4
	CPI	31
	JC	FIRC10
	CPI	34
	JNC	FIRC10
	LDA	YPOS
	ADI	SHPHGT/2
	CPI	14
	JC	FIRC10
	CPI	17
	JNC	FIRC10
	MVI	A,30
	CALL	BOOM
	LDA	XPLCNT
	ORA	A
	JNZ	FIRC20
	LXI	H,HITCNT	;EXPLOSION
	INR	M
	MOV	A,M
	LXI	H,HITS
	CALL	DECOUT
	LXI	H,HITMSG
	CALL	OSTR
	MVI	A,SHPWID/2
	CALL	RANDOM
	RLC
	MOV	E,A
	XRA	A
	MOV	D,A
	LXI	H,EXPLDE
	DAD	D
	SHLD	GRPTR
	MVI	A,10
	CALL	RANDOM
	ADI	2
	STA	XPLCNT
	JMP	FIRC20
FIRC10:	MVI	A,ADJDEL
	CALL	DELAY
FIRC20:	LXI	H,SH3MSG
	CALL	OSTR
FIRC30:	LDA	SHOT1
	ORA	A
	JZ	FIRC35
	LXI	H,SH1MSG
	CALL	OSTR
	MVI	A,0FFH
	STA	SHOT2
	XRA	A
	STA	SHOT1
	JMP	FIRC40
FIRC35:	MVI	A,ADJDEL/2
	CALL	DELAY

FIRC40:	LDA	DEBNCE	;DEBOUNCE THE PUSH-BUTTON
	ORA	A
	JZ	MOVE
	DCR	A
	STA	DEBNCE
	JMP	BUTT50
MOVE:	XRA	A	;SET JOYSTICK NO. ZERO
	CALL	JOYSTK	;READ POSITION
	PUSH	B	;SAVE X-Y COORDS
	MOV	A,B
	CALL	ACCEL
	STA	XSPD	;SAVE IT
	MOV	A,C
	STA	XDIRN

	POP	B	;GET BACK Y-COORD
	MOV	A,C
	CALL	ACCEL
	STA	YSPD
	MOV	A,C
	STA	YDIRN

	XRA	A	;NO. ZERO
	CALL	PSHBUT	;CHECK PUSH-BUTTON
	JNZ	BUTT40
	LXI	H,FIRCNT	;INCREMENT COUNT OF SHOTS FIRED
	INR	M
	MOV	A,M
	LXI	H,FIRED		;AND PRINT MESSAGE
	CALL	DECOUT
	LXI	H,FIRMSG
	CALL	OSTR
	CALL	MCHGUN	;MAKE A MACHINE-GUN SOUND
BUTT40:	LDA	DBCNT	;RESTORE THE DEBOUNCE COUNT
	STA	DEBNCE
	RET

BUTT50:	MVI	A,ADJDEL*2	;ADJUST TIMING IF NO SHOT FIRED
	CALL	DELAY
	RET

;
;	"ACCELERATOR" ROUTINE
;

ACCEL:	MVI	B,3	;DIVIDE BY 8
	SUI	128
	JM	ACC20
ACC10:	RRC
	ANI	7FH
	DCR	B
	JNZ	ACC10
	MOV	B,A
	ORA	A
	JZ	ACC40
	MVI	A,10H
	SUB	B
	MVI	C,1
	RET
ACC20:	CMA
	ADI	1
	CPI	128
	JNZ	ACC30
	MVI	A,127
ACC30:	RRC
	ANI	7FH
	DCR	B
	JNZ	ACC30
	MOV	B,A
	ORA	A
	JZ	ACC40
	MVI	A,10H
	SUB	B
	MVI	C,-1
	RET
ACC40:	MVI	A,10
	MVI	C,0
	RET
;
;	MAKE MACHINE-GUN SOUND AND FIRE BULLETS
;

MCHGUN:	MVI	A,0FFH
	STA	SHOT1
	LXI	H,GUNMSG
	CALL	OSTR
	LXI	H,WHITE
	CALL	OSTR
	MVI	A,5
	LXI	H,BULT1
	LXI	D,LENBUL

MCG10:	PUSH	PSW
	PUSH	D
	PUSH	H

MCG20:	LDA	FINFLG	;WAIT FOR LAST SHOT TO FINISH
	ORA	A
	JZ	MCG20

	LXI	H,40
	MVI	D,1
	MVI	E,1
	MVI	B,5
	MVI	C,0
	MVI	A,40
	CALL	GENSND

	POP	H
	POP	D
	DAD	D
	PUSH	H
	CALL	OSTR
	POP	H
	POP	PSW
	DCR	A
	JNZ	MCG10
	LXI	H,NOGNMG
	CALL	OSTR
	RET

;..............................................................
;
;	DATA AREA
;

DBCNT:	DB	1	;COUNT FOR DEBOUNCING
DEBNCE:	DB	1	;DEBOUNCE COUNTER
FIRCNT:	DB	0	;COUNT OF SHOTS FIRED
HITCNT:	DB	0	;COUNT OF HITS

SHOT1:	DB	0	;FLAGS FOR BULLETS IN FLIGHT
SHOT2:	DB	0

;
;	MESSAGES
;

FIRMSG:	DB	15,3,100,10,30,2,'FIRED',3,100,11,31,2
FIRED:	DB	'000',239	;SHOTS FIRED

HITMSG:	DB	15,3,100,50,30,2,'HITS',3,100,51,31,2
HITS:	DB	'000',239	;NUMBER OF HITS

WHITE:	DB	6,7,239
BLACK:	DB	6,0,239

GUNMSG:	DB	6,41H,3,16,31,64H,3,48,31,64H,239

NOGNMG:	DB	6,0,3,16,31,20H,3,48,31,20H,239

;
;	PLOTTED POINTS FOR THE BULLETS
;

BULT1:	DB	2,96,4,33,4,255,239

LENBUL	EQU	$-BULT1

BULT2:	DB	2,90,14,39,14,255,239
BULT3:	DB	2,85,24,44,24,255,239
BULT4:	DB	2,81,32,48,32,255,239
BULT5:	DB	2,77,40,52,40,255,239

SH1MSG:	DB	6,0,2,96,4,33,4,255
	DB	6,7
BULT6:	DB	2,74,46,55,46,255
	DB	6,0,2,90,14,39,14,255
	DB	6,7
BULT7:	DB	2,72,50,57,50,255
	DB	6,0,2,85,24,44,24,255
	DB	6,7
BULT8:	DB	2,70,54,59,54,255
	DB	6,0,2,81,32,48,32,255
	DB	6,7
BULT9:	DB	2,68,58,61,58,255
	DB	6,0,2,77,40,52,40,255
	DB	6,7
BULT10:	DB	2,67,60,62,60,255,239

SH2MSG:	DB	6,0,2,74,46,55,46,255
	DB	6,7
BULT11:	DB	2,66,62,63,62,255
	DB	6,0,2,72,50,57,50,255
	DB	6,7
BULT12:	DB	2,65,64,64,64,255
	DB	6,0,2,70,54,59,54,255
	DB	6,7
BULT13:	DB	2,65,65,64,65,255
	DB	6,0,2,68,58,61,58,255
	DB	6,7
BULT14:	DB	2,65,66,64,66,255
	DB	6,0,2,67,60,62,60,255
	DB	6,7
BULT15:	DB	2,65,67,64,67,255,239

SH3MSG:	DB	6,0,2
	DB	66,62,63,62
	DB	65,64,64,64
	DB	65,65,64,65
	DB	65,66,64,66
	DB	65,67,64,67
	DB	255,239

	END