OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [monitor/] [monitor/] [common/] [mmu.c] - Blame information for rev 141

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 59 hellwig
/*
2
 * mmu.c -- memory and TLB access
3
 */
4
 
5
 
6
#include "common.h"
7
#include "stdarg.h"
8
#include "romlib.h"
9
#include "mmu.h"
10
#include "start.h"
11
 
12
 
13
static Word tlbIndex;
14
static Word tlbEntryHi;
15
static Word tlbEntryLo;
16 84 hellwig
static Word badAddress;
17 59 hellwig
 
18
 
19
Word mmuReadWord(Word vAddr) {
20
  return *(Word *)vAddr;
21
}
22
 
23
 
24
Half mmuReadHalf(Word vAddr) {
25
  return *(Half *)vAddr;
26
}
27
 
28
 
29
Byte mmuReadByte(Word vAddr) {
30
  return *(Byte *)vAddr;
31
}
32
 
33
 
34
void mmuWriteWord(Word vAddr, Word data) {
35
  *(Word *)vAddr = data;
36
}
37
 
38
 
39
void mmuWriteHalf(Word vAddr, Half data) {
40
  *(Half *)vAddr = data;
41
}
42
 
43
 
44
void mmuWriteByte(Word vAddr, Byte data) {
45
  *(Byte *)vAddr = data;
46
}
47
 
48
 
49
Word mmuGetIndex(void) {
50
  return tlbIndex;
51
}
52
 
53
 
54
void mmuSetIndex(Word value) {
55
  tlbIndex = value;
56
}
57
 
58
 
59
Word mmuGetEntryHi(void) {
60
  return tlbEntryHi;
61
}
62
 
63
 
64
void mmuSetEntryHi(Word value) {
65
  tlbEntryHi = value;
66
}
67
 
68
 
69
Word mmuGetEntryLo(void) {
70
  return tlbEntryLo;
71
}
72
 
73
 
74
void mmuSetEntryLo(Word value) {
75
  tlbEntryLo = value;
76
}
77
 
78
 
79 84 hellwig
Word mmuGetBadAddr(void) {
80
  return badAddress;
81
}
82
 
83
 
84
void mmuSetBadAddr(Word value) {
85
  badAddress = value;
86
}
87
 
88
 
89 59 hellwig
TLB_Entry mmuGetTLB(int index) {
90
  Word hi;
91
  Word lo;
92
  TLB_Entry result;
93
 
94
  hi = getTLB_HI(index);
95
  lo = getTLB_LO(index);
96
  result.page = hi & PAGE_MASK;
97
  result.frame = lo & PAGE_MASK;
98
  result.write = (lo & TLB_WRITE) ? true : false;
99
  result.valid = (lo & TLB_VALID) ? true : false;
100
  return result;
101
}
102
 
103
 
104
void mmuSetTLB(int index, TLB_Entry tlbEntry) {
105
  Word flags;
106
 
107
  flags = 0;
108
  if (tlbEntry.write) {
109
    flags |= TLB_WRITE;
110
  }
111
  if (tlbEntry.valid) {
112
    flags |= TLB_VALID;
113
  }
114
  setTLB(index, tlbEntry.page, tlbEntry.frame | flags);
115
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.