DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b296000d2⟧ TextFile

    Length: 5376 (0x1500)
    Types: TextFile
    Names: »MO6OH.MAC«

Derivation

└─⟦122ca995a⟧ Bits:30005902 Move-IT arbejdsdiskette
    └─ ⟦this⟧ »MO6OH.MAC« 

TextFile

	.Z80
;
DPORT	EQU	0
SPORT	EQU	1

	ASEG
;
;	CUSTOM MOV-BIOS SKELETON FOR MOVE-IT   (12/1/81)
;
;
;		WRITTEN BY:     JEFF WOOLF
;				WOOLF SOFTWARE SYSTEMS
;				23842 ARCHWOOD ST.
;				CANOGA PARK, CA 91307
	ORG	100H

BIOS	EQU	$		;THIS IS THE USER'S BIOS!!!
START:	JP	0302H		;THE WAY TO THE PROGRAM
	JP	4000H		;END OF USER SECTION
	JP	INITI		;COMLINE INIT.
	JP	FINISH		;COMLINE DE-INIT.
	JP	INSTA		;COMLINE STATUS
	JP	INDAT		;COMLINE DATA INPUT
	JP	OUTSTA		;COMLINE OUTPUT STATUS
	JP	OUTDAT		;COMLINE OUTPUT DATA
	JP	CNFGMS		;POINT TO THE CONFIGURATION MESSAGE
	JP	DIAL		;AUTO-DIAL/ANSWER SUPPORT


;	THE CONFIG MESSAGE IS 80 CHARACTERS LONG, PLUS A CR AND TWO LFS
CNFGMS:	
	DB	'                      '
	DB	'2 METER INTERFACE BY OZ1CJO & OZ8ET'
	DB	0DH,0AH,0AH,'$'

INITI:	;INIT. COMLINE (NO ENTRY,EXIT PARMS)

; ----- ANY CODE THE SYSTEM NEEDS TO INITIALIZE THE COMLINE -----
; -----                SHOULD BE ADDED HERE                 -----
	CALL	RESRTS
        CALL HANGUP
	RET	



FINISH:	;DE-INIT. COMLINE (NO ENTRY,EXIT PARMS)

; ----- ANY CODE THE SYSTEM NEEDS TO RUN -- INITIALIZE THE COMLINE -----
; -----                   SHOULD BE ADDED HERE                     -----
	CALL	RESRTS
	RET


INSTA:	;INPUT STATUS (A=FF IF CHAR READY,0 IF NOT)

;	ADD A ROUTINE TO READ THE STATUS OF THE INPUT PORT HERE
;	USE ANY REGISTERS YOU LIKE, AND UPON EXIT, SET THE A REG
;	TO 0FFH IF A CHARACTER IS WAITING, OR TO 0 IF NOT

	LD	HL,(DIRFLG)	; GET DIRFLG
	LD	A,H		; TEST FOR ZERO
	OR	L
	JR	Z,ISTA		; CHECK STATUS IF SO
	DEC	HL		; DECREMENT DIRFLG
	IN	A,(DPORT)	;
	LD	(DIRFLG),HL	; RESTORE DIRFLG
	LD	A,H		; TEST FOR ZERO NOW!
	OR	L
	JR	NZ,INRDY	; FLAG 'NOT READY' IF NOT
	CALL	RESRTS		; RESET RTS
	LD	A,(RXL)		; LENGTH OF CHECKSTRING
	LD	(FLAG),A	; STORE IN REMAINING LENGTH
ISTA:	LD	A,(FLAG)	; GET REMAINING LENGTH
	OR	A		; ZERO?
	JR	Z,ISTA1		; YES - GO NORMAL
	LD	C,A		; ELSE MAKE 16 BIT
	LD	B,0	
	LD	HL,RXMSG	; ADDR OF MSG.
	XOR	A		; RESET C-FLAG
	SBC	HL,BC		; SUBTRACT
	LD	A,(RXL)
	LD	C,A		; GET LENGTH
	LD	B,0		; MAKE 16 BIT
	ADD	HL,BC		; CALCULATE LOCATION OF MSG
	CALL	ISTA1		; CHECK STATUS
	OR	A		; STATUS RDY?
	RET	Z		; RETURN IF NO
	IN	A,(DPORT)	; GET INPUT
	CP	(HL)		; SAME AS EXPECTED?
	JR	Z,LAB1		; YES - DECREMENT
	LD	A,(RXL)		; ELSE GET OLD LENGTH
	LD	(FLAG),A	; PUT IN FLAG
	JR	INRDY		; RETURN NOT RDY
LAB1:	LD	A,(FLAG)	; GET REST LENGTH
	DEC	A		; DECREMENT
	LD	(FLAG),A	; RESTORE
	JR	INRDY		; RETURN NOT RDY
ISTA1:	IN	A,(SPORT)	
	BIT	0,A
	JR	Z,INRDY
	LD	A,0FFH
	RET
INRDY:	XOR	A
	RET
;
;
FLAG:	DB	MSGEXT-RXMSG

