From 5ae6c9cea74dcf7a1b41a8274dc826b16ef37930 Mon Sep 17 00:00:00 2001 From: Zellyn Hunter Date: Thu, 5 Jan 2017 21:47:49 -0500 Subject: [PATCH] reorganize langcard and shasum code --- audit/audit.asm | 8 +- audit/audit.dsk | Bin 143360 -> 143360 bytes audit/langcard.asm | 15 +- audit/shasumtests.asm | 8 + shasum/shasum-test.asm | 145 ++++++++++++ shasum/{shasum.a => shasum.asm} | 377 +++++++++++--------------------- 6 files changed, 299 insertions(+), 254 deletions(-) create mode 100644 audit/shasumtests.asm create mode 100644 shasum/shasum-test.asm rename shasum/{shasum.a => shasum.asm} (51%) diff --git a/audit/audit.asm b/audit/audit.asm index e0bef3d..de68411 100644 --- a/audit/audit.asm +++ b/audit/audit.asm @@ -27,10 +27,13 @@ main: !src "detect.asm" ;; Language card tests. - !src "langcard.asm" + jsr LANGCARDTESTS end: jmp * + !src "langcard.asm" + !src "shasumtests.asm" + print lda $C081 lda $C081 @@ -77,7 +80,8 @@ getche lda $FEED ; FEED gets modified jsr PRNTYX rts !src "technote2.asm" - + !src "../shasum/shasum.asm" + ; !if * != STRINGS { ; !error "Expected STRINGS to be ", * ; } diff --git a/audit/audit.dsk b/audit/audit.dsk index d5a319674e0e7afc620bc2b99c90cc10879d3e5a..fcd95986ae2099ba38edecb16796c5f5726f4afb 100644 GIT binary patch delta 2440 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 a(QXF{n=Ix{ !zone langcard { - +LANGCARDTESTS lda MEMORY cmp #49 bcs + +print !text "48K:SKIPPING LANGUAGE CARD TEST",$8D +printed - beq .jdone + rts ;; Setup - store differing values in bank first and second banked areas. + lda $C08B ; Read and write bank 1 lda $C08B @@ -20,7 +20,7 @@ +prerr $0003 ;; E0003: We tried to put the language card into read bank 1, write bank 1, but failed to write. !text "CANNOT WRITE TO LC BANK 1 RAM" +prerred - beq .jdone + rts lda #$33 + sta $FE1F ; FE1F is $60 in Apple II/plus/e/enhanced cmp $FE1F @@ -28,7 +28,7 @@ +prerr $0004 ;; E0004: We tried to put the language card into read RAM, write RAM, but failed to write. !text "CANNOT WRITE TO LC RAM" +prerred - beq .jdone + rts + lda $C083 ; Read and write bank 2 lda $C083 lda #$22 @@ -38,7 +38,7 @@ +prerr $0005 ;; E0005: We tried to put the language card into read bank 2, write bank 2, but failed to write. !text "CANNOT WRITE TO LC BANK 2 RAM" +prerred -.jdone jmp .done + rts ;; Parameterized tests @@ -220,7 +220,7 @@ +prerr $0006 ;; E0006: This is a data-driven test of Language Card operation. We initialize $D17B in RAM bank 1 to $11, $D17B in RAM bank 2 to $22, and $FE1F in RAM to $33. Then, we perform a testdata-driven sequence of LDA and STA to the $C08X range. Finally we (try to) increment $D17B and $FE1F. Then we test (a) the current live value in $D17B, (b) the current live value in $FE1F, (c) the RAM bank 1 value of $D17B, (d) the RAM bank 2 value of $D17B, and (e) the RAM value of $FE1F, to see whether they match expected values. $D17B is usually $53 in ROM, and $FE1F is usally $60. For more information on the operation of the language card soft-switches, see Understanding the Apple IIe, by James Fielding Sather, Pg 5-24. !text "DATA-DRIVEN TEST FAILED" +prerred - jmp .done + rts .printseq tya @@ -281,6 +281,8 @@ !byte $22, $33, $11, $22, $33 ; !byte $0b, $0b, $ff ; Read $C08B, $C08B (read/write RAM bank 1) !byte $12, $34, $12, $22, $34 ; + !byte $0f, $07, $ff ; Read $C08F, $C087 (read/write RAM bank 2) + !byte $23, $34, $11, $23, $34 ; !byte $07, $0D, $ff ; Read $C087, read $C08D (read ROM, write bank 1) !byte $53, $60, $54, $22, $61 ; !byte $0b, $8b, $0b, $ff ; Read $C08B, write $C08B, read $C08B (read RAM bank 1, no write) @@ -297,4 +299,5 @@ !text "LANGUAGE CARD TESTS SUCCEEDED",$8D +printed .done + rts } ;langcard diff --git a/audit/shasumtests.asm b/audit/shasumtests.asm new file mode 100644 index 0000000..e176087 --- /dev/null +++ b/audit/shasumtests.asm @@ -0,0 +1,8 @@ +;;; Apple II ROM shasum audit routines +;;; Copyright © 2016 Zellyn Hunter + + !zone shasumtests { +SHASUMTESTS +.done + rts + } ;shasumtests diff --git a/shasum/shasum-test.asm b/shasum/shasum-test.asm new file mode 100644 index 0000000..c502b43 --- /dev/null +++ b/shasum/shasum-test.asm @@ -0,0 +1,145 @@ + !to "shasum.o", plain + * = $6000 + jmp main + + !addr SRC = $06 + !addr DST = $08 + !addr SHAINPUT = $eb + !addr SHALENGTH = $ee + + !addr PRBYTE = $FDDA + !addr COUT = $FDED + + + !macro set32 .target, .value { + lda #<(.value >> 24) + sta .target + lda #<(.value >> 16) + sta .target+1 + lda #<(.value >> 8) + sta .target+2 + lda #<(.value) + sta .target+3 + } + + !macro setSRC .source { + lda #<.source + sta SRC + lda #>.source + sta SRC+1 + } + !macro setDST .dest { + lda #<.dest + sta DST + lda #>.dest + sta DST+1 + } + +;;; Print a string of bytes, as hex. +;;; Address in SRC, count in A. +;;; Burns A,Y. +prbytes: + ldy #0 +- pha + lda (SRC),y + jsr PRBYTE + iny + pla + adc #$ff + bne - + rts + +main: + ;; Test shasum "" + lda #0 + sta SHAINPUT + lda #$fe + sta SHAINPUT+1 + lda #0 + sta SHALENGTH+1 + lda #0 ; da39a3ee5e6b4b0d3255bfef95601890afd80709 + sta SHALENGTH + jsr SHASUM + + ; lda #$8d + ; jsr COUT + + +setSRC SHA + lda #SHALEN + jsr prbytes + + ;; Test shasum FE00[:0x37] + lda #0 + sta SHAINPUT + lda #$fe + sta SHAINPUT+1 + lda #0 + sta SHALENGTH+1 + lda #$37 ; 1CF73FC6156B548A949D315120B5256245EAA33E + sta SHALENGTH + jsr SHASUM + + ; lda #$8d + ; jsr COUT + + +setSRC SHA + lda #SHALEN + jsr prbytes + + ;; Test shasum FE00[:0x100] + lda #0 + sta SHAINPUT + lda #$fe + sta SHAINPUT+1 + lda #1 + sta SHALENGTH+1 + lda #0 ; 7B3D05347B52210065E27054FDFD0B8B699F0965 + sta SHALENGTH + jsr SHASUM + + ; lda #$8d + ; jsr COUT + + +setSRC SHA + lda #SHALEN + jsr prbytes + + ;; Test shasum FE00[:0x1ff] + lda #0 + sta SHAINPUT + lda #$fe + sta SHAINPUT+1 + lda #$1 + sta SHALENGTH+1 + lda #$ff ; 269CA6B0C644DAC01D908B20C10C0D5B19C52ABF + sta SHALENGTH + jsr SHASUM + + ; lda #$8d + ; jsr COUT + + +setSRC SHA + lda #SHALEN + jsr prbytes + + ;; Test shasum FE00[:0x200] + lda #0 + sta SHAINPUT + lda #$fe + sta SHAINPUT+1 + lda #2 + sta SHALENGTH+1 + lda #0 ; D5AC71D5EE76E31CC82CF5136151BF4CDA503601 + sta SHALENGTH + jsr SHASUM + + ; lda #$8d + ; jsr COUT + + +setSRC SHA + lda #SHALEN + jsr prbytes + + rts + + !src "shasum.asm" diff --git a/shasum/shasum.a b/shasum/shasum.asm similarity index 51% rename from shasum/shasum.a rename to shasum/shasum.asm index 5f476f6..28b56b6 100644 --- a/shasum/shasum.a +++ b/shasum/shasum.asm @@ -1,6 +1,9 @@ - !to "shasum.o", plain - * = $6000 - jmp main +;;; SHA-1 implementation in 6502 assembly. +;;; A straightforward implementation of: +;;; https://en.wikipedia.org/wiki/SHA-1#SHA-1_pseudocode +;;; Copyright © 2016 Zellyn Hunter + + !zone shasum { ;; clear addresses: ;; (http://apple2.org.za/gswv/a2zine/faqs/csa2pfaq.html#017) @@ -10,42 +13,15 @@ !addr SRC = $06 !addr DST = $08 - !addr INPUT = $eb - !addr LENGTH = $ee - !addr TMP1 = $fa - !addr TMP2 = $fb + !addr SHAINPUT = $eb + !addr SHALENGTH = $ee + !addr .tmp1 = $fa + !addr .tmp2 = $fb !addr PRBYTE = $FDDA !addr COUT = $FDED -h0: !32 0 ; return value (hash) -h1: !32 0 -h2: !32 0 -h3: !32 0 -h4: !32 0 -h5: -ml: !32 0, 0 ; message length -w: !fill 64, 0 -w_next: !fill 64, 0 -a: !32 0 -b: !32 0 -c: !32 0 -d: !32 0 -e: !32 0 -f: !32 0 -temp: !32 0 -k: !32 0 -kh0: !be32 $67452301 ; initial values for h0..h4 -kh1: !be32 $EFCDAB89 -kh2: !be32 $98BADCFE -kh3: !be32 $10325476 -kh4: !be32 $C3D2E1F0 -k1 = $5A827999 ; k constants -k2 = $6ED9EBA1 -k3 = $8F1BBCDC -k4 = $CA62C1D6 - - !macro set32 .target, .value { + !macro .set32 .target, .value { lda #<(.value >> 24) sta .target lda #<(.value >> 16) @@ -56,149 +32,73 @@ k4 = $CA62C1D6 sta .target+3 } - !macro setSRC .source { + !macro .setSRC .source { lda #<.source sta SRC lda #>.source sta SRC+1 } - !macro setDST .dest { + !macro .setDST .dest { lda #<.dest sta DST lda #>.dest sta DST+1 } -;;; Print a string of bytes, as hex. -;;; Address in SRC, count in A. -;;; Burns A,Y. -prbytes: - ldy #0 -- pha - lda (SRC),y - jsr PRBYTE - iny - pla - adc #$ff - bne - - rts -main: - ;; Test shasum "" - lda #0 - sta INPUT - lda #$fe - sta INPUT+1 - lda #0 - sta LENGTH+1 - lda #0 ; da39a3ee5e6b4b0d3255bfef95601890afd80709 - sta LENGTH - jsr shasum + !align 255, 0 ; align data area to page boundary +SHA: +SHALEN = 20 +.h0: !32 0 ; return value (hash) +.h1: !32 0 +.h2: !32 0 +.h3: !32 0 +.h4: !32 0 +.h5: +.ml: !32 0, 0 ; message length +.w: !fill 64, 0 +.w_next: !fill 64, 0 +.a: !32 0 +.b: !32 0 +.c: !32 0 +.d: !32 0 +.e: !32 0 +.f: !32 0 +.temp: !32 0 +.k: !32 0 +.kh0: !be32 $67452301 ; initial values for h0..h4 +.kh1: !be32 $EFCDAB89 +.kh2: !be32 $98BADCFE +.kh3: !be32 $10325476 +.kh4: !be32 $C3D2E1F0 +.k1 = $5A827999 ; k constants +.k2 = $6ED9EBA1 +.k3 = $8F1BBCDC +.k4 = $CA62C1D6 - ; lda #$8d - ; jsr COUT - - +setSRC h0 - lda #(h5-h0) - jsr prbytes - - ;; Test shasum FE00[:0x37] - lda #0 - sta INPUT - lda #$fe - sta INPUT+1 - lda #0 - sta LENGTH+1 - lda #$37 ; 1CF73FC6156B548A949D315120B5256245EAA33E - sta LENGTH - jsr shasum - - ; lda #$8d - ; jsr COUT - - +setSRC h0 - lda #(h5-h0) - jsr prbytes - - ;; Test shasum FE00[:0x100] - lda #0 - sta INPUT - lda #$fe - sta INPUT+1 - lda #1 - sta LENGTH+1 - lda #0 ; 7B3D05347B52210065E27054FDFD0B8B699F0965 - sta LENGTH - jsr shasum - - ; lda #$8d - ; jsr COUT - - +setSRC h0 - lda #(h5-h0) - jsr prbytes - - ;; Test shasum FE00[:0x1ff] - lda #0 - sta INPUT - lda #$fe - sta INPUT+1 - lda #$1 - sta LENGTH+1 - lda #$ff ; 269CA6B0C644DAC01D908B20C10C0D5B19C52ABF - sta LENGTH - jsr shasum - - ; lda #$8d - ; jsr COUT - - +setSRC h0 - lda #(h5-h0) - jsr prbytes - - ;; Test shasum FE00[:0x200] - lda #0 - sta INPUT - lda #$fe - sta INPUT+1 - lda #2 - sta LENGTH+1 - lda #0 ; D5AC71D5EE76E31CC82CF5136151BF4CDA503601 - sta LENGTH - jsr shasum - - ; lda #$8d - ; jsr COUT - - +setSRC h0 - lda #(h5-h0) - jsr prbytes - - rts - -shasum: +SHASUM: ;; Initialize h0..h4 - ldy #(h5-h0-1) -- lda kh0,y - sta h0,y + ldy #(.h5-.h0-1) +- lda .kh0,y + sta .h0,y dey bpl - - ;; Initialize message length (ml) + ;; Initialize message length (.ml) lda #0 ldy #4 -- sta ml, y +- sta .ml, y dey bpl - - lda LENGTH - sta ml+7 - lda LENGTH+1 - sta ml+6 + lda SHALENGTH + sta .ml+7 + lda SHALENGTH+1 + sta .ml+6 ;; Message length is in bits ldy #3 -- asl ml+7 - rol ml+6 - rol ml+5 +- asl .ml+7 + rol .ml+6 + rol .ml+5 dey bne - @@ -206,19 +106,19 @@ shasum: ;; ldy #0 ; already zero ;; Invert length so we can inc instead of dec - lda LENGTH + lda SHALENGTH sec lda #0 - sbc LENGTH - sta LENGTH + sbc SHALENGTH + sta SHALENGTH lda #0 - sbc LENGTH+1 - sta LENGTH+1 - ora LENGTH + sbc SHALENGTH+1 + sta SHALENGTH+1 + ora SHALENGTH beq .msgdone -.loop lda (INPUT),y - sta w,y +.loop lda (SHAINPUT),y + sta .w,y iny cpy #$40 bne + @@ -228,20 +128,20 @@ shasum: ldy #0 clc - lda INPUT + lda SHAINPUT adc #$40 - sta INPUT + sta SHAINPUT bcc + - inc INPUT+1 + inc SHAINPUT+1 -+ inc LENGTH ++ inc SHALENGTH bne .loop - inc LENGTH+1 + inc SHALENGTH+1 bne .loop .msgdone: lda #$80 - sta w,y + sta .w,y iny cpy #$40 bne .zeros @@ -252,7 +152,7 @@ shasum: cpy #$38 beq .length lda #0 - sta w,y + sta .w,y iny cpy #$40 bne .zeros @@ -261,27 +161,27 @@ shasum: jmp .zeros .length ldy #7 -- lda ml,y - sta w+$38,y +- lda .ml,y + sta .w+$38,y dey bpl - jsr do_chunk rts -;;; do_chunk processes a chunk of input. It burns A,X,Y,TMP1,TMP2. +;;; do_chunk processes a chunk of input. It burns A,X,Y,.tmp1,.tmp2. do_chunk: ;; Copy a..e from h0..h4 - ldy #(f-a-1) -- lda h0,y - sta a,y + ldy #(.f-.a-1) +- lda .h0,y + sta .a,y dey bpl - ldy #0 ; y is index into w ;; First 20: k1 - +set32 k, k1 + +.set32 .k, .k1 ldx #16 - jsr kind1 @@ -293,7 +193,7 @@ do_chunk: dex bne - ;; Second 20: k2 - +set32 k, k2 + +.set32 .k, .k2 ldx #12 - jsr kind2 @@ -306,7 +206,7 @@ do_chunk: bne - ;; Third 20: k3 - +set32 k, k3 + +.set32 .k, .k3 ldx #8 - jsr kind3 @@ -319,7 +219,7 @@ do_chunk: bne - ;; Fourth 20: k4 - +set32 k, k4 + +.set32 .k, .k4 ldx #4 - jsr kind2 @@ -331,8 +231,8 @@ do_chunk: dex bne - - +setSRC a - +setDST h0 + +.setSRC .a + +.setDST .h0 ldx #5 - jsr add32 clc @@ -347,57 +247,57 @@ do_chunk: rts kind1: - sty TMP1 - stx TMP2 + sty .tmp1 + stx .tmp2 ;; f = d xor (b and (c xor d)) - +setDST f - +setSRC d + +.setDST .f + +.setSRC .d jsr cp32 - +setSRC c + +.setSRC .c jsr xor32 - +setSRC b + +.setSRC .b jsr and32 - +setSRC d + +.setSRC .d jsr xor32 jmp common kind2: - sty TMP1 - stx TMP2 + sty .tmp1 + stx .tmp2 ;; f = b xor c xor d - +setDST f - +setSRC d + +.setDST .f + +.setSRC .d jsr cp32 - +setSRC c + +.setSRC .c jsr xor32 - +setSRC b + +.setSRC .b jsr xor32 jmp common kind3: - sty TMP1 - stx TMP2 + sty .tmp1 + stx .tmp2 ;; f = (b and c) or (d and (b or c)) - +setSRC c - +setDST f + +.setSRC .c + +.setDST .f jsr cp32 - +setDST temp + +.setDST .temp jsr cp32 - +setSRC b + +.setSRC .b jsr and32 - +setDST f + +.setDST .f jsr or32 - +setSRC d + +.setSRC .d jsr and32 - +setSRC temp + +.setSRC .temp jsr or32 ; jmp common common: ;; temp = (a leftrotate 5) + f + e + k + w[i] - +setDST temp - +setSRC a + +.setDST .temp + +.setSRC .a jsr cp32 jsr rol8 @@ -405,53 +305,53 @@ common: jsr ror1 jsr ror1 - +setSRC f + +.setSRC .f jsr add32 - +setSRC e + +.setSRC .e jsr add32 - +setSRC k + +.setSRC .k jsr add32 - ;; !setSRC w[i], and call add32 - ldy TMP1 + ;; !.setSRC w[i], and call add32 + ldy .tmp1 clc tya - adc #w + adc #>.w sta SRC+1 jsr add32 ;; e = d - +setSRC d - +setDST e + +.setSRC .d + +.setDST .e jsr cp32 ;; d = c - +setSRC c - +setDST d + +.setSRC .c + +.setDST .d jsr cp32 ;; c = b leftrotate 30 - +setSRC b - +setDST c + +.setSRC .b + +.setDST .c jsr cp32 jsr ror1 jsr ror1 ;; b = a - +setSRC a - +setDST b + +.setSRC .a + +.setDST .b jsr cp32 ;; a = temp - +setSRC temp - +setDST a + +.setSRC .temp + +.setDST .a jsr cp32 - ldy TMP1 - ldx TMP2 + ldy .tmp1 + ldx .tmp2 iny iny iny @@ -460,8 +360,8 @@ common: ;; Replace w[i:i+16] with w[i+16:i+32]. Burns a. Sets y=0. fill: - +setDST w_next - +setSRC w + +.setDST .w_next + +.setSRC .w ldx #0x10 - sec @@ -491,9 +391,9 @@ fill: dex bne - - ldx #w_next-w-1 -- lda w_next,x - sta w,x + ldx #.w_next-.w-1 +- lda .w_next,x + sta .w,x dex bpl - @@ -599,19 +499,4 @@ rol8: txa sta (DST),y rts - - !eof -TODOs -[X] Routine to print n hex bytes (address, length (byte)) -[X] Routine to get the next 16 values (64 bytes) of input -[X] Routine to get w[i] one i at a time, and rebuild next 16 values - -Needed arithmetic routines for sha1sum: -- [X] add32 -- [X] and32 -- [X] or32 -- [X] xor32 -- [X] ROL1 -- [X] ROR1 -- [X] ROL5 --> ROL8, (ROR1,ROR1,ROR1) -- [X] ROL30 --> (ROR1,ROR1) +} ;shasum