home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / tt / vmem11 / vmem_prg / install.s next >
Text File  |  1990-09-07  |  2KB  |  73 lines

  1.         EXPORT exit
  2.         EXPORT errno
  3.  
  4.         IMPORT cj_insert
  5.         IMPORT vm_config, vm_close, vm_info, vm_alloc
  6.         IMPORT vm_free, vm_address, vm_fill, vm_copy
  7.         IMPORT vm_load, vm_save, vm_write, vm_read
  8.  
  9. ILLEGAL_FUNCTION    equ -$1234
  10.  
  11. start:
  12.         movea.l    4(sp),a6        ; Basepageadresse holen
  13.         movea.w    #$100+$200,a5    ; Größe der Basepage + Stackgröße (512 Byte)
  14.         adda.l    12(a6),a5        ; + Größe des TEXT-Segments
  15.         adda.l    20(a6),a5        ; + Größe des DATA-Segments
  16.         adda.l    28(a6),a5        ; + Größe des BSS-Segments
  17.         move.l    a5,d1            ; = Gesamtlänge des Programms
  18.         and.w    #$FFFE,d1        ; Länge nun gerade
  19.         add.l    a6,d1            ; + Programmstart (Basepageadresse)
  20.         move.l    d1,sp            ; Stack endet dort
  21.         clr.w    -(sp)            ; Returncode = 0
  22.         move.l    a5,-(sp)        ; Programmlänge
  23.  
  24.         bsr.b    install            ; Routinen installieren
  25.         bne.b    exit
  26.  
  27.         pea        mess_ok(pc)
  28.         move.w    #9,-(sp)
  29.         trap    #1
  30.         addq.l    #6,sp
  31.  
  32.         move.w    #$31,-(sp)        ; Funktionsnummer
  33.         trap    #1                ; Ptermres (Prglänge, Retcode)
  34.  
  35. exit:
  36.         move.w    d0,-(sp)        ; Retcode
  37.         move.w    #$4c,-(sp)
  38.         trap    #1                ; Pterm (Retcode)
  39.  
  40. install:
  41.         move.l    #"VMEM",d0        ; Cookie-Name
  42.         move.l    #service,d1        ; Adresse der Service-Routine
  43.         jsr        cj_insert        ; Cookie einfügen
  44.         tst.w    d0
  45.         rts
  46.  
  47. service:
  48.         cmp.w    #12,d7            ; Funktionsnummer steht in D7
  49.         bhs.b    _illegal        ; >= 12, dann Fehler
  50.         add.w    d7,d7            ; Nummer * 4
  51.         add.w    d7,d7
  52.         lea        tab(pc,d7.l),a1    ; Zeiger auf Tabelle
  53.         move.l    (a1),a1            ; Adresse der Funktion holen
  54.         jmp        (a1)            ; Funktion aufrufen
  55.  
  56. _illegal:
  57. vm_copy:
  58.         move.w    #ILLEGAL_FUNCTION,d0
  59.         rts
  60.  
  61. tab:
  62.         dc.l vm_config, vm_close, vm_info, vm_alloc
  63.         dc.l vm_free, vm_address, vm_fill, vm_copy
  64.         dc.l vm_load, vm_save, vm_write, vm_read
  65.  
  66. mess_ok:
  67.         dc.b 13,10,"************************************"
  68.         dc.b 13,10,"*  Virtual Memory V1.1 installed.  *"
  69.         dc.b 13,10,"************************************",13,10,0
  70.         EVEN
  71. errno:
  72.         dc.w 0
  73.