init
This commit is contained in:
commit
d1ac414c5e
34 changed files with 64721 additions and 0 deletions
194
runtime/libc.s
Normal file
194
runtime/libc.s
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
section CODE
|
||||
public _memset
|
||||
|
||||
;;
|
||||
;; string.h
|
||||
;;
|
||||
|
||||
; memset:
|
||||
; 4(sp): dst
|
||||
; 8(sp): value
|
||||
; 12(sp): int
|
||||
_memset:
|
||||
move.l 4(sp),a0
|
||||
move.l 8(sp),d0
|
||||
move.l 12(sp),d1
|
||||
.loop:
|
||||
cmpi #0,d1
|
||||
beq.s .done
|
||||
move.b d0,(a0)+
|
||||
sub #1,d1
|
||||
bra.s .loop
|
||||
.done:
|
||||
rts
|
||||
|
||||
; memcpy:
|
||||
; 4(sp): dst
|
||||
; 8(sp): src
|
||||
; 12(sp): int
|
||||
_memcpy:
|
||||
move.l 4(sp),a0
|
||||
move.l 8(sp),a1
|
||||
move.l 12(sp),d1
|
||||
.loop:
|
||||
cmpi #0,d1
|
||||
beq.s .done
|
||||
move.b (a1)+,(a0)+
|
||||
sub #1,d1
|
||||
bra.s .loop
|
||||
.done:
|
||||
rts
|
||||
|
||||
|
||||
;;
|
||||
;; 32-bit div/mod: taken from vc.lib
|
||||
;;
|
||||
|
||||
public __divu
|
||||
public __divs
|
||||
public __modu
|
||||
public __mods
|
||||
public __ldivs
|
||||
public __ldivu
|
||||
public __lmods
|
||||
public __lmodu
|
||||
|
||||
__lmods:
|
||||
movem.l 4(sp),d0/d1
|
||||
__mods:
|
||||
tst.l d1
|
||||
bmi 1$
|
||||
tst.l d0
|
||||
bmi 2$
|
||||
bsr __divu
|
||||
move.l d1,d0
|
||||
rts
|
||||
1$:
|
||||
neg.l d1
|
||||
tst.l d0
|
||||
bmi 3$
|
||||
bsr __divu
|
||||
move.l d1,d0
|
||||
rts
|
||||
2$:
|
||||
neg.l d0
|
||||
bsr __divu
|
||||
neg.l d1
|
||||
move.l d1,d0
|
||||
rts
|
||||
3$:
|
||||
neg.l d0
|
||||
bsr __divu
|
||||
neg.l d1
|
||||
move.l d1,d0
|
||||
rts
|
||||
|
||||
|
||||
__lmodu:
|
||||
movem.l 4(sp),d0/d1
|
||||
__modu:
|
||||
bsr __divu
|
||||
move.l d1,d0
|
||||
rts
|
||||
|
||||
|
||||
__ldivs:
|
||||
movem.l 4(sp),d0/d1
|
||||
__divs:
|
||||
tst.l d0
|
||||
bpl 2$
|
||||
neg.l d0
|
||||
tst.l d1
|
||||
bpl 1$
|
||||
neg.l d1
|
||||
bsr __divu
|
||||
neg.l d1
|
||||
rts
|
||||
1$:
|
||||
bsr __divu
|
||||
neg.l d0
|
||||
neg.l d1
|
||||
rts
|
||||
2$:
|
||||
tst.l d1
|
||||
bpl __divu
|
||||
neg.l d1
|
||||
bsr __divu
|
||||
neg.l d0
|
||||
rts
|
||||
|
||||
|
||||
__ldivu:
|
||||
movem.l 4(sp),d0/d1
|
||||
__divu:
|
||||
move.l d2,-(sp)
|
||||
swap d1
|
||||
move.w d1,d2
|
||||
bne 2$
|
||||
swap d0
|
||||
swap d1
|
||||
swap d2
|
||||
move.w d0,d2
|
||||
beq 1$
|
||||
divu d1,d2
|
||||
move.w d2,d0
|
||||
1$:
|
||||
swap d0
|
||||
move.w d0,d2
|
||||
divu d1,d2
|
||||
move.w d2,d0
|
||||
swap d2
|
||||
move.w d2,d1
|
||||
move.l (sp)+,d2
|
||||
rts
|
||||
2$:
|
||||
move.l d3,-(sp)
|
||||
moveq #16,d3
|
||||
cmp.w #$80,d1
|
||||
bhs 3$
|
||||
rol.l #8,d1
|
||||
subq.w #8,d3
|
||||
3$:
|
||||
cmp.w #$800,d1
|
||||
bhs 4$
|
||||
rol.l #4,d1
|
||||
subq.w #4,d3
|
||||
4$:
|
||||
cmp.w #$2000,d1
|
||||
bhs 5$
|
||||
rol.l #2,d1
|
||||
subq.w #2,d3
|
||||
5$:
|
||||
tst.w d1
|
||||
bmi 6$
|
||||
rol.l #1,d1
|
||||
subq.w #1,d3
|
||||
6$:
|
||||
move.w d0,d2
|
||||
lsr.l d3,d0
|
||||
swap d2
|
||||
clr.w d2
|
||||
lsr.l d3,d2
|
||||
swap d3
|
||||
divu d1,d0
|
||||
move.w d0,d3
|
||||
move.w d2,d0
|
||||
move.w d3,d2
|
||||
swap d1
|
||||
mulu d1,d2
|
||||
sub.l d2,d0
|
||||
bhs 8$
|
||||
subq.w #1,d3
|
||||
add.l d1,d0
|
||||
7$:
|
||||
bhs.s 7$
|
||||
8$:
|
||||
moveq #0,d1
|
||||
move.w d3,d1
|
||||
swap d3
|
||||
rol.l d3,d0
|
||||
swap d0
|
||||
exg d0,d1
|
||||
move.l (sp)+,d3
|
||||
move.l (sp)+,d2
|
||||
rts
|
||||
Loading…
Add table
Add a link
Reference in a new issue