OSDN Git Service

[VM][STATE] Apply new framework to some VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc6001 / floppy.h
index aa206dd..e2c3d8c 100644 (file)
-//\r
-// PC-6001/6601 disk I/O\r
-// This file is based on a disk I/O program in C++\r
-// by Mr. Yumitaro and translated into C for Cocoa iP6\r
-// by Koichi NISHIDA 2006\r
-//\r
-\r
-/*\r
-       NEC PC-6601 Emulator 'yaPC-6601'\r
-       NEC PC-6601SR Emulator 'yaPC-6801'\r
-\r
-       Author : tanam\r
-       Date   : 2013.07.15-\r
-\r
-       [ internal floppy drive ]\r
-*/\r
-\r
-#ifndef _FLOPPY_H_\r
-#define _FLOPPY_H_\r
-\r
-#include "../vm.h"\r
-#include "../../emu.h"\r
-#include "../device.h"\r
-\r
-class DISK;\r
-\r
-class FLOPPY : public DEVICE\r
-{\r
-private:\r
-       DEVICE *d_ext;\r
-       unsigned char io_B1H;\r
-       \r
-       DISK* disk[2];\r
-       \r
-       int cur_trk[2];\r
-       int cur_sct[2];\r
-       int cur_pos[2];\r
-       bool access[2];\r
-       \r
-       int Seek88(int drvno, int trackno, int sectno);\r
-       unsigned char Getc88(int drvno);\r
-       int Putc88(int drvno, unsigned char dat);\r
-       \r
-       // data buffer (256BytesX4)\r
-       unsigned char Data[4][256];\r
-       int Index[4];\r
-       \r
-       typedef struct {\r
-               unsigned char Data[10];\r
-               int Index;\r
-       } CmdBuffer;\r
-       \r
-       CmdBuffer CmdIn;                                        // command buffer\r
-       CmdBuffer CmdOut;                               // status buffer\r
-       unsigned char SeekST0;                  // ST0 when SEEK\r
-       unsigned char LastCylinder;             // last read cylinder\r
-       int SeekEnd;                                            // complete seek flag\r
-       unsigned char SendSectors;              // amount(100H unit)\r
-       int DIO;                                                        // data direction TRUE: Buffer->CPU FALSE: CPU->Buffer\r
-       unsigned char Status;                   // FDC status register\r
-       \r
-       void Push(int part, unsigned char data);\r
-       unsigned char Pop(int part);\r
-       void Clear(int i);\r
-       \r
-       int DiskInit66(void);\r
-       void PushStatus(int data);\r
-       unsigned char PopStatus();\r
-       void OutFDC(unsigned char data);\r
-       unsigned char InFDC();\r
-       void Read();\r
-       void Write(void);\r
-       void Seek(void);\r
-       void SenseInterruptStatus(void);\r
-       void Exec();\r
-       \r
-       void OutB1H_66(unsigned char data);\r
-       void OutB2H_66(unsigned char data);\r
-       void OutB3H_66(unsigned char data);\r
-       void OutD0H_66(unsigned char data);\r
-       void OutD1H_66(unsigned char data);\r
-       void OutD2H_66(unsigned char data);\r
-       void OutD3H_66(unsigned char data);\r
-       void OutD6H_66(unsigned char data);\r
-       void OutD8H_66(unsigned char data);\r
-       void OutDAH_66(unsigned char data);\r
-       void OutDDH_66(unsigned char data);\r
-       void OutDEH_66(unsigned char data);\r
-       \r
-       unsigned char InB2H_66();\r
-       unsigned char InD0H_66();\r
-       unsigned char InD1H_66();\r
-       unsigned char InD2H_66();\r
-       unsigned char InD3H_66();\r
-       unsigned char InD4H_66();\r
-       unsigned char InDCH_66();\r
-       unsigned char InDDH_66();\r
-       \r
-public:\r
-       FLOPPY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
-       ~FLOPPY() {}\r
-       \r
-       // common functions\r
-       void initialize();\r
-       void release();\r
-       void reset();\r
-       void write_io8(uint32 addr, uint32 data);\r
-       uint32 read_io8(uint32 addr);\r
-       uint32 read_signal(int ch);\r
-       \r
-       // unique functiosn\r
-       void set_context_ext(DEVICE* device)\r
-       {\r
-               d_ext = device;\r
-       }\r
-       void open_disk(int drv, _TCHAR* file_path, int offset);\r
-       void close_disk(int drv);\r
-       bool disk_inserted(int drv);\r
-};\r
-\r
-#endif\r
-\r
+//
+// PC-6001/6601 disk I/O
+// This file is based on a disk I/O program in C++
+// by Mr. Yumitaro and translated into C for Cocoa iP6
+// by Koichi NISHIDA 2006
+//
+
+/*
+       NEC PC-6601 Emulator 'yaPC-6601'
+       NEC PC-6601SR Emulator 'yaPC-6801'
+
+       Author : tanam
+       Date   : 2013.07.15-
+
+       [ internal floppy drive ]
+*/
+
+#ifndef _FLOPPY_H_
+#define _FLOPPY_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+class DISK;
+class NOISE;
+
+class FLOPPY : public DEVICE
+{
+private:
+       DEVICE *d_ext;
+       NOISE *d_noise_seek;
+//     NOISE* d_noise_head_down;
+//     NOISE* d_noise_head_up;
+       unsigned char io_B1H;
+       
+       DISK* disk[2];
+       
+       int cur_trk[2];
+       int cur_sct[2];
+       int cur_pos[2];
+       bool access[2];
+       
+       int Seek88(int drvno, int trackno, int sectno);
+       unsigned char Getc88(int drvno);
+       int Putc88(int drvno, unsigned char dat);
+       
+       // data buffer (256BytesX4)
+       unsigned char Data[4][256];
+       int Index[4];
+       
+       typedef struct {
+               unsigned char Data[10];
+               int Index;
+       } CmdBuffer;
+       
+       CmdBuffer CmdIn;                                        // command buffer
+       CmdBuffer CmdOut;                               // status buffer
+       unsigned char SeekST0;                  // ST0 when SEEK
+       unsigned char LastCylinder;             // last read cylinder
+       int SeekEnd;                                            // complete seek flag
+       unsigned char SendSectors;              // amount(100H unit)
+       int DIO;                                                        // data direction TRUE: Buffer->CPU FALSE: CPU->Buffer
+       unsigned char Status;                   // FDC status register
+       
+       void Push(int part, unsigned char data);
+       unsigned char Pop(int part);
+       void Clear(int i);
+       
+       int DiskInit66(void);
+       void PushStatus(int data);
+       unsigned char PopStatus();
+       void OutFDC(unsigned char data);
+       unsigned char InFDC();
+       void Read();
+       void Write(void);
+       void Seek(void);
+       void SenseInterruptStatus(void);
+       void Exec();
+       
+       void OutB1H_66(unsigned char data);
+       void OutB2H_66(unsigned char data);
+       void OutB3H_66(unsigned char data);
+       void OutD0H_66(unsigned char data);
+       void OutD1H_66(unsigned char data);
+       void OutD2H_66(unsigned char data);
+       void OutD3H_66(unsigned char data);
+       void OutD6H_66(unsigned char data);
+       void OutD8H_66(unsigned char data);
+       void OutDAH_66(unsigned char data);
+       void OutDDH_66(unsigned char data);
+       void OutDEH_66(unsigned char data);
+       
+       unsigned char InB2H_66();
+       unsigned char InD0H_66();
+       unsigned char InD1H_66();
+       unsigned char InD2H_66();
+       unsigned char InD3H_66();
+       unsigned char InD4H_66();
+       unsigned char InDCH_66();
+       unsigned char InDDH_66();
+       
+public:
+       FLOPPY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               d_noise_seek = NULL;
+//             d_noise_head_down = NULL;
+//             d_noise_head_up = NULL;
+               set_device_name(_T("Floppy Drive"));
+       }
+       ~FLOPPY() {}
+       
+       // common functions
+       void initialize();
+       void release();
+       void reset();
+       void write_io8(uint32_t addr, uint32_t data);
+       uint32_t read_io8(uint32_t addr);
+       uint32_t read_signal(int ch);
+       void update_config();
+       bool process_state(FILEIO* state_fio, bool loading);
+       
+       // unique functions
+       void set_context_ext(DEVICE* device)
+       {
+               d_ext = device;
+       }
+       void set_context_noise_seek(NOISE* device)
+       {
+               d_noise_seek = device;
+       }
+       NOISE* get_context_noise_seek()
+       {
+               return d_noise_seek;
+       }
+//     void set_context_noise_head_down(NOISE* device)
+//     {
+//             d_noise_head_down = device;
+//     }
+//     NOISE* get_context_noise_head_down()
+//     {
+//             return d_noise_head_down;
+//     }
+//     void set_context_noise_head_up(NOISE* device)
+//     {
+//             d_noise_head_up = device;
+//     }
+//     NOISE* get_context_noise_head_up()
+//     {
+//             return d_noise_head_up;
+//     }
+       DISK* get_disk_handler(int drv)
+       {
+               return disk[drv];
+       }
+       void open_disk(int drv, const _TCHAR* file_path, int bank);
+       void close_disk(int drv);
+       bool is_disk_inserted(int drv);
+       void is_disk_protected(int drv, bool value);
+       bool is_disk_protected(int drv);
+};
+
+#endif
+