Add FPU instructions.

Fix command mode error.
Update/FIx help pages.
Fix "make re" error.
This commit is contained in:
yann MAGNIN 2019-06-17 23:42:07 +02:00
parent e2976733c3
commit 284cf435d6
6 changed files with 349 additions and 25 deletions

View File

@ -82,7 +82,7 @@ fclean: clean
@ printf "$(red)Delete binary files$(nocolor)\n"
rm -f $(EXEC)
re: fclean all install
re: fclean all

View File

@ -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,

View File

@ -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)

View File

@ -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"))

View File

@ -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);
}

BIN
vhex.g1a

Binary file not shown.