Compucolor.org – Virtual Media

Listing of file='MON.SRC;01' on disk='vmedia/taylor_4-sector.ccvf'

INIT:	LXI	SP,SPTR
	MVI	A,0CH
	CALL	PTCN
START:	LXI	SP,SPTR
	CALL	CRLF
	MVI	A,'*'
	CALL	PTCN
	CALL	RDCN
	ANI	5FH
	PUSH	PSW
	CALL	SPCE
	POP	PSW
	LXI	H,START
	PUSH	H
	CPI	'A'
	RC
	CPI	05BH
	RNC
	LXI	H,CMDTB+7EH
	PUSH	PSW
	ADD	A
	ADD	L
	MOV	L,A
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	POP	PSW
	PCHL
;
; COMMAND TABLE
;
CMDTB:	DW	DISP	;A
	DW	START
	DW	COMPR
	DW	DISP
	DW	START
	DW	SRCH	;F
	DW	EXEC
	DW	START
	DW	START
	DW	START
	DW	START	;K
	DW	START
	DW	MOVEB
	DW	NDMT
	DW	START
	DW	PGM	;P
	DW	START
	DW	START
	DW	SRCH
	DW	TMEM
	DW	START	;U
	DW	START
	DW	START
	DW	MOVEB
	DW	START
	DW	ZEROM	;Z
;
; GO COMAND
;
EXEC:	CALL	AHEX
	XCHG
	PCHL
;
; HEX TO BINARY
;
AHEX:	MVI	C,4
AHE0:	LXI	H,0
AHE1:	CALL	RDCN
	CPI	30H
	JC	START
	CPI	':'
	CNC	ALPH
	DAD	H
	DAD	H
	DAD	H
	DAD	H
	SUI	48
	CPI	10
	JC	ALF
	SUI	7
ALF:	ADD	L
	MOV	L,A
	DCR	C
	JNZ	AHE1
	XCHG
SPCE:	MVI	A,20H
PTCN:	JMP	OUT
CRLF:	MVI	A,0DH
	CALL	PTCN
	MVI	A,0AH
	JMP	PTCN
ALPH:	CPI	'A'
	JC	START
	ANI	5FH
	CPI	'G'
	JNC	START
	RET
;
; IN CHAR
;
RDCN:	LDA	READY
	CPI	50H
	JZ	RDCN
	CPI	80H
	LDA	KBUF
	JNZ	RDCN
	PUSH	PSW
	XRA	A
	STA	READY
	POP	PSW
	ANI	7FH
	RET
PAUSE:	LDA	READY
	CPI	50H
	JZ	PAUSE
	LDA	KBUF
	PUSH	PSW
	XRA	A
	STA	READY
	POP	PSW
	CPI	12H	; CTRL-R
	JZ	START
	RET
;
; MEMORY TEST
;
TMEM:	CALL	TAHEX
	LXI	B,5A5AH
CYCL:	CALL	RNDM
	PUSH	B
	PUSH	H
	PUSH	D
TLOP:	CALL	RNDM
	MOV	M,B
	CALL	BMP
	JNZ	TLOP
	POP	D
	POP	H
	POP	B
	PUSH	H
	PUSH	D
RLOP:	CALL	RNDM
	MOV	A,M
	CMP	B
	CNZ	ERR
	CALL	BMP
	JNZ	RLOP
	POP	D
	POP	H
	CALL	PAUSE
	JMP	CYCL
;
; RANDOM NUMBER ROUTINE
;
RNDM:	MOV	A,B
	ANI	0B4H
	ANA	A
	JPE	PEVE
	STC
PEVE:	MOV	A,C
	RAL
	MOV	C,A
	MOV	A,B
	RAL
	MOV	B,A
	RET
;
; ERROR PRINT-OUT ROUTINE
;
PTAD:	CALL	CRLF
	CALL	PAUSE
	MOV	A,H
	CALL	PT2
	MOV	A,L
	CALL	PT2
	CALL	SPCE
	RET
ERR:	PUSH	PSW
	CALL	PTAD
	MOV	A,B
	CALL	PT2
	CALL	SPCE
	POP	PSW
PT2:	PUSH	PSW
	CALL	BINH
	POP	PSW
	JMP	BINL
BINH:	RAR
	RAR
	RAR
	RAR
