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: 3895 (0xf37) Types: TextFile Names: »CHX.PROC.S«
└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 ) └─ ⟦this⟧ »CHX.PROC.S«
;**************************************************************************** ;* PROCESS NAME : CHXPROC ;* ;* DESCRIPTION : THE PROCESS GETS A MESSAGE BUFFER FROM CR80. ;* IF IT IS A LOOP BUFFER, THE CONTENT IS LOOPED ON THE ;* SIO AND RETURNED TO CR80 WITH PROPER ERROR CODE ;* IF IT IS NOT A LOOP BUFFER,IT IS RETURNED TO CR80 ;* IMMEDIATELY ;****************************************************************************** *INCLUDE CONST.S GLOBAL CH1PROC,CH2PROC,CH3PROC,CH4PROC EXTERNAL CHA1TAB,CHA2TAB,CHA3TAB,CHA4TAB EXTERNAL GETMES,OVLDET,PUTMES,PUTBUF,SRELEASE EXTERNAL SUBDEQ,LOOPTST CH1PROC LD IY,CHA1TAB CALL ERRSEN ;IF CHAN. INITIALIZED, SEND ERROR MESS. IF ANY CALL GETMES ;GET BUFFER FROM CR80 LD HL,BUFFHEAD+TRAOFF ADD HL,DE LD A,(HL) CP MODE2 CALL Z,LOOPTST ;IF MODE 2-BUFFER THEN LOOP BUFFER IN SIO CALL OVLDET ;IF NOT OVERLOAD THEN CALL M,PUTMES ;RETURN BUFFER TO CR80 ELSE CALL P,PUTBUF ;RETURN BUFFER TO EMPTY QUEUE CALL SRELEASE ;SCHEDULE JR CH1PROC CH2PROC LD IY,CHA2TAB CALL ERRSEN ;IF CHAN. INITIALIZED, SEND ERROR MESS. IF ANY CALL GETMES ;GET BUFFER FROM CR80 LD HL,BUFFHEAD+TRAOFF ADD HL,DE LD A,(HL) CP MODE2 CALL Z,LOOPTST ;IF MODE 2-BUFFER THEN LOOP BUFFER IN SIO CALL OVLDET ;IF NOT OVERLOAD THEN CALL M,PUTMES ;RETURN BUFFER TO CR80 ELSE CALL P,PUTBUF ;RETURN BUFFER TO EMPTY QUEUE CALL SRELEASE ;SCHEDULE JR CH2PROC CH3PROC LD IY,CHA3TAB CALL ERRSEN ;IF CHAN. INITIALIZED, SEND ERROR MESS. IF ANY CALL GETMES ;GET BUFFER FROM CR80 LD HL,BUFFHEAD+TRAOFF ADD HL,DE LD A,(HL) CP MODE2 CALL Z,LOOPTST ;IF MODE 2-BUFFER THEN LOOP BUFFER IN SIO CALL OVLDET ;IF NOT OVERLOAD THEN CALL M,PUTMES ;RETURN BUFFER TO CR80 ELSE CALL P,PUTBUF ;RETURN BUFFER TO EMPTY QUEUE CALL SRELEASE ;SCHEDULE JR CH3PROC CH4PROC LD IY,CHA4TAB CALL ERRSEN ;IF CHAN. INITIALIZED, SEND ERROR MESS. IF ANY CALL GETMES ;GET BUFFER FROM CR80 LD HL,BUFFHEAD+TRAOFF ADD HL,DE LD A,(HL) CP MODE2 CALL Z,LOOPTST ;IF MODE 2-BUFFER THEN LOOP BUFFER IN SIO CALL OVLDET ;IF NOT OVERLOAD THEN CALL M,PUTMES ;RETURN BUFFER TO CR80 ELSE CALL P,PUTBUF ;RETURN BUFFER TO EMPTY QUEUE CALL SRELEASE ;SCHEDULE JR CH4PROC ;ECHO \f ERRSEN LD A,(IY+00H) CP 1 JR Z,NEXT1 ;IF CHANNEL IS NOT INITIALIZED THEN WAIT NEXT0 PUSH IY CALL SRELEASE POP IY JR ERRSEN NEXT1 LD HL,STACEND-1 LD A,(HL) CP 0FFH RET Z ;IF NO ERROR MESSAGES TO BE SEND THEN EXIT LD L,(IY+08H) ;GET ADDRESS OF EMPTY BUFFER QUEUE LD H,(IY+09H) CALL SUBDEQ JR NC,NEXT0 ;IF BUFFER IN EMPTY QUEUE THEN LD HL,STACEND-1 ; LD A,(HL) ; GET ERROR COUNT LD (HL),0FFH ; CLEAR ERROR COUNT PUSH AF ; RLCA ; ADD A,12 ; CALCULATE BYTE COUNT LD HL,BCOFF ; ADD HL,DE ; LD (HL),A ; UPDATE BYTE COUNT IN BUFFER INC HL ; LD (HL),0 ; LD HL,BUFFHEAD+TRAOFF ADD HL,DE ; PUSH HL ; SAVE DATA START ADDRESS LD HL,TSAOFF ; ADD HL,DE ; POP BC ; LD (HL),C ; INC HL ; LD (HL),B ; UPDATE DATASTART ADDRESS IN BUFFER LD L,C ; LD H,B ; POP BC ; GET ERROR BYTECOUNT XOR A ; LD (HL),MODE0 ; UPDATE OPCODE IN BUFFER INC HL ; LD (HL),A ; INC HL ; LD (HL),A ; CLEAR CHANNEL NO. INC HL ; LD (HL),A ; INC HL ; LD (HL),B ; SAVE ERROR WORD COUNT IN BUFFER INC HL ; LD (HL),A ; CP B ; JR Z,NEXT3 ; IF ERROR WORD COUNT <> 0 THEN PUSH DE ; LD DE,7 ; ADD HL,DE ; CALCULATE ERROR WORD START ADDRESS IN BUFFER LD DE,STACEND-2 ; GET ERROR CODE START(END) ADDRESS ; FOR NO. OF ERROR CODES NEXT2 LD A,(DE) ; DO LD (HL),A ; LOAD ERROR CODE IN BUFFER INC HL ; LD (HL),0 ; INC HL ; NEXT ADDRESS IN BUFFER DEC DE ; NEXT ADDRESS OF ERROR CODES DJNZ NEXT2 ; OD POP DE ; GET BUFFER ADDRESS ; FI NEXT3 CALL OVLDET ; IF NOT OVERLOAD THEN CALL M,PUTMES ; SEND ERROR BUFFER TO CR80 CALL P,PUTBUF ; RETURN BUFFER TO EMPTY QUEUE RET ;FI ;ECHO \f