Beispiel #1
0
static void DOSMEM_MakeIsrStubs(void)
{
    DWORD *stub = (DWORD*)(DOSMEM_dosmem + (VM_STUB_SEGMENT << 4));
    int x;

    for (x=0; x<256; x++) stub[x]=VM_STUB(x);
}
Beispiel #2
0
/***********************************************************************
 *           DOSMEM_FillBiosSegments
 *
 * Fill the BIOS data segment with dummy values.
 */
static void DOSMEM_FillBiosSegments(void)
{
    BYTE *pBiosSys = (BYTE*)DOSMEM_dosmem + 0xf0000;
    BYTE *pBiosROMTable = pBiosSys+0xe6f5;
    BIOSDATA *pBiosData = DOSVM_BiosData();
    static const char bios_date[] = "13/01/99";

      /* Clear all unused values */
    memset( pBiosData, 0, sizeof(*pBiosData) );

    /* FIXME: should check the number of configured drives and ports */
    pBiosData->Com1Addr             = 0x3f8;
    pBiosData->Com2Addr             = 0x2f8;
    pBiosData->Lpt1Addr             = 0x378;
    pBiosData->Lpt2Addr             = 0x278;
    pBiosData->InstalledHardware    = 0x5463;
    pBiosData->MemSize              = 640;
    pBiosData->NextKbdCharPtr       = 0x1e;
    pBiosData->FirstKbdCharPtr      = 0x1e;
    pBiosData->VideoMode            = 3;
    pBiosData->VideoColumns         = 80;
    pBiosData->VideoPageSize        = 80 * 25 * 2;
    pBiosData->VideoPageStartAddr   = 0xb800;
    pBiosData->VideoCtrlAddr        = 0x3d4;
    pBiosData->Ticks                = DOSMEM_GetTicksSinceMidnight();
    pBiosData->NbHardDisks          = 2;
    pBiosData->KbdBufferStart       = 0x1e;
    pBiosData->KbdBufferEnd         = 0x3e;
    pBiosData->RowsOnScreenMinus1   = 24;
    pBiosData->BytesPerChar         = 0x10;
    pBiosData->ModeOptions          = 0x64;
    pBiosData->FeatureBitsSwitches  = 0xf9;
    pBiosData->VGASettings          = 0x51;
    pBiosData->DisplayCombination   = 0x08;
    pBiosData->DiskDataRate         = 0;

    /* fill ROM configuration table (values from Award) */
    *(pBiosROMTable+0x0)	= 0x08; /* number of bytes following LO */
    *(pBiosROMTable+0x1)	= 0x00; /* number of bytes following HI */
    *(pBiosROMTable+0x2)	= 0xfc; /* model */
    *(pBiosROMTable+0x3)	= 0x01; /* submodel */
    *(pBiosROMTable+0x4)	= 0x00; /* BIOS revision */
    *(pBiosROMTable+0x5)	= 0x74; /* feature byte 1 */
    *(pBiosROMTable+0x6)	= 0x00; /* feature byte 2 */
    *(pBiosROMTable+0x7)	= 0x00; /* feature byte 3 */
    *(pBiosROMTable+0x8)	= 0x00; /* feature byte 4 */
    *(pBiosROMTable+0x9)	= 0x00; /* feature byte 5 */

    /* BIOS date string */
    memcpy(pBiosSys+0xfff5, bios_date, sizeof bios_date);

    /* BIOS ID */
    *(pBiosSys+0xfffe) = 0xfc;

    /* Reboot vector (f000:fff0 or ffff:0000) */
    *(DWORD*)(pBiosSys + 0xfff0) = VM_STUB(0x19);
}
Beispiel #3
0
void* vm_get_object(vm_context* ctx, int index, vm_typespec *spec)
{
    vm_frame* frame;
    vm_value value;

    frame = vm_stack_current_frame(ctx->stack);

    if (frame->base+index < frame->top)
    {
        value = vm_stack_current_base(ctx->stack)[index];
        if (vm_get_interface(value) == vm_typespec_interface(spec))
        {
            return vm_unbox_object(value);
        }
        else
        {
            VM_STUB();
        }
    }
    VM_STUB();
}
Beispiel #4
0
void* vm_get_self_object(vm_context* ctx, vm_typespec *spec)
{
    vm_value self;

    self = vm_stack_current_frame(ctx->stack)->self;
    if (vm_get_interface(self) == vm_typespec_interface(spec))
    {
        return vm_unbox_object(self);
    }
    else
    {
        VM_STUB();
    }
}
Beispiel #5
0
long     vm_get_integer(vm_context* ctx, int index)
{
    vm_value value;

    value = vm_get_value(ctx, index);
    if (vm_unbox_tag(value) == vm_tag_integer)
    {
        return vm_unbox_integer(value);
    }
    else
    {
        VM_STUB();
    }
}
Beispiel #6
0
vm_value vm_get_interface(vm_value value)
{
    switch (vm_unbox_tag(value))
    {
        case vm_tag_object:
            if (value == 0) return 0;
            return ((vm_object*)vm_unbox_object(value))->interface;
        case vm_tag_string:
            return vm_typespec_interface(&vm_string_type);
        case vm_tag_apifunc:
            return vm_typespec_interface(&vm_apifunc_type);
        default:
            printf("object tag: %i\n", vm_unbox_tag(value));
            VM_STUB();
    }
}