PEEK: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 50: Line 50:
: '''NOTE: Keyboard Port function key settings cannot be reset on NT machines!'''
: '''NOTE: Keyboard Port function key settings cannot be reset on NT machines!'''


=== More Examples ===
* [[SelectScreen]]




''See Example:'' [[SelectScreen]] (Screen 0 row highlighting)
{{PageSeeAlso}}
 
* [[POKE]], [[INP]]
 
''See also:''
* [[POKE]] {{text|(write to memory)}}, [[INP]] {{text|(read register)}}
* [[DEF SEG]], [[VARSEG]], [[VARPTR]]
* [[DEF SEG]], [[VARSEG]], [[VARPTR]]
* [[_MEMGET (function)]], [[_MEMPUT]]
* [[_MEMGET (function)]], [[_MEMPUT]]
* [[DEF SEG = 0]], [[Scancodes]] {{text|(demo)}}
* [[DEF SEG = 0]], [[Scancodes]]
* [[PEEK and POKE Library]]
* [[PEEK and POKE Library]]
* [[Screen Memory]]
* [[Screen Memory]]

Latest revision as of 21:24, 2 February 2023

The PEEK function returns the value that is contained at a certain memory address offset. QB64 currently has limited access!


Syntax

variable = PEEK(segment_offset)


  • Reads the specified memory segment_offset value.
  • Use DEF SEG before PEEK to specify which memory segment to work in.
  • PEEK only reads the memory byte value. Not certain bits. (See AND)
  • Important SCREEN segments using PEEK and POKE include &HB800 (text segment) and &HA000 (graphics segment).
  • To return to Basic default segment use DEF SEG without any arguments.
  • Warning: DEF SEG, VARSEG , VARPTR, PEEK or POKE access QB64's emulated 16 bit conventional memory block!
It is highly recommended that QB64's _MEM memory system be used to avoid running out of memory.


Example: Checking the 8 keyboard bit settings using a PEEK return value.

 SCREEN 12
 DEF SEG = 0 ' BIOS area
 oldvalue = PEEK(1047) ' IMPORTANT! save initial setting to reset later
 DO: _LIMIT 100
   port = PEEK(1047)
   IF port > 0 THEN LOCATE 26, 19: COLOR 11:
      PRINT "Turn ALL Locks off to see each key's bit value!"
   END IF
 COLOR 14:LOCATE 2, 25
 PRINT "PEEK(1047) ="; port; "present keyboard port byte value"
 LOCATE 5, 35
 IF (port AND 1) = 1 THEN COLOR 10: PRINT "R SHIFT PRESSED  " ELSE COLOR 12: PRINT "R SHIFT RELEASED"
 LOCATE 7, 35
 IF (port AND 2) = 2 THEN COLOR 10: PRINT "L SHIFT PRESSED  " ELSE COLOR 12: PRINT "L SHIFT RELEASED"
 LOCATE 9, 35
 IF (port AND 4) = 4 THEN COLOR 10: PRINT "CTRL KEY PRESSED " ELSE COLOR 12: PRINT "CTRL KEY RELEASED"
 LOCATE 11, 35
 IF (port AND 8) = 8 THEN COLOR 10: PRINT "ALT KEY PRESSED " ELSE COLOR 12: PRINT "ALT KEY RELEASED"
 LOCATE 13, 35
 IF (port AND 16) = 16 THEN COLOR 10: PRINT "SCROLL LOCK ON " ELSE COLOR 12: PRINT "SCROLL LOCK OFF"
 LOCATE 15, 35
 IF (port AND 32) = 32 THEN COLOR 10: PRINT "NUMBER LOCK ON " ELSE COLOR 12: PRINT "NUMBER LOCK OFF"
 LOCATE 17, 35
 IF (port AND 64) = 64 THEN COLOR 10: PRINT "CAPS LOCK ON " ELSE COLOR 12: PRINT "CAPS LOCK OFF"
 LOCATE 19, 35
 IF (port AND 128) = 128 THEN COLOR 10: PRINT "INSERT MODE ON " ELSE COLOR 12: PRINT "INSERT MODE OFF"
 COLOR 11: LOCATE 21, 20: PRINT "Press mode keys to change or [ESC] to quit!";
 LOOP UNTIL INP(&H60) = 1 ' escape key exit
 POKE 1047, oldvalue      ' IMPORTANT reset to original settings
 DEF SEG
NOTE: Keyboard Port function key settings cannot be reset on NT machines!

More Examples


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link