2 NEC PC-9801 Emulator 'ePC-9801'
3 NEC PC-9801E/F/M Emulator 'ePC-9801E'
5 Author : Takeda.Toshiya
16 void CMT::initialize()
19 play = rec = remote = false;
31 play = rec = remote = false;
34 void CMT::write_io8(uint32_t addr, uint32_t data)
39 remote = ((data & 0x20) != 0);
44 void CMT::write_signal(int id, uint32_t data, uint32_t mask)
46 if(id == SIG_CMT_OUT) {
49 buffer[bufcnt++] = data & mask;
50 if(bufcnt >= BUFFER_SIZE) {
51 fio->Fwrite(buffer, bufcnt, 1);
58 void CMT::play_tape(const _TCHAR* file_path)
62 if(fio->Fopen(file_path, FILEIO_READ_BINARY)) {
63 fio->Fseek(0, FILEIO_SEEK_END);
64 int size = (fio->Ftell() + 9) & (BUFFER_SIZE - 1);
65 fio->Fseek(0, FILEIO_SEEK_SET);
66 memset(buffer, 0, sizeof(buffer));
67 fio->Fread(buffer, sizeof(buffer), 1);
70 // this implement does not care the sio buffer size... :-(
71 for(int i = 0; i < size; i++) {
72 d_sio->write_signal(SIG_I8251_RECV, buffer[i], 0xff);
78 void CMT::rec_tape(const _TCHAR* file_path)
82 if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) {
88 void CMT::close_tape()
94 d_sio->write_signal(SIG_I8251_CLEAR, 0, 0);
97 void CMT::release_tape()
101 fio->Fwrite(buffer, bufcnt, 1);
109 #define STATE_VERSION 1
111 bool CMT::process_state(FILEIO* state_fio, bool loading)
113 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
116 if(!state_fio->StateCheckInt32(this_device_id)) {
119 state_fio->StateInt32(bufcnt);
120 state_fio->StateBuffer(buffer, sizeof(buffer), 1);
121 state_fio->StateBool(play);
122 state_fio->StateBool(rec);
123 state_fio->StateBool(remote);