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 71a73da..8d620d4 100644 Binary files a/vhex.g1a and b/vhex.g1a differ