c++.dos.32-bits - DM accept use those VGA interrupt?
Set palette register (Int 10/10) INT 10 - VIDEO - (Jr, PS, TANDY 1000, EGA, VGA) AX = 1000h BL = palette register to set BH = color value to store Note: on MCGA, only BX = 0712h is supported SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA) AX = 1001h BH = color value to store SeeAlso: AX=1008h -------- INT 10 - VIDEO - SET ALL PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA) AX = 1002h ES:DX -> 17-byte palette register list (see below) SeeAlso: AX=1000h,1009h Format of palette register list: Offset Size Description 00h 16 BYTEs values for palette registers 0-15 10h BYTE value for border color register -------- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA) AX = 1003h BL = 00h enable intensity = 01h enable blink -------- INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA) AX = 1007h BL = palette register number Return: BH = palette register value SeeAlso: AX=1000h,1009h -------- INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA) AX = 1008h Return: BH = value SeeAlso: AX=1001h -------- INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA) AX = 1009h ES:DX -> 17-byte buffer (see AX=1002h) SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1010h BX = register number CH = new value for green (0-63) CL = new value for blue (0-63) DH = new value for red (0-63) SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1012h BX = starting color register CX = number of registers to set ES:DX -> table of 3*CX bytes where each 3 byte group represents one byte each of red, green and blue (0-63) SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA) AX = 1013h BL = 00h Select paging mode BH = 00h Select 4 blocks of 64 BH = 01h Select 16 blocks of 16 BL = 01h Select Page BH = page number (00h to 03h) or (00h to 0Fh) Note: not valid in mode 13h SeeAlso: AX=101Ah -------- INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1015h BL = palette register number Return: DH = red value CH = green value CL = blue value SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1017h BX = starting palette register CX = number of palette registers to read ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h) Return: CX number of red, green and blue triples in buffer SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - undocumented - SET PEL MASK (EGA, VGA/MCGA) AX = 1018h BL = new PEL value SeeAlso: AX=1019h -------- INT 10 - VIDEO - undocumented - READ PEL MASK (EGA, VGA/MCGA) AX = 1019h Return: BL = value read SeeAlso: AX=1018h -------- INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA) AX = 101Ah Return: BL = paging mode 00h four pages of 64 01h sixteen pages of 16 BH = current page SeeAlso: AX=1013h -------- INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (EGA, VGA/MCGA) AX = 101Bh BX = starting palette register CX = number of registers to convert SeeAlso: AH=12h/BL=33h
Nov 14 2002
Not if you write in __ASM If you use the int wrapper, it will work with DM + all those extenders. The problem lies with the FS and GS registers that BIOS doesn't know about. You can't call BIOS without protections. "zhang li" <li stands.3322.org> wrote in message news:ar2423$75a$1 digitaldaemon.com...Set palette register (Int 10/10) INT 10 - VIDEO - (Jr, PS, TANDY 1000, EGA, VGA) AX = 1000h BL = palette register to set BH = color value to store Note: on MCGA, only BX = 0712h is supported SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA) AX = 1001h BH = color value to store SeeAlso: AX=1008h -------- INT 10 - VIDEO - SET ALL PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA) AX = 1002h ES:DX -> 17-byte palette register list (see below) SeeAlso: AX=1000h,1009h Format of palette register list: Offset Size Description 00h 16 BYTEs values for palette registers 0-15 10h BYTE value for border color register -------- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA) AX = 1003h BL = 00h enable intensity = 01h enable blink -------- INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA) AX = 1007h BL = palette register number Return: BH = palette register value SeeAlso: AX=1000h,1009h -------- INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA) AX = 1008h Return: BH = value SeeAlso: AX=1001h -------- INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA) AX = 1009h ES:DX -> 17-byte buffer (see AX=1002h) SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1010h BX = register number CH = new value for green (0-63) CL = new value for blue (0-63) DH = new value for red (0-63) SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1012h BX = starting color register CX = number of registers to set ES:DX -> table of 3*CX bytes where each 3 byte group represents one byte each of red, green and blue (0-63) SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA) AX = 1013h BL = 00h Select paging mode BH = 00h Select 4 blocks of 64 BH = 01h Select 16 blocks of 16 BL = 01h Select Page BH = page number (00h to 03h) or (00h to 0Fh) Note: not valid in mode 13h SeeAlso: AX=101Ah -------- INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1015h BL = palette register number Return: DH = red value CH = green value CL = blue value SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1017h BX = starting palette register CX = number of palette registers to read ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h) Return: CX number of red, green and blue triples in buffer SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - undocumented - SET PEL MASK (EGA, VGA/MCGA) AX = 1018h BL = new PEL value SeeAlso: AX=1019h -------- INT 10 - VIDEO - undocumented - READ PEL MASK (EGA, VGA/MCGA) AX = 1019h Return: BL = value read SeeAlso: AX=1018h -------- INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA) AX = 101Ah Return: BL = paging mode 00h four pages of 64 01h sixteen pages of 16 BH = current page SeeAlso: AX=1013h -------- INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (EGA, VGA/MCGA) AX = 101Bh BX = starting palette register CX = number of registers to convert SeeAlso: AH=12h/BL=33h
Nov 14 2002
KarL wrote:Not if you write in __ASM If you use the int wrapper, it will work with DM + all those extenders. The problem lies with the FS and GS registers that BIOS doesn't know about. You can't call BIOS without protections.???? #define _INTSIZE sizeof(int) #if (_INTSIZE==4) //32 bit DOSX #define _V_INT(regs) int86_real(0x10,®s,®s) #define _V_INTS(regs,sregs) int86x_real(0x10,®s,®s,&sregs) #else //16 bit #define _V_INT(regs) int86(0x10,®s,®s) #define _V_INTS(regs,sregs) int86x(0x10,®s,®s,&sregs) #endif will do the job roland"zhang li" <li stands.3322.org> wrote in message news:ar2423$75a$1 digitaldaemon.com...Set palette register (Int 10/10) INT 10 - VIDEO - (Jr, PS, TANDY 1000, EGA, VGA) AX = 1000h BL = palette register to set BH = color value to store Note: on MCGA, only BX = 0712h is supported SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA) AX = 1001h BH = color value to store SeeAlso: AX=1008h -------- INT 10 - VIDEO - SET ALL PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA) AX = 1002h ES:DX -> 17-byte palette register list (see below) SeeAlso: AX=1000h,1009h Format of palette register list: Offset Size Description 00h 16 BYTEs values for palette registers 0-15 10h BYTE value for border color register -------- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA) AX = 1003h BL = 00h enable intensity = 01h enable blink -------- INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA) AX = 1007h BL = palette register number Return: BH = palette register value SeeAlso: AX=1000h,1009h -------- INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA) AX = 1008h Return: BH = value SeeAlso: AX=1001h -------- INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA) AX = 1009h ES:DX -> 17-byte buffer (see AX=1002h) SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1010h BX = register number CH = new value for green (0-63) CL = new value for blue (0-63) DH = new value for red (0-63) SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1012h BX = starting color register CX = number of registers to set ES:DX -> table of 3*CX bytes where each 3 byte group represents one byte each of red, green and blue (0-63) SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA) AX = 1013h BL = 00h Select paging mode BH = 00h Select 4 blocks of 64 BH = 01h Select 16 blocks of 16 BL = 01h Select Page BH = page number (00h to 03h) or (00h to 0Fh) Note: not valid in mode 13h SeeAlso: AX=101Ah -------- INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1015h BL = palette register number Return: DH = red value CH = green value CL = blue value SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1017h BX = starting palette register CX = number of palette registers to read ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h) Return: CX number of red, green and blue triples in buffer SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - undocumented - SET PEL MASK (EGA, VGA/MCGA) AX = 1018h BL = new PEL value SeeAlso: AX=1019h -------- INT 10 - VIDEO - undocumented - READ PEL MASK (EGA, VGA/MCGA) AX = 1019h Return: BL = value read SeeAlso: AX=1018h -------- INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA) AX = 101Ah Return: BL = paging mode 00h four pages of 64 01h sixteen pages of 16 BH = current page SeeAlso: AX=1013h -------- INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (EGA, VGA/MCGA) AX = 101Bh BX = starting palette register CX = number of registers to convert SeeAlso: AH=12h/BL=33h
Nov 15 2002
roland wrote:#define _INTSIZE sizeof(int) #if (_INTSIZE==4) //32 bit DOSX #define _V_INT(regs) int86_real(0x10,®s,®s) #define _V_INTS(regs,sregs) int86x_real(0x10,®s,®s,&sregs) #else //16 bit #define _V_INT(regs) int86(0x10,®s,®s) #define _V_INTS(regs,sregs) int86x(0x10,®s,®s,&sregs) #endif will do the job rolandjust i have a little doubt about interrupts where you have to pass a buffer (int 10h fc 1002h for example). if it does not work like this, allocate a buffer below the 1M limit. see www.digitalmars.com/faq.html#realbuffer roland"zhang li" <li stands.3322.org> wrote in message news:ar2423$75a$1 digitaldaemon.com...Set palette register (Int 10/10) INT 10 - VIDEO - (Jr, PS, TANDY 1000, EGA, VGA) AX = 1000h BL = palette register to set BH = color value to store Note: on MCGA, only BX = 0712h is supported SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA) AX = 1001h BH = color value to store SeeAlso: AX=1008h -------- INT 10 - VIDEO - SET ALL PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA) AX = 1002h ES:DX -> 17-byte palette register list (see below) SeeAlso: AX=1000h,1009h Format of palette register list: Offset Size Description 00h 16 BYTEs values for palette registers 0-15 10h BYTE value for border color register -------- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA) AX = 1003h BL = 00h enable intensity = 01h enable blink -------- INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA) AX = 1007h BL = palette register number Return: BH = palette register value SeeAlso: AX=1000h,1009h -------- INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA) AX = 1008h Return: BH = value SeeAlso: AX=1001h -------- INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA) AX = 1009h ES:DX -> 17-byte buffer (see AX=1002h) SeeAlso: AX=1002h,1007h -------- INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1010h BX = register number CH = new value for green (0-63) CL = new value for blue (0-63) DH = new value for red (0-63) SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1012h BX = starting color register CX = number of registers to set ES:DX -> table of 3*CX bytes where each 3 byte group represents one byte each of red, green and blue (0-63) SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA) AX = 1013h BL = 00h Select paging mode BH = 00h Select 4 blocks of 64 BH = 01h Select 16 blocks of 16 BL = 01h Select Page BH = page number (00h to 03h) or (00h to 0Fh) Note: not valid in mode 13h SeeAlso: AX=101Ah -------- INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA) AX = 1015h BL = palette register number Return: DH = red value CH = green value CL = blue value SeeAlso: AX=1010h,1017h -------- INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (EGA, VGA/MCGA) AX = 1017h BX = starting palette register CX = number of palette registers to read ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h) Return: CX number of red, green and blue triples in buffer SeeAlso: AX=1012h,1015h -------- INT 10 - VIDEO - undocumented - SET PEL MASK (EGA, VGA/MCGA) AX = 1018h BL = new PEL value SeeAlso: AX=1019h -------- INT 10 - VIDEO - undocumented - READ PEL MASK (EGA, VGA/MCGA) AX = 1019h Return: BL = value read SeeAlso: AX=1018h -------- INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA) AX = 101Ah Return: BL = paging mode 00h four pages of 64 01h sixteen pages of 16 BH = current page SeeAlso: AX=1013h -------- INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (EGA, VGA/MCGA) AX = 101Bh BX = starting palette register CX = number of registers to convert SeeAlso: AH=12h/BL=33h
Nov 15 2002
just i have a little doubt about interrupts where you have to pass a buffer (int 10h fc 1002h for example). if it does not work like this, allocate a buffer below the 1M limit. see www.digitalmars.com/faq.html#realbuffer rolandAt DOS video memory is map to a 64 kb frame on 0xb000:0. dosX can directly read/write video memory address? I need address map of dosX. Thanks li
Nov 15 2002
zhang li wrote:yesjust i have a little doubt about interrupts where you have to pass a buffer (int 10h fc 1002h for example). if it does not work like this, allocate a buffer below the 1M limit. see www.digitalmars.com/faq.html#realbuffer rolandAt DOS video memory is map to a 64 kb frame on 0xb000:0. dosX can directly read/write video memory address?I need address map of dosX.see http://www.digitalmars.com/faq.html#vram regards roland
Nov 15 2002
just i have a little doubt about interrupts where you have to pass a buffer (int 10h fc 1002h for example). if it does not work like this, allocate a buffer below the 1M limit. see www.digitalmars.com/faq.html#realbuffer rolandIn this example, maybe don't need allocate memory, use this idea maybe pass. #define PUSHALL \ asm { \ push ax; \ push bx; \ push cx; \ push dx; \ push es; \ push ds; \ push si; \ push di; \ push bp; \ } #define POPALL \ asm { \ pop bp; \ pop di; \ pop si; \ pop ds; \ pop es; \ pop dx; \ pop cx; \ pop bx; \ pop ax; \ } copyRegs( int ss, int sp ) { char far *s = ; memcpy( MK_FP(ss,sp), regSet ); } main() { PUSHALL copyRegs( _SS, _SP ); POPALL asm int 0x10; PUSHALL keepRegs( _SS, _SP ); POPALL } li
Nov 15 2002
A warn about use BP register. C/C++ often access stack by BP register. so do not change it. instead of a "asm pushf" and "asm popf" to keep running flags register. li. "zhang li" <li stands.3322.org> 写入消息新闻 :ar2rmb$1064$1 digitaldaemon.com...pass.just i have a little doubt about interrupts where you have to pass a buffer (int 10h fc 1002h for example). if it does not work like this, allocate a buffer below the 1M limit. see www.digitalmars.com/faq.html#realbuffer rolandIn this example, maybe don't need allocate memory, use this idea maybe#define PUSHALL \ asm { \ push ax; \ push bx; \ push cx; \ push dx; \ push es; \ push ds; \ push si; \ push di; \ push bp; \ } #define POPALL \ asm { \ pop bp; \ pop di; \ pop si; \ pop ds; \ pop es; \ pop dx; \ pop cx; \ pop bx; \ pop ax; \ } copyRegs( int ss, int sp ) { char far *s = ; memcpy( MK_FP(ss,sp), regSet ); } main() { PUSHALL copyRegs( _SS, _SP ); POPALL asm int 0x10; PUSHALL keepRegs( _SS, _SP ); POPALL } li
Nov 16 2002