DataMuseum.dk

Presents historical artifacts from the history of:

Zilog MCZ Floppy Disks

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b5ca78b58⟧ TextFile

    Length: 12904 (0x3268)
    Types: TextFile
    Names: »PLZ.QUEU.S«

Derivation

└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ )
    └─ ⟦this⟧ »PLZ.QUEU.S« 

TextFile

;;****************************************************************************
;;*
;;*		    PLZ_QUEU  MODULE
;;*
;;****************************************************************************
;PLZ_QUEU MODULE
*INCLUDE PLZ.MACROS
;;
;CONSTANT
;   OVL    := 0FFH
OVL	EQU	0FFH
;   NO_OVL := 0
NO_OVL	EQU	0
;   TRA_DEL := 2
TRA_DEL	EQU	2
; 
;   CR80QUEU_OFFSET	:= 0
CR80QUEU_OFFSET	EQU	0
;   EMPTYQUEU_OFFSET	:= 20
EMPTYQUEU_OFFSET	EQU	20
;;
;EXTERNAL
;   SUBENQ
;   SIG
;   WAI
;   SYSRAM
;   RECI
;   SUBSEN
;   SRELEA
;   MESADD
;   SUBDEQ
;   SUBXDQ
;;
;GLOBAL
	EXTERNAL SUBXDQ,SUBDEQ,MESADD,SRELEA,SUBSEN,RECI,SYSRAM,WAI,SIG,SUBENQ
;	RCT1CH,RCT2CH,RCT3CH,RCT4CH WORD
	GLOBAL RCT4CH,RCT3CH,RCT2CH,RCT1CH
;;
;GLOBAL
RCT1CH	DEFS	0002H 
RCT2CH	DEFS	0002H 
RCT3CH	DEFS	0002H 
RCT4CH	DEFS	0002H 
; 
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: GETBUF
;;*
;;* FUNCTION	: THE CALLING PROCESS IS SCHEDULED, UNTIL A BUFFER IS
;;*		  AVAILABLE FROM THE EMPTY BUFFER QUEUE
;;*
;;* INPUTS	: QUEU_ADDRESS : POINTER TO EMPTY BUFFER QUEUE
;;*
;;* OUTPUTS	: BUF_PTR      : POINTER TO BUFFER
;;**************************************************************************
;	GETBUF PROCEDURE
	GLOBAL GETBUF
;	ENTRY
GETBUF:
		PLZVAR
		PLZIN	QUEU_ADDRESS
		PLZOUT	BUF_PTR
		ENT	0
;		DO
DO00:
			GETWORD	H L,QUEU_ADDRESS
			DI
			PUSH	IX
			CALL SUBDEQ
			POP		IX
			EI
;			IF C THEN
	JP NC,FI01
				PUTWORD BUF_PTR, D E
;				EXIT
	JP OD00
;			ELSE
	JP FI02
FI01:
				PUSH	IX
				CALL SRELEASE
				POP	IX
;			FI
FI02:
;		OD
	JP DO00
OD00:
		RTN	1
;	END GETBUF
	RET
; 
;;
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE(S)	: PUTBUF (PUTPWQ,PUTTRQ)
;;*
;;* FUNCTION	: ENQUES BUFFER IN SPECIFIED QUEUE
;;*
;;* INPUTS	: QUEU_ADDRESS : POINTER TO BUFFER QUEUE
;;*		  BUF_PTR      : POINTER TO BUFFER
;;*
;;* OUTPUTS	: NONE
;;**************************************************************************
;	PUTBUF	PROCEDURE
	GLOBAL PUTBUF
;		ENTRY
PUTBUF:
		PLZVAR
		PLZIN	QUEU2_ADDRESS,BUF2_PTR
		ENT 0
		GETWORD H L, QUEU2_ADDRESS
		GETWORD D E, BUF2_PTR
		DI												;BUFFER (BUF_PTR) TO
		PUSH	IX
		CALL SUBENQ										;QUEU (QUEU_ADDRESS)
		POP		IX
		EI
		RTN 2
;	END	PUTBUF
	RET
; 
;	PUTPWQ	PROCEDURE
	GLOBAL PUTPWQ
