From 284cf435d6f06923a8042cd4a390bd557adf3db0 Mon Sep 17 00:00:00 2001 From: yann MAGNIN Date: Mon, 17 Jun 2019 23:42:07 +0200 Subject: [PATCH] Add FPU instructions. Fix command mode error. Update/FIx help pages. Fix "make re" error. --- Makefile | 2 +- include/opcode.h | 348 ++++++++++++++++++++++++++++++++++-- src/commands/jump_address.c | 15 +- src/commands/jump_ram.c | 2 +- src/keys.c | 7 +- vhex.g1a | Bin 28296 -> 29660 bytes 6 files changed, 349 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 56c739c..3382f8d 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ fclean: clean @ printf "$(red)Delete binary files$(nocolor)\n" rm -f $(EXEC) -re: fclean all install +re: fclean all diff --git a/include/opcode.h b/include/opcode.h index 498fe23..e806727 100644 --- a/include/opcode.h +++ b/include/opcode.h @@ -386,9 +386,236 @@ static const struct opcode opcode[] = { 0b0000000000000000 } }, - //TODO - //TODO ADD FPU INSTRUCTIONS - //TODO + { + .name = "fabs fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000001011101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "fadd fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000000, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fcmp/eq fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000100, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fcmp/gt fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000101, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fdiv fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000011, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fldi0 fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000010001101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "fldi1 fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000010011101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "flds fr%d,FPUL", + .mask = 0b1111000011111111, + .code = 0b1111000000011101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "float FPUL,fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000000101101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "fmac FR0,fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000001110, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000001100, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov.s @(r0,r%d),fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000110, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov.s @r%d+,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000001001, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov.s @r%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000001000, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov.s fr%d,@(r0,r%d)", + .mask = 0b1111000000001111, + .code = 0b1111000000000111, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov.s fr%d,@-r%d", + .mask = 0b1111000000001111, + .code = 0b1111000000001011, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmov.s fr%d,@r%d", + .mask = 0b1111000000001111, + .code = 0b1111000000001010, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fmul fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000010, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "fneg fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000001001101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "fsqrt fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000001101101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "fsts FPUL,fr%d", + .mask = 0b1111000011111111, + .code = 0b1111000000001101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "fsub fr%d,fr%d", + .mask = 0b1111000000001111, + .code = 0b1111000000000001, + .arg_mask = { + 0b0000000011110000, + 0b0000111100000000, + 0b0000000000000000 + } + }, + { + .name = "ftrc fr%d,FPUL", + .mask = 0b1111000011111111, + .code = 0b1111000000111101, + .arg_mask = { + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, { .name = "jmp @r%d", .mask = 0b1111000011111111, @@ -740,9 +967,26 @@ static const struct opcode opcode[] = { 0b0000000000000000 } }, - //TODO - //TODO ADD "LDS rm,FPSCR" AND "LDS rm,FPUL" - //TODO + { + .name = "lds r%d,FPSCR", + .mask = 0b1111000011111111, + .code = 0b0100000001101010, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "lds r%d,FPUL", + .mask = 0b1111000011111111, + .code = 0b0100000001011010, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, { .name = "lds r%d,MACH", .mask = 0b1111000011111111, @@ -833,9 +1077,26 @@ static const struct opcode opcode[] = { 0b0000000000000000 } }, - //TODO - //TODO ADD "lds.l @rm+,FPSCR" and "lds.l @rm+,FPUL" - //TODO + { + .name = "lds.l @r%d+,FPSCR", + .mask = 0b1111000011111111, + .code = 0b0100000001100110, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "lds.l @r%d+,FPUL", + .mask = 0b1111000011111111, + .code = 0b0100000001010110, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, { .name = "lds.l @r%d+,MACH", .mask = 0b1111000011111111, @@ -1476,9 +1737,26 @@ static const struct opcode opcode[] = { 0b0000000000000000 } }, - //TODO - //TODO ADD "setrc rm" and "setrc #imm" - //TODO + { + .name = "setrc r%d", + .mask = 0b1111000011111111, + .code = 0b0100000000010100, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "setrc #h'%x", + .mask = 0b1111111100000000, + .code = 0b1000001000000000, + .arg_mask ={ + 0b0000000011111111, + 0b0000000000000000, + 0b0000000000000000 + } + }, { .name = "sets", .mask = 0b1111111111111111, @@ -1949,9 +2227,26 @@ static const struct opcode opcode[] = { 0b0000000000000000 } }, - //TODO - //TODO add "sts fpscr,rn" and "sts fpul,rn" - //TODO + { + .name = "sts FPSCR,r%d", + .mask = 0b1111000011111111, + .code = 0b0000000001101010, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "sts FPUL,r%d", + .mask = 0b1111000011111111, + .code = 0b0000000001011010, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, { .name = "sts MACH,r%d", .mask = 0b1111000011111111, @@ -2042,9 +2337,26 @@ static const struct opcode opcode[] = { 0b0000000000000000 } }, - //TODO - //TODO add "sts.l fpscr,@-rn" and "sts.l fpul,@-rn" - //TODO + { + .name = "sts.l FPSCR,@-r%d", + .mask = 0b1111000011111111, + .code = 0b0100000001100010, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, + { + .name = "sts.l FPUL,@-r%d", + .mask = 0b1111000011111111, + .code = 0b0100000001010010, + .arg_mask ={ + 0b0000111100000000, + 0b0000000000000000, + 0b0000000000000000 + } + }, { .name = "sts.l MACH,@-r%d", .mask = 0b1111000011111111, diff --git a/src/commands/jump_address.c b/src/commands/jump_address.c index 84f0404..fdaf618 100644 --- a/src/commands/jump_address.c +++ b/src/commands/jump_address.c @@ -29,13 +29,20 @@ CMDBLOCK("jmp", &address_jump, "Area P2 - 500Mo - MMU disable\n" "0xa0000000 : ROM (no cache)\n" "0xa8000000 : RAM (no cache)\n" -"Area P3 - 500Mo - MMU ebable\n" +"Area P3 - 500Mo - MMU enable\n" "?????? CRASH ??????\n" -"Area P4 - 500Mo - MMU ~enable\n" +"Area P4 - 500Mo - MMU disable\n" "0xe0000000 : Store queue area\n" -"0xe4000000 : MMU disable\n" "0xe5000000 : On chip RAM\n" -"0xe6000000 : MMU disable\n" +"0xf0000000 : Instr. cache addr\n" +"0xf1000000 : Instr. cache data\n" +"0xf2000000 : Instr. TLB addr\n" +"0xf3000000 : Instr. TLB data\n" +"0xf4000000 : Operand cache addr\n" +"0xf5000000 : Operand cache data\n" +"0xf6000000 : TLB/PMB cache addr\n" +"0xf7000000 : TLB/PMB cache data\n" +"0xfc000000 : Control register\n" ); static INLINE int check_address(char *str) diff --git a/src/commands/jump_ram.c b/src/commands/jump_ram.c index 2bfa095..5099064 100644 --- a/src/commands/jump_ram.c +++ b/src/commands/jump_ram.c @@ -41,7 +41,7 @@ static void ram_jump(int argc, char **argv, struct session_s *session, char *inf return; } if (!strcmp(argv[1], "p0")) - session->anchor = 0x08000000; + session->anchor = 0x08100000; if (!strcmp(argv[1], "p1")) session->anchor = 0x88000000; if (!strcmp(argv[1], "p2")) diff --git a/src/keys.c b/src/keys.c index 93ed490..36ef02f 100644 --- a/src/keys.c +++ b/src/keys.c @@ -34,8 +34,11 @@ static int check_special(unsigned int key, struct vhex_s *vhex, struct session_s { if (!(key == KEY_OPTN || key == KEY_SHIFT || key == KEY_ALPHA)) return (-1); - if (vhex->insert.mode == LETTER) + if (vhex->insert.mode == LETTER){ vhex->insert.mode = NUMBER; + if (key == KEY_ALPHA) + return (0); + } if (key == KEY_OPTN){ if (session->mode != COMMAND){ memset(vhex->info, '\0', CMD_LENGHT_MAX); @@ -95,6 +98,8 @@ static int check_alphanum(unsigned int key, struct vhex_s *vhex, struct session_ buf = (vhex->insert.mode == NUMBER) ? '0' + i : 'a' + i; strcat(vhex->insert.cmd, &buf); } + if (vhex->insert.mode == LETTER) + vhex->insert.mode = NUMBER; vhex->history.offset = 0; return (0); } diff --git a/vhex.g1a b/vhex.g1a index 71a73da67581e13e391b33e3a7dc523a539f4f54..8d620d4f2d54f82c8c7d797ff1536f942c14d5d4 100644 GIT binary patch delta 6197 zcmZ{odr(x@9mmgISYUC1RnhQRbP$(__`oDSpd_uPAz z{pqC3++jbz_wRS^JqPZ|e@K@Y8(8eu&5W@5y&Uy@w%Tt>OKqt5nJe($v-$&R(p?Zx*T z<9jQqTQVtlkyo;JHBr)#tSkTZ)AF{+$E3YZAm=0{9dU7W+K@RTq4;H8?HiJsD1}3-#C$DlfPJT z(Cia-iQvkF$=rxi8xuvVUz655887@4*p17@_#Q;bgL;qV3GYi_o>;gmTPhx6ym$ht zNObkSt5W#Q2s5$=r$_XA{Yq2PMl4@<5B_ za`3mMQQ4KTI`IV$JEURR+g_W|e=sVaX}?=ewim?*x&CqNa6B*^jYVo4eZ76*0Y`6t zetFu=nltw zV-5j&#=%3qeU6q6u2HIpLx*n<4z7thoK+ECjj}fyW^B-qL$>)VWGPX~PIOr9tcn{^ zME80CU9rWO2$ks~*c~0Zt=r*&14e^vFnT1S&j#_Lu_);cd^B{MUo6t+uxRPT1QG#H zjj6E3<=)+aVut#o4pE`d$YWh6N{FIn$l-);voXcQf4cT&79y5jUvxmktq5;eKbpAD z`%6=)<|#&nuuCQBD1Yw%4oXDIYNydLED&E?5<`>-1xBT~JEpJ^#?%5t!H2s~C4cs2NKGzMSc|U3Is+)8ovo9BkjaQlrtpY$KW3ko(Go^R=``*+=XTp(ok0+ zSZhGb&v;iQ1Z0i6n!w~P?s9>1(j)9b#|l}3u4CY3L@zqbB`g|DtvMR*x`+bzqCh=A z1TzpEA{8gWd4w+`fJ6c=K>szOU&In_PV+uIHO^&(3&Cp$D1 zd@tc<@I!=M-~eGCc$n}I_!+{-z&|E@8vOGDqkoKK-&qKLLkuo}KO{U2{wLui_%p(n z!M6x6fbSx_2+mG(w-vl0P6T!c8VFZ|?@-bc6%{1{;$_yFM{@DB)&fqzK&1#tXl zL~ss*HwaII-zPi={yX98;7{)0FA3jN*)wG0df2M6)0A-!#GQ|%9UkTg*hAO}&Lu3? zyo7KNyos>rn8q6gKTh-~6m{%r!sAL@b-qLdXW?+3u$ahOgz?xo2MJ?eaCQ;C49+5~ zfLEuvClh=(;lelsBw$Y^_)%g|4{jmc41STY2mC7Ge(svn-Hu|8w4`JnS^a%GhsUl z+-#Hw|9}I$jBq9F3yD1@c$^dzXo7vWu-DHY9uR*N7LfpLcr3|d6cBqmW@>zRAPg=i z9D_Z%M*=6H$5XjvKMu|zEH=6#uyOwJfY|A(h=JJYB*HUb3*jWVnD8YqxhDeG(NJkB zKPH5cvlYZ16K5uJ{_n@g*}AmBevF*e5w?SO5v~Gv5XMf)B7|{vun^%k@NvSJD0`lq z|NDm^c$pX+1HVrAH259D7$N&B;S1oagr~t@5Kdx3D+yl)XOQ!M{{jRR#9$G;EzLnI zcsF4?*iE<^93|WY?jzg=CQm_7oSt!+7{nm>DdCgg1mUybcL`5{|3>&d@HN8Xp7=Lm zG|0&D97Kb0){{2qMTabxFgj!iZV%o;-j8>RrStd=--qyC(~fu#E#R$z SgYhy&w|B$d4O@2*SNMN{TJPup delta 4861 zcmZvge@xW(8ONXR!NKwS5Wz#h9{8iE2pi04$t3~T*E8bwCAW>zvKeDv z-X{ySY%F_T-joY3wiy{SByGmF_s-!-@0zj&aZg$Bv}itpw`e8_468ARq#dn0y5VT8 zsG0^*S#>i>(UFyhJqwEBW2>s2=0B3V%ggtQ+u|`+eXt_yl2J0C)uL)4T7^Nih*&#{ zXADt$f)BDEHS&9a<1sT`pxTgDncq)4?|4(ZM!`@!Z9O>^CCwl|2qI%krMHS7^K7NM6upcOX?qu)g4uvD_(Y z;ZQ9F8$#(Mw}tRb;F;8;g5jbZBQ0*SF2#IM{6%`xTxyD*yljwP=d%gc4DvF+iFMvbTG5asQ}1HHHAvOC+B-E~XUcV=Ub5T>}S%E(s` zMPieD1l83jQo&3BttN6t zoNeEn9Ng@G+h#iVybyeAPoEL+c1NU7#L7Vr!AE)fA~`BkA`kgRa5nKta1QaPC4a#9 z*l>)$7|C&`k^ZVBe`5WVCBq30DDSi-uO$S^I~$QP$w@f8AF*U<>cD(}W{Jo+>6AlTS0a0?s84p``Rmny0`VAdG|yDdAZJNTz@fz*z}yae(bH zMto5%E(CNY0=Bp#Iof_o7BnpjsPCBdz_A_c^{A}fd$ z_*r5P_yyud@HXOZaNx%z=!4)*;sNllh)1x`>tf~76>CK!5!#lmXuTfhP(;EgdEA3) zMc?SAM%9YW8@NvIr1icfgQ8tVgQ&Jl1fYH1ruzalmNwlNs1vq%ED4dnwl+%!*k2zU z^Z3C?K-?@ijn2jn&sp+&c6co!Q#7Ntn-OV@28hm4wcSI))VSKw6?dWX64)!5I=I6oeaL|(9vA@xXj8MYuSKyC2WqV)(8O3|C=!|ZG z4Wtc-@~kEAlS3a)+V4|IeJ+^NcwYq)V%`KMf4&`-d_?{NKCD7nnOJ1LgK$WPix20& zn--PtB$!I<8%4qyiG+O@!Rf@;uxQg_v(Xdsg`iLP4=CTHC4Z!he5in%9p1I%&#a$A z!Y?Nh?r>n2EF)eBUQX-=ClgnI?emQDzeAt@s}mV^YyxKx>+b_?#PwhoG1iEOc1efc z*C<*1qdE?PONskoKfeah|5e8j46y4S4$z&?K|BU_5nlwC6JG@z#Mi-T#8cox;%RXF zmFx3IbdBkBbeaY;M zfR`rpy9Kv{N6Ym3?#Qor35T67GiO0Yn5?=xT zg&3!!=MJ6!yY-^@4;f&FLdUTmGZZ?G{g|Q9aqKS!({b!C2h(xvuL09>?8k)VY)*Xs zScLu^5L`$k;BN!daqQO>u#sL@U;(kNKpF8UcrWoq@L}R>;Fsw9_fJCbIvMDSyg_^q ze3^I-U!xs~PS>TsR#WHeLTgsk$hykW`PjY=9H6UGS3Lq0B?5G{Sn?rtzOHUdCYbxs zDcRwRmQ1q#v?U)ipMyOoIBrSy4K|oC-AA7K?gZ|l1NbioZrrtDQMtIi*WSgy2yoBN z!;5+hH~GgmiCTn<|KnS5v&V(IFf-ac)K<5s#n5fV&3fCksG@QF#@Ghj=8NI4;Tmp; TnW9QUF?%m;z3}1Pfv4raA|ZxV