TITLE LOGICAN.MAC 08-09-84 21:55:00
.Z80
	ASEG
	ORG 100H
;
; THIS PROGRAM USES THE PARALLEL PRINTER PORT
; OF THE MICRO MATE TO MAKE A PARALLEL LOGIC
; ANALYZER. THE MICRO MATE ONLY HAS 4 STATUS BITS
; TO WORK WITH, TO USE ALL 8 YOU WILL HAVE TO
; PROVIDE HARDWARE CONNECTED TO THE INTERNAL
; CONNECTOR J4.
;
	JP LOOP1	; PROMPT USER
STARTO:
	LD DE,MEMEND
	LD HL,MEMST
	LD C,8FH	; HARDWARE ADD OF IO PORT
	DI		; KEEP TIME LOOP CORRECT
LOOP:
	INI		; 16
	PUSH HL		; 11
	XOR A		;  4
	SBC HL,DE	; 15 CK FOR END
	POP HL		; 10
	JP NZ,NORST	; 10
	LD HL,MEMST	;	10
NORST:
	IN A,(8AH)	; CON STAT
	BIT 0,A
	JP NZ,USER	; TO COMMAND LINE
;
SMCODE:
	LD B,1
DLOOP:
	NOP
	DEC B
	JR NZ,DLOOP
;
	NOP
	NOP
	JP LOOP
USER:
	PUSH HL		; SAVE PTR
	CALL PRINT
	DB 'POINTER ADDRESS ',0
	POP HL
	PUSH HL
	LD A,H
	CALL PRHEX
	POP HL
	LD A,L
	CALL PRHEX
	CALL PRINT
	NOP
LOOP1:
			; GET INPUT FROM USER
			; START OVER OR DUMP
	CALL PRINT
	DB 'DUMP FROM-FOR or RESTART '
	DB 'or SET SAMPLE TIME (in 5uS units)'
	DB 0DH,0AH,'MIN = 30uS or ANALYZE ',0
	CALL INBUF
	CP 'R'
	JP Z,STARTO	; RESTART
	CP 'S'
	JR Z,SET
	CP 'A'		; ANALYZE
	JP Z,ANA
	CP 'D'
	JR NZ,LOOP1	; WRONG ANS
	CALL NLDHL	; GET START ADDRESS
	JR C,LOOP1	; ERROR
	PUSH HL
	CALL LDPHL	; GET HOW LONG
	JR C,LOOP1
	EX DE,HL
	POP HL
	LD C,0
	CALL DUMPA
	JR LOOP1
;
SET:
	CALL FFDEC	; GET CLOCK SPEED
	JP C,LOOP1	; WRONG
	CP 6		; MIN
	JP C,LOOP1	; TOO LOW
	SUB 5		; 1 = 30 us
	LD (SMCODE+1),A
	CALL PRINT
	DB 'CLOCK TIME NOW SET',0DH,0AH,0
	JP LOOP1
;
ANA:
	CALL NLDHL	; START ADD
	JP C,LOOP1	; WRONG
	LD C,0		; START COUNT
	LD D,22		; LINES PER SCREEN
	LD A,(HL)	; START WITH GOOD CMP
	AND 30H
	LD B,A
;
CLOOP:
	INC C		; COUNTER
	JR NZ,NOTFF
	DEC C
NOTFF:			; PRINT FF FOR LONG TIME
	LD A,(HL)
	INC HL
	AND 30H		; ONLY 2 BITS THIS TIME
	CP B
	JP Z,CLOOP
;
	PUSH DE
	PUSH HL
	PUSH AF
	PUSH BC
	PUSH HL
;
	CALL PRINT
	DB 'ADD DATA CNT ',0
	POP HL
	CALL PRRP	; PRINT REG PAIR
	LD E,' '
	LD C,2
	CALL 5
	POP BC
	PUSH BC
	LD A,B
	CALL PRHEX
	LD E,' '
	LD C,2
	CALL 5
	POP BC
	LD A,C
	CALL PRHEX
	POP AF
	LD B,A
	LD C,0
	POP HL
	POP DE
	DEC D
	JP NZ,CLOOP
;
	PUSH HL
	PUSH BC
	CALL PRINT	; STOP AT 22 LINES
	DB 'CONTINUE or X ',0
	CALL INBUF
	CP 'X'
	POP BC
	POP HL
	JP Z,LOOP1	; RESET
	LD D,22
	LD C,0
	JP CLOOP
;
PRRP:			; PRINT REG PAIR IN HEX
	PUSH HL
	LD A,H
	CALL PRHEX
	POP HL
	LD A,L
;	FALL THRU TO PRHEX
PRHEX:
	CALL M_HEX
	PUSH DE
	LD E,D
	LD C,2
	CALL 5
	POP DE
	LD C,2
	JP 5
;
	EXTERNAL PRINT
	EXTERNAL M_HEX
	EXTERNAL INBUF
	EXTERNAL FFDEC
	EXTERNAL NLDHL
	EXTERNAL LDPHL
	EXTERNAL DUMPA
MEMEND	EQU	0F3FFH
MEMST	EQU	00800H
;
	END
