pcscrnio.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 478 行 · 第 1/2 页

H
478
字号
        " push   ebp            "                       \
        " mov    cx, 0          "                       \
        " mov    dx, 3250h      "                       \
        " mov    ax, 600h       "                       \
        _INT_10                                         \
        " pop    ebp            "                       \
        parm [ bh ]                                     \
        modify exact [ ax cx dx ];

extern uint_8 _ReadCRTCReg( uint_16 vidport, uint_8 regnb );
#pragma aux _ReadCRTCReg =                      \
        "out    dx, al          ",              \
        "inc    dx              ",              \
        "in     al, dx          "               \
        parm [ dx ] [ al ]                      \
        modify exact [ al dx ];

extern void _WriteCRTCReg( uint_16 vidport, uint_8 regnb, uint_8 value );
#pragma aux _WriteCRTCReg =                     \
        "out    dx, al          ",              \
        "inc    dx              ",              \
        "mov    al, ah          ",              \
        "out    dx, al          "               \
        parm [ dx ] [ al ] [ ah ]               \
        modify exact [ al dx ];

#if 0

extern unsigned_8 VIDGetRow( unsigned_16 vidport );
#pragma aux VIDGetRow =                                 \
        " mov    al, 0fh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         "                       \
        parm [ dx ]                                     \
        modify exact [ al dx ];

extern void VIDSetRow( unsigned_16 vidport, unsigned_8 row );
#pragma aux VIDSetRow =                                 \
        " mov    al, 0fh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " mov    al, ah         ",                      \
        " out    dx, al         "                       \
        parm [ dx ] [ ah ]                              \
        modify exact [ ax dx ];

extern void VIDSetPos( unsigned_16 vidport, unsigned_16 cursorpos );
#pragma aux VIDSetPos =                                 \
        " mov    al, 0fh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " mov    al, bl         ",                      \
        " out    dx, al         ",                      \
        " dec    dx             ",                      \
        " mov    al, 0eh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " mov    al, bh         ",                      \
        " out    dx, al         "                       \
        parm [ dx ] [ bx ]                              \
        modify exact [ al dx ];

extern unsigned_16 VIDGetPos( unsigned_16 vidport );
#pragma aux VIDGetPos =                                 \
        " mov    al, 0fh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         ",                      \
        " mov    ah, al         ",                      \
        " dec    dx             ",                      \
        " mov    al, 0eh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         ",                      \
        " xchg   ah, al         "                       \
        parm [ dx ]                                     \
        modify exact [ ax dx ];

extern unsigned_8 VIDGetCol( unsigned_16 vidport );
#pragma aux VIDGetCol =                                 \
        " mov    al, 0eh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         "                       \
        parm [ dx ]                                     \
        modify exact [ al dx ];

extern void VIDSetCurTyp( unsigned_16 vidport, unsigned_16 cursortyp );
#pragma aux VIDSetCurTyp =                              \
        " push   ax             ",                      \
        " mov    al, 0ah        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " mov    al, ah         ",                      \
        " out    dx, al         ",                      \
        " dec    dx             ",                      \
        " mov    al, 0bh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " pop    ax             ",                      \
        " out    dx, al         "                       \
        parm [ dx ] [ ax ]                              \
        modify exact [ al dx ];

extern unsigned_16 VIDGetCurTyp( unsigned_16 vidport );
#pragma aux VIDGetCurTyp =                              \
        " mov    al, 0bh        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         ",                      \
        " mov    ah, al         ",                      \
        " dec    dx             ",                      \
        " mov    al, 0ah        ",                      \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         ",                      \
        " xchg   ah, al         "                       \
        parm [ dx ]                                     \
        modify exact [ ax dx ];

#endif

extern void VIDWait( void );
#pragma aux VIDWait =                                   \
        " jmp  x                "                       \
        " x:                    "                       \
        modify exact [ ];

