
; I2NS-4.ASM - BYE5 insert for North Star Horizon or Advantage  10/12/85
;
;			 Uses 8251 I/O
;
;		Note:  This is an insert, not an overlay
;  This version is for the North Star Horizon and Advantage computers.
;
; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
;
; 10/10/85  Written for use with BYE5.  Excerpts from I2NA-1, I2NS-2 and
;	    work done by Don Appleby.		- Irv Hoff
;					
; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
;
;-----------------------------------------------------------------------
;
; Equates
;
NO	EQU	0
YES	EQU	NOT NO
;
;
HORIZON	EQU	yes		; Yes for North Star Horizon
ADVANTG	EQU	no		; Yes for North Star Advantage
;
; (Be sure clock header in locaton 3A is configured with pins connected
; 1-2, 3-4, 5-6, 7-10, 8-9, 11-12, 13-14 & 15-16 and remove header at
; location 1A on the selected SIO board for terminal configuraton if
; ADVANTG is YES.)
;
;-----------------------------------------------------------------------
;
;
; Baud rate port equates for NorthStar HSIO-4 board
;
	 IF	HORIZON
PORT	EQU	012H		; Here are the HSIO-4
MDCTL1	EQU	PORT+1		; Control port
BDPORT	EQU	010H		; Baudrate port
;
;
; Baudrates for North Star Horizon with HSIO-4 serial board
;
BD300	EQU	6		; 300 bps setting
BD1200	EQU	4		; 1200 bps setting
BD2400	EQU	3		; 2400 bps setting
BD9600	EQU	1		; 9600 bps setting
BD19200	EQU	0		; 19200 bps setting
	 ENDIF			; HORIZON
;
;
; Baud rate port equates for NorthStar Advantage SIO boards
;
	 IF	ADVANTG
PORT	EQU	60H0(10H*SLOT)	; Modem data port
MDCTL1	EQU	PORT+1		; Modem control port
BDPORT	EQU	PORT+8		; Modem baudrate port
;
;
; Baudrates for North Star Advantage
;
BD300	EQU	040H		; 300 bps setting
BD1200	EQU	070H		; 1200 bps setting
BD2400	EQU	078H		; 2400 bps setting
BD9600	EQU	07EH		; 9600 bps setting
BD19200	EQU	07FH		; 19200 bps setting
	 ENDIF			; ADVANTG
;
;
MDRCV	EQU	02H		; Modem receive ready bit
MDSND	EQU	01H		; Modem send ready bit
RESET	EQU	38H		; Framing, overrun and parity errors
;
MDCOM	EQU	37H		; RTS, reset flags, RCV, TX, set DTR
MDMODE	EQU	82H		; Insures 8251 is out of mode, DTR
MDRSET	EQU	42H		; Resets USART for additional commands
MDSET1	EQU	4EH		; 1 stop bit, no parity, 8 bits, x16
;
;-----------------------------------------------------------------------
;
; See if we still have a carrier - if not, return with the zero flag set
;
MDCARCK:IN	MDCTL1		; Get status
	ANI	80H		; Check if carrier is on
	RET
;.....
;
;
; Disconnect and wait for an incoming call
;
MDINIT:	MVI	A,10H		; Clear DTR
	OUT	MDCTL1		; To insure phone is disconnected
	PUSH	B		; Preserve in case we need it
	MVI	B,20		; 2 seconds to drop DTR
;
OFFTI:	CALL	DELAY		; 0.1 second delay
	DCR	B
	JNZ	OFFTI		; Keep waiting until 2 seconds is up
;
	POP	B		; Restore the 'BC' register values
	MVI	A,MDMODE	; Insure 8251 is out of mode, DTR on
	OUT	MDCTL1
	XTHL			; Small delay to complete command
	XTHL
	MVI	A,MDRSET	; Reset the 8251 for new command
	OUT	MDCTL1
	XTHL
	XTHL
	MVI	A,MDSET1	; Set stop pulse, no parity, 8 bits, x16
	OUT	MDCTL1
	XTHL			; Small delay to complete command
	XTHL
	MVI	A,MDCOM		; Error reset, RCV, DTR, TX ready
	OUT	MDCTL1
	XTHL			; Small delay to complete command
	XTHL
;
	 IF	IMODEM
	CALL	IMINIT		; Initialize modem
	 ENDIF			; IMODEM
;
	RET
;.....
;
;
; Input a character from the modem port
;
MDINP:	IN	PORT		; Get character
	RET
;.....
;
;
; Check the status to see if a character is available.  If not, return
; with the zero flag set.  If yes, use 0FFH to clear the flag.
;
MDINST:	IN	MDCTL1		; Get status
	ANI	MDRCV		; Got a character?
	RZ			; Return if none
;
	IN	MDCTL1		; Get status again
	ANI	RESET		; Check for framing and overrun
	JZ	MDINST1		; No errors
	MVI	A,17H		; Reset error flags
	OUT	MDCTL1
	XRA	A		; Return false
	RET
;...
;
;
MDINST1:ORI	0FFH		; We have a character
	RET
;.....
;
;
; Send a character to the modem
;
MDOUTP:	OUT	PORT		; Send it
	RET
;.....
;
;
; Send a character to the modem
;
MDOUTST:IN	MDCTL1
	ANI	MDSND
	RET
;.....
;
;
; Reinitialize the modem and hang up the phone by dropping DTR and
; leaving it inactive.
;
MDQUIT:	 IF	IMODEM
	CALL	IMQUIT
	 ENDIF			; IMODEM
;
;
; Called by the main program after caller types BYE
;
MDSTOP:	MVI	A,10H		; DTR low hangs up phone, keep DTR low
	OUT	MDCTL1		;   so will not auto-answer at any time
	RET
;.....
;
;
; The following routine sets the baudrate.  BYE5 asks for the maximum
; speed you have available.
;
SETINV:	MVI	A,0FFH
	ORA	A		; Make sure the zero flag isn't set	
	RET
;.....
;
;
SET300:	MVI	A,BD300		; Setup for 300 bps
	JMP	LOADBD
;.....
;
;
SET1200:MVI	A,BD1200	; Setup for 1200 bps
	JMP	LOADBD
;.....
;
;
SET2400:MVI	A,BD2400	; Setup for 2400 bps
;

LOADBD:	OUT	BDPORT
	XTHL
	XTHL
	MVI	A,MDCOM		; Reset RTS, flags, DTR, enable R/T
	OUT	MDCTL1
	XTHL			; Small delay to complete command	
	XTHL
	IN	PORT		; Clear decks for action
	IN	PORT
	XRA	A		; Show baudrate change was successful
	RET
;.....
;
;			       end
;-----------------------------------------------------------------------