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

⟦b1bcbc507⟧ TextFile

    Length: 6872 (0x1ad8)
    Types: TextFile
    Names: »LINE.ACCESS.ASM«

Derivation

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

TextFile

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


INTERNAL
	INIT_TIMER PROCEDURE
		ENTRY
	
		LD	L,(IY+TIMER)
		LD	H,(IY+TIMER+1)
		DI
		LD	(HL),C
		INC	HL
		LD	(HL),B
		EI
	END INIT_TIMER
;
	TEST_TIMER PROCEDURE
		ENTRY
		LD	L,(IY+TIMER)
		LD	H,(IY+TIMER+1)
		DI
		LD	A,(HL)
		INC	HL
		OR	(HL)
		EI
	END TEST_TIMER
	
	WAIT PROCEDURE
	ENTRY
		PUSH	IY
		PUSH	IX
		CALL SRELEASE
		POP	IX
		POP	IY
	END WAIT
;
	MIRPORT	PROCEDURE
	ENTRY
		LD L,(IY+MIRROR)
		LD H,(IY+MIRROR+1)
		LD DE,5
		ADD HL,DE
	END MIRPORT
 
	DUMMY	PROCEDURE
		ENTRY
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
 
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
		ENTRY
		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
;ECHO \f


;****************************************************************************
;* PROCEDURE	: TRANSMIT
;*
;* FUNCTION	 : DUMMY ROUTINE
;*****************************************************************************
	TRANSMIT PROCEDURE
		ENTRY
		PLZVAR
		PLZIN	CHAB_NO
		ENT	0
	     	RTN 1
	END TRANSMIT
 
;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
		ENTRY
		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
;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
		ENTRY
		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
;ECHO \f


	SELECT	PROCEDURE
		ENTRY
		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
;
	SHASEL PROCEDURE
		ENTRY
		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
;ECHO \f


;*****************************************************************************
;* PROCEDURE	: RECEIVE
;*
;* FUNCTION	: REQUEST TO SEND (RTS) IS SET
;*
;* INPUTS	: CH_NO : NO.OF CHANNEL
;*
;* OUTPUTS	: NONE
;*****************************************************************************
	RECEIVE PROCEDURE
		ENTRY
		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
 
END LINE_ACCESS
;ECHO \f