DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦f12ae0b44⟧ TextFile

    Length: 3895 (0xf37)
    Types: TextFile
    Names: »CHX.PROC.S«

Derivation

└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 )
    └─ ⟦this⟧ »CHX.PROC.S« 

TextFile

;****************************************************************************
;* 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