Compucolor.org – Virtual Media

Listing of file='UTIL.MAC;01' on disk='vmedia/asm_utilities_macros-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	UTILITY ROUTINES
;
;

;
;	COMPARE HL TO DE (I.E. HL-DE)
;
;	HL AND DE ARE TREATED AS UNSIGNED 16-BIT NUMBERS
;
;	DESTROYS A REG.
;
	ENTRY	CMPHD

CMPHD:	MOV	A,H	;MOST SIGNIFICANT BYTE FIRST
	CMP	D
	RNZ		;DONE IF NOT ZERO
	MOV	A,L
	CMP	E	;SET FLAGS
	RET


;
;	MOVE A BLOCK (UP) IN MEMORY
;	IF THE SOURCE AND DESTINATION BLOCKS ARE DISJOINT,
;	THERE IS NO PROBLEM. IF THEY OVERLAP, THE MOVE
;	MUST BE UPWARDS.
;
;	ON ENTRY:
;	   HL -> SOURCE
;	   DE -> DESTINATION
;	   BC =  BYTE COUNT (MUST BE >0)
;
;	DESTROYS ALL REGISTERS
;
	ENTRY	MOVEUP

MOVEUP:	DAD	B	;FIND END OF SOURCE BLOCK
	DCX	H
	XCHG
	DAD	B	;   AND DESTINATION BLOCK
	DCX	H
	XCHG
MVUP10:	MOV	A,M	;GET CHR
	STAX	D	;MOVE IT
	DCX	H
	DCX	D
	DCX	B	;DONE?
	MOV	A,B
	ORA	C
	JNZ	MVUP10	;NO
	RET		;YES


;
;	MOVE A BLOCK (DOWN) IN MEMORY
;	IF THE SOURCE AND DESTINATION BLOCKS ARE DISJOINT,
;	THERE IS NO PROBLEM. IF THEY OVERLAP, THE MOVE
;	MUST BE DOWNWARDS.
;
;	ON ENTRY:
;	   HL -> SOURCE
;	   DE -> DESTINATION
;	   BC =  BYTE COUNT (MUST BE >0)
;
;	DESTROYS ALL REGISTERS
;
	ENTRY	MOVEDN

MOVEDN:	MOV	A,M	;GET BYTE
	STAX	D	;MOVE IT
	INX	H
	INX	D
	DCX	B	;DONE?
	MOV	A,B
	ORA	C
	JNZ	MOVEDN	;NO
	RET		;YES

	END