From c2f7f82d67b16473cf20643e45f0a705e5e147cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 20 Jan 2020 08:23:51 +0100 Subject: [PATCH] Kernel 0.93++ --- .Docs/KERNEL.md | 56 ++++- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes INC/A2osX.I.txt | 8 +- SYS/KERNEL.S.DEF.txt | 11 + SYS/KERNEL.S.ENV.txt | 2 +- SYS/KERNEL.S.JMP.txt | 16 +- SYS/KERNEL.S.MD5X.txt | 530 +++++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.TIME.txt | 2 +- SYS/KERNEL.S.txt | 1 + 9 files changed, 610 insertions(+), 16 deletions(-) create mode 100644 SYS/KERNEL.S.MD5X.txt diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 93000b00..4bee6c7e 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -125,7 +125,7 @@ Create a hDEV ## ASM **In:** -`>PUSHW string` +`>PUSHW str` `>PUSHW expanded` `>SYSCALL expand` @@ -305,6 +305,58 @@ Return float rounded into a long ## RETURN VALUE Y,A = ... +## MD5 +Return MD5 Hash for input String + +# C +`void md5 (const char* str, char* digest);` + +# ASM +`>PUSHW str` +`>PUSHW digest` +`>SYSCALL md5` + +## RETURN VALUE +CC + +## MD5Init +Initialize a MD5 computation + +# C +`hMD5 md5init ();` + +# ASM +`>SYSCALL MD5Init` + +## RETURN VALUE +A = hMem To S.MD5 + +## MD5Update +Add Data to MD5 computation + +# C +`void md5update (hMD5 md5, char* data, int len);` + +# ASM +`>PUSHB md5` +`>PUSHW data` +`>PUSHW len` +`>SYSCALL MD5Update` + +## RETURN VALUE + +## MD5Finalize + +# C +`void md5finalize (hMD5 md5, char* digest);` + +# ASM +`>PUSHB md5` +`>PUSHW digest` +`>SYSCALL MD5Finalize` + +## RETURN VALUE + # GetMem0 Y,A = Size Requested @@ -1310,7 +1362,6 @@ Convert S.TIME struct to CSTR ## ASM `>PUSHW ptr` `>PUSHW format` -`>PUSHW timeptr` + %a : Abbreviated weekday name : Thu + %A : Full weekday name : Thursday + %b : Abbreviated month name : Aug @@ -1326,6 +1377,7 @@ Convert S.TIME struct to CSTR + %y : Year, last two digits (00-99) + %Y : Year four digits 2001 +`>PUSHW timeptr` `>SYSCALL strftime` ## RETURN VALUE diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d5d6b2058df25cae3054d1e1505600d20e38bfa3..cb29cc99b257d7b987506ff6bed1ca78caa3b356 100644 GIT binary patch delta 10479 zcmZvh30zdgAHe4=3q1C53A?bMBBuiC$}Xqm!NM-G$|c~f1uiR~+=q^q;hKy`rkUl0 zg_#v*rD+x@x}}|JX4qkuWo4NinpSpL=KnYEyDf~&ZBUqb${VE z|8Sz({e>59PMsbY#ud*h*5#R!H|xw(?a^6jD0rAtWT~xc-YAKUC?wn|o>pI8)@)lZ zWn`hj5zdV4s@k&Zs%5ry-FK#Oa|U;naQb|=6K|iSgYHqB+HzIFQ`HmP2+Ez-yxaLC z_Z~fSR2$#5SaF8y!U~-`f3Way@o4K8_1!7U73a73Cn9K4lKKd^j*?<^o-|JF#yTS1 zv%663*28(4vvLZ;qxIchL2f^DU0SzG2NWlKx_|CK3BPh6eDy)9pPw75c;gUlcyUT#D=U6qg+qK)ijOu~ z1rzP~22`xdXftjP*_Uxekyg69($OpIu5k1!w57*0?pN%}xXh~9wmFWc?R5)(snT z_PU*_bUc-*t+6@UGViAsvQ}))5gQ{nuQJEw4YZo}g#d#UuU@}BCR&Yp8UH+pusIcgl^8yp==9Vh&M6H}I(9m^qc4HC;8<69hJ zie)Wz3|;Q%Xk!I)haUn#i(`CEU(FVWt7fZM6|^!%w^Us*NwhK#az#~;YIDp3Gh%8* zoTwKxF^8BBU=@rw6)ku4uL!m5Q0xyV2I^Ym*BVD_M}zb(^~usUM|+#&*a`n%p$Al| zr*}Y4O*_22joCbQah*lkd*!*cj)R)Ra^5<}t$8nhcxd+;N4&1hp(766YKLx(<3#VJ z9d1m2jf3g05%q&3c1K5*l3DLIc29YN+x)|ITldV*+{{AfPi~5x9T(h`oxiwgyE}ex zvvON5yLEJWE0sGtF1sl@1C+Y%jw>MUR4Emm{z^qxhO$G|S*V24la*HYu1aNxqO)EZ zy|ZJXQbD#TJGZ#2yF03tRyX?oY|nXg-h;}Fu08I#DshU^!UOIXU>%Fnbf+J5FO`;@ z)!Ta9ySMdt%zvzvcSG?(r_NWBJ2cULqwH5gVqI5m2 zE-$ms(~nw;eAKADtlVm!XJ82pYHw#ObQdc=o- zJ#!vvpWoOwTi=y*(&z}Nz4<9uy zuwm!ZyRO?jtE!jSS8kXVYG59VI(9T5`->P{bV5^|gM?K)(`D zyREKK_DkR2FN5q?VxM10vR}!vkrc^DenAN{k_tvzr9t*f8)#*$WF;y(I~)0=%T`!d z@VCiU#`RelFI$-)TbU?X$t#%7tYq{x#W>JNCg^Qtp&}~Ik`XJR3%Jg&qDfX^z-RLSZ6-3nq{|E zmNmxP%d0AEP0ew)l_FufSjt$OhXQ86Yw3i-X~j7+>`l#$rARZgpG2xtiqx}2Ask7v zjJdh?n(|~QIGZ;7stRo7=RjUo7V?^l;^#8ILg%3=?Buc$)aK^SfQ3Vz{z!8>YIh0c zWdgb1f!dL}6moJ+vy4#MnV~5InQYR)oU69gBK3SGEO8agjb=hC(&_2KrbfGHn4OQ1 zP!2t3ZL;geqA(lX!&`@HDo{Hs1FlI&C7lHYRnjkct6IfZq4xUfGBjc#&7CR4jOG_f z>x!xx>BiE=<|gD-BX_%hEwoqacF|B|9i8oEjZoDyF?7AQfu5Qv1ba7%Y1YZwrqwrR z@qibg0tCRj`{pd4;oIV4(OCsQB6f65AlPx%|yHy{)H%N!b30kMvj8u zM}Zm0XsBzNshd=|US~40r8Ce7@dU3L=_EGr$+7iqn)fs}&P}chphRtFaDuP?6ewGjvz1SIrOQa}drS26&%VHM~ z)JTKrk?{HI_@%A@3B0o}sHFW233stYLfm6Q?xr;=t5(s9XxRcGaQX^q2hrLgMCzf0 zs8yF~Dak6BmS2K|mC}^e>5;ICDJf&U9ZZnUK-o4F>)bQr*mks9QZ{-Gy{@v3GOm^D z!gRkEwKwB3#NQ`J;s#eFZj>W2;C@#mN&$@`HqmOq8m@Xkj>Xi?^xSMA#rr{5ECxJ8 zmidxpeqGD_-9Gn!Xb@T%bDK9r*rNI3p&)R^pv$KUol8QdG}8mOKy~LL0pA#9r6_>* z6T!SJMWGLil78bO`2-`>PEQBdtAn@7BNO|GG%`~D26}Uj5TXcsl%AU-4Dl5@U?|wS zVMMXp5alkZ)U@8)8lZmc|Ar{~aXM_S5T)NCb@G6I6`p{Ov^Cga5cnryQMXwU{}e2+ zFp(#8(&cl7@pE>{U7gsr)YgOoo|d#o%TF#WDnYxPW6=gl`*?eSeWD!=enuP)Vyv#V zv#zk$H`ZBgO-;6P#6K$;NPdo<_OXU^#s-AaGsRqdS7yK&uG18-jXpM42o3k&4SKCs zyDm9FwCuYF=@P|FBPt~c#XL{re67*kUYhS~)%pngTwyro1-jhVs^j+4cm1rIIQ~T` zaspqH!VsdWvZZzr^W3{j_B>gSBD(3%zSeM`10Z7kk(`D`9i$O{){!1P=s`5(5Pjr! zVK8@CRO%x*Tmd`uWxCbRIwa&3Im*E|?;}nni75Ces}bb;Dv01vqDwZQwAT;c0R_@=YhUCxhq3(-Ay2r+|>fo8UTC#SX5)}hej zh;H|{1`pPrKp@&8FXSbSWwlKU>KbcM@Y{%nmkMgP)RTygD;1Je??~f5{1l>hmI~2H z?@A8zjj(sGY$8pM)Th~oYn8Vj=tbC{_3t72aj7t-^?hjy27Vx&D*JVHz=!>n!Vwn< zXP8nLUeNgw8zQGp$ON6j$8v}1k=G~kJXU|orl+`(J3rNt*Jn%y+lk>UqNGenDEM3y zh@18o;#6aswmd^M=UkE*@_InJ)Hkm+9~-9@PtCz@5EWEaf`Z$XvKUXToLrWxTgyIk5b8?pAfzJqbg9~FG&+* z_|J&`FkgrsdsQ0!0U_c23v>{icyxL_3i{QxW1DevW0@EvNc$V2Q>{Xf=6AO1v-P#V z0veHAH?+07sS)vi!wOo4k>(%C3~U)XlVy^nq!><(>Km?blusvdDBxe`csUO&!cEy3 z15zVS9!xnC1~ZuBU{Sx-1LUJ<<-`wysOW@j#Jh2l8%j>x3NDyQV5P{y3AFwH@eg5A% z?+Ys6i%R9k$tNG)pA)|ceFkyyn+uC9(~Tu&`0$d1!GSc~CIks;E`Ft@)}D@rXsFR9 z42}ufOtZL4xYpHEU-dg4Ye9I-Lpu`aRe1)K)kJyAkoh5k9Y)2xHHsD0GceOq>k`7rQr1(b3oggkv z(X@1dpf<#C;s(JFmzy?%i|;!ux|~`h?W4L&+#jPXd7LQ^rmNqw6CCzBo z)5~CaaV~T)Zh<< zTkBeAeTAS*GyF$AK2cVh^k13D;&^xd9$2J;gI8w$6g`T{r^aC+VeZBf6jLA`25G{S zMh`a>Q%EDStE0K8EI$I$MeJpm2fG=FEEY?8n9S2rWC`7uT^+9Cr^yG$>Gb;?b=ZiR z&ZD2fbwHdo;DBgg2gEs4XHf?$=E8X^)jv=XGf(u!v&fP^2}Rw`tVD8m(1uCX5nL%t z1$RzXuW&=!6c$OrL8;JM`1bF=C?HLmIK-`ErBKnN-`evq9GctytKvA<6p>Db?9?WV zhj?OZd>T?sWFgAJPm>|(9AK9>iqjQoGDS55mntM=$#DrGYL!YFPg{i8~V^_nHk%eXl- zcA*ffnJXo|=dl(_lYaQ^)V5HFf#G}1->Mz2DdU`9W_=qvKVNEu+S-2_iYppYm5WVI zhZft!7Dq0S3WrqmO+K+Gkq`01tLV^0LQL!;=ZejiVO9c~rK$e^fv58p2%&M}O;H`J z-%HDoP!FZxmWN$HHOT#7K;BK_xOMq!PsO)tUP02wfM^^4JhPwXEpg#gD?ZIxQDzUWn}8iGfRq$uzZR+h9ngF zrd%c4l5fnl%r=|aSRF$$a(@fOBmZMkw)kU$AqDZrsd1WDL+3c{Dtaa>AinE}7EZ3O zYW*kLqu3_W>>7T4vAk9;k;4*8gX9`MJ5numjnOhTMxlz4cT&Duh>yDqG74In(^1fJ zF8&^Ar7UMFtvDcvzgyCITPvMYEu>Gd|K}zUxKf&!&T24@{5>3;;UG*`fuC@v2S>1Y zLf@|zVp}z<<#0`CW7{>WRE1P)#b97Zg>{h4p7%;mVZA)o&?omv+qeHlSB&b8C}$$y zP2$X!Rrx+3>6a9HZ-$_#skgHOz3?D7lgJJ<2E;!k_u3Yzg+Y`>D^s_AArz0*=||x> z6xhxhtn2(htF*xPIV+Knpif4FwsPVJG85=i67^`%BYlEILsBXl^k|hDGf45XWd=D+C6Nagthx+18shw`RQWVx5_Nn&kz#y?1dQpw5O<{ZKhB{%W*FM?t z7wC(1LX37lC=jm!MF+AZ2T<^f^lF_DH1j3M6|bAcT%+We?4EB|{~_kPAwpoI<`2lv zgDgxS_Ig+;ab4vPK@`AAYP5r+<@LhI^p~M1Y)qoJa0K;#r7wcB*+u3N7Eut!N2LXm ze-%{14Z!HvIC>oFPk$ZyM?4uL-#3|+rJ|}T-mCPch#*uV@33`#JdTEe`g|4xW}Bd{1`peaXSWAIJ_GknfrP4u*Zi(HjlI z5cMa}ztUZ))C*|nryL#KC=5>hY{0mfN^CXtV!s;^e^#C}pGzaD`hv?6e?35H=Q!Hh zD5R*qlyWRzarBi&VUpr&j`B^y1jTud<}?YJif=f&9-gXirE*ypIQnsuU{rj^(ZS8a zIK@Sd&SKB+IZENF`avqE|B<7gHw$AFKXKHzMTl2i;%It{5I5{HOtT#Ly~Ci_k4;F) z)QwF{)sIcfHtEvLNr|arJ3T_QDt4KtD=bElWzqqvcT%-d#l!8Tc#&qMgTg|>Cfell zkQo+v`BrX0|MQSJft`mcU8ST8Gkdg|U6@5yiJILe=M~cD!{8KVDVmBR7l}fTJoq6a zs#-FAB`m~)t6}d$Y5nph4>}RfYk`3Fa@vge;19l8Xbe{s~pp4U0r0#DW7(pbd&!_i$!gsAa1 zq_p~9uJ72qPX4LsCdk|gWR;kNZ$_VBF`YRrJKJ28 zlC*~Dg?)nerC0a5zuK7=GMnBkQ+d)g7PUs1RZ^7Oy(vhj<7oIjiUwLg$5Ye&!h_0u zuJajpC6jfKtsz}oL*Mg+-}mA@yU#oxs*8^q?YvHA_wX|jx*nrcBU21Yj8zJ7*>^ZU zF*YP%b==8NU@$NQ7z%^|!+>xg0*C~nfM_5F7!Hg8Vu3gy9vBIX0!9P6?zody$4tbpl-yR|1I3NS_Q*oxl(al^h!3zmqL~u31H3ZiZTt{#{!3_jA65K>^Gr=tc zFD7^i!I$f>#mTMld0GHNnsoYYARQ@Vx}D zC-^>sHxRs$;QI;QMDPOyZzlLbf*&Gy3&E7&hY4;ccq_q=5d0{?9RzP9_%VXF6Z|;A zI|zP);3o-wir`LycM|+G!Mg~4hTvxjevaVX1n(jEd4l&6ypP})2;NWdiv+(!a2LVd z1Ro&yAi+HZA0qfL!4867CioSCj}Uy6;8zKLjo{Y_euLmQ34V*3_yoak6MT~3 zcL+X3@Vf-}5`3EA_XvKU;13A?kl-@}e?;)d1b;&Crv!gS@L7UCC-@73&k_73!Cw*l zHNocz{)XUh3BEw^cLZM~_e-V70;J*p}hu|9o|4Z=Ab(q_LIY0rp0ZPCf@Blmk9`FKGfB<*{K7cRa2lxYn zfB+y6Py-qu2nYtWKnM^D3QSfZ4ztU@kBZxE;6yC27I+TW4eSA)2lfK{fER%Mz>C03Ko`&r8~_diJ-{L0 zFyH`Q23`S<07rpWf!Bc7fj59RfwzETz;WON@HTJ~cn3HIybJUKr-Ao?_kj<94}mkl zN5IFxC%~t`XTVwDbKnc$9PlOZ74S819{2|M7PtU>2V4Zc2Yvv41bzZ80hfWFfh)jO j;1}Rm;5XnJ@H_Aa@F(yWa2@y?_y@QF{LAgZH#zb@uXWTM delta 13421 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 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 51db2e02..7f9cc337 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -283,10 +283,10 @@ SYS.UnsetEnv .EQ $BE * .EQ $C4 * .EQ $C6 -* .EQ $C8 -* .EQ $CA -* .EQ $CC -* .EQ $CE +SYS.MD5 .EQ $C8 +SYS.MD5Init .EQ $CA +SYS.MD5Update .EQ $CC +SYS.MD5Finalize .EQ $CE SYS.GetPWUID .EQ $D0 SYS.GetPWName .EQ $D2 diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 97b5e531..a8d78328 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -188,6 +188,17 @@ S.DCB.TTY.OUTBUFFER.MAX .EQ 64 * S.DCB.TTY .EQ 64 *-------------------------------------- +S.MD5.ABCD0 .EQ 0 +S.MD5.A0 .EQ 0 +S.MD5.B0 .EQ 4 +S.MD5.C0 .EQ 8 +S.MD5.D0 .EQ 12 +S.MD5.BITCOUNT .EQ 16 +S.MD5.EXTRABIT .EQ 24 +S.MD5.FINALIZED .EQ 25 +* +S.MD5 .EQ 26 +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.DEF LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 8b9c9797..6fadb518 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -6,7 +6,7 @@ NEW * `char *expand(const char *str, char *expanded);` * ## ASM * **In:** -* `>PUSHW string` +* `>PUSHW str` * `>PUSHW expanded` * `>SYSCALL expand` * ## RETURN VALUE diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 62d1cc8c..8796f01d 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -119,10 +119,10 @@ K.SYSCALL .DA 0 $00 .DA 0 .DA 0 .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA K.MD5 + .DA K.MD5Init + .DA K.MD5Update + .DA K.MD5Finalize .DA K.GetPWUID $D0 .DA K.GetPWName @@ -369,13 +369,13 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #$80 .DA #RRAMWRAMBNK2 .DA #$80 - .DA #RRAMWRAMBNK2 + .DA #$C0 $C8 : MD5X .DA #$80 - .DA #RRAMWRAMBNK2 + .DA #$C0 .DA #$80 - .DA #RRAMWRAMBNK2 + .DA #$C0 .DA #$80 - .DA #RRAMWRAMBNK2 + .DA #$C0 .DA #$80 .DA #$C0 $D0 : PWDX diff --git a/SYS/KERNEL.S.MD5X.txt b/SYS/KERNEL.S.MD5X.txt new file mode 100644 index 00000000..e308c345 --- /dev/null +++ b/SYS/KERNEL.S.MD5X.txt @@ -0,0 +1,530 @@ +NEW + AUTO 3,1 +*-------------------------------------- + .DUMMY + .OR ZPLIB +ZS.START +ZPCtxPtr .BS 2 +ZPDataPtr .BS 2 +ZPHashPtr .BS 2 + +ZS.END .ED +*-------------------------------------- +* DWORD Macros : Do NOT disturb carry with cpx, cpy... +*-------------------------------------- + .MA ADC32 + ldx #3 + ldy #0 + clc +:1 lda ]1,y + adc ]2,y + sta ]3,y + iny + dex + bpl :1 + .EM +*-------------------------------------- + .MA AND32 + ldx #3 +:1 lda ]1,x + and ]2,x + sta ]3,x + dex + bpl :1 + .EM +*-------------------------------------- + .MA ORA32 + ldx #3 +:1 lda ]1,x + ora ]2,x + sta ]3,x + dex + bpl :1 + .EM +*-------------------------------------- + .MA EOR32 + ldx #3 +:1 lda ]1,x + eor ]2,x + sta ]3,x + dex + bpl :1 + .EM +*-------------------------------------- + .MA NOT32 + ldx #3 +:1 lda ]1,x + eor #$FF + sta ]2,x + dex + bpl :1 + .EM +*-------------------------------------- + .MA MOV32 + ldx #3 +:1 lda ]1,x + sta ]2,x + dex + bpl :1 + .EM +*-------------------------------------- + .MA ROL32x +:2 lda ]1+3 + rol + rol ]1 + rol ]1+1 + rol ]1+2 + rol ]1+3 + dex + bne :2 + .EM +*/-------------------------------------- +* ## MD5 +* Return MD5 Hash for input String +* # C +* `void md5 (const char* str, char* digest);` +* # ASM +* `>PUSHW str` +* `>PUSHW digest` +* `>SYSCALL md5` +* ## RETURN VALUE +* CC +*\-------------------------------------- +K.MD5 >PULLW ZPHashPtr + >PULLW ZPDataPtr + + >LDYA ZPDataPtr + >SYSCALL2 strlen + >STYA ZPDataLen +.1 jsr K.MD5Init + bcs .9 + pha save MD5 Context hMem + + jsr MD5Update.I + jsr MD5Finalize.I + pla + >SYSCALL2 FreeMem Free MD5 Context + clc +.9 rts +*/-------------------------------------- +* ## MD5Init +* Initialize a MD5 computation +* # C +* `hMD5 md5init ();` +* # ASM +* `>SYSCALL MD5Init` +* ## RETURN VALUE +* A = hMem To S.MD5 +*\-------------------------------------- +K.MD5Init >LDYAI S.MD5 + >SYSCALL2 getmem + bcs .9 + + >STYA ZPCtxPtr + ldy #0 + +.1 lda MD5.ABCDINIT,y + sta (ZPCtxPtr),y + iny + cpy #S.MD5.BITCOUNT + bne .1 + + lda #0 + +.2 sta (ZPCtxPtr),y + iny + cpy #S.MD5 Includes S.MD5.FINALIZED Flag + bne .2 + + txa + + clc +.9 rts +*/-------------------------------------- +* ## MD5Update +* Add Data to MD5 computation +* # C +* `void md5update (hMD5 md5, char* data, int len);` +* # ASM +* `>PUSHB md5` +* `>PUSHW data` +* `>PUSHW len` +* `>SYSCALL MD5Update` +* ## RETURN VALUE +*\-------------------------------------- +K.MD5Update >PULLW ZPDataLen get LEN + >PULLW ZPDataPtr get DATA + >PULLA + >SYSCALL2 GetMemPtr get MD5 Context + >STYA ZPCtxPtr + +MD5Update.I ldy #S.MD5.FINALIZED + lda (ZPCtxPtr),y + beq .1 + sec + rts +.1 lda ZPDataLen+1 More than 256 Bytes remaining to hash ? + bne .3 yes + lda ZPDataLen + bne .2 Len = O ? + clc All data processed + rts +.2 cmp #64 More than 64 Bytes remaining to hash ? + bcc .50 yes +.3 lda #64 +.50 sta ZPChunkLen Save Chunk Len + jsr MD5UpdateBitCount + ldy #0 +.51 lda (ZPDataPtr),y Load Buffer with data + sta MD5.BUFFER64,y + iny + cpy ZPChunkLen + bne .51 + cpy #64 Full 64 Bytes DATA ? + beq .58 +* Append "$80" & Padding & original size + + lda #$80 no, Append $80 + sta MD5.BUFFER64,y + lda #0 +.52 iny Pad with 0 to 64 + cpy #64 + beq .53 + sta MD5.BUFFER64,y + bra .52 +.53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended + lda #$80 + sta (ZPCtxPtr),y + lda ZPChunkLen + cmp #56 Enough room for BITCOUNT ? + bcs .58 no + jsr MD5AppendBitCount +.58 jsr MD5Transform + jsr MD5UpdateABCD0 +.8 lda ZPDataLen Substract Bytes processed from LEN + sec + sbc ZPChunkLen get back chunk Len + sta ZPDataLen + bcs .81 + dec ZPDataLen+1 +.81 lda ZPDataPtr Add Bytes processed to DATA + clc + adc ZPChunkLen + sta ZPDataPtr + bcc .1 + inc ZPDataPtr+1 + bra .1 +*/-------------------------------------- +* ## MD5Finalize +* # C +* `void md5finalize (hMD5 md5, char* digest);` +* # ASM +* `>PUSHB md5` +* `>PUSHW digest` +* `>SYSCALL MD5Finalize` +* ## RETURN VALUE +*\-------------------------------------- +K.MD5Finalize pha + >PULLW ZPHashPtr + pla + pha + >SYSCALL2 GetMemPtr + >STYA ZPCtxPtr get MD5 Context + jsr MD5Finalize.I + + pla + >SYSCALL2 FreeMem + rts + +MD5Finalize.I ldy #S.MD5.FINALIZED + + lda (ZPCtxPtr),y + bne .11 + jsr MD5ExtraChunk +.11 ldy #S.MD5.ABCD0 + +.1 lda (ZPCtxPtr),y + lsr + lsr + lsr + lsr + tax + lda MD5.DIGITS,x + sta (ZPHashPtr) + inc ZPHashPtr + bne .2 + inc ZPHashPtr+1 +.2 lda (ZPCtxPtr),y + and #$0F + tax + lda MD5.DIGITS,x + sta (ZPHashPtr) + inc ZPHashPtr + bne .3 + inc ZPHashPtr+1 +.3 iny + cpy #S.MD5.ABCD0+16 + bne .1 + lda #0 + sta (ZPHashPtr) + clc +.9 rts +*-------------------------------------- +* PRIVATE +*-------------------------------------- +* MD5AppendBitCount +* In : +* ZPCtxPtr = MD5 Context +*-------------------------------------- +MD5AppendBitCount + ldx #56 + ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT + +.1 lda (ZPCtxPtr),y + sta MD5.BUFFER64,x + inx + iny + cpy #S.MD5.BITCOUNT+8 + bne .1 + + ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized + lda #$80 + sta (ZPCtxPtr),y + rts +*-------------------------------------- +* MD5UpdateBitCount +* In : +* CL = Size (in bytes) to add to MD5 context +* ZPCtxPtr = MD5 Context +*-------------------------------------- +MD5UpdateBitCount + stz ZPChunkLen+1 + lda ZPChunkLen + asl + rol ZPChunkLen+1 + asl times 8 to get bit count + rol ZPChunkLen+1 + asl + rol ZPChunkLen+1 + clc + ldy #S.MD5.BITCOUNT + adc (ZPCtxPtr),y + sta (ZPCtxPtr),y + iny + lda ZPChunkLen+1 + adc (ZPCtxPtr),y + sta (ZPCtxPtr),y + bcc .8 + +.1 iny + lda (ZPCtxPtr),y + inc + sta (ZPCtxPtr),y + bne .8 + + cpy #7 + bne .1 + +.8 rts +*-------------------------------------- +* MD5ExtraChunk +* In : +* ZPCtxPtr = MD5 Context +*-------------------------------------- +MD5ExtraChunk ldy #S.MD5.FINALIZED + lda #$80 + sta (ZPCtxPtr),y Mark MD5 Context as "finalized" + ldx #0 + ldy #S.MD5.EXTRABIT Extra Bit already appended ? + lda (ZPCtxPtr),y + bne .1 + + lda #$80 + sta MD5.BUFFER64 Add extra bit to buffer + sta (ZPCtxPtr),y Mark Extrabit added + inx + +.1 stz MD5.BUFFER64,x pad with "0"... + inx + cpx #56 + bne .1 ...until room for bitcount + + jsr MD5AppendBitCount + jsr MD5Transform +*-------------------------------------- +* MD5UpdateABCD0 +* In: +* ZPCtxPtr = MD5 Context +*-------------------------------------- +MD5UpdateABCD0 ldy #0 + +.1 clc ADC32 A+A0->A0, B, C, D.... + +.2 lda MD5.ABCD,y + adc (ZPCtxPtr),y + sta (ZPCtxPtr),y + iny + tya + and #3 + bne .2 + + cpy #16 + bne .1 + + rts +*-------------------------------------- +* MD5Transform +* In: +* ZPCtxPtr = MD5 Context +* 512 Bits Padded chunk in MD5.BUFFER64 +* Out: +* Updated MD5.ABCD +*-------------------------------------- +MD5Transform ldy #15 init ABCD Chunk with Context ABCD0 + +.1 lda (ZPCtxPtr),y + sta MD5.ABCD,y + dey + bpl .1 + + stz MD5.i Start Proceed 0 to 63 bytes + lda #0 lda MD5.i + +.2 lsr + lsr + lsr + and #6 + tax + + jsr MD5.XXXX + + inc MD5.i + lda MD5.i + cmp #64 + bne .2 + rts +*-------------------------------------- +MD5.XXXX jmp (.1,x) + +.1 .DA MD5.0015 + .DA MD5.1631 + .DA MD5.3247 + .DA MD5.4863 +*-------------------------------------- +MD5.0015 >AND32 MD5.B,MD5.C,MD5.F1 + >NOT32 MD5.B,MD5.F2 + >AND32 MD5.F2,MD5.D,MD5.F2 + >ORA32 MD5.F1,MD5.F2,MD5.F + jmp MD5.XXXX.END +*-------------------------------------- +MD5.1631 >AND32 MD5.D,MD5.B,MD5.F1 + >NOT32 MD5.D,MD5.F2 + >AND32 MD5.F2,MD5.C,MD5.F2 + >ORA32 MD5.F1,MD5.F2,MD5.F + bra MD5.XXXX.END +*-------------------------------------- +MD5.3247 >EOR32 MD5.B,MD5.C,MD5.F + >EOR32 MD5.F,MD5.D,MD5.F + bra MD5.XXXX.END +*-------------------------------------- +MD5.4863 >NOT32 MD5.D,MD5.F1 + >ORA32 MD5.F1,MD5.B,MD5.F2 + >EOR32 MD5.F2,MD5.C,MD5.F +*-------------------------------------- +MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp + >MOV32 MD5.C,MD5.D + >MOV32 MD5.B,MD5.C + >ADC32 MD5.A,MD5.F,MD5.F + lda MD5.i + asl + asl + tay + ldx #0 + clc + +.1 lda MD5.K,y ADC32 MD5.K[i],MD5.F,MD5.F + adc MD5.F,x + sta MD5.F,x + iny + inx + txa + eor #4 DO NOT DISTURB carry with cpx !!! + bne .1 + + ldy MD5.i + lda MD5.g,y + asl + asl + tay + ldx #0 + clc +.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F + adc MD5.F,x + sta MD5.F,x + iny + inx + txa + eor #4 DO NOT DISTURB carry with cpx !!! + bne .2 + + ldy MD5.i + ldx MD5.s,y get s[i] in x + + >ROL32x MD5.F + >ADC32 MD5.B,MD5.F,MD5.B + >MOV32 MD5.DTemp,MD5.A + rts +*-------------------------------------- +CS.END +MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210 +*-------------------------------------- +MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22 + .DA #5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20 + .DA #4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23 + .DA #6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21 +*-------------------------------------- +MD5.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15 + .DA #1,#6,#11,#0,#5,#10,#15,#4,#9,#14,#3,#8,#13,#2,#7,#12 + .DA #5,#8,#11,#14,#1,#4,#7,#10,#13,#0,#3,#6,#9,#12,#15,#2 + .DA #0,#7,#14,#5,#12,#3,#10,#1,#8,#15,#6,#13,#4,#11,#2,#9 +*-------------------------------------- +MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1 + .HS AF0F7CF5.2AC68747.134630A8.019546FD + .HS D8988069.AFF7448B.B15BFFFF.BED75C89 + .HS 2211906B.937198FD.8E4379A6.2108B449 + .HS 62251EF6.40B340C0.515A5E26.AAC7B6E9 + .HS 5D102FD6.53144402.81E6A1D8.C8FBD3E7 + .HS E6CDE121.D60737C3.870DD5F4.ED145A45 + .HS 05E9E3A9.F8A3EFFC.D9026F67.8A4C2A8D + .HS 4239FAFF.81F67187.22619D6D.0C38E5FD + .HS 44EABEA4.A9CFDE4B.604BBBF6.70BCBFBE + .HS C67E9B28.FA27A1EA.8530EFD4.051D8804 + .HS 39D0D4D9.E599DBE6.F87CA21F.6556ACC4 + .HS 442229F4.97FF2A43.A72394AB.39A093FC + .HS C3595B65.92CC0C8F.7DF4EFFF.D15D8485 + .HS 4F7EA86F.E0E62CFE.144301A3.A111084E + .HS 827E53F7.35F23ABD.BBD2D72A.91D386EB +*-------------------------------------- +MD5.DIGITS .AS "0123456789ABCDEF" +*-------------------------------------- +ZPChunkLen .BS 2 +ZPDataLen .BS 2 + +MD5.ABCD +MD5.A .BS 4 Chunk Level,A,B,C,D +MD5.B .BS 4 +MD5.C .BS 4 +MD5.D .BS 4 + +MD5.F1 .BS 4 +MD5.F2 .BS 4 + +MD5.DTemp .BS 4 +MD5.F .BS 4 +MD5.i .BS 1 +MD5.BUFFER64 .BS 64 +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.MD5X +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 6b4a7d0d..af102726 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -304,7 +304,6 @@ K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3 * ## ASM * `>PUSHW ptr` * `>PUSHW format` -* `>PUSHW timeptr` * + %a : Abbreviated weekday name : Thu * + %A : Full weekday name : Thursday * + %b : Abbreviated month name : Aug @@ -319,6 +318,7 @@ K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3 * + %w : Weekday as a decimal number with Sunday as 0 (0-6) * + %y : Year, last two digits (00-99) * + %Y : Year four digits 2001 +* `>PUSHW timeptr` * `>SYSCALL strftime` * ## RETURN VALUE * none. always succeed. diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index e3a7e29f..ca58b1bb 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -57,6 +57,7 @@ A2osX.AUXH .DA #0 A2osX.AUXH.B .PH Mem.XHiMem .INB USR/SRC/SYS/KERNEL.S.TERM + .INB USR/SRC/SYS/KERNEL.S.MD5X .EP A2osX.AUXH.S .EQ *-A2osX.AUXH.B