PEEK   ;   16K  =  07EC0H   MEM SIZE? 32447
 ;   32K  =  0BEC0H   MEM SIZE? 48831
 ;   48K  =  0FEC0H   MEM SIZE? 65215
 ; CHANGE LINE 10 TO THE ABOVE FOR MEM SIZE
 ;PROGRAM TO PEEK AT ABSOLUTE MEMORY ADDRESS
 ;
 ;       WRITTEN BY  L.ASHMUN 1978 (C)
 ;          ALL RIGHTS RESERVED
 	ORG	7EC0H
 	CALL	ZERO		;CLEAR TABLES
 	CALL	01C9H		;CLEAR SCREEN
 	LD	A,17H		;32 CHARACTER FORMAT
 	CALL	0033H		;DISPLAY ROUTINE
 START	LD	HL,TBL3		;FIRST MESSAGE
 	CALL	2B75H		;TABLE DISPLAY ROUTINE
 SCAN	LD	B,05		;INPUT BUFFER SIZE+1
 	LD	HL,TBL5
 	CALL	05D9H		;INPUT FROM KB TO BUFF.
 	JP	C,BREAK		;CHECK FOR BREAK KEY
 	LD	A,B
 	CP	04		;FULL BUFFER?
 	JR	NZ,DIS1		;JUMP IF NO
 	LD	DE,TBL1		;MOVE DATA FROM BUFFER
 	PUSH	DE		;TO TABLE 1
 SET	LD	A,(HL)
 	LD	(DE),A
 	INC	HL
 	INC	DE
 	DJNZ	SET		;JUMP UNTIL ALL MOVED
 	POP	HL
 	LD	DE,TBL2
 	PUSH	DE
 	LD	B,04
 TRANS	LD	A,(HL)		;CHECK FOR VALID ADDRESS
 	SUB	30H		;AND CONVERT TO ABSOLUTE #
 	JP	C,RNGE
 	CP	10H
 	JR	C,LOAD
 	SUB	07H
 	JP	C,RNGE
 	CP	10H
 	JP	NC,RNGE
 LOAD	LD	(DE),A
 	INC	DE
 	INC	HL
 	DJNZ	TRANS		;JUMP TILL ALL CHECKED
 	POP	HL
 	XOR	A
 	CALL	MERGE		;CHANGE 2 BYTES TO 1
 	LD	D,A
 	INC	HL
 	CALL	MERGE
 	LD	E,A
 	DEC	DE
 	EX	DE,HL
 	LD	(PEEK),HL 	;HL=CURRENT ADD. TO PEEK AT
 DIS1	LD	C,16		;C= # OF LINES TO DISPLAY
 INC	LD	B,04		;B= # OF CHAR. IN ADDRESS
 	LD	HL,TBL1		;HL POINTS TO TABLE THAT
 WRITE	LD	A,(HL)		;HOLDS CURRENT "PEEK" ADD.
 	CALL	0033H		;IN ASCII
 	INC	HL
 	DJNZ	WRITE
 	LD	A,20H		;DRESS UP DISPLAY
 	CALL	0033H
 	LD	A,2DH
 	CALL	0033H
 	LD	A,20H
 	CALL	0033H
 	DEC	HL
 	PUSH	HL
 	LD	HL,(PEEK)
 	INC	HL
 	XOR	A
 	LD	A,(HL)		;GET NEXT PEEK BYTE
 	LD	D,A
 	PUSH	DE
 	AND	0F0H		;SEPERATE DIGITS
 	RRA
 	RRA
 	RRA
 	RRA
 	CALL	CHK
 	CALL	0033H		;DISPLAY FIRST DIGIT
 	POP	AF		;GET SECOND DIGIT
 	AND	0FH
 	CALL	CHK
 	CALL	0033H		;DISPLAY SECOND DIGIT
 	LD	(PEEK),HL	;SAVE CURRENT PEEK ADD.
 	POP	HL
 	LD	E,1
 	LD	B,04
 INC2	LD	A,(HL)		;UPDATE ASCII TABLE FOR
 	ADD	A,E		;PEEK ADDRESS
 	LD	E,0
 	CP	3AH
 	JR	C,GO
 	CP	41H
 	JR	NC,CHK1
 	ADD	A,7
 CHK1	CP	47H
 	JR	C,GO
 	INC	E
 	LD	A,30H
 GO	LD	(HL),A
 	DEC	HL
 	LD	A,E
 	OR	A
 	JR	Z,CHK3
 	DJNZ	INC2
 CHK3	LD	A,E
 	OR	A
 	JP	NZ,START
 	DEC	C
 	JP	Z,START		;JUMP IF 16 LINES DISPLAYED
 	LD	A,0DH		;START NEW LINE
 	CALL	0033H
 	JR	INC
 RNGE	POP	HL		;NON VALID ADDR. ROUTINE
 	CALL	ZERO
 	LD	HL,TBL4
 	CALL	2B75H
 	LD	A,0DH
 	CALL	0033H
 	JP	START
 BREAK	CALL	01C9H		;BREAK KEY ROUTINE
 	LD	SP,(40A0H)
 	JP	1A19H		;GO TO BASIC
 CHK	ADD	A,30H		;CHECK HEX NUMBER FOR
 	CP	3AH		;NUMBER OR LETTER AND
 	RET	C		;CONVERT TO ASCII
 	ADD	A,07
 	RET
 MERGE	LD	A,(HL)
 	RLA
 	RLA
 	RLA
 	RLA
 	INC	HL
 	ADD	A,(HL)
 	RET
 ZERO	LD	HL,0FFFFH	;SET START ADDRESS TO 0
 	LD	(PEEK),HL
 	LD	HL,TBL1		;ZERO ASCII TABLE
 	LD	A,30H
 	LD	B,04
 XX	LD	(HL),A
 	INC	HL
 	DJNZ	XX
 	RET
 TBL1	DEFS	5
 TBL2	DEFS	5
 PEEK	DEFS	2
 TBL3	DEFM	' START ADDRESS ? '
 	DEFB	0
 TBL4	DEFM	' OUT OF RANGE'
 	DEFB	0
 TBL5	DEFS	5
 	END	402DH
