|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 9184 (0x23e0)
Types: TextFile
Notes: Mikados_K
Names: »SENDM.K«
└─⟦33b8385fd⟧ Bits:30009009 PSAP1
└─⟦this⟧ »SENDM.K«
;*************************************************************
;* PASCAL STANDARD ASSEMBLER PACKAGE. *
;* *
;* (C) 1980 DANSK DATA ELEKTRONIK APS. *
;*************************************************************
;
;*************************************************************
;* PROCEDURE NAME: SENDM *
;*************************************************************
;
; CT 07-MAY-1980
;
;=============================================================
; DESCRIPTION:
; THIS PROCEDURE SENDS A MESSAGE TO THE MAIN SEMAPHORE OF
; ANOTHER PROCESS.
; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL
; SECTION 4.1 FOR DETAILS.
;
;-------------------------------------------------------------
; STACK CONTENTS ON ENTRY: I I
; I---------------I
; I RETURN ADR. I
; I---------------I
; I -> STATUS I
; I---------------I
; I LENGTH I
; I---------------I
; I -> CONTENTS I
; I---------------I
; I -> RECVR. PCB I
; I---------------I
; I I
;-------------------------------------------------------------
; STACK CONTENTS ON EXIT: EMPTY
;-------------------------------------------------------------
; THE MESSAGE IS EXCHANGED IN A MESSAGE BUFFER.
; BYTES 0-1 OF THE MESSAGE BUFFER WILL CONTAIN THE ADDRESS OF
; THE PCB OF THE SENDING PROCESS (NOTE: BYTES 0-1 DO NOT
; CONTAIN THE ADDRESS A SEMAPHORE).
; BYTE 3 OF THE MESSAGE BUFFER WILL CONTAIN 'LENGTH'.
; IF LENGTH <= 10 BYTES 4-13 OF THE MESSAGE BUFFER WILL
; CONTAIN THE MESSAGE.
; IF LENGTH > 10 A DATA AREA IS ALLOCATED IN WHICH THE
; MESSAGE WILL BE STORED.
; BYTES 4-5 OF THE MESSAGE BUFFER WILL
; CONTAIN THE ADDRESS OF THE MESSAGE.
; BYTES 6-7 OF THE MESSAGE BUFFER WILL
; CONTAIN THE ACTUAL NUMBER OF BYTES
; ALLOCATED.
;=============================================================
SKIP
SYMB
SENDM::
;
;GET PARAMETERS
;
POP B ;BC=RETURN ADDRESS
POP H ;HL->STATUS
SHLD STAPTR
POP H ;HL=LENGTH
SHLD LENGTH
POP H ;HL->CONTENTS
SHLD CONPTR
POP H ;HL->RECEIVER PCB
SHLD RECPTR
PUSH B ;RESTORE RETURN ADDRESS
;
;IS LENGTH LEGAL (I.E. LENGTH <= 255)?
;
LDA LENGTH+1 ;THE CONTENTS OF LENGTH+1 IS NOT ZERO
; IF LENGTH>255
ANA A ;LENGTH OK?
JNZ LENLON ;NO, GO FINISH UP
;
;TEST IF THERE ARE ANY MESSAGES AVAILABLE ON THE POOL
;SEMAPHORE
;
LXI H,POOL+1 ;HL->LENGTH FIELD OF SEMAPHORE
MOV A,M ;A:=NUMBER OF AVAILABLE MESSAGES
CPI 3 ;LESS THAN 3?
JC NOMES ;YES. WE DARE NOT GET A MESSAGE
;
;GET MESSAGE BUFFER FROM POOL SEMAPHORE
;
LXI B,POOL
CALL FÅBUF
;
;SAVE ADDRESS OF MESSAGE BUFFER, AND STORE THE ADDRESS OF THE
;PCB IN BYTES 0-1 OF THE MESSAGE BUFFER AND THE
;LENGTH IN BYTE 3 OF THE BUFFER
;
PUSH H ;SAVE ADDRESS OF MESSAGE BUFFER
LHLD RUNN ;HL->PCB OF SENDING PROCESS
MOV A,L ;STORE
STAX D ; ADDRESS
INX D ; OF
MOV A,H ; PCB
STAX D
INX D
INX D ;DE->LENGTH FIELD (BYTE 3)
LDA LENGTH
STAX D ;STORE LENGTH IN LENGTH FIELD
INX D ;DE->BYTE 4. IF LENGTH > 10 THIS BYTE
; (TOGETHER WITH BYTE 5) WILL CONTAIN
; A BUFFER POINTER. IF LENGTH <= 10
; THIS BYTE WILL BE THE FIRST BYTE
; CONTAINING THE MESSAGE
PUSH D ;SAVE THE ADDRESS OF BYTE 4
;
;DECIDE IF LENGTH <= 10 OR LENGTH > 10
;
CPI #11 ;LENGTH<11?
JC SHORT ;YES, THERE IS NO NEED TO ALLOCATE
;
;ALLOCATE A DATA AREA FOR THE MESSAGE
;
LHLD LENGTH ;HL:=LENGTH
CALL ALLOC ;ALLOCATE
SHLD LENGTH ;STORE THE LENGTH ACTUALLY ALLOCATED
XCHG ;HL->DATA AREA (HL=0 IF
; ALLOCATION FAILED)
CALL TESTH ;ALLOCATION FAILED?
JZ NOAL ;YES, GO FINISH UP
XCHG ;DE->ALLOCATED DATA AREA
POP H ;HL->BYTES 4-5 OF MESSAGE BUFFER (THESE
; BYTES ARE TO CONTAIN THE ADDRESS OF
; THE MESSAGE)
PUSH D ;SAVE THE ADDRESS OF THE MESSAGE
MOV M,E ;STORE THE
INX H ; ADDRESS OF THE MESSAGE
MOV M,D ; IN BYTES 4-5 OF THE MESSAGE BUFFER
INX H ;HL->BYTES 6-7 OF MESSAGE BUFFER (THESE
; BYTES ARE TO CONTAIN THE LENGTH OF
; THE ACTUALLY ALLOCATED DATA AREA)
XCHG ;DE:=
LHLD LENGTH ; THE LENGTH OF
XCHG ; THE ALLOCATED DATA AREA
MOV M,E ;STORE THE
INX H ; LENGTH OF THE DATA AREA
MOV M,D ; IN BYTES 6-7 OF THE MESSAGE BUFFER
;
;EVERYTHING IS NOW READY FOR THE TRANSFER OF THE CONTENTS
;PARAMETER TO THE MESSAGE.
;IF THE MESSAGE LENGTH <= 10 THE TOPMOST ELEMENT ON THE STACK
; CONTAINS THE ADDRESS OF BYTE 4 OF THE MESSAGE BUFFER.
;IF THE MESSAGE LENGTH > 10 THE TOPMOST ELEMENT ON THE STACK
; CONTAINS THE ADDRESS OF THE ALLOCATED DATA AREA.
;IN EITHER CASE THE TOPMOST ELEMENT ON THE STACK CONTAINS THE
; ADDRESS OF THE LOCATION WHERE THE MESSAGE SHOULD BE
; STORED.
;
SHORT: LHLD CONPTR ;HL->CONTENTS
POP D ;DE->LOCATION WHERE CONTENTS SHOULD BE
; STORED
XCHG ;DE->SOURCE, HL->DESTINATION FOR MOVE
LDA LENGTH ;A:=LENGTH OF MESSAGE (PLUS POSSIBLY A
; FEW EXTRA BYTES ALLOCATED, BUT THIS
; IS IRRELEVANT)
MOV B,A ;B:=LENGTH OF MESSAGE
CALL MOVE ;MOVE THE MESSAGE
;
;SEND THE MESSAGE BUFFER
;
LHLD RECPTR ;HL->PCB OF RECEIVING PROCESS
LXI B,KOSEM
DAD B ;HL->ADDRESS OF MAIN SEMAPHORE OF
; RECEIVING PROCESS
MOV C,M ;BC->MAIN SEMAPHORE
INX H ; OF THE
MOV B,M ; RECEIVING PROCESS
POP H ;HL->MESSAGE BUFFER
CALL SEND ;SEND IT!
;
;STATUS:=0 TO INDICATE SUCCESS
;
LHLD STAPTR ;HL->STATUS
XRA A ;A:=0
MOV M,A ;STATUS
INX H ; :=
MOV M,A ; 0
RET
SKIP
;
;COME HERE IF LENGTH IS ILLEGAL. STATUS:=2
;
LENLON:LHLD STAPTR ;HL->STATUS
MVI M,2 ;STATUS
INX H ; :=
MVI M,0 ; 2
RET
;
;COME HERE IF ALLOCATION FAILED. STATUS:=1
;
NOAL: LHLD STAPTR ;HL->STATUS
MVI M,1 ;STATUS
INX H ; :=
MVI M,0 ; 1
;
;RETURN MESSAGE BUFFER TO POOL SEMAPHORE
;
POP H ;SKIP ADDRESS OF BYTE 4 OF MESS. BUFFER
POP H ;HL->MESSAGE BUFFER
LXI B,POOL ;BL->POOL SEMAPHORE
CALL SEND ;SEND IT BACK
RET
;
;COME HERE IF THERE WERE NO MESSAGES AVAILABLE. STATUS=3
;
NOMES: LHLD STAPTR ;HL->STATUS
MVI M,3 ;STATUS
INX H ; :=
MVI M,0 ; 3
RET
SKIP
;***** LOCAL DATA *****
STAPTR:DS 2 ;ADDRESS OF STATUS
LENGTH:DS 2 ;LENGTH OF MESSAGE
CONPTR:DS 2 ;ADDRESS OF CONTENTS
RECPTR:DS 2 ;ADDRESS OF PCB OF RECEIVING PROCESS
END
0x0000…0040 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0040…0080 Line {l1=0x3e, l2=»;* PASCAL STANDARD ASSEMBLER PACKAGE. *«, l3=0x3e}
0x0080…00c0 Line {l1=0x3e, l2=»;* *«, l3=0x3e}
0x00c0…0100 Line {l1=0x3e, l2=»;* (C) 1980 DANSK DATA ELEKTRONIK APS. *«, l3=0x3e}
0x0100…0140 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0140…0143 Line {l1=0x01, l2=»;«, l3=0x01}
0x0143…0183 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0183…01c3 Line {l1=0x3e, l2=»;* PROCEDURE NAME: SENDM *«, l3=0x3e}
0x01c3…0203 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0203…0206 Line {l1=0x01, l2=»;«, l3=0x01}
0x0206…0218 Line {l1=0x10, l2=»; CT 07-MAY-1980«, l3=0x10}
0x0218…021b Line {l1=0x01, l2=»;«, l3=0x01}
0x021b…025b Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x025b…026b Line {l1=0x0e, l2=»; DESCRIPTION:«, l3=0x0e}
0x026b…02a6 Line {l1=0x39, l2=»; THIS PROCEDURE SENDS A MESSAGE TO THE MAIN SEMAPHORE OF«, l3=0x39}
0x02a6…02ba Line {l1=0x12, l2=»; ANOTHER PROCESS.«, l3=0x12}
0x02ba…02fa Line {l1=0x3e, l2=»; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL«, l3=0x3e}
0x02fa…0316 Line {l1=0x1a, l2=»; SECTION 4.1 FOR DETAILS.«, l3=0x1a}
0x0316…0319 Line {l1=0x01, l2=»;«, l3=0x01}
0x0319…0359 Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x0359…038b Line {l1=0x30, l2=»; STACK CONTENTS ON ENTRY: I I«, l3=0x30}
0x038b…03bd Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x03bd…03ef Line {l1=0x30, l2=»; I RETURN ADR. I«, l3=0x30}
0x03ef…0421 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x0421…0453 Line {l1=0x30, l2=»; I -> STATUS I«, l3=0x30}
0x0453…0485 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x0485…04b7 Line {l1=0x30, l2=»; I LENGTH I«, l3=0x30}
0x04b7…04e9 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x04e9…051b Line {l1=0x30, l2=»; I -> CONTENTS I«, l3=0x30}
0x051b…054d Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x054d…057f Line {l1=0x30, l2=»; I -> RECVR. PCB I«, l3=0x30}
0x057f…05b1 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x05b1…05e3 Line {l1=0x30, l2=»; I I«, l3=0x30}
0x05e3…0623 Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x0623…0649 Line {l1=0x24, l2=»; STACK CONTENTS ON EXIT: EMPTY«, l3=0x24}
0x0649…0689 Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x0689…06ba Line {l1=0x2f, l2=»; THE MESSAGE IS EXCHANGED IN A MESSAGE BUFFER.«, l3=0x2f}
0x06ba…06fa Line {l1=0x3e, l2=»; BYTES 0-1 OF THE MESSAGE BUFFER WILL CONTAIN THE ADDRESS OF «, l3=0x3e}
0x06fa…0734 Line {l1=0x38, l2=»; THE PCB OF THE SENDING PROCESS (NOTE: BYTES 0-1 DO NOT«, l3=0x38}
0x0734…0759 Line {l1=0x23, l2=»; CONTAIN THE ADDRESS A SEMAPHORE).«, l3=0x23}
0x0759…0790 Line {l1=0x35, l2=»; BYTE 3 OF THE MESSAGE BUFFER WILL CONTAIN 'LENGTH'.«, l3=0x35}
0x0790…07c9 Line {l1=0x37, l2=»; IF LENGTH <= 10 BYTES 4-13 OF THE MESSAGE BUFFER WILL«, l3=0x37}
0x07c9…07f1 Line {l1=0x26, l2=»; CONTAIN THE MESSAGE.«, l3=0x26}
0x07f1…082a Line {l1=0x37, l2=»; IF LENGTH > 10 A DATA AREA IS ALLOCATED IN WHICH THE«, l3=0x37}
0x082a…0855 Line {l1=0x29, l2=»; MESSAGE WILL BE STORED.«, l3=0x29}
0x0855…088d Line {l1=0x36, l2=»; BYTES 4-5 OF THE MESSAGE BUFFER WILL«, l3=0x36}
0x088d…08c4 Line {l1=0x35, l2=»; CONTAIN THE ADDRESS OF THE MESSAGE.«, l3=0x35}
0x08c4…08fc Line {l1=0x36, l2=»; BYTES 6-7 OF THE MESSAGE BUFFER WILL«, l3=0x36}
0x08fc…0932 Line {l1=0x34, l2=»; CONTAIN THE ACTUAL NUMBER OF BYTES«, l3=0x34}
0x0932…0950 Line {l1=0x1c, l2=»; ALLOCATED.«, l3=0x1c}
0x0950…0990 Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x0990…0999 Line {l1=0x07, l2=» «, l3=0x07}
0x0999…09a6 Line {l1=0x0b, l2=» SKIP«, l3=0x0b}
0x09a6…09b3 Line {l1=0x0b, l2=» SYMB«, l3=0x0b}
0x09b3…09b6 Line {l1=0x01, l2=» «, l3=0x01}
0x09b6…09bf Line {l1=0x07, l2=»SENDM::«, l3=0x07}
0x09bf…09c2 Line {l1=0x01, l2=» «, l3=0x01}
0x09c2…09c5 Line {l1=0x01, l2=»;«, l3=0x01}
0x09c5…09d6 Line {l1=0x0f, l2=»;GET PARAMETERS«, l3=0x0f}
0x09d6…09d9 Line {l1=0x01, l2=»;«, l3=0x01}
0x09d9…0a04 Line {l1=0x29, l2=» POP B ;BC=RETURN ADDRESS«, l3=0x29}
0x0a04…0a28 Line {l1=0x22, l2=» POP H ;HL->STATUS«, l3=0x22}
0x0a28…0a3f Line {l1=0x15, l2=» SHLD STAPTR«, l3=0x15}
0x0a3f…0a62 Line {l1=0x21, l2=» POP H ;HL=LENGTH«, l3=0x21}
0x0a62…0a79 Line {l1=0x15, l2=» SHLD LENGTH«, l3=0x15}
0x0a79…0a9f Line {l1=0x24, l2=» POP H ;HL->CONTENTS«, l3=0x24}
0x0a9f…0ab6 Line {l1=0x15, l2=» SHLD CONPTR«, l3=0x15}
0x0ab6…0ae0 Line {l1=0x28, l2=» POP H ;HL->RECEIVER PCB«, l3=0x28}
0x0ae0…0af7 Line {l1=0x15, l2=» SHLD RECPTR«, l3=0x15}
0x0af7…0b27 Line {l1=0x2e, l2=» PUSH B ;RESTORE RETURN ADDRESS«, l3=0x2e}
0x0b27…0b2a Line {l1=0x01, l2=» «, l3=0x01}
0x0b2a…0b2d Line {l1=0x01, l2=»;«, l3=0x01}
0x0b2d…0b55 Line {l1=0x26, l2=»;IS LENGTH LEGAL (I.E. LENGTH <= 255)?«, l3=0x26}
0x0b55…0b58 Line {l1=0x01, l2=»;«, l3=0x01}
0x0b58…0b97 Line {l1=0x3d, l2=» LDA LENGTH+1 ;THE CONTENTS OF LENGTH+1 IS NOT ZERO«, l3=0x3d}
0x0b97…0bc2 Line {l1=0x29, l2=» ; IF LENGTH>255«, l3=0x29}
0x0bc2…0be7 Line {l1=0x23, l2=» ANA A ;LENGTH OK?«, l3=0x23}
0x0be7…0c12 Line {l1=0x29, l2=» JNZ LENLON ;NO, GO FINISH UP«, l3=0x29}
0x0c12…0c15 Line {l1=0x01, l2=» «, l3=0x01}
0x0c15…0c18 Line {l1=0x01, l2=»;«, l3=0x01}
0x0c18…0c4f Line {l1=0x35, l2=»;TEST IF THERE ARE ANY MESSAGES AVAILABLE ON THE POOL«, l3=0x35}
0x0c4f…0c5b Line {l1=0x0a, l2=»;SEMAPHORE«, l3=0x0a}
0x0c5b…0c5e Line {l1=0x01, l2=»;«, l3=0x01}
0x0c5e…0c96 Line {l1=0x36, l2=» LXI H,POOL+1 ;HL->LENGTH FIELD OF SEMAPHORE«, l3=0x36}
0x0c96…0cd0 Line {l1=0x38, l2=» MOV A,M ;A:=NUMBER OF AVAILABLE MESSAGES«, l3=0x38}
0x0cd0…0cf7 Line {l1=0x25, l2=» CPI 3 ;LESS THAN 3?«, l3=0x25}
0x0cf7…0d30 Line {l1=0x37, l2=» JC NOMES ;YES. WE DARE NOT GET A MESSAGE«, l3=0x37}
0x0d30…0d33 Line {l1=0x01, l2=» «, l3=0x01}
0x0d33…0d36 Line {l1=0x01, l2=»;«, l3=0x01}
0x0d36…0d5f Line {l1=0x27, l2=»;GET MESSAGE BUFFER FROM POOL SEMAPHORE«, l3=0x27}
0x0d5f…0d62 Line {l1=0x01, l2=»;«, l3=0x01}
0x0d62…0d79 Line {l1=0x15, l2=» LXI B,POOL«, l3=0x15}
0x0d79…0d8f Line {l1=0x14, l2=» CALL FÅBUF«, l3=0x14}
0x0d8f…0d92 Line {l1=0x01, l2=» «, l3=0x01}
0x0d92…0d95 Line {l1=0x01, l2=»;«, l3=0x01}
0x0d95…0dd4 Line {l1=0x3d, l2=»;SAVE ADDRESS OF MESSAGE BUFFER, AND STORE THE ADDRESS OF THE«, l3=0x3d}
0x0dd4…0e05 Line {l1=0x2f, l2=»;PCB IN BYTES 0-1 OF THE MESSAGE BUFFER AND THE«, l3=0x2f}
0x0e05…0e26 Line {l1=0x1f, l2=»;LENGTH IN BYTE 3 OF THE BUFFER«, l3=0x1f}
0x0e26…0e29 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e29…0e61 Line {l1=0x36, l2=» PUSH H ;SAVE ADDRESS OF MESSAGE BUFFER«, l3=0x36}
0x0e61…0e95 Line {l1=0x32, l2=» LHLD RUNN ;HL->PCB OF SENDING PROCESS«, l3=0x32}
0x0e95…0eb4 Line {l1=0x1d, l2=» MOV A,L ;STORE«, l3=0x1d}
0x0eb4…0ed7 Line {l1=0x21, l2=» STAX D ; ADDRESS«, l3=0x21}
0x0ed7…0ef7 Line {l1=0x1e, l2=» INX D ; OF«, l3=0x1e}
0x0ef7…0f1a Line {l1=0x21, l2=» MOV A,H ; PCB«, l3=0x21}
0x0f1a…0f2c Line {l1=0x10, l2=» STAX D«, l3=0x10}
0x0f2c…0f3e Line {l1=0x10, l2=» INX D«, l3=0x10}
0x0f3e…0f71 Line {l1=0x31, l2=» INX D ;DE->LENGTH FIELD (BYTE 3)«, l3=0x31}
0x0f71…0f88 Line {l1=0x15, l2=» LDA LENGTH«, l3=0x15}
0x0f88…0fbe Line {l1=0x34, l2=» STAX D ;STORE LENGTH IN LENGTH FIELD«, l3=0x34}
0x0fbe…0ffc Line {l1=0x3c, l2=» INX D ;DE->BYTE 4. IF LENGTH > 10 THIS BYTE«, l3=0x3c}
0x0ffc…103a Line {l1=0x3c, l2=» ; (TOGETHER WITH BYTE 5) WILL CONTAIN«, l3=0x3c}
0x103a…1076 Line {l1=0x3a, l2=» ; A BUFFER POINTER. IF LENGTH <= 10«, l3=0x3a}
0x1076…10b1 Line {l1=0x39, l2=» ; THIS BYTE WILL BE THE FIRST BYTE«, l3=0x39}
0x10b1…10e2 Line {l1=0x2f, l2=» ; CONTAINING THE MESSAGE«, l3=0x2f}
0x10e2…1116 Line {l1=0x32, l2=» PUSH D ;SAVE THE ADDRESS OF BYTE 4«, l3=0x32}
0x1116…1119 Line {l1=0x01, l2=» «, l3=0x01}
0x1119…111c Line {l1=0x01, l2=»;«, l3=0x01}
0x111c…1144 Line {l1=0x26, l2=»;DECIDE IF LENGTH <= 10 OR LENGTH > 10«, l3=0x26}
0x1144…1147 Line {l1=0x01, l2=»;«, l3=0x01}
0x1147…116b Line {l1=0x22, l2=» CPI #11 ;LENGTH<11?«, l3=0x22}
0x116b…11a6 Line {l1=0x39, l2=» JC SHORT ;YES, THERE IS NO NEED TO ALLOCATE«, l3=0x39}
0x11a6…11a9 Line {l1=0x01, l2=» «, l3=0x01}
0x11a9…11ac Line {l1=0x01, l2=»;«, l3=0x01}
0x11ac…11d3 Line {l1=0x25, l2=»;ALLOCATE A DATA AREA FOR THE MESSAGE«, l3=0x25}
0x11d3…11d6 Line {l1=0x01, l2=»;«, l3=0x01}
0x11d6…11fa Line {l1=0x22, l2=» LHLD LENGTH ;HL:=LENGTH«, l3=0x22}
0x11fa…121c Line {l1=0x20, l2=» CALL ALLOC ;ALLOCATE«, l3=0x20}
0x121c…1259 Line {l1=0x3b, l2=» SHLD LENGTH ;STORE THE LENGTH ACTUALLY ALLOCATED«, l3=0x3b}
0x1259…1289 Line {l1=0x2e, l2=» XCHG ;HL->DATA AREA (HL=0 IF«, l3=0x2e}
0x1289…12c4 Line {l1=0x39, l2=» ; ALLOCATION FAILED)«, l3=0x39}
0x12c4…12f0 Line {l1=0x2a, l2=» CALL TESTH ;ALLOCATION FAILED?«, l3=0x2a}
0x12f0…131b Line {l1=0x29, l2=» JZ NOAL ;YES, GO FINISH UP«, l3=0x29}
0x131b…134c Line {l1=0x2f, l2=» XCHG ;DE->ALLOCATED DATA AREA«, l3=0x2f}
0x134c…138c Line {l1=0x3e, l2=» POP H ;HL->BYTES 4-5 OF MESSAGE BUFFER (THESE«, l3=0x3e}
0x138c…13cb Line {l1=0x3d, l2=» ; BYTES ARE TO CONTAIN THE ADDRESS OF«, l3=0x3d}
0x13cb…13f3 Line {l1=0x26, l2=» ; THE MESSAGE)«, l3=0x26}
0x13f3…142c Line {l1=0x37, l2=» PUSH D ;SAVE THE ADDRESS OF THE MESSAGE«, l3=0x37}
0x142c…144f Line {l1=0x21, l2=» MOV M,E ;STORE THE«, l3=0x21}
0x144f…1481 Line {l1=0x30, l2=» INX H ; ADDRESS OF THE MESSAGE«, l3=0x30}
0x1481…14c1 Line {l1=0x3e, l2=» MOV M,D ; IN BYTES 4-5 OF THE MESSAGE BUFFER«, l3=0x3e}
0x14c1…1501 Line {l1=0x3e, l2=» INX H ;HL->BYTES 6-7 OF MESSAGE BUFFER (THESE«, l3=0x3e}
0x1501…153f Line {l1=0x3c, l2=» ; BYTES ARE TO CONTAIN THE LENGTH OF«, l3=0x3c}
0x153f…157c Line {l1=0x3b, l2=» ; THE ACTUALLY ALLOCATED DATA AREA)«, l3=0x3b}
0x157c…159a Line {l1=0x1c, l2=» XCHG ;DE:=«, l3=0x1c}
0x159a…15c3 Line {l1=0x27, l2=» LHLD LENGTH ; THE LENGTH OF«, l3=0x27}
0x15c3…15f8 Line {l1=0x33, l2=» XCHG ; THE ALLOCATED DATA AREA«, l3=0x33}
0x15f8…161b Line {l1=0x21, l2=» MOV M,E ;STORE THE«, l3=0x21}
0x161b…164e Line {l1=0x31, l2=» INX H ; LENGTH OF THE DATA AREA«, l3=0x31}
0x164e…168e Line {l1=0x3e, l2=» MOV M,D ; IN BYTES 6-7 OF THE MESSAGE BUFFER«, l3=0x3e}
0x168e…1691 Line {l1=0x01, l2=» «, l3=0x01}
0x1691…1694 Line {l1=0x01, l2=»;«, l3=0x01}
0x1694…16cf Line {l1=0x39, l2=»;EVERYTHING IS NOW READY FOR THE TRANSFER OF THE CONTENTS«, l3=0x39}
0x16cf…16eb Line {l1=0x1a, l2=»;PARAMETER TO THE MESSAGE.«, l3=0x1a}
0x16eb…172a Line {l1=0x3d, l2=»;IF THE MESSAGE LENGTH <= 10 THE TOPMOST ELEMENT ON THE STACK«, l3=0x3d}
0x172a…1768 Line {l1=0x3c, l2=»; CONTAINS THE ADDRESS OF BYTE 4 OF THE MESSAGE BUFFER.«, l3=0x3c}
0x1768…17a6 Line {l1=0x3c, l2=»;IF THE MESSAGE LENGTH > 10 THE TOPMOST ELEMENT ON THE STACK«, l3=0x3c}
0x17a6…17df Line {l1=0x37, l2=»; CONTAINS THE ADDRESS OF THE ALLOCATED DATA AREA.«, l3=0x37}
0x17df…181e Line {l1=0x3d, l2=»;IN EITHER CASE THE TOPMOST ELEMENT ON THE STACK CONTAINS THE«, l3=0x3d}
0x181e…185a Line {l1=0x3a, l2=»; ADDRESS OF THE LOCATION WHERE THE MESSAGE SHOULD BE«, l3=0x3a}
0x185a…186a Line {l1=0x0e, l2=»; STORED.«, l3=0x0e}
0x186a…186d Line {l1=0x01, l2=»;«, l3=0x01}
0x186d…1893 Line {l1=0x24, l2=»SHORT: LHLD CONPTR ;HL->CONTENTS«, l3=0x24}
0x1893…18d2 Line {l1=0x3d, l2=» POP D ;DE->LOCATION WHERE CONTENTS SHOULD BE«, l3=0x3d}
0x18d2…1911 Line {l1=0x3d, l2=» ; STORED«, l3=0x3d}
0x1911…194f Line {l1=0x3c, l2=» XCHG ;DE->SOURCE, HL->DESTINATION FOR MOVE«, l3=0x3c}
0x194f…198e Line {l1=0x3d, l2=» LDA LENGTH ;A:=LENGTH OF MESSAGE (PLUS POSSIBLY A«, l3=0x3d}
0x198e…19cd Line {l1=0x3d, l2=» ; FEW EXTRA BYTES ALLOCATED, BUT THIS«, l3=0x3d}
0x19cd…19f7 Line {l1=0x28, l2=» ; IS IRRELEVANT)«, l3=0x28}
0x19f7…1a25 Line {l1=0x2c, l2=» MOV B,A ;B:=LENGTH OF MESSAGE«, l3=0x2c}
0x1a25…1a4f Line {l1=0x28, l2=» CALL MOVE ;MOVE THE MESSAGE«, l3=0x28}
0x1a4f…1a52 Line {l1=0x01, l2=» «, l3=0x01}
0x1a52…1a55 Line {l1=0x01, l2=»;«, l3=0x01}
0x1a55…1a6f Line {l1=0x18, l2=»;SEND THE MESSAGE BUFFER«, l3=0x18}
0x1a6f…1a72 Line {l1=0x01, l2=»;«, l3=0x01}
0x1a72…1aa8 Line {l1=0x34, l2=» LHLD RECPTR ;HL->PCB OF RECEIVING PROCESS«, l3=0x34}
0x1aa8…1ac0 Line {l1=0x16, l2=» LXI B,KOSEM«, l3=0x16}
0x1ac0…1afa Line {l1=0x38, l2=» DAD B ;HL->ADDRESS OF MAIN SEMAPHORE OF«, l3=0x38}
0x1afa…1b29 Line {l1=0x2d, l2=» ; RECEIVING PROCESS«, l3=0x2d}
0x1b29…1b55 Line {l1=0x2a, l2=» MOV C,M ;BC->MAIN SEMAPHORE«, l3=0x2a}
0x1b55…1b7b Line {l1=0x24, l2=» INX H ; OF THE«, l3=0x24}
0x1b7b…1bb0 Line {l1=0x33, l2=» MOV B,M ; RECEIVING PROCESS«, l3=0x33}
0x1bb0…1bdc Line {l1=0x2a, l2=» POP H ;HL->MESSAGE BUFFER«, l3=0x2a}
0x1bdc…1bfe Line {l1=0x20, l2=» CALL SEND ;SEND IT!«, l3=0x20}
0x1bfe…1c01 Line {l1=0x01, l2=» «, l3=0x01}
0x1c01…1c04 Line {l1=0x01, l2=»;«, l3=0x01}
0x1c04…1c24 Line {l1=0x1e, l2=»;STATUS:=0 TO INDICATE SUCCESS«, l3=0x1e}
0x1c24…1c27 Line {l1=0x01, l2=»;«, l3=0x01}
0x1c27…1c4b Line {l1=0x22, l2=» LHLD STAPTR ;HL->STATUS«, l3=0x22}
0x1c4b…1c69 Line {l1=0x1c, l2=» XRA A ;A:=0«, l3=0x1c}
0x1c69…1c89 Line {l1=0x1e, l2=» MOV M,A ;STATUS«, l3=0x1e}
0x1c89…1cac Line {l1=0x21, l2=» INX H ; :=«, l3=0x21}
0x1cac…1cd2 Line {l1=0x24, l2=» MOV M,A ; 0«, l3=0x24}
0x1cd2…1cde Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x1cde…1ce1 Line {l1=0x01, l2=» «, l3=0x01}
0x1ce1…1cee Line {l1=0x0b, l2=» SKIP«, l3=0x0b}
0x1cee…1cf1 Line {l1=0x01, l2=»;«, l3=0x01}
0x1cf1…1d1d Line {l1=0x2a, l2=»;COME HERE IF LENGTH IS ILLEGAL. STATUS:=2«, l3=0x2a}
0x1d1d…1d20 Line {l1=0x01, l2=»;«, l3=0x01}
0x1d20…1d44 Line {l1=0x22, l2=»LENLON:LHLD STAPTR ;HL->STATUS«, l3=0x22}
0x1d44…1d64 Line {l1=0x1e, l2=» MVI M,2 ;STATUS«, l3=0x1e}
0x1d64…1d87 Line {l1=0x21, l2=» INX H ; :=«, l3=0x21}
0x1d87…1dad Line {l1=0x24, l2=» MVI M,0 ; 2«, l3=0x24}
0x1dad…1db9 Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x1db9…1dbc Line {l1=0x01, l2=» «, l3=0x01}
0x1dbc…1dbf Line {l1=0x01, l2=»;«, l3=0x01}
0x1dbf…1deb Line {l1=0x2a, l2=»;COME HERE IF ALLOCATION FAILED. STATUS:=1«, l3=0x2a}
0x1deb…1dee Line {l1=0x01, l2=»;«, l3=0x01}
0x1dee…1e12 Line {l1=0x22, l2=»NOAL: LHLD STAPTR ;HL->STATUS«, l3=0x22}
0x1e12…1e32 Line {l1=0x1e, l2=» MVI M,1 ;STATUS«, l3=0x1e}
0x1e32…1e55 Line {l1=0x21, l2=» INX H ; :=«, l3=0x21}
0x1e55…1e7b Line {l1=0x24, l2=» MVI M,0 ; 1«, l3=0x24}
0x1e7b…1e7e Line {l1=0x01, l2=» «, l3=0x01}
0x1e7e…1e81 Line {l1=0x01, l2=»;«, l3=0x01}
0x1e81…1eab Line {l1=0x28, l2=»;RETURN MESSAGE BUFFER TO POOL SEMAPHORE«, l3=0x28}
0x1eab…1eae Line {l1=0x01, l2=»;«, l3=0x01}
0x1eae…1eee Line {l1=0x3e, l2=» POP H ;SKIP ADDRESS OF BYTE 4 OF MESS. BUFFER«, l3=0x3e}
0x1eee…1f1a Line {l1=0x2a, l2=» POP H ;HL->MESSAGE BUFFER«, l3=0x2a}
0x1f1a…1f46 Line {l1=0x2a, l2=» LXI B,POOL ;BL->POOL SEMAPHORE«, l3=0x2a}
0x1f46…1f6c Line {l1=0x24, l2=» CALL SEND ;SEND IT BACK«, l3=0x24}
0x1f6c…1f78 Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x1f78…1f7b Line {l1=0x01, l2=» «, l3=0x01}
0x1f7b…1f7e Line {l1=0x01, l2=»;«, l3=0x01}
0x1f7e…1fb8 Line {l1=0x38, l2=»;COME HERE IF THERE WERE NO MESSAGES AVAILABLE. STATUS=3«, l3=0x38}
0x1fb8…1fbb Line {l1=0x01, l2=»;«, l3=0x01}
0x1fbb…1fdf Line {l1=0x22, l2=»NOMES: LHLD STAPTR ;HL->STATUS«, l3=0x22}
0x1fdf…1fff Line {l1=0x1e, l2=» MVI M,3 ;STATUS«, l3=0x1e}
0x1fff…2022 Line {l1=0x21, l2=» INX H ; :=«, l3=0x21}
0x2022…2048 Line {l1=0x24, l2=» MVI M,0 ; 3«, l3=0x24}
0x2048…2054 Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x2054…205d Line {l1=0x07, l2=» «, l3=0x07}
0x205d…206a Line {l1=0x0b, l2=» SKIP«, l3=0x0b}
0x206a…2083 Line {l1=0x17, l2=»;***** LOCAL DATA *****«, l3=0x17}
0x2083…2086 Line {l1=0x01, l2=» «, l3=0x01}
0x2086…20b1 Line {l1=0x29, l2=»STAPTR:DS 2 ;ADDRESS OF STATUS«, l3=0x29}
0x20b1…20dc Line {l1=0x29, l2=»LENGTH:DS 2 ;LENGTH OF MESSAGE«, l3=0x29}
0x20dc…2109 Line {l1=0x2b, l2=»CONPTR:DS 2 ;ADDRESS OF CONTENTS«, l3=0x2b}
0x2109…2146 Line {l1=0x3b, l2=»RECPTR:DS 2 ;ADDRESS OF PCB OF RECEIVING PROCESS«, l3=0x3b}
0x2146…2149 Line {l1=0x01, l2=» «, l3=0x01}
0x2149…2155 Line {l1=0x0a, l2=» END«, l3=0x0a}
0x2155…2160 00 00 63 63 63 63 63 63 63 63 63 ┆ ccccccccc┆
0x2160…2180 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ┆cccccccccccccccccccccccccccccccc┆
[…0x13…]