GUESS


00100 ;	GUESSNUM
00110 ; 	4/15/86		J. DUNMYER
00120 ;
00130 ;	A SIMPLE GUESS NUMBER GAME
00140 ;
00150 CLS			EQU		01C9H
00160 OUTC		EQU		0033H
00170 CHKIO		EQU		002BH
00180 GODOS		EQU		402DH
00190 RANDOM		EQU		01D3H
00200 RND			EQU		14CCH
00210 CINT		EQU		0A7FH
00220 DISPLY		EQU		021BH
00230
00240
00250 			ORG		7000H
00260 START		LD		SP,0F000H	; PUT STACK @ TOP
00270 			CALL		CLS
00280 INTRO		LD		HL,MSG1	; PRINT INSTRUCTIONS
00290 			CALL		DISPLY	; FOR GAME
00300			LD		HL,MSG2	
00310			CALL		DISPLY
00320			LD		HL,MSG3
00330			CALL		DISPLY
00340			LD		HL,MSG4
00350			CALL		DISPLY
00360			LD		HL,MSG5
00370			CALL		DISPLY
00380			LD		HL,MSG6
00390			CALL		DISPLY
00400 GETDIG		CALL		CHKIO	; GET A KEYPRESS
00410			JP		Z,GETDIG
00420			CALL		RANDOM	; RESET RANDOM SEED
00430			LD		HL,RNOS	; RND(X) BINARY ADDR. IN HL
00440			LD		IX,DECNO	; RND(X) ASCII ADDR.
00450			PUSH		HL		; SAVE RND(X)
00460 RNDN		LD		HL,999
00470			PUSH		DE
00480			PUSH		BC
00490			CALL		RND
00500			CALL		CINT
00510			POP		BC		;GET BC BACK
00520			POP		DE		;GET DE BACK
00530			POP		IY		;SAVE RNOS ADDRESS IN IY
00540			EX		DE,HL	;MOVE RND(X) TO DE
00550			LD		(IY+0),E	;
00560			LD		(IY+1),D	;PUT RND(X) IN RNOS ADDR.
00570			EX		DE,HL	;GET RND(X) IN HL AGAIN
00580 CONV		LD		IY,PTABLE ;POWER OF 10 TABLE IN IY
00590 BIN010		XOR		A		;DIGIT COUNT TO ZERO
00600			LD		D,(IY+1)	;MSB TO D
00610			LD		E,(IY+0)	;LSB TO E
00620 BIN020		OR		A		;CLEAR CARRY FLAG
00630			SBC		HL,DE	;SUBTRACT POWER OF 10
00640			JR		C,BIN030	;GO IF NEGATIVE
00650			INC		A		;BUMP DIGIT COUNT
00660			JR		BIN020	;CONTINUE
00670 BIN030		ADD		HL,DE	;RESTORE TO POSITIVE
00680			ADD		A,30H	;CONVERT TO ASCII
00690 			LD		(IX+0),A	;STORE IN BUFFER
00700			INC		IX		;BUMP BUFF POINTER
00710			INC 		IY		;BUMP PWR10 POINTER
00720			INC		IY
00730			LD		A,E		;GET LS BYTE
00740			CP		1		;TEST FOR 5 DIGITS
00750			JR		NZ,BIN010	;GO IF NOT 5
00760			LD		A,0DH	;END STRING
00770			LD		(IX+0),A	;SAVE IT
00780			INC		IX		;BUMP POINTER
00790 GUESS		LD		HL,MSG7	;GET PLAYER'S GUESS
00800			CALL		DISPLY	;
00810			LD		B,3		;MAX NO. OF DIGITS TO GET
00820			LD		IX,0000H	;STORE BINARY NO. IN IX
00830			LD		HL,STCHAR	;LOC'N OF CHAR STG IN HL
00840 GETNO		CALL		CHKIO	;
00850			JP		Z,GETNO	;
00860			CALL		OUTC		;DISPLAY IT
00870			CP		0DH		;CARRIAGE RETURN?
00880			JP		Z,DONE	;THEN QUIT
00890			OR		A		;RESET FLAGS
00900 DCONV		SUB		30H		;CONVERT ASCII TO NUMBER
00910			JP		M,GETNO	;LT "0", GET ANOTHER DIGIT
00920			CP		10		;
00930			JP		P,GETNO	;GT "9", GET ANOTHER DIGIT
00940 MULT10		ADD		IX,IX	;STORED BINARY*2
00950			PUSH		IX		;SAVE IT
00960			ADD		IX,IX	; *4
00970			ADD		IX,IX	; *8
00980			POP		DE		; RESTORE *2
00990			ADD		IX,DE	; *10 NOW IN IX
01000 TOTAL		LD		E,A		;MOVE CHAR FROM A TO DE
01010			LD		D,0		;NOW IN DE
01020			ADD		IX,DE	;ADD TO IX
01030 KEEP		LD		(HL),A	;SAVE DIGIT IN MEMORY
01040			INC		HL		;BUMP POINTER
01050			DJNZ		GETNO	;GET ANOTHER
01060 DONE		LD		(SAVNUM),IX   ; SAVE IX
01070;
01080;			COMPARE
01090; SEE IF GUESS EQUALS COMPUTER NUMBER
01100; GUESS IN IX
01110; COMP NO. IN IY
01120 SEEQ		LD		HL,(SAVNUM)	;MOVE GUESS TO HL
01130			LD		DE,(RNOS)		;MOVE RND(X) TO DE
01140			SBC		HL,DE		;SUBTRACT DE FROM HL
01150			JR		Z,YOUWIN		;EXACT GUESS - DONE
01160			JR		C,TOOLIT		;GUESS TOO SMALL
01170			LD		HL,MSG9		;GUESS TOO HIGH
01180			CALL		DISPLY		;PRINT "TOO HIGH"
01190			JP		GUESS		;GET ANOTHER NUMBER
01200 TOOLIT		LD		HL,MSG8		;GUESS TOO LOW
01210			CALL		DISPLY		;
01220			JP		GUESS		;GET ANOTHER NUMBER
01230 YOUWIN		LD		HL,MSG10		;GUESS RIGHT
01240			CALL		DISPLY		;
01250			LD		HL,MSG11		;PRINT NO.
01260			CALL		DISPLY		;
01270			LD		HL,DECNO		;RND(X)
01280			CALL		DISPLY		;
01290			JP		GODOS		; EXIT
01300 MSG1		DEFM		'THIS IS A GUESS NUMBER GAME'
01310			DEFB		0DH
01320 MSG2		DEFM		'THE COMPUTER PICKS A NUMBER BETWEEN 0 AND 999'
01330			DEFB		0DH
01340 MSG3		DEFM		'AND YOU TRY TO GUESS WHAT THAT NUMBER IS'
01350			DEFB		0DH
01360 MSG4          DEFM	'THE COMPUTER TELLS YOU IF YOUR GUESS IS TOO HIGH OR TOO LOW'
01370			DEFB		0DH
01380 MGS5		DEFM		'AND ASKS FOR ANOTHER GUESS'
01390			DEFB		0DH
01400 MSG6		DEFM		'PRESS ANY KEY WHEN YOU ARE READY TO PLAY'
01410			DEFB		0DH
01420 MSG7		DEFM		'WHAT IS YOUR GUESS? '
01430			DEFB		0DH
01440 MSG8		DEFM		'YOUR GUESS IS TOO LOW, TRY AGAIN. '
01450			DEFB		0DH
01460 MSG9		DEFM		'YOUR GUESS IS TOO HIGH, TRY AGAIN. '
01470			DEFB		0DH
01480 MSG10		DEFM		'YOU GUESSED RIGHT!'
01490			DEFB		0DH
01500 MSG11		DEFM		'THE NUMBER WAS '
01510			DEFB		0DH
01520 RNOS		DEFW		0000H
01530 SAVNUM		DEFW		0000H	;STORE GUESS HERE
01540 DECNO		DEFS		08H		;STORE ASCII RND(X) HERE
01550 STCHAR		DEFS		08H		;STORE ASCII GUESS HERE
01560 PTABLE		DEFW		10000
01570 			DEFW		1000
01580			DEFW		100
01590			DEFW		10
01600			DEFW		1
01610			END		START

........ . ... ...-.... 1200  N81N          ............                                                                                                                                