|
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: 4888 (0x1318) Types: TextFile Names: »TXDRIVER.S«
└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ ) └─ ⟦this⟧ »TXDRIVER.S« └─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ ) └─ ⟦this⟧ »TXDRIVER.S«
;*************************************************************************** ;* ;* TRANSMITTER MODULE ;* ;*************************************************************************** *INCLUDE CONSTANT.S GLOBAL TRAROU GLOBAL START_TRANSMISSION GLOBAL XMIT_LOOP GLOBAL END_TRANSMISSION GLOBAL TRA_END GLOBAL TRA_SYN GLOBAL SYNC_TRANSMISSION GLOBAL PSEUDO_TRANSMITTER GLOBAL PRE_START EXTERNAL SIOREADWRITE TRAROU LD HL,TRATAB LD C,(IY+1EH) LD B,0 ADD HL,BC LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) TRATAB DEFW START_TRANSMISSION DEFW XMIT_LOOP DEFW TRA_END DEFW END_TRANSMISSION DEFW TRA_SYN DEFW PSEUDO_TRANSMITTER DEFW SYNC_TRANSMISSION DEFW PRE_START ;ECHO \f START_TRANSMISSION LD (IY+18H),01H ; 19 LD L,(IY+12H) ;GET POINTER TO FIRST CHARACTER 19 LD H,(IY+13H) ; 19 LD A,(HL) ;GET CHARACTER 07 CP SOH ;IF FIRST CHARACTER = SOH OR STX 19 JR Z,CRC_ENABLE ; 10 CP STX ; 19 JR NZ,CRC_DISABLE ;THEN DO 10 CRC_ENABLE LD L,(IY+14H) ; LD H,(IY+15H) ; DEC HL ; DECREMENT CURRENT BYTE COUNT LD (IY+14H),L ; LD (IY+15H),H ; INC (IY+12H) ; JR NZ,CRC2 ; INCREMENT BUFFER POINTER INC (IY+13H) ; CRC2 LD C,(IY+1CH) ; 19 OUT (C),A ; TRANSMIT FIRST CHARACTER 12 LD (IY+16H),00H ; RESET CHECKSUM CALCULATOR 19 LD (IY+1EH),02H ; NEXT INT.ROUTINE = CONXTRA RET ; CRC_DISABLE ;ELSE DO ;END ;************************************************************************* XMIT_LOOP LD L,(IY+12H) ;GET POINTER TO NEXT CHARACTER LD H,(IY+13H) ; LD A,(HL) ;GET NEXT CHARACTER LD C,(IY+1CH) ; OUT (C),A ;TRANSMIT NEXT CHARACTER XOR (IY+16H) ; LD (IY+16H),A ;SAVE NEW CHECKSUM ; LD E,(IY+14H) ;GET CURRENT BYTE COUNT LD D,(IY+15H) ; DEC DE ; LD A,E ; OR D ;IF LAST CHARACTER JR NZ,TRACOUNT ;THEN DO LD (IY+18H),0 ; STOP TIMER LD (IY+19H),0 ; RESET TIME VALUE LD (IY+1AH),0 ; RESET TIME OUT INDICATION LD A,(HL) ; GET CHARACTER CP ETB ; IF NOT ETX OR ETB TRANSMITTED 19 JR Z,ENABLE_CRC ; 10 CP ETX ; 19 JR Z,ENABLE_CRC ; THEN DO 10 DISABLE_CRC LD (IY+1EH),04H ; NEXT INT.ROUTINE = TRAXEND RET ; ; ELSE DO ENABLE_CRC LD (IY+1EH),06H ; NEXT INT.ROUTINE = ENDXTRA LD (IY+20H),00H ; RESET TX-UNDERRUN 19 RET ; ; END TRACOUN LD (IY+14H),E ;DECREMENT AND SAVE CURRENT BYTE COUNT 19 LD (IY+15H),D ; 19 INC HL ;INCREMENT BUFFER POINTER LD (IY+12H),L ;SAVE BUFFER POINTER LD (IY+13H),H ; 19 LD A,(IY+1AH) ;IF TIMEOUT INDICATOR = 01H 19 CP 01H ; 07 RET NZ ;THEN DO LD (IY+1EH),08H ; NEXT INT.ROUTINE = TRAXSYN XOR A ; RESET TIMEOUT INDICATOR 04 LD (IY+1AH),A ; 19 LD (IY+19H),A ; RESET TIMEOUT VALUE 19 ; END RET ; ;ECHO \f ;*************************************************************************** END_TRANSMISSION LD (IY+1EH),04H ;NEXT INT.ROUTINE = TRAXEND LD A,(IY+16H) ;GET ACCUMULATED CHECKSUM 19 LD C,(IY+1CH) ; 19 OUT (C),A ;TRANSMIT CHECKSUM 12 RET ; ;****************************************************************************** TRA_END LD BC,1010010100000001B ;RESET TX_CRC_ENABLE CALL SIOREADWRITE ; SIOCON 5,W,R,01H LD BC,0110000000101000B ;RESET TX_INTERRUPT_PENDING CALL SIOREADWRITE ; SIOCON 0,W,S,028H LD (IY+1EH),0AH ;NEXT INT.ROUTINE = PSEXTRA LD (IY+21H),00H ;(SEE TRASTA) 19 LD BC,1010010100001000B ;DISABLE TX_INTERRUPT CALL SIOREADWRITE ;SIOCON 5,W,R,08H RET ;RETURN FROM GENERAL PROCESS 14 ;***************************************************************************** TRA_SYN LD BC,1010010100000001B ;RESET TX_CRC_ENABLE CALL SIOREADWRITE ; SIOCON 5,W,R,01H LD A,SYN ; TRANSMIT FIRST SYNC CHAR LD C,(IY+1CH) ; 19 OUT (C),A ; 12 LD (IY+1EH),0CH ;NEXT INT.ROUTINE = SYNXTRA RET ;RETURN FROM GENERAL PROCESS 14 ;****************************************************************************** SYNC_TRANSMISSION LD A,SYN ;TRANSMIT SECOND SYNC CHARACTER 19 LD C,(IY+1CH) ; 19 OUT (C),A ;CHARACTER 12 LD (IY+1EH),02H ;NEXT INT.ROUTINE = CONXTRA RET ;RETURN FROM GENERAL PROCESS 14 ;***************************************************************************** PSEUDO_TRANSMITTER LD BC,0110000000101000B ;RESET TX_INTERRUPT_PENDING CALL SIOREADWRITE ; SIOCON 0,W,S,028H RET ; RETURN ; END ;***************************************************************************** PRE_START LD A,SYN ;TRANSMIT SYNC CHARACTER 19 LD C,(IY+1CH) ; 19 OUT (C),A ; 11 LD A,(IY+21H) ;IF NEW1BUF >= 02H 19 CP 02H ; 07 RET M ;THEN DO 10 CP 05H ; IF MINIMUM 4 SYNC CHARACTERS 07 JP M,NO1EXC ; TRANSMITTED 10 ; THEN DO LD (IY+1EH),00H ; NEXT INT.ROUTINE = STAXTRA RET ; RETURN FROM PROCESS 10 ; END NO1EXC INC A ; INCREMENT NUMBER OF TRANSMITTED 04 LD (IY+21H),A ; SYNC CHARACTERS 19 RET ; END ;ECHO \f