/*
 * sys_memory.h
 *
 *  Created on: 2016/11/24
 *      Author: takayun
 */

#ifndef SYS_MEMORY_H_
#define SYS_MEMORY_H_

#include "sys_register.h"
#include "inst_decoder.h"

/**************************************************
 *						Defines
 **************************************************/

// メモリの数
#define MEMS_COUNT 16

// 1メモリのサイズ
#define MEM_SIZE 16

/**************************************************
 *						Variables
 **************************************************/

extern unsigned int global_current_memory;

/**************************************************
 *						Functions
 **************************************************/

/* Function: memory_init
 * Sammary:
 *  メモリを初期化する(All 0) */
void memory_init();

/* 命令用メモリに命令のストア&ロード */

/* Function: memory_store -> char
 * Sammary:
 *  メモリの指定番地に指定したレジスタから値を格納する
 * Return:
 *  メモリに格納された値 */
void inst_memory_store(unsigned int mem_addr, struct InstRec inst_rec);
struct InstRec inst_memory_load(unsigned int mem_addr);


/* メモリ-レジスタ間の操作 */

/* Function: memory_store -> char
 * Sammary:
 *  メモリの指定番地に指定したレジスタから値を格納する
 * Return:
 *  メモリに格納された値 */
char memory_store(unsigned int mem_addr, enum Register reg);

/* Function: memory_store -> char
 * Sammary:
 *  指定したレジスタにメモリの指定番地から値を格納する
 * Return:
 *  レジスタに格納された値 */
char memory_load(unsigned int mem_addr, enum Register reg);


#endif /* SYS_MEMORY_H_ */
