Assembler: RAMDISK

Eine Ramdisk ist beim ATARI ST schon fast zum Standard geworden. Sie ermöglicht den schnellen Zugriff auf Programme und Dateien und ist besonders beim Arbeiten mit Compilern ein nicht mehr wegzudenkendes Hilfsmittel.

Ramdisk - ein Schlagwort, das wohl jeden ST-Benutzer aufhorchen läßt. Es handelt sich hierbei um ein virtuelles Laufwerk innerhalb des Rechnerspeichers, das wie ein normales Laufwerk angesprochen wird. Die interessanteste Eigenschaft besteht, wie schon erwähnt, in der enorm schnellen Arbeitsgeschwindigkeit, die besonders bei Programmen mit häufigen Diskettenzugriffen (Dateiprogramme, Compiler) eine deutliche Aufwertung des Programmes bewirken. So verkürzt sich beispielsweise ein Compiliervorgang auf einige wenige Sekunden.

Der großzügig ausgelegte Speicher (zumindest bei 520 ST + und 1040), bietet dazu die ideale Grundlage.

Ein Nachteil der bisher käuflichen Ram-disks war allgemein der Preis, der anfangs sogar bei 200, - DM lag und auch heute noch bei den meisten Anbietern ca. 100,- DM beträgt.

Schon allein die Entwicklungszeit, die in unserem Falle weniger als eine Stunde betrug, zeigt, daß ein solcher Preis nicht gerechtfertigt ist.

Bedienung:

Zur Installation der Ramdisks müssen Sie zuerst ein neues Diskettenlaufwerk anmelden. 'Klicken’ Sie dazu ein beliebiges vorhandenes Laufwerk einmal an und wählen Sie die Option 'Diskstation anmelden’.

Tragen Sie in die Dialog-Box die neue Laufwerk-Kennung (’C’) ein und benennen Sie das Laufwerk z. B. mit ’RAM-DISK’. Klicken Sie nun das Feld ’ANMELDEN’, das neue Laufwerk erscheint auf dem Bilschirm. Jetzt kann das entsprechende RAMDISK-Programm (RAM ★★★.PRG) gestartet werden. Um diesen Vorgang nicht bei jedem Neustart wiederholen zu müssen, kann man die augenblickliche Einstellung mit 'Arbeit sichern’ abspeichern und das Ramdisk-Programm in den AUTO-Ordner kopieren.

Die Länge 'der Ramdisk kann frei gewählt werden, dies wird im Source-Listing angegeben. Es sollte nur darauf geachtet werden, daß genügend freier Arbeitsspeicher bestehen bleibt.

Assembler: Digital Research (Entwicklungspaket)

* ram. s
*
* ramdisk for atari 520 st+
* written nov 85 by Jens-Uwe Mager
*

blocks =    512 ;groesse in 1 Kbyte blocks

* offsets in die base-page

prglen  =   $c
datalen =   $14
bsslen  =   $lc
cmdlin  =   $80

* atari globals

hdv_bpb =   $472
hdv_rw  =   $476
hdv_media   =   $47e

drvbits =   $4c2

xbios   =   14
tos     =   1

keepterm    =   $31
supexec =   38

        .text

        move.l  4(sp),a6    ;adresse base page
        pea     vecinit
        move.w  #supexec.-(sp)
        trap    #xbios
        addq.1  #6, sp
        move.l  bsslen(a6),d1
        moveq   #9,d0   ;bsslen div 512
        lsr.l   d0,d1   ;nr blocks
        sub.w   datrec,d1   ;nr dataenbloecke
        lsr.w   #1,d1   ;nr .datencluster
        move.w  d1,numcl
        move.l  prglen(a6),d0
        add.1   dat a1en(a6),d0
        add.l   bsslen(a6),d0
        add.l   *256,d0
        clr.w   -(sp)   ;exit code
        move.l  d0,-(sp)    ;laenge
        move.w  #keepterm,-(sp)
        trap    *tos

vecinit:    move.l  hdv_rw,oldrw+2
        move.l  #rw,hdv_rw
        move.l  hdv_bpb,oldbpb+2
        move.l  #bpb,hdv_bpb
        move.l  hdv_media,oldmedia+2
        move.l  #media,hdv_media 
        move.l  drvbit3,d0 
        move.l  d0,d2
        moveq   #0,d1
drvlp:  lsr.l   #l,d0
        bcc.s   drvfnd
        nddq.w  #1,d1
        bra.s   drvlp
drvfnd: bset    d1,d2
        move.l  d2,drvbits
        move.w  dl,drive
        rts

rw: move.w  drive,d0
        cmp.w   14(sp),d0
        bne     oldrw
        lea     rambase,a0
        move.l  6(sp),a1    ;tos buffer
        moveq   *0,d0
        move.w  12(sp),d1   ;Start block
        moveq   #9,d0       ; *512
        asl.l   d0,d1
        add.1   d1,a0
        move.w  10(sp),d0   ;nr of blocks
        move.l  a1,d2
        btst    *0,d2
        bne.s   bytes
        asl.l   #7,d0       ;blocks -> longs
        btst    #0,5(sp)    ;rwflg
        bne.s   lwords
        cxg a0,a1
lwords: move.l  (a1)+,(a0)+
        subq.l  #1,d0
        bne.s   lwords
        rts
bytes:  moveq   #9,d1
        asl.1   d1,d0   ;blocks -> bytes
        btst    #0,5(sp)    ;rwflg
        bne.s   bytes1
        exg a0,a1
bytes1: move.b (a1)+,(a0)+
        subq.l  #1,d0
        bne.s   bytes1
        rts

oldrw:  jmp -1

bpb:    move.w  drive,d0
        cmp.w   4(sp),d0
        bne.s   oldbpb
        move.l  tmybpb,d0
        rts

oldbpb: jmp -1

media:  move.w  drive,d0
        cmp.w   4(sp),d0
        bne.s   oldmedia
        moveq   #0,d0
        rts

oldmedia:   jmp -1

        .data
drive:  dc.w    0
mybpb:  dc.w    512
clsiz:  dc.w    2
clsizb: dc.w    1024
rdlen:  dc.w    7
fsiz:   dc.w    5
fatrec: dc.w    5
datrec: dc.w    18
numcl:  dc.w    351

        .bss
rambase ds.b    blocks*1024

        .end


Aus:ST-Computer 06 /1986, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite