summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYour Name <you@example.com>2019-07-18 13:16:13 +0100
committerYour Name <you@example.com>2019-07-18 13:16:13 +0100
commitd56b9720ebbe99f6a2f10980acbc5c19c0c39d46 (patch)
tree29cda8d22e51ed6c7599842706eb8243d66f9950
parent9b5367618ae9d3fbae4b00264ab24dbaa03613b1 (diff)
downloadwristapps-d56b9720ebbe99f6a2f10980acbc5c19c0c39d46.tar.gz
wristapps-d56b9720ebbe99f6a2f10980acbc5c19c0c39d46.tar.bz2
wristapps-d56b9720ebbe99f6a2f10980acbc5c19c0c39d46.zip
working ucoded alu
-rw-r--r--sha1/msauth.asm359
1 files changed, 216 insertions, 143 deletions
diff --git a/sha1/msauth.asm b/sha1/msauth.asm
index 397e2eb..fc5e291 100644
--- a/sha1/msauth.asm
+++ b/sha1/msauth.asm
@@ -3,12 +3,12 @@
idx EQU $60
lidx EQU $61
-k EQU $62
src1 EQU $63
src2 EQU $64
dest EQU $65
i EQU $66
j EQU $67
+opidx EQU $62
; BYTES 60-67 are persisent RAM for our use
@@ -136,14 +136,14 @@ test_l2:
lda H+16
and #$F
tax
- add #(H-BASE_START)
+ add #(H-DATA_START)
sta src1
lda H+3,x
and #$7F
sta H+3,x
- lda #(T1-BASE_START)
+ lda #(T1-DATA_START)
sta dest
- lda #(ZERO-BASE_START)
+ lda #(ZERO-DATA_START)
jsr add4
@@ -153,9 +153,9 @@ end: bra end
get_w32_015_to_t2:
- lda #(T2-BASE_START)
+ lda #(T2-DATA_START)
sta dest
- lda #(ZERO-BASE_START)
+ lda #(ZERO-DATA_START)
sta src1
lda lidx
@@ -167,14 +167,14 @@ get_w32_015_to_t2:
bhs get_w32_015_to_t2_z1
lsla
lsla
- add #(KEY-BASE_START)
+ add #(KEY-DATA_START)
sta src1
get_w32_015_to_t2_z1:
- lda #(ZERO-BASE_START)
+ lda #(ZERO-DATA_START)
jsr add4
- lda #(T2-BASE_START)
+ lda #(T2-DATA_START)
sta src1
- lda #(KEYOR-BASE_START)
+ lda #(KEYOR-DATA_START)
jsr xor4
rts
get_w32_015_to_t2_l1:
@@ -183,15 +183,15 @@ get_w32_015_to_t2_l1:
bhs get_w32_015_to_t2_l2
lsla
lsla
- add #(DATA1-BASE_START)
+ add #(DATA1-DATA_START)
bra get_w32_015_to_t2_e
get_w32_015_to_t2_l2:
cmp #15
bne get_w32_015_to_t2_l3
- lda #(DATA2-BASE_START)
+ lda #(DATA2-DATA_START)
bra get_w32_015_to_t2_e
get_w32_015_to_t2_l3:
- lda #(ZERO-BASE_START)
+ lda #(ZERO-DATA_START)
get_w32_015_to_t2_e:
jsr add4
rts
@@ -215,11 +215,11 @@ get_w32_to_t2_l1:
lda j
lsla
lsla
- add #(WBUF-BASE_START)
+ add #(WBUF-DATA_START)
sta dest
- lda #(T2-BASE_START)
+ lda #(T2-DATA_START)
sta src1
- lda #(ZERO-BASE_START)
+ lda #(ZERO-DATA_START)
jsr add4
inc j
@@ -229,17 +229,17 @@ get_w32_to_t2_l1:
get_w32_to_t2_l2:
- lda #(T2-BASE_START)
+ lda #(T2-DATA_START)
sta dest
- lda #(WBUF13 - BASE_START)
+ lda #(WBUF13 - DATA_START)
sta src1
- lda #(WBUF8 - BASE_START)
+ lda #(WBUF8 - DATA_START)
jsr xor4 ; T2 =W13 ^ W8
- lda #(T2-BASE_START)
+ lda #(T2-DATA_START)
sta src1
- lda #(WBUF2 - BASE_START)
+ lda #(WBUF2 - DATA_START)
jsr xor4 ; T2 = T2 ^ W2
- lda #(WBUF0 - BASE_START)
+ lda #(WBUF0 - DATA_START)
jsr xor4 ; T2= T2 ^ W0
lda #1
jsr rot_left ; T2= ROTLEFT(T2,1)
@@ -252,9 +252,9 @@ get_w32_to_t2_l3:
sta (WBUF14 + 3 - $FF),x
incx
bne get_w32_to_t2_l3
- lda #(WBUF15-BASE_START)
+ lda #(WBUF15-DATA_START)
sta dest
- lda #(ZERO-BASE_START)
+ lda #(ZERO-DATA_START)
jsr add4 ; WBUF15=T2
dec i
@@ -278,27 +278,17 @@ sha1_block_loop:
sta idx
cmp #20
bhs sha1_block_k2
- lda #(K1-BASE_START)
+ lda #(K1-DATA_START)
sta k
- ; T1 = (B & C) | ((~B) & D)
- lda #(T2-BASE_START)
- sta dest
- lda #(VB-BASE_START)
- sta src1
- lda #(FFFFFFFF-BASE_START)
- jsr xor4 ;T2=~B
-
- lda #(T2-BASE_START)
- sta src1
- lda #(VD-BASE_START)
- jsr and4 ;T2=T2&D
+ ldx #(T2eNotBandD-OPLIST_START)
+ jsr op4_list
bra sha1_block_t2_or_bandc ; T1=T2 | (B&C)
sha1_block_k2:
cmp #40
bhs sha1_block_k3
- lda #(K2-BASE_START)
+ lda #(K2-DATA_START)
sta k
bra sha1_block_k24 ; T1 = B ^ C ^ D
@@ -306,94 +296,32 @@ sha1_block_k3:
cmp #60
bhs sha1_block_k4
; T1 = (B & C) | (B & D) | (C & D)
- lda #(K3-BASE_START)
+ lda #(K3-DATA_START)
sta k
- lda #(T1-BASE_START)
- sta dest
- lda #(VD-BASE_START)
- sta src1
- lda #(VB-BASE_START)
- jsr and4 ; T1=B&D
-
- lda #(T2-BASE_START)
- sta dest
- lda #(VC-BASE_START)
- jsr and4 ; T2=C&D
-
- lda #(T2-BASE_START)
- sta src1
- lda #(T1-BASE_START)
- jsr or4 ; T2=T1|T2
-
+ ldx #(T2eCandDorBandD-OPLIST_START)
+ jsr op4_list
+
sha1_block_t2_or_bandc:
- lda #(T1-BASE_START)
- sta dest
- lda #(VB-BASE_START)
- sta src1
- lda #(VC-BASE_START)
- jsr and4 ; T1 = B&C
-
- lda #(T1-BASE_START)
- sta src1
- lda #(T2-BASE_START)
- jsr or4 ; T1= T1|T2
-
+ ldx #(T1eT2orBandC-OPLIST_START)
+ jsr op4_list
bra sha1_block_shuffle
sha1_block_k4:
- lda #(K4-BASE_START)
+ lda #(K4-DATA_START)
sta k
sha1_block_k24:
- ; T1 = B ^ C ^ D
- lda #(T1-BASE_START)
- sta dest
- lda #(VB-BASE_START)
- sta src1
- lda #(VC-BASE_START)
- jsr xor4
- lda #(T1-BASE_START)
- sta src1
- lda #(VD-BASE_START)
- jsr xor4
-sha1_block_shuffle:
- ; T1 is src1 and dest here
- lda #(VE-BASE_START)
- jsr add4 ; T1=T1+E
+ ldx #(T1eBxorCxorD-OPLIST_START)
+ jsr op4_list
- lda k
- jsr add4 ; T1=T1+k
+sha1_block_shuffle:
jsr get_w32_to_t2 ; W[i]->T2
- lda #(T1-BASE_START)
- sta dest
- sta src1
- lda #(T2-BASE_START)
- jsr add4 ; T1=T1+data
-
- lda #(VD-BASE_START)
- jsr copy_up ; E=D
- lda #(VC-BASE_START)
- jsr copy_up ; D=C
- lda #(VB-BASE_START)
- jsr copy_up ; C=B
- lda #30
- jsr rot_left ; C=ROTLEFT(C,30)
- lda #(VA-BASE_START)
- jsr copy_up ; B=A
-
- lda #(VA-BASE_START)
- sta dest
- sta src1
- lda #5
- jsr rot_left ; A=ROTLEFT(A,5)
-
- lda #(T1-BASE_START)
- jsr add4 ; A=A+T1
-
+ ldx #(shuffleop-OPLIST_START)
+ jsr op4_list
lda idx
add #1
@@ -417,14 +345,54 @@ sha1_block_add1:
cpx #20
bne sha1_block_add0
+rts1:
rts
-
-copy_up:
+op4_list:
+ lda OPLIST_START,x
+ sta op4_src2
+ incx
+ lda OPLIST_START,x
sta src1
- add #4
+ incx
+ lda OPLIST_START,x
+ sta src2
+ incx
+ lda OPLIST_START,x
sta dest
- lda #(ZERO-BASE_START)
+ incx
+ stx opidx
+ lda op4_src2
+ tsta
+ beq rts1
+ bmi op4_list_l1
+
+ ; rotates dest left src1 times
+ ldx dest
+op_list_l0:
+ lda DATA_START,x
+ rola
+ lda DATA_START+1,x
+ rola
+ sta DATA_START+1,x
+ lda DATA_START+2,x
+ rola
+ sta DATA_START+2,x
+ lda DATA_START+3,x
+ rola
+ sta DATA_START+3,x
+ lda DATA_START,x
+ rola
+ sta DATA_START,x
+ dec src1
+ bne op_list_l0
+ bra op4_list_l2
+op4_list_l1:
+ jsr op4_binary
+op4_list_l2:
+ ldx opidx
+ bra op4_list
+
add4:
sta src2
@@ -432,42 +400,33 @@ add4:
sta op4_src2
bra op4_binary
-and4:
- sta src2
- lda #$d4 ; and $ffff,a
- sta op4_src2
- bra op4_binary
-
xor4:
sta src2
lda #$d8 ; eor $ffff,a
sta op4_src2
bra op4_binary
-or4:
- sta src2
- lda #$da ; or $ffff,a
- sta op4_src2
+
op4_binary:
ldx #0
- lda #BASE_START & $ff
+ lda #DATA_START & $ff
add src2
sta op4_src2+2
txa
- adc #BASE_START>>8
+ adc #DATA_START>>8
sta op4_src2+1
- lda #BASE_START & $ff
+ lda #DATA_START & $ff
add src1
sta op4_src1+2
txa
- adc #BASE_START>>8
+ adc #DATA_START>>8
sta op4_src1+1
- lda #BASE_START & $ff
+ lda #DATA_START & $ff
add dest
sta op4_dst+2
txa
- adc #BASE_START>>8
+ adc #DATA_START>>8
sta op4_dst+1
clc
@@ -488,26 +447,140 @@ rot_left:
ldx dest
sta j
rot_loop:
- lda BASE_START,x
+ lda DATA_START,x
rola
- lda BASE_START+1,x
+ lda DATA_START+1,x
rola
- sta BASE_START+1,x
- lda BASE_START+2,x
+ sta DATA_START+1,x
+ lda DATA_START+2,x
rola
- sta BASE_START+2,x
- lda BASE_START+3,x
+ sta DATA_START+2,x
+ lda DATA_START+3,x
rola
- sta BASE_START+3,x
- lda BASE_START,x
+ sta DATA_START+3,x
+ lda DATA_START,x
rola
- sta BASE_START,x
+ sta DATA_START,x
dec j
bne rot_loop
rts
+
+OPLIST_START:
+
+T2eNotBandD:
+ DB $d8 ;eor
+ DB (VB-DATA_START) ;src1
+ DB (FFFFFFFF-DATA_START) ;src2
+ DB (T2-DATA_START) ;dest
+ DB $d4 ;and
+ DB (VD-DATA_START) ;src1
+ DB (T2-DATA_START) ;src2
+ DB (T2-DATA_START) ;dest
+ DB 0 ;stop
+
+
+T2eCandDorBandD: ; T1 = C&D, T2=B&D, T2=T1|T2
+ DB $d4 ;and
+ DB (VC-DATA_START) ;src1
+ DB (VD-DATA_START) ;src2
+ DB (T1-DATA_START) ;dest
+ DB $d4 ;and
+ DB (VB-DATA_START) ;src1
+ DB (VD-DATA_START) ;src2
+ DB (T2-DATA_START) ;dest
+ DB $da ;or
+ DB (T1-DATA_START) ;src1
+ DB (T2-DATA_START) ;src2
+ DB (T2-DATA_START) ;dest
+ DB 0 ;stop
+
+T1eT2orBandC: ; T1=B&C; T1=T1|T2
+ DB $d4 ;and
+ DB (VB-DATA_START) ;src1
+ DB (VC-DATA_START) ;src2
+ DB (T1-DATA_START) ;dest
+ DB $da ;or
+ DB (T1-DATA_START) ;src1
+ DB (T2-DATA_START) ;src2
+ DB (T1-DATA_START) ;dest
+ DB 0 ;stop
+
+
+
+T1eBxorCxorD:
+ DB $d8 ;xor
+ DB (VB-DATA_START) ;src1
+ DB (VC-DATA_START) ;src2
+ DB (T1-DATA_START) ;dst
+ DB $d8 ;xor
+ DB (T1-DATA_START) ;src1
+ DB (VD-DATA_START) ;src2
+ DB (T1-DATA_START) ;dst
+ DB 0 ;stop
+
+shuffleop:
+
+
+ DB $d9 ;add
+ DB (T1-DATA_START) ;src1
+ DB (VE-DATA_START) ;src2
+ DB (T1-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (T1-DATA_START) ;src1
+k:
+ DB 0 ;src2
+ DB (T1-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (T1-DATA_START) ;src1
+ DB (T2-DATA_START) ;src2
+ DB (T1-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (VD-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VE-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (VC-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VD-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (VB-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VC-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (VA-DATA_START) ;src1
+ DB (ZERO-DATA_START) ;src2
+ DB (VB-DATA_START) ;dest
+
+ DB $1 ;rot left
+ DB 30 ;30 times
+ DB 0 ; N/A
+ DB (VC-DATA_START) ;dest
+
+ DB $1 ;rot left
+ DB 5 ;5 times
+ DB 0 ; N/A
+ DB (VA-DATA_START) ;dest
+
+ DB $d9 ;add
+ DB (VA-DATA_START) ;src1
+ DB (T1-DATA_START) ;src2
+ DB (VA-DATA_START) ;dest
+
+ DB $0
+
+
+OPLIST_END:
+
+
-BASE_START:
+DATA_START:
KEY:
DB $89
@@ -701,5 +774,5 @@ DATA2:
DB 0
DB 0
-BASE_END:
+DATA_END: