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: 12904 (0x3268) Types: TextFile Names: »PLZ.QUEU.S«
└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ ) └─ ⟦this⟧ »PLZ.QUEU.S«
;;**************************************************************************** ;;* ;;* 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»