1
1
// pub mod memory;
2
2
3
- pub const MEM_BASE : u64 = 0x80000000 ; // defined in QEMU
4
- pub const MEM_SIZE : u64 = 1024 ;
3
+ pub const MEM_BASE : u32 = 0x80000000 ; // defined in QEMU
4
+ pub const MEM_SIZE : u32 = 1024 ;
5
5
6
6
#[ derive( Debug ) ]
7
7
pub struct BUS {
@@ -12,10 +12,10 @@ impl BUS {
12
12
pub fn new ( ) -> Self {
13
13
BUS { mem : MEMORY :: new ( ) }
14
14
}
15
- pub fn load ( self , addr : u64 , size : u64 ) -> u32 {
15
+ pub fn load ( self , addr : u32 , size : u32 ) -> u32 {
16
16
return self . mem . load ( addr, size) as u32 ;
17
17
}
18
- pub fn store ( & mut self , addr : u64 , size : u64 , value : u64 ) {
18
+ pub fn store ( & mut self , addr : u32 , size : u32 , value : u32 ) {
19
19
self . mem . store ( addr, size, value) ;
20
20
}
21
21
}
@@ -32,78 +32,78 @@ impl MEMORY {
32
32
}
33
33
}
34
34
35
- fn load ( self , addr : u64 , size : u64 ) -> u64 {
35
+ fn load ( self , addr : u32 , size : u32 ) -> u32 {
36
36
match size {
37
37
8 => return self . load8 ( addr) ,
38
38
16 => return self . load16 ( addr) ,
39
39
32 => return self . load32 ( addr) ,
40
- 64 => return self . load64 ( addr) ,
40
+ // 64 => return self.load64(addr),
41
41
_ => panic ! ( "wrong load size" ) ,
42
42
}
43
43
}
44
- fn store ( & mut self , addr : u64 , size : u64 , value : u64 ) {
44
+ fn store ( & mut self , addr : u32 , size : u32 , value : u32 ) {
45
45
match size {
46
46
8 => self . store8 ( addr, value) ,
47
47
16 => self . store16 ( addr, value) ,
48
48
32 => self . store32 ( addr, value) ,
49
- 64 => self . store64 ( addr, value) ,
49
+ // 64 => self.store64(addr, value),
50
50
_ => panic ! ( "wrong store size" ) ,
51
51
}
52
52
}
53
53
54
54
// load funcs
55
- fn load8 ( self , addr : u64 ) -> u64 {
55
+ fn load8 ( self , addr : u32 ) -> u32 {
56
56
let index = ( addr - MEM_BASE ) as usize ;
57
- return self . mem [ index] as u64 ;
57
+ return self . mem [ index] as u32 ;
58
58
}
59
- fn load16 ( self , addr : u64 ) -> u64 {
59
+ fn load16 ( self , addr : u32 ) -> u32 {
60
60
let index = ( addr - MEM_BASE ) as usize ;
61
- return self . mem [ index] as u64 | ( ( self . mem [ index + 1 ] as u64 ) << 8 ) ;
61
+ return self . mem [ index] as u32 | ( ( self . mem [ index + 1 ] as u32 ) << 8 ) ;
62
62
}
63
- fn load32 ( self , addr : u64 ) -> u64 {
63
+ fn load32 ( self , addr : u32 ) -> u32 {
64
64
let index = ( addr - MEM_BASE ) as usize ;
65
- return self . mem [ index] as u64
66
- | ( ( self . mem [ index + 1 ] as u64 ) << 8 )
67
- | ( ( self . mem [ index + 2 ] as u64 ) << 16 )
68
- | ( ( self . mem [ index + 3 ] as u64 ) << 24 ) ;
69
- }
70
- fn load64 ( self , addr : u64 ) -> u64 {
71
- let index = ( addr - MEM_BASE ) as usize ;
72
- return self . mem [ index] as u64
73
- | ( ( self . mem [ index + 1 ] as u64 ) << 8 )
74
- | ( ( self . mem [ index + 2 ] as u64 ) << 16 )
75
- | ( ( self . mem [ index + 3 ] as u64 ) << 24 )
76
- | ( ( self . mem [ index + 4 ] as u64 ) << 32 )
77
- | ( ( self . mem [ index + 5 ] as u64 ) << 40 )
78
- | ( ( self . mem [ index + 6 ] as u64 ) << 48 )
79
- | ( ( self . mem [ index + 7 ] as u64 ) << 56 ) ;
65
+ return self . mem [ index] as u32
66
+ | ( ( self . mem [ index + 1 ] as u32 ) << 8 )
67
+ | ( ( self . mem [ index + 2 ] as u32 ) << 16 )
68
+ | ( ( self . mem [ index + 3 ] as u32 ) << 24 ) ;
80
69
}
70
+ // fn load64(self, addr: u32) -> u32 {
71
+ // let index = (addr - MEM_BASE) as usize;
72
+ // return self.mem[index] as u32
73
+ // | ((self.mem[index + 1] as u32) << 8)
74
+ // | ((self.mem[index + 2] as u32) << 16)
75
+ // | ((self.mem[index + 3] as u32) << 24)
76
+ // | ((self.mem[index + 4] as u32) << 32)
77
+ // | ((self.mem[index + 5] as u32) << 40)
78
+ // | ((self.mem[index + 6] as u32) << 48)
79
+ // | ((self.mem[index + 7] as u32) << 56);
80
+ // }
81
81
82
82
// store funcs
83
- fn store8 ( & mut self , addr : u64 , value : u64 ) {
84
- let index = ( addr - MEM_BASE ) as usize ;
85
- self . mem [ index] = ( value & ( std:: u8:: MAX as u64 ) ) as u8 ;
86
- }
87
- fn store16 ( & mut self , addr : u64 , value : u64 ) {
83
+ fn store8 ( & mut self , addr : u32 , value : u32 ) {
88
84
let index = ( addr - MEM_BASE ) as usize ;
89
- self . mem [ index] = ( value & ( std:: u8:: MAX as u64 ) ) as u8 ;
90
- self . mem [ index + 1 ] = ( ( value >> 8 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
85
+ self . mem [ index] = ( value & ( std:: u8:: MAX as u32 ) ) as u8 ;
91
86
}
92
- fn store32 ( & mut self , addr : u64 , value : u64 ) {
87
+ fn store16 ( & mut self , addr : u32 , value : u32 ) {
93
88
let index = ( addr - MEM_BASE ) as usize ;
94
- self . mem [ index] = ( value & ( std:: u8:: MAX as u64 ) ) as u8 ;
95
- self . mem [ index + 1 ] = ( ( value >> 8 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
96
- self . mem [ index + 2 ] = ( ( value >> 16 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
89
+ self . mem [ index] = ( value & ( std:: u8:: MAX as u32 ) ) as u8 ;
90
+ self . mem [ index + 1 ] = ( ( value >> 8 ) & ( std:: u8:: MAX as u32 ) ) as u8 ;
97
91
}
98
- fn store64 ( & mut self , addr : u64 , value : u64 ) {
92
+ fn store32 ( & mut self , addr : u32 , value : u32 ) {
99
93
let index = ( addr - MEM_BASE ) as usize ;
100
- self . mem [ index] = ( value & ( std:: u8:: MAX as u64 ) ) as u8 ;
101
- self . mem [ index + 1 ] = ( ( value >> 8 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
102
- self . mem [ index + 2 ] = ( ( value >> 16 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
103
- self . mem [ index + 3 ] = ( ( value >> 24 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
104
- self . mem [ index + 4 ] = ( ( value >> 32 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
105
- self . mem [ index + 5 ] = ( ( value >> 40 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
106
- self . mem [ index + 6 ] = ( ( value >> 48 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
107
- self . mem [ index + 7 ] = ( ( value >> 56 ) & ( std:: u8:: MAX as u64 ) ) as u8 ;
94
+ self . mem [ index] = ( value & ( std:: u8:: MAX as u32 ) ) as u8 ;
95
+ self . mem [ index + 1 ] = ( ( value >> 8 ) & ( std:: u8:: MAX as u32 ) ) as u8 ;
96
+ self . mem [ index + 2 ] = ( ( value >> 16 ) & ( std:: u8:: MAX as u32 ) ) as u8 ;
108
97
}
98
+ // fn store64(&mut self, addr: u32, value: u32) {
99
+ // let index = (addr - MEM_BASE) as usize;
100
+ // self.mem[index] = (value & (std::u8::MAX as u32)) as u8;
101
+ // self.mem[index + 1] = ((value >> 8) & (std::u8::MAX as u32)) as u8;
102
+ // self.mem[index + 2] = ((value >> 16) & (std::u8::MAX as u32)) as u8;
103
+ // self.mem[index + 3] = ((value >> 24) & (std::u8::MAX as u32)) as u8;
104
+ // self.mem[index + 4] = ((value >> 32) & (std::u8::MAX as u32)) as u8;
105
+ // self.mem[index + 5] = ((value >> 40) & (std::u8::MAX as u32)) as u8;
106
+ // self.mem[index + 6] = ((value >> 48) & (std::u8::MAX as u32)) as u8;
107
+ // self.mem[index + 7] = ((value >> 56) & (std::u8::MAX as u32)) as u8;
108
+ // }
109
109
}
0 commit comments