Share

DOS/32 Advanced DOS Extender

The forum address has changed, you have been automatically redirected. Please update any bookmarks to use the new URL.

Subscribe

BUG ? INT $31/$0800 seems not to work

You are viewing a single message from this topic. View all messages.

  1. 2007-12-25 04:29:13 UTC
    [code]
    typedef unsigned int UINT32 ;

    UINT32 MMPHYSLFB,MMLIN,MMSIZE;

    main() {

    printf ("Hello DOSSER !!!\r\n");

    MMPHYSLFB=0xDC000000;
    MMSIZE=4096;
    asm {
    mov ax,0x0800
    mov ebx,[MMPHYSLFB] /* BX:CX physical address of memory, BX is high */
    mov ecx,ebx
    shr ebx,16
    mov esi,[MMSIZE] /* SI:DI size of region to map (bytes), SI is high */
    mov edi,esi
    shr esi,16
    int 0x31
    jnc blah /* OK */
    xor ebx,ebx /* Failure -> Return 0 */
    xor ecx,ecx
    blah: shl ebx,16
    mov bx,cx /* Now we have 32 bits in EBX */
    mov [MMLIN],ebx
    }

    if (MMLIN>1048576) /* then */ {
    printf ("Done: %X -> %X ... ",MMPHYSLFB,MMLIN);
    } else {
    printf ("Mapping failed - Vi$ta/XP NTVDM crap rulez :-(");
    } /* endif */

    } /* endmain */
    [/code]

    Works ... except with DOS32A 9.12 on VCPI (JEMM/JEMMEX/MS-DOG-EMM) :-(

    - DOS32A 7.1 no bug
    - on "raw" or XMS no bug (dummy ;-) )
    - other extenders no bug

    I am not aware of any VESA LFB applications that could also expose / have exposed this bug before :-(

    It's not really critical for me (avoid EMM stuff anyway) ... but seems that I found a bug ... yeah :-D



< Previous | 1 | Next >

Add a Reply

This forum does not allow anonymous participation.

Log in to add a reply. Not registered? Create an account to participate and receive email updates when replies are posted to this topic.