home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / GETMPB.M < prev    next >
Encoding:
Text File  |  1991-04-25  |  3.8 KB  |  3 lines

  1. ⓪ MODULE GetMPB;
  2. ⓪ (*$E MOS *)
  3. ⓪ 
  4. ⓪ FROM MOSCtrl IMPORT ProcessID;
  5. ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADDRESS, LONGWORD;
  6. ⓪ FROM Console IMPORT WriteString, WriteLn, Read;
  7. ⓪ FROM StrConv IMPORT LHexToStr;
  8. ⓪ 
  9. ⓪ TYPE P_MD = POINTER TO MD;
  10. ⓪%
  11. ⓪%MD = RECORD
  12. ⓪,next: P_MD;
  13. ⓪,start: ADDRESS;
  14. ⓪,length: LONGCARD;
  15. ⓪,owner: LONGWORD
  16. ⓪*END;
  17. ⓪ 
  18. ⓪%P_MPB = POINTER TO MPB;
  19. ⓪%
  20. ⓪%MPB = RECORD
  21. ⓪-free: P_MD;
  22. ⓪-used: P_MD;
  23. ⓪-boomer: P_MD
  24. ⓪+END;
  25. ⓪ 
  26. ⓪ 
  27. ⓪ VAR MPBPtr: P_MPB;
  28. ⓪ 
  29. ⓪$ch: CHAR;
  30. ⓪ 
  31. ⓪ CONST   end_os = $4FA;
  32. ⓪ 
  33. ⓪ BEGIN
  34. ⓪"ASSEMBLER
  35. ⓪(; Malloc (2)
  36. ⓪(MOVEQ   #2,D0
  37. ⓪(MOVE.L  D0,-(A7)
  38. ⓪(MOVE    #$48,-(A7)
  39. ⓪(TRAP    #1
  40. ⓪(ADDQ.L  #6,A7
  41. ⓪(MOVE.L  D0,-(A7)
  42. ⓪(
  43. ⓪(CLR.L   -(A7)
  44. ⓪(MOVE    #$20,-(A7)      ; Super (0)
  45. ⓪(TRAP    #1
  46. ⓪(MOVE.L  D0,2(A7)
  47. ⓪(
  48. ⓪(MOVE.L  $4F2,A0         ; ^TOS-Header
  49. ⓪(MOVE.L  8(A0),A0        ; wg. altem AHDI
  50. ⓪(CMPI.B  #$03,2(A0)
  51. ⓪(BEQ.W   error           ; erstmal nicht bei TT wg. Fast-RAM
  52. ⓪(
  53. ⓪(LEA     $800,A0
  54. ⓪(MOVE.L  end_os,D1
  55. ⓪(SUB.L   A0,D1
  56. ⓪(LSR     #1,D1           ; D1: Anzahl zu suchender Words
  57. ⓪(
  58. ⓪(; *** nach dem MD suchen ***
  59. ⓪(
  60. ⓪(MOVE.L  6(A7),D0        ; zu suchender 'start'
  61. ⓪(MOVE.L  ProcessID,A2
  62. ⓪(MOVE.L  (A2),D2         ; zu suchender 'owner'
  63. ⓪(
  64. ⓪(CLR.L   -(A7)           ; Flag: bisher nix gefunden
  65. ⓪(
  66. ⓪$l1: CMP.W   (A0)+,D0
  67. ⓪(DBEQ    D1,l1
  68. ⓪(BNE     e1
  69. ⓪(CMP.L   -4(A0),D0       ; stimmt 'start'?
  70. ⓪(DBEQ    D1,l1
  71. ⓪(BNE     e1
  72. ⓪(CMPI.L  #2,(A0)         ; stimmt 'length'?
  73. ⓪(DBEQ    D1,l1
  74. ⓪(BNE     e1
  75. ⓪(CMP.L   4(A0),D2        ; stimmt 'owner'?
  76. ⓪(DBEQ    D1,l1
  77. ⓪(BNE     e1
  78. ⓪(
  79. ⓪(; *** MD gefunden ***
  80. ⓪(
  81. ⓪(TST.L   (A7)+
  82. ⓪(BNE     error           ; mehrfach gefunden -> Abbruch
  83. ⓪(
  84. ⓪(LEA     -8(A0),A1
  85. ⓪(MOVE.L  A1,-(A7)        ; Adr. des MD merken
  86. ⓪(
  87. ⓪(DBRA    D1,l1           ; weitersuchen
  88. ⓪ 
  89. ⓪$e1: MOVE.L  (A7)+,A1
  90. ⓪(MOVE.L  A1,D2
  91. ⓪(BEQ     error           ; nicht gefunden
  92. ⓪(
  93. ⓪(; *** nach möglichen MPBs suchen ***
  94. ⓪(
  95. ⓪(LEA     $800,A0
  96. ⓪(MOVE.L  end_os,D1
  97. ⓪(SUB.L   A0,D1
  98. ⓪(LSR     #1,D1           ; D1: Anzahl zu suchender Words
  99. ⓪(
  100. ⓪(CLR.L   -(A7)           ; Endmarke f. gefundene Adressen
  101. ⓪(
  102. ⓪$l2: CMP.W   (A0)+,D2
  103. ⓪(DBEQ    D1,l2
  104. ⓪(BNE     e2
  105. ⓪(CMP.L   -4(A0),D2       ; steht ^MD in MPB.used?
  106. ⓪(DBEQ    D1,l2
  107. ⓪(BNE     e2
  108. ⓪(; einen haben wir...
  109. ⓪(PEA     -8(A0)
  110. ⓪(DBRA    D1,l2           ; weitersuchen
  111. ⓪(
  112. ⓪$e2: 
  113. ⓪(; *** Bereich wieder freigeben. Dann ***
  114. ⓪(; *** steht in MPB.used der ^MD.next ***
  115. ⓪(
  116. ⓪(MOVE.L  (A1),-(A7)      ; MD.next merken
  117. ⓪(MOVE.L  D0,-(A7)
  118. ⓪(MOVE    #$49,-(A7)      ; Mfree()
  119. ⓪(TRAP    #1
  120. ⓪(ADDQ.L  #6,A7
  121. ⓪(MOVE.L  (A7)+,D2        ; MD.next
  122. ⓪(
  123. ⓪(; *** nochmal die mögl. MPBs prüfen ***
  124. ⓪(
  125. ⓪$l3: MOVE.L  (A7)+,D0        ; ^MD
  126. ⓪(BEQ     e3
  127. ⓪(MOVE.L  D0,A0
  128. ⓪(CMP.L   4(A0),D2        ; MBP.used = MD.next?
  129. ⓪(BNE     l3
  130. ⓪(TST.L   MPBPtr
  131. ⓪(BNE     err2            ; mehrfach gefunden -> Abbruch
  132. ⓪(; *** MPB gefunden ***
  133. ⓪(MOVE.L  A0,MPBPtr
  134. ⓪(BRA     l3              ; weitersuchen
  135. ⓪(
  136. ⓪"err2: TST.L   (A7)+
  137. ⓪(BNE     err2
  138. ⓪(CLR.L   MPBPtr
  139. ⓪ 
  140. ⓪$e3: TRAP    #1              ; Super (SSP)
  141. ⓪(ADDQ.L  #6,A7
  142. ⓪(BRA     ende
  143. ⓪(
  144. ⓪!error: TRAP    #1              ; Super (SSP)
  145. ⓪(ADDQ.L  #6,A7
  146. ⓪(MOVE    #$49,-(A7)      ; Mfree()
  147. ⓪(TRAP    #1
  148. ⓪(ADDQ.L  #2,A7
  149. ⓪(CLR.L   MPBPtr
  150. ⓪ 
  151. ⓪"ende: ADDQ.L  #4,A7           ; Adr. vom angeforderten Block vom Stack
  152. ⓪"END;
  153. ⓪"WriteString ('MPBPtr: ');
  154. ⓪"WriteString (LHexToStr (MPBPtr, 7));
  155. ⓪"WriteLn;
  156. ⓪"Read (ch)
  157. ⓪ END GetMPB.
  158. ⓪ ə
  159. (* $FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54Ç$000001ADT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$0000089F$0000075B$0000076B$0000077B$0000078A$0000080A$0000085A$0000089F$000006DD$000007FD$0000082E$00000884$00000A86$000001AD$000001F0$00000380ÇÇé*)
  160.