summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfishsoupisgood <github@madingley.org>2019-07-20 10:22:05 +0100
committerfishsoupisgood <github@madingley.org>2019-07-20 10:22:05 +0100
commit80e8c0c140d2e11a9afd59afe2cf537d4847132d (patch)
tree639613cdb87412e1cbc1db469e4c6a82cace0a64
parent5343a2c9998ff3a4dac20ebb7e9e6fbe495ab0f2 (diff)
downloadwristapps-80e8c0c140d2e11a9afd59afe2cf537d4847132d.tar.gz
wristapps-80e8c0c140d2e11a9afd59afe2cf537d4847132d.tar.bz2
wristapps-80e8c0c140d2e11a9afd59afe2cf537d4847132d.zip
working divide by 10
-rw-r--r--sha1/emul.script2
-rw-r--r--sha1/msauth.asm233
2 files changed, 193 insertions, 42 deletions
diff --git a/sha1/emul.script b/sha1/emul.script
index 4efd419..a9a6884 100644
--- a/sha1/emul.script
+++ b/sha1/emul.script
@@ -1,4 +1,4 @@
b END
g TEST
-md T2 4
+md VD 6
quit
diff --git a/sha1/msauth.asm b/sha1/msauth.asm
index 2712128..4ebda55 100644
--- a/sha1/msauth.asm
+++ b/sha1/msauth.asm
@@ -145,6 +145,18 @@ test_l2:
add #(H-DATA_START)
jsr copy4_to_t2
+
+ ldx #6
+ stx lidx
+
+test_l3:
+ ldx #(AeT2div10-OPLIST_START)
+ jsr op4_list
+ lda VA
+ ldx lidx
+ sta VD-1,x
+ dec lidx
+ bne test_l3
@@ -346,6 +358,7 @@ op4_list:
incx
lda OPLIST_START,x
sta src2
+ sta op_rotshift_op
incx
lda OPLIST_START,x
sta dest
@@ -356,11 +369,27 @@ op4_list:
beq rts1
bmi op4_list_l1
ldx dest
- beq op_shift_right
- lda src2
- sta op_rotshift_op
-
- ; rotates dest left src1 times
+ deca
+ beq op_rotshift_left
+ ;shifts dest right src1 times
+op_shift_right:
+ clc
+ lda DATA_START+3,x
+ rora
+ sta DATA_START+3,x
+ lda DATA_START+2,x
+ rora
+ sta DATA_START+2,x
+ lda DATA_START+1,x
+ rora
+ sta DATA_START+1,x
+ lda DATA_START,x
+ rora
+ sta DATA_START,x
+ dec src1
+ bne op_shift_right
+ bra op4_list_l2
+ ; rotates (or shifts) dest left src1 times
op_rotshift_left:
lda DATA_START,x
rola
@@ -381,23 +410,6 @@ op_rotshift_op:
dec src1
bne op_rotshift_left
bra op4_list_l2
-op_shift_right:
- clc
- lda DATA_START+3,x
- rora
- sta DATA_START+3,x
- lda DATA_START+2,x
- rora
- sta DATA_START+2,x
- lda DATA_START+1,x
- rora
- sta DATA_START+1,x
- lda DATA_START,x
- rora
- sta DATA_START,x
- dec src1
- bne op_shift_right
- bra op4_list_l2
op4_list_l1:
jsr op4_binary
op4_list_l2:
@@ -600,37 +612,176 @@ k:
DB $0
-T1eT2div10_T2eT2mT1:
+;
+;unsigned divu10(unsigned t2) {
+; unsigned q, r;
+; //q = (t2 >> 1) + (t2 >> 2);
+; a=b=t2;
+; a>>=1; b>>=2;
+; b+=a;
+
+; q = q + (q >> 4);
+; a=b
+; a>>=4
+; b+=a;
+
+
+; q = q + (q >> 8);
+; q = q + (q >> 16);
+; q = q >> 3;
+; r = t2 - (((q << 2) + q) << 1);
+; return q + (r > 9);
+;}
+;
+
+AeT2div10:
+ ;A=T2
DB $d9 ;add
DB (T2-DATA_START) ;src1
DB (ZERO-DATA_START);src2
DB (VA-DATA_START) ;dest
+ ;B=T2
DB $d9 ;add
DB (T2-DATA_START) ;src1
DB (ZERO-DATA_START);src2
DB (VB-DATA_START) ;dest
- DB $0 ;shift right
- DB 1 ;one time
+ ;C=T2
+ DB $d9 ;add
+ DB (T2-DATA_START) ;src1
+ DB (ZERO-DATA_START);src2
+ DB (VC-DATA_START) ;dest
+ ;A>>=1
+ DB $2 ;shift right
+ DB 1 ;
DB 0 ;N/A
DB (VA-DATA_START)
- DB $0 ;shift right
- DB 2 ;one time
+ ;B>>=1
+ DB $2 ;shift right
+ DB 2 ;
DB 0 ;N/A
- DB (VB-DATA_START)
- DB $0
+ DB (VB-DATA_START) ;dest
+ ;B+=A
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+ ;A=B
+ DB $d9
+ DB (VB-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A>>=4
+ DB $2 ;shift right
+ DB 4 ;
+ DB 0 ;N/A
+ DB (VA-DATA_START)
+ ;B+=A
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+ ;A=B
+ DB $d9
+ DB (VB-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A>>=8
+ DB $2 ;shift right
+ DB 8 ;
+ DB 0 ;N/A
+ DB (VA-DATA_START)
+ ;B+=A
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+ ;A=B
+ DB $d9
+ DB (VB-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A>>=8
+ DB $2 ;shift right
+ DB 16 ;
+ DB 0 ;N/A
+ DB (VA-DATA_START)
+ ;A+=B
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A>>=3
+ DB $2 ;shift right
+ DB 3 ;
+ DB 0 ;N/A
+ DB (VA-DATA_START) ;
+ ;B=A
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+ ;B<<=2
+ DB $1 ;shift left
+ DB 2 ;
+ DB $98 ;shift not cyclic
+ DB (VB-DATA_START) ;dest
+ ;B+=A
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+ ;B<<=1
+ DB $1 ;shift left
+ DB 1 ;
+ DB $98 ;shift not cyclic
+ DB (VB-DATA_START) ;dest
+ ;B=T2-B
+ DB $d2
+ DB (T2-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+ ;B>>=9
+ DB $2 ;shift right
+ DB 9 ;
+ DB 0 ;N/A
+ DB (VB-DATA_START) ;dest
+ ;T2=A+B
+ DB $d9
+ DB (VA-DATA_START) ;src1
+ DB (VB-DATA_START) ;src2
+ DB (T2-DATA_START) ;dest
+ ;A=T2+T2
+ DB $d9
+ DB (T2-DATA_START) ;src1
+ DB (T2-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A<<=2
+ DB $1 ;shift left
+ DB 2 ;
+ DB $98 ;shift not cyclic
+ DB (VA-DATA_START) ;dest
+ ;A+=T2
+ DB $d9
+ DB (T2-DATA_START) ;src1
+ DB (VA-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A+=T2
+ DB $d9
+ DB (T2-DATA_START) ;src1
+ DB (VA-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;A=C-A
+ DB $d2
+ DB (VC-DATA_START) ;src1
+ DB (VA-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+ ;stop
+ DB 0
+
+
+
+
-;
-;unsigned divu10(unsigned n) {
-; unsigned q, r;
-; q = (n >> 1) + (n >> 2);
-; q = q + (q >> 4);
-; q = q + (q >> 8);
-; q = q + (q >> 16);
-; q = q >> 3;
-; r = n - (((q << 2) + q) << 1);
-; return q + (r > 9);
-;}
-;
OPLIST_END: