|
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: 3594 (0xe0a) Types: TextFile Names: »TSIO.S«
└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 ) └─ ⟦this⟧ »TSIO.S«
*INCLUDE CONST.S GLOBAL T1SIO,T1TXRX,TSIO1,TSIO2 EXTERNAL DETECT TSIO1 IN A,(APIO1+1) AND 11111110B ;SET LOOP1 OUT (APIO1+1),A LD HL,6 LD C,ATIM1 ;SET CLOCK 1,2 = 333 KHZ OUT (C),L OUT (C),H LD C,ATIM1+1 OUT (C),L OUT (C),H LD C,ASIO1 LD HL,RAMSTA CALL T1SIO ;DO SIO1 TEST AND A ;RETURN IF NO ERROR RET Z LD C,ASIO1 ADD A,C ;LOAD ERROR CODE CALL DETECT ;JUMP TO ERROR ROUTINE RET TSIO2 IN A,(APIO1+1) AND 11111101B ;SET LOOP2 OUT (APIO1+1),A LD HL,6 LD C,ATIM2 ;SET CLOCK 1,2 = 333 KHZ OUT (C),L OUT (C),H LD C,ATIM2+1 OUT (C),L OUT (C),H LD C,ASIO2 LD HL,RAMSTA CALL T1SIO ;DO SIO2 TEST AND A ;RETURN IF NO ERROR RET Z LD C,ASIO2 ADD A,C ;LOAD ERROR CODE CALL DETECT ;JUMP TO ERROR ROUTINE RET T1SIO PUSH HL LD E,C ;SAVE SIO BASE ADDRESS INC C INC C LD A,18H OUT (C),A ;RESET CHANNEL A INC C OUT (C),A ;RESET CHANNEL B LD B,4 LD H,80H ;FOR BIT 7 TO 4 S1LOOP LD A,2 OUT (C),A ; LOAD INTERRUPT VECTOR OUT (C),H OUT (C),A IN A,(C) ; READ INTERRUPT VECTOR XOR H AND 0F0H JR NZ,S1ERROR ; JUMP IF I/O ERROR RRC H DJNZ S1LOOP ;NEXT BIT LD C,E ;RESTORE SIO BASE ADDRESS INC C INC C ;DO CHANNEL A TRANSMISSIONS TEST CALL T1TXRX AND A JR NZ,S2ERROR ;RETURN ON CHANNEL A ERROR INC C CALL T1TXRX ;DO CHANNEL B TRANSMISSIONS TEST AND A JR Z,T1NEXT LD B,4 ADD A,B ;RETURN ON CHANNEL B ERROR JR S2ERROR T1NEXT POP HL LD A,H LD I,A LD A,2 OUT (C),A OUT (C),L ;LOAD INTERRUPT VECTOR LD DE,4 ADD HL,DE LD DE,RXINT LD (HL),E ;LOAD RX INTERRUPT ROUTINE ADDRESS INC HL LD (HL),D LD A,1 OUT (C),A LD A,00011100B ;ENABLE RX INTERRUPT OUT (C),A DEC C DEC C LD A,55H OUT (C),A ;TRANSMIT CHARACTER XOR A EI LD B,0 TWAIT1 DJNZ TWAIT1 LD B,50 ;WAIT 1 MILLI SEC. TWAIT2 DJNZ TWAIT2 DI INC C LD L,18H OUT (C),L ;RESET CHANNEL A INC C OUT (C),L ;RESET CHANNEL B CP 55H JR NZ,S3ERROR XOR A RET ;RETURN ON TEST COMPLETED S1ERROR LD A,1 ;RETURN ON I/O ERROR S2ERROR POP HL RET S3ERROR LD A,2 ;RETURN ON INTERRUPT ERROR RET ;----------------------------------------------------------------------------- RXINT IN A,(C) ;GET RECEIVED CHARACTER EI RETI ;----------------------------------------------------------------------------- T1TXRX LD A,18H OUT (C),A ;RESET CHANNEL LD L,4 OUT (C),L LD A,01000111B ; *16 CLOCK ; 1 STOP BIT OUT (C),A ; EVEN PARITY LD L,3 OUT (C),L LD A,11000001B ; 8 RX BIT/CHAR OUT (C),A ; RX ENABLED LD L,5 OUT (C),L LD A,01100000B ; 8 TX BIT/CHAR OUT (C),A ; TX DISABLED IN L,(C) BIT 2,L JR Z,TR14ERR ;JUMP IF TRANSMIT BUFFER NOT EMPTY DEC C DEC C LD H,01H ;LOAD FIRST CHARACTER OUT (C),H INC C INC C IN L,(C) BIT 2,L JR NZ,TR14ERR ;JUMP IF TRANSMIT BUFFER EMPTY LD L,5 OUT (C),L SET 3,A ;ENABLE TX OUT (C),A DEC C DEC C TR1LOOP INC C ;FOR BIT = 7 TO 0 INC C LD B,0 TWAIT3 DJNZ TWAIT3 LD B,50 ;WAIT 1 MILLI SEC. TWAIT4 DJNZ TWAIT4 LD L,1 OUT (C),L IN L,(C) BIT 0,L JR Z,TR15ERR ;JUMP IF CHARACTER NOT SENT IN L,(C) BIT 2,L JR Z,TR15ERR ;JUMP IF NO TX-CLOCK BIT 0,L JR Z,TR16ERR ;JUMP IF CHARACTER NOT RECEIVED DEC C DEC C IN A,(C) CP H JR NZ,TR17ERR ;JUMP IF RX CHAR. NOT EQUAL TX CHAR. SLA H ;NEXT BIT JR Z,TR1END OUT (C),H JR TR1LOOP TR1END INC C INC C LD L,1 OUT (C),L IN A,(C) AND 70H JR NZ,TR17ERR ;JUMP IF TRANSMISSIONS ERROR RET ;RETURN ON TEST COMPLETED TR14ERR LD A,4 ;RETURN ON TRANSMIT ERROR RET TR15ERR LD A,5 ;RETURN ON TRANSMIT CLOCK ERROR RET TR16ERR LD A,6 ;RETURN ON RECEIVE ERROR RET TR17ERR LD A,7 ;RETURN ON TRANSMISSIONS ERROR RET ;ECHO \f