Compucolor.org – Virtual Media

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	SEND A MORSE CHARACTER USING SOUNDWARE
;
	ENTRY	SEND
	PUBLIC	DOTTIM,CHSPD

	EXTRN	ENCODE

SEND:	ANI	7FH		;MAKE SURE IT'S ASCII
	LXI	H,ENCODE	;INDEX INTO MORSE CODE TABLE
	MOV	C,A
	MVI	B,0
	DAD	B
	MOV	A,M
	STA	CODE		;SAVE THE MORSE FOR LATER
	ORA	A
	JNZ	XMIT		;NULLS COUNT AS SPACES
	CALL	DOTOFF		;I.E. ANY CHARACTER WITH NO
	JMP	SPACE		;MORSE EQUIVALENT IS A SPACE
;
;	MAIN SENDING LOOP
;
XMIT:	LDA	CODE		;GET NEXT DOT OR DASH
	ADD	A
	STA	CODE
	JZ	SPACE		;FINISHED IF NOTHING LEFT
	LHLD	DOTTIM		;GET DOT TIME
	JNC	MARK		;MULTIPLY BY THREE IF A DASH
	MOV	B,H
	MOV	C,L
	DAD	H
	DAD	B
MARK:	CALL	SOUND		;SEND THE DOT OR DASH
	CALL	DOTOFF		;FOLLOWED BY ONE DOT SPACE
	JMP	XMIT		;AND REPEAT
;
;	SPACE BETWEEN CHARACTERS
;
SPACE:	CALL	DOTOFF		;ALWAYS ONE DOT SPACE
	CALL	CHRSPC		;PLUS INTER-CHARACTER SPACE
	RET

;
;..............................................................
;
;	WAIT ONE DOT TIME WITH NO SOUND
;
DOTOFF:	LHLD	DOTTIM
	MVI	A,0
	STA	NOISE
	CALL	TONE
	RET
;
;..............................................................
;
;	WAIT ONE CHARACTER SPACE WITH NO SOUND
;
CHRSPC:	LDA	CHSPD
	PUSH	PSW
CS01:	CALL	DOTOFF
	POP	PSW
	DCR	A
	PUSH	PSW
	JNZ	CS01
	POP	PSW
	RET
;
;..............................................................
;
;	MAKE A SOUND (DOT OR DASH)
;
;	DURATION IS IN HL ON ENTRY
;
SOUND:	MVI	A,0FFH
	STA	NOISE
	CALL	TONE
	RET
;
;..............................................................
;
;	GENERATE A TONE OR SIMPLY A DELAY
;
;	DURATION IS IN HL ON ENTRY.
;	NOTE THAT INTERRUPTS ARE DISABLED, SO THE REAL-TIME
;	CLOCK WILL RUN SLOW.
;
TONE:	MVI	C,8
	DI

TN02:	LDA	PITCH
	MOV	D,A
TN03:	DCR	D
	JNZ	TN03

	LDA	NOISE		;SEE IF NOISE ON OR OFF
	ORA	A
	JZ	TN04
	MOV	A,C		;OUTPUT THE SOUND BY RESETTING
	XRI	02		;AND SETTING THE BREAK BIT IN
	OUT	04		;THE 5501 ALTERNATELY
	MOV	C,A
	JMP	TN05

TN04:	MOV	C,A		;NO SOUND OUTPUT
	MOV	A,C		;JUST FILL IN TIME TO MAKE THE
	MOV	C,A		;DELAY EQUAL IN LENGTH TO THE
	MOV	A,C		;SOUND OUTPUT PART
	MOV	C,A
	NOP
	NOP
	NOP

TN05:	DCX	H		;DECREMENT DURATION
	MOV	A,H
	ORA	L
	JNZ	TN02		;REPEAT IF NOT SATISFIED
	EI
	RET

;
;	STORAGE AREA FOR TIMING AND TONE GENERATION DATA
;

CODE:	DB	0
PITCH:	DB	94,0
DOTTIM:	DB	103,0
CHSPD:	DB	2
NOISE:	DB	0

	END