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: 4347 (0x10fb) Types: TextFile Names: »SIO.DRI.S«
└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ ) └─ ⟦this⟧ »SIO.DRI.S« └─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ ) └─ ⟦this⟧ »SIO.DRI.S«
;****************************************************************************** ;* ;* SIO DRIVER MODULE ;* ;****************************************************************************** *INCLUDE CONSTANT.S EXTERNAL SYSRAM,SUBDEQ,SUBSEND EXTERNAL RECI,MESADD EXTERNAL SIOREADWRITE EXTERNAL SUBENQ,SUBREC GLOBAL TRAXST ;**************************************************************************** ;* TRAXST PROCEDURE ;**************************************************************************** TRAXST DI ;DIABLE INTERRUPT 04 XOR A ; CP (IY+21H) ;IF PREVIOUS BUFFER EMPTY JR NZ,BEGTRA ;THEN DO 10 EI ; ENABLE INTERRUPT 04 LD E,(IY+36H) ; IF ADDRESS ELEMENT CONTAIN 19 LD D,(IY+37H) ; BUFFER ADDRESS 19 LD A,E ; 04 OR D ; 04 JR Z,BEGTRA ; THEN DO 10 LD L,(IY+32H) ; TRANSFER BUFFER TO 19 LD H,(IY+33H) ; 19 DI ; RETRANSMISSION QUEUE 04 CALL SUBSEND ; EI ; 04 LD (IY+36H),00H ; RESET ADDRESS ELEMENT 19 LD (IY+37H),00H ; END 19 BEGTRA DI ;END 04 LD L,(IY+30H) ; IF ELEMENT IN TRANSMITTER QUEUE 19 LD H,(IY+31H) ; 19 LD A,(HL) ; 07 CP 01H ; 07 JR NZ,RECXST ; THEN DO 10 PUSH HL ; SAVE QUEU ADDRESS LD BC,1110010100001000B ; ENABLE TX_INTERRUPT CALL SIOREADWRITE ; SIOCON 5,W,S,08H LD A,01 LD (IY+21H),A ; SET NEW1BUF = 01H 19 LD A,SYN ; LD C,(IY+1CH) ; GET SIO ADDRESS 19 OUT (C),A ; TRANSMIT SYNC CHARACTER LD (IY+1EH),0EH ; NEXT INT.ROUTINE = PREXSTA POP HL ; RESTORE QUEU ADDRESS LD (SYSRAM+0E2H),HL; GET NEW BUFFER ELEMENT 10 PUSH IY ; SAVE TABLE ADDRESS 15 CALL RECI ; FROM TRANSMITTER QUEUE CALL MESADD ; POP IY ; RESTORE TABLE ADDRESS 14 LD HL,BCOFF ; CALCULATE BYTECOUNT ADD HL,DE ; ADDRESS 11 LD C,(HL) ; GET BYTE COUNT 07 INC HL ; 06 LD B,(HL) ; 07 LD (IY+14H),C ; SAVE BYTE COUNT IN 19 LD (IY+15H),B ; CURRENT BYTE COUNT WORD 19 LD HL,TSAOFF ; CALCULATE TRANSMITTER ADD HL,DE ; START ADDRESS 11 LD C,(HL) ; GET TRANSMITTER ADDRESS 07 INC HL ; 06 LD B,(HL) ; 07 LD (IY+12H),C ; SAVE TRANSMITTER START 19 LD (IY+13H),B ; ADDRESS 19 LD (IY+36H),E ; SAVE ELEMENT ADDRESS 19 LD (IY+37H),D ; 19 CONTRA LD A,02H ; SET PREVIOUS BUFFER 07 LD (IY+21H),A ; FULL 19 DEC A ; RESET TX-UNDERRUN 04 LD (IY+20H),A ; STATUS 07 ; RECXST EI ; 04 LD L,(IY+28H) ;IF BUFFER IN RECEIVE QUEUE 19 LD H,(IY+29H) ; 19 DI ; 04 CALL SUBDEQ ; 130 EI ; 04 JR NC,SCH1DUL ;THEN DO 10 LD L,(IY+34H) ; 19 LD H,(IY+35H) ; 19 DI ; SEND BUFFER TO RECEIVER SEMA 04 ; PHORE QUEUE, SAVE TABLE ADDRESS 15 CALL SUBSEND ; EI SCH1DUL RET ;ECHO \f ;****************************************************************************** ;* TXTERM PROCEDURE ;****************************************************************************** GLOBAL TXTERM TXTERM DI LD E,(IY+36H) ;IF TRANSMISSION IN PROGRESS LD D,(IY+37H) ; LD A,E OR D JR Z,NO_TERMINATION ;THEN DO LD L,(IY+08H) ; GET ADDRESS OF EMPTY QUEU LD H,(IY+09H) CALL SUBENQ ; TRANSFER BUFFER TO EMPTY ; BUFFER QUEU LD (IY+36H),00 ; RESET CONTENT OF ELEMENT LD (IY+37H),00 ; ADDRESS LD (IY+21H),00 ; RESET BUFFER CONTROL ;END LD (IY+1EH),0AH ;NEXT INT.ROUTINE = PSEXTRA NO_TERMINATION EI RET ;RETURN FROM PROCESS ;ECHO \f ;***************************************************************************** ;* RXTERM PROCEDURE ;***************************************************************************** GLOBAL RXTERM RXTERM DI ;DISABLE INTERRUPT LD E,(IY+2AH) ;IF RECEIVING IN PROGRESS LD D,(IY+2BH) ; LD A,D ; OR E ; JR Z,RXT1 ; THEN DO LD L,(IY+08H) ; GET ADDRESS OF EMPTY QUEUE LD H,(IY+09H) ; CALL SUBENQ ; TRANSFER BUFFER TO EMPTY QUEUE LD (IY+2AH),00H ; RESET CONTENT OF LD (IY+2BH),00H ; ELEMENT ADDRESS RXT1 LD L,(IY+28H) ;IF BUFFER IN RECEIVE QUEUE LD H,(IY+29H) ; TRANSFER BUFFER TO CALL SUBDEQ ; EMPTY QUEUE JR NC,RXT2 ; LD L,(IY+08H) ; LD H,(IY+09H) ; CALL SUBENQ ; JR RXT1 ; RXT2 LD L,(IY+34H) ;IF BUFFER IN SIO OUTPUT QUEUE LD H,(IY+35H) ; TRANSFER BUFFER TO LD E,(IY+08H) ; LD D,(IY+09H) ; CALL SUBREC ; EMPTY QUEUE RXT3 EI ;ENABLE INTERRUPT RET ;RETURN (END) 10 ;ECHO \f