Add original unix v6
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ quicker sort
|
||||
|
||||
/ mov $base,r1
|
||||
/ mov $base+[n*width],r2
|
||||
/ mov $width,r3
|
||||
/ jsr pc,qsort
|
||||
|
||||
/ r0,r1,r2,r3,r4 are used
|
||||
|
||||
.globl qsort
|
||||
.globl compare
|
||||
|
||||
qsort:
|
||||
mov r5,-(sp)
|
||||
mov r4,-(sp)
|
||||
bit $1,r3
|
||||
bne 1f
|
||||
bit $1,r1
|
||||
bne 1f
|
||||
cmp r3,$2
|
||||
bne 2f
|
||||
mov $exch1,exchange
|
||||
br 3f
|
||||
2:
|
||||
mov r3,r5
|
||||
clc
|
||||
ror r5
|
||||
mov r5,width
|
||||
mov $exchw,exchange
|
||||
br 3f
|
||||
1:
|
||||
mov $exchb,exchange
|
||||
3:
|
||||
jsr pc,qs1
|
||||
mov (sp)+,r4
|
||||
mov (sp)+,r5
|
||||
rts pc
|
||||
|
||||
qs1:
|
||||
mov r1,r5
|
||||
neg r5
|
||||
add r2,r5
|
||||
bgt 1f
|
||||
rts pc
|
||||
1:
|
||||
clr r4
|
||||
dvd r3,r4
|
||||
asr r4
|
||||
mpy r3,r4
|
||||
mov r5,r4
|
||||
add r1,r4
|
||||
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
|
||||
loop:
|
||||
cmp r1,r4
|
||||
bhis loop1
|
||||
mov r1,r0
|
||||
jsr pc,compare
|
||||
bgt loop1
|
||||
add r3,r1
|
||||
br loop
|
||||
|
||||
loop1:
|
||||
cmp r2,r4
|
||||
blos 1f
|
||||
sub r3,r2
|
||||
mov r2,r0
|
||||
jsr pc,compare
|
||||
bge loop1
|
||||
|
||||
jsr pc,*exchange
|
||||
cmp r1,r4
|
||||
bne loop
|
||||
mov r2,r4
|
||||
br loop
|
||||
|
||||
1:
|
||||
cmp r1,r4
|
||||
beq 1f
|
||||
jsr pc,*exchange
|
||||
mov r1,r4
|
||||
br loop1
|
||||
|
||||
1:
|
||||
mov (sp)+,r2
|
||||
mov r4,-(sp)
|
||||
mov r4,r1
|
||||
add r3,r1
|
||||
mov r2,r0
|
||||
sub r1,r0
|
||||
sub 2(sp),r4
|
||||
cmp r0,r4
|
||||
blo 1f
|
||||
mov (sp)+,r0
|
||||
mov (sp)+,r4
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov r0,r2
|
||||
mov r4,r1
|
||||
1:
|
||||
jsr pc,qs1
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
br qs1
|
||||
|
||||
exchb:
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov r3,r5
|
||||
1:
|
||||
movb (r1),r0
|
||||
movb (r2),(r1)+
|
||||
movb r0,(r2)+
|
||||
sob r5,1b
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
|
||||
exchw:
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov width,r5
|
||||
1:
|
||||
mov (r1),r0
|
||||
mov (r2),(r1)+
|
||||
mov r0,(r2)+
|
||||
sob r5,1b
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
|
||||
exch1:
|
||||
mov (r1),r0
|
||||
mov (r2),(r1)
|
||||
mov r0,(r2)
|
||||
rts pc
|
||||
|
||||
.bss
|
||||
exchange: .=.+2
|
||||
width: .=.+2
|
||||
Reference in New Issue
Block a user