*** empty log message ***
This commit is contained in:
parent
3c7fcfe81a
commit
c0d87aaa16
33
mach/m68k4/libem/aciaio.s
Normal file
33
mach/m68k4/libem/aciaio.s
Normal file
|
@ -0,0 +1,33 @@
|
|||
.define .outch1,.outch2,.inch1,.inch2
|
||||
|
||||
! a0,d4 used
|
||||
! character in d1
|
||||
|
||||
.text
|
||||
.inch1:
|
||||
move.l #acia1,a0
|
||||
bra .inch
|
||||
.inch2:
|
||||
move.l #acia2,a0
|
||||
.inch:
|
||||
move.b (a0),d1
|
||||
asr #1,d1
|
||||
bcc .inch
|
||||
move.b 2(a0),d1
|
||||
and #0x7f,d1
|
||||
rts
|
||||
|
||||
.outch1:
|
||||
move.l #acia1,a0
|
||||
bra .outch
|
||||
.outch2:
|
||||
move.l #acia2,a0
|
||||
.outch:
|
||||
move.b (a0),d4
|
||||
asr #2,d4
|
||||
bcc .outch
|
||||
move.b d1,2(a0)
|
||||
rts
|
||||
|
||||
|
||||
.align 2
|
103
mach/m68k4/libem/ara.s
Normal file
103
mach/m68k4/libem/ara.s
Normal file
|
@ -0,0 +1,103 @@
|
|||
.define .sar
|
||||
.define .lar
|
||||
.define .aar
|
||||
|
||||
!register usage:
|
||||
! a0 : descriptor address
|
||||
! d0 : index
|
||||
! a1 : base address
|
||||
.text
|
||||
.aar:
|
||||
movem.l d0/d1/a0/a1,.savreg
|
||||
move.l (sp)+,.retara ! return address
|
||||
move.l (sp)+,a0 ! descriptor address
|
||||
move.l (sp)+,d0 ! index
|
||||
move.l (sp)+,a1 ! base address
|
||||
sub.l (a0),d0 ! index - lower bound : relative index
|
||||
move.l 8(a0),-(sp) ! # bytes / element
|
||||
move.l d0,-(sp)
|
||||
jsr .mlu
|
||||
add.l d1,a1 ! address of element
|
||||
move.l a1,-(sp) ! returned on stack
|
||||
move.l .retara,-(sp)
|
||||
movem.l d0/d1/a0/a1,.savreg
|
||||
rts
|
||||
|
||||
|
||||
.lar:
|
||||
! register usage: like .aar
|
||||
! d2 : # bytes / element
|
||||
|
||||
movem.l d0/d1/d2/a0/a1,.savreg
|
||||
move.l (sp)+,.retara ! return address
|
||||
move.l (sp)+,a0
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,a1
|
||||
sub.l (a0),d0
|
||||
move.l 8(a0),d2 ! # bytes / element
|
||||
move.l d0,-(sp)
|
||||
move.l d2,-(sp)
|
||||
jsr .mlu
|
||||
add.l d1,a1 ! address of element
|
||||
add.l d2,a1 ! a1++ because of predecrement
|
||||
clr.l d1 !?nodig?
|
||||
asr #1,d2
|
||||
bne 3f
|
||||
move.b -(a1),d1 ! 1 byte element
|
||||
move.l d1,-(sp)
|
||||
bra 5f
|
||||
3:
|
||||
asr #1,d2
|
||||
bne 4f
|
||||
move.w -(a1),d1 ! 2 byte element
|
||||
move.l d1,-(sp)
|
||||
bra 5f
|
||||
4:
|
||||
sub.l #1,d2
|
||||
1:
|
||||
move.l -(a1),-(sp) ! 4n byte element (n = 1,2,...)
|
||||
dbf d2,1b
|
||||
5:
|
||||
move.l .retara,-(sp)
|
||||
movem.l .savreg,d0/d1/d2/a0/a1
|
||||
rts
|
||||
|
||||
|
||||
.sar:
|
||||
!register usage: same as lar
|
||||
|
||||
movem.l d0/d1/a0/a1,.savreg
|
||||
move.l (sp)+,.retara
|
||||
move.l (sp)+,a0
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,a1
|
||||
sub.l (a0),d0
|
||||
move.l 8(a0),d2 ! # bytes / element
|
||||
move.l d0,-(sp)
|
||||
move.l d2,-(sp)
|
||||
jsr .mlu
|
||||
add.l d1,a1
|
||||
clr.l d1 !?nodig?
|
||||
asr #1,d2
|
||||
bne 3f
|
||||
move.l (sp)+,d1
|
||||
move.b d1,(a1) ! 1 byte element
|
||||
bra 4f
|
||||
3:
|
||||
asr #1,d2
|
||||
bne 5f
|
||||
move.l (sp)+,d1
|
||||
move.w d1,(a1) ! 2 byte element
|
||||
bra 4f
|
||||
5:
|
||||
sub.l #1,d2
|
||||
1:
|
||||
move.l (sp)+,(a1)+ ! 4n byte element (n = 1,2,...)
|
||||
dbf d2,1b
|
||||
4:
|
||||
move.l .retara,-(sp)
|
||||
movem.l .savreg,d0/d1/a0/a1
|
||||
rts
|
||||
.data
|
||||
.retara: .long 0
|
||||
.align 2
|
36
mach/m68k4/libem/ari.s
Normal file
36
mach/m68k4/libem/ari.s
Normal file
|
@ -0,0 +1,36 @@
|
|||
.define .sari
|
||||
.define .lari
|
||||
.define .aari
|
||||
|
||||
.text
|
||||
.aari:
|
||||
move.l (sp)+,.retari ! return address
|
||||
cmp.l #4, (sp)+ ! size of descriptor elements
|
||||
bne 9f
|
||||
jsr .aar
|
||||
move.l .retari,-(sp)
|
||||
rts
|
||||
|
||||
|
||||
.lari:
|
||||
move.l (sp)+,.retari ! return address
|
||||
cmp.l #4, (sp)+ ! size of descriptor elements
|
||||
bne 9f
|
||||
jsr .lar
|
||||
move.l .retari,-(sp)
|
||||
rts
|
||||
9:
|
||||
move.w #EILLINS,-(sp)
|
||||
jmp .fat
|
||||
|
||||
|
||||
.sari:
|
||||
move.l (sp)+,.retari ! return address
|
||||
cmp.l #4, (sp)+ ! size of descriptor elements
|
||||
bne 9b
|
||||
jsr .sar
|
||||
move.l .retari,-(sp)
|
||||
rts
|
||||
.data
|
||||
.retari: .long 0
|
||||
.align 2
|
24
mach/m68k4/libem/cii.s
Normal file
24
mach/m68k4/libem/cii.s
Normal file
|
@ -0,0 +1,24 @@
|
|||
.define .cii
|
||||
|
||||
.text
|
||||
.cii:
|
||||
movem.l a0/d0/d1,.savreg
|
||||
move.l (sp)+,a0 ! return address
|
||||
move (sp)+,d0 ! destination size
|
||||
sub (sp)+,d0 ! destination - source size
|
||||
bgt 1f
|
||||
sub d0,sp ! pop extra bytes
|
||||
bra 3f
|
||||
1:
|
||||
move (sp),d1
|
||||
ext.l d1
|
||||
swap d1
|
||||
asr #1,d0
|
||||
2:
|
||||
move.w d1,-(sp)
|
||||
dbf d0,2b
|
||||
3:
|
||||
move.l a0,-(sp)
|
||||
movem.l .savreg,a0/d0/d1
|
||||
rts
|
||||
.align 2
|
22
mach/m68k4/libem/cmi.s
Normal file
22
mach/m68k4/libem/cmi.s
Normal file
|
@ -0,0 +1,22 @@
|
|||
.define .cmi, .cmi_
|
||||
|
||||
! NUM == 4
|
||||
! result in d1
|
||||
.text
|
||||
.cmi:
|
||||
.cmi_:
|
||||
move.l (sp)+,.savret
|
||||
move.l d0,.savd0
|
||||
move.l #1,d1
|
||||
move.l (sp)+,d0
|
||||
cmp.l (sp)+,d0
|
||||
bne 1f
|
||||
clr.l d1
|
||||
1:
|
||||
ble 2f
|
||||
neg.l d1
|
||||
2:
|
||||
move.l .savd0,d0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
19
mach/m68k4/libem/cmp.s
Normal file
19
mach/m68k4/libem/cmp.s
Normal file
|
@ -0,0 +1,19 @@
|
|||
.define .cmp
|
||||
|
||||
.text
|
||||
.cmp:
|
||||
move.l (sp)+,.savret ! return address
|
||||
move.l d0,.savd0
|
||||
move.l #1,d1
|
||||
move.l (sp)+,d0
|
||||
cmp.l (sp)+,d0
|
||||
bne 1f
|
||||
clr.l d1
|
||||
1:
|
||||
bcs 2f
|
||||
neg.l d1
|
||||
2:
|
||||
move.l .savd0,d0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
22
mach/m68k4/libem/cms.s
Normal file
22
mach/m68k4/libem/cms.s
Normal file
|
@ -0,0 +1,22 @@
|
|||
.define .cms
|
||||
|
||||
! d0 contains set size
|
||||
|
||||
.text
|
||||
.cms:
|
||||
move.l (sp)+,a2 ! return address
|
||||
move.l sp,a0
|
||||
move.l sp,a1
|
||||
add d0,a1
|
||||
move.w d0,d1
|
||||
asr #1,d0
|
||||
1:
|
||||
cmp (a0)+,(a1)+
|
||||
bne 2f
|
||||
dbf d0,1b
|
||||
2:
|
||||
asl #1,d1
|
||||
add d1,sp
|
||||
move.l d0,-(sp)
|
||||
jmp (a2)
|
||||
.align 2
|
29
mach/m68k4/libem/cmu.s
Normal file
29
mach/m68k4/libem/cmu.s
Normal file
|
@ -0,0 +1,29 @@
|
|||
.define .cmu
|
||||
|
||||
! d0 : # bytes of 1 block
|
||||
.text
|
||||
.cmu:
|
||||
movem.l d2/a0/a1/a2,.savreg
|
||||
move.l (sp)+,a2 ! reta
|
||||
move.l sp,a0 ! top block
|
||||
move.l sp,a1
|
||||
add.l d0,a1 ! lower block
|
||||
move.l d0,d2
|
||||
asr.l #2,d0
|
||||
sub.l #1,d0
|
||||
move.l #1,d1 ! greater
|
||||
1:
|
||||
cmp.l (a0)+,(a1)+
|
||||
bne 2f
|
||||
dbf d0,1b
|
||||
clr.l d1 ! equal
|
||||
2:
|
||||
bcc 3f
|
||||
neg.l d1 ! less
|
||||
3:
|
||||
asl.l #1,d2
|
||||
add.l d2,sp ! new sp
|
||||
move.l a2,-(sp)
|
||||
movem.l .savreg,d2/a0/a1/a2
|
||||
rts
|
||||
.align 2
|
29
mach/m68k4/libem/csa.s
Normal file
29
mach/m68k4/libem/csa.s
Normal file
|
@ -0,0 +1,29 @@
|
|||
.define .csa
|
||||
|
||||
.text
|
||||
.csa:
|
||||
movem.l d0/a0/a1/a2,.savreg
|
||||
move.l (sp)+,a0 ! case descriptor
|
||||
move.l (sp)+,d0 ! index
|
||||
move.l (a0)+,a1 ! default address
|
||||
sub.l (a0)+,d0 ! index - lower bound
|
||||
blt 1f
|
||||
cmp.l (a0)+,d0 ! rel. index <-> upper - lower bound
|
||||
bgt 1f
|
||||
asl.l #2,d0
|
||||
add.l d0,a0
|
||||
move.l (a0),d0 ! test jump address
|
||||
beq 1f
|
||||
move.l d0,-(sp)
|
||||
bra 3f
|
||||
1:
|
||||
move.l a1,d0 ! test default jump address
|
||||
beq 2f
|
||||
move.l a1,-(sp) ! jump address
|
||||
3:
|
||||
movem.l .savreg,d0/a0/a1/a2
|
||||
rts ! not a real rts
|
||||
2:
|
||||
move.w #ECASE,-(sp)
|
||||
jmp .fat
|
||||
.align 2
|
28
mach/m68k4/libem/csb.s
Normal file
28
mach/m68k4/libem/csb.s
Normal file
|
@ -0,0 +1,28 @@
|
|||
.define .csb
|
||||
|
||||
.text
|
||||
.csb:
|
||||
movem.l d0/d1/a0/a1,.savreg
|
||||
move.l (sp)+,a0 ! case descriptor
|
||||
move.l (sp)+,d0 ! index
|
||||
move.l (a0)+,a1 ! default jump address
|
||||
move.l (a0)+,d1 ! # entries
|
||||
beq 2f
|
||||
sub.l #1,d1
|
||||
1:
|
||||
cmp.l (a0)+,d0
|
||||
beq 3f
|
||||
tst.l (a0)+ ! skip jump address
|
||||
dbf d1,1b
|
||||
2:
|
||||
move.l a1,d1 ! default jump address
|
||||
bne 4f
|
||||
move.l #ECASE,-(sp)
|
||||
jmp .fat
|
||||
3:
|
||||
move.l (a0)+,a1 ! get jump address
|
||||
4:
|
||||
move.l a1,-(sp)
|
||||
movem.l .savreg,d0/d1/a0/a1
|
||||
rts
|
||||
.align 2
|
21
mach/m68k4/libem/cuu.s
Normal file
21
mach/m68k4/libem/cuu.s
Normal file
|
@ -0,0 +1,21 @@
|
|||
.define .ciu
|
||||
.define .cui
|
||||
.define .cuu
|
||||
|
||||
.text
|
||||
.ciu:
|
||||
.cui:
|
||||
.cuu:
|
||||
move.l (sp)+,a0 ! return address
|
||||
move (sp)+,d0 ! destination size
|
||||
sub (sp)+,d0
|
||||
bgt 1f
|
||||
sub d0,sp
|
||||
jmp (a0)
|
||||
1:
|
||||
asr #1,d0
|
||||
2:
|
||||
clr -(sp)
|
||||
dbf d0,2b
|
||||
jmp (a0)
|
||||
.align 2
|
16
mach/m68k4/libem/cvf.s
Normal file
16
mach/m68k4/libem/cvf.s
Normal file
|
@ -0,0 +1,16 @@
|
|||
.define .cfi,.cif,.cfu,.cuf,.cff
|
||||
|
||||
.text
|
||||
|
||||
! this is a dummy float conversion routine
|
||||
.cfi:
|
||||
.cif:
|
||||
.cfu:
|
||||
.cuf:
|
||||
.cff:
|
||||
move.l (sp)+,a0 ! return address
|
||||
move (sp)+,d0 ! destination size
|
||||
sub (sp)+,d0 ! diff. in sizes
|
||||
sub d0,sp
|
||||
jmp (a0)
|
||||
.align 2
|
37
mach/m68k4/libem/dia.s
Normal file
37
mach/m68k4/libem/dia.s
Normal file
|
@ -0,0 +1,37 @@
|
|||
.define .diagnos
|
||||
|
||||
space = 040
|
||||
del = 0177
|
||||
|
||||
.text
|
||||
.diagnos:
|
||||
move.l hol0,-(sp)
|
||||
move.l hol0+FILN_AD,d2
|
||||
beq 1f
|
||||
move.l d2,a0
|
||||
move.l #40,d0
|
||||
3:
|
||||
move.b (a0)+,d1
|
||||
beq 2f
|
||||
cmp.b #del,d1
|
||||
bge 1f
|
||||
cmp.b #space,d1
|
||||
blt 1f
|
||||
sub #1,d0
|
||||
bgt 3b
|
||||
clr.b (a1)
|
||||
2:
|
||||
move.l d2,-(sp)
|
||||
pea fmt
|
||||
jsr _printf
|
||||
add #12,sp
|
||||
jmp _printf
|
||||
|
||||
1:
|
||||
move.l #unknwn,d2
|
||||
bra 2b
|
||||
|
||||
.data
|
||||
fmt: .asciz "%s, line %d: "
|
||||
unknwn: .asciz "unknown file"
|
||||
.align 2
|
42
mach/m68k4/libem/dvi.s
Normal file
42
mach/m68k4/libem/dvi.s
Normal file
|
@ -0,0 +1,42 @@
|
|||
.define .dvi
|
||||
|
||||
! signed long divide
|
||||
.text
|
||||
.dvi:
|
||||
movem.l d0/d4,.savdvi
|
||||
move.l (sp)+,.retdvi
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,d1
|
||||
clr.l d4
|
||||
tst.l d0 ! divisor
|
||||
bpl 1f
|
||||
neg.l d0
|
||||
not d4
|
||||
1:
|
||||
tst.l d1 ! dividend
|
||||
bpl 2f
|
||||
neg.l d1
|
||||
not d4
|
||||
swap d4
|
||||
not d4
|
||||
swap d4
|
||||
2:
|
||||
move.l d1,-(sp)
|
||||
move.l d0,-(sp)
|
||||
jsr .dvu
|
||||
tst d4
|
||||
beq 5f
|
||||
neg.l d1 ! quotient
|
||||
5:
|
||||
tst.l d4
|
||||
bpl 6f
|
||||
neg.l d2 ! remainder
|
||||
6:
|
||||
movem.l .savdvi,d0/d4
|
||||
move.l .retdvi,-(sp)
|
||||
rts
|
||||
.data
|
||||
.savdvi: .space 12
|
||||
.retdvi: .long 0
|
||||
.text
|
||||
.align 2
|
34
mach/m68k4/libem/dvu.s
Normal file
34
mach/m68k4/libem/dvu.s
Normal file
|
@ -0,0 +1,34 @@
|
|||
.define .dvu
|
||||
|
||||
! unsigned long divide
|
||||
! register usage:
|
||||
! : d0 divisor
|
||||
! d1 dividend
|
||||
! exit : d1 quotient
|
||||
! d2 remainder
|
||||
.text
|
||||
.dvu:
|
||||
movem.l d0/d3,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,d1
|
||||
tst.l d0
|
||||
bne 0f
|
||||
move.w #EIDIVZ,-(sp)
|
||||
jsr .trp
|
||||
0:
|
||||
clr.l d2
|
||||
move.l #31,d3
|
||||
3:
|
||||
lsl.l #1,d1
|
||||
roxl.l #1,d2
|
||||
cmp.l d0,d2
|
||||
blt 4f
|
||||
sub.l d0,d2
|
||||
add #1,d1
|
||||
4:
|
||||
dbf d3,3b
|
||||
movem.l .savreg,d0/d3
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
26
mach/m68k4/libem/exg.s
Normal file
26
mach/m68k4/libem/exg.s
Normal file
|
@ -0,0 +1,26 @@
|
|||
.define .exg
|
||||
|
||||
! d0 : exchange size in bytes
|
||||
.text
|
||||
.exg:
|
||||
move.l (sp)+,.savret
|
||||
movem.l d1/a1/a2,.savreg
|
||||
move.l sp,a1
|
||||
sub.l d0,sp
|
||||
move.l sp,a2
|
||||
asr #1,d0
|
||||
move.l d0,d1
|
||||
1:
|
||||
move.l (a1)+,(a2)+
|
||||
sub #1,d0
|
||||
bgt 1b
|
||||
move.l sp,a1
|
||||
asr #1,d1
|
||||
1:
|
||||
move.l (a1)+,(a2)+
|
||||
sub #1,d1
|
||||
bgt 1b
|
||||
move.l a1,sp
|
||||
movem.l .savreg,d1/a1/a2
|
||||
move.l .savret,-(sp)
|
||||
rts
|
7
mach/m68k4/libem/fat.s
Normal file
7
mach/m68k4/libem/fat.s
Normal file
|
@ -0,0 +1,7 @@
|
|||
.define .fat
|
||||
|
||||
.text
|
||||
.fat:
|
||||
jsr .trp
|
||||
jmp EXIT
|
||||
.align 2
|
31
mach/m68k4/libem/inn.s
Normal file
31
mach/m68k4/libem/inn.s
Normal file
|
@ -0,0 +1,31 @@
|
|||
.define .inn
|
||||
|
||||
! d0 : set size in bytes
|
||||
! d1 : bitnumber
|
||||
|
||||
.text
|
||||
.inn:
|
||||
movem.l d1/d2/a0/a1,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d1
|
||||
move.l sp,a1
|
||||
add.l d0,a1
|
||||
move.l sp,a0
|
||||
move.l d1,d2
|
||||
asr.l #4,d2
|
||||
!bchg.l #0,d2
|
||||
cmp.l d0,d2
|
||||
bcc 1f
|
||||
add.l d2,a0
|
||||
move.l (a0),d2
|
||||
btst d1,d2 !eigenlijk .l
|
||||
beq 1f
|
||||
move.l #1,d0
|
||||
bra 2f
|
||||
1:
|
||||
clr.l d0
|
||||
2:
|
||||
move.l a1,sp
|
||||
movem.l .savreg,d1/d2/a0/a1
|
||||
move.l .savret,-(sp)
|
||||
rts
|
25
mach/m68k4/libem/lfr.s
Normal file
25
mach/m68k4/libem/lfr.s
Normal file
|
@ -0,0 +1,25 @@
|
|||
.define .lfr
|
||||
|
||||
.text
|
||||
.lfr:
|
||||
move.l (sp)+,a0
|
||||
cmp #2,d7
|
||||
bne 1f
|
||||
move d0,-(sp)
|
||||
bra 3f
|
||||
1:
|
||||
cmp #4,d7
|
||||
bne 2f
|
||||
move.l d0,-(sp)
|
||||
bra 3f
|
||||
2:
|
||||
cmp #8,d7
|
||||
bne 4f
|
||||
move.l d1,-(sp)
|
||||
move.l d0,-(sp)
|
||||
3:
|
||||
jmp(a0)
|
||||
4:
|
||||
move.w #EILLINS,-(sp)
|
||||
jmp .fat
|
||||
.align 2
|
36
mach/m68k4/libem/los.s
Normal file
36
mach/m68k4/libem/los.s
Normal file
|
@ -0,0 +1,36 @@
|
|||
.define .los
|
||||
|
||||
! d0 : # bytes
|
||||
! a0 : source address
|
||||
.text
|
||||
.los:
|
||||
movem.l d0/a0,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,a0
|
||||
cmp.l #1,d0
|
||||
bne 1f
|
||||
clr.l d0 !1 byte
|
||||
move.b (a0),d0
|
||||
move.l d0,-(sp)
|
||||
bra 3f
|
||||
1:
|
||||
cmp.l #2,d0
|
||||
bne 2f
|
||||
clr.l d0 !2 bytes
|
||||
add.l #2,a0
|
||||
move.w (a0),d0
|
||||
move.l d0,-(sp)
|
||||
bra 3f
|
||||
2:
|
||||
add.l d0,a0 !>=4 bytes
|
||||
asr.l #2,d0
|
||||
|
||||
4: move.l -(a0),-(sp)
|
||||
sub.l #1,d0
|
||||
bgt 4b
|
||||
3:
|
||||
movem.l .savreg,d0/a0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
36
mach/m68k4/libem/mli.s
Normal file
36
mach/m68k4/libem/mli.s
Normal file
|
@ -0,0 +1,36 @@
|
|||
.define .mli
|
||||
|
||||
|
||||
.text
|
||||
.mli:
|
||||
move.l d5,.savmli
|
||||
move.l (sp)+,.retmli
|
||||
move.l (sp)+,d1
|
||||
move.l (sp)+,d0
|
||||
clr d5
|
||||
tst.l d0
|
||||
bpl 1f
|
||||
neg.l d0
|
||||
not d5
|
||||
1:
|
||||
tst.l d1
|
||||
bpl 2f
|
||||
neg.l d1
|
||||
not d5
|
||||
2:
|
||||
move.l d0,-(sp)
|
||||
move.l d1,-(sp)
|
||||
jsr .mlu
|
||||
tst d5
|
||||
beq 3f
|
||||
neg.l d1
|
||||
negx.l d0
|
||||
3:
|
||||
move.l .savmli,d5
|
||||
move.l .retmli,-(sp)
|
||||
rts
|
||||
.data
|
||||
.savmli: .long 0
|
||||
.retmli: .long 0
|
||||
.text
|
||||
.align 2
|
47
mach/m68k4/libem/mlu.s
Normal file
47
mach/m68k4/libem/mlu.s
Normal file
|
@ -0,0 +1,47 @@
|
|||
.define .mlu
|
||||
|
||||
! entry : d0 multiplicand
|
||||
! d1 multiplier
|
||||
! exit : d0 high order result
|
||||
! d1 low order result
|
||||
|
||||
.text
|
||||
.mlu:
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d1
|
||||
move.l (sp)+,d0
|
||||
cmp.l #32768,d0
|
||||
bgt 1f
|
||||
cmp.l #32768,d1
|
||||
bls 2f
|
||||
1: movem.l d2/d3/d4/d6,.savreg
|
||||
move.l d1,d3
|
||||
move.l d1,d2
|
||||
swap d2
|
||||
move.l d2,d4
|
||||
mulu d0,d1
|
||||
mulu d0,d2
|
||||
swap d0
|
||||
mulu d0,d3
|
||||
mulu d4,d0
|
||||
clr.l d6
|
||||
swap d1
|
||||
add d2,d1
|
||||
addx.l d6,d0
|
||||
add d3,d1
|
||||
addx.l d6,d0
|
||||
swap d1
|
||||
clr d2
|
||||
clr d3
|
||||
swap d2
|
||||
swap d3
|
||||
add.l d2,d0
|
||||
add.l d3,d0
|
||||
movem.l .savreg,d2/d3/d4/d6
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
2: mulu d0,d1
|
||||
clr d0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
12
mach/m68k4/libem/mon.s
Normal file
12
mach/m68k4/libem/mon.s
Normal file
|
@ -0,0 +1,12 @@
|
|||
.define .mon
|
||||
.text
|
||||
.mon:
|
||||
move.l (sp)+,a0
|
||||
pea fmt
|
||||
jsr .diagnos
|
||||
add #6,sp
|
||||
jmp EXIT
|
||||
|
||||
.data
|
||||
fmt: .asciz "system call %d not implemented"
|
||||
.align 2
|
13
mach/m68k4/libem/nop.s
Normal file
13
mach/m68k4/libem/nop.s
Normal file
|
@ -0,0 +1,13 @@
|
|||
.define .nop
|
||||
|
||||
.text
|
||||
.nop:
|
||||
move.l hol0,-(sp)
|
||||
pea fmt
|
||||
jsr .diagnos
|
||||
add.l #8,sp
|
||||
rts
|
||||
|
||||
.data
|
||||
fmt: .asciz "test %d\n"
|
||||
.align 2
|
77
mach/m68k4/libem/printf.s
Normal file
77
mach/m68k4/libem/printf.s
Normal file
|
@ -0,0 +1,77 @@
|
|||
.define _printf
|
||||
.define _putchar
|
||||
.define _getal
|
||||
.define _char
|
||||
.bss
|
||||
_getal:
|
||||
.space 12
|
||||
_char:
|
||||
.space 1
|
||||
.data
|
||||
sav:
|
||||
.long 0
|
||||
.text
|
||||
_printf:
|
||||
movem.l d0/d1/d3/a0/a1/a2/a3/a4/a5/a6,.savreg
|
||||
move.l (sp)+,sav !return address
|
||||
move.l sp,a6 !a6 <- address of arguments
|
||||
move.l (a6)+,a5 !a5 <- address of format
|
||||
clr.l d0 !d0 <- char to be printed
|
||||
next: move.b (a5)+,d0
|
||||
beq out
|
||||
cmp.b #'%',d0
|
||||
beq procnt
|
||||
put: move.l d0,-(sp)
|
||||
jsr _putchar !argument is long en op de stack
|
||||
tst.l (sp)+
|
||||
jmp next
|
||||
|
||||
procnt: move.b (a5)+,d0
|
||||
cmp.b #'d',d0 !NOTE: %d means unsigned.
|
||||
beq digit
|
||||
cmp.b #'s',d0
|
||||
beq string
|
||||
cmp.b #'%',d0 !second % has to be printed.
|
||||
beq put
|
||||
tst.b -(a5) !normal char should be printed
|
||||
jmp next
|
||||
|
||||
string: move.l (a6)+,a2 !a2 <- address of string
|
||||
sloop: move.b (a2)+,d0
|
||||
beq next
|
||||
move.l d0,-(sp)
|
||||
jsr _putchar !argument is long en op de stack
|
||||
tst.l (sp)+
|
||||
jmp sloop
|
||||
|
||||
digit: move.l (a6)+,d1 !d1 <- integer
|
||||
move.l #_getal+12,a3 !a3 <- ptr to last part of buf
|
||||
move.b #0,-(a3) !stringterminator
|
||||
dloop: move.l d1,-(sp)
|
||||
move.l #10,-(sp)
|
||||
jsr .dvu !d1 <- quotient d3 <- remainder
|
||||
add.l #'0',d3
|
||||
move.b d3,-(a3)
|
||||
tst.l d1 !if quotient = 0 then ready
|
||||
bne dloop
|
||||
move.l a3,a2
|
||||
jmp sloop !print digitstring.
|
||||
|
||||
out:
|
||||
move.l sav,-(sp)
|
||||
movem.l .savreg,d0/d1/d3/a0/a1/a2/a3/a4/a5/a6
|
||||
rts
|
||||
|
||||
|
||||
_putchar:
|
||||
movem.l d0,.savreg
|
||||
move.l 4(sp),d0
|
||||
move.b d0,_char
|
||||
move.l #1,-(sp)
|
||||
move.l #_char,-(sp)
|
||||
move.l #1,-(sp)
|
||||
jsr _write
|
||||
add.l #12,sp
|
||||
movem.l .savreg,d0
|
||||
rts
|
||||
.align 2
|
20
mach/m68k4/libem/rck.s
Normal file
20
mach/m68k4/libem/rck.s
Normal file
|
@ -0,0 +1,20 @@
|
|||
.define .rck
|
||||
|
||||
.text
|
||||
.rck:
|
||||
movem.l d0/a0,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,a0 ! descriptor address
|
||||
move.l (sp),d0
|
||||
cmp.l (a0),d0
|
||||
blt 1f
|
||||
cmp.l 2(a0),d0
|
||||
ble 2f
|
||||
1:
|
||||
move.l #ERANGE,-(sp)
|
||||
jsr .trp
|
||||
2:
|
||||
movem.l .savreg,d0/a0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
26
mach/m68k4/libem/ret.s
Normal file
26
mach/m68k4/libem/ret.s
Normal file
|
@ -0,0 +1,26 @@
|
|||
.define .ret
|
||||
|
||||
.text
|
||||
.ret:
|
||||
beq 3f
|
||||
cmp #2,d0
|
||||
bne 1f
|
||||
move (sp)+,d0
|
||||
bra 3f
|
||||
1:
|
||||
cmp #4,d0
|
||||
bne 2f
|
||||
move.l (sp)+,d0
|
||||
bra 3f
|
||||
2:
|
||||
cmp #8,d0
|
||||
bne 4f
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,d1
|
||||
3:
|
||||
unlk a6
|
||||
rts
|
||||
4:
|
||||
move.w #EILLINS,-(sp)
|
||||
jmp .fat
|
||||
.align 2
|
13
mach/m68k4/libem/sav.s
Normal file
13
mach/m68k4/libem/sav.s
Normal file
|
@ -0,0 +1,13 @@
|
|||
.define .savd0
|
||||
.define .savret
|
||||
.define .savreg
|
||||
|
||||
.data
|
||||
.savd0:
|
||||
.long 0
|
||||
.savret:
|
||||
.long 0
|
||||
.savreg:
|
||||
.space 128
|
||||
.text
|
||||
.align 2
|
32
mach/m68k4/libem/set.s
Normal file
32
mach/m68k4/libem/set.s
Normal file
|
@ -0,0 +1,32 @@
|
|||
.define .set
|
||||
|
||||
! d0 : setsize in bytes
|
||||
! d1 : bitnumber
|
||||
.text
|
||||
.set:
|
||||
movem.l d1/d2/a1,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d1
|
||||
move.l d0,d2
|
||||
asr.l #2,d2
|
||||
1:
|
||||
clr.l -(sp) !create empty set
|
||||
sub.l #1,d2
|
||||
bgt 1b
|
||||
move.l sp,a1 ! set base
|
||||
move.l d1,d2
|
||||
asr.l #4,d2
|
||||
!bchg #0,d2
|
||||
cmp.l d0,d2
|
||||
bcs 1f
|
||||
move.w #ESET,-(sp)
|
||||
move.l .savret,-(sp)
|
||||
jmp .trp
|
||||
1:
|
||||
add.l d2,a1
|
||||
move.l (a1),d2
|
||||
bset d1,d2
|
||||
move.l d2,(a1)
|
||||
movem.l .savreg,d1/d2/a1
|
||||
move.l .savret,-(sp)
|
||||
rts
|
23
mach/m68k4/libem/shp.s
Normal file
23
mach/m68k4/libem/shp.s
Normal file
|
@ -0,0 +1,23 @@
|
|||
.define .strhp
|
||||
|
||||
.text
|
||||
.strhp:
|
||||
move.l d0,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d0 ! heap pointer
|
||||
move.l d0,.reghp
|
||||
cmp.l .limhp,d0
|
||||
blt 1f
|
||||
add.l #0x400,d0
|
||||
and.l #~0x3ff,d0
|
||||
move.l d0,.limhp
|
||||
cmp.l d0,sp
|
||||
ble 2f
|
||||
1:
|
||||
move.l .savreg,d0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
2:
|
||||
move.w #EHEAP,-(sp)
|
||||
jmp .fat
|
||||
.align 2
|
13
mach/m68k4/libem/sig.s
Normal file
13
mach/m68k4/libem/sig.s
Normal file
|
@ -0,0 +1,13 @@
|
|||
.define .sig
|
||||
|
||||
.text
|
||||
.sig:
|
||||
movem.l a1/a2,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,a1 ! trap pc
|
||||
move.l .trppc,-(sp)
|
||||
move.l a1,.trppc
|
||||
movem.l .savreg,a1/a2
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
33
mach/m68k4/libem/sts.s
Normal file
33
mach/m68k4/libem/sts.s
Normal file
|
@ -0,0 +1,33 @@
|
|||
.define .sts
|
||||
|
||||
! d0 : # bytes
|
||||
! a0 : destination address
|
||||
.text
|
||||
.sts:
|
||||
movem.l d0/a0,.savreg
|
||||
move.l (sp)+,.savret
|
||||
move.l (sp)+,d0
|
||||
move.l (sp)+,a0
|
||||
cmp #1,d0
|
||||
bne 1f
|
||||
move.l (sp)+,d0
|
||||
move.b d0,(a0)
|
||||
bra 4f
|
||||
|
||||
1: cmp #2,d0
|
||||
bne 2f
|
||||
move.l (sp)+,d0
|
||||
add.l #2,a0
|
||||
move.w d0,(a0)
|
||||
bra 4f
|
||||
2:
|
||||
asr #2,d0
|
||||
sub.l #1,d0
|
||||
3:
|
||||
move.l (sp)+,(a0)+
|
||||
dbf d0,3b
|
||||
4:
|
||||
movem.l .savreg,d0/a0
|
||||
move.l .savret,-(sp)
|
||||
rts
|
||||
.align 2
|
29
mach/m68k4/libem/trp.s
Normal file
29
mach/m68k4/libem/trp.s
Normal file
|
@ -0,0 +1,29 @@
|
|||
.define .trp
|
||||
|
||||
.text
|
||||
.trp:
|
||||
move.l (sp)+,a2 ! return address
|
||||
move.w (sp)+,d0 ! error number
|
||||
move.l a2,-(sp)
|
||||
move.w d0,-(sp)
|
||||
cmp #16,d0
|
||||
bcc 1f
|
||||
btst d0,.trpim
|
||||
bne 3f
|
||||
1:
|
||||
move.l .trppc,a0
|
||||
move.l a0,d0
|
||||
beq 9f
|
||||
clr.l .trppc
|
||||
jsr (a0)
|
||||
3:
|
||||
add #2,sp
|
||||
rts
|
||||
9:
|
||||
pea fmt
|
||||
jsr .diagnos
|
||||
jmp EXIT
|
||||
|
||||
.data
|
||||
fmt: .asciz "trap %d called\n"
|
||||
.align 2
|
Loading…
Reference in a new issue