'''OUT''' writes values to register and port hardware addresses. '''QB64 currently has limited access to registers!''' {{PageSyntax}} :: '''OUT''' ''register_address%''''',''' ''value%'' {{Parameters}} * The ''register address'' is a value expressed as a decimal [[INTEGER]] or [[&H|Hexadecimal]]. * The [[INTEGER]] ''value'' sent is normally only 0 to 255 per one byte register(8 bit) address. {{PageDescription}} * 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 [[_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''' :::::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. {{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. [[COLOR]] ,15 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: For new code, the recommended practice is to use the new [[_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 {{KW|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. ''See also:'' * [[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)}} * [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}}