DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

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

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦f37098637⟧ TextFile

    Length: 7692 (0x1e0c)
    Types: TextFile
    Names: »LINE.ACCESS.S«

Derivation

└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ )
    └─ ⟦this⟧ »LINE.ACCESS.S« 
└─⟦cf416a62a⟧ Bits:30005201 8" Zilog MCZ/1 Floppy CR80FD_0027 ( TC 500 SEC. PROTOCOL BACK UP! (V2) BB SEC 821119 NCJ )
    └─ ⟦this⟧ »LINE.ACCESS.S« 

TextFile

;;******************************************************************************
;;*
;;*		LINE_ACCESS  MODULE
;;*
;;******************************************************************************
;LINE_ACCESS MODULE
*INCLUDE PLZ.MACROS
;EXTERNAL
;		LAT1CH,LAT2CH,LAT3CH,LAT4CH
;EXTERNAL
	EXTERNAL LAT4CH,LAT3CH,LAT2CH,LAT1CH
;		SIO1CH,SIO2CH,SIO3CH,SIO4CH
;EXTERNAL
	EXTERNAL SIO4CH,SIO3CH,SIO2CH,SIO1CH
;		SRELEASE
;		I8253
;;
;CONSTANT
	EXTERNAL I8253,SRELEASE
;		LASA	:=  0H				;LINEUP
LASA	EQU	0H
;		LASB	:=  1H				;LINEDO
LASB	EQU	1H
;		LASC	:=  2H				;TRANSMIT
LASC	EQU	2H
;		LASE	:=  5H				;MODEM1_ERROR
LASE	EQU	5H
;		LASF	:=  4H				;MODEM2_ERROR
LASF	EQU	4H
;		LATKON	:=0FFH 				;TIMER CONSTANT
LATKON	EQU	0FFH
;		PIO2A	:= 20H				;ADDRESS ON PIO
PIO2A	EQU	20H
;		PIO2B	:= 21H
PIO2B	EQU	21H
;		PIO2C	:= 22H
PIO2C	EQU	22H
;		SIOCHA	:= 53H				;ADDRESS ON SIO
SIOCHA	EQU	53H
;		SIOCHB	:= 52H
SIOCHB	EQU	52H
;		SIOCHC	:= 43H
SIOCHC	EQU	43H
;		SIOCHD	:= 42H
SIOCHD	EQU	42H
;		TIMER	:=  0H				;CONFIGURATION
TIMER	EQU	0H
;		MIRROR	:=  2H
MIRROR	EQU	2H
;		CHA	:=  4H
CHA	EQU	4H
;		DIAL_UP_MODE := 0FFH
DIAL_UP_MODE	EQU	0FFH
;		DELAY   := 120				; 120 UNITS OF 12,5 MS =1,5 SEK
DELAY	EQU	120
;		DIALUP	:= 11H
DIALUP	EQU	11H
;		DIRECT	:= 22H
DIRECT	EQU	22H
;;
;;ECHO \f


;INTERNAL
;	INIT_TIMER PROCEDURE
;		ENTRY
INIT_TIMER:
;	
		LD	L,(IY+TIMER)
		LD	H,(IY+TIMER+1)
		DI
		LD	(HL),C
		INC	HL
		LD	(HL),B
		EI
;	END INIT_TIMER
	RET
;;
;	TEST_TIMER PROCEDURE
;		ENTRY
TEST_TIMER:
		LD	L,(IY+TIMER)
		LD	H,(IY+TIMER+1)
		DI
		LD	A,(HL)
		INC	HL
		OR	(HL)
		EI
;	END TEST_TIMER
	RET
;	
;	WAIT PROCEDURE
;	ENTRY
WAIT:
		PUSH	IY
		PUSH	IX
		CALL SRELEASE
		POP	IX
		POP	IY
;	END WAIT
	RET
;;
;	MIRPORT	PROCEDURE
;	ENTRY
MIRPORT:
		LD L,(IY+MIRROR)
		LD H,(IY+MIRROR+1)
		LD DE,5
		ADD HL,DE
;	END MIRPORT
	RET
; 
;	DUMMY	PROCEDURE
;		ENTRY
DUMMY:
CH1:
		DEFW	LAT1CH
		DEFW	SIO1CH
		DEFW	SIOCHA
;;
CH2:
		DEFW	LAT2CH
		DEFW	SIO2CH
		DEFW	SIOCHB
;;
CH3:
		DEFW	LAT3CH
		DEFW	SIO3CH
		DEFW	SIOCHC
;;
CH4:
		DEFW	LAT4CH
		DEFW	SIO4CH
		DEFW	SIOCHD
