
    MgT                         S SK r S SKJr  \ R                  R                  \ R                  R	                  \5      5      r\" S5       " S S5      5       rg)    N)pluginmipsc                   f    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)MipsConverter   a  
Jarvis will convert any Assembly(mips) statement for you
from assembly to machine code or from machine code(hex)
to Assembly.

Just write your command as follows:
For Hex to Assembly:
    mips XXXXXXXX
    The above command calls mips with a 8 digit Hex code
    which makes a 32 bit instruction where the X are the
    Hex digits.

For Assembly to Hex:
    mips Addi $t2, $t1, 0x12
    The above command calls mips with any mips basic instruction,
    in this case ADDI. There should be a space between the
    instruction keyword and the first register and then the
    rest can be separated with commas.

A good practice would be to give a space between any separate part of
the instruction such as between keyword and register, or keyword
and immediate, or register and immediate.
c                     US:w  aH  [        U5      S:X  a'  UR                  S5      S:X  a  U R                  X!5        g U R                  X!5        g UR	                  S5        g )N     zKplease enter a valid Assembly statement or a Machine code statement in Hex.)lenfindhexToAssemblyassemblyToHexsay)selfjarvisss      ?/Users/admin/workspace/ai/Jarvis/jarviscli/plugins/mips_conv.py__call__MipsConverter.__call__!   sO    GA!sr 1""1-""1-JJ]_    c                    / U l         / U l        / U l        / U l        / U l        / U l        / U l        / U l        / U l        / U l	        / U l
        / U l        [        [        R                  R                  [         S5      S5      nU GH  nSR                  UR#                  5       5      nU R                   R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R
                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  U5        GM     UR)                  5         [        [        R                  R                  [         S5      S5      nU H  nSR                  UR#                  5       5      nU R                  R%                  USUR'                  S5       5        X"R'                  S5      S-   S  nU R                  R%                  U5        M     UR)                  5         g )Nz../data/mips_coms.txtrr	   r   |   z../data/mips_regs.txt)_MipsConverter__com_MipsConverter__form_MipsConverter__inType_MipsConverter__op_MipsConverter__rs_MipsConverter__rt_MipsConverter__rd_MipsConverter__shamt_MipsConverter__func_MipsConverter__imm_MipsConverter__regName_MipsConverter__regCodeopenospathjoin	FILE_PATHsplitappendr   close)r   commandslineregss       r   __init__MipsConverter.__init__+   sB   
				
 Y0GH#ND774::<(DJJd1TYYs^45		#*+,DKKtAdiin56		#*+,DMM  a		#!78		#*+,DIIT!DIIcN34		#*+,DIIT!DIIcN34		#*+,DIIT!DIIcN34		#*+,DIIT!DIIcN34		#*+,DLLQtyy~ 67		#*+,DKKtAdiin56		#*+,DJJd#= @ 	BGGLL,CDcJD774::<(DNN!!$q3"89		#*+,DNN!!$'  	

r   c                    SnU H  nUR                  5       nUS:X  a  US-   nM   US:X  a  US-   nM-  US:X  a  US-   nM:  US:X  a  US	-   nMG  US
:X  a  US-   nMT  US:X  a  US-   nMa  US:X  a  US-   nMn  US:X  a  US-   nM{  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US :X  d  M  US!-   nM     U$ )"Nr	   F1111E1110D1101C1100B1011A101091001810007011160110501014010030011200101000100000)upper)r   myHexbinOfHexelements       r   
__hexToBinMipsConverter.__hexToBinm   s5   GmmoG3#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,S.#f,C F r   c                    Sn[        [        [        U5      S-  5      5       H  nXS-  SUS-  -    nUS:X  a  US-   nM  US:X  a  US-   nM*  US:X  a  US-   nM7  US	:X  a  US
-   nMD  US:X  a  US-   nMQ  US:X  a  US-   nM^  US:X  a  US-   nMk  US:X  a  US-   nMx  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US-   nM  US:X  a  US -   nM  US!:X  d  M  US"-   nM     U$ )#Nr	      r8   r7   r:   r9   r<   r;   r>   r=   r@   r?   rB   rA   rD   rC   rF   rE   rH   rG   rJ   rI   rL   rK   rN   rM   rP   rO   rR   rQ   rT   rS   rV   rU   )rangeintr   )r   myBinhexOfBininewBins        r   
__binToHexMipsConverter.__binToHex   sR   s3u:>*+Aq5QU+F& #c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>F"#c>E ,F r   c                     SnSnUSU-  :  a  US-   nUSU-  :  a  M  USU-  :  US:g  -  (       a  US-
  nUS:  a)  USU-  :  a  USU-  -
  nUS-   nOUS-   nUS-
  nUS:  a  M)  U$ )Nr   r	      r   rS   rU    )r   myDecnbinOfDecs       r   
__decToBinMipsConverter.__decToBin   s    adlAA adl AqDLUaZ(AA1fA1#c>#c>AA 1f r   c                     [        [        U5      S-  5      S-  [        U5      :w  a.  SU-   n[        [        U5      S-  5      S-  [        U5      :w  a  M.  U$ )Nr^   rU   )r`   r   )r   ra   s     r   
__nibbleEqMipsConverter.__nibbleEq   sN    3u:>"Q&#e*4%KE 3u:>"Q&#e*4r   c                     SnSnSnU[        U5      :  a!  X5   U:X  a  SnOUS-   nU[        U5      :  a  M!  USL a  UR                  S5        U$ X%   nU$ Nr   Fr	   Tr   z&Instruction is syntactically incorrectr   r   )r   regRregNameregCoder   regCntrflagregs           r   __findRegFromBinMipsConverter.__findRegFromBin   ss    W% D(kG	 W% EMJJ?@ 
 "C
r   c                     SnSnSnU[        U5      :  a!  X%   U:X  a  SnOUS-   nU[        U5      :  a  M!  USL a  UR                  S5        U$ X5   nU$ rs   rt   )r   ru   rv   rw   r   rx   ry   regBins           r   __getRegBinMipsConverter.__getRegBin   ss    W% D(kG	 W% EMJJ?@  %Fr   c                     XR                  S5      S-   S  nUnUR                  S5      S:w  a  USUR                  S5      S-    nUR                  5       nU$ Nr   r   r   r   )r   stripr   assemblytempru   s       r   __getRegFirstMipsConverter.__getRegFirst   sY    c*Q./0IIcNb 499S>A-.Dzz|r   c                     XR                  S5      S-   S  nX"R                  S5      S-   S  nUnUR                  S5      S:w  a  USUR                  S5      S-    nUR                  5       nU$ r   )r   rfindr   r   s       r   __getRegSecondMipsConverter.__getRegSecond  sq    c*Q./0IIcNQ&'(JJsOr!4::c?Q./Dzz|r   c                 Z    UR                  S5      S:w  a  XR                  S5      S-   S  $ g)Nr   r   r   r	   )r   )r   r   s     r   __getRegLastMipsConverter.__getRegLast  s0    NN32%NN3/!3455r   c           	      |   UR                  SS5      nSR                  UR                  5       5      nSnSnSnU[        U R                  5      :  a  UR                  5       nUR                  S5      S:w  a%  USUR                  S5      S-    R                  5       nUR                  5       nU R                  U   U:X  a  SnO US-   nU[        U R                  5      :  a  M  USL a  UR                  S	5        g UR                  S
U R                  U   -   S-   U R                  U   -   5        X0R                  U   -   nU R                  U   S:X  a  U R                  U   S:X  a  SnU R                  U   S:X  d&  U R                  U   S:X  d  U R                  U   S:X  a  U R                  U5      nO6U R                  U   S:w  a  U R                  U5      nOU R!                  U5      nUU R#                  XpR$                  U R&                  U5      -   nGOUU R                  U   S:X  Ga  U R                  U   S:X  Ga	  SnU R                  U   S:X  d&  U R                  U   S:X  d  U R                  U   S:X  a  U R!                  U5      nOU R                  U   S:X  d  U R                  U   S:X  a  U R!                  U5      nOYU R                  U   R                  S5      S:w  a&  XR                  S5      S-   UR                  S5       nOU R                  U5      nUU R#                  XpR$                  U R&                  U5      -   nO$U R                  U   S:w  a  X0R                  U   -   nU R                  U   S:X  a  U R(                  U   S:X  a  SnU R                  U   S:X  d&  U R                  U   S:X  d  U R                  U   S:X  a  U R!                  U5      nO\U R                  U   S:X  d&  U R                  U   S:X  d  U R                  U   S:X  a  U R!                  U5      nOU R                  U5      nUU R#                  XpR$                  U R&                  U5      -   nOU R                  U   S:X  a  U R(                  U   S:X  av  SnU R                  U   S:X  d  U R                  U   S:X  a  U R!                  U5      nOU R                  U5      nUU R#                  XpR$                  U R&                  U5      -   nO$U R(                  U   S:w  a  X0R(                  U   -   nU R                  U   S:X  aN  U R                  U   S:X  a;  UU R#                  U R                  U5      U R$                  U R&                  U5      -   nO$U R                  U   S:w  a  X0R                  U   -   nU R                  U   S:X  Ga/  U R*                  U   S:X  Ga  U R                  U5      nUR                  S5      S:X  a  US:w  a  UR                  S5      S:X  ak  [        U R-                  U5      5      S :  a  UR                  S!5        S"S [        U R-                  U5      5      -
  -  U R-                  [/        U5      5      -   nOj[        U R1                  US#S  5      5      S :  a  UR                  S!5        S"S [        U R1                  US#S  5      5      -
  -  U R1                  US#S  5      -   nX8-   nO$U R                  U   S:X  a  X0R*                  U   -   nU R                  U   S:X  a  X0R2                  U   -   nU R4                  U   S:X  Gae  Sn	UR                  S5      S:X  a  U R                  U5      n	O"XR7                  S5      UR                  S5       n	U	R                  S5      S:X  a6  U	S:w  a0  U	R                  S5      S:X  a  U R-                  [/        U	5      5      n	OU R1                  U	S#S  5      n	[        U	5      S$:  a%  U R                  U   S:X  a  UR                  S%5        O[        U	5      S&:  a%  U R                  U   S':X  a  UR                  S%5        OOU R                  U   S:X  a  S"S$[        U	5      -
  -  U	-   n	O'U R                  U   S':X  a  S"S&[        U	5      -
  -  U	-   n	X9-   nUR                  S(U R                  U   -   5        U R                  U   S:X  a  UR                  S)USS* -   5        UR                  S+US*S, -   5        UR                  S-US,S$ -   5        UR                  S.US$S/ -   5        UR                  S0US/S& -   5        UR                  S1US&S  -   5        OU R                  U   S:X  a]  UR                  S)USS* -   5        UR                  S+US*S, -   5        UR                  S-US,S$ -   5        UR                  S2US$S  -   5        OAU R                  U   S':X  a.  UR                  S)USS* -   5        UR                  S2US*S  -   5        UR                  S3U R9                  U5      -   5        g )4N,r   r	   Fr   r   r   TzNO SUCH COMMAND IN ASSEMBLYz The format for this command is: RlSLLVSRAVSRLVISLTISLTIUORIANDIADDI()rk   SRASRLSLLBEQBNEx$   zShift amount is too greatrU   rh      zImmediate is too large   JzStatement Type: zopCode:    zrs register:    zrt register: zrd register:    zShift Amount: z
Function: zimmediate: 0xzStatement in Hex: 0x)replacer,   r.   r   r   rW   r   r   r   r   r    r   r!   _MipsConverter__getRegLastr#   _MipsConverter__getRegFirst_MipsConverter__getRegSecond_MipsConverter__getRegBinr'   r(   r"   r$   _MipsConverter__decToBinr`   _MipsConverter__hexToBinr%   r&   r   _MipsConverter__binToHex)
r   r   r   assBinry   rc   comNameru   amtimmBs
             r   r   MipsConverter.assemblyToHex  sZ	   ##C-88HNN,-#djj/!nn&Gc"b(#Ax}}S'9A'=>EEGmmoG

1(AA #djj/! EMJJ45JJ9A'),-/3{{1~> ? iil*F a C'DIIaLC,?ZZ]f,$**Q-5;3<AEARXAX,,X6Diilc)--h7D  ..x8D$$T>>4>>6RS q!S(TYYq\S-@ ZZ]f,$**Q-5<3=BF**Q-SXBX..x8Djjmv-4::a=F3J..x8D kk!n))#."4#MM#$6$:HMM#<NOD  --h7D$$T>>4>>6RS ))A,#%))A,. a C'DIIaLC,? ZZ]e+A492:?Czz!}PV?V..x8Dzz!}.DJJqMU4JPTPZPZ[\P]agPg..x8D  ,,X6D$$T>>4>>6RS --"c)diilc.A ZZ]e+A%1G..x8D  --h7D$$T>>4>>6RS ))A,#%))A,. a C'DIIaLC,?$$T%7%7%A4>>SWSaSacijk ))A,#%))A,. a C'DLLOs,B''1HHSMR'C2I#((3-2:MDOOC01A5

#>?!c$//#*>&?"?@C12C DOOCG459

#>?q3ts12w'?#@@AT__UXYZY[U\E]^C --"c),,q/1a C'++a.0 

1$MM#&",,,X6D $NN3$7s9KLDIIcNb(T."&))C.B"6??3t95D  ??484DINt}}Q'73'>JJ78$i"nq)9S)@JJ78a(C/ #rCI~ 6$>--*c1 #rCI~ 6$>

%a(889MM!#JJzF1QK/0JJ"56JJ267JJ267JJ'&B-78JJ|fRSk12mmA#%JJzF1QK/0JJ"56JJ267JJ45mmA#%JJzF1QK/0JJ34

)DOOF,CCDr   c                 @	   SnU R                  U5      nSnSnU[        U R                  5      :  a  U R                  U   USS :X  a  U R                  U   S:w  a  SnOUU R                  U   USS :X  a  U R                  U   S:X  a  USS S:X  a  SnO US	-   nU[        U R                  5      :  a  M  USL a  UR	                  S
5        g X0R
                  U   -   S-   nU R                  U   S:X  Ga  U R                  U   S:X  a2  USS nUU R                  XpR                  U R                  U5      -   S-   nU R                  U   S:X  aq  U R
                  U   S:X  d&  U R
                  U   S:X  d  U R
                  U   S:X  a  USS nOUSS nUU R                  XpR                  U R                  U5      -   S-   nU R                  U   S:X  aq  U R
                  U   S:X  d&  U R
                  U   S:X  d  U R
                  U   S:X  a  USS nOUSS nUU R                  XpR                  U R                  U5      -   S-   nU R                  U   S:X  a  SUSS -   nUS-   U R                  U5      -   nGOU R                  U   S:X  Ga  U R                  U   S:X  a^  U R
                  U   S:X  d  U R
                  U   S:X  a  USS nOUSS nUU R                  XpR                  U R                  U5      -   S-   nU R                  U   S:X  a  U R
                  U   S:X  d  U R
                  U   S:X  a3  USS nUU R                  XpR                  U R                  U5      -   S-   nOqU R                  U   R!                  S5      S:w  a  USS  nUS-   U R                  U5      -   nO2USS nUU R                  XpR                  U R                  U5      -   S-   nU R"                  U   S:X  at  U R                  U   R!                  S5      S:w  a6  USS nUS-   U R                  XpR                  U R                  U5      -   S-   nOOUSS  nUS-   U R                  U5      -   nO2U R                  U   S:X  a  SUSS  -   nUS-   U R                  U5      -   nUR	                  U5        g )Nr	   r   Fr   000000Tr       r   zNo such command exists.r   r   r   r   r   r   r   r   r   0000xr   r   r   r   r   r   r   00)r   r   r    r%   r   r   r   r#   _MipsConverter__findRegFromBinr'   r(   r!   r"   r$   r   r   r   r&   )r   
hexCommandr   r   commandrc   ry   ru   s           r   r   MipsConverter.hexToAssembly  s   //*-3tyy>!11-DIIaLH4L;;q>WR^3$))A,(:RY`abcdYeiqYqAA 3tyy>! EMJJ01**Q-/#5Ha C' IIaLC'"2b>D'--dNNDNNTZ[ \^a bH IIaLC'A&0 JJqMV3A&9P&r"~&q}'--dNNDNNTZ[ \^a bH IIaLC'A&0 JJqMV3A&9P&q}&r"~'--dNNDNNTZ[ \^a bH LLOs* 72b>1D'$1FFH --"c)IIaLC'A%/TZZ]e5K&q}&r"~'--dNNDNNTZ[ \^a bH IIaLC'A%/TZZ]e5K&r"~#+ 11$X^_$`be$f ++a.--c2b8&rs|#+d?T__T5J#J  'q}#+ 11$X^_$`be$f JJqMS(A++C0B6&q}#+$ "&"7"7nndnn^d"e$fhk$l  'rs|#+d?T__T5J#J --"c)gabk)#d?T__T-BB

8r   )__com__form__func__imm__inType__op__rd	__regCode	__regName__rs__rt__shamtN)__name__
__module____qualname____firstlineno____doc__r   r4   r   r   r   _MipsConverter__nibbleEqr   r   r   r   r   r   r   __static_attributes__ri   r   r   r   r      sP    0_?D%P%P(&&vErdr   r   )r*   r   r+   abspathdirname__file__r-   r   ri   r   r   <module>r      sJ    	 GGOOBGGOOH56	 l l lr   