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: 12437 (0x3095) Types: TextFile Names: »CR80LTU.S«
└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 ) └─ ⟦this⟧ »CR80LTU.S«
*P 42 *INCLUDE CONSTANT.S ;****************************************************** ; TC500 DIAL UP 4 CHANNEL ;****************************************************** ; GLOBAL CHA1STA,COM1REC EXTERNAL SRELEASE,CHA1TAB ;////////////////////////////////////////////////////////////////////////////// CHA1STA LD IY,CHA1TAB ;GET CHANNEL TABLE ADDRESS CALL COMINI ;INITIALIZE COMMUNICATION INTERFACE TO CR80 CALL SRELEASE ;SCHEDULE LD IY,CHA1TAB ;GET CHANNEL TABLE ADDRESS CALL COMTRA ;TRANSFER INFORMATION FROM LTU TO CR80 JP CHA1STA ; ;////////////////////////////////////////////////////////////////////////////// ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ COM1REC LD IY,CHA1TAB ;GET CHANNEL TABLE ADDRESS CALL COMREC ;TRANSFER INFORMATION FROM CR80 TO LTU CALL SRELEASE ;SCHEDULE JP COM1REC ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ *E GLOBAL CHA2STA,COM2REC EXTERNAL CHA2TAB ;////////////////////////////////////////////////////////////////////////////// CHA2STA LD IY,CHA2TAB ;GET CHANNEL TABLE ADDRESS CALL COMINI ;INITIALIZE COMMUNICATION INTERFACE TO CR80 CALL SRELEASE ;SCHEDULE LD IY,CHA2TAB ;GET CHANNEL TABLE ADDRESS CALL COMTRA ;TRANSFER INFORMATION FROM CR80 TO LTU JP CHA2STA ; ;////////////////////////////////////////////////////////////////////////////// ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ COM2REC LD IY,CHA2TAB ;GET CHANNEL TABLE ADDRESS CALL COMREC ;TRANSFER INFORMATION FROM LTU TO CR80 CALL SRELEASE ;SCHEDULE JP COM2REC ; ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ *E GLOBAL CHA3STA,COM3REC EXTERNAL CHA3TAB ;////////////////////////////////////////////////////////////////////////////// CHA3STA LD IY,CHA3TAB ;GET CHANNEL TABLE ADDRESS CALL COMINI ;INITIALIZE COMMUNICATION INTERFACE TO CR80 CALL SRELEASE ;SCHEDULE LD IY,CHA3TAB ;GET CHANNEL TABLE ADDRESS CALL COMTRA ;TRANSFER INFORMATION FROM LTU TO CR80 JP CHA3STA ; ;////////////////////////////////////////////////////////////////////////////// COM3REC LD IY,CHA3TAB ;GET CHANNEL TABLE ADDRESS CALL COMREC ;TRANSFER INFORMATION FROM CR80 TO LTU CALL SRELEASE ;SCHEDULE JP COM3REC *E GLOBAL CHA4STA,COM4REC EXTERNAL CHA4TAB ;////////////////////////////////////////////////////////////////////////////// CHA4STA LD IY,CHA4TAB ;GET CHANNEL TABLE ADDRESS CALL COMINI ;INITIALIZE COMMUNICATION INTERFACE TO CR80 CALL SRELEASE ;SCHEDULE LD IY,CHA4TAB ;GET CHANNEL TABLE ADDRESS CALL COMTRA ;TRANSFER INFORMATION FROM CR80 TO LTU JP CHA4STA ; ;////////////////////////////////////////////////////////////////////////////// ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ COM4REC LD IY,CHA4TAB ;GET CHANNEL TABLE ADDRESS CALL COMREC ;TRANSFER INFORMATION FROM LTU TO CR80 CALL SRELEASE ;SCHEDULE JP COM4REC ; ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\«so»*E ;ECHO \f *P 42 *L ON ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; CHANNEL TABLE DESCRIPTION ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;CHANNEL TABLE: ; ; ********************** ; * CHANNEL * 00H ; * STATUS * 01H ; ********************** ; * COMMUNICATION AREA * 02H ; * START ADDRESS * 03H ; ********************** ; * TRANSMIT BUFFER * 04H ; * ELEMENT ADDRESS * 05H ; ********************** ; * RECEIVE BUFFER * 06H ; * ELEMENT ADDRESS * 07H ; ********************** ; * EMPTY BUFFER QUEUE * 08H ; * HEAD ADDRESS * 09H ; ********************** ; * SEMAPHORE (RECEIVE)* 0AH ; * VALUE (QHEAD*08H) * 0BH ; ********************** ; * SEMAPHORE (TRANS) * 0CH ; * VALUE (QHEAD*08H) * 0DH ; ********************** ; * BUSY FLAG (REC) * 0EH ; * SELECTED 8253 CODE * 0FH ; ********************** ; * SELECTED 8253 * 10H ; * COUNTER CODE * 11H ; ********************** *E *L ON ;ECHO \f ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;COMINI: GENERAL INITIAL PROCESS FOR CR80-LTU COMMUNICATION. ; ;ENTRY POINT: ADDRESS OF CHANNEL TABLE MUST BE SITUATED IN REGISTER IY. ; ;EXIT POINT: NONE ; ;REGISTERS: ALL DESTROYED ; ;FILE NAME: COMINI.SRC ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *E GLOBAL COMINI COMINI LD A,(IY+00H) ;GET CHANNEL STATUS 19 CP 02H ;IF CHANNEL STATUS = NOT IN USE 07 RET NZ ;THEN RETURN 05 /11 LD L,(IY+02H) ;GET POINTER TO COMMUNICATION 19 LD H,(IY+03H) ;AREA 19 PUSH HL ; 11 POP IX ; 14 TEST1 BIT 7,(IX+0CH) ;DO WHILE ESTABLISHING BIT < > 01H 20 JR NZ,CONT1 ; 10 PUSH IX ; 15 PUSH IY ; 15 CALL SRELEASE ; SCHEDULE POP IY ; 14 POP IX ; 14 JR TEST1 ;END 10 CONT1 LD (IX+0CH),066H ;RESET ESTABLISHING BIT 19 PUSH IX ;SET DIRECTION TOOGLE 15 PUSH IY ;SET RESET CHANNEL COMMAND 15 CALL SRELEASE ;SCHEDULE POP IY ; 14 POP IX ; 14 TEST2 BIT 6,(IX+0CH) ;DO WHILE DIRECTION TOOGLE < > 00 20 JR Z,CONT2 ; 10 PUSH IX ; 15 PUSH IY ; 15 CALL SRELEASE ; SCHEDULE POP IY ; 14 POP IX ; 14 JR TEST2 ;END 10 CONT2 LD A,(IX+0CH) ;IF 'MODE OF OPERATION HAS BEEN 19 AND 01H ; DECLARE' BIT = 1 07 JR Z,ERR1 ;THEN DO 10 CONT3 SET 5,(IX+0CH) ; SET INITIALIZE PROCESS OK 19 SET 6,(IX+0CH) ; MESSAGE TO CR80 19 LD HL,0A000H ; SET TX- AND RX-STATUS WORD 10 LD (IX+00H),L ; VALID 19 LD (IX+01H),H ; 19 LD L,080H ; 07 LD (IX+02H),L ; 19 LD (IX+03H),H ; 19 LD (IY+00H),01H ; SET TRANSMISSION AND 19 LD (IY+01H),00H ; RECEIVING PERMITTED 19 RET ; 14 ; END *E ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;ERROR PROCESS ERR1 LD (IX+0CH),045H ;RESET ESTABLISHING BIT 19 ;SET DIRECTION TOOGLE ;SET ERROR COMMAND JP COMINI ; 10 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *E *L ON ;ECHO \f ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;COMTRA: GENERAL COMMUNICATION PROCESS FOR TRANSFERING DATA FROM CR80 TO LTU. ; ;ENTRY POINT: ADDRESS OF CHANNEL TABLE MUST BE SITUATED IN REGISTER IY. ; ;EXIT POINT: NONE. ; ;REGISTERS: ALL DESTROYED. ; ;FILE NAME; COMINI.SRC ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *E EXTERNAL SUBDEQ,SUBSEND,SYSRAM GLOBAL COMTRA COMTRA LD A,(IY+00H) ;GET CHANNEL STATUS 19 CP 01H ;IF CHANNEL STATUS = NOT IN USE 07 RET NZ ;THEN RETURN 05 /11 LD L,(IY+02H) ;GET POINTER TO COMMUNICATION 19 LD H,(IY+03H) ;AREA 19 PUSH HL ; 11 POP IX ; 14 LD A,(IX+01H) ;GET MSB OF TX STATUS WORD 19 AND 080H ;IF LTU READING ALLOWED 07 RET Z ;THEN DO 10 LD E,(IY+04H) ; IF BUFFER TO READ 19 LD D,(IY+05H) ; 19 LD A,E ; 04 OR D ; 04 JR Z,NOMOVE ; THEN DO 10 LD HL,BCOFF ; GET BYTE COUNT OFFSET ADD HL,DE ; COUNT ADDRESS 11 LD C,(IX+04H) ; GET TRANSMITTER BYTE 19 LD B,(IX+05H) ; COUNT 19 LD (HL),C ; TRANSFER BYTE COUNT TO 07 INC HL ; BUFFER ELEMENT 06 LD (HL),B ; 07 LD C,(IX+00H) ; GET TX-STATUS WORD 19 LD A,(IX+01H) ; 19 AND 050H ; MASK INVALID BIT AND 07 LD HL,STWOFF ; GET STATUS WORD OFFSET ADD HL,DE ; 11 LD (HL),C ; TRANSFER STATUS WORD 07 INC HL ; TO BUFFER ELEMENT 06 LD (HL),A ; 07 LD C,(IY+0CH) ; CALCULATE SEMAPHORE 19 LD B,(IY+0DH) ; BUFFER ADDRESS 19 LD HL,SYSRAM+180H ; 10 ADD HL,BC ; 11 DI ; 04 CALL SUBSEND ; TRANSMIT BUFFER EI ; 04 LD (IY+04H),00H ; SET: NO BUFFER TO 19 LD (IY+05H),00H ; READ 19 NOMOVE LD L,(IY+08H) ; GET ADDRESS POINTER 19 LD H,(IY+09H) ; TO EMPTY BUFFER QUEUE 19 INC HL ; 06 LD A,(HL) ; IF MORE THAN 2 BUFFERS 07 CP 03H ; 07 RET M ; THEN DO 10 DEC HL ; 06 DI ; GET EMPTY BUF- 04 CALL SUBDEQ ; FER 130 / 83 EI ; 04 LD (IY+04H),E ; SAVE BUFFER 19 LD (IY+05H),D ; ELEMENT ADDRESS 19 LD HL,MAXSIZE ; GET MAX BYTE LD (IX+04H),L ; LOAD TX-BYTE 19 LD (IX+05H),H ; WORD WITH MAX 19 ; BYTE COUNT LD HL,BUFFHEAD+TRAOFF ; TRANSFER CALCULATED ADD HL,DE ; START ADDRESS TO LD (IX+06H),L ; TX-START ADDRESS WORD LD (IX+07H),H ; LD C,L ; TEMPORARY SAVING LD B,H ; OF START ADDRESS LD HL,TSAOFF ; LOAD BUFFER ELEMENT WITH ADD HL,DE ; START ADDRESS 11 LD (HL),C ; 07 INC HL ; 06 LD (HL),B ; 07 LD HL,STWOFF ; RESET STATUS WORD ADD HL,DE ; IN BUFFER ELEMENT LD (HL),00H ; 07 INC HL ; 06 LD (HL),00H ; 07 LD A,(IX+00H) ; RESET TX-STATUS 19 AND 080H ; WORD 07 LD (IX+00H),A ; 19 RES 7,(IX+01H) ; SET CR80 WRIT- 19 ; TING ALLOWED RET ; END END END ;ECHO \f ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;COMREC: GENERAL COMMUNICATION PROCESS FOR TRANSFERING DATA FROM LTU TO CR80. ; ;ENTRY POINT: ADDRESS OF CHANNEL TABLE MUST BE SITUATED IN REGISTER IY. ; ;EXIT POINT: NONE. ; ;REGISTERS: ALL DESTROYED. ; ;FILE NAME; COMINI.SRC ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *E EXTERNAL RECI,MESADD,SUBENQ GLOBAL COMREC COMREC LD A,(IY+00H) ;GET CHANNEL STATUS 19 CP 01H ;IF CHANNEL STATUS = NOT IN USE 07 RET NZ ;THEN RETURN 05 /11 LD L,(IY+02H) ;GET POINTER TO COMMUNICATION 19 LD H,(IY+03H) ;AREA 19 PUSH HL ; 11 POP IX ; 14 LD A,(IX+03H) ;GET MSB OF RX STATUS WORD 19 AND 080H ;IF LTU WRITING ALLOWED 07 RET Z ;THEN DO 10 LD E,(IY+06H) ; IF BUFFER TO READ 19 LD D,(IY+07H) ; 19 LD A,E ; 04 OR D ; 04 JR Z,NOBUF ; THEN DO 10 LD HL,BCOFF ; GET BYTE COUNT OFF SET ADD HL,DE ; COUNT ADDRESS 11 LD (HL),00H ; RESET CONTENT OF 07 INC HL ; BYTE COUNT WORD 06 LD (HL),00H ; 07 LD HL,STWOFF ; GET STATUS WORD OFF SET ADD HL,DE ; CALCULATE STATUS WORD 11 LD (HL),00H ; ADDRESS 07 INC HL ; RESET CONTENT OF 06 LD (HL),00H ; STATUS WORD 07 LD HL,TSAOFF ; GET TRANSM.ADDRESS OFFSET ADD HL,DE ; CALCULATE TRANSMIT 11 LD (HL),00H ; START ADDRESS 07 INC HL ; RESET CONTENT OF 06 LD (HL),00H ; TRANSMIT START ADDRESS 07 LD L,(IY+08H) ; GET EMPTY BUFFER 19 LD H,(IY+09H) ; QUEUE ADDRESS 19 DI ; TRANSFER BUFFER ELEMENT 04 CALL SUBENQ ; TO EMPTY BUFFER QUEUE 157 EI ; 04 LD (IY+06H),00H ; SET: NO BUFFER TO 19 LD (IY+07H),00H ; TRANSFER 19 LD A,(IX+02H) ; RESET ERROR BYTE 19 AND 080H ; IN CHANNEL RX-STATUS 07 LD (IX+02H),A ; WORD 19 ; END NOBUF LD HL,SYSRAM+180H ; GET ADDRESS OF SYSRAM END 10 LD C,(IY+0AH) ; GET SEMAPHORE QUEUE HEAD 19 LD B,(IY+0BH) ; ADDRESS OFF SET 19 ADD HL,BC ; CALCULATE SEMAPHORE QUEUE HEAD 11 ; ADDRESS LD (SYSRAM+0E2H),HL; SAVE SEMAPHORE QUEUE HEAD 16 ; ADDRESS PUSH IX ; TEMPORARY SAVING OF COMMUNI- 15 ; CATION AREA POINTER PUSH IY ; TEMPORARY SAVING OF CHANNEL 15 ; TABLE POINTER CALL RECI ; WAIT FOR MESSAGE RECEIVED ; (SCHEDULE) POP IY ; RESTORE CHANNEL POINTER 14 POP IX ; RESTORE COMMUNICATION AREA 14 ; POINTER CALL MESADD ; GET RECEIVE MESSAGE ADDRESS LD (IY+06H),E ; SAVE MESSAGE ADDRESS (BUFFER) 19 LD (IY+07H),D ; 19 LD HL,STWOFF ; GET STATUS WORD OFF SET ADD HL,DE ; 11 LD C,(HL) ; GET CONTENT OF BUFFER STATUS 07 INC HL ; WORD 06 LD B,(HL) ; 07 LD A,(IX+02H) ; TRANSFER STATUS VALUE 19 AND 080H ; TO CHANNEL RX-STATUS 07 OR C ; WORD 04 LD (IX+02H),A ; 19 LD A,(IX+03H) ; 19 AND 0A0H ; 07 OR B ; 04 LD (IX+03H),A ; 19 LD HL,BCOFF ; GET BYTE COUNT OFFSET ADD HL,DE ; 11 LD C,(HL) ; GET FINAL BYTE COUNT 07 INC HL ; VALUE 06 LD B,(HL) ; 07 LD (IX+08H),C ; TRANSFER FINAL BYTE COUNT 19 LD (IX+09H),B ; TO RX-BYTE COUNT WORD 19 LD HL,TSAOFF ; GET TRANSMIT ADDRESS OFF SET ADD HL,DE ; 11 LD C,(HL) ; GET TRANSFER START 07 INC HL ; ADDRESS 06 LD B,(HL) ; 07 LD (IX+0AH),C ; MOVE TRANSFER START ADDRESS 19 LD (IX+0BH),B ; TO RX-START ADDRESS 19 RES 7,(IX+03H) ; SET CR80 READING ALLOWED 23 RET ; END 14 *E ;ECHO \f