From QB64 Wiki
OUT writes values to register and port hardware addresses. QB64 currently has limited access to registers!
- OUT register_address%, value%
- The register address is a value expressed as a decimal INTEGER or Hexadecimal.
- The INTEGER value sent is normally only 0 to 255 per one byte register(8 bit) address.
- OUT can be used to change color port and a limited number of other port settings in QB64.
- Some settings may be set in a specific order to gain access to settings and INP reads.
- SCREEN modes determine the number of available color palette attributes from 2 to 256 in SCREEN 13.
- Windows NT may block access to Parallel printer and Serial ports! See Port Access Libraries or other DLL's.
- WARNING! Be sure that the address is useable. OUT accesses directly unlike POKE and can cause PC damage!
- _PALETTECOLOR can also be used to set RGB intensity values using 32 bit color values.
- Color Port Palette access using OUT
- OUT &H3C7, attribute : Set port to read RGB settings for start attribute
- INP &H3C9, color_intensity : Reads RGB color intensity settings in order
- OUT &H3C8, attribute : Set port to write RGB settings for start attribute
- OUT &H3C9, color_intensity : Writes RGB color intensity settings in order
- Every 3 reads or writes, changes to next color attribute without a set
- Color setting is Red, Green and Blue attribute intensities in order.
- Color attribute intensity values range from 0 to 63 only. NOT 64!
- Some DAC color attribute intensities cannot be changed using OUT.
Example 1: Reading the default RGB color settings of color attribute 15.
OUT &H3C7, 15 'set color port attribute 15 for a read red% = INP(&H3C9) green% = INP(&H3C9) blue% = INP(&H3C9) PRINT red%, green%, blue%
63 63 63
OUT &H3C8, 0 'attribute number. 0 for black screen background OUT &H3C9, 63 'red OUT &H3C9, 63 'green OUT &H3C9, 63 'blue
- Explanation: In SCREEN 0 this is one way to make high intensity background colors. COLOR ,15 is actually grey(7).
Example 3: Restoring colors to a bitmap from the Red, Green and Blue BSAVEd indexed array of color values.
SCREEN 12 OUT &H3C8, 0 ' set color port for output at attribute 0 FOR i = 0 TO 47 ' 48 RGB values is (3 * 16) -1 color attributes from 0 in screen 12 OUT &H3C9, Image%(i) ' changes to next attribute after 3 RGB loops NEXT PUT(clm, row), Image(48) PSET
- Explanation: The color RGB intensity settings were imported from a file to the Image array using BLOAD. The color attribute advances to the next one every 3 writes using OUT. The color information was indexed to the start of the array. The image is after the color settings at index 48. Index 48 is the GET image width and 49 is the height.
- PALETTE, _PALETTECOLOR
- INP (read register)
- PEEK (read memory)
- POKE (write to memory)
- COLOR, SCREEN
- BSAVE, BLOAD
- Port Access Libraries (COM or LPT registers)
- PC I/O base address device assignments