OSDN Git Service

[General] Completely merge upstream 2019-01-11.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc6031.h
1 //
2 // PC-6001/6601 disk I/O
3 // This file is based on a disk I/O program in C++
4 // by Mr. Yumitaro and translated into C for Cocoa iP6
5 // by Koichi NISHIDA 2006
6 //
7
8 /*
9         Skelton for retropc emulator
10
11         Author : Takeda.Toshiya
12         Origin : tanam
13         Date   : 2014.05.21-
14
15         [ PC-6031 ]
16 */
17
18 #ifndef _PC6031_H_
19 #define _PC6031_H_
20
21 //#include "vm.h"
22 //#include "../emu.h"
23 #include "device.h"
24
25 class DISK;
26 class NOISE;
27
28 class PC6031 : public DEVICE
29 {
30 private:
31         DISK* disk[2];
32         NOISE* d_noise_seek;
33 //      NOISE* d_noise_head_down;
34 //      NOISE* d_noise_head_up;
35         
36         int cur_trk[2];
37         int cur_sct[2];
38         int cur_pos[2];
39         bool access[2];
40         
41         int Seek88(int drvno, int trackno, int sectno);
42         unsigned char Getc88(int drvno);
43         int Putc88(int drvno, unsigned char dat);
44         
45         typedef struct {
46                 int ATN;                                // attention
47                 int DAC;                                // data accepted
48                 int RFD;                                // ready for data
49                 int DAV;                                // data valid
50                 int command;                    // received command
51                 int step;                               // status for waiting parameter
52                 int blk;                                // block number
53                 int drv;                                // drive number - 1
54                 int trk;                                // track number
55                 int sct;                                // sector number
56                 int size;                               // byte number to process
57                 unsigned char retdat;   // return from port D0H
58         } DISK60;
59         
60         DISK60 mdisk;
61         unsigned char io_D1H;
62         unsigned char io_D2H, old_D2H;
63         unsigned char io_D3H;
64         int DrvNum;
65         
66         unsigned char FddIn60();
67         void FddOut60(unsigned char dat);
68         unsigned char FddCntIn60(void);
69         void FddCntOut60(unsigned char dat);
70         
71         void OutD1H_60(unsigned char data);
72         void OutD2H_60(unsigned char data);
73         void OutD3H_60(unsigned char data);
74         
75         unsigned char InD0H_60();
76         unsigned char InD1H_60();
77         unsigned char InD2H_60();
78         unsigned char InD3H_60();
79         
80 public:
81         PC6031(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
82         {
83                 d_noise_seek = NULL;
84 //              d_noise_head_down = NULL;
85 //              d_noise_head_up = NULL;
86                 set_device_name(_T("Pseudo PC-6031 FDD"));
87         }
88         ~PC6031() {}
89         
90         // common functions
91         void initialize();
92         void release();
93         void write_io8(uint32_t addr, uint32_t data);
94         uint32_t read_io8(uint32_t addr);
95         uint32_t read_signal(int ch);
96         void update_config();
97         bool process_state(FILEIO* state_fio, bool loading);
98         
99         // unique functions
100         void set_context_noise_seek(NOISE* device)
101         {
102                 d_noise_seek = device;
103         }
104         NOISE* get_context_noise_seek()
105         {
106                 return d_noise_seek;
107         }
108 //      void set_context_noise_head_down(NOISE* device)
109 //      {
110 //              d_noise_head_down = device;
111 //      }
112 //      NOISE* get_context_noise_head_down()
113 //      {
114 //              return d_noise_head_down;
115 //      }
116 //      void set_context_noise_head_up(NOISE* device)
117 //      {
118 //              d_noise_head_up = device;
119 //      }
120 //      NOISE* get_context_noise_head_up()
121 //      {
122 //              return d_noise_head_up;
123 //      }
124         DISK* get_disk_handler(int drv)
125         {
126                 return disk[drv];
127         }
128         void open_disk(int drv, const _TCHAR* file_path, int bank);
129         void close_disk(int drv);
130         bool is_disk_inserted(int drv);
131         bool disk_ejected(int drv);
132         void is_disk_protected(int drv, bool value);
133         bool is_disk_protected(int drv);
134 };
135
136 #endif
137