Compucolor.org – Virtual Media

Listing of file='DEFPOP.MAC;09' on disk='vmedia/life-sector.ccvf'

;=========================================================
;
;	DEFINE INITIAL POPULATION
;
;=========================================================
;
CURSCCI	EQU	8
NORMCCI	EQU	2
CR	EQU	13
INDIV	EQU	42	;INDIVIDUAL IN WORLD
BLANK	EQU	32
;
	EXTRN	CURSOR,ERASE,GETCH,INDEX,JMPTAB,LIMIT,OSTR
	EXTRN	CURSLOC
	EXTRN	BEGSC,ENDSC,CENTSC,BEGWR,ENDWR

	ENTRY	DEFPOP

DEFPOP:
	CALL	ERASE
	LXI	H,TOP1
	CALL	OSTR
	LXI	H,BOTT1
	CALL	OSTR		;SET UP INITIAL POPSCREEN
	LXI	H,CENTSC
	CALL	CURSOR		;PUT CURSOR IN CENTER OF SCREEN
DIPCHAR:
	CALL	GETCH

	STA	TEMP
	LXI	H,CMNDS		;SEE IF LEGAL COMMAND
	CALL	INDEX
	JNZ	DIP10		;NO, CHECK CURSOR COMMANDS
	LXI	H,CMDADR
	CALL	JMPTAB
	PCHL			;GO EXECUTE COMMAND

DIP10:	LDA	TEMP
DIP20:	LXI	H,CURDRN	;SEE IF VALID CURSOR DIRECTION
	CALL	INDEX
	JNZ	DIPCHAR		;BAD DIRECTION, OR NO MOVE
	LXI	H,CURADD
	CALL	JMPTAB		;GET OFFSET IN REFRESH RAM

MOVE:	LDA	TEMP	;SAVE LAST DIRECTION
	STA	LSTDIR
	CALL	LIMIT	;MAKE SURE NOT OFF SCREEN
	CNC	CURSOR	;MOVE CURSOR
	JMP	DIPCHAR	;DO IT AGAIN

NOMOVE:	XRA	A	;SET NO LAST DIRECTION
	STA	TEMP

DEFINE:	LHLD	CURSLOC
	MOV	A,M
	CPI	INDIV
	JZ	DEF10
	MVI	M,INDIV	;IF NOT ONE BEFORE, MAKE IT ONE NOW
	JMP	DEF20
DEF10:	MVI	M,BLANK	;IF IT WAS ONE, ERASE IT
DEF20:	LDA	TEMP	;SEE IF CURSOR IS TO MOVE
	ORA	A
	JZ	DIPCHAR
	LDA	LSTDIR	;MOVE CURSOR IN LAST DIRECTION
	JMP	DIP20

HOME:	LXI	H,CENTSC
	CALL	CURSOR
	XRA	A
	STA	LSTDIR
	JMP	DIPCHAR

RUN:	RET

;------------------------DATA-------------------------------
;
;	MESSAGES
;
TOP1:	DB	8,6,21H,11,3,20,0
	DB	'PRESS RETURN TO GENERATE AN INDIVIDUAL'
	DB	6,NORMCCI,239
BOTT1:	DB	3,0,31,6,21H,11,3,20,31
	DB	'PRESS R TO RUN'
	DB	6,NORMCCI,3,64,0,239
;
;	LIST OF VALID COMMANDS
;
CMNDS:	DB	8	;HOME
	DB	13	;DEFINE WITH NO MOVEMENT
	DB	'.'	;DEFINE WITH NO MOVEMENT
	DB	'='	;DEFINE THEN MOVE CURSOR
	DB	'0'	;DEFINE THEN MOVE CURSOR
	DB	'5'	;HOME
	DB	'R'	;RUN
	DB	0
;
;	ADDRESSES OF LEGAL COMMANDS
;
CMDADR:	DW	HOME
	DW	NOMOVE
	DW	NOMOVE
	DW	DEFINE
	DW	DEFINE
	DW	HOME
	DW	RUN
;
;	LIST OF VALID CURSOR COMMANDS
;
CURDRN:
	DB	10	;CURSOR DOWN
	DB	13	;NO MOVEMENT
	DB	25	;CURSOR RIGHT
	DB	26	;CURSOR LEFT
	DB	28	;CURSOR UP
	DB	'1'	;DOWN LEFT
	DB	'2'	;DOWN
	DB	'3'	;DOWN RIGHT
	DB	'4'	;LEFT
	DB	'6'	;RIGHT
	DB	'7'	;UP LEFT
	DB	'8'	;UP
	DB	'9'	;UP RIGHT
	DB	0
;
;	OFFSETS FROM CURRENT LOCATION IN REFRESH RAM FOR
;	A CURSOR MOVE COMMAND
;
CURADD:
	DW	128
	DW	0
	DW	2
	DW	-2
	DW	-128
	DW	126
	DW	128
	DW	130
	DW	-2
	DW	2
	DW	-130
	DW	-128
	DW	-126

TEMP:	DB	0	;TEMPORARY STORAGE
LSTDIR:	DB	0	;LAST DIRECTION

	END