#pragma once

#define ADDR_ROM 0x200
#define ADDR_FONT 0x50

/**
 * @brief Must be called first!
 * 
 */
void MemInit();

/**
 * @brief Set value of a memory region
 * 
 * @param addr 
 * @param value 
 * @param size 
 */
void MemSet(int addr, unsigned char value, int size);

/**
 * @brief Store date in memory
 * 
 * @param data 
 * @param size 
 * @param addr 
 */
void MemStore(unsigned char *data, int size, int addr);

/**
 * @brief Load data from memory
 * 
 * @param data 
 * @param size 
 * @param addr 
 */
void MemLoad(unsigned char *data, int size, int addr);

/**
 * @brief Load ROM into memory (be careful, file MUST exists)
 * 
 * @param path 
 */
void MemLoadROM(char *path);

/**
 * @brief Dump the entire memory
 * 
 */
void MemDump();

/**
 * @brief Dump a memory region
 * 
 * @param addr 
 * @param size 
 */
void MemDumpRange(int addr, int size);
