Skip to content

Commit ecb41bb

Browse files
committed
Remove SMC from os_RunPrgm, do some optimization
1 parent 7fb3907 commit ecb41bb

File tree

1 file changed

+13
-25
lines changed

1 file changed

+13
-25
lines changed

src/ce/runprgm.src

Lines changed: 13 additions & 25 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

0 commit comments

Comments
 (0)