OSDN Git Service

[VM][Qt][UI][EMU][WIP] Use EMU_TEMPLATE:: instead of EMU:: . Some VMs are not apply...
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmr50 / bios.h
1 /*
2         FUJITSU FMR-30 Emulator 'eFMR-30'
3         FUJITSU FMR-50 Emulator 'eFMR-50'
4         FUJITSU FMR-60 Emulator 'eFMR-60'
5
6         Author : Takeda.Toshiya
7         Date   : 2008.10.06 -
8
9         [ bios ]
10 */
11
12 #ifndef _BIOS_H_
13 #define _BIOS_H_
14
15 #include "../vm.h"
16 #include "../../emu.h"
17 #include "../device.h"
18
19 class DISK;
20 class HARDDISK;
21
22 namespace FMR50 {
23
24 class BIOS : public DEVICE
25 {
26 private:
27         DEVICE *d_mem, *d_io;
28         DISK *disk[MAX_DRIVE];
29         HARDDISK *harddisk[USE_HARD_DISK];
30         
31         // pseudo bios
32         uint8_t *cmos, *vram, *cvram;
33 #ifdef _FMR60
34         uint8_t *avram;
35 #else
36         uint8_t *kvram;
37 #endif
38         int secnum, timeout;
39         
40         // disk bios
41         bool access_fdd[MAX_DRIVE];
42         uint8_t  drive_mode1[MAX_DRIVE];
43         uint16_t drive_mode2[MAX_DRIVE];
44         int scsi_blocks[USE_HARD_DISK];
45         
46 public:
47         BIOS(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu) {
48                 for(int i = 0; i < MAX_DRIVE; i++) disk[i] = NULL;
49                 //for(int i = 0; i < USE_HARD_DISK; i++) harddisk[i] = NULL;
50                 set_device_name(_T("Pseudo BIOS"));
51         }
52         ~BIOS() {}
53         
54         // common functions
55         void initialize();
56         void reset();
57         void event_frame();
58         bool bios_call_far_i86(uint32_t PC, uint16_t regs[], const uint16_t sregs[], int32_t* ZeroFlag, int32_t* CarryFlag, int* cycles, uint64_t* total_cycles);
59         bool bios_call_far_ia32(uint32_t PC, uint32_t regs[], const uint16_t sregs[], int32_t* ZeroFlag, int32_t* CarryFlag, int* cycles, uint64_t* total_cycles);
60         bool bios_int_i86(int intnum, uint16_t regs[], const uint16_t sregs[], int32_t* ZeroFlag, int32_t* CarryFlag, int* cycles, uint64_t* total_cycles);
61         bool bios_int_ia32(int intnum, uint32_t regs[], const uint16_t sregs[], int32_t* ZeroFlag, int32_t* CarryFlag, int* cycles, uint64_t* total_cycles);
62         uint32_t __FASTCALL read_signal(int ch);
63         bool process_state(FILEIO* state_fio, bool loading);
64         
65         // unique functions
66         void set_context_mem(DEVICE* device)
67         {
68                 d_mem = device;
69         }
70         void set_context_io(DEVICE* device)
71         {
72                 d_io = device;
73         }
74         void set_floppy_disk_handler(int drv, DISK* device)
75         {
76                 disk[drv] = device;
77         }
78         void set_hard_disk_handler(int drv, HARDDISK* device)
79         {
80                 harddisk[drv] = device;
81         }
82         void set_cmos_ptr(uint8_t* ptr)
83         {
84                 cmos = ptr;
85         }
86         void set_vram_ptr(uint8_t* ptr)
87         {
88                 vram = ptr;
89         }
90         void set_cvram_ptr(uint8_t* ptr)
91         {
92                 cvram = ptr;
93         }
94 #ifdef _FMR60
95         void set_avram_ptr(uint8_t* ptr)
96         {
97                 avram = ptr;
98         }
99 #else
100         void set_kvram_ptr(uint8_t* ptr)
101         {
102                 kvram = ptr;
103         }
104 #endif
105 };
106
107 }
108
109 #endif
110