;		ENTRY
PUTPWQ:
		PLZVAR
		PLZIN	QUEU3_ADDRESS,BUF3_PTR
		ENT 0
		GETWORD	H L, QUEU3_ADDRESS
		GETWORD D E, BUF3_PTR
		DI
		PUSH	IX
		CALL	SUBENQ
		POP	IX
		EI
		RTN 2
;	END	PUTPWQ
	RET
; 
;	PUTTRQ	PROCEDURE
	GLOBAL PUTTRQ
;		ENTRY
PUTTRQ:
		PLZVAR
		PLZIN	QUEU9_ADDRESS,BUF9_PTR
		ENT 0
		GETWORD	H L, QUEU9_ADDRESS
		GETWORD D E, BUF9_PTR
		DI
		PUSH	IX
		CALL	SUBENQ
		POP	IX
		EI
		RTN 2
;	END	PUTTRQ
	RET
;;
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE 	: RECX
;;*
;;* FUNCTION	: WAIT UNTIL A MESSAGE IS SEND TO THE SPEC.SEMAPHORE
;;*			  OR, IF DELAY IS SPECIFIED, TO THE DELAY HAS ELAPSED
;;*
;;* INPUTS	: QUEU_NO    : NUMBER OF SEMAPHORE QUEUE
;;*		  DELAY = 0  : NO TIMEOUT FUNCTION
;;*		  DELAY <> 0 : MAX WAIT TIME IN UNITS OF 12.5 MSEC
;;*		  CH_NO      : NUMBER OF CHANNEL
;;*
;;* OUTPUT	: BUF_PTR  = NIL IF MESSAGE NOT RECEIVED (TIMEOUT)
;;*		  BUF_PTR <> NIL IF MESSAGE RECEIVED
;;****************************************************************************
;   RECX PROCEDURE
	GLOBAL RECX
;   ENTRY
RECX:
      PLZVAR
      PLZIN QUEU4_NO MAKS4_DELAY CHA4_NO
      PLZOUT BUF4_PTR
      ENT 0
      GETBYTE A,MAKS4_DELAY
      GETBYTE E,CHA4_NO
; 
      AND A
;      IF NZ THEN
	JP Z,FI03
	 BIT 0,E
;	 IF Z THEN
	JP NZ,FI04
	    BIT 1,E
;	    IF Z THEN
	JP NZ,FI05
	       LD (RCT4CH),A
;	    ELSE
	JP FI06
FI05:
	       LD (RCT2CH),A
;	    FI
FI06:
;	 ELSE
	JP FI07
FI04:
	    BIT 1,E
;	    IF Z THEN
	JP NZ,FI08
	       LD (RCT1CH),A
;	    ELSE
	JP FI09
FI08:
	       LD (RCT3CH),A
;	    FI
FI09:
;	 FI
FI07:
;      FI
FI03:
; 
      LD B,0
;      DO
DO0A:
	 LD DE,SYSRAM+240H
	 LD H,0
	 GETBYTE L,QUEU4_NO
	 ADD HL,HL
	 ADD HL,HL
	 ADD HL,HL
	 ADD HL,DE
	 LD A,(HL)
	 ADD A,7FH
;	 IF M THEN
	JP P,FI0B
	    LD (SYSRAM+0E2H),HL
	    PUSH IX
	    CALL RECI
	    POP IX
	    CALL MESADD
;	    IF C THEN
	JP NC,FI0C
	       PUTWORD BUF4_PTR, D E
	       LD B,1
;	    ELSE
	JP FI0D
FI0C:
	       LD B,0
;	    FI
FI0D:
;	 ELSE
	JP FI0E
FI0B:
	    GETBYTE A,MAKS4_DELAY
	    AND A
;	    IF NZ THEN
	JP Z,FI0F
	       GETBYTE E,CHA4_NO
	       BIT 0,E
;	       IF Z THEN
	JP NZ,FI10
		  BIT 1,E
;		  IF Z THEN
	JP NZ,FI11
		     LD A,(RCT4CH)
;		  ELSE
	JP FI12
FI11:
		     LD A,(RCT2CH)
;		  FI
FI12:
;	       ELSE
	JP FI13
FI10:
		  BIT 1,E
;		  IF Z THEN
	JP NZ,FI14
		     LD A,(RCT1CH)
;		  ELSE
	JP FI15
FI14:
		     LD A,(RCT3CH)
;		  FI
FI15:
;	       FI
FI13:
	       AND A
;	       IF Z THEN
	JP NZ,FI16
		  LD DE,00
		  PUTWORD BUF4_PTR,D E
		  LD B,1
;	       FI
FI16:
;	    FI
FI0F:
;	 FI
FI0E:
; 
	 LD A,B
	 AND A
;	 IF NZ THEN
	JP Z,FI17
;	    EXIT
	JP OD0A
;	 ELSE
	JP FI18
FI17:
	    PUSH BC
	    PUSH IX
	    CALL SRELEA
	    POP IX
	    POP BC
;	 FI
FI18:
;      OD
	JP DO0A
OD0A:
      RTN 3
;   END RECX
	RET
; 
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: GETMES
;;*
;;* FUNCTION	: WAIT UNTIL A MESSAGE IS SENT TO THE SPECIFIED SEMAPHORE
;;*
;;* INPUTS	: QUEU_NO : NO.OF SEMAPHORE QUEUE
;;*
;;* OUTPUTS	: BUF_PTR : POINTER TO MESSAGE BUFFER
;;**************************************************************************
;	GETMES PROCEDURE
	GLOBAL GETMES
;		ENTRY
GETMES:
		PLZVAR
		PLZIN	QUEU5_NO
		PLZOUT	BUF5_PTR
		ENT 0
		LD	DE,SYSRAM+240H								;LOAD START OF Q.H.
		LD	H,0H
		GETBYTE   L, QUEU5_NO							;QUEU_NO * 8
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,DE										;ADD OF QUEU
		LD	(SYSRAM+0E2H),HL							;TO BE USET
		PUSH	IX
		CALL	RECI
		CALL	MESADD
		POP		IX
		PUTWORD BUF5_PTR, D E							;ADD OF MESS.
		RTN 1
;	END	GETMES
	RET
;;
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: PUTMES
;;*
;;* FUNCTION	: THE MESSAGE BUFFER IS SENT TO THE SPECIFIED SEMAPHORE
;;*
;;* INPUTS	: QUEU_NO : NO.OF SEMAPHORE QUEUE
;;*		  BUF_PTR : POINTER TO MESSAGE BUFFER
;;*
;;* OUTPUTS	: NONE
;;**************************************************************************
;	PUTMES PROCEDURE
	GLOBAL PUTMES
;		ENTRY
PUTMES:
		PLZVAR
		PLZIN	QUEU6_NO BUF6_PTR
		ENT 0
		LD	DE,SYSRAM+240H								;LOAD START OF Q.H.
		LD	H,0H
		GETBYTE   L ,QUEU6_NO							;QUEU_NO * 8
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD HL,DE										;ADD OF QUEU
		GETWORD D E , BUF6_PTR							;GET BUF_PTR
		PUSH	IX
		CALL SUBSEN										
		POP		IX
		RTN 2
;	END PUTMES
	RET
;;
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: WAIT
;;*
;;* FUNCTION	: THE PROCESS IS HANGED ON THE SPECIFIED SEMAPHORE UNTIL A
;;*		  SIGNAL IS RECEIVED
;;*
;;* INPUTS	: QUEU_NO : NO.OF SEMAPHORE QUEUE
;;*
;;* OUTPUTS	: NONE
;;**************************************************************************
;	WAIT PROCEDURE
	GLOBAL WAIT
;		ENTRY
WAIT:
		PLZVAR
		PLZIN	QUEU7_NO
		ENT 0
		LD	DE,SYSRAM+240H								;LOAD START OF Q.H.
		LD	H,0H
		GETBYTE   L, QUEU7_NO							;QUEU_NO * 8
		ADD	HL,HL											; = AKTUAL SEMAPHOR
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,DE										;ADD OF QUEU
		LD	(SYSRAM+0E4H),HL							;TO BE USET
		PUSH	IX
		CALL WAI
		POP		IX
		RTN 1
;	END	WAIT
	RET
;;
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: SIGNAL
;;*
;;* FUNCTION	: A SIGNAL IS SENT TO THE SPECIFIED SEMAPHORE
;;*
;;* INPUTS	: QUEU_NO : NO.OF SEMAPHORE QUEUE
;;*
;;* OUTPUTS	: NONE
;;**************************************************************************
;	SIGNAL PROCEDURE
	GLOBAL SIGNAL