RXL:	DB	MSGEXT-RXMSG
RXMSG:	DB	0DH,0AH
MSGEXT:	DB	'6OH'
CALEND:


INDAT:
;	RETURN THE CARACTER IN THE A REGISTER (DO NOT CHANGE THE 
;	CHARACTER IN ANY WAY!

	IN	A,(DPORT)
	RET	

OUTSTA:	;OUTPUT STATUS (A=FF IF RDY FOR CHAR, 0 IF NOT)

;	ADD A ROUTINE TO READ THE STATUS OF THE OUTPUT PORT HERE.
;	USE ANY REGISTERS YOU LIKE, AND, UPON EXIT, SET THE A REG
;	TO 0FFH IF THE DATA PORT IS READY TO SEND DATA, OR TO 0 IF
;	NOT.

	LD	HL,(DIRFLG)	; GET DIRFLG
	LD	A,H		; TEST FOR ZERO
	OR	L
	JR	NZ,OSTA		; IF NOT - CHECK STATUS
	CALL	SETRTS		; SETRTS
	LD	B,06H		; SET DELAY-VALUE
	CALL	DELAY		; DELAY
	LD	A,(TXL)
	LD	B,A
	LD	HL,TXMSG
	CALL	TXHDR
OSTA:	LD	HL,1000H	; SET DIRFLG-VALUE
	LD	(DIRFLG),HL	; RESTORE DIRFLG
	IN	A,(SPORT)
	BIT	2,A
	JR	Z,ONRDY
	LD	A,0FFH
	RET
ONRDY:	XOR	A
	RET

TXHDR:	PUSH	HL
TXH1:	CALL	OSTA
	OR	A
	JR	Z,TXH1
	POP	HL
	LD	A,(HL)
	OUT	(DPORT),A
	INC	HL
	DJNZ	TXHDR
	RET

TXL:	DB	TXMEXT-TXMSG
TXMSG:	DB	0DH,0DH,0DH,0DH,0DH,0DH,'DE OZ6OH',0DH,0AH
TXMEXT:	DS	10H,00H

OUTDAT:	;OUTPUT DATA (CHAR IN A ON ENTRY)

;	ADD A ROUTINE TO OUTPUT THE CHARACTER IN THE A REGISTER TO
;	THE DATA PORT.

	OUT	(DPORT),A
	RET	

DIRFLG:	DW	0

DIAL:	;AUTO DIAL/ANSWER SUPPORT
;
;	UPON ENTRY, B=0 FOR DIALING, 1 FOR HANGING UP,
;		   OR 2 FOR ANSWERING
;
;	IF B=0 (DIALING), HL POINTS TO THE DIALING STRING,
;			TERMINATED BY A COMMA, CR, OR CONTROL-Z
;
	LD	A,2
	CP	B
	JR	Z,ANSW
	DEC	A
	CP	B
	JR	Z,HANGUP

DIALIN:	PUSH	HL
	PUSH	HL
DIALI0:	LD	B,10H
	LD	A,(HL)
	CP	'0'
	JR	Z,DIL0
	JR	C,DIALI1
	CP	':'
	JP	C,NLET
	RES	5,(HL)
NLET:	INC	HL
	DJNZ	DIALI0
DIL0:	LD	A,TXMEXT-TXMSG
	LD	(TXL),A
	POP	HL
	POP	HL
	RET
DIALI1:	POP	BC
	XOR	A
	SBC	HL,BC
	LD	B,H
	LD	C,L
	LD	A,TXMEXT-TXMSG
	ADD	A,C
	LD	(TXL),A
	POP	HL
	LD	DE,TXMEXT
	LDIR
        CALL    ANSW
	RET


HANGUP: LD      A,TXMEXT-TXMSG
        LD      (TXL),A
	LD	DE,SRMSG
	CALL	PUTDE
	LD	A,CALEND-RXMSG
	LD	(RXL),A
	LD	(FLAG),A
	RET

ANSW:	LD	DE,GRMSG
	CALL	PUTDE
	LD	A,MSGEXT-RXMSG
	LD	(RXL),A
	LD	(FLAG),A
	RET


SETRTS:	LD	A,15H
	OUT	(SPORT),A
	LD	A,0EAH
	OUT	(SPORT),A
	RET

RESRTS:		; RELEASE RTS, AND RETURN.
	LD	A,11H
	OUT	(SPORT),A
	IN	A,(SPORT)
	BIT	0,A
	JR	Z,RESRTS
	LD	A,15H
	OUT	(SPORT),A
	LD	A,0E8H
	OUT	(SPORT),A
	RET
;
putde:	ld	c,9
	call	5
	ld	de,crlf
	ld	c,9
	jp	5
;
DELAY:	PUSH	BC
	LD	B,0
DEL1:	PUSH	BC
	LD	B,40H
DEL0:	PUSH	BC
	POP	BC
	DJNZ	DEL0
	POP	BC
	DJNZ	DEL1
	POP	BC
	DJNZ	DELAY
	RET
;
srmsg:	db	'Recieve selective.$'
grmsg:	db	'Recieve general.$'
crlf:	db	13,10,'$'
	DS	300H-$
;
	END

«eof»