@@ -80,11 +80,13 @@ _os_RunPrgm:
8080 call ti.Mov9b
8181 ld hl,___prgm_to_run - reloc.offset
8282 call find_prgm - reloc.offset
83- ld (___prgm_to_run_size - reloc.offset),de
8483 jr nc,.found
8584 sbc hl,hl
8685 ret
8786.found:
87+ ld a,(ti.OP1)
88+ ld (___prgm_to_run - reloc.offset),a
89+ ld (___prgm_to_run_size - reloc.offset),de
8890 ld a,(hl)
8991 cp a,ti.tExtTok
9092 jr nz,run_basic_prgm
@@ -208,6 +210,7 @@ launch_asm_prgm:
208210
209211launch_basic_prgm:
210212 call delete_running_prgm
213+ call setup_temp_parser_hook
211214 call setup_prgm_state
212215 call push_stub
213216 ld hl,___prgm_to_run
@@ -216,26 +219,20 @@ launch_basic_prgm:
216219 call ti.Mov9ToOP1
217220 jp ti.ParseInp
218221
219- setup_prgm_state :
220- xor a,a
221- ld (ti.kbdGetKy),a
222+ setup_save_parser_hook :
223+ or a,a
224+ sbc hl,hl
222225 bit ti.parserHookActive,(iy + ti.hookflags4)
223- jr nz,.chain_hook
224- .no_chain:
225- ld hl,stub.chain
226- ld (hl),$af ; xor a,a
227- inc hl
228- ld (hl),$c9 ; ret
229- jr .check_flags
230- .chain_hook:
226+ jr z,.not_set
231227 ld hl,(ti.parserHookPtr)
232- ld a,(hl)
233- cp a,$83
234- jr nz,.no_chain ; ensure the hook is valid
235- ld (stub.chain + 1),hl
228+ .not_set:
236229 ld (stub.prev_hook),hl
237- ;jr .check_flags
238- .check_flags:
230+ ret
231+
232+ setup_prgm_state:
233+ call setup_save_parser_hook
234+ xor a,a
235+ ld (ti.kbdGetKy),a
239236 ld a,$ce ; set
240237 bit ti.allowProgTokens,(iy + ti.newDispF)
241238 jr nz,.setAllowProgTokens
@@ -251,6 +248,25 @@ setup_prgm_state:
251248 ld (stub.flags.cmdFlags),a
252249 jp ti.DisableAPD
253250
251+ setup_temp_parser_hook:
252+ bit ti.parserHookActive,(iy + ti.hookflags4)
253+ jr nz,.chain_hook
254+ .no_chain:
255+ ld hl,stub.chain
256+ ld (hl),$af ; xor a,a
257+ inc hl
258+ ld (hl),$c9 ; ret
259+ ret
260+ .chain_hook:
261+ ld hl,(ti.parserHookPtr)
262+ ld a,(hl)
263+ cp a,$83
264+ jr nz,.no_chain ; ensure the hook is valid
265+ ld (stub.chain + 1),hl
266+ xor a,a
267+ ld (push_stub.skip_parser_hook_jr),a
268+ ret
269+
254270delete_running_prgm:
255271 ld iy,ti.flags
256272 ld hl,ti.userMem
@@ -285,11 +301,14 @@ push_stub:
285301 add hl,bc
286302 ld (.stub_error_handler),hl
287303 pop hl
304+ jr .skip_parser_hook
305+ .skip_parser_hook_jr := $-1
288306 push hl
289307 ld bc,stub.hook_parser - stub.normal
290308 add hl,bc
291309 call ti.SetParserHook
292310 pop hl
311+ .skip_parser_hook:
293312 ex de,hl
294313 ld hl,stub
295314 ld bc,stub.len
0 commit comments