Skip to content

Commit d3a69af

Browse files
calc84maniacadriweb
authored andcommitted
os_RunPrgm: make it work within apps (no SMC in flash).
1 parent 8e5c8f9 commit d3a69af

File tree

1 file changed

+15
-27
lines changed

1 file changed

+15
-27
lines changed

src/ce/runprgm.src

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,12 @@ run_basic_prgm:
105105
run_asm_prgm:
106106
inc hl
107107
ld a,(hl) ; if 0, indicates a C program with retval
108+
sbc hl,hl
108109
or a,a
109110
jr nz,.not_c
110-
sbc hl,hl
111111
ld (stub.basic_c_smc - reloc.offset),hl
112112
.not_c:
113-
push de
114-
pop hl
115-
ld de,64
113+
ld l,64
116114
add hl,de
117115
ld de,(ti.asm_prgm_size)
118116
sbc hl,de
@@ -131,9 +129,7 @@ run_asm_prgm:
131129
jp launch_asm_prgm
132130

133131
push_user_data:
134-
pop hl
135-
ld (.fakeret),hl
136-
ld iy,0 ; exit() doesn't unwind stack so "safe"
132+
ld iy,3 ; exit() doesn't unwind stack so "safe"
137133
add iy,sp
138134
ld hl,(iy + 12) ; callback
139135
add hl,de
@@ -150,43 +146,35 @@ push_user_data:
150146
ld (push_stub.data_size - reloc.offset),bc
151147
ld hl,(_exit.sp)
152148
or a,a
153-
sbc hl,bc
154-
ld de,(iy + 6)
155-
di ; disable to prevent moving sp
149+
sbc hl,bc ; resets carry
156150
push hl
151+
pop de
157152
dec hl
158153
dec hl
159154
dec hl
160155
ld (_exit.sp),hl
161-
pop hl
162-
ld iy,ti.flags
163-
ex de,hl
164-
push hl
165-
or a,a
166156
sbc hl,hl
167-
sbc hl,bc
168-
pop hl
157+
adc hl,bc ; resets carry
158+
ld hl,(iy + 6)
159+
pop iy
160+
di ; disable to prevent modifying moved stack data
169161
jr z,.done_move
170-
push hl
171-
or a,a
172162
sbc hl,de
173-
pop hl
174163
jr c,.lddr
164+
add hl,de
175165
ldir
176166
jr .done_move
177167
.lddr:
178-
add hl,bc
179-
dec hl
180168
ex de,hl
181169
add hl,bc
182170
dec hl
183171
ex de,hl
172+
add hl,de
184173
lddr
185174
.done_move:
186175
ld hl,(_exit.sp)
187-
ld de,0 ; fake return
188-
.fakeret := $-3
189-
ld (hl),de
176+
ld (hl),iy ; fake return
177+
ld iy,ti.flags
190178
or a,a
191179
sbc hl,hl
192180
jq ___exithl ; should return to caller
@@ -455,7 +443,7 @@ ___prgm_to_run_size:
455443
load reloc_rodata: $-$$ from $$
456444
end virtual
457445

458-
section .rodata
446+
section .data
459447
private reloc.data
460448
private reloc.data.len
461449
reloc.data:
@@ -464,7 +452,7 @@ reloc.data:
464452
reloc.base := ti.cursorImage
465453
reloc.offset := reloc.base - reloc.data
466454

467-
section .rodata
455+
section .data
468456
public ___prgm_caller
469457
___prgm_caller:
470458
rb 9

0 commit comments

Comments
 (0)