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: 5448 (0x1548) Types: TextFile Names: »TSIO.SRC«
└─⟦519079be6⟧ Bits:30005500 8" CR80 Floppy CR80FD_0029 ( WBOOTL.SYS W.D bootload program 81 10 01 ??? ) └─⟦519079be6⟧ Intel_ISIS_II └─ ⟦this⟧ »TSIO.SRC«
NAME TSIO\r PUBLIC T1SIO,T1TXRX\r EXTRN ERROR\r CSEG\r ;******************************************************************************\r TITLE 'SIO1 TEST ROUTINE'\r ;******************************************************************************\r \r ;DESCRIP: THE ROUTINE TEST Z80-SIO-1\r PUBLIC TSIO1\r TSIO1 IN A,(APIO1+1)\r AND 11111110B ;SET LOOP1 \r OUT (APIO1+1),A\r LD HL,6\r LD C,ATIM1 ;SET CLOCK 1,2 = 333 KHZ\r OUT (C),L\r OUT (C),H\r LD C,ATIM1+1\r OUT (C),L\r OUT (C),H\r LD C,ASIO1\r LD HL,RAMSTA\r CALL T1SIO ;DO SIO1 TEST\r AND A ;RETURN IF NO ERROR\r RET Z\r LD C,ASIO1\r ADD A,C ;LOAD ERROR CODE\r CALL ERROR ;JUMP ERROR ROUTINE\r \r \r \r ;******************************************************************************\r TITLE 'SIO2 TEST ROUTINE'\r ;******************************************************************************\r \r ;DESCRIP: THE ROUTINE TEST Z80-SIO-2\r PUBLIC TSIO2\r TSIO2 IN A,(APIO1+1)\r AND 11111101B ;SET LOOP2 \r ;SET INTERN2 CLOCK\r OUT (APIO1+1),A\r LD HL,6\r LD C,ATIM2 ;SET CLOCK 1,2 = 333 KHZ\r OUT (C),L\r OUT (C),H\r LD C,ATIM2+1\r OUT (C),L\r OUT (C),H\r LD C,ASIO2\r LD HL,RAMSTA\r CALL T1SIO ;DO SIO1 TEST\r AND A ;RETURN IF NO ERROR\r RET Z\r LD C,ASIO2\r ADD A,C ;LOAD ERROR CODE\r CALL ERROR ;JUMP ERROR ROUTINE\r \r \r \r ;-------Z80-SIO TEST ROUTINE ----------------------------T1SIO--------\r ;\r ;DESCRIP: THE ROUTINE TEST THE Z80 SIO\r ; FOR I/O, ASYNC. TRANSMISSIONS\r ; AND INTERRUPT ERRORS\r ;\r ;ENTRY: C - SIO BASE ADDRESS\r ; HL - SIO INTERRUPT TABLE ADDRESS\r ;\r ;EXIT: A = 0 TEST COMPLETED\r ; A = 1 I/O ERROR\r ; A = 2 INTERRUPT ERROR\r ; A = 4 CHANNEL A TRANSMIT ERROR\r ; A = 5 CHANNEL A TX CLOCK ERROR\r ; A = 6 CHANNEL A RECEIVE ERROR\r ; A = 7 CHANNEL A TRANSMISSION ERROR\r ; A = 8 CHANNEL B TRANSMIT ERROR\r ; A = 9 CHANNEL B TX CLOCK ERROR\r ; A = A CHANNEL B RECEIVE ERROR\r ; A = B CHANNEL B TRANSMISSION ERROR\r ;\r ;RESTRICTIONS: CONNECTION RXDATA - TXDATA\r ; RX,TX CLOCK > 80 KHZ\r ;\r ;DESTROY: SIO WRITE REG.\r ; A,F,B,DE,HL\r ;\r ;TIME: 18 MILLI SEC.\r ;\r ;DATE: 800906\r ;\r ;PROGRAMMER: IMJ\r ;\r T1SIO PUSH HL\r LD E,C ;SAVE SIO BASE ADDRESS\r INC C\r INC C\r LD A,18H\r OUT (C),A ;RESET CHANNEL A\r INC C\r OUT (C),A ;RESET CHANNEL B\r LD B,4\r LD H,80H ;FOR BIT 7 TO 4\r S1LOOP LD A,2\r OUT (C),A ; LOAD INTERRUPT VECTOR\r OUT (C),H\r OUT (C),A\r IN A,(C) ; READ INTERRUPT VECTOR\r XOR H\r AND 0F0H\r JR NZ,S1ERROR ; JUMP IF I/O ERROR\r RRC H\r DJNZ S1LOOP ;NEXT BIT\r LD C,E ;RESTORE SIO BASE ADRESS\r INC C\r INC C ;DO CHANNEL A TRANSMISSIONS TEST\r CALL T1TXRX\r AND A\r JR NZ,S2ERROR ;RETURN ON CHANNEL A ERROR\r INC C\r CALL T1TXRX ;DO CHANNEL B TRANSMISSIONS TEST\r AND A\r JR Z,T1NEXT\r LD B,4\r ADD A,B ;RETURN ON CHANNEL B ERROR\r T1NEXT POP HL\r LD A,H\r LD I,A\r LD A,2\r OUT (C),A\r OUT (C),L ;LOAD INTERRUPT VECTOR\r LD DE,4\r ADD HL,DE\r LD DE,RXINT\r LD (HL),E ;LOAD RX INTERRUPT ROUTINE ADDRESS\r INC HL\r LD (HL),D\r LD A,1\r OUT (C),A\r LD A,00011100B ;ENABLE RX INTERRUPT\r OUT (C),A\r DEC C\r DEC C\r LD A,55H\r OUT (C),A ;TRANSMIT CHARACTER\r XOR A\r EI\r LD B,0\r DJNZ $+0 ;WAIT 1 MILLI SEC.\r LD B,50\r DJNZ $+0\r DI\r INC C\r LD L,18H\r OUT (C),L ;RESET CHANNEL A\r INC C\r OUT (C),L ;RESET CHANNEL B\r CP 55H\r JR NZ,S3ERROR\r XOR A\r RET ;RETURN ON TEST COMPLETED\r S1ERROR LD A,1 ;RETURN ON I/O ERROR\r S2ERROR POP HL\r RET\r S3ERROR LD A,2 ;RETURN ON INTERRUPT ERROR\r RET\r \r \r \r ;------ RECEIVE INTERRUPT ROUTINE ---------------------------------------------\r RXINT IN A,(C) ;LOAD RECEIVED CHARACTER\r EI\r RETI\r \r \r \r ;-------SIO TRANSMISSIONS TEST ROUTINE-------------------T1TXRX-------\r ;\r ;DESCRIP: TEST SINGLE CHANNEL FOR TRANSMISSIONS ERROR\r ;\r ;ENTRY: C - SIO CHANNEL CONTROL/STATUS ADDRESS\r ;\r ;EXIT: A = 0 TEST COMPLETED\r ; A = 4 TX ERROR\r ; A = 5 TX CLOCK ERROR\r ; A = 6 RX ERROR\r ; A = 7 TRANSMISSIONS ERROR\r ;\r ;DESTROY: A,F,B,DE,HL\r T1TXRX LD A,18H\r OUT (C),A ;RESET CHANNEL\r LD L,4 ;SET CHANNEL MODE\r OUT (C),L ;BEGIN\r LD A,01000111B ; *16 CLOCK\r ; 1 STOP BIT\r OUT (C),A ; EVEN PARITY\r LD L,3\r OUT (C),L\r LD A,11000001B ; 8 RX BIT/CHAR.\r OUT (C),A ; RX ENABLED\r LD L,5\r OUT (C),L\r LD A,01100000B ; 8 TX BIT/CHAR.\r OUT (C),A ; TX DISABLED\r ;END\r IN L,(C)\r BIT 2,L\r JR Z,TR14ERR ;JUMP IF TRANSMIT BUFFER NOT EMPTY\r DEC C\r DEC C\r LD H,80H ;LOAD FIRST CHARACTER\r OUT (C),H\r INC C\r INC C\r IN L,(C)\r BIT 2,L\r JR NZ,TR14ERR ;JUMP IF TRANSMIT BUFFER EMPTY\r LD L,5\r OUT (C),L\r SET 3,A ;ENABLE TX\r OUT (C),A\r DEC C\r DEC C\r TR1LOOP INC C ;FOR BIT = 7 TO 0\r INC C\r LD B,0\r DJNZ $+0 ;WAIT 1 MILLI SEC.\r LD B,50\r DJNZ $+0\r LD L,1\r OUT (C),L\r IN L,(C)\r BIT 0,L\r JR Z,TR15ERR ; JUMP IF CHARACTER NOT SENT\r IN L,(C)\r BIT 2,L\r JR Z,TR15ERR ; JUMP IF NO TX-CLOCK\r BIT 0,L\r JR Z,TR16ERR ; JUMP IF CHARACTER NOT RECEIVED\r DEC C\r DEC C\r IN A,(C)\r CP H\r JR NZ,TR17ERR ; JUMP IF RX CHAR. NOT EQUAL TX CHAR.\r RRC H\r CP 1\r JR NZ,TR1END ;NEXT BIT\r OUT (C),H\r JR TR1LOOP\r TR1END INC C\r INC C\r LD L,1\r OUT (C),L\r IN A,(C)\r AND 70H\r JR NZ,TR17ERR ;JUMP IF TRANSMISSIONS ERROR\r RET ;RETURN ON TEST COMPLETED\r TR14ERR LD A,4 ;RETURN ON TRANSMIT ERROR\r RET\r TR15ERR LD A,5 ;RETURN ON TRANSMIT CLOCK ERROR\r RET\r TR16ERR LD A,6 ;RETURN ON RECEIVE ERROR\r RET\r TR17ERR LD A,7 ;RETURN ON TRANSMISSIONS ERROR\r RET\r END\r