home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / UTIL / ForcePRAM.sit / ForceRAMDisk.a < prev    next >
Text File  |  1994-03-01  |  3KB  |  88 lines

  1.     Title    'Force RAM Disk on and to a specific size' ;
  2. *
  3. * Module for "Force" shell.
  4. * Ben Cranston March 1, 1994
  5. *
  6.     Print    Off            ; Here be includes
  7.     Include    'GestaltEqu.a'        ;
  8.     Include    'Traps.a'        ;
  9.     Print    On,NoGen        ; Here be includes
  10.     Main                ; Begin module
  11. *
  12. S    Record    {A6Link},Decr        ; Stack frame
  13. A6Link    DS.L    1            ; Caller's A6
  14. Curr    DS.B    1            ; Current PRAM value
  15. Want    DS.B    1            ; Desired PRAM value
  16. Prog    DS.L    1            ; Pointer to setup resource
  17. SS    Equ    *            ; Stack size
  18.     EndR                ; Stack frame
  19. *
  20.     Link    A6,#S.SS        ; Make local frame
  21.     Tst.L    D1            ; Did we get a data resource?
  22.     BEq.S    @999            ; If error then get out
  23.     Move.L    D1,S.Prog(A6)        ; Save handle
  24. *
  25. * If not 68040 hardware then just get out
  26. *
  27.     Move.L    #gestaltProcessorType,D0 ; Ask about processor type
  28.     _Gestalt            ; Get processor type
  29.     BNE.S    @900            ; If error then get out
  30.     Cmp.W    #gestalt68040,A0    ; Is this a quadra?
  31.     BNE.S    @900            ; If not then just get out
  32. *
  33.     Eject                ;
  34. *
  35. * Get physical memory size and compute desired RAM disk size.
  36. *
  37.     Move.L    #gestaltPhysicalRAMSize,D0 ; Ask about memory size
  38.     _Gestalt            ; Get memory size
  39.     BNE.S    @900            ; If error then get out
  40.     Move.L    A0,D2            ; Get size in bytes
  41.     Move.W    #20,D0            ; Get shift count
  42.     LSR.L    D0,D2            ; Get size in megabytes
  43.     Clr.B    S.Want(A6)        ; Initially set no RAM disk
  44.     Move.L    S.Prog(A6),A0        ; Get handle to program
  45.     _GetHandleSize            ; Get size of program
  46.     Move.L    (A0),A0            ; Get pointer to program
  47. @010    ;
  48.     Sub.L    #2,D0            ; Count program bytes
  49.     BLT.S    @030            ; If out of program, no disk
  50.     Move.B    (A0)+,D1        ; Get next size to test
  51.     Cmp.B    D2,D1            ; Is this enough memory?
  52.     BLE.S    @020            ; Yes, go set disk size
  53.     Add.L    #1,A0            ; Else skip byte
  54.     Bra.S    @010            ; Go do next cycle
  55. @020    ;
  56.     Move.B    (A0)+,D0        ; Get desired size in MB
  57.     MulU.W    #250,D0            ; Compute size key
  58.     DivU.W    D2,D0            ; Compute size key
  59.     Move.B    D0,S.Want(A6)        ; Set size of RAM disk
  60. *
  61. * Get current PRAM contents, decide if we have to reset and reboot.
  62. *
  63. @030    ;
  64.     Move.L    #$000100AF,D0        ; Byte AF
  65.     LEA    S.Curr(A6),A0        ; Point to stack space
  66.     _ReadXPram            ; Read current from parameter RAM
  67.     BNE.S    @999            ; If error then get out
  68.     Move.B    S.Curr(A6),D1        ; Get current alt level
  69.     Cmp.B    S.Want(A6),D1        ; Same as desired?
  70.     BEq.S    @999            ; If so then skip
  71. *
  72. * Write desired contents to PRAM and force reboot.
  73. *
  74.     LEA    S.Want(A6),A0        ; Get address of desired
  75.     Move.L    #$000100AF,D0        ; Byte AF
  76.     _WriteXPram            ; Write back to parameter RAM
  77.     Move.L    #1,D0            ; Set flat to force reboot
  78.     Bra.S    @999            ; Return to driver
  79. *
  80. @900    ;
  81.     Clr.L    D0            ; Set no reboot
  82. @999    ;
  83.     UnLk    A6            ; Drop local frame
  84.     RTS                ; Return to INIT31
  85. *
  86.     EndMain                ; Keep MPW happy
  87.     End                ; ForceRAMDisk.a
  88.