EMULATOR_PDP_11
STEPIC Учебный проект на 'С', эмулятор PDP_11 в стиле ООП
Loading...
Searching...
No Matches
mem.c File Reference
#include "pdp_11/memory/buf_byte/mem_byte.h"
#include "pdp_11/memory/buf_word/mem_word.h"
#include "pdp_11/memory/mem_p.h"
#include "utils/utils.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
Include dependency graph for mem.c:

Functions

mem_tmem_new ()
 
void mem_create (mem_t *memory)
 
void mem_destroy (mem_t *memory)
 
static bool_t __is_valid_addr (mem_t *memory, address_word_t addr, word_t len)
 
static address_word_t __corect_addr_for_write_word (address_word_t addr)
 
void byte_write (mem_t *memory, address_byte_t addr, byte_t data)
 
byte_t byte_read (mem_t *memory, address_byte_t addr)
 
void word_write (mem_t *memory, address_word_t addr, word_t data)
 
word_t word_read (mem_t *memory, address_word_t addr)
 

Variables

byte_t g_default_memory
 

Function Documentation

◆ __corect_addr_for_write_word()

static address_word_t __corect_addr_for_write_word ( address_word_t  addr)
inlinestatic
65{
66 if ((addr & 1)) {
67 addr ^= 1;
68 return addr;
69 }
70 return addr;
71}
Here is the caller graph for this function:

◆ __is_valid_addr()

static bool_t __is_valid_addr ( mem_t memory,
address_word_t  addr,
word_t  len 
)
inlinestatic
48{
49
50 if (!(memory->default_memory)) {
51 if ((addr | len) > memory->mem_byte->size_b) {
52 abort();
53 }
54 return 1;
55 }
56
57 if ((addr + len) > memory->mem_word->size_w) {
58 abort();
59 }
60 return 1;
61}
size_byte_buffer size_b
Definition mem_byte_p.h:9
byte_t default_memory
Definition mem_p.h:10
mem_byte_t * mem_byte
Definition mem_p.h:8
mem_word_t * mem_word
Definition mem_p.h:9
size_word_buffer size_w
Definition mem_word_p.h:9
Here is the caller graph for this function:

◆ byte_read()

byte_t byte_read ( mem_t memory,
address_byte_t  addr 
)
90{
91 assert(__is_valid_addr(memory, addr, 1));
92 if (!(memory->default_memory)) {
93 return (byte_t) memory->mem_byte->read_byte(memory->mem_byte, addr);
94 }
95
96 // addr = __corect_addr_for_write_word(addr);
97 assert(__is_valid_addr(memory, addr, 1));
98
99 return (byte_t) memory->mem_word->read_byte(memory->mem_word, addr);
100}
static bool_t __is_valid_addr(mem_t *memory, address_word_t addr, word_t len)
Definition mem.c:47
read_byte_t read_byte
Definition mem_byte_p.h:11
read_byte_t read_byte
Definition mem_word_p.h:11
unsigned char byte_t
Definition types.h:6
Here is the call graph for this function:
Here is the caller graph for this function:

◆ byte_write()

void byte_write ( mem_t memory,
address_byte_t  addr,
byte_t  data 
)
75{
76 assert(__is_valid_addr(memory, addr, 1));
77 if (!(memory->default_memory)) {
78 memory->mem_byte->write_byte(memory->mem_byte, addr, data);
79 return;
80 }
81
82 // addr = __corect_addr_for_write_word(addr);
83 assert(__is_valid_addr(memory, addr, 1));
84
85 memory->mem_word->write_byte(memory->mem_word, addr, data);
86}
write_byte_t write_byte
Definition mem_byte_p.h:12
write_byte_t write_byte
Definition mem_word_p.h:12
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mem_create()

void mem_create ( mem_t memory)
19{
21
22 if (!(memory->default_memory)) {
23 memory->mem_byte = (mem_byte_t *) mem_byte_new();
24 mem_byte_create((struct mem_byte_t *) memory->mem_byte,
26 return;
27 }
28 memory->mem_word = (mem_word_t *) mem_word_new();
29 mem_word_create((struct mem_word_t *) memory->mem_word,
31}
byte_t g_default_memory
Definition mem.c:10
struct mem_byte_t * mem_byte_new()
Definition buf_byte.c:17
void mem_byte_create(struct mem_byte_t *, const size_byte_buffer)
Definition buf_byte.c:23
void mem_word_create(struct mem_word_t *, size_word_buffer)
Definition buf_word.c:24
struct mem_word_t * mem_word_new()
Definition buf_word.c:17
Definition mem_byte_p.h:7
Definition mem_word_p.h:7
address_byte_t __get_size_buffer()
Definition size_buffer.c:6
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mem_destroy()

void mem_destroy ( mem_t memory)
35{
36 if (!(memory->default_memory)) {
37 mem_byte_destroy((struct mem_byte_t *) memory->mem_byte);
38 free(memory->mem_byte);
39 return;
40 }
41 mem_word_destroy((struct mem_word_t *) memory->mem_word);
42 free(memory->mem_word);
43}
void mem_byte_destroy(struct mem_byte_t *)
Definition buf_byte.c:35
void mem_word_destroy(struct mem_word_t *)
Definition buf_word.c:38
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mem_new()

mem_t * mem_new ( )
13{
14 return (mem_t *) malloc(sizeof(mem_t));
15}
Definition mem_p.h:7
Here is the caller graph for this function:

◆ word_read()

word_t word_read ( mem_t memory,
address_word_t  addr 
)
118{
119 assert(__is_valid_addr(memory, addr, 2));
120 if (!(memory->default_memory)) {
121 return (word_t) memory->mem_byte->read_word(memory->mem_byte, addr);
122 }
123 if (addr & 1) {
124 addr &= -1;
125 }
126
127 addr = __corect_addr_for_write_word(addr);
128 assert(__is_valid_addr(memory, addr, 2));
129 return (word_t) memory->mem_word->read_word(memory->mem_word, addr);
130}
static address_word_t __corect_addr_for_write_word(address_word_t addr)
Definition mem.c:64
read_word_t read_word
Definition mem_byte_p.h:13
read_word_t read_word
Definition mem_word_p.h:13
unsigned short int word_t
Definition types.h:7
Here is the call graph for this function:
Here is the caller graph for this function:

◆ word_write()

void word_write ( mem_t memory,
address_word_t  addr,
word_t  data 
)
104{
105 addr = __corect_addr_for_write_word(addr);
106 assert(__is_valid_addr(memory, addr, 2));
107
108 if (!(memory->default_memory)) {
109 memory->mem_byte->write_word(memory->mem_byte, addr, data);
110 return;
111 }
112
113 memory->mem_word->write_word(memory->mem_word, addr, data);
114}
write_word_t write_word
Definition mem_byte_p.h:14
write_word_t write_word
Definition mem_word_p.h:14
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ g_default_memory

byte_t g_default_memory