@@ -14,12 +14,15 @@ namespace ti?
14
14
?PopRealO1 := 00205DCh
15
15
?ErrNotEnoughMem := 002072Ch
16
16
?ErrMemory := 0020768h
17
+ ?JError := 0020790h
17
18
?PushErrorHandler := 0020798h
18
19
?PopErrorHandler := 002079Ch
19
20
?ParseInp := 0020F00h
20
21
?GetParse := 0020F0Ch
21
22
?SaveParse := 0020F10h
22
23
?DisableAPD := 0021134h
24
+ ?SetParserHook := 002149Ch
25
+ ?ClrParserHook := 00214A0h
23
26
?DeleteTempPrograms := 00214C0h
24
27
?ForceFullScreen := 0021528h
25
28
?LoadDEInd_s := 0021D9Ch
@@ -30,6 +33,7 @@ namespace ti?
30
33
?OP1 := 0D005F8h
31
34
?errNo := 0D008DFh
32
35
?appErr2 := 0D025B6h
36
+ ?parserHookPtr := 0D025F9h
33
37
?pixelShadow := 0D031F6h
34
38
?asm_prgm_size := 0D0118Ch
35
39
?userMem := 0D1A881h
@@ -39,6 +43,9 @@ namespace ti?
39
43
?tAsm84CeCmp := 07Bh
40
44
?tAsm84CePrgm := 07Ah
41
45
46
+ ?hookflags4 := 36h
47
+ ?parserHookActive := 1
48
+
42
49
?ParsFlag2 := 7h
43
50
?numOP1 := 0
44
51
?newDispF := 08h
@@ -224,6 +231,23 @@ launch_basic_prgm:
224
231
setup_prgm_state:
225
232
xor a,a
226
233
ld (ti.kbdGetKy),a
234
+ bit ti.parserHookActive,(iy + ti.hookflags4)
235
+ jr nz,.chain_hook
236
+ .no_chain:
237
+ ld hl,stub.chain
238
+ ld (hl),$af ; xor a,a
239
+ inc hl
240
+ ld (hl),$c9 ; ret
241
+ jr .check_flags
242
+ .chain_hook:
243
+ ld hl,(ti.parserHookPtr)
244
+ ld a,(hl)
245
+ cp a,$83
246
+ jr nz,.no_chain ; ensure the hook is valid
247
+ ld (stub.chain + 1),hl
248
+ ld (stub.prev_hook),hl
249
+ ;jr .check_flags
250
+ .check_flags:
227
251
ld a,$ce ; set
228
252
bit ti.allowProgTokens,(iy + ti.newDispF)
229
253
jr nz,.setAllowProgTokens
@@ -273,6 +297,11 @@ push_stub:
273
297
add hl,bc
274
298
ld (.stub_error_handler),hl
275
299
pop hl
300
+ push hl
301
+ ld bc,stub.hook_parser - stub.normal
302
+ add hl,bc
303
+ call ti.SetParserHook
304
+ pop hl
276
305
ex de,hl
277
306
ld hl,stub
278
307
ld bc,stub.len
@@ -339,6 +368,12 @@ stub:
339
368
res ti.textInverse,(iy + ti.textFlags)
340
369
res ti.onInterrupt,(iy + ti.onFlags)
341
370
res ti.numOP1,(iy + ti.ParsFlag2)
371
+ call ti.ClrParserHook
372
+ ld hl,0
373
+ .prev_hook := $-3
374
+ ld a,(hl)
375
+ cp a,$83
376
+ call z,ti.SetParserHook
342
377
ld hl,(ti.asm_prgm_size)
343
378
add hl,de
344
379
or a,a
@@ -365,6 +400,16 @@ stub:
365
400
add hl,bc
366
401
ld sp,hl ; os should delete created program
367
402
ret
403
+ .hook_parser:
404
+ db $83 ; hook signifier
405
+ cp a,2
406
+ jr nz,.chain
407
+ ld a,$d9 - $ce ; check if stop token
408
+ sub a,b
409
+ jp z,ti.JError
410
+ ld a,2
411
+ .chain:
412
+ jp 0 ; xor a,a \ ret if not chaining
368
413
.found:
369
414
call ti.ChkInRam
370
415
ex de,hl
0 commit comments