BINL:	ANI	0FH
	ADI	48
	CPI	58
	JC	PTCN
	ADI	7
	JMP	PTCN
;
; DISPLAY MEMORY CONTENTS
;
DISP:	MOV	B,A
	CALL	TAHEX
ENT1:	MVI	C,16
	CALL	PTAD
LP2:	MOV	A,B
	CPI	'A'
	MOV	A,M
	JZ	ASCD
	CALL	PT2
	CALL	SPCE
LP3:	CALL	BMP
	RZ
	DCR	C
	JZ	ENT1
	JMP	LP2
ASCD:	ANI	60H
	JNZ	NCON
	CALL	SPCE
	JMP	LP3
NCON:	MOV	A,M
	ANI	7FH
	CALL	PTCN
	JMP	LP3
;
; PROGRAM MEMORY
;
PGM:	CALL	AHEX
	XCHG
	CALL	CRLF
PGLP:	MOV	A,M
	CALL	PT2
	MVI	A,'-'
	CALL	PTCN
CRIG:	CALL	RDCN
	CPI	20H
	JZ	CON2
	CPI	0DH
	JNZ	CON1
	CALL	CRLF
	JMP	CRIG
CON1:	XCHG
	LXI	H,0
	MVI	C,2
	CALL	AHE1+3
	MOV	M,E
CON2:	INX	H
	JMP	PGLP
;
; COMPARE ADDRESSES, INCR H
;
BMP:	MOV	A,E
	SUB	L
	JNZ	GOON
	MOV	A,D
	SBB	H
GOON:	INX	H
	RET
;
; FILL MEMORY
;
ZEROM:	CALL	TAHEX
	PUSH	H
	MVI	C,2
	CALL	AHE0
	XCHG
	XTHL
	POP	B
ZLOOP:	MOV	M,C
	CALL	BMP
	RZ
	JMP	ZLOOP
;
; MOVE BLOCK
;
MOVEB:	MOV	B,A
	CALL	TAHEX
	PUSH	H
	CALL	AHEX
	XCHG
	XTHL
MLOOP:	MOV	C,M
	XTHL
	MOV	A,B
	CPI	'M'
	JZ	NEXCH
	MOV	A,M
	XTHL
	MOV	M,A
	XTHL
NEXCH:	MOV	M,C
	INX	H
	XTHL
	CALL	BMP
	JZ	START
	JMP	MLOOP
;
; NON-DEST. MEM TEST
;
NDMT:	LXI	H,0
NDLOP:	MOV	C,M
	MVI	B,0FFH
	MOV	M,B
	MOV	A,M
	CMP	B
	JNZ	ERR
	MVI	B,0
	MOV	M,B
	MOV	A,M
	CMP	B
	JNZ	ERR
	MOV	M,C
	INX	H
	JMP	NDLOP
;
; COMPARE BLOCKS
;
COMPR:	CALL	TAHEX
	PUSH	H
	CALL	AHEX
	XCHG
VMLOP:	MOV	A,M
	INX	H
	XTHL
	CMP	M
	MOV	B,M
	CNZ	ERR
	CALL	BMP
	XTHL
	JNZ	VMLOP
	POP	PSW
	RET
;
; SEARCH FOR BYTE/WORD
;
SRCH:	PUSH	PSW
	CALL	TAHEX
	PUSH	H
	MVI	C,2
	CALL	AHE0
	XCHG
	MOV	B,L
	POP	H
	POP	PSW
	CPI	'S'
	PUSH	PSW
	JZ	CONT
	PUSH	H
	MVI	C,2
	CALL	AHE0
	XCHG
	MOV	C,L
	POP	H
CONT:	MOV	A,M
	CMP	B
	JNZ	SKP
	POP	PSW
	CPI	'S'
	PUSH	PSW
	JZ	OBCP
	INX	H
	MOV	A,M
	DCX	H
	CMP	C
	JNZ	SKP
OBCP:	INX	H
	MOV	A,M
	DCX	H
	CALL	ERR
SKP:	CALL	BMP
	JNZ	CONT
	POP	PSW
	RET
;
TAHEX:	CALL	AHEX
	JMP	AHEX
OUT	EQU	0033H
READY	EQU	81FFH
KBUF	EQU	81FEH
	DS	64
SPTR	EQU	$
	END