DEF SEG: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
(Created page with "DEF SEG is used to define the area in memory to access QB64's emulated conventional memory. ==Legacy support== * '''QB64 implements memory access using _MEM and related functions. For that reason, DEF SEG isn't recommended practice anymore and is supported to maintain compatibility with legacy code.''' {{PageSyntax}} : DEF SEG [=][{segment|VARSEG(variable}] {{PageDescription}} * Used to set the pointer to a memory area of a variable/array or registe...")
 
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[DEF SEG]] is used to define the area in memory to access QB64's emulated conventional memory.
[[DEF SEG]] is used to define the area in memory to access QB64's emulated conventional memory.
==Legacy support==
* '''QB64 implements memory access using [[_MEM]] and related functions. For that reason, [[DEF SEG]] isn't recommended practice anymore and is supported to maintain compatibility with legacy code.'''




{{PageSyntax}}
{{PageSyntax}}
: [[DEF SEG]] [=][{segment|VARSEG(variable}]
: [[DEF SEG]] [=][{segment|VARSEG(variable}]
=== Legacy support ===
* '''QB64 implements memory access using [[_MEM]] and related functions. For that reason, [[DEF SEG]] isn't recommended practice anymore and is supported to maintain compatibility with legacy code.'''




Line 18: Line 17:
* [[DEF SEG]], [[VARSEG]], [[VARPTR]], [[PEEK]] and [[POKE]] access QB64's emulated 16 bit conventional memory block. '''It is highly recommended to use QB64's [[_MEM]] memory system to avoid running out of memory.'''
* [[DEF SEG]], [[VARSEG]], [[VARPTR]], [[PEEK]] and [[POKE]] access QB64's emulated 16 bit conventional memory block. '''It is highly recommended to use QB64's [[_MEM]] memory system to avoid running out of memory.'''


<!--
{{PageExamples}}
''Example:'' In a Qbasic(ONLY) file delete, '''SEG''' forces the parameter to be passed as a far pointer.
{{CodeStart}} '' ''
{{Cl|CONST}} file = "trashme.tmp"  'example temporary file name to delete
{{Cl|DEFINT}} A-Z
{{Cl|DIM}} filename {{Cl|AS}} {{Cl|STRING}}
{{Cl|DIM}} result {{Cl|AS}} {{Cl|LONG}}
{{Cl|DIM}} t {{Cl|AS}} {{Cl|STRING}}
{{Cl|DIM}} i {{Cl|AS}} {{Cl|INTEGER}}
{{Cl|CONST}} codelen = 48
{{Cl|DIM}} code {{Cl|AS}} {{Cl|STRING}} * codelen
{{Cl|CLS}}
t = "5589E51E8B560C8EDA8B5E0A8B5702B441CD218B56088EDA8B5E06720B6631C0"
t = t + "6689071F5DCA0800660D0000FFFFEBF0"
{{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} codelen - 1
{{Cl|MID$}}(code, i + 1, 1) = {{Cl|CHR$}}({{Cl|VAL}}("&h" + {{Cl|MID$}}(t, i + i + 1, 2)))
{{Cl|NEXT}}
{{Cl|OPEN}} file {{Cl|FOR...NEXT|FOR}} {{Cl|APPEND}} {{Cl|AS}} 1  'create temporary file
{{Cl|PRINT (file statement)|PRINT}} #1, "I am doomed! :-("
{{Cl|CLOSE}}
{{Cl|PRINT}} "now you see it:"
{{Cl|SHELL}} "dir " + file
K$ = {{Cl|INPUT$}}(1)
filename = file + {{Cl|CHR$}}(0)  'create zero string name for DOS
{{Cl|DEF SEG}} = {{Cl|VARSEG}}(code)
{{Cl|CALL}} absolute('''SEG''' filename, '''SEG''' result, {{Cl|VARPTR}}(code))
{{Cl|IF...THEN|IF}} result {{Cl|THEN}}  'check results
{{Cl|PRINT}} "oops. error: 0x"; {{Cl|HEX$}}(result {{Cl|AND (boolean)|AND}} {{Cl|&H}}FFFF&)
{{Cl|ELSE}}
{{Cl|PRINT}} "now you don't:"
{{Cl|END IF}}
{{Cl|SHELL}} "dir " + file
{{Cl|END}} '' ''
{{CodeEnd}}
{{small|Code by Michael Calkins as Public Domain(2011)}}
-->


''See also:''
{{PageSeeAlso}}
* [[DEF SEG = 0]]
* [[DEF SEG = 0]]
* [[VARPTR]], [[VARSEG]]  
* [[VARPTR]], [[VARSEG]]
* [[PEEK]], [[POKE]]
* [[PEEK]], [[POKE]]
* [[BSAVE]], [[BLOAD]]
* [[BSAVE]], [[BLOAD]]

Latest revision as of 00:29, 29 January 2023

DEF SEG is used to define the area in memory to access QB64's emulated conventional memory.


Syntax

DEF SEG [=][{segment|VARSEG(variable}]

Legacy support

  • QB64 implements memory access using _MEM and related functions. For that reason, DEF SEG isn't recommended practice anymore and is supported to maintain compatibility with legacy code.


Description

  • Used to set the pointer to a memory area of a variable/array or register.
  • PEEK and POKE require a segment memory address (often just 0) without using VARSEG.
  • Important segments using PEEK and POKE include &HB800 (text segment) and &HA000 (graphics segment).
  • BSAVE and BLOAD require a VARSEG reference to the grahic array(0 index) used.
  • Always use DEF SEG when the procedure is completed, in order to reset the segment to QBasic's default value.
  • DEF SEG, VARSEG, VARPTR, PEEK and POKE access QB64's emulated 16 bit conventional memory block. It is highly recommended to use QB64's _MEM memory system to avoid running out of memory.


See also



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