00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00132 #if !defined(INCLUDED_ALIM1543C_H_)
00133 #define INCLUDED_ALIM1543C_H
00134
00135 #include "PCIDevice.h"
00136
00148 class CAliM1543C : public CPCIDevice, public Poco::Runnable
00149 {
00150 public:
00151 virtual int SaveState(FILE* f);
00152 virtual int RestoreState(FILE* f);
00153
00154
00155
00156 virtual void run();
00157 virtual void check_state();
00158 virtual void WriteMem_Legacy(int index, u32 address, int dsize, u32 data);
00159 virtual u32 ReadMem_Legacy(int index, u32 address, int dsize);
00160
00161 void do_pit_clock();
00162
00163 CAliM1543C(CConfigurator* cfg, class CSystem* c, int pcibus, int pcidev);
00164 virtual ~CAliM1543C();
00165 void pic_interrupt(int index, int intno);
00166 void pic_deassert(int index, int intno);
00167
00168 void init();
00169 void start_threads();
00170 void stop_threads();
00171 private:
00172 Poco::Thread * myThread;
00173 CMutex* myRegLock;
00174 bool StopThread;
00175
00176
00177 u8 reg_61_read();
00178 void reg_61_write(u8 data);
00179
00180
00181 u8 toy_read(u32 address);
00182 void toy_write(u32 address, u8 data);
00183
00184
00185 u8 pit_read(u32 address);
00186 void pit_write(u32 address, u8 data);
00187 void pit_clock();
00188
00189
00190 u8 pic_read(int index, u32 address);
00191 void pic_write(int index, u32 address, u8 data);
00192 u8 pic_read_vector();
00193 u8 pic_read_edge_level(int index);
00194 void pic_write_edge_level(int index, u8 data);
00195
00196
00197 u8 lpt_read(u32 address);
00198 void lpt_write(u32 address, u8 data);
00199 void lpt_reset();
00200
00202 struct SAli_state
00203 {
00204
00205
00206 u8 reg_61;
00207
00208
00209 u8 toy_stored_data[256];
00210 u8 toy_access_ports[4];
00211
00212
00213 u32 pit_counter[9];
00214 #define PIT_OFFSET_LATCH 3
00215 #define PIT_OFFSET_MAX 6
00216 u8 pit_status[4];
00217 u8 pit_mode[4];
00218
00219
00220 int pic_mode[2];
00221 u8 pic_intvec[2];
00222 u8 pic_mask[2];
00223 u8 pic_asserted[2];
00224 u8 pic_edge_level[2];
00225
00226 u8 lpt_data;
00227 u8 lpt_control;
00228 u8 lpt_status;
00229 bool lpt_init;
00230 } state;
00231
00232 FILE* lpt;
00233 };
00234
00235 extern CAliM1543C* theAli;
00236 #endif // !defined(INCLUDED_ALIM1543C_H)