Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
136 lines (113 sloc)
3.85 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /***** | |
| * SPC7110 emulator - version 0.03 (2008-08-10) | |
| * Copyright (c) 2008, byuu and neviksti | |
| * | |
| * Permission to use, copy, modify, and/or distribute this software for any | |
| * purpose with or without fee is hereby granted, provided that the above | |
| * copyright notice and this permission notice appear in all copies. | |
| * | |
| * The software is provided "as is" and the author disclaims all warranties | |
| * with regard to this software including all implied warranties of | |
| * merchantibility and fitness, in no event shall the author be liable for | |
| * any special, direct, indirect, or consequential damages or any damages | |
| * whatsoever resulting from loss of use, data or profits, whether in an | |
| * action of contract, negligence or other tortious action, arising out of | |
| * or in connection with the use or performance of this software. | |
| *****/ | |
| #ifndef _SPC7110EMU_H_ | |
| #define _SPC7110EMU_H_ | |
| #include "spc7110dec.h" | |
| class SPC7110 { | |
| public: | |
| void init(); | |
| void enable(); | |
| void power(); | |
| void reset(); | |
| unsigned datarom_addr(unsigned addr); | |
| unsigned data_pointer(); | |
| unsigned data_adjust(); | |
| unsigned data_increment(); | |
| void set_data_pointer(unsigned addr); | |
| void set_data_adjust(unsigned addr); | |
| void update_time(int offset = 0); | |
| time_t create_time(); | |
| uint8 mmio_read (unsigned addr); | |
| void mmio_write(unsigned addr, uint8 data); | |
| uint8 read (unsigned addr); | |
| void write(unsigned addr, uint8 data); | |
| //spc7110decomp | |
| void decomp_init(); | |
| uint8 decomp_read(); | |
| SPC7110(); | |
| //================== | |
| //decompression unit | |
| //================== | |
| uint8 r4801; //compression table low | |
| uint8 r4802; //compression table high | |
| uint8 r4803; //compression table bank | |
| uint8 r4804; //compression table index | |
| uint8 r4805; //decompression buffer index low | |
| uint8 r4806; //decompression buffer index high | |
| uint8 r4807; //??? | |
| uint8 r4808; //??? | |
| uint8 r4809; //compression length low | |
| uint8 r480a; //compression length high | |
| uint8 r480b; //decompression control register | |
| uint8 r480c; //decompression status | |
| SPC7110Decomp decomp; | |
| //============== | |
| //data port unit | |
| //============== | |
| uint8 r4811; //data pointer low | |
| uint8 r4812; //data pointer high | |
| uint8 r4813; //data pointer bank | |
| uint8 r4814; //data adjust low | |
| uint8 r4815; //data adjust high | |
| uint8 r4816; //data increment low | |
| uint8 r4817; //data increment high | |
| uint8 r4818; //data port control register | |
| uint8 r481x; | |
| bool r4814_latch; | |
| bool r4815_latch; | |
| //========= | |
| //math unit | |
| //========= | |
| uint8 r4820; //16-bit multiplicand B0, 32-bit dividend B0 | |
| uint8 r4821; //16-bit multiplicand B1, 32-bit dividend B1 | |
| uint8 r4822; //32-bit dividend B2 | |
| uint8 r4823; //32-bit dividend B3 | |
| uint8 r4824; //16-bit multiplier B0 | |
| uint8 r4825; //16-bit multiplier B1 | |
| uint8 r4826; //16-bit divisor B0 | |
| uint8 r4827; //16-bit divisor B1 | |
| uint8 r4828; //32-bit product B0, 32-bit quotient B0 | |
| uint8 r4829; //32-bit product B1, 32-bit quotient B1 | |
| uint8 r482a; //32-bit product B2, 32-bit quotient B2 | |
| uint8 r482b; //32-bit product B3, 32-bit quotient B3 | |
| uint8 r482c; //16-bit remainder B0 | |
| uint8 r482d; //16-bit remainder B1 | |
| uint8 r482e; //math control register | |
| uint8 r482f; //math status | |
| //=================== | |
| //memory mapping unit | |
| //=================== | |
| uint8 r4830; //SRAM write enable | |
| uint8 r4831; //$[d0-df]:[0000-ffff] mapping | |
| uint8 r4832; //$[e0-ef]:[0000-ffff] mapping | |
| uint8 r4833; //$[f0-ff]:[0000-ffff] mapping | |
| uint8 r4834; //??? | |
| unsigned dx_offset; | |
| unsigned ex_offset; | |
| unsigned fx_offset; | |
| //==================== | |
| //real-time clock unit | |
| //==================== | |
| uint8 r4840; //RTC latch | |
| uint8 r4841; //RTC index/data port | |
| uint8 r4842; //RTC status | |
| enum RTC_State { RTCS_Inactive, RTCS_ModeSelect, RTCS_IndexSelect, RTCS_Write } rtc_state; | |
| enum RTC_Mode { RTCM_Linear = 0x03, RTCM_Indexed = 0x0c } rtc_mode; | |
| unsigned rtc_index; | |
| static const unsigned months[12]; | |
| }; | |
| #endif |