; 
;;--------------------------------
TABMEM:
		DEFW	CH1
		DEFB	40H
		DEFB	80H
; 
		DEFW	CH2
		DEFB	10H
		DEFB	20H
; 
		DEFW	CH3
		DEFB	04H
		DEFB	08H
; 
		DEFW	CH4
		DEFB	01H
		DEFB	02H
; 
;;----------------------------
SHATAB:
		DEFW	400FH
		DEFW	401FH
		DEFW	402FH
		DEFW	403FH
; 
;;----------------------------
CHATAB:
		DEFB	02
		DEFB	01
		DEFB	02
		DEFB	00
		DEFB	01
		DEFB	01
		DEFB	01
		DEFB	00
; 
;	END DUMMY
	RET
; 
;GLOBAL
;;ECHO \f


;;*****************************************************************************
;;* PROCEDURE	: LINEUP
;;*
;;* FUNCTION	: SETS DATA TERMINAL READY (DTR) AND WAITS FOR DATA SET READY
;;*		  (DSR) TO BE SET
;;*
;;* INPUTS	: CH_NO  : NO.OF CHANNEL
;;*
;;* OUTPUTS	: STATUS : STATUS OF OPERATION
;;*			STATUS = 0 : DSR IS SET (LINE IS UP)
;;*			STATUS = 1 : DSR IS RESET (LINE IS DOWN)
;;******************************************************************************
;	LINEUP PROCEDURE
	GLOBAL LINEUP
;		ENTRY
LINEUP:
		PLZVAR
		PLZIN	CHAA_NO
		PLZOUT	STA1
		ENT 0
		GETBYTE C, CHAA_NO
		CALL	SELECT
		LD	BC,LATKON				
		CALL INIT_TIMER
; 
LIN0:
	CALL TEST_TIMER			;DO
		JR Z,LIN3			;  IF NO TIMEOUT THEN
		  LD H,0			;
		  GETBYTE L,CHAA_NO		;    GET CH.NO.
		  ADD HL,HL			;
		  ADD HL,HL			;    4 * CH.NO.
		  LD DE,TABMEM-2		;
		  ADD HL,DE			;    ADDRESS OF CH.MASK
		  LD C,PIO2B			;
		  IN A,(C)			;    GET STATUS OF DSR
		  AND (HL)			;
		  LD C,A			;
		  DI				;
		  CALL MIRPORT			;
		  LD E,C			;    SAVE STATUS OF DSR
		  LD A,(HL)			;
		  BIT 7,A			;
		  JR NZ,LIN1			;    IF DTR MIRROR IS NOT SET THEN
		    SET 7,A			;      SET DTR MIRROR
		    LD (HL),A			;
		    LD C,(IY+CHA)		;
		    LD B,5			;
		    OUT (C),B			;
		    OUT (C),A			;      SET DTR
		    EI				;
		    LD BC,LATKON		;
		    CALL INIT_TIMER		;      INITIATE TIMER
		    CALL WAIT			;      SCHEDULE
		  JR LIN4			;    ELSE
LIN1:
	    EI				;
		    LD A,E			;      GET STATUS OF DSR
		    AND A			;
		    JR NZ,LIN2			;      IF DSR IS SET THEN
		    LD B,LASA			;        STATUS := LINEUP
		    PUTBYTE STA1,B		;
		    JR LIN5			;        EXIT
;						;      ELSE
LIN2:
	    CALL WAIT			;        SCHEDULE
		  JR LIN4			;      FI
;						;    FI
;						;  ELSE
LIN3:
;	    				;
		  LD B,LASB			;    STATUS := LINEDO
		  PUTBYTE STA1,B		;
		  JR LIN5			;    EXIT
;						;  FI
LIN4:
	JR LIN0				;OD
; 
LIN5:
	RTN 1
; 
;	END LINEUP
	RET
;;ECHO \f


;;****************************************************************************
;;* PROCEDURE	: TRANSMIT
;;*
;;* FUNCTION	 : DUMMY ROUTINE
;;*****************************************************************************
;	TRANSMIT PROCEDURE
	GLOBAL TRANSMIT
;		ENTRY
TRANSMIT:
		PLZVAR
		PLZIN	CHAB_NO
		ENT	0
	     	RTN 1
;	END TRANSMIT
	RET
; 
;;ECHO \f


;;******************************************************************************
;;* PROCEDURE	: LINEDO
;;*
;;* FUNCTION	: RESETS REQUEST TO SEND (RTS) AND DATA TERMINAL READY (DTR)
;;*
;;* INPUTS	: CH_NO : NO.OF CHANNEL
;;*
;;* OUTPUTS	: NONE
;;******************************************************************************
;	LINEDO PROCEDURE
	GLOBAL LINEDO
