Path: blob/master/libsnes/bsnes/snes/chip/spc7110/spc7110.hpp
2 views
//SPC7110 emulator - version 0.05 (2011-06-27)1//Copyright (c) 2008-2011, byuu and neviksti23class SPC7110 {4public:5uint8* rtc; //[20];6unsigned data_rom_offset;78void init();9void load();10void unload();11void power();12void reset();1314unsigned datarom_addr(unsigned addr);1516unsigned data_pointer();17unsigned data_adjust();18unsigned data_increment();19void set_data_pointer(unsigned addr);20void set_data_adjust(unsigned addr);2122void update_time(int offset = 0);23time_t create_time();2425uint8 mmio_read(unsigned addr);26void mmio_write(unsigned addr, uint8 data);2728uint8 mcu_read(unsigned addr);29void mcu_write(unsigned addr, uint8 data);3031uint8 dcu_read(unsigned);32void dcu_write(unsigned, uint8);3334uint8 ram_read(unsigned addr);35void ram_write(unsigned addr, uint8 data);3637//spc7110decomp38void decomp_init();39uint8 decomp_read();4041void serialize(serializer&);42SPC7110();43~SPC7110();44void initialize();4546private:47//==================48//decompression unit49//==================50uint8 r4801; //compression table low51uint8 r4802; //compression table high52uint8 r4803; //compression table bank53uint8 r4804; //compression table index54uint8 r4805; //decompression buffer index low55uint8 r4806; //decompression buffer index high56uint8 r4807; //???57uint8 r4808; //???58uint8 r4809; //compression length low59uint8 r480a; //compression length high60uint8 r480b; //decompression control register61uint8 r480c; //decompression status6263#include "decomp.hpp"64Decomp decomp;6566//==============67//data port unit68//==============69uint8 r4811; //data pointer low70uint8 r4812; //data pointer high71uint8 r4813; //data pointer bank72uint8 r4814; //data adjust low73uint8 r4815; //data adjust high74uint8 r4816; //data increment low75uint8 r4817; //data increment high76uint8 r4818; //data port control register7778uint8 r481x;7980bool r4814_latch;81bool r4815_latch;8283//=========84//math unit85//=========86uint8 r4820; //16-bit multiplicand B0, 32-bit dividend B087uint8 r4821; //16-bit multiplicand B1, 32-bit dividend B188uint8 r4822; //32-bit dividend B289uint8 r4823; //32-bit dividend B390uint8 r4824; //16-bit multiplier B091uint8 r4825; //16-bit multiplier B192uint8 r4826; //16-bit divisor B093uint8 r4827; //16-bit divisor B194uint8 r4828; //32-bit product B0, 32-bit quotient B095uint8 r4829; //32-bit product B1, 32-bit quotient B196uint8 r482a; //32-bit product B2, 32-bit quotient B297uint8 r482b; //32-bit product B3, 32-bit quotient B398uint8 r482c; //16-bit remainder B099uint8 r482d; //16-bit remainder B1100uint8 r482e; //math control register101uint8 r482f; //math status102103//===================104//memory mapping unit105//===================106uint8 r4830; //SRAM write enable107uint8 r4831; //$[d0-df]:[0000-ffff] mapping108uint8 r4832; //$[e0-ef]:[0000-ffff] mapping109uint8 r4833; //$[f0-ff]:[0000-ffff] mapping110uint8 r4834; //???111112unsigned dx_offset;113unsigned ex_offset;114unsigned fx_offset;115116//====================117//real-time clock unit118//====================119uint8 r4840; //RTC latch120uint8 r4841; //RTC index/data port121uint8 r4842; //RTC status122123enum RTC_State { RTCS_Inactive, RTCS_ModeSelect, RTCS_IndexSelect, RTCS_Write };124enum RTC_Mode { RTCM_Linear = 0x03, RTCM_Indexed = 0x0c };125unsigned rtc_state;126unsigned rtc_mode;127unsigned rtc_index;128129static const unsigned months[12];130};131132extern SPC7110 spc7110;133134135