Skip to content

Commit 109c85b

Browse files
committed
Merged in feature/int_to_floor (pull request #184)
make int to behave as BASIC INT Approved-by: Jose Rodriguez <boriel@gmail.com>
2 parents 7be661a + 6afb406 commit 109c85b

34 files changed

Lines changed: 657 additions & 97 deletions

library-asm/ftou32reg.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
66
PROC
77

88
LOCAL __IS_FLOAT
9+
LOCAL __NEGATE
910

1011
or a
1112
jr nz, __IS_FLOAT
@@ -62,10 +63,26 @@ __FTOU32REG_LOOP:
6263
__FTOU32REG_END:
6364
pop af ; Take the sign bit
6465
or a ; Sets SGN bit to 1 if negative
65-
jp m, __NEG32 ; Negates DEHL
66+
jp m, __NEGATE ; Negates DEHL
6667
6768
ret
6869

70+
__NEGATE:
71+
exx
72+
ld a, d
73+
or e
74+
or b
75+
or c
76+
exx
77+
jr z, __END
78+
inc l
79+
jr nz, __END
80+
inc h
81+
jr nz, __END
82+
inc de
83+
LOCAL __END
84+
__END:
85+
jp __NEG32
6986
ENDP
7087

7188

tests/functional/70.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
161161
PROC
162162

163163
LOCAL __IS_FLOAT
164+
LOCAL __NEGATE
164165

165166
or a
166167
jr nz, __IS_FLOAT
@@ -217,10 +218,26 @@ __FTOU32REG_LOOP:
217218
__FTOU32REG_END:
218219
pop af ; Take the sign bit
219220
or a ; Sets SGN bit to 1 if negative
220-
jp m, __NEG32 ; Negates DEHL
221+
jp m, __NEGATE ; Negates DEHL
221222

222223
ret
223224

225+
__NEGATE:
226+
exx
227+
ld a, d
228+
or e
229+
or b
230+
or c
231+
exx
232+
jr z, __END
233+
inc l
234+
jr nz, __END
235+
inc h
236+
jr nz, __END
237+
inc de
238+
LOCAL __END
239+
__END:
240+
jp __NEG32
224241
ENDP
225242

226243

tests/functional/arrbase1.asm

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ __MUL16NOADD:
136136

137137
#line 20 "array.asm"
138138

139-
#line 24 "/src/zxb/trunk/library-asm/array.asm"
139+
#line 24 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/array.asm"
140140

141141
__ARRAY:
142142
PROC
@@ -159,10 +159,10 @@ __ARRAY:
159159
ld hl, 0 ; BC = Offset "accumulator"
160160

161161
LOOP:
162-
#line 49 "/src/zxb/trunk/library-asm/array.asm"
162+
#line 49 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/array.asm"
163163
pop bc ; Get next index (Ai) from the stack
164164

165-
#line 59 "/src/zxb/trunk/library-asm/array.asm"
165+
#line 59 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/array.asm"
166166

167167
add hl, bc ; Adds current index
168168

@@ -192,7 +192,7 @@ ARRAY_END:
192192
push de
193193
exx
194194

195-
#line 92 "/src/zxb/trunk/library-asm/array.asm"
195+
#line 92 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/array.asm"
196196
LOCAL ARRAY_SIZE_LOOP
197197

198198
ex de, hl
@@ -223,7 +223,7 @@ ARRAY_SIZE_LOOP:
223223

224224
;add hl, de
225225
;__ARRAY_FIN:
226-
#line 123 "/src/zxb/trunk/library-asm/array.asm"
226+
#line 123 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/array.asm"
227227

228228
pop de
229229
add hl, de ; Adds element start
@@ -562,9 +562,9 @@ __MEM_START:
562562
__MEM_LOOP: ; Loads lengh at (HL, HL+). If Lenght >= BC, jump to __MEM_DONE
563563
ld a, h ; HL = NULL (No memory available?)
564564
or l
565-
#line 111 "/src/zxb/trunk/library-asm/alloc.asm"
565+
#line 111 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/alloc.asm"
566566
ret z ; NULL
567-
#line 113 "/src/zxb/trunk/library-asm/alloc.asm"
567+
#line 113 "/Users/boriel/Documents/src/zxbasic/zxbasic/library-asm/alloc.asm"
568568
; HL = Pointer to Free block
569569
ld e, (hl)
570570
inc hl
@@ -778,6 +778,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
778778
PROC
779779

780780
LOCAL __IS_FLOAT
781+
LOCAL __NEGATE
781782

782783
or a
783784
jr nz, __IS_FLOAT
@@ -834,10 +835,26 @@ __FTOU32REG_LOOP:
834835
__FTOU32REG_END:
835836
pop af ; Take the sign bit
836837
or a ; Sets SGN bit to 1 if negative
837-
jp m, __NEG32 ; Negates DEHL
838+
jp m, __NEGATE ; Negates DEHL
838839

839840
ret
840841

842+
__NEGATE:
843+
exx
844+
ld a, d
845+
or e
846+
or b
847+
or c
848+
exx
849+
jr z, __END
850+
inc l
851+
jr nz, __END
852+
inc h
853+
jr nz, __END
854+
inc de
855+
LOCAL __END
856+
__END:
857+
jp __NEG32
841858
ENDP
842859

843860

tests/functional/circle.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
588588
PROC
589589

590590
LOCAL __IS_FLOAT
591+
LOCAL __NEGATE
591592

592593
or a
593594
jr nz, __IS_FLOAT
@@ -644,10 +645,26 @@ __FTOU32REG_LOOP:
644645
__FTOU32REG_END:
645646
pop af ; Take the sign bit
646647
or a ; Sets SGN bit to 1 if negative
647-
jp m, __NEG32 ; Negates DEHL
648+
jp m, __NEGATE ; Negates DEHL
648649

649650
ret
650651

652+
__NEGATE:
653+
exx
654+
ld a, d
655+
or e
656+
or b
657+
or c
658+
exx
659+
jr z, __END
660+
inc l
661+
jr nz, __END
662+
inc h
663+
jr nz, __END
664+
inc de
665+
LOCAL __END
666+
__END:
667+
jp __NEG32
651668
ENDP
652669

653670

tests/functional/coercion1.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
295295
PROC
296296

297297
LOCAL __IS_FLOAT
298+
LOCAL __NEGATE
298299

299300
or a
300301
jr nz, __IS_FLOAT
@@ -351,10 +352,26 @@ __FTOU32REG_LOOP:
351352
__FTOU32REG_END:
352353
pop af ; Take the sign bit
353354
or a ; Sets SGN bit to 1 if negative
354-
jp m, __NEG32 ; Negates DEHL
355+
jp m, __NEGATE ; Negates DEHL
355356

356357
ret
357358

359+
__NEGATE:
360+
exx
361+
ld a, d
362+
or e
363+
or b
364+
or c
365+
exx
366+
jr z, __END
367+
inc l
368+
jr nz, __END
369+
inc h
370+
jr nz, __END
371+
inc de
372+
LOCAL __END
373+
__END:
374+
jp __NEG32
358375
ENDP
359376

360377

tests/functional/div32.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
172172
PROC
173173

174174
LOCAL __IS_FLOAT
175+
LOCAL __NEGATE
175176

176177
or a
177178
jr nz, __IS_FLOAT
@@ -228,10 +229,26 @@ __FTOU32REG_LOOP:
228229
__FTOU32REG_END:
229230
pop af ; Take the sign bit
230231
or a ; Sets SGN bit to 1 if negative
231-
jp m, __NEG32 ; Negates DEHL
232+
jp m, __NEGATE ; Negates DEHL
232233

233234
ret
234235

236+
__NEGATE:
237+
exx
238+
ld a, d
239+
or e
240+
or b
241+
or c
242+
exx
243+
jr z, __END
244+
inc l
245+
jr nz, __END
246+
inc h
247+
jr nz, __END
248+
inc de
249+
LOCAL __END
250+
__END:
251+
jp __NEG32
235252
ENDP
236253

237254

tests/functional/dountilsplitted.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
190190
PROC
191191

192192
LOCAL __IS_FLOAT
193+
LOCAL __NEGATE
193194

194195
or a
195196
jr nz, __IS_FLOAT
@@ -246,10 +247,26 @@ __FTOU32REG_LOOP:
246247
__FTOU32REG_END:
247248
pop af ; Take the sign bit
248249
or a ; Sets SGN bit to 1 if negative
249-
jp m, __NEG32 ; Negates DEHL
250+
jp m, __NEGATE ; Negates DEHL
250251

251252
ret
252253

254+
__NEGATE:
255+
exx
256+
ld a, d
257+
or e
258+
or b
259+
or c
260+
exx
261+
jr z, __END
262+
inc l
263+
jr nz, __END
264+
inc h
265+
jr nz, __END
266+
inc de
267+
LOCAL __END
268+
__END:
269+
jp __NEG32
253270
ENDP
254271

255272

tests/functional/dowhilesplitted.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
190190
PROC
191191

192192
LOCAL __IS_FLOAT
193+
LOCAL __NEGATE
193194

194195
or a
195196
jr nz, __IS_FLOAT
@@ -246,10 +247,26 @@ __FTOU32REG_LOOP:
246247
__FTOU32REG_END:
247248
pop af ; Take the sign bit
248249
or a ; Sets SGN bit to 1 if negative
249-
jp m, __NEG32 ; Negates DEHL
250+
jp m, __NEGATE ; Negates DEHL
250251

251252
ret
252253

254+
__NEGATE:
255+
exx
256+
ld a, d
257+
or e
258+
or b
259+
or c
260+
exx
261+
jr z, __END
262+
inc l
263+
jr nz, __END
264+
inc h
265+
jr nz, __END
266+
inc de
267+
LOCAL __END
268+
__END:
269+
jp __NEG32
253270
ENDP
254271

255272

tests/functional/draw.asm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,7 @@ __FTOU32REG: ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS
750750
PROC
751751

752752
LOCAL __IS_FLOAT
753+
LOCAL __NEGATE
753754

754755
or a
755756
jr nz, __IS_FLOAT
@@ -806,10 +807,26 @@ __FTOU32REG_LOOP:
806807
__FTOU32REG_END:
807808
pop af ; Take the sign bit
808809
or a ; Sets SGN bit to 1 if negative
809-
jp m, __NEG32 ; Negates DEHL
810+
jp m, __NEGATE ; Negates DEHL
810811

811812
ret
812813

814+
__NEGATE:
815+
exx
816+
ld a, d
817+
or e
818+
or b
819+
or c
820+
exx
821+
jr z, __END
822+
inc l
823+
jr nz, __END
824+
inc h
825+
jr nz, __END
826+
inc de
827+
LOCAL __END
828+
__END:
829+
jp __NEG32
813830
ENDP
814831

815832

0 commit comments

Comments
 (0)