extern unsigned BIOSEGAInfo( void );
#pragma aux BIOSEGAInfo =                               \
        " push   ebp            "                       \
        " mov    ah, 12h        "                       \
        " mov    bx, 0ff10h     "                       \
        _INT_10                                         \
        " shl    ebx, 10h       "                       \
        " mov    bx, cx         "                       \
        " pop    ebp            "                       \
        modify exact [ ah ebx cx ]                      \
        value [ ebx ];

extern unsigned_8 BIOSGetRows( void );
#pragma aux BIOSGetRows =                               \
        " push  es              "                       \
        " push  ebp             "                       \
        " mov   ax, 1130h       "                       \
        " mov   bh, 0           "                       \
        _INT_10                                         \
        " inc   dl              "                       \
        " pop   ebp             "                       \
        " pop   es              "                       \
/*      modify exact [ ax bh cx dl ] */                 \
        modify exact [ ax ebx ecx edx edi ] /* workaround bug in DOS4G */\
        value [ dl ];

extern unsigned_16 BIOSGetPoints( void );
#pragma aux BIOSGetPoints =                             \
        " push  es              "                       \
        " push  ebp             "                       \
        " mov   ax, 1130h       "                       \
        " mov   bh, 0           "                       \
        _INT_10                                         \
        " pop   ebp             "                       \
        " pop   es              "                       \
/*      modify exact [ ax bh cx dl ] */                 \
        modify exact [ ax ebx ecx edx edi ] /* workaround bug in DOS4G */\
        value [ cx ];

extern void BIOSEGAChrSet( unsigned_8 vidroutine );
#pragma aux BIOSEGAChrSet =                             \
        " push   ebp            "                       \
        " mov    ah, 11h        "                       \
        " mov    bl, 0          "                       \
        _INT_10                                         \
        " pop    ebp            "                       \
        parm [ al ]                                     \
        modify exact [ ah bl ];

extern void _ega_write( unsigned_16, unsigned_8, unsigned_8 );
#pragma aux _ega_write =                                \
        " out    dx, ax         "                       \
        parm [ dx ] [ al ] [ ah ]                       \
        modify exact [ ];

extern unsigned_8 _vga_read( unsigned_16, unsigned_8 );
#pragma aux _vga_read =                                 \
        " out    dx, al         ",                      \
        " inc    dx             ",                      \
        " in     al, dx         "                       \
        parm [ dx ] [ al ]                              \
        modify exact [ al dx ];

extern void _disablev( unsigned_16 );
#pragma aux _disablev =                                 \
        " again:                "                       \
        " in     al, dx         ",                      \
        " test   al, 8          ",                      \
        " je     again          ",                      \
        " mov    dx, 3c0h       ",                      \
        " mov    al, 11h        ",                      \
        " out    dx, al         ",                      \
        " mov    al, 0          ",                      \
        " out    dx, al         "                       \
        parm [ dx ]                                     \
        modify exact [ al dx ];

extern void _enablev( unsigned_16 );
#pragma aux _enablev =                                  \
        " again:                "                       \
        " in     al, dx         ",                      \
        " test   al, 8          ",                      \
        " je     again          ",                      \
        " mov    dx, 3c0h       ",                      \
        " mov    al, 31h        ",                      \
        " out    dx, al         ",                      \
        " mov    al, 0          ",                      \
        " out    dx, al         "                       \
        parm [ dx ]                                     \
        modify exact [ al dx ];

extern unsigned_16 _vidstatesize( unsigned_16 requestedstate );
#pragma aux _vidstatesize =                             \
        " mov    ax, 1c00h      "                       \
        _INT_10                                         \
        " cmp    al, 1ch        "                       \
        " je     end            "                       \
        " mov    bx, 0          "                       \
        " end:                  "                       \
        parm [ cx ]                                     \
        modify exact [ ax bx ]                          \
        value [ bx ];

extern void Fillb( void __far *dst, unsigned_8 value, unsigned_16 count );
#pragma aux Fillb =                                     \
        "db 0x65"                                       \
        " rep   stosb           "                       \
        parm [ gs edi ] [ al ] [ ecx ]                  \
        modify exact [ edi ecx ];

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?