Thread overview |
---|
November 15, 2002 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 |
November 15, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to zhang li | 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 > > > |
November 15, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to KarL | 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 >> >> >> >> > > |
November 15, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to roland | 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 > > roland > 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 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 >>> >>> >>> >>> >> >> > |
November 15, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to roland |
>
> 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
>
> roland
>
At 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
|
November 15, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to roland | > 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 > > roland > In 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 |
November 15, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to zhang li | zhang li wrote: >>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 >> >>roland >> >> > > At DOS video memory is map to a 64 kb frame on 0xb000:0. > dosX can directly read/write video memory address? yes > I need address map of dosX. > see http://www.digitalmars.com/faq.html#vram regards roland |
November 16, 2002 Re: DM accept use those VGA interrupt? | ||||
---|---|---|---|---|
| ||||
Posted in reply to zhang li | 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... > > > 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 > > > > roland > > > > In 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 > > |
Copyright © 1999-2021 by the D Language Foundation