Compucolor.org – Virtual Media

Listing of file='MOVES.MAC;01' on disk='vmedia/tiny_c_v3.0-sector.ccvf'

;	MOVE/SCAN ROUTINES
;
; MOVE -(BC) BYTES FROM (HL) TO (DE)

	ENTRY	MOVE

MOVE:	MOV	A,M
	STAX	D
	INX	D
	INX	H
	INR	C
	JNZ	MOVE
	INR	B
	JNZ	MOVE
	RET

; MOVE THE BLOCK (DE)...(HL) INCLUSIVE (BC) BYTES

	ENTRY	MOVEBL

MOVEBL:	MOV	A,B
	ORA	A
	JM	MOVEDN
	ORA	C
	RZ
MOVEUP:	SHLD	FROMPTR
	DAD	B
	XCHG
	LDA	FROMPTR
	CMA
	ADD	L
	MOV	C,A
	LDA	FROMPTR+1
	CMA
	ADC	H
	MOV	B,A
	LHLD	FROMPTR
MU2:	MOV	A,M
	STAX	D
	DCX	H
	DCX	D
	INR	C
	JNZ	MU2
	INR	B
	JNZ	MU2
	RET

MOVEDN:	XCHG
	SHLD	FROMPTR
	DAD	B
	LDA	FROMPTR
	SUB	E
	MOV	C,A
	LDA	FROMPTR+1
	SBB	D
	MOV	B,A
	DCX	B
	XCHG
	LHLD	FROMPTR
	JMP	MOVE

FROMPTR:DW	0

; SCAN FOR THE NTH OCCURANCE OF A CHARACTER IN A BLOCK

	ENTRY	SCANN

SCANN:	PUSH	PSW
	XCHG
SC2:	MOV	A,C
	ORA	B
	JZ	SC9
	MOV	A,E
	SUB	L
	MOV	A,D
	SBB	H
	JC	SC9
	POP	PSW
	PUSH	PSW
	CMP	M
	JNZ	SC3
	DCX	B
SC3:	INX	H
	JMP	SC2

SC9:	DCX	H
	XCHG
	POP	PSW
	RET

; COUNT THE OCCURANCES OF A CHARACTER IN A BLOCK.

	ENTRY	CNTCH

CNTCH:	LXI	B,0
	PUSH	PSW
CC2:	MOV	A,L
	SUB	E
	MOV	A,H
	SBB	D
	JC	CC9
	POP	PSW
	PUSH	PSW
	CMP	M
	DCX	H
	JNZ	CC2
	INX	B
	JMP	CC2

CC9:	POP	PSW
	RET

	END