Line 632... |
Line 632... |
case 0x16:/*BLEZL*/ lbranch=r[rs]<=0; break;
|
case 0x16:/*BLEZL*/ lbranch=r[rs]<=0; break;
|
case 0x17:/*BGTZL*/ lbranch=r[rs]>0; break;
|
case 0x17:/*BGTZL*/ lbranch=r[rs]>0; break;
|
// case 0x1c:/*MAD*/ break; /*IV*/
|
// case 0x1c:/*MAD*/ break; /*IV*/
|
case 0x20:/*LB*/ r[rt]=(signed char)mem_read(s,1,ptr); break;
|
case 0x20:/*LB*/ r[rt]=(signed char)mem_read(s,1,ptr); break;
|
case 0x21:/*LH*/ r[rt]=(signed short)mem_read(s,2,ptr); break;
|
case 0x21:/*LH*/ r[rt]=(signed short)mem_read(s,2,ptr); break;
|
case 0x22:/*LWL*/ rt=rt; //fixme fall through
|
case 0x22:/*LWL*/
|
|
//target=8*(ptr&3);
|
|
//r[rt]=(r[rt]&~(0xffffffff<<target))|
|
|
// (mem_read(s,4,ptr&~3)<<target); break;
|
case 0x23:/*LW*/ r[rt]=mem_read(s,4,ptr); break;
|
case 0x23:/*LW*/ r[rt]=mem_read(s,4,ptr); break;
|
case 0x24:/*LBU*/ r[rt]=(unsigned char)mem_read(s,1,ptr); break;
|
case 0x24:/*LBU*/ r[rt]=(unsigned char)mem_read(s,1,ptr); break;
|
case 0x25:/*LHU*/ r[rt]=(unsigned short)mem_read(s,2,ptr); break;
|
case 0x25:/*LHU*/ r[rt]=(unsigned short)mem_read(s,2,ptr); break;
|
case 0x26:/*LWR*/ break; //fixme
|
case 0x26:/*LWR*/
|
|
//target=32-8*(ptr&3);
|
|
//r[rt]=(r[rt]&~((unsigned long)0xffffffff>>target))|
|
|
//((unsigned long)mem_read(s,4,ptr&~3)>>target);
|
|
break;
|
case 0x28:/*SB*/ mem_write(s,1,ptr,r[rt]); break;
|
case 0x28:/*SB*/ mem_write(s,1,ptr,r[rt]); break;
|
case 0x29:/*SH*/ mem_write(s,2,ptr,r[rt]); break;
|
case 0x29:/*SH*/ mem_write(s,2,ptr,r[rt]); break;
|
case 0x2a:/*SWL*/ rt=rt; //fixme fall through
|
case 0x2a:/*SWL*/
|
|
//mem_write(s,1,ptr,r[rt]>>24);
|
|
//mem_write(s,1,ptr+1,r[rt]>>16);
|
|
//mem_write(s,1,ptr+2,r[rt]>>8);
|
|
//mem_write(s,1,ptr+3,r[rt]); break;
|
case 0x2b:/*SW*/ mem_write(s,4,ptr,r[rt]); break;
|
case 0x2b:/*SW*/ mem_write(s,4,ptr,r[rt]); break;
|
case 0x2e:/*SWR*/ break; //fixme
|
case 0x2e:/*SWR*/ break; //fixme
|
case 0x2f:/*CACHE*/break;
|
case 0x2f:/*CACHE*/break;
|
case 0x30:/*LL*/ r[rt]=mem_read(s,4,ptr); break;
|
case 0x30:/*LL*/ r[rt]=mem_read(s,4,ptr); break;
|
// case 0x31:/*LWC1*/ break;
|
// case 0x31:/*LWC1*/ break;
|
Line 821... |
Line 832... |
getch();
|
getch();
|
return(0);
|
return(0);
|
}
|
}
|
bytes = fread(s->mem, 1, MEM_SIZE, in);
|
bytes = fread(s->mem, 1, MEM_SIZE, in);
|
fclose(in);
|
fclose(in);
|
|
memcpy(s->mem + 1024*1024, s->mem, 1024*8); //internal 8KB SRAM
|
printf("Read %ld bytes.\n", bytes);
|
printf("Read %ld bytes.\n", bytes);
|
cache_init();
|
cache_init();
|
if(argc == 3 && argv[2][0] == 'B')
|
if(argc == 3 && argv[2][0] == 'B')
|
{
|
{
|
printf("Big Endian\n");
|
printf("Big Endian\n");
|
Line 855... |
Line 867... |
cycle(s, 10);
|
cycle(s, 10);
|
}
|
}
|
free(s->mem);
|
free(s->mem);
|
return(0);
|
return(0);
|
}
|
}
|
memcpy(s->mem + 1024*1024, s->mem, 1024*8); //internal 8KB SRAM
|
|
s->pc = 0x0;
|
s->pc = 0x0;
|
index = mem_read(s, 4, 0);
|
index = mem_read(s, 4, 0);
|
if(index == 0x3c1c1000)
|
if(index == 0x3c1c1000)
|
s->pc = 0x10000000;
|
s->pc = 0x10000000;
|
do_debug(s);
|
do_debug(s);
|