2 * BUBBLE CASETTE for FM-8/7? [bubblecasette.h]
4 * Author: K.Ohta <whatisthis.sowhat _at_ gmail.com>
7 * Mar 22, 2016 : Initial
11 #ifndef _VM_FM_BUBBLECASETTE_H_
12 #define _VM_FM_BUBBLECASETTE_H_
15 #include "../device.h"
16 #include "../../common.h"
34 BUBBLE_TYPE_128KB = 1,
46 class BUBBLECASETTE: public DEVICE
53 bool header_changed; // if change header: e.g:change write protection flag.
63 // FD12(RO) : Positive logic
64 bool cmd_error; // bit7 : Command error
65 bool stat_tdra; // bit6: Ready to write.
66 bool stat_rda; // bit5: Ready to read.
67 bool not_ready; // bit4: Not Ready(Slot empty).
69 bool write_protect; // bit2
70 bool stat_error; // bit 1
71 bool stat_busy; // bit 0
73 // FD13(RO): Maybe positive
74 bool eject_error; // bit7
75 bool povr_error; // bit5 : Page over
76 bool crc_error; // bit4
77 bool transfer_error; // bit3
78 bool bad_loop_over_error; // bit2
79 bool no_marker_error; // bit1
80 bool undefined_cmd_error; // bit0
82 //FD14-FD15: Page address register
83 pair_t page_address; // 16bit, Big ENDIAN
84 // FD16-FD17: Page Count Resister
85 pair_t page_count; // 16bit, Big ENDIAN
91 bbl_header_t bbl_header;
92 uint32_t media_offset;
93 uint32_t media_offset_new;
97 uint8_t bubble_data[0x20000]; // MAX 128KB, normally 32KB at FM-8.
98 _TCHAR image_path[_MAX_PATH];
100 void bubble_command(uint8_t cmd);
101 bool read_header(void);
102 void write_header(void);
103 bool read_one_page(void);
104 bool write_one_page(void);
107 BUBBLECASETTE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
110 memset(image_path, 0x00, _MAX_PATH * sizeof(_TCHAR));
112 memset(&bbl_header, 0x00, sizeof(bbl_header_t));
113 memset(bubble_data, 0x00, 0x20000);
114 bubble_inserted = false;
115 read_access = write_access = false;
116 set_device_name(_T("Bubble Cassette"));
124 uint32_t read_io8(uint32_t addr);
125 void write_io8(uint32_t addr, uint32_t data);
127 uint32_t read_signal(int id);
128 void write_signal(int id, uint32_t data, uint32_t mask);
129 void event_callback(int event_id, int err);
130 bool process_state(FILEIO* state_fio, bool loading);
133 void open(_TCHAR* file_path, int bank);
135 bool is_bubble_inserted()
137 return bubble_inserted;
139 bool is_bubble_protected()
141 return write_protect;
143 void set_bubble_protect(bool flag)
145 if(write_protect != flag) {
146 write_protect = flag;
147 header_changed = true;
150 bool get_access_lamp()
152 return (read_access | write_access);