DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 6872 (0x1ad8) Types: TextFile Names: »LINE.ACCESS.ASM«
└─⟦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«
;****************************************************************************** ;* ;* 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