mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 07:55:07 +00:00
101 lines
4.6 KiB
Text
101 lines
4.6 KiB
Text
[[OUT]] writes values to register and port hardware addresses.
|
|
|
|
|
|
{{PageSyntax}}
|
|
: [[OUT]] {{Parameter|registerAddress%}}, {{Parameter|value%}}
|
|
|
|
|
|
{{PageParameters}}
|
|
* {{Parameter|registerAddress%}} is a value expressed as a decimal [[INTEGER]] or [[&H|hexadecimal]].
|
|
* The [[INTEGER]] {{Parameter|value%}} sent is normally only 0 to 255 per byte register (8 bit) address.
|
|
|
|
|
|
{{PageDescription}}
|
|
* '''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]] 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 DLLs.
|
|
* [[_PALETTECOLOR]] can also be used to set RGB intensity values using [[_RGB32|32 bit color]] values.
|
|
* OUT can toggle the blinking attribute of SCREEN 0 color 16-31 for legacy code. [[_BLINK]] is the preferred method. (starting with build 20170816/61).
|
|
|
|
|
|
==Color Port Palette access using OUT==
|
|
|
|
:::::{{InlineCode}}OUT &H3C7, attribute{{InlineCodeEnd}} : Set port to read RGB settings for start attribute
|
|
:::::{{InlineCode}}[[INP]] &H3C9, colorIntensity{{InlineCodeEnd}} : Reads RGB color intensity settings in order
|
|
|
|
:::::{{InlineCode}}OUT &H3C8, attribute{{InlineCodeEnd}} : Set port to write RGB settings for start attribute
|
|
:::::{{InlineCode}}OUT &H3C9, colorIntensity{{InlineCodeEnd}} : 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]] color attribute intensities cannot be changed using OUT.
|
|
|
|
|
|
{{PageQBasic}}
|
|
* In DOS, OUT accesses memory and hardware directly, unlike [[POKE]], and could cause PC damage.
|
|
|
|
|
|
{{PageExamples}}
|
|
''Example 1:'' Reading the default RGB color settings of color attribute 15.
|
|
|
|
{{CodeStart}} '' ''
|
|
{{Cl|OUT}} &H3C7, 15 'set color port attribute 15 for a read
|
|
red% = {{Cl|INP}}(&H3C9)
|
|
green% = INP(&H3C9)
|
|
blue% = INP(&H3C9)
|
|
PRINT red%, green%, blue% '' ''
|
|
{{CodeEnd}}
|
|
{{OutputStart}}
|
|
63 63 63
|
|
{{OutputEnd}}
|
|
|
|
|
|
''Example 2:'' Changing the color intensity settings of the [[SCREEN]] background [[COLOR]] 0 to bright white.
|
|
{{CodeStart}} '' ''
|
|
{{Cl|OUT}} &H3C8, 0 'attribute number. 0 for black screen background
|
|
{{Cl|OUT}} &H3C9, 63 'red
|
|
{{Cl|OUT}} &H3C9, 63 'green
|
|
{{Cl|OUT}} &H3C9, 63 'blue '' ''
|
|
{{CodeEnd}}
|
|
:''Explanation:'' In [[SCREEN]] 0 this is one way to make high intensity background colors. {{InlineCode}}[[COLOR]] ,15{{InlineCodeEnd}} is actually grey (7).
|
|
|
|
|
|
''Example 3:'' Toggling blinking colors in SCREEN beginning with build 20170816/61
|
|
{{CodeStart}} '' ''
|
|
{{Cl|OUT}} &H3C0, &H10 'disables blinking and enables high intensity backgrounds (colors 16-31)
|
|
{{Cl|OUT}} &H3C0, 2 ^ 3 'reenables blinking and disables high intensity backgrounds (colors 16-31)
|
|
{{CodeEnd}}
|
|
: Note: In QB64, the recommended practice is to use the [[_BLINK]] {ON|OFF} statement.
|
|
|
|
|
|
''Example 4:'' Restoring colors to a bitmap from the Red, Green and Blue [[BSAVE]]d indexed array of color values.
|
|
{{CodeStart}} '' ''
|
|
{{Cl|SCREEN (statement)|SCREEN}} 12
|
|
{{Cl|OUT}} {{Cl|&H}}3C8, 0 ' set color port for output at attribute 0
|
|
{{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 47 ' 48 RGB values is (3 * 16) -1 color attributes from 0 in screen 12
|
|
{{Cl|OUT}} {{Cl|&H}}3C9, Image%(i) ' changes to next attribute after 3 RGB loops
|
|
{{Cl|NEXT}}
|
|
{{Cl|PUT (graphics statement)|PUT}}(clm, row), Image(48) PSET '' ''
|
|
{{CodeEnd}}
|
|
:''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 (graphics statement)|GET]] image width and 49 is the height.
|
|
|
|
|
|
{{PageSeeAlso}}
|
|
* [[PALETTE]], [[_PALETTECOLOR]]
|
|
* [[INP]] {{text|(read register)}}
|
|
* [[PEEK]] {{text|(read memory)}}
|
|
* [[POKE]] {{text|(write to memory)}}
|
|
* [[COLOR]], [[SCREEN]]
|
|
* [[BSAVE]], [[BLOAD]]
|
|
* [[_BLINK]], [[_BLINK (function)]]
|
|
* [[Port Access Libraries]] {{text|(COM or LPT registers)}}
|
|
|
|
|
|
===External Links===
|
|
* [http://en.wikipedia.org/wiki/Input/output_base_address#Common_I.2FO_base_address_device_assignments_in_IBM_PC_compatible_computers PC I/O base address device assignments]
|
|
|
|
|
|
{{PageNavigation}}
|