*** empty log message ***
This commit is contained in:
parent
72b83cca59
commit
576688fc10
36 changed files with 785 additions and 0 deletions
13
mach/z8000/libem/aar.s
Normal file
13
mach/z8000/libem/aar.s
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
.define aar
|
||||||
|
|
||||||
|
!R1 contains description address
|
||||||
|
!R3 contains element number
|
||||||
|
!base address is on stack
|
||||||
|
aar:
|
||||||
|
sub R3, 0(R1)
|
||||||
|
mult RR2, 4(R1)
|
||||||
|
inc R15, $4
|
||||||
|
add R3, *RR14
|
||||||
|
ld *RR14, R3
|
||||||
|
dec R15, $4
|
||||||
|
ret
|
26
mach/z8000/libem/blm.s
Normal file
26
mach/z8000/libem/blm.s
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
.define blm
|
||||||
|
|
||||||
|
!size in R0
|
||||||
|
blm:
|
||||||
|
popl saveret, *RR14
|
||||||
|
ldm savereg, R4, $10
|
||||||
|
ldk R2, $0
|
||||||
|
ld R4, R2
|
||||||
|
pop R3, *RR14 !RR2: dst address
|
||||||
|
pop R5, *RR14 !RR4: src address
|
||||||
|
ld R1, R0
|
||||||
|
sra R0
|
||||||
|
jr EQ, 2f
|
||||||
|
!now avoid wrong copy in case the pieces overlap
|
||||||
|
cp R5, R3
|
||||||
|
jr EQ, 2f
|
||||||
|
jr LT, 1f
|
||||||
|
ldir *RR2, *RR4, R0
|
||||||
|
jr 2f
|
||||||
|
1: dec R1, $2
|
||||||
|
add R3, R1
|
||||||
|
add R5, R1
|
||||||
|
lddr *RR2, *RR4, R0
|
||||||
|
2: ldm R4, savereg, $10
|
||||||
|
pushl *RR14, saveret
|
||||||
|
ret
|
24
mach/z8000/libem/cii.s
Normal file
24
mach/z8000/libem/cii.s
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
.define cii
|
||||||
|
|
||||||
|
cii:
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R2, *RR14
|
||||||
|
pop R1, *RR14
|
||||||
|
sub R2, R1 !expansion in bytes
|
||||||
|
jr LE, 1f
|
||||||
|
sra R2 !expansion in words > 0
|
||||||
|
jr NC, 2f
|
||||||
|
pop R1, *RR14 !expand 1 --> 2
|
||||||
|
extsb R1
|
||||||
|
push *RR14, R1
|
||||||
|
test R2
|
||||||
|
jr EQ, 4f
|
||||||
|
2: !expand >= 1 word
|
||||||
|
ld R1, *RR14
|
||||||
|
exts RR0
|
||||||
|
3: push *RR14, R0
|
||||||
|
djnz R2, 3b
|
||||||
|
jr 4f
|
||||||
|
1: sub R15, R2
|
||||||
|
4: pushl *RR14, saveret
|
||||||
|
ret
|
14
mach/z8000/libem/cmi.s
Normal file
14
mach/z8000/libem/cmi.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.define cmi
|
||||||
|
|
||||||
|
!size in R0
|
||||||
|
cmi:
|
||||||
|
cp R0, $2
|
||||||
|
jr NE, 1f
|
||||||
|
popl RR2, *RR14
|
||||||
|
pop R1, *RR14
|
||||||
|
pop R0, *RR14
|
||||||
|
sub R0, R1
|
||||||
|
jp *RR2
|
||||||
|
1: cp R0, $4
|
||||||
|
jr EQ, cmi4
|
||||||
|
jr unknown
|
15
mach/z8000/libem/cmi4.s
Normal file
15
mach/z8000/libem/cmi4.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define cmi4
|
||||||
|
|
||||||
|
cmi4:
|
||||||
|
popl saveret, *RR14
|
||||||
|
popl RR0, *RR14
|
||||||
|
popl RR2, *RR14
|
||||||
|
subl RR2, RR0
|
||||||
|
ldk R0, $0
|
||||||
|
ldl RR2, saveret
|
||||||
|
jr LT, 1f
|
||||||
|
jp EQ, *RR2
|
||||||
|
inc R0
|
||||||
|
jp *RR2
|
||||||
|
1: dec R0
|
||||||
|
jp *RR2
|
19
mach/z8000/libem/cms.s
Normal file
19
mach/z8000/libem/cms.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.define cms
|
||||||
|
|
||||||
|
cms:
|
||||||
|
popl saveret, *RR14
|
||||||
|
ldm savereg, R4, $10
|
||||||
|
ldl RR2, RR14
|
||||||
|
add R3, R0
|
||||||
|
ldl RR4, RR2
|
||||||
|
add R5, R0
|
||||||
|
sra R0
|
||||||
|
2: pop R1, *RR14
|
||||||
|
cp R1, *RR2
|
||||||
|
jr NE, 1f
|
||||||
|
inc R3, $2
|
||||||
|
djnz R0, 2b
|
||||||
|
1: ld R15, R5
|
||||||
|
ldm R4, savereg, $10
|
||||||
|
pushl *RR14, saveret
|
||||||
|
ret
|
20
mach/z8000/libem/cmu.s
Normal file
20
mach/z8000/libem/cmu.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.define cmu
|
||||||
|
|
||||||
|
!size in R0
|
||||||
|
cmu:
|
||||||
|
cp R0, $2
|
||||||
|
jr NE, 1f
|
||||||
|
popl RR2, *RR14
|
||||||
|
pop R1, *RR14
|
||||||
|
pop R0, *RR14
|
||||||
|
cp R0, R1
|
||||||
|
ldk R0, $0
|
||||||
|
jr ULT, 2f
|
||||||
|
jp EQ, *RR2
|
||||||
|
inc R0
|
||||||
|
jp *RR2
|
||||||
|
2: dec R0
|
||||||
|
jp *RR2
|
||||||
|
1: cp R0, $4
|
||||||
|
jr EQ, cmu4
|
||||||
|
jr unknown
|
15
mach/z8000/libem/cmu4.s
Normal file
15
mach/z8000/libem/cmu4.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define cmu4
|
||||||
|
|
||||||
|
cmu4:
|
||||||
|
popl saveret, *RR14
|
||||||
|
popl RR0, *RR14
|
||||||
|
popl RR2, *RR14
|
||||||
|
cpl RR2, RR0
|
||||||
|
ldk R0, $0
|
||||||
|
ldl RR2, saveret
|
||||||
|
jr ULT, 1f
|
||||||
|
jp EQ, *RR2
|
||||||
|
inc R0
|
||||||
|
jp *RR2
|
||||||
|
1: dec R0
|
||||||
|
jp *RR2
|
19
mach/z8000/libem/csa.s
Normal file
19
mach/z8000/libem/csa.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.define csa
|
||||||
|
|
||||||
|
!R1 contains address of jump table
|
||||||
|
!R2 contains case index
|
||||||
|
csa:
|
||||||
|
sub R2, 2(R1)
|
||||||
|
jr LT, 1f
|
||||||
|
cp R2, 4(R1)
|
||||||
|
jr UGT, 1f
|
||||||
|
sla R2
|
||||||
|
add R1, R2
|
||||||
|
ld R2, 06(R1)
|
||||||
|
cp R2, $0
|
||||||
|
jr EQ, 2f
|
||||||
|
jp 0(R2)
|
||||||
|
1: ld R1, 0(R1)
|
||||||
|
jp NE, 0(R1)
|
||||||
|
2: push *RR14, $ECASE
|
||||||
|
jr fatal
|
21
mach/z8000/libem/csb.s
Normal file
21
mach/z8000/libem/csb.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
.define csb
|
||||||
|
|
||||||
|
!R1 contains address of jump table
|
||||||
|
!R2 contains case index
|
||||||
|
csb:
|
||||||
|
ld R3, 0(R1) !default pointer
|
||||||
|
ld R0, 2(R1) !number of entries
|
||||||
|
test R0
|
||||||
|
jr EQ, 1f
|
||||||
|
3: inc R1, $4
|
||||||
|
cp R2, 0(R1)
|
||||||
|
jr EQ, 2f
|
||||||
|
djnz R0, 3b
|
||||||
|
1: ld R1, R3 !default pointer
|
||||||
|
jr 4f
|
||||||
|
2: ld R1, 2(R1)
|
||||||
|
4: test R1
|
||||||
|
jr EQ, 5f
|
||||||
|
jp 0(R1)
|
||||||
|
5: push *RR14, $ECASE
|
||||||
|
jr fatal
|
15
mach/z8000/libem/cuu.s
Normal file
15
mach/z8000/libem/cuu.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define cuu
|
||||||
|
|
||||||
|
cuu:
|
||||||
|
popl RR2, *RR14
|
||||||
|
pop R0, *RR14
|
||||||
|
pop R1, *RR14
|
||||||
|
sub R0, R1 !expansion in bytes
|
||||||
|
jr LE, 1f
|
||||||
|
sra R0 !expansion in words
|
||||||
|
jp EQ, *RR2
|
||||||
|
2: push *RR14, $0
|
||||||
|
djnz R0, 2b
|
||||||
|
jp *RR2
|
||||||
|
1: sub R15, R0
|
||||||
|
jp *RR2
|
12
mach/z8000/libem/dup.s
Normal file
12
mach/z8000/libem/dup.s
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.define dup
|
||||||
|
|
||||||
|
dup:
|
||||||
|
popl saveret, *RR14
|
||||||
|
dec R15, $2
|
||||||
|
ldl RR2, RR14
|
||||||
|
add R3, R0
|
||||||
|
sra R0
|
||||||
|
lddr *RR14, *RR2, R0
|
||||||
|
inc R15, $2
|
||||||
|
pushl *RR14, saveret
|
||||||
|
ret
|
17
mach/z8000/libem/dvu2.s
Normal file
17
mach/z8000/libem/dvu2.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define dvu2
|
||||||
|
|
||||||
|
dvu2:
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R2, *RR14
|
||||||
|
pop R1, *RR14
|
||||||
|
test R2
|
||||||
|
jr MI, 1f
|
||||||
|
ldk R0, $0
|
||||||
|
div RR0, R2
|
||||||
|
2: pushl *RR14, saveret
|
||||||
|
ret
|
||||||
|
1: cp R2, R1
|
||||||
|
ldk R1, $0
|
||||||
|
jr UGT, 2b
|
||||||
|
inc R1
|
||||||
|
jr 2b
|
19
mach/z8000/libem/dvu4.s
Normal file
19
mach/z8000/libem/dvu4.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.define dvu4
|
||||||
|
|
||||||
|
dvu4:
|
||||||
|
popl saveret, *RR14
|
||||||
|
ldm savereg, R4, $10
|
||||||
|
popl RR4, *RR14
|
||||||
|
popl RR2, *RR14
|
||||||
|
testl RR4
|
||||||
|
jr MI, 1f
|
||||||
|
ldl RR0, $0
|
||||||
|
divl RQ0, RR4
|
||||||
|
jr 2f
|
||||||
|
1: cpl RR4, RR2
|
||||||
|
ldl RR2, $0
|
||||||
|
jr UGT, 2f
|
||||||
|
inc R3
|
||||||
|
2: ldm R4, savereg, $10
|
||||||
|
pushl *RR14, saveret
|
||||||
|
ret
|
11
mach/z8000/libem/end.s
Normal file
11
mach/z8000/libem/end.s
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
.define endtext, enddata, endbss, _etext, _edata, _end
|
||||||
|
|
||||||
|
.text
|
||||||
|
endtext:
|
||||||
|
_etext:
|
||||||
|
.data
|
||||||
|
enddata:
|
||||||
|
_edata:
|
||||||
|
.bss
|
||||||
|
endbss:
|
||||||
|
_end:
|
18
mach/z8000/libem/exg.s
Normal file
18
mach/z8000/libem/exg.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.define exg
|
||||||
|
|
||||||
|
!size (bytes) in R0
|
||||||
|
exg:
|
||||||
|
ldm savereg, R4, $10
|
||||||
|
ldl RR2, RR14
|
||||||
|
inc R3, $2
|
||||||
|
ldl RR4, RR2
|
||||||
|
add R5, R0
|
||||||
|
sra R0
|
||||||
|
1: ld R1, *RR2
|
||||||
|
ex R1, *RR4
|
||||||
|
ld *RR4, R1
|
||||||
|
inc R3, $2
|
||||||
|
inc R5, $2
|
||||||
|
djnz R0, 1b
|
||||||
|
ldm R4, savereg, $10
|
||||||
|
ret
|
8
mach/z8000/libem/gto.s
Normal file
8
mach/z8000/libem/gto.s
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
.define gto
|
||||||
|
|
||||||
|
gto:
|
||||||
|
pop R3, *RR14
|
||||||
|
ld R13, 4(R3)
|
||||||
|
ld R15, 2(R3)
|
||||||
|
ld R3, 0(R3)
|
||||||
|
jp 0(R3)
|
57
mach/z8000/libem/head_em.s
Normal file
57
mach/z8000/libem/head_em.s
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
.define EXIT, F_DUM
|
||||||
|
.define ERANGE, ESET, EHEAP, EILLINS, EODDZ, ECASE, EBADMON
|
||||||
|
.define hol0, trppc, trpim, reghp, argv, envp
|
||||||
|
|
||||||
|
EXIT = 0
|
||||||
|
F_DUM = 0
|
||||||
|
|
||||||
|
ERANGE = 1
|
||||||
|
ESET = 2
|
||||||
|
EHEAP = 17
|
||||||
|
EILLINS = 18
|
||||||
|
EODDZ = 19
|
||||||
|
ECASE = 20
|
||||||
|
EBADMON = 25
|
||||||
|
|
||||||
|
.text
|
||||||
|
!clear .bss
|
||||||
|
ldk R2, $0
|
||||||
|
ld R3, $endbss
|
||||||
|
ld R0, R3
|
||||||
|
sub R0, $begbss
|
||||||
|
jr EQ, 1f
|
||||||
|
sra R0
|
||||||
|
push *RR2, $0
|
||||||
|
dec R0
|
||||||
|
jr EQ, 1f
|
||||||
|
ldl RR4, RR2
|
||||||
|
dec R5, $2
|
||||||
|
lddr *RR4, *RR2, R0
|
||||||
|
1:
|
||||||
|
ldb RL0, $10 ! echo newline
|
||||||
|
sc $4
|
||||||
|
ldl RR14, $0
|
||||||
|
push *RR14, envp
|
||||||
|
push *RR14, argv
|
||||||
|
push *RR14, $1
|
||||||
|
calr _m_a_i_n
|
||||||
|
ldl RR14, $0xC00017FC
|
||||||
|
sc $0
|
||||||
|
|
||||||
|
.bss
|
||||||
|
begbss:
|
||||||
|
.data
|
||||||
|
hol0:
|
||||||
|
.word 0,0 ! line no
|
||||||
|
.word 0,0 ! file
|
||||||
|
trppc:
|
||||||
|
.word 0
|
||||||
|
trpim:
|
||||||
|
.word 0
|
||||||
|
argv:
|
||||||
|
envp:
|
||||||
|
.word 1f
|
||||||
|
.word 0
|
||||||
|
1: .asciz "program"
|
||||||
|
reghp:
|
||||||
|
.word endbss
|
23
mach/z8000/libem/inn.s
Normal file
23
mach/z8000/libem/inn.s
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.define inn
|
||||||
|
|
||||||
|
!bitnr in R1
|
||||||
|
!size (bytes) in R2
|
||||||
|
inn:
|
||||||
|
ld R3, R2
|
||||||
|
sra R2
|
||||||
|
ldk R0, $0
|
||||||
|
div RR0, $020 !R0: bitnr, R1: wordnr
|
||||||
|
cp R1, R2
|
||||||
|
jr UGE, 1f !R1 must be < R2
|
||||||
|
inc R1, $2 !R1 contains nr of words from top stack
|
||||||
|
sla R1
|
||||||
|
ld R1, RR14(R1)
|
||||||
|
bit R1, R0
|
||||||
|
jr EQ, 1f
|
||||||
|
ldk R0, $1
|
||||||
|
jr 2f
|
||||||
|
1: ldk R0, $0
|
||||||
|
2: ld R1, R3
|
||||||
|
popl RR2, *RR14
|
||||||
|
add R15, R1
|
||||||
|
jp *RR2
|
23
mach/z8000/libem/lar.s
Normal file
23
mach/z8000/libem/lar.s
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.define lar
|
||||||
|
|
||||||
|
!R1 contains description address
|
||||||
|
!R3 contains element number
|
||||||
|
!base address is on stack
|
||||||
|
lar:
|
||||||
|
popl saveret, *RR14
|
||||||
|
sub R3, 0(R1)
|
||||||
|
ld R0, 4(R1) !nr of bytes per element
|
||||||
|
mult RR2, R0
|
||||||
|
add R3, *RR14
|
||||||
|
add R3, R0
|
||||||
|
sra R0 !nr of words per element
|
||||||
|
jr EQ, 1f
|
||||||
|
dec R3, $2
|
||||||
|
lddr *RR14, *RR2, R0
|
||||||
|
inc R15, $2
|
||||||
|
jr 2f
|
||||||
|
1: ldb RL2, -1(R3)
|
||||||
|
ldb RH2, $0
|
||||||
|
ld *RR14, R2
|
||||||
|
2: ldl RR2, saveret
|
||||||
|
jp *RR2
|
20
mach/z8000/libem/los2.s
Normal file
20
mach/z8000/libem/los2.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.define los2
|
||||||
|
|
||||||
|
los2:
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R0, *RR14 !object size
|
||||||
|
ldk R2, $0
|
||||||
|
pop R3, *RR14 !address of object
|
||||||
|
cp R0, $1
|
||||||
|
jr NE, 1f
|
||||||
|
ldb RL0, *RR2
|
||||||
|
push *RR14, R0
|
||||||
|
jr 2f
|
||||||
|
1: add R3, R0
|
||||||
|
dec R3, $2
|
||||||
|
dec R15, $2
|
||||||
|
sra R0
|
||||||
|
lddr *RR14, *RR2, R0
|
||||||
|
inc R15, $2
|
||||||
|
2: pushl *RR14, saveret
|
||||||
|
ret
|
83
mach/z8000/libem/mon.s
Normal file
83
mach/z8000/libem/mon.s
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
.define mon
|
||||||
|
|
||||||
|
mon:
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R0, *RR14 ! iocode
|
||||||
|
cp R0, $1 ! exit
|
||||||
|
jr NE, read
|
||||||
|
inc R15, $2
|
||||||
|
sc $EXIT
|
||||||
|
read: cp R0, $3 ! read
|
||||||
|
jr NE, write
|
||||||
|
pop R0, *RR14 ! dummy; all input from stdin
|
||||||
|
pop R1, *RR14 ! ptr to buffer
|
||||||
|
pop R2, *RR14 ! nr of bytes to be read
|
||||||
|
ld R3, R1
|
||||||
|
cp R2, $0
|
||||||
|
jr EQ, 6f
|
||||||
|
1: sc $2 ! read character into RL0
|
||||||
|
cpb RL0, $004 ! \^D
|
||||||
|
jr EQ, 6f
|
||||||
|
cpb RL0, $015 ! \cr
|
||||||
|
jr NE, 2f
|
||||||
|
ldb RL0, $012
|
||||||
|
2: sc $4 ! echo
|
||||||
|
cpb RL0, $010 ! \^H
|
||||||
|
jr NE, 3f
|
||||||
|
cp R1, R3
|
||||||
|
jr EQ, 5f
|
||||||
|
dec R1
|
||||||
|
jr 5f
|
||||||
|
3: cpb RL0, $0100 ! \@
|
||||||
|
jr NE, 4f
|
||||||
|
ld R1, R3
|
||||||
|
ldb RL0, $012
|
||||||
|
sc $4
|
||||||
|
jr 5f
|
||||||
|
4: ldb 0(R1), RL0
|
||||||
|
inc R1
|
||||||
|
cpb RL0, $012 ! \nl
|
||||||
|
jr EQ, 6f
|
||||||
|
5: djnz R2, 1b
|
||||||
|
6: sub R1, R3 ! nr of bytes read
|
||||||
|
push *RR14, R1
|
||||||
|
push *RR14, $0
|
||||||
|
jr retu
|
||||||
|
write: cp R0, $4 ! write
|
||||||
|
jr NE, open
|
||||||
|
pop R0, *RR14 ! dummy; all output to stdout
|
||||||
|
pop R1, *RR14 ! ptr to buffer
|
||||||
|
pop R2, *RR14 ! nr of bytes to be written
|
||||||
|
ld R3, R2
|
||||||
|
cp R2, $0
|
||||||
|
jr EQ, 8f
|
||||||
|
9: ld R0, $5000 ! counter to delay printing a little
|
||||||
|
7: djnz R0, 7b
|
||||||
|
ldb RL0, 0(R1)
|
||||||
|
sc $4
|
||||||
|
inc R1
|
||||||
|
djnz R2, 9b
|
||||||
|
8: sub R3, R2 ! nr of bytes written
|
||||||
|
push *RR14, R3
|
||||||
|
push *RR14, $0
|
||||||
|
jr retu
|
||||||
|
open: cp R0, $5 ! open
|
||||||
|
jr close
|
||||||
|
jr NE, close
|
||||||
|
ld *RR14, $0
|
||||||
|
ld 2(R15), $0
|
||||||
|
jr retu
|
||||||
|
close: cp R0, $6 ! close
|
||||||
|
jr NE, ioctl
|
||||||
|
ld *RR14, $0
|
||||||
|
jr retu
|
||||||
|
ioctl: cp R0, $54 ! ioctl
|
||||||
|
jr NE, err
|
||||||
|
inc R15, $4
|
||||||
|
ld *RR14, $0
|
||||||
|
retu: ldl RR2, saveret
|
||||||
|
jp *RR2
|
||||||
|
err: push *RR14, saveret
|
||||||
|
push *RR14, $EBADMON
|
||||||
|
calr trp
|
||||||
|
ret
|
9
mach/z8000/libem/noop.s
Normal file
9
mach/z8000/libem/noop.s
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
.define noop
|
||||||
|
|
||||||
|
noop:
|
||||||
|
push *RR14, hol0
|
||||||
|
push *RR14, $fmt
|
||||||
|
calr prf
|
||||||
|
ret
|
||||||
|
.data
|
||||||
|
fmt: .asciz "test %d\n"
|
36
mach/z8000/libem/prf.s
Normal file
36
mach/z8000/libem/prf.s
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
.define prf
|
||||||
|
|
||||||
|
prf:
|
||||||
|
ld R0, hol0+4 !pointer to filename
|
||||||
|
cp R0, $0
|
||||||
|
jr EQ, 1f
|
||||||
|
ld R2, R0
|
||||||
|
ld R1, $40
|
||||||
|
3: !test filename on bad characters
|
||||||
|
ldb R3, 0(R2)
|
||||||
|
cpb R3, $0
|
||||||
|
jr EQ, 2f
|
||||||
|
cpb R3, $0177
|
||||||
|
jr GE, 1f
|
||||||
|
cpb R3, $040
|
||||||
|
jr LT, 1f
|
||||||
|
inc R2
|
||||||
|
djnz R1, 3b
|
||||||
|
clrb 0(R2)
|
||||||
|
2: push *RR14, hol0
|
||||||
|
ld R1, R15
|
||||||
|
push *RR14, R1
|
||||||
|
push *RR14, R0
|
||||||
|
push *RR14, $fmt1
|
||||||
|
calr printf
|
||||||
|
popl saveprf, *RR14 !return address
|
||||||
|
calr printf !because of call from 'noop'
|
||||||
|
pushl *RR14, saveprf
|
||||||
|
ret
|
||||||
|
1: ld R0, $name
|
||||||
|
jr 2b
|
||||||
|
.data
|
||||||
|
fmt1: .asciz "%s, sp = %x, line %d:\n"
|
||||||
|
name: .asciz "_unknown file_"
|
||||||
|
saveprf:
|
||||||
|
.long 0
|
82
mach/z8000/libem/printf.s
Executable file
82
mach/z8000/libem/printf.s
Executable file
|
@ -0,0 +1,82 @@
|
||||||
|
.define printf
|
||||||
|
|
||||||
|
printf:
|
||||||
|
popl saveret, *RR14
|
||||||
|
ldm savereg, R4, $10
|
||||||
|
ld R3, $buff !R3 is pointer to a buffer, in which
|
||||||
|
!we built the string to be printed.
|
||||||
|
pop R2, *RR14 !R2 is pointer to format-string
|
||||||
|
prloop:
|
||||||
|
ldb RL0, 0(R2)
|
||||||
|
testb RL0
|
||||||
|
jr EQ, ready
|
||||||
|
inc R2
|
||||||
|
cpb RL0, $045 ! '%'?
|
||||||
|
jr NE, 1f
|
||||||
|
ldb RL0, 0(R2)
|
||||||
|
inc R2
|
||||||
|
cpb RL0, $0163 ! 's'?
|
||||||
|
jr EQ, 3f
|
||||||
|
cpb RL0, $0170 ! 'x'?
|
||||||
|
ld R4, $16 ! print number hexadecimal
|
||||||
|
jr EQ, 2f
|
||||||
|
cpb RL0, $0144 ! 'd'?
|
||||||
|
ld R4, $10 ! print number decimal
|
||||||
|
jr EQ, 2f
|
||||||
|
cpb RL0, $0157 ! 'o'?
|
||||||
|
ld R4, $8 ! print number octal
|
||||||
|
jr EQ, 2f
|
||||||
|
1: ldb 0(R3), RL0
|
||||||
|
inc R3
|
||||||
|
jr prloop
|
||||||
|
2: !in case of %x, %d or %o
|
||||||
|
pop R1, *RR14
|
||||||
|
test R1
|
||||||
|
jr PL, 4f
|
||||||
|
cp R4, $10
|
||||||
|
jr NE, 4f ! print only '-' in case of %d
|
||||||
|
ldb 0(R3), $055 ! '-'
|
||||||
|
inc R3
|
||||||
|
neg R1
|
||||||
|
4: calr printn
|
||||||
|
jr prloop
|
||||||
|
3: !in case of %s
|
||||||
|
pop R1, *RR14
|
||||||
|
6: ldb RL0, 0(R1)
|
||||||
|
testb RL0
|
||||||
|
jr EQ, prloop
|
||||||
|
inc R1
|
||||||
|
ldb 0(R3), RL0
|
||||||
|
inc R3
|
||||||
|
jr 6b
|
||||||
|
ready: !now really print the string we built in the buffer
|
||||||
|
ldb 0(R3), RL0 !end string with '\0'
|
||||||
|
sub R3, $buff-1 !R3 contains the number of characters
|
||||||
|
ld R1, $buff
|
||||||
|
7: ldb RL0, 0(R1)
|
||||||
|
inc R1
|
||||||
|
sc $4
|
||||||
|
djnz R3, 7b
|
||||||
|
ldm R4, savereg, $10
|
||||||
|
pushl *RR14, saveret
|
||||||
|
ret
|
||||||
|
|
||||||
|
printn:
|
||||||
|
ldk R0, $0
|
||||||
|
div RR0, R4 !%x, %d or %o determined by R4
|
||||||
|
test R1
|
||||||
|
jr EQ, 5f !if quotient is '0' printn is ready
|
||||||
|
push *RR14, R0 !push remainder onto the stack
|
||||||
|
calr printn
|
||||||
|
pop R0, *RR14
|
||||||
|
5: add R0, $060
|
||||||
|
cp R0, $071 !'9'
|
||||||
|
jr LE, 8f
|
||||||
|
add R0, $7
|
||||||
|
8: ldb 0(R3), RL0
|
||||||
|
inc R3
|
||||||
|
ret
|
||||||
|
|
||||||
|
.data
|
||||||
|
buff:
|
||||||
|
.space 256
|
11
mach/z8000/libem/rck.s
Normal file
11
mach/z8000/libem/rck.s
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
.define rck
|
||||||
|
|
||||||
|
rck:
|
||||||
|
ld R0, RR14($4)
|
||||||
|
cp R0, 0(R1)
|
||||||
|
jr LT, 1f
|
||||||
|
cp R0, 2(R1)
|
||||||
|
jr LE, 2f
|
||||||
|
1: push *RR14, $ERANGE
|
||||||
|
calr trp
|
||||||
|
2: ret
|
17
mach/z8000/libem/rmu2.s
Normal file
17
mach/z8000/libem/rmu2.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define rmu2
|
||||||
|
|
||||||
|
rmu2:
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R2, *RR14
|
||||||
|
pop R1, *RR14
|
||||||
|
test R2
|
||||||
|
jr MI, 1f
|
||||||
|
ldk R0, $0
|
||||||
|
div RR0, R2
|
||||||
|
2: pushl *RR14, saveret
|
||||||
|
ret
|
||||||
|
1: ld R0, R1
|
||||||
|
cp R2, R1
|
||||||
|
jp UGT, 2b
|
||||||
|
sub R0, R2
|
||||||
|
jp 2b
|
19
mach/z8000/libem/rmu4.s
Normal file
19
mach/z8000/libem/rmu4.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.define rmu4
|
||||||
|
|
||||||
|
rmu4:
|
||||||
|
popl saveret, *RR14
|
||||||
|
ldm savereg, R4, $10
|
||||||
|
popl RR4, *RR14
|
||||||
|
popl RR2, *RR14
|
||||||
|
testl RR4
|
||||||
|
jr MI, 1f
|
||||||
|
ldl RR0, $0
|
||||||
|
divl RQ0, RR4
|
||||||
|
jr 2f
|
||||||
|
1: ldl RR0, RR2
|
||||||
|
cpl RR4, RR2
|
||||||
|
jr UGT, 2f
|
||||||
|
sub RR0, RR4
|
||||||
|
2: ldm R4, savereg, $10
|
||||||
|
pushl *RR14, saveret
|
||||||
|
ret
|
20
mach/z8000/libem/sar.s
Normal file
20
mach/z8000/libem/sar.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.define sar
|
||||||
|
|
||||||
|
!R1 contains description address
|
||||||
|
!R3 contains element number
|
||||||
|
!base address is on stack
|
||||||
|
sar:
|
||||||
|
popl saveret, *RR14
|
||||||
|
sub R3, 0(R1)
|
||||||
|
ld R0, 4(R1) !nr of bytes per element
|
||||||
|
mult RR2, R0
|
||||||
|
add R3, *RR14
|
||||||
|
inc R15, $2
|
||||||
|
sra R0 !nr of words per element
|
||||||
|
jr EQ, 1f
|
||||||
|
ldir *RR2, *RR14, R0
|
||||||
|
jr 2f
|
||||||
|
1: pop R1, *RR14
|
||||||
|
ldb *RR2, RL1
|
||||||
|
2: ldl RR2, saveret
|
||||||
|
jp *RR2
|
8
mach/z8000/libem/save.s
Normal file
8
mach/z8000/libem/save.s
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
.define saveret
|
||||||
|
.define savereg
|
||||||
|
|
||||||
|
.data
|
||||||
|
saveret:
|
||||||
|
.long 0
|
||||||
|
savereg:
|
||||||
|
.space 20
|
0
mach/z8000/libem/sigtrp.s
Normal file
0
mach/z8000/libem/sigtrp.s
Normal file
10
mach/z8000/libem/strhp.s
Normal file
10
mach/z8000/libem/strhp.s
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.define strhp
|
||||||
|
|
||||||
|
strhp:
|
||||||
|
popl RR2, *RR14
|
||||||
|
pop R0, *RR14
|
||||||
|
ld reghp, R0 !heappointer must be < stackpointer.
|
||||||
|
cp R0, R15
|
||||||
|
jp ULT, *RR2
|
||||||
|
push *RR14, $EHEAP
|
||||||
|
jr fatal
|
16
mach/z8000/libem/sts2.s
Normal file
16
mach/z8000/libem/sts2.s
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
.define sts2
|
||||||
|
|
||||||
|
sts2:
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R0, *RR14 !object size
|
||||||
|
ldk R2, $0
|
||||||
|
pop R3, *RR14 !address of object
|
||||||
|
cp R0, $1
|
||||||
|
jr NE, 1f
|
||||||
|
pop R0, *RR14
|
||||||
|
ldb *RR2, RL0
|
||||||
|
jr 2f
|
||||||
|
1: sra R0
|
||||||
|
ldir *RR2, *RR14, R0
|
||||||
|
2: pushl *RR14, saveret
|
||||||
|
ret
|
38
mach/z8000/libem/trp.s
Normal file
38
mach/z8000/libem/trp.s
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
.define trp, fatal
|
||||||
|
|
||||||
|
fatal:
|
||||||
|
calr trp
|
||||||
|
sc $EXIT
|
||||||
|
|
||||||
|
trp:
|
||||||
|
push *RR14, R1
|
||||||
|
inc R15, $2
|
||||||
|
popl saveret, *RR14
|
||||||
|
pop R1, *RR14 !trap number in R1
|
||||||
|
pushl *RR14, saveret
|
||||||
|
push *RR14, R0
|
||||||
|
dec R15, $2
|
||||||
|
cp R1, $16
|
||||||
|
jr UGE, 1f
|
||||||
|
ld R0, trpim
|
||||||
|
bit R0, R1
|
||||||
|
jr NE, 2f !ignore
|
||||||
|
1: sub R15, $24
|
||||||
|
ldm *RR14, R2, $12
|
||||||
|
push *RR14, R1
|
||||||
|
ld R1, trppc
|
||||||
|
cp R1, $0
|
||||||
|
jr EQ, 3f
|
||||||
|
clr trppc
|
||||||
|
call 0(R1)
|
||||||
|
inc R15, $2
|
||||||
|
ldm R2, *RR14, $12
|
||||||
|
add R15, $24
|
||||||
|
2: pop R1, *RR14
|
||||||
|
pop R0, *RR14
|
||||||
|
ret
|
||||||
|
3: push *RR14, $err
|
||||||
|
calr printf
|
||||||
|
sc $EXIT
|
||||||
|
.data
|
||||||
|
err: .asciz "trap error %d\n"
|
5
mach/z8000/libem/unknown.s
Normal file
5
mach/z8000/libem/unknown.s
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.define unknown
|
||||||
|
|
||||||
|
unknown:
|
||||||
|
push *RR14, $EODDZ
|
||||||
|
jr fatal
|
22
mach/z8000/libem/xset.s
Normal file
22
mach/z8000/libem/xset.s
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
.define xset
|
||||||
|
|
||||||
|
!bitnr in R1
|
||||||
|
!size (bytes) in R0
|
||||||
|
xset:
|
||||||
|
popl saveret, *RR14
|
||||||
|
sra R0
|
||||||
|
ld R2, R0
|
||||||
|
1: push *RR14, $0
|
||||||
|
djnz R0, 1b
|
||||||
|
div RR0, $020 !R0: bitnr, R1: wordnr
|
||||||
|
cp R1, R2
|
||||||
|
jr UGE, 2f
|
||||||
|
ldk R2, $0
|
||||||
|
set R2, R0
|
||||||
|
sla R1
|
||||||
|
ld RR14(R1), R2
|
||||||
|
3: pushl *RR14, saveret
|
||||||
|
ret
|
||||||
|
2: push *RR14, $ESET
|
||||||
|
calr trp
|
||||||
|
jr 3b
|
Loading…
Add table
Reference in a new issue