112112START_LABEL = '__START_PROGRAM'
113113END_LABEL = '__END_PROGRAM'
114114CALL_BACK = '__CALL_BACK__'
115-
115+ MAIN_LABEL = '__MAIN_PROGRAM__'
116+ DATA_LABEL = 'ZXBASIC_USER_DATA'
117+ DATA_END_LABEL = 'ZXBASIC_USER_DATA_END'
116118
117119# Whether to use the FunctionExit scheme
118120FLAG_use_function_exit = False
@@ -2230,13 +2232,23 @@ def __str__(self):
22302232# -------------------------
22312233def emit_start ():
22322234 output = list ()
2235+ heap_init = ['%s:' % DATA_LABEL ]
22332236 output .append ('org %s' % OPTIONS .org .value )
22342237
22352238 if REQUIRES .intersection (MEMINITS ) or '__MEM_INIT' in INITS :
2236- output .append ('; Defines HEAP SIZE\n ' + OPTIONS .heap_size_label .value + ' EQU ' + str (OPTIONS .heap_size .value ))
2239+ heap_init .append ('; Defines HEAP SIZE\n ' + OPTIONS .heap_size_label .value + ' EQU ' +
2240+ str (OPTIONS .heap_size .value ))
2241+ heap_init .append (OPTIONS .heap_start_label .value + ':' )
2242+ heap_init .append ('DEFS %s' % str (OPTIONS .heap_size .value ))
2243+
2244+ heap_init .append ('; Defines USER DATA Length in bytes\n ' +
2245+ 'ZXBASIC_USER_DATA_LEN EQU ZXBASIC_USER_DATA_END - ZXBASIC_USER_DATA' )
2246+ heap_init .append ('.__LABEL__.ZXBASIC_USER_DATA_LEN EQU ZXBASIC_USER_DATA_LEN' )
2247+ heap_init .append ('.__LABEL__.ZXBASIC_USER_DATA EQU ZXBASIC_USER_DATA' )
22372248
22382249 output .append ('%s:' % START_LABEL )
22392250 if OPTIONS .headerless .value :
2251+ output .extend (heap_init )
22402252 return output
22412253
22422254 output .append ('di' )
@@ -2253,6 +2265,9 @@ def emit_start():
22532265 for x in sorted (INITS ):
22542266 output .append ('call %s' % x )
22552267
2268+ output .append ('jp %s' % MAIN_LABEL )
2269+ output .extend (heap_init )
2270+
22562271 return output
22572272
22582273
@@ -2265,7 +2280,7 @@ def convertToBool():
22652280
22662281 REQUIRES .add ('strictbool.asm' )
22672282
2268- result = []
2283+ result = list ()
22692284 result .append ('pop af' )
22702285 result .append ('call __NORMALIZE_BOOLEAN' )
22712286 result .append ('push af' )
@@ -2281,14 +2296,16 @@ def emit_end():
22812296 output = []
22822297 output .extend (AT_END )
22832298
2284- if REQUIRES .intersection (MEMINITS ) or '__MEM_INIT' in INITS :
2285- output .append (OPTIONS .heap_start_label .value + ':' )
2286- output .append ('; Defines DATA END\n ' + 'ZXBASIC_USER_DATA_END EQU ZXBASIC_MEM_HEAP + ZXBASIC_HEAP_SIZE' )
2287- else :
2288- output .append ('; Defines DATA END --> HEAP size is 0\n ' + 'ZXBASIC_USER_DATA_END:' )
2289-
2290- output .append ('; Defines USER DATA Length in bytes\n ' +
2291- 'ZXBASIC_USER_DATA_LEN EQU ZXBASIC_USER_DATA_END - ZXBASIC_USER_DATA' )
2299+ # if REQUIRES.intersection(MEMINITS) or '__MEM_INIT' in INITS:
2300+ # output.append(OPTIONS.heap_start_label.value + ':')
2301+ # output.append('; Defines DATA END\n' + 'ZXBASIC_USER_DATA_END EQU ZXBASIC_MEM_HEAP + ZXBASIC_HEAP_SIZE')
2302+ # else:
2303+ # output.append('; Defines DATA END --> HEAP size is 0\n' + 'ZXBASIC_USER_DATA_END:')
2304+ #
2305+ # output.append('; Defines USER DATA Length in bytes\n' +
2306+ # 'ZXBASIC_USER_DATA_LEN EQU ZXBASIC_USER_DATA_END - ZXBASIC_USER_DATA')
2307+ # output.append('.__LABEL__.ZXBASIC_USER_DATA_LEN EQU ZXBASIC_USER_DATA_LEN')
2308+ # output.append('.__LABEL__.ZXBASIC_USER_DATA EQU ZXBASIC_USER_DATA')
22922309
22932310 if OPTIONS .autorun .value :
22942311 output .append ('END %s' % START_LABEL )
0 commit comments