021
05.08.2009, 16:09 Uhr
holm
|
@ Olli: guck doch mal rein in den Treiber..
Quellcode: | mt_init() { outb(0xd001, 0); /* Segment-Nr an DMA-Karte */ outb(0xffb3, 0x03); /* CTC 1 Kanal 1 auf ext. Int */ outb(0xffb3, 0xd7); outb(0xffb3, 0x01); }
mtcopy(bp, count) register struct buf *bp; register count; { struct segd mmuout;
/* Programmierung MMU-Segment fuer Uebertragung */ mmuout.sg_base = (int)(bp->b_paddr >>8); mmuout.sg_limit = 0xff; mmuout.sg_attr = 0; loadsd(mmut, MTSEG, &mmuout);
if (bp->b_command == MT_RCOM) /* Zwischenpuffer zur physischen Adresse kopieren */ bcopy(mtbuf, ((int)bp->b_paddr)&0x00ff, MTSEG<<8, count); else /* von physischer Adresse zum Zwischenspeicher kopieren */ bcopy(((int)bp->b_paddr)&0x00ff, MTSEG<<8, mtbuf, count); }
mtsend(unit, command, count) register unsigned unit; register unsigned command; register unsigned count; { mtcom[0] = command | (unit & 1); mtcom[1] = (unsigned)mtbuf & 0xff; /* low Adresse */ mtcom[2] = (unsigned)mtbuf >> 8; /* high Adresse */ mtcom[3] = count; /* Laenge low */ mtcom[4] = (count | (command & 0x8000)) >> 8; outb(0xd003, 0); /* Start DMA */ outb(0xffe1, 0); /* M1 ausgeben */ }
|
Das rädelt schon an der HW herum. Die frage ist, wo jetzt mtcom definiert ist.
Interessant für mich ist übrigens die Geschichte mit dem CTC1, die nehmen den als Interruptgenerator, an sowas hatte ich auch gedacht, ich weiß nur nicht wie ich da einen Draht hin kriege... (habe mir aber den Systembus jetzt nicht angeguckt)
Gruß,
Holm -- float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v; {s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+ (r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&& (A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;} |