02-13-2003, 01:54 PM
Hi to all of you,
I'm working on the VESA true colour mode, and I managed to have a set of routines that allow plotting in a 1024x768 screen with full 24bits RGB capacities.
But...
While it works OK when you plot squares, lines etc..., an overflow occurs at the POKE level when you try to plot, for example, a plain white square greater than 40x40
I seems that QB saturates after too many Pokes in a row.
I post the source here, sorry if it's long... but I really need to know if it is a technical limit or only a bug of mine...
DECLARE SUB Pset24 (X%, Y%, r%, g%, b%)
DECLARE SUB SetVGA ()
DECLARE SUB SetText ()
' $DYNAMIC
TYPE RegType
AX AS INTEGER
BX AS INTEGER
CX AS INTEGER
DX AS INTEGER
BP AS INTEGER
SI AS INTEGER
DI AS INTEGER
FLAGS AS INTEGER
DS AS INTEGER
ES AS INTEGER
END TYPE
DIM SHARED Regs AS RegType
DIM SHARED CurBank AS INTEGER
SetVGA
Size = 40
FOR i% = 300 TO 300 + Size
FOR j% = 300 TO 300 + Size
Pset24 i%, j%, 255, 255, 255
NEXT j%
NEXT i%
DO WHILE INKEY$ = ""
LOOP
SetText
REM $STATIC
DEFINT A-Z
SUB Pset24 (X, Y, r, g, b)
DEF SEG = &HA000
Offset& = (1024& * Y + X) * 3&
Bank& = Offset& \ &H10000
Offset& = Offset& - Bank& * &H10000
IF Bank& <> CurBank THEN
CurBank = Bank&
Regs.AX = &H4F05
Regs.BX = 0
Regs.DX = CurBank
CALL INTERRUPT(&H10, Regs, Regs)
END IF
POKE Offset&, r
POKE Offset& + 1, g
POKE Offset& + 2, b
ExitSub:
END SUB
DEFSNG A-Z
SUB SetText
Regs.AX = &H3
CALL INTERRUPT(&H10, Regs, Regs)
END SUB
SUB SetVGA
SCREEN 13
DIM modeInfo(127)
Regs.AX = &H4F01
Regs.CX = &H118
Regs.ES = VARSEG(modeInfo(0))
Regs.DI = VARPTR(modeInfo(0))
CALL INTERRUPTX(&H10, Regs, Regs)
Regs.AX = &H4F02
Regs.BX = &H118
CALL INTERRUPT(&H10, Regs, Regs)
DEF SEG = &HA000
CurBank = 0
END SUB
I'm working on the VESA true colour mode, and I managed to have a set of routines that allow plotting in a 1024x768 screen with full 24bits RGB capacities.
But...
While it works OK when you plot squares, lines etc..., an overflow occurs at the POKE level when you try to plot, for example, a plain white square greater than 40x40
I seems that QB saturates after too many Pokes in a row.
I post the source here, sorry if it's long... but I really need to know if it is a technical limit or only a bug of mine...
DECLARE SUB Pset24 (X%, Y%, r%, g%, b%)
DECLARE SUB SetVGA ()
DECLARE SUB SetText ()
' $DYNAMIC
TYPE RegType
AX AS INTEGER
BX AS INTEGER
CX AS INTEGER
DX AS INTEGER
BP AS INTEGER
SI AS INTEGER
DI AS INTEGER
FLAGS AS INTEGER
DS AS INTEGER
ES AS INTEGER
END TYPE
DIM SHARED Regs AS RegType
DIM SHARED CurBank AS INTEGER
SetVGA
Size = 40
FOR i% = 300 TO 300 + Size
FOR j% = 300 TO 300 + Size
Pset24 i%, j%, 255, 255, 255
NEXT j%
NEXT i%
DO WHILE INKEY$ = ""
LOOP
SetText
REM $STATIC
DEFINT A-Z
SUB Pset24 (X, Y, r, g, b)
DEF SEG = &HA000
Offset& = (1024& * Y + X) * 3&
Bank& = Offset& \ &H10000
Offset& = Offset& - Bank& * &H10000
IF Bank& <> CurBank THEN
CurBank = Bank&
Regs.AX = &H4F05
Regs.BX = 0
Regs.DX = CurBank
CALL INTERRUPT(&H10, Regs, Regs)
END IF
POKE Offset&, r
POKE Offset& + 1, g
POKE Offset& + 2, b
ExitSub:
END SUB
DEFSNG A-Z
SUB SetText
Regs.AX = &H3
CALL INTERRUPT(&H10, Regs, Regs)
END SUB
SUB SetVGA
SCREEN 13
DIM modeInfo(127)
Regs.AX = &H4F01
Regs.CX = &H118
Regs.ES = VARSEG(modeInfo(0))
Regs.DI = VARPTR(modeInfo(0))
CALL INTERRUPTX(&H10, Regs, Regs)
Regs.AX = &H4F02
Regs.BX = &H118
CALL INTERRUPT(&H10, Regs, Regs)
DEF SEG = &HA000
CurBank = 0
END SUB
hink Global, Make Symp' All ! ®