home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_4_94 / power / cache.bas
BASIC Source File  |  1994-08-10  |  7KB  |  238 lines

  1. '*********************************************************
  2. '! File       : CACHE.BAS
  3. '! Vers.      : 1.0
  4. '! Last Edit  : 10.8.94
  5. '! Autor      : G. Born
  6. '! Files      : INPUT, OUTPUT
  7. '! Progr. Spr.: Power Basic 2.1/3.0
  8. '! Betr. Sys. : DOS 2.1 - 5.0 - 6.x
  9. '! Funktion: Das Programm wird mit der Eingabe:
  10. '!
  11. '!           CACHE
  12. '!
  13. '!           aufgerufen. Es überprüft verschiedene
  14. '!           Parameter von SMARTDRV und demonstriert
  15. '!           den Zugriff auf die INT 2F-Schnittstelle.
  16. '**********************************************************
  17. '! Variable definieren
  18. hit???=0
  19. fail??? = 0
  20. drive% = 0
  21.  
  22. ON ERROR GOTO fehler
  23.  
  24. PRINT
  25. PRINT "SMARTDRV Cache Demo        (c) Born Version 1.0"
  26. PRINT
  27.  
  28. '!
  29. '! prüfe, ob Cache installiert ist und gebe Parameter
  30. '! aus.
  31. '!
  32. CALL CacheInstall (cFlag%, hit???, fail???, vers%)
  33.  
  34. IF cFlag% <> 0 THEN
  35.  PRINT USING "SMARTDRV Version #.";Vers%/256;
  36.  PRINT USING "##  ist installiert"; (Vers% AND &HFF)
  37.  PRINT
  38.  PRINT "Cache-Hit     : ", hit???
  39.  PRINT "Cache-Misses  : ", fail???
  40. ELSE
  41.  PRINT "SMARTDRV nicht installiert"
  42.  END
  43. END IF
  44.  
  45. '!
  46. '! Buffer auf Platte auslagern
  47. '!
  48.  
  49. PRINT "Commit Cache"
  50. CALL CacheFlush                        '! Flush Buffer
  51.  
  52. '!
  53. '! prüfe erneut den Cache-Status
  54. '!
  55. CALL CacheInstall (cFlag%, hit???, fail???, vers%)
  56.  
  57. IF cFlag% <> 0 THEN
  58.  PRINT
  59.  PRINT "Cache-Hit     : ", hit???
  60.  PRINT "Cache-Misses  : ", fail???
  61. END IF
  62.  
  63. INPUT "Laufwerk (0=A, 1=B, 2=C etc.): ", drive%
  64. '!
  65. '! lese den Status des Laufwerks
  66. '!
  67. CALL CacheStatus (Errx%,status%,drive%)      '! Lese Status
  68.  
  69. IF errx% = 0 THEN
  70.  IF status% = &HFF THEN
  71.   PRINT "Laufwerk C: existiert nicht"
  72.   END
  73.  ELSE
  74.   PRINT "Status: ", HEX$(status%)
  75.  END IF
  76. END IF
  77.  
  78. '!
  79. '! Cachemodus für Laufwerk ändern
  80. '! mode 1 -> Read Cache ein, 2 -> Read Cache aus
  81. '!      3 -> Write Cache ein 4 -> Write Cache aus
  82. '!
  83. mode% = 3
  84. CALL SetCacheDrive (Errx%,mode%,drive%)       '! Setze Status
  85.  
  86. IF Errx% = 0 THEN
  87.  IF mode% = &HFF THEN
  88.   PRINT "Laufwerk existiert nicht"
  89.   END
  90.  ELSE
  91.   PRINT "Status: ", HEX$(mode%)
  92.  END IF
  93. END IF
  94.  '!
  95.  '! Ermittle Cachegröße
  96.  '!
  97. CALL GetCacheSize (DOSBlock&,CacheBlock&,BlockSize&,WINBlock&)
  98.  
  99. PRINT "Blocks in DOS"; DOSBlock&
  100. PRINT "Blocks in Windows"; WINBlock&
  101. PRINT "Blockgröße "; BlockSize&
  102. PRINT "Cacheblocks benutzt "; CacheBlock&
  103.  
  104. Print " eine Taste betätigen"
  105. DO WHILE INKEY$ = "": WEND
  106.  
  107. PRINT
  108. PRINT "Ende Cache Demo"
  109. END                                    '! Ende
  110.  
  111. '#########################################################
  112. '#                    Hilfsroutinen                      #
  113. '#########################################################
  114.  
  115. fehler:
  116. '---------------------------------------------------------
  117. '! Fehlerbehandlung
  118. '---------------------------------------------------------
  119.  
  120.  PRINT "Fehler : ";ERR;" unbekannt"
  121.  PRINT "Programmabbruch"
  122. END                                 '! MSDOS Exit
  123.  
  124. SUB CacheInstall (inst%, hit???, miss???, vers%)
  125. '!---------------------------------------------------------
  126. '! Prüfe, ob SMARTDRV installiert ist und lese Status
  127. '!
  128. '! INT 2F, Funktion AX=4A10H, BX = 0000H, CX = EBABH
  129. '!
  130. '! inst%   1 -> SMARTDRV installiert
  131. '! hit???  Trefferquote Cache
  132. '! miss??  Fehlerquote Cache
  133. '! vers%   Versionsnummer SMARTDRV (BCD-Zahl)
  134. '!---------------------------------------------------------
  135. '!
  136.  REG 1, &H4A10                        '! AX=4A10H get Status
  137.  REG 2, &H0000                        '! BX = 0
  138.  REG 3, &HEBAB                        '! Signatur
  139.  
  140.  CALL INTERRUPT &H2F                  '! Multiplexer INT
  141.  inst% = 0                            '! Reset Install-Flag
  142.  
  143.  IF (REG(1) = &HBABE) THEN            '! SMARTDRV installiert
  144.   inst% = 1                           '! Install-Flag setzen
  145.  
  146.   hit??? = Reg(4)                     '! DX:BX = Cache hits
  147.   SHIFT LEFT hit???,16
  148.   hit??? = hit??? OR Reg(2)
  149.  
  150.   fail??? = Reg(6)                    '! DI:SI = Cache fails
  151.   SHIFT LEFT fail???,16
  152.   fail??? = fail??? OR Reg(5)
  153.  
  154.   vers% = Reg (7)                      '! BP = version
  155.  END IF
  156. END SUB
  157.  
  158. SUB CacheFlush
  159. '!---------------------------------------------------------
  160. '! Cache-Puffer auf Platte schreiben
  161. '!
  162. '! INT 2F, Funktion AX=4A10H BX = 0001
  163. '!---------------------------------------------------------
  164. '!
  165.  REG 1, &H4A10                        '! AX=4A10H get Status
  166.  REG 2, &H0001                        '! BX = 1
  167.  
  168.  CALL INTERRUPT &H2F                  '! Multiplexer INT
  169.  
  170. END SUB
  171.  
  172. SUB CacheStatus (Errx%, mode%, drive%)
  173. '!---------------------------------------------------------
  174. '! Lese den Cache-Status zurück
  175. '!
  176. '! INT 2F, Funktion AX=4A10H BX = 0003H, BP = Drive
  177. '! DL = Subfunktion (0 = Get Info)
  178. '!---------------------------------------------------------
  179. '!
  180.  REG 1, &H4A10                        '! AX=4A10H get Status
  181.  REG 2, &H0003                        '! BX = 3
  182.  REG 7, drive%                        '! Laufwerk (0 = A)
  183.  REG 4, 0                             '! Get Info
  184.  
  185.  CALL INTERRUPT &H2F                  '! Multiplexer INT
  186.  
  187.  Errx% = 1
  188.  
  189.  IF (REG(1) = &HBABE) THEN            '! Aufruf ok?
  190.   Errx% = 0                           '! Fehlerflag löschen
  191.   mode% = Reg(4) AND &HFF
  192.  END IF
  193. END SUB
  194.  
  195. SUB SetCacheDrive (errx%, mode%, drive%)
  196. '!---------------------------------------------------------
  197. '! Setze den Cache-Mode des Laufwerks
  198. '!
  199. '! INT 2F, Funktion AX=4A10H BX = 0003H, BP = Drive
  200. '! DL = Subfunktion (1-4)
  201. '!---------------------------------------------------------
  202. '!
  203.  REG 1, &H4A10                        '! AX=4A10H set mode
  204.  REG 2, &H0003                        '! BX = 3
  205.  REG 7, drive%                        '! Laufwerk (0 = A)
  206.  REG 4, mode%                         '! Mode setzen
  207.  
  208.  CALL INTERRUPT &H2F                  '! Multiplexer INT
  209.  
  210.  Errx% = 1
  211.  
  212.  IF (REG(1) = &HBABE) THEN            '! Aufruf ok?
  213.   Errx% = 0                           '! Fehlerflag löschen
  214.   mode% = Reg(4) AND &HFF
  215.  END IF
  216. END SUB
  217.  
  218. SUB GetCacheSize (DOSBlock&,CacheBlock&,BlockSize&,WINBlock&)
  219. '!---------------------------------------------------------
  220. '! Lese den Cache-Status zurück
  221. '!
  222. '! INT 2F, Funktion AX=4A10H BX = 0004H, BP = Drive
  223. '! DL = Subfunktion (0 = Get Info)
  224. '!---------------------------------------------------------
  225. '!
  226.  REG 1, &H4A10                        '! AX=4A10H Get Size
  227.  REG 2, &H0004                        '! BX = 4
  228.  
  229.  CALL INTERRUPT &H2F                  '! Multiplexer INT
  230.  
  231.  DOSBlock& = Reg(1)                   '! Parameter
  232.  CacheBlock& = Reg(2)
  233.  BlockSIze& = Reg(3)
  234.  WINBlock = Reg(4)
  235. END SUB
  236.  
  237. '***** Programm Ende ******
  238.