File tree Expand file tree Collapse file tree 1 file changed +13
-25
lines changed Expand file tree Collapse file tree 1 file changed +13
-25
lines changed Original file line number Diff line number Diff line change @@ -105,14 +105,12 @@ run_basic_prgm:
105105run_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
133131push_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
You can’t perform that action at this time.
0 commit comments