home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / tt / vmem11 / vmemdemo / vmem.s < prev   
Text File  |  1990-10-03  |  10KB  |  272 lines

  1. ;******************************************************************************
  2. ;* Aufrufbibliothek für VMEM V1.1:                                            *
  3. ;*                                                                            *
  4. ;* Diese Bibliothek enthält sämtliche Aufrufe, die für VMEM nötig sind.       *
  5. ;* Die Übergabe der Parameter erfolgt hierbei hauptsächlich in Registern,     *
  6. ;* da VMEM zum größten Teil in Turbo C geschrieben wurde.                     *
  7. ;*                                                                            *
  8. ;* Sollte jemand die Bibliothek z.B. für Pascal umschreiben wollen, so muß    *
  9. ;* man folgendes beachten:                                                    *
  10. ;*                                                                            *
  11. ;* - die Funktion "cj_find" ermittelt den Cookiejar-Wert für den Cookie       *
  12. ;*   "VMEM". Hierzu wird das Register D0 mit dem Long "VMEM" und A0 mit       *
  13. ;*   der Adresse einer Long-Variablen initialisiert. Diese Long-Variable      *
  14. ;*   enthält nach erfolgreichem Aufruf die Adresse der VMEM-Service-Routine,  *
  15. ;*   die für jede Funktion aufgerufen werden muß. Falls das Register D0 nach  *
  16. ;*   dem Aufruf einen Wert ungleich 0 enthält, so ist ein Fehler aufgetreten. *
  17. ;*                                                                            *
  18. ;* - der Aufruf einer Funktion ist ähnlich den Betriebssystemaufrufen, da     *
  19. ;*   der Inhalt der Register D0-D2 und A0-A1 danach geändert sein kann !!     *
  20. ;*   Lieber vorher den Inhalt dieser Register retten.                         *
  21. ;*                                                                            *
  22. ;* - die ersten 4 Parameter, die keine Zeiger sind, werden in den Registern   *
  23. ;*   D0 - D3 übergeben (int, long, V_ADR, usw.)                               *
  24. ;*                                                                            *
  25. ;* - ein Zeiger wird immer im Register A0 übergeben                           *
  26. ;*                                                                            *
  27. ;* - die Funktionsnummer steht im Register D7 (32 Bit)                        *
  28. ;*                                                                            *
  29. ;* - ein Funktionsergebnis wird im Register D0 übergeben, falls es sich um    *
  30. ;*   keinen Zeiger handelt. Ansonsten steht das Ergebnis im Register A0       *
  31. ;******************************************************************************
  32.  
  33.             EXPORT vm_config, vm_close, vm_info, vm_alloc
  34.             EXPORT vm_free, vm_address, vm_fill, vm_copy
  35.             EXPORT vm_load, vm_save, vm_write, vm_read, vm_clrcache
  36.  
  37.             IMPORT cj_find
  38.  
  39. COOKIE      equ "VMEM"
  40.  
  41. ; Funktionsnummern:
  42.  
  43. VM_CONFIG   equ 0
  44. VM_CLOSE    equ 1
  45. VM_INFO     equ 2
  46. VM_ALLOC    equ 3
  47. VM_FREE     equ 4
  48. VM_ADDRESS  equ 5
  49. VM_FILL     equ 6
  50. VM_COPY     equ 7   ; im Augenblick noch nicht verfügbar !!!!
  51. VM_LOAD     equ 8
  52. VM_SAVE     equ 9
  53. VM_WRITE    equ 10
  54. VM_READ     equ 11
  55. VM_CLRCACHE equ 12
  56.  
  57. ;************************************
  58. ;* VM_CONFIG:                       *
  59. ;*                                  *
  60. ;* IN:   A0.l: Zeiger auf Parameter *
  61. ;* OUT:  D0.w: Returncode           *
  62. ;************************************
  63. vm_config:
  64.         move.l  d7,-(sp)
  65.  
  66.         pea     (a0)            ; A0 retten
  67.         lea     adresse,a0      ; Platz für Cookie-Wert
  68.         move.l  #COOKIE,d0      ; Cookie-Name
  69.         jsr     cj_find         ; Cookie suchen
  70.         move.l  (sp)+,a0        ; A0 restaurieren
  71.  
  72.         tst.w   d0              ; Cookie gefunden ??
  73.         bne.b   error           ; nein => Fehler !!
  74.  
  75.         moveq   #VM_CONFIG,d7   ; Funktionsnummer
  76.         move.l  adresse,a1      ; Adresse der Service-Routine
  77.         jsr     (a1)            ; Routine aufrufen
  78.  
  79. error:  move.l  (sp)+,d7
  80.         rts
  81.  
  82. error2: moveq   #-1,d0
  83.         rts
  84.  
  85. ;*************
  86. ;* VM_CLOSE: *
  87. ;*           *
  88. ;* IN:   --  *
  89. ;* OUT:  --  *
  90. ;*************
  91. vm_close:
  92.         move.l  d7,-(sp)
  93.         moveq   #VM_CLOSE,d7    ; Funktionsnummer
  94.         move.l  adresse,a1      ; Adresse der Service-Routine
  95.         jsr     (a1)            ; Routine aufrufen
  96.         move.l  (sp)+,d7
  97.         rts
  98.  
  99. ;*************************************
  100. ;* VM_INFO:                          *
  101. ;*                                   *
  102. ;* IN:   --                          *
  103. ;* OUT:  A0.l: Zeiger auf INFO-Daten *
  104. ;*************************************
  105. vm_info:
  106.         move.l  d7,-(sp)
  107.         moveq   #VM_INFO,d7     ; Funktionsnummer
  108.         move.l  adresse,a1      ; Adresse der Service-Routine
  109.         jsr     (a1)            ; Routine aufrufen
  110.         move.l  (sp)+,d7
  111.         rts
  112.  
  113. ;****************
  114. ;* VM_CLRCACHE: *
  115. ;*              *
  116. ;* IN:   --     *
  117. ;* OUT:  --     *
  118. ;****************
  119. vm_clrcache:
  120.         move.l  d7,-(sp)
  121.         moveq   #VM_CLRCACHE,d7 ; Funktionsnummer
  122.         move.l  adresse,a1      ; Adresse der Service-Routine
  123.         jsr     (a1)            ; Routine aufrufen
  124.         move.l  (sp)+,d7
  125.         rts
  126.  
  127. ;***********************
  128. ;* VM_ALLOC:           *
  129. ;*                     *
  130. ;* IN:   D0.l: Größe   *
  131. ;* OUT:  D0.l: Adresse *
  132. ;***********************
  133. vm_alloc:
  134.         move.l  d7,-(sp)
  135.         moveq   #VM_ALLOC,d7    ; Funktionsnummer
  136.         move.l  adresse,a1      ; Adresse der Service-Routine
  137.         jsr     (a1)            ; Routine aufrufen
  138.         move.l  (sp)+,d7
  139.         rts
  140.  
  141. ;**************************
  142. ;* VM_FREE:               *
  143. ;*                        *
  144. ;* IN:   D0.l: Adresse    *
  145. ;* OUT:  D0.w: Returncode *
  146. ;**************************
  147. vm_free:
  148.         move.l  d7,-(sp)
  149.         moveq   #VM_FREE,d7     ; Funktionsnummer
  150.         move.l  adresse,a1      ; Adresse der Service-Routine
  151.         jsr     (a1)            ; Routine aufrufen
  152.         move.l  (sp)+,d7
  153.         rts
  154.  
  155. ;***************************************
  156. ;* VM_ADDRESS:                         *
  157. ;*                                     *
  158. ;* IN:   D0.l: Adresse                 *
  159. ;*       A0.l: Zeiger auf Window-Größe *
  160. ;*       D1.w: Zugriffsmodus           *
  161. ;* OUT:  A0.l: Zeiger auf Window       *
  162. ;***************************************
  163. vm_address:
  164.         move.l  d7,-(sp)
  165.         moveq   #VM_ADDRESS,d7  ; Funktionsnummer
  166.         move.l  adresse,a1      ; Adresse der Service-Routine
  167.         jsr     (a1)            ; Routine aufrufen
  168.         move.l  (sp)+,d7
  169.         rts
  170.  
  171. ;***********************************
  172. ;* VM_FILL:                        *
  173. ;*                                 *
  174. ;* IN:   D0.l: Adresse             *
  175. ;*       D1.l: Anzahl der Bytes    *
  176. ;*       D2.w: Füllwert            *
  177. ;* OUT:  D0.l: tatsächliche Anzahl *
  178. ;***********************************
  179. vm_fill:
  180.         move.l  d7,-(sp)
  181.         moveq   #VM_FILL,d7     ; Funktionsnummer
  182.         move.l  adresse,a1      ; Adresse der Service-Routine
  183.         jsr     (a1)            ; Routine aufrufen
  184.         move.l  (sp)+,d7
  185.         rts
  186.  
  187. ;***********************************
  188. ;* VM_COPY:                        *
  189. ;*                                 *
  190. ;* IN:   D0.l: Quelladresse        *
  191. ;*       D1.l: Zieladresse         *
  192. ;*       D2.l: Anzahl der Bytes    *
  193. ;* OUT:  D0.l: tatsächliche Anzahl *
  194. ;***********************************
  195. vm_copy:
  196.         move.l  d7,-(sp)
  197.         moveq   #VM_COPY,d7     ; Funktionsnummer
  198.         move.l  adresse,a1      ; Adresse der Service-Routine
  199.         jsr     (a1)            ; Routine aufrufen
  200.         move.l  (sp)+,d7
  201.         rts
  202.  
  203. ;**************************************
  204. ;* VM_LOAD:                           *
  205. ;*                                    *
  206. ;* IN:   D0.l: Quelladresse           *
  207. ;*       A0.l: Zieladresse (Speicher) *
  208. ;*       D1.l: Anzahl der Bytes       *
  209. ;* OUT:  D0.l: tatsächliche Anzahl    *
  210. ;**************************************
  211. vm_load:
  212.         move.l  d7,-(sp)
  213.         moveq   #VM_LOAD,d7     ; Funktionsnummer
  214.         move.l  adresse,a1      ; Adresse der Service-Routine
  215.         jsr     (a1)            ; Routine aufrufen
  216.         move.l  (sp)+,d7
  217.         rts
  218.  
  219. ;***************************************
  220. ;* VM_SAVE:                            *
  221. ;*                                     *
  222. ;* IN:   A0.l: Quelladresse (Speicher) *
  223. ;*       D0.l: Zieladresse             *
  224. ;*       D1.l: Anzahl der Bytes        *
  225. ;* OUT:  D0.l: tatsächliche Anzahl     *
  226. ;***************************************
  227. vm_save:
  228.         move.l  d7,-(sp)
  229.         moveq   #VM_SAVE,d7     ; Funktionsnummer
  230.         move.l  adresse,a1      ; Adresse der Service-Routine
  231.         jsr     (a1)            ; Routine aufrufen
  232.         move.l  (sp)+,d7
  233.         rts
  234.  
  235. ;***********************************
  236. ;* VM_WRITE:                       *
  237. ;*                                 *
  238. ;* IN:   D0.w: Datei-Handle        *
  239. ;*       D1.l: Anzahl der Bytes    *
  240. ;*       D2.l: Quelladresse        *
  241. ;* OUT:  D0.l: tatsächliche Anzahl *
  242. ;***********************************
  243. vm_write:
  244.         move.l  d7,-(sp)
  245.         moveq   #VM_WRITE,d7    ; Funktionsnummer
  246.         move.l  adresse,a1      ; Adresse der Service-Routine
  247.         jsr     (a1)            ; Routine aufrufen
  248.         move.l  (sp)+,d7
  249.         rts
  250.  
  251. ;***********************************
  252. ;* VM_READ:                        *
  253. ;*                                 *
  254. ;* IN:   D0.w: Datei-Handle        *
  255. ;*       D1.l: Anzahl der Bytes    *
  256. ;*       D2.l: Zieladresse         *
  257. ;* OUT:  D0.l: tatsächliche Anzahl *
  258. ;***********************************
  259. vm_read:
  260.         move.l  d7,-(sp)
  261.         moveq   #VM_READ,d7     ; Funktionsnummer
  262.         move.l  adresse,a1      ; Adresse der Service-Routine
  263.         jsr     (a1)            ; Routine aufrufen
  264.         move.l  (sp)+,d7
  265.         rts
  266.  
  267.         DATA
  268.  
  269. adresse:
  270.         dc.l error2
  271.  
  272.