示例#1
0
文件: V86.C 项目: k-takata/486
void SetV86(void (*f)())
{
#ifdef __MSC__
	_heapmin();
#endif
    SetTSS( (TSS *)&v86tss, seg.cs, seg.ds, f, 0x23002L,
            (unsigned char *) sbrk(0)+2048, seg.ss,
        stack+STACKSIZE, 0x10);

    v86tss.tss.iobase = v86tss.iomap
                       -(unsigned char *)&v86tss;
    memset(v86tss.iomap, 0, sizeof(v86tss.iomap));
    v86tss.iomap[8192]=0xff;

    ProtoTssSel = AllocSel();
    SetSegDesc(ProtoTssSel,
        SegToLinier(seg.ds, (unsigned short) &tss),
            (long) sizeof(TSS), TypeTSS, SmallSeg, 0);
    V86TssSel = AllocSel();
    SetSegDesc(V86TssSel,
        SegToLinier(seg.ds, (unsigned short) &v86tss),
            (long) sizeof(TSS_IO), TypeTSS, SmallSeg, 0);

    IntHandler = v86int;
}
示例#2
0
文件: DPMISIEV.C 项目: dmiyakawa/486
void main(int argc, char *argv[])
{
    unsigned long i,m,snum;
    unsigned long bh, addr;
    unsigned short sel, csel, codesize;
    struct SREGS seg;
    void (__far *sieveFunc)();
    int  (__far *isprimeFunc)();
    void sieve(unsigned short tblsel, unsigned long num);
    int isprime(unsigned short tblsel, unsigned long num);

    if (argc>1)
        m = atol(argv[1]);
    else
        m = NUM;

    segread(&seg);
    codesize=(seg.ds-seg.cs)*16;

    DPMIRealToProto();

    csel = DPMIAllocLDT();
    DPMISetRights(csel, TypeCode+0x60, Code386);
    DPMISetBaseAddr(csel, SegToLinier(seg.cs, 0));
    DPMISetLimit(csel, codesize);
    sieveFunc = (void (__far *)() )
        (((unsigned long)csel<<16) + (unsigned short) sieve);
    isprimeFunc = (int (__far *)() )
        (((unsigned long)csel<<16) + (unsigned short) isprime);

    sel = DPMIAllocLDT();
    bh = DPMIAllocBlock(m+1, &addr);
    DPMISetRights(sel, TypeData+0x60, BigSeg);
    DPMISetBaseAddr(sel, addr);
    DPMISetLimit(sel, m+1);

    sieveFunc(sel, m);
    snum=0;
    for (i=2;i<=m;i++) {
        if (isprimeFunc(sel, i)) {
            snum++;
            printf("%lu ", i);
        }
    }

    putchar('\n');
    printf("%lu prime numbers in 2..%lu\n",snum,m);

    DPMIFreeBlock(bh);
    DPMIFreeLDT(sel);
    DPMIFreeLDT(csel);
    ExitToDos();
}