コード例 #1
0
ファイル: os345p4.c プロジェクト: cletusw/345-Shell
// **************************************************************************
// **************************************************************************
// vma <a>
int P4_vmaccess(int argc, char* argv[])
{
	unsigned short int adr, rpt, upt;

	adr = INTEGER(argv[1]);
	printf(" = %04x", getMemAdr(adr, 1)-&MEMWORD(0));
	printf("\nRPTI:%d(0x%x) UPTI:%d(0x%x) OFFSET:%d(0x%x)", RPTI(adr)/2, RPTI(adr), UPTI(adr)/2, UPTI(adr), FRAMEOFFSET(adr), FRAMEOFFSET(adr));

	for (rpt = 0; rpt < 64; rpt+=2)
	{
		if (MEMWORD(rpt+TASK_RPT) || MEMWORD(rpt+TASK_RPT+1))
		{
			outPTE("  RPT  =", rpt+TASK_RPT);
			for(upt = 0; upt < 64; upt+=2)
			{
				if (DEFINED(MEMWORD(rpt+TASK_RPT)) &&
					(DEFINED(MEMWORD((FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt))
					|| PAGED(MEMWORD((FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt+1))))
				{
					outPTE("    UPT=", (FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt);
				}
			}
		}
	}
	printf("\nPages = %d", nextPage);
	return 0;
} // end P4_vmaccess
コード例 #2
0
ファイル: os345p4.c プロジェクト: jrasm91/cs345
// **************************************************************************
// **************************************************************************
// vma <a>
int P4_vmaccess(int argc, char* argv[])
{
	unsigned short int adr, rpt, upt;

	printf("\nValidate arguments...");	// ?? validate arguments
	adr = INTEGER(argv[1]);

	printf(" = %04x", getMemAdr(adr, 1)-&MEMWORD(0));
	for (rpt = 0; rpt < 64; rpt+=2)
	{
		if (MEMWORD(rpt+TASK_RPT) || MEMWORD(rpt+TASK_RPT+1))
		{
			outPTE("  RPT  =", rpt+TASK_RPT);
			for(upt = 0; upt < 64; upt+=2)
			{
				if (DEFINED(MEMWORD(rpt+TASK_RPT)) &&
						(DEFINED(MEMWORD((FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt))
								|| PAGED(MEMWORD((FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt+1))))
				{
					outPTE("    UPT=", (FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt);
				}
			}
		}
	}
	printf("\nPages = %d", nextPage);
	return 0;
} // end P4_vmaccess
コード例 #3
0
ファイル: os345mmu.c プロジェクト: brainwood-school/cs-345
// **************************************************************************
// **************************************************************************
// set frames available from sf to ef
//    flg = 0 -> clear all others
//        = 1 -> just add bits
//
void setFrameTableBits(int flg, int sf, int ef)
{	int i, data;
	int adr = LC3_FBT-1;             // index to frame bit table
	int fmask = 0x0001;              // bit mask

	// 1024 frames in LC-3 memory
	for (i=0; i<LC3_FRAMES; i++)
	{	if (fmask & 0x0001)
		{  fmask = 0x8000;
			adr++;
			data = (flg)?MEMWORD(adr):0;
		}
		else fmask = fmask >> 1;
		// allocate frame if in range
		if ( (i >= sf) && (i < ef)) data = data | fmask;
		MEMWORD(adr) = data;
	}
	return;
} // end setFrameTableBits
コード例 #4
0
ファイル: os345p4.c プロジェクト: cletusw/345-Shell
// **************************************************************************
// **************************************************************************
// look at virtual memory location va
void lookVM(int va)
{
   unsigned short int rpte1, rpte2, upte1, upte2, pa;

   // get root page table entry
	rpte1 = MEMWORD(LC3_RPT + RPTI(va));
   rpte2 = MEMWORD(LC3_RPT + RPTI(va) + 1);
   if (DEFINED(rpte1))
   {	upte1 = MEMWORD((FRAME(rpte1)<<6) + UPTI(va));
		upte2 = MEMWORD((FRAME(rpte1)<<6) + UPTI(va) + 1);
   }
   else
   {
		// rpte undefined
		printf("\n  RTB[Undefined]");
		return;
	}
  	if (DEFINED(upte1))
	{
		pa = (FRAME(upte1)<<6) + FRAMEOFFSET(va);
	}
   else
   {
		// upte undefined
     	printf("\n  UTB[Undefined]");
		return;
   }
   printf("\n  RPT[0x%04x] = %04x %04x", LC3_RPT + RPTI(va), rpte1, rpte2);
      if (rpte1&BIT_14_MASK) printf(" D");
      if (rpte1&BIT_13_MASK) printf(" R");
      if (rpte1&BIT_12_MASK) printf(" P");
      printf(" Frame=%d", rpte1&0x03ff);
      if (DEFINED(rpte2)) printf(" Page=%d", rpte2&0x0fff);
   printf("\n  UPT[0x%04x] = %04x %04x", (FRAME(rpte1)<<6) + UPTI(va), upte1, upte2);
      if (upte1&BIT_14_MASK) printf(" D");
      if (upte1&BIT_13_MASK) printf(" R");
      if (upte1&BIT_12_MASK) printf(" P");
      printf(" Frame=%d", upte1&0x03ff);
      if (DEFINED(upte2)) printf(" Page=%d", upte2&0x0fff);
   printf("\n  MEM[0x%04x] = %04x", pa, MEMWORD(pa));
	return;
} // end lookVM
コード例 #5
0
ファイル: os345mmu.c プロジェクト: brainwood-school/cs-345
// **************************************************************************
// get frame from frame bit table (else return -1)
int getAvailableFrame()
{
	int i, data;
	int adr = LC3_FBT - 1;				// index to frame bit table
	int fmask = 0x0001;					// bit mask

	for (i=0; i<LC3_FRAMES; i++)		// look thru all frames
	{	if (fmask & 0x0001)
		{  fmask = 0x8000;				// move to next word
			adr++;
			data = MEMWORD(adr);
		}
		else fmask = fmask >> 1;		// next frame
		// deallocate frame and return frame #
		if (data & fmask)
		{  MEMWORD(adr) = data & ~fmask;
			return i;
		}
	}
	return -1;
} // end getAvailableFrame
コード例 #6
0
ファイル: os345p4.c プロジェクト: cletusw/345-Shell
// **************************************************************************
// **************************************************************************
// dm <sa> <ea> - dump lc3 memory
void dumpMemory(char *s, int sa, int ea)
{
   int i, ma;
   printf("\n%s", s);
   for (ma = sa; ma < ea;)
	{
		printf("\n0x%04x:", ma);
		for (i=0; i<8; i++)
		{
			printf(" %04x", MEMWORD((ma+i)));
		}
		ma+=8;
	}
   return;
} // end dumpMemory
コード例 #7
0
ファイル: os345p4.c プロジェクト: jrasm91/cs345
// **************************************************************************
// **************************************************************************
// display contents of UPT
void displayUPT(int rptNum, int uptNum)
{
	unsigned short int rpte, upt, upte1, upte2, uptba;
	rptNum &= BITS_3_0_MASK;
	uptNum &= BITS_4_0_MASK;

	// index to process <rptNum>'s rpt + <uptNum> index
	rpte = MEMWORD(((LC3_RPT + (rptNum<<6)) + uptNum*2));
	// calculate upt's base address
	uptba = uptNum<<11;
	if (!DEFINED(rpte))
		return;
	printf("\nUser Page Table %d", FRAME(rpte));
	upt = FRAME(rpte)<<6;
	displayPT(upt, uptba, 1<<6);
	return;
} // end displayUPT
コード例 #8
0
ファイル: os345mmu.c プロジェクト: bpachev/CS_235
void dump_rpt_and_upt()
{
  int rpt, upt;
  for (rpt = 0; rpt < 64; rpt+=2)
  {
    if (MEMWORD(rpt+TASK_RPT) || MEMWORD(rpt+TASK_RPT+1))
    {
      outPTE("  RPT  =", rpt+TASK_RPT);
      for(upt = 0; upt < 64; upt+=2)
      {
        if (DEFINED(MEMWORD(rpt+TASK_RPT)) &&(DEFINED(MEMWORD((FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt))
                          || PAGED(MEMWORD((FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt+1))))
        {
          outPTE("    UPT=", (FRAME(MEMWORD(rpt+TASK_RPT))<<6)+upt);
        }
      }
    }
  }
}