;		ENTRY
LINEDO:
		PLZVAR
		PLZIN	CHAD_NO
		ENT	0
		GETBYTE C, CHAD_NO
		CALL	SELECT
		LD	C,(IY+CHA)
		CALL MIRPORT
		DI
		LD A,(HL)
		RES 1,A			;RESET RTS MIRROR
		RES 7,A			;RESET DTR MIRROR
		LD (HL),A
		LD B,05H
		OUT (C),B
		OUT (C),A		;RESET RTS AND DTR
		EI
		RTN 1
;	END LINEDO
	RET
;;ECHO \f


;;******************************************************************************
;;* PROCEDURE	: CHANGE
;;*
;;* FUNCTION	: MODEM IS SWITCHED TO THE SPECIFIED BAUD RATE
;;*
;;* INPUTS	: CH_NO : NO.OF CHANNEL
;;*		  RANGE : BAUD RATE SPECIFICATION
;;*
;;* OUTPUTS	: NONE
;;***************************************************************************
;	 CHANGE PROCEDURE
	GLOBAL CHANGE
;		ENTRY
CHANGE:
		PLZVAR
		PLZIN	CHAF_NO RANGE
		ENT 0
		GETBYTE C,CHAF_NO
		CALL SHASEL
		CP DIRECT
		JR Z,CHADIR		;IF NOT DIRECT CONNECTION THEN
		LD H,0			;
		LD L,C			;  GET CH.NO.
		ADD HL,HL		;
		ADD HL,HL		;  4 * CH.NO.
		LD DE,TABMEM-2		;
		ADD HL,DE		;  ADDRESS OF CH.MASK
		LD A,(HL)		;  GET MASK
		GETBYTE D,RANGE		;
		LD C,PIO2A		;
		IN B,(C)		;
		BIT 0,D			;
		JR Z,CHAN0		;
		OR B			;
		JR CHAN1		;
CHAN0:
	CPL			;
		AND B			;
CHAN1:
	OUT (C),A		;
		JR CHAEND		;ELSE
CHADIR:
	LD H,0			;
		LD L,C			;  GET CH.NO.
		ADD HL,HL		;  2 * CH.NO.
		LD DE,CHATAB-2		;
		ADD HL,DE		;
		LD E,(HL)		;
		INC HL			;
		LD C,(HL)		;
		LD D,0			;
		LD B,0			;
		PUSH DE			;
		GETBYTE	E,RANGE		;  GET BAUD RATE CODE
		POP IX			;
		CALL I8253		;  MAKE BAUD RATE CHANGE
;					;FI
CHAEND:
	RTN 2
; 
;	END CHANGE
	RET
;;ECHO \f


;	SELECT	PROCEDURE
	GLOBAL SELECT
;		ENTRY
SELECT:
		LD H,0
		LD L,C			;GET CHNO.
		ADD HL,HL
		ADD HL,HL		;4 * CH.NO.
		LD DE,TABMEM-4
		ADD HL,DE
		LD E,(HL)
		INC HL
		LD D,(HL)		;GET ADDRESS OF TABLE
		PUSH DE
		POP IY
		RET
;	END SELECT
	RET
;;
;	SHASEL PROCEDURE
	GLOBAL SHASEL
;		ENTRY
SHASEL:
		LD H,0
		LD L,C
		ADD HL,HL
		LD DE,SHATAB-2
		ADD HL,DE
		LD E,(HL)
		INC HL
		LD D,(HL)
		LD A,(DE)
		RET
;	END SHASEL
	RET
;;ECHO \f


;;*****************************************************************************
;;* PROCEDURE	: RECEIVE
;;*
;;* FUNCTION	: REQUEST TO SEND (RTS) IS SET
;;*
;;* INPUTS	: CH_NO : NO.OF CHANNEL
;;*
;;* OUTPUTS	: NONE
;;*****************************************************************************
;	RECEIVE PROCEDURE
	GLOBAL RECEIVE
;		ENTRY
RECEIVE:
		PLZVAR
		PLZIN	CHAC_NO
		ENT 0
		GETBYTE C, CHAC_NO
		CALL	SELECT		;
		DI			;
		CALL MIRPORT		;
		LD	A,(HL)		;
		SET 1,A			;  SET RTS MIRROR
		LD (HL),A		;
		LD	C,(IY+CHA)	;
		LD	B,05H		;
		OUT (C),B		;
		OUT (C),A		;  SET RTS
		EI			;
	       	RTN 1
;	END RECEIVE
	RET
; 
;END LINE_ACCESS
	END
«eof»