From 80e8c0c140d2e11a9afd59afe2cf537d4847132d Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Sat, 20 Jul 2019 10:22:05 +0100 Subject: working divide by 10 --- sha1/emul.script | 2 +- sha1/msauth.asm | 233 +++++++++++++++++++++++++++++++++++++++++++++---------- 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: -- cgit v1.2.3