;		ENTRY
SIGNAL:
		PLZVAR
		PLZIN	QUEU8_NO
		ENT 0
		LD	DE,SYSRAM+240H								;LOAD START OF Q.H.
		LD	H,0H
		GETBYTE   L, QUEU8_NO							;QUEU_NO * 8
		ADD	HL,HL											; = AKTUAL SEMAPHOR
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,DE										;ADD OF QUEU
		PUSH	IX
		CALL	SIG										; TO BE USET
		POP		IX
		RTN 1
;	END SIGNAL
	RET
;;
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: REST
;;*
;;* FUNCTION	: THE CALLING PROCESS IS SCHEDULED
;;*
;;* INPUTS	: NONE
;;*
;;* OUTPUTS	: NONE
;;**************************************************************************
;	REST PROCEDURE
	GLOBAL REST
;		ENTRY
REST:
		PLZVAR
		ENT 0
		PUSH	IX
		CALL SRELEA
		POP		IX
		RTN 0
;	END REST
	RET
; 
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: OVLDET
;;*
;;* FUNCTION	: IF MORE THAN 3 BUFFERS IN SPECIFIED QUEUE, OVERLOAD
;;*		  STATUS IS INDICATED
;;*
;;* INPUTS	: P       : POINTER TO PARAMETER TABLE
;;*
;;* OUTPUTS	: STATUS  : STATUS OF OVERLOAD CONDITION
;;*			STATUS = 00H : NO OVERLOAD
;;*			STATUS = FFH : OVERLOAD
;;**************************************************************************
;	OVLDET PROCEDURE
	GLOBAL OVLDET
;	ENTRY
OVLDET:
		PLZVAR
		PLZIN	PTAB
		PLZOUT	STATUS
		ENT 0
		GETWORD H L,PTAB
		LD DE,CR80QUEU_OFFSET
		ADD HL,DE
		LD A,(HL)
		LD L,A
		LD H,0
		LD	DE, SYSRAM+240H
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,DE
		INC	HL
		LD	A,(HL)
		CP 03	
;		IF	M THEN
	JP P,FI19
			LD A,NO_OVL
;		ELSE
	JP FI1A
FI19:
			LD	A,OVL
;		FI
FI1A:
		PUTBYTE	STATUS, A
		RTN 1
;	END OVLDET
	RET
; 
;;ECHO \f


;;**************************************************************************
;;* PROCEDURE	: POLOVL
;;*
;;* FUNCTION	: IF LESS THAN 4 BUFFERS IN SPECIFIED EMPTY QUEUE, OVERLOAD
;;*		  STATUS IS INDICATED
;;*
;;* INPUTS	: P       : POINTER TO PARAMETER TABLE
;;*
;;* OUTPUTS	: STATUS  : STATUS OF OVERLOAD CONDITION
;;*			STATUS = 00H : NO OVERLOAD
;;*			STATUS = FFH : OVERLOAD
;;**************************************************************************
;	POLOVL PROCEDURE
	GLOBAL POLOVL
;	ENTRY
POLOVL:
		PLZVAR
		PLZIN	PTAB1
		PLZOUT	STAT1
		ENT	0
		GETWORD	H L,PTAB1
		LD	DE,EMPTYQUEU_OFFSET
		ADD	HL,DE
		LD	E,(HL)
		INC	HL
		LD	D,(HL)
		INC	DE
		LD	A,(DE)
		CP	4
;		IF	NC THEN
	JP C,FI1B
			LD	A,NO_OVL
;		ELSE
	JP FI1C
FI1B:
			LD	A,OVL
;		FI
FI1C:
		PUTBYTE	STAT1,A
		RTN	1
;	END POLOVL
	RET
;;ECHO \f


;;***************************************************************************
;;* PROCEDURE(S)	: PWQBUF (TRQBUF)
;;*
;;* FUNCTION	: GETS BUFFER WITH SPECIFIED CLUSTER ADDRESS FROM SPECIFIED
;;*		  BUFFER QUEUE
;;*
;;* INPUTS	: CAD1         : FIRST BYTE OF CLUSTER ADDRESS
;;*		  CAD2	       : SECOND BYTE OF CLUSTER ADDRESS
;;*		  QUEU_ADDRESS : POINTER TO BUFFER QUEUE
;;*
;;* OUTPUTS	: BUF_PTR  = NIL : NO BUFFER AVAILABLE
;;*		  BUF_PTR <> NIL : POINTER TO BUFFER
;;***************************************************************************
;   PWQBUF PROCEDURE
	GLOBAL PWQBUF
;   ENTRY
PWQBUF:
   	PLZVAR
   	PLZIN  C1,C2,QH1
   	PLZOUT BUF10_PTR
   	ENT 0
   	GETBYTE C,C1
   	GETBYTE B,C2
   	GETWORD H L, QH1
   	DI
   	PUSH	IX
	LD	A,C
	OR	B
;	IF A
;	CASE 0 THEN
	CP 0
	JR Z,BC1E
	JP EC1E
BC1E:
		CALL SUBDEQ
;	ELSE
	JP FI1D
EC1E:
		CALL SUBXDQ
;	FI
FI1D:
   	POP	IX
   	EI
;   	IF	NC	THEN
	JP C,FI1F
		LD	DE,00H
;   	FI
FI1F:
   	PUTWORD BUF10_PTR, D E
	RTN 3
;   END PWQBUF
	RET
; 
; 
;   TRQBUF PROCEDURE
	GLOBAL TRQBUF
;   ENTRY
TRQBUF:
   	PLZVAR
   	PLZIN  C3,C4,QH2
   	PLZOUT BUF11_PTR
   	ENT 0
   	GETBYTE C,C3
   	GETBYTE B,C4
   	GETWORD H L, QH2
   	DI
   	PUSH	IX
	LD	A,C
	OR	B
;	IF A
;	CASE 0 THEN
	CP 0
	JR Z,BC21
	JP EC21
BC21:
		CALL SUBDEQ
;	ELSE
	JP FI20
EC21:
		CALL SUBXDQ
;	FI
FI20:
   	POP	IX
   	EI
;   	IF	NC	THEN
	JP C,FI22
		LD	DE,00H
;   	FI
FI22:
   	PUTWORD BUF11_PTR, D E
	RTN 3
;   END TRQBUF
	RET
;;ECHO \f


;;****************************************************************************
;;* PROCEDURE	: TDELAY
;;*
;;* FUNCTION	: MAKES A 12.5 - 25.0 MSEC TRANSMISSION DELAY
;;*
;;* INPUTS	: CH_NO : NUMBER OF CHANNEL
;;*
;;* OUTPUTS	: NONE
;;*****************************************************************************
;   TDELAY PROCEDURE
	GLOBAL TDELAY
;   ENTRY
TDELAY:
      PLZVAR
      PLZIN CHA_NO
      ENT 0
      GETBYTE E,CHA_NO
      LD A,TRA_DEL
      BIT 0,E
;      IF Z THEN
	JP NZ,FI23
	 BIT 1,E
;	 IF Z THEN
	JP NZ,FI24
	    LD (RCT4CH),A
;	 ELSE
	JP FI25
FI24:
	    LD (RCT2CH),A
;	 FI
FI25:
;      ELSE
	JP FI26
FI23:
	 BIT 1,E
;	 IF Z THEN
	JP NZ,FI27
	    LD (RCT1CH),A
;	 ELSE
	JP FI28
FI27:
	    LD (RCT3CH),A
;	 FI
FI28:
;      FI
FI26:
; 
;      DO
DO29:
	 PUSH IX
	 CALL SRELEA
	 POP IX
; 
	 GETBYTE E,CHA_NO
	 BIT 0,E
;	 IF Z THEN
	JP NZ,FI2A
	    BIT 1,E
;	    IF Z THEN
	JP NZ,FI2B
	       LD A,(RCT4CH)
;	    ELSE
	JP FI2C
FI2B:
	       LD A,(RCT2CH)
;	    FI
FI2C:
;	 ELSE
	JP FI2D
FI2A:
	    BIT 1,E
;	    IF Z THEN
	JP NZ,FI2E
	       LD A,(RCT1CH)
;	    ELSE
	JP FI2F
FI2E:
	       LD A,(RCT3CH)
;	    FI
FI2F:
;	 FI
FI2D:
	 AND A
;	 IF Z THEN EXIT FI
	JP NZ,FI30
	JP OD29
FI30:
;      OD
	JP DO29
OD29:
      RTN 1
;   END TDELAY
	RET
; 
;END PLZ_QUEU
	END
«eof»