mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 11:25:08 +00:00
113 lines
4.1 KiB
Markdown
113 lines
4.1 KiB
Markdown
[OUT](OUT) writes values to register and port hardware addresses.
|
|
|
|
## Syntax
|
|
|
|
> [OUT](OUT) registerAddress%, value%
|
|
|
|
## Parameter(s)
|
|
|
|
* registerAddress% is a value expressed as a decimal [INTEGER](INTEGER) or [&H](&H).
|
|
* The [INTEGER](INTEGER) value% sent is normally only 0 to 255 per byte register (8 bit) address.
|
|
|
|
## Description
|
|
|
|
* **QB64 has limited access to registers. VGA memory and registers are emulated.**
|
|
* 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](INP) reads.
|
|
* [SCREEN](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](Port-Access-Libraries) or other DLLs.
|
|
* [_PALETTECOLOR](_PALETTECOLOR) can also be used to set RGB intensity values using [_RGB32](_RGB32) values.
|
|
* OUT can toggle the blinking attribute of SCREEN 0 color 16-31 for legacy code. [_BLINK](_BLINK) is the preferred method. (starting with build 20170816/61).
|
|
|
|
## Color Port Palette access using OUT
|
|
|
|
> `OUT &H3C7, attribute` : Set port to read RGB settings for start attribute
|
|
|
|
> `[INP](INP) &H3C9, colorIntensity` : Reads RGB color intensity settings in order
|
|
|
|
> `OUT &H3C8, attribute` : Set port to write RGB settings for start attribute
|
|
|
|
> `OUT &H3C9, colorIntensity` : 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.
|
|
* Some [DAC](DAC) color attribute intensities cannot be changed using OUT.
|
|
|
|
## QBasic
|
|
|
|
* In DOS, OUT accesses memory and hardware directly, unlike [POKE](POKE), and could cause PC damage.
|
|
|
|
## Example(s)
|
|
|
|
Reading the default RGB color settings of color attribute 15.
|
|
|
|
```vb
|
|
|
|
OUT &H3C7, 15 'set color port attribute 15 for a read
|
|
red% = INP(&H3C9)
|
|
green% = INP(&H3C9)
|
|
blue% = INP(&H3C9)
|
|
PRINT red%, green%, blue%
|
|
|
|
```
|
|
|
|
```text
|
|
|
|
63 63 63
|
|
|
|
```
|
|
|
|
Changing the color intensity settings of the [SCREEN](SCREEN) background [COLOR](COLOR) 0 to bright white.
|
|
|
|
```vb
|
|
|
|
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](SCREEN) 0 this is one way to make high intensity background colors. `[COLOR](COLOR) ,15` is actually grey (7).
|
|
|
|
Toggling blinking colors in SCREEN beginning with build 20170816/61
|
|
|
|
```vb
|
|
|
|
OUT &H3C0, &H10 'disables blinking and enables high intensity backgrounds (colors 16-31)
|
|
OUT &H3C0, 2 ^ 3 'reenables blinking and disables high intensity backgrounds (colors 16-31)
|
|
|
|
```
|
|
|
|
> Note: In QB64, the recommended practice is to use the [_BLINK](_BLINK) {ON|OFF} statement.
|
|
|
|
Restoring colors to a bitmap from the Red, Green and Blue [BSAVE](BSAVE)d indexed array of color values.
|
|
|
|
```vb
|
|
|
|
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](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 (graphics statement)](GET-(graphics-statement)) image width and 49 is the height.
|
|
|
|
## See Also
|
|
|
|
* [PALETTE](PALETTE), [_PALETTECOLOR](_PALETTECOLOR)
|
|
* [INP](INP) (read register)
|
|
* [PEEK](PEEK) (read memory)
|
|
* [POKE](POKE) (write to memory)
|
|
* [COLOR](COLOR), [SCREEN](SCREEN)
|
|
* [BSAVE](BSAVE), [BLOAD](BLOAD)
|
|
* [_BLINK](_BLINK), [_BLINK (function)](_BLINK-(function))
|
|
* [Port Access Libraries](Port-Access-Libraries) (COM or LPT registers)
|
|
|
|
### External Links
|
|
|
|
* [PC I/O base address device assignments](http://en.wikipedia.org/wiki/Input/output_base_address#Common_I.2FO_base_address_device_assignments_in_IBM_PC_compatible_computers)
|