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: 4772 (0x12a4) Types: TextFile Names: »SIOTST.S«
└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 ) └─ ⟦this⟧ »SIOTST.S«
;***************************************************************************** ;* PROCEDURE NAME : LOOPTST ;* ;* DESCRIPTION : THE ROUTINE LOOPS THE CONTENT OF A MESSAGE BUFFER ON ;* THE Z80 SIO, AND TESTS THE SIO FOR ERRORS ;* ;* ENTRY : DE = ADDRESS OF MESSAGE BUFFER ;* IY = ADDRESS OF CHANNEL TABLE ;* ;* EXIT : DE = ADDRESS OF MESSAGE BUFFER ;* ERROR CODE IN BUFFER : ;* 4 : TRANSMIT ERROR ;* 5 : TX CLOCK ERROR ;* 6 : RECEIVE ERROR ;* 7 : TRANSMISSION ERROR ;* ;* DESTROY : SIO WRITE REGISTERS ;* A,F,B,C,H,L ;***************************************************************************** *INCLUDE CONST.S GLOBAL LOOPTST LOOPTST IN A,(APIO1+1) SET 4,A OUT (APIO1+1),A ;TURN ON TEST LED LD (IY+12H),E ;SAVE BUFFER ADDRESS LD (IY+13H),D CALL CHINIT ;INITIALIZE CHAR.POINTER AND BYTECOUNTERS JP Z,LOOPOUT ;IF DATA BYTECOUNT = 0 THEN EXIT LD C,(IY+15H) 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 LD B,4 CALL Z,SIOERR ;IF TRANSMIT BUFFER NOT EMPTY THEN ERROR LD L,(IY+0EH) LD H,(IY+0FH) ;GET POINTER TO FIRST CHARACTER LD E,(HL) ;GET FIRST CHARACTER DEC C DEC C OUT (C),E ;LOAD FIRST CHARACER INC C INC C IN L,(C) BIT 2,L CALL NZ,SIOERR ;IF TRANSMIT BUFFER EMPTY THEN ERROR LD L,5 OUT (C),L SET 3,A OUT (C),A ;ENABLE TX DEC C DEC C LOOP2 INC C ;DO INC C ; LD B,0 ; WAIT1 DJNZ WAIT1 ; LD B,50 ; DELAY 1 MILLI SEC. WAIT2 DJNZ WAIT2 ; LD L,1 ; OUT (C),L ; IN L,(C) ; BIT 0,L ; LD B,5 ; CALL Z,SIOERR ; IF CHARACTER NOT SENT THEN ERROR IN L,(C) ; BIT 2,L ; CALL Z,SIOERR ; IF NO TX-CLOCK THEN ERROR BIT 0,L ; LD B,6 ; CALL Z,SIOERR ; IF CHARACTER NOT RECEIVED THEN ERROR DEC C ; DEC C ; IN A,(C) ; GET RECEIVED CHARACTER CP E ; LD B,7 ; CALL NZ,SIOERR ; IF RX CH«soh»AR. <> TX CHAR THEN ERROR ; CALL NEXTCHA ; SAVE CHARACTER AND GET NEXT CHARACTER JR Z,TR1NEXT ; IF NO MORE CHARACTERS THEN EXIT ; OUT (C),E ; TRANSMIT NEXT CHARACTER JR LOOP2 ;OD TR1NEXT INC C INC C LD L,1 OUT (C),L IN A,(C) AND 70H LD B,7 CALL NZ,SIOERR ;IF TRANSMISSION ERROR THEN ERROR LOOPOUT LD E,(IY+12H) ;GET BUFFER ADDRESS LD D,(IY+13H) IN A,(APIO1+1) RES 4,A OUT (APIO1+1),A ;TURN OFF TEST LED RET SIOERR PUSH AF PUSH HL PUSH DE LD E,(IY+12H) ;GET BUFFER ADDRESS LD D,(IY+13H) LD HL,BUFFHEAD+ERROFF ADD HL,DE LD A,(HL) AND A JR NZ,ERROUT ;IF NO ERROR INDICATION ALLREADY THEN LD A,(IY+14H) ; GET SIO BASE ADDRESS BIT 0,A ; JR Z,ERRNXT ; IF CHANNEL B THEN ADD A,3 ; ADD 3 TO SIO BASE ADDRESS ERRNXT ADD A,B ; CALCULATE ERROR CODE LD (HL),A ; SAVE ERROR CODE IN BUFFER ;FI ERROUT POP DE POP HL POP AF RET ;ECHO \f ;**************************************************************************** ;* PROCEDURE NAME : CHINIT ;* ;* DESCRIPTION : THE ROUTINE INITIALIZES TX CHAR.POINTER AND TX BY- ;* TECOUNT IN CHANNEL TABLE ;* ;* ENTRY : IY = ADDRESS OF CHANNEL TABLE ;* ;* EXIT : Z = 1 IF DATA BYTECOUNT = 0 ;* Z = 0 IF DATA BYTECOUNT > 0 ;* ;* DESTROY : A,F,B,C,D,E,H,L ;***************************************************************************** CHINIT LD E,(IY+12H) ;GET BUFFER ADDRESS LD D,(IY+13H) LD HL,BUFFHEAD+BYTOFF ADD HL,DE LD C,(HL) INC HL ;GET TX BYTECOUNT LD B,(HL) LD A,C OR B RET Z ;IF DATA BYTECOUNT = 0 THEN EXIT LD (IY+10H),C ;SAVE DATA BYTECOUNT IN CHANNEL TABLE LD (IY+11H),B LD HL,BUFFHEAD+DATOFF ADD HL,DE LD (IY+0EH),L LD (IY+0FH),H ;SAVE DATA CHARACTER POINTER RET ;ECHO \f ;****************************************************************************** ;* PROCEDURE NAME : NEXTCHA ;* ;* DESCRIPTION : THE ROUTINE SAVES RECEIVED CHARACTER IN BUFFER AND ;* INCREMENTS RX BYTECOUNT IN BUFFER, ;* INCREMENTS TX CHAR.POINTER AND DECREMENTS TX BYTE- ;* COUNT IN CHAN.TABLE AND GETS NEXT CHAR. TO TRANSMIT ;* ;* ENTRY : A = RECEIVED CHARACTER ;* IY = ADDRESS OF CHANNEL TABLE ;* ;* EXIT : Z = 0 IF MORE CHARACTERS TO TRANSMIT ;* E = CHARACTER TO TRANSMIT ;* ;* Z = 1 IF NO MORE CHARACTERS TO TRANSMIT ;* ;* DESTROY : A,F,E,H,L ;****************************************************************************** NEXTCHA LD L,(IY+0EH) LD H,(IY+0FH) LD (HL),A ;SAVE RECEIVED CHARACTER INC HL LD E,(HL) ;GET NEXT CHARACTER LD (IY+0EH),L LD (IY+0FH),H ;SAVE NEW CHARACTER POINTER LD L,(IY+10H) LD H,(IY+11H) DEC HL ;DECREMENT TX BYTECOUNT LD A,L OR H RET Z ;IF TX BYTECOUNT = 0 THEN EXIT LD (IY+10H),L LD (IY+11H),H ;SAVE NEW TX BYTECOUNT RET ;ECHO \f