/
RAM.cpp
64 lines (54 loc) · 1.31 KB
/
RAM.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "Arduino.h"
#include "RAM.h"
RAM::RAM(BUS *bus, const void *program, int pin_MAR_s, int pin_RAM_e, int pin_RAM_s){
_bus = bus ;
_MAR = 0 ;
for (int i = 0 ; i < 255 ; i++){
_RAM[i] = 0 ;
}
if (program != NULL){
// Here we copy more than the length of the program, but it doesn't matter.
memcpy_P(_RAM, program, 256) ;
}
_pin_MAR_s = pin_MAR_s ;
_pin_RAM_e = pin_RAM_e ;
_pin_RAM_s = pin_RAM_s ;
}
void RAM::setup(){
pinMode(_pin_MAR_s, INPUT) ;
pinMode(_pin_RAM_e, INPUT) ;
pinMode(_pin_RAM_s, INPUT) ;
}
bool RAM::loop(bool debug = 0){
if (digitalRead(_pin_MAR_s)){
_MAR = _bus->read() ;
if (debug){
Serial.print(" RAM(op:mar_s, mar:") ;
Serial.print(_MAR) ;
Serial.println(")") ;
}
}
if (digitalRead(_pin_RAM_s)){
_RAM[_MAR] = _bus->read() ;
if (debug){
Serial.print(" RAM(op:ram_s, mar:") ;
Serial.print(_MAR) ;
Serial.print(", v:") ;
Serial.print(_RAM[_MAR]) ;
Serial.println(")") ;
}
}
bool be = false ;
if (digitalRead(_pin_RAM_e)){
_bus->write(_RAM[_MAR]) ;
be = true ;
if (debug){
Serial.print(" RAM(op:ram_e, mar:") ;
Serial.print(_MAR) ;
Serial.print(", v:") ;
Serial.print(_RAM[_MAR]) ;
Serial.println(")") ;
}
}
return be ;
}