home *** CD-ROM | disk | FTP | other *** search
- #include "portab.h"
- #include "obdefs.h"
- #include "define.h"
- #include "gemdefs.h"
- #include "osbind.h"
-
- struct bpb /* siehe auch BIOS:rwabs.c fuer weitere Informationen */
- {
- WORD recsiz,
- clsiz,
- clsizb,
- rdlen,
- fsiz,
- fatrec,
- datrec,
- numcl,
- bflags;
- };
-
- int contrl[12]; /* AES Kontroll Felder */
- int intin[128];
- int ptsin[128];
- int intout[128];
- int ptsout[128];
-
- typedef LONG (*PFL)(); /* Zeiger auf Funktion, die ein lang-Adresse liefer */
- typedef WORD (*PFW)(); /* Zeiger auf Funktion, die ein Wort liefert */
-
- PFL getbpb; /* Zeiger auf die Originalfunktion getbpb */
- PFW mediach; /* Zeiger auf die Originalfunktion mediach */
- PFL rwabs; /* Zeiger auf die Originalfunktion rwabs */
-
- struct bpb rdiskbpb = { 512,2,1024,7,5,6,18,351,0 };
- /* gleiche Struktur wie bei 3,5 Zoll SSDD Disketten */
-
- int data[184320]; /* gleiche groesse des Speicherplatzes wie 3,5 SSDD */
-
-
- /* Daten fuer die ersten beiden Tracks der Diskette */
- int fdata[0x50]={
- 0x0000,0x4e4e,0x4e4e,0x4e4e,0xe1d1,0x2300,0x0202,0x0100,
- 0x0270,0x00d0,0x02f8,0x0500,0x0900,0x0100,0x0000,0x4e4e,
- 0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,
- 0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xf5f5,0xf5fe,0x4f00,0x0102,
- 0xf74e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,0x4e4e,
- 0x4e4e,0x4e4e,0x4e4e,0x4e00,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x00f5,0xf5f5,0xfbe5,0xe5e5,0xe5e5,0xe5e5,0xe5e5,
- 0x5241,0x4d2d,0x4449,0x534b,0x3532,0x3008,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 };
-
- LONG RDgetbpb(dev) /* neue RAM DISK getbpb Funktion */
- WORD dev;
- {
- if(dev != 3)
- return((*getbpb)(dev)); /* fals nicht RAM DISK */
- else
- return(&rdiskbpb); /* fals RAM DISK */
- }
-
- WORD RDmediach(dev) /* neue RAM DISK mediach Funktion */
- WORD dev;
- {
- if(dev != 3)
- return((*mediach)(dev)); /* fals nicht RAM DISK */
- else
- return(0); /* RAM DISK aendert Disk nicht */
- }
-
- LONG RDrwabs(rw,buf,count,recno,dev) /* neue RAM DISK rwabs Funktion */
- WORD rw;
- int *buf;
- WORD count,recno,dev;
- {
- int i;
- int *p;
-
- if (dev != 3)
- return((*rwabs)(rw,buf,count,recno,dev)); /* fals nicht RAM DISK */
- else
- {
- if (rw > 1) /* RAM DISK wird nicht gewechselt */
- rw -=2;
- while(count>0)
- {
- p = &data[((long) recno) * 256l];
- if(rw==0)
- for(i=0;i<256;i++)
- *buf++ = *p++;
- else
- for(i=0;i<256;i++)
- *p++ = *buf++;
- count--;
- recno++;
- }
- return(0l);
- }
- }
-
- install()
- {
- long *bpbvect = 0x472;
- long *rwvect = 0x476;
- long *mcvect = 0x47e;
- long *devset = 0x4c2;
-
- getbpb = (PFL) *bpbvect; /* speichere alte Vektoren */
- mediach = (PFW) *mcvect;
- rwabs = (PFL) *rwvect;
-
- *bpbvect = RDgetbpb; /* installiere neue Vektoren */
- *mcvect = RDmediach;
- *rwvect = RDrwabs;
-
- *devset = (*devset) | (0x08l);
- }
-
- sleep()
- {
- int i;
-
- while (1)
- {
- i=evnt_timer(60000,0); /* warte 60 sec ueber Timer */
- Bconout(2,7); /* Beep als Lebenszeichen */
- }
- }
-
- main()
- {
- appl_init(); /* AES init fuer AES Routinen */
-
- format(); /* 'Formatiere' RAM DISK */
-
- xbios(38,install); /* Installiere Vektoren in SP Mode */
- sleep(); /* Accessories enden niemals */
- }
-
- format()
- {
- long i;
-
- for(i=0;i<0x100;data[i++]=0xe5e5); /* loesche RAM DISK */
- for(i=0;i<0x40l;data[i]=fdata[i++]); /* schreibe ersten Track */
- data[0xffl]=0x2F72;
- for(i=0x0100;i<0x1200l;data[i++]=0x0000);
- data[0x0100l]=0xf7ff;
- data[0x0101l]=0xff00;
- data[0x0600l]=0xf7ff;
- data[0x0601l]=0xff00;
- for(i=0;i<0x10l;i++) /* schreibe zweiten Track */
- data[0x0b00l+i]=fdata[0x40l+i];
- }
-