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: 11020 (0x2b0c) Types: TextFile Names: »PLZ.QUEU.ASM«
└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ ) └─ ⟦this⟧ »PLZ.QUEU.ASM«
;**************************************************************************** ;* ;* PLZ_QUEU MODULE ;* ;**************************************************************************** PLZ_QUEU MODULE *INCLUDE PLZ.MACROS ; CONSTANT OVL := 0FFH NO_OVL := 0 TRA_DEL := 2 CR80QUEU_OFFSET := 0 EMPTYQUEU_OFFSET := 20 ; EXTERNAL SUBENQ SIG WAI SYSRAM RECI SUBSEN SRELEA MESADD SUBDEQ SUBXDQ ; GLOBAL RCT1CH,RCT2CH,RCT3CH,RCT4CH WORD ; GLOBAL ;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 ENTRY PLZVAR PLZIN QUEU_ADDRESS PLZOUT BUF_PTR ENT 0 DO GETWORD H L,QUEU_ADDRESS DI PUSH IX CALL SUBDEQ POP IX EI IF C THEN PUTWORD BUF_PTR, D E EXIT ELSE PUSH IX CALL SRELEASE POP IX FI OD RTN 1 END GETBUF ; ;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 ENTRY 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 PUTPWQ PROCEDURE ENTRY 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 PUTTRQ PROCEDURE ENTRY 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 ; ;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 ENTRY 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 BIT 0,E IF Z THEN BIT 1,E IF Z THEN LD (RCT4CH),A ELSE LD (RCT2CH),A FI ELSE BIT 1,E IF Z THEN LD (RCT1CH),A ELSE LD (RCT3CH),A FI FI FI LD B,0 DO 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 LD (SYSRAM+0E2H),HL PUSH IX CALL RECI POP IX CALL MESADD IF C THEN PUTWORD BUF4_PTR, D E LD B,1 ELSE LD B,0 FI ELSE GETBYTE A,MAKS4_DELAY AND A IF NZ THEN GETBYTE E,CHA4_NO BIT 0,E IF Z THEN BIT 1,E IF Z THEN LD A,(RCT4CH) ELSE LD A,(RCT2CH) FI ELSE BIT 1,E IF Z THEN LD A,(RCT1CH) ELSE LD A,(RCT3CH) FI FI AND A IF Z THEN LD DE,00 PUTWORD BUF4_PTR,D E LD B,1 FI FI FI LD A,B AND A IF NZ THEN EXIT ELSE PUSH BC PUSH IX CALL SRELEA POP IX POP BC FI OD RTN 3 END RECX ;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 ENTRY 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 ; ;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 ENTRY 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 ; ;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 ENTRY 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 ; ;ECHO \f ;************************************************************************** ;* PROCEDURE : SIGNAL ;* ;* FUNCTION : A SIGNAL IS SENT TO THE SPECIFIED SEMAPHORE ;* ;* INPUTS : QUEU_NO : NO.OF SEMAPHORE QUEUE ;* ;* OUTPUTS : NONE ;************************************************************************** SIGNAL PROCEDURE ENTRY 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 ; ;ECHO \f ;************************************************************************** ;* PROCEDURE : REST ;* ;* FUNCTION : THE CALLING PROCESS IS SCHEDULED ;* ;* INPUTS : NONE ;* ;* OUTPUTS : NONE ;************************************************************************** REST PROCEDURE ENTRY PLZVAR ENT 0 PUSH IX CALL SRELEA POP IX RTN 0 END REST ;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 ENTRY 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 LD A,NO_OVL ELSE LD A,OVL FI PUTBYTE STATUS, A RTN 1 END OVLDET ;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 ENTRY 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 LD A,NO_OVL ELSE LD A,OVL FI PUTBYTE STAT1,A RTN 1 END POLOVL ;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 ENTRY 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 CALL SUBDEQ ELSE CALL SUBXDQ FI POP IX EI IF NC THEN LD DE,00H FI PUTWORD BUF10_PTR, D E RTN 3 END PWQBUF TRQBUF PROCEDURE ENTRY 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 CALL SUBDEQ ELSE CALL SUBXDQ FI POP IX EI IF NC THEN LD DE,00H FI PUTWORD BUF11_PTR, D E RTN 3 END TRQBUF ;ECHO \f ;**************************************************************************** ;* PROCEDURE : TDELAY ;* ;* FUNCTION : MAKES A 12.5 - 25.0 MSEC TRANSMISSION DELAY ;* ;* INPUTS : CH_NO : NUMBER OF CHANNEL ;* ;* OUTPUTS : NONE ;***************************************************************************** TDELAY PROCEDURE ENTRY PLZVAR PLZIN CHA_NO ENT 0 GETBYTE E,CHA_NO LD A,TRA_DEL BIT 0,E IF Z THEN BIT 1,E IF Z THEN LD (RCT4CH),A ELSE LD (RCT2CH),A FI ELSE BIT 1,E IF Z THEN LD (RCT1CH),A ELSE LD (RCT3CH),A FI FI DO PUSH IX CALL SRELEA POP IX GETBYTE E,CHA_NO BIT 0,E IF Z THEN BIT 1,E IF Z THEN LD A,(RCT4CH) ELSE LD A,(RCT2CH) FI ELSE BIT 1,E IF Z THEN LD A,(RCT1CH) ELSE LD A,(RCT3CH) FI FI AND A IF Z THEN EXIT FI OD RTN 1 END TDELAY END PLZ_QUEU ;ECHO \f