home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / UTILITY / MOREMEM.M < prev    next >
Encoding:
Text File  |  1990-11-28  |  5.2 KB  |  178 lines

  1. MODULE MoreMem;
  2.  
  3. (*-----------------------------------------------------------------------------
  4.  * Erstellt im März 1988 von Thomas Tempelmann, Nordendstr.64, D-8000 München
  5.  *
  6.  * Erstellt unter dem Megamax-Modula-2 System, Version 1.1
  7.  *-----------------------------------------------------------------------------
  8.  * Kurzbeschreibung : Vergrößert die mögliche Anzahl von allozierbaren
  9.  *                    Speicherblöcken.
  10.  *                    Dieses Programm funktioniert nur mit den TOS-Versionen
  11.  *                    1.0 und 1.2. Bei TOS-Versionen ab 1.4 ist stattdessen
  12.  *                    das Programm 'FOLDRxxx.PRG' zuverwenden (das wiederum
  13.  *                    aber nicht bei den TOS-Versionen 1.0 / 1.2 den oben
  14.  *                    beschriebenen Zweck erfüllt).
  15.  *                    Für die Anwendung ist dieses Modul mit vollst. Optimierung
  16.  *                    und ohne irgendwelche Treibermodule (auch nicht M2Init!)
  17.  *                    zu linken und dann in den AUTO-Ordner zu kopieren.
  18.  *-----------------------------------------------------------------------------
  19.  * 15.5.88: Erstellung aus dem Megamax Storage-Modul.
  20.  * 19.6.88: Der Puffer wird mit GEMDOS-Malloc geholt.
  21.  * 12.8.88: Ausgabe einer Installationsmeldung.
  22.  * 21.9.89: Anpassung an MOS-Version 2.0
  23.  *----------------------------------------------------------------------------*)
  24.  
  25. (*$C- No Case Sensitivity *)
  26. (*$M- No Symbols (Procedure Names) *)
  27. (*$R- Range Check off *)
  28. (*$L- No Parameter Link *)
  29. (*$N+ No Runtime Module needed *)
  30. (*$S- No Stack Check *)
  31.  
  32. FROM SYSTEM IMPORT
  33.   ASSEMBLER, BYTE, ADDRESS, LONGWORD, ADR, WORD;
  34.  
  35.  
  36. CONST
  37.   Elements = 300; (* Bestimmt die Anzahl neuer belegbarer Speicherblöcke. *)
  38.                   (* Für jeden dieser Blöcke werden 18 Bytes belegt.      *)
  39.                   (* Achtung: Bei Änderung die Ausgabetexte am Ende des   *)
  40.                   (*          Programms berücksichtigen !                 *)
  41.  
  42.   mdSize0 = 16;
  43.   mdSize2 = mdSize0 + 2;   (* Plus vorstehendes Längen-word (=1) *)
  44.   elemSize = Elements * mdSize2;
  45.  
  46.  
  47. CONST (* GEMDOS functions *)
  48.       PtermRes  = $31;
  49.       Mshrink   = $4A;
  50.       PrintLine = $09;
  51.  
  52. TABLE procStart: 0;
  53.  
  54. PROCEDURE newMDSt;
  55.   
  56.   PROCEDURE initMDSt;
  57.     BEGIN
  58.       ASSEMBLER
  59.         MOVE.L  #elemSize,D5
  60.         
  61.         MOVE.L  8(A7),A5
  62.         ADDQ.L  #2,A5
  63.         MOVEQ   #mdSize2,D2
  64.         
  65.         ; Ende der MD-Freiliste suchen
  66. l0      TST.L   (A6)
  67.         BEQ     st0
  68.         MOVE.L  (A6),A6
  69.         BRA     l0
  70.         
  71. nxt     MOVE    #1,-2(A5)       ; MD.mylen
  72.         MOVE.L  A5,(A6)         ; Adr. des MD dem Vorgänger in MD.next zuweisen
  73.         MOVE.L  A5,A6
  74.         ADDA.W  D2,A5
  75. st0     SUB.L   D2,D5
  76.         BCC     nxt
  77.         
  78.         ; letztes Element mit NIL markieren
  79.         CLR.L   (A6)            ; MD.next
  80.       END;
  81.     END initMDSt;
  82.  
  83.  
  84.   BEGIN
  85.     ASSEMBLER
  86.         ; Size v. elems*16 als amount
  87.         MOVE.L  #elemSize,-(A7)
  88.         MOVE.W  #$48,-(A7)      ; Malloc
  89.         TRAP    #1
  90.         MOVE.L  D0,(A7)
  91.         BEQ     noMem
  92.         PEA     initMDSt(PC)
  93.         MOVE    #38,-(A7)
  94.         TRAP    #14             ; Supexec (initMDSt)
  95. noMem   CLR.W   (A7)
  96.         MOVE.L  #2,-(A7)
  97.         MOVE.W  #PtermRes,-(A7) ; terminate process
  98.         TRAP    #1
  99.     END;
  100.   END newMDSt;
  101.  
  102. TABLE procEnd: 0;
  103.  
  104. BEGIN
  105.   ASSEMBLER
  106.         MOVE.L  A0,A4             ; starting address of workspace
  107.         
  108.         PEA     t(PC)
  109.         MOVE    #38,-(A7)
  110.         TRAP    #14             ; Supexec
  111.         BRA     c
  112.      t: MOVE.L  $4F2,A0
  113.         MOVE.L  8(A0),D0
  114.         RTS
  115.      c: MOVE.L  D0,A0
  116.         CMPI.W  #$0100,2(A0)
  117.         BNE     b
  118.         MOVE.L  #$56FE,D0
  119.         BRA     e
  120.      b: CMPI.W  #$0102,2(A0)
  121.         BNE     f
  122.         MOVE.L  $20(A0),D0
  123.         ADDQ.L  #4,D0
  124.      e: MOVE.L  D0,A6
  125.  
  126.         MOVE.L  #$80,-(A7)        ; base page must not be reallocated
  127.         MOVE.L  A4,-(A7)
  128.         CLR     -(A7)
  129.         MOVE    #Mshrink,-(A7)    ; return memory of environment
  130.         TRAP    #1
  131.  
  132.         ; print message
  133.         PEA     msg_1(PC)
  134.         MOVE.W  #PrintLine,-(A7)
  135.         TRAP    #1
  136.         ADDQ.L  #6,A7
  137.  
  138.         ; move 'newMDSt' to top of memory
  139.         
  140.         LEA     procStart,A0
  141.         LEA     procEnd,A1
  142.         LEA     newMDSt,A4
  143.         SUBA.L  A0,A4
  144.         MOVE.L  A0,D0
  145.         SUB.L   A1,D0
  146.         LEA     0(A7,D0.L),A2
  147.         SUBA.W  #128,A2
  148.         ADDA.L  A2,A4
  149.         ; move A0..A1 -> A2
  150. movelp: MOVE    (A0)+,(A2)+
  151.         CMPA.L  A1,A0
  152.         BCS     movelp
  153.         ; call 'newMDSt'
  154.         JMP     (A4)
  155.  
  156. f:      ; print error msg
  157.         PEA     msg_v(PC)
  158.         MOVE.W  #PrintLine,-(A7)
  159.         TRAP    #1
  160.         ; Terminate program
  161.         CLR     (A7)
  162.         TRAP    #1
  163.  
  164. msg_1   DC.B    13,10
  165.         ASC     'MOREMEM.PRG erweitert GEMDOS-Puffer um 300 Speicher-Blöcke.'
  166.         DC.B    13,10
  167.         ASC     'Dazu werden 5400 Bytes belegt.'
  168.         DC.B    13,10,0
  169.  
  170. msg_v   DC.B    13,10
  171.         ASC     'MOREMEM.PRG mit dieser TOS-Version nicht lauffähig !'
  172.         DC.B    13,10
  173.         ASC     'Stattdessen FOLDRxxx.PRG verwenden !'
  174.         DC.B    13,10,0
  175.         SYNC
  176.   END
  177. END MoreMem.
  178.