2 Skelton for retropc emulator
\r
4 Author : Takeda.Toshiya
\r
7 [ win32 emulation i/f ]
\r
14 #define DIRECTSOUND_VERSION 0x900
\r
15 #define DIRECT3D_VERSION 0x900
\r
18 //#define _DEBUG_LOG
\r
20 // output fdc debug log
\r
21 // #define _FDC_DEBUG_LOG
\r
22 // output i/o debug log
\r
23 // #define _IO_DEBUG_LOG
\r
26 #if defined(_USE_AGAR)
\r
27 # include <SDL/SDL.h>
\r
28 # include <agar/core.h>
\r
29 # include <agar/gui.h>
\r
30 # include "simd_types.h"
\r
31 // Wrapper of WIN32->*nix
\r
34 #define _MAX_PATH AG_PATHNAME_MAX
\r
37 #elif defined(_USE_QT)
\r
38 # include <SDL/SDL.h>
\r
39 # include "menuclasses.h"
\r
40 # include "qt_gldraw.h"
\r
41 # include "emu_utils.h"
\r
42 # include "qt_main.h"
\r
43 # include "simd_types.h"
\r
44 // Wrapper of WIN32->*nix
\r
48 #define _MAX_PATH MAX_PATH
\r
50 #define MAX_PATH 2048
\r
51 #define _MAX_PATH 2048
\r
56 #include <windows.h>
\r
57 #include <windowsx.h>
\r
58 #include <mmsystem.h>
\r
59 #include <process.h>
\r
61 #endif // _USE_WIN32
\r
68 #if defined(USE_FD1)
\r
69 #include "vm/disk.h"
\r
72 #if defined(_USE_AGAR)
\r
73 #include "agar_input.h"
\r
74 #elif defined(_USE_QT)
\r
75 #include "qt_input.h"
\r
78 #if defined(_USE_AGAR) || defined(_USE_QT)
\r
79 # define WM_RESIZE 1
\r
80 #define WM_SOCKET0 2
\r
81 #define WM_SOCKET1 3
\r
82 #define WM_SOCKET2 4
\r
83 #define WM_SOCKET3 5
\r
85 #define WM_RESIZE (WM_USER + 1)
\r
86 #define WM_SOCKET0 (WM_USER + 2)
\r
87 #define WM_SOCKET1 (WM_USER + 3)
\r
88 #define WM_SOCKET2 (WM_USER + 4)
\r
89 #define WM_SOCKET3 (WM_USER + 5)
\r
92 #if defined(USE_LASER_DISC) || defined(USE_VIDEO_CAPTURE)
\r
93 #define USE_DIRECT_SHOW
\r
96 #ifdef USE_VIDEO_CAPTURE
\r
97 #define MAX_CAPTURE_DEVS 8
\r
100 #ifndef SCREEN_WIDTH_ASPECT
\r
101 #define SCREEN_WIDTH_ASPECT SCREEN_WIDTH
\r
103 #ifndef SCREEN_HEIGHT_ASPECT
\r
104 #define SCREEN_HEIGHT_ASPECT SCREEN_HEIGHT
\r
106 #ifndef WINDOW_WIDTH
\r
107 #define WINDOW_WIDTH SCREEN_WIDTH_ASPECT
\r
109 #ifndef WINDOW_HEIGHT
\r
110 #define WINDOW_HEIGHT SCREEN_HEIGHT_ASPECT
\r
113 #if defined(_USE_AGAR) || defined(_USE_SDL) || defined(_USE_QT)
\r
116 Sint16 **pSoundBuf;
\r
120 SDL_sem **pSndApplySem;
\r
121 Uint8 *iTotalVolume;
\r
127 #pragma comment(lib, "d3d9.lib")
\r
128 #pragma comment(lib, "d3dx9.lib")
\r
131 #include <d3d9types.h>
\r
133 #include <dsound.h>
\r
136 #ifdef USE_DIRECT_SHOW
\r
137 #pragma comment(lib, "strmiids.lib")
\r
139 //#include <qedit.h>
\r
140 EXTERN_C const CLSID CLSID_SampleGrabber;
\r
141 EXTERN_C const CLSID CLSID_NullRenderer;
\r
142 EXTERN_C const IID IID_ISampleGrabberCB;
\r
143 MIDL_INTERFACE("0579154A-2B53-4994-B0D0-E773148EFF85")
\r
144 ISampleGrabberCB : public IUnknown {
\r
146 virtual HRESULT STDMETHODCALLTYPE SampleCB( double SampleTime,IMediaSample *pSample) = 0;
\r
147 virtual HRESULT STDMETHODCALLTYPE BufferCB( double SampleTime,BYTE *pBuffer,long BufferLen) = 0;
\r
149 EXTERN_C const IID IID_ISampleGrabber;
\r
150 MIDL_INTERFACE("6B652FFF-11FE-4fce-92AD-0266B5D7C78F")
\r
151 ISampleGrabber : public IUnknown {
\r
153 virtual HRESULT STDMETHODCALLTYPE SetOneShot( BOOL OneShot) = 0;
\r
154 virtual HRESULT STDMETHODCALLTYPE SetMediaType( const AM_MEDIA_TYPE *pType) = 0;
\r
155 virtual HRESULT STDMETHODCALLTYPE GetConnectedMediaType( AM_MEDIA_TYPE *pType) = 0;
\r
156 virtual HRESULT STDMETHODCALLTYPE SetBufferSamples( BOOL BufferThem) = 0;
\r
157 virtual HRESULT STDMETHODCALLTYPE GetCurrentBuffer( /* [out][in] */ long *pBufferSize,/* [out] */ long *pBuffer) = 0;
\r
158 virtual HRESULT STDMETHODCALLTYPE GetCurrentSample( /* [retval][out] */ IMediaSample **ppSample) = 0;
\r
159 virtual HRESULT STDMETHODCALLTYPE SetCallback( ISampleGrabberCB *pCallback,long WhichMethodToCallback) = 0;
\r
164 #ifdef USE_LASER_DISC
\r
165 class CMySampleGrabberCB : public ISampleGrabberCB {
\r
169 CMySampleGrabberCB(VM *vm_ptr)
\r
173 STDMETHODIMP_(ULONG) AddRef()
\r
177 STDMETHODIMP_(ULONG) Release()
\r
181 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
\r
183 if(riid == IID_ISampleGrabberCB || riid == IID_IUnknown) {
\r
184 *ppv = (void *) static_cast<ISampleGrabberCB*>(this);
\r
187 return E_NOINTERFACE;
\r
189 STDMETHODIMP SampleCB(double SampleTime, IMediaSample *pSample)
\r
193 STDMETHODIMP BufferCB(double dblSampleTime, BYTE *pBuffer, long lBufferSize)
\r
195 vm->movie_sound_callback(pBuffer, lBufferSize);
\r
204 # if defined(_USE_AGAR) || defined(_USE_SDL)
\r
205 # elif defined(_USE_QT)
\r
207 # include <winsock.h>
\r
211 // check memory leaks
\r
213 #define _CRTDBG_MAP_ALLOC
\r
214 #include <crtdbg.h>
\r
215 #define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
\r
216 #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
\r
220 #define MAX_D88_BANKS 64
\r
224 #define SOCKET_MAX 4
\r
225 #define SOCKET_BUFFER_MAX 0x100000
\r
234 #if defined(_USE_AGAR) || defined(_USE_QT)
\r
235 typedef Uint32 scrntype;
\r
237 typedef struct video_thread_t {
\r
238 PAVISTREAM pAVICompressed;
\r
239 scrntype* lpBmpSource;
\r
240 LPBITMAPINFOHEADER pbmInfoHeader;
\r
241 DWORD dwAVIFileSize;
\r
248 #ifdef USE_DEBUGGER
\r
249 typedef struct debugger_thread_t {
\r
254 bool request_terminate;
\r
255 } debugger_thread_t;
\r
263 #if defined(_USE_AGAR) || (_USE_SDL) || defined(_USE_QT)
\r
264 SDL_sem *pVMSemaphore; // To be thread safed.
\r
267 // ----------------------------------------
\r
269 // ----------------------------------------
\r
270 void initialize_input();
\r
271 void release_input();
\r
272 void update_input();
\r
274 uint8 keycode_conv[256];
\r
275 uint8 key_status[256]; // windows key code mapping
\r
276 #ifdef USE_SHIFT_NUMPAD_KEY
\r
277 uint8 key_converted[256];
\r
278 bool key_shift_pressed, key_shift_released;
\r
282 uint32 joy_status[2]; // joystick #1, #2 (b0 = up, b1 = down, b2 = left, b3 = right, b4- = buttons
\r
284 uint32 joy_mask[2];
\r
286 int mouse_status[3]; // x, y, button (b0 = left, b1 = right)
\r
287 bool mouse_enabled;
\r
289 #ifdef USE_AUTO_KEY
\r
290 FIFO* autokey_buffer;
\r
291 int autokey_phase, autokey_shift;
\r
294 // ----------------------------------------
\r
296 // ----------------------------------------
\r
297 void initialize_screen();
\r
298 void release_screen();
\r
299 #if !defined(_USE_AGAR) && !defined(_USE_SDL) && !defined(_USE_QT)
\r
300 void create_dib_section(HDC hdc, int width, int height, HDC *hdcDib, HBITMAP *hBmp, HBITMAP *hOldBmp, LPBYTE *lpBuf, scrntype **lpBmp, LPBITMAPINFO *lpDib);
\r
303 int screen_width, screen_height;
\r
304 int screen_width_aspect, screen_height_aspect;
\r
305 int window_width, window_height;
\r
306 int display_width, display_height;
\r
307 bool screen_size_changed;
\r
309 #if defined(_USE_AGAR)
\r
311 #elif defined(_USE_QT)
\r
315 scrntype* lpBmpSource;
\r
316 LPBITMAPINFO lpDibSource;
\r
317 LPBITMAPINFOHEADER pbmInfoHeader;
\r
320 int source_width, source_height;
\r
321 int source_width_aspect, source_height_aspect;
\r
322 int stretched_width, stretched_height;
\r
323 int stretch_pow_x, stretch_pow_y;
\r
324 int screen_dest_x, screen_dest_y;
\r
325 bool stretch_screen;
\r
328 bool first_draw_screen;
\r
329 bool first_invalidate;
\r
330 bool self_invalidate;
\r
333 #if defined(_USE_AGAR) || defined(_USE_SDL) || defined(_USE_QT)
\r
335 #ifdef USE_SCREEN_ROTATE
\r
341 bool render_to_SDLFB;
\r
344 bool render_with_OpenCL;
\r
345 bool single_window;
\r
348 QImage *pPseudoVram;
\r
350 Uint32 *pPseudoVram;
\r
354 _TCHAR video_file_name[_MAX_PATH];
\r
356 _TCHAR video_file_name[AG_PATHNAME_MAX];
\r
359 double rec_video_run_frames;
\r
360 double rec_video_frames;
\r
362 // LPBITMAPINFO lpDibRec;
\r
363 // PAVIFILE pAVIFile;
\r
364 // PAVISTREAM pAVIStream;
\r
365 // PAVISTREAM pAVICompressed;
\r
366 // AVICOMPRESSOPTIONS opts;
\r
367 // DWORD dwAVIFileSize;
\r
368 // LONG lAVIFrames;
\r
371 // HBITMAP hBmpRec, hOldBmpRec;
\r
372 // LPBYTE lpBufRec;
\r
373 // scrntype* lpBmpRec;
\r
375 bool use_video_thread;
\r
376 #if defined(_USE_QT)
\r
378 AG_Thread hVideoThread;
\r
380 //video_thread_t video_thread_param;
\r
382 // ----------------------------------------
\r
384 // ----------------------------------------
\r
385 void initialize_sound();
\r
386 void release_sound();
\r
387 void update_sound(int* extra_frames);
\r
388 //void AudioCallbackSDL(void *udata, Uint8 *stream, int len);
\r
390 sdl_snddata_t snddata;
\r
391 int sound_rate, sound_samples;
\r
392 bool sound_ok, sound_started, now_mute;
\r
393 SDL_AudioSpec SndSpecReq, SndSpecPresented;
\r
394 //Uint8 iTotalVolume;
\r
399 #if defined(_USE_QT)
\r
400 _TCHAR sound_file_name[_MAX_PATH];
\r
402 _TCHAR sound_file_name[AG_PATHNAME_MAX];
\r
406 int rec_buffer_ptr;
\r
410 HBITMAP hBmp, hOldBmp;
\r
413 LPBITMAPINFO lpDib;
\r
415 #ifdef USE_SCREEN_ROTATE
\r
418 HBITMAP hBmpRotate, hOldBmpRotate;
\r
419 LPBYTE lpBufRotate;
\r
420 scrntype* lpBmpRotate;
\r
421 LPBITMAPINFO lpDibRotate;
\r
425 HDC hdcDibStretch1;
\r
426 HBITMAP hBmpStretch1, hOldBmpStretch1;
\r
427 LPBYTE lpBufStretch1;
\r
428 scrntype* lpBmpStretch1;
\r
429 LPBITMAPINFO lpDibStretch1;
\r
431 HDC hdcDibStretch2;
\r
432 HBITMAP hBmpStretch2, hOldBmpStretch2;
\r
433 LPBYTE lpBufStretch2;
\r
434 scrntype* lpBmpStretch2;
\r
435 LPBITMAPINFO lpDibStretch2;
\r
438 LPDIRECT3D9 lpd3d9;
\r
439 LPDIRECT3DDEVICE9 lpd3d9Device;
\r
440 LPDIRECT3DSURFACE9 lpd3d9Surface;
\r
441 LPDIRECT3DSURFACE9 lpd3d9OffscreenSurface;
\r
442 scrntype *lpd3d9Buffer;
\r
443 bool render_to_d3d9Buffer;
\r
447 _TCHAR video_file_name[_MAX_PATH];
\r
449 double rec_video_run_frames;
\r
450 double rec_video_frames;
\r
453 #if defined(_USE_AGAR) || defined(_USE_SDL) || defined(_USE_QT)
\r
455 LPBITMAPINFO lpDibRec;
\r
457 PAVISTREAM pAVIStream;
\r
458 PAVISTREAM pAVICompressed;
\r
459 AVICOMPRESSOPTIONS opts;
\r
460 DWORD dwAVIFileSize;
\r
464 HBITMAP hBmpRec, hOldBmpRec;
\r
466 scrntype* lpBmpRec;
\r
468 bool use_video_thread;
\r
469 HANDLE hVideoThread;
\r
470 video_thread_t video_thread_param;
\r
472 void initialize_sound();
\r
473 void release_sound();
\r
474 void update_sound(int* extra_frames);
\r
476 int sound_rate, sound_samples;
\r
477 bool sound_ok, sound_started, now_mute;
\r
482 // ----------------------------------------
\r
484 // ----------------------------------------
\r
485 #if defined(_USE_AGAR) || defined(_USE_QT)
\r
488 LPDIRECTSOUND lpds;
\r
489 LPDIRECTSOUNDBUFFER lpdsb, lpdsp;
\r
493 _TCHAR sound_file_name[_MAX_PATH];
\r
496 int rec_buffer_ptr;
\r
500 #if defined(_USE_AGAR)
\r
501 // ----------------------------------------
\r
503 // ----------------------------------------
\r
504 void initialize_display_agar();
\r
505 void release_display_agar();
\r
506 #elif defined(_USE_QT)
\r
508 #ifdef USE_DIRECT_SHOW
\r
509 // ----------------------------------------
\r
511 // ----------------------------------------
\r
512 void initialize_direct_show();
\r
513 void release_direct_show();
\r
514 void create_direct_show_dib_section();
\r
515 void release_direct_show_dib_section();
\r
517 IGraphBuilder *pGraphBuilder;
\r
518 IBaseFilter *pVideoBaseFilter;
\r
519 IBaseFilter *pCaptureBaseFilter;
\r
520 ICaptureGraphBuilder2 *pCaptureGraphBuilder2;
\r
521 ISampleGrabber *pVideoSampleGrabber;
\r
522 IBaseFilter *pSoundBaseFilter;
\r
523 ISampleGrabber *pSoundSampleGrabber;
\r
524 CMySampleGrabberCB *pSoundCallBack;
\r
525 IMediaControl *pMediaControl;
\r
526 IMediaSeeking *pMediaSeeking;
\r
527 IMediaPosition *pMediaPosition;
\r
528 IVideoWindow *pVideoWindow;
\r
529 IBasicVideo *pBasicVideo;
\r
530 IBasicAudio *pBasicAudio;
\r
531 bool bTimeFormatFrame;
\r
532 bool bVirticalReversed;
\r
535 HBITMAP hBmpDShow, hOldBmpDShow;
\r
537 scrntype* lpBmpDShow;
\r
538 LPBITMAPINFO lpDibDShow;
\r
540 int direct_show_width, direct_show_height;
\r
541 bool direct_show_mute[2];
\r
542 #ifdef USE_LASER_DISC
\r
543 double movie_frame_rate;
\r
544 int movie_sound_rate;
\r
545 bool now_movie_play, now_movie_pause;
\r
547 #ifdef USE_VIDEO_CAPTURE
\r
548 void enum_capture_devs();
\r
549 bool connect_capture_dev(int index, bool pin);
\r
550 int cur_capture_dev_index;
\r
551 int num_capture_devs;
\r
552 _TCHAR capture_dev_name[MAX_CAPTURE_DEVS][256];
\r
557 // ----------------------------------------
\r
559 // ----------------------------------------
\r
561 _TCHAR path[_MAX_PATH];
\r
568 media_status_t cart_status[MAX_CART];
\r
571 media_status_t disk_status[MAX_FD];
\r
574 media_status_t quickdisk_status[MAX_QD];
\r
577 media_status_t tape_status;
\r
579 #ifdef USE_LASER_DISC
\r
580 media_status_t laser_disc_status;
\r
583 void initialize_media();
\r
584 void update_media();
\r
585 void restore_media();
\r
587 void clear_media_status(media_status_t *status)
\r
589 status->path[0] = _T('\0');
\r
590 status->wait_count = 0;
\r
593 // ----------------------------------------
\r
595 // ----------------------------------------
\r
596 void initialize_printer();
\r
597 void release_printer();
\r
598 void reset_printer();
\r
599 void update_printer();
\r
600 void open_printer_file();
\r
601 void close_printer_file();
\r
603 _TCHAR prn_file_name[_MAX_PATH];
\r
605 _TCHAR prn_file_name[AG_PATHNAME_MAX];
\r
608 int prn_data, prn_wait_frames;
\r
612 // ----------------------------------------
\r
614 // ----------------------------------------
\r
615 void initialize_socket();
\r
616 void release_socket();
\r
617 void update_socket();
\r
619 int soc[SOCKET_MAX];
\r
620 bool is_tcp[SOCKET_MAX];
\r
621 struct sockaddr_in udpaddr[SOCKET_MAX];
\r
622 int socket_delay[SOCKET_MAX];
\r
623 char recv_buffer[SOCKET_MAX][SOCKET_BUFFER_MAX];
\r
624 int recv_r_ptr[SOCKET_MAX], recv_w_ptr[SOCKET_MAX];
\r
627 #ifdef USE_DEBUGGER
\r
628 // ----------------------------------------
\r
630 // ----------------------------------------
\r
631 void initialize_debugger();
\r
632 void release_debugger();
\r
633 #if defined(_USE_AGAR)
\r
634 AG_Thread hDebuggerThread;
\r
635 #elif defined(_USE_QT)
\r
637 HANDLE hDebuggerThread;
\r
639 debugger_thread_t debugger_thread_param;
\r
643 // ----------------------------------------
\r
645 // ----------------------------------------
\r
646 void initialize_debug_log();
\r
647 void release_debug_log();
\r
652 // ----------------------------------------
\r
654 // ----------------------------------------
\r
655 void save_state_tmp(_TCHAR* file_path);
\r
656 bool load_state_tmp(_TCHAR* file_path);
\r
659 // ----------------------------------------
\r
661 // ----------------------------------------
\r
662 #ifdef USE_CPU_TYPE
\r
665 #ifdef USE_SOUND_DEVICE_TYPE
\r
666 int sound_device_type;
\r
668 _TCHAR app_path[_MAX_PATH];
\r
669 bool now_suspended;
\r
672 bool bDrawLine[SCREEN_HEIGHT];
\r
673 // ----------------------------------------
\r
675 // ----------------------------------------
\r
676 #if defined(_USE_AGAR)
\r
677 EMU(AG_Window *hwnd, AG_Widget *hinst);
\r
678 #elif defined(_USE_QT)
\r
679 EMU(class Ui_MainWindow*, GLDrawClass*);
\r
681 EMU(HWND hwnd, HINSTANCE hinst);
\r
685 _TCHAR* application_path()
\r
689 _TCHAR* bios_path(_TCHAR* file_name);
\r
690 #if defined(_USE_AGAR) || defined(_USE_SDL) || defined(_USE_QT)
\r
691 // To be thread safety.
\r
692 void LockVM(void) {
\r
693 if(pVMSemaphore) SDL_SemWait(pVMSemaphore);
\r
695 void UnlockVM(void) {
\r
696 if(pVMSemaphore) SDL_SemPost(pVMSemaphore);
\r
700 QImage *getPseudoVramClass(void) { return pPseudoVram;}
\r
702 // ----------------------------------------
\r
704 // ----------------------------------------
\r
705 #if defined(_USE_AGAR)
\r
706 AG_Window *main_window_handle;
\r
707 AG_Widget *instance_handle;
\r
710 #elif defined(_USE_QT)
\r
711 class Ui_MainWindow *main_window_handle;
\r
712 GLDrawClass *instance_handle;
\r
716 HWND main_window_handle;
\r
717 HINSTANCE instance_handle;
\r
719 // drive virtual machine
\r
720 int frame_interval();
\r
723 #ifdef USE_SPECIAL_RESET
\r
724 void special_reset();
\r
726 #ifdef USE_POWER_OFF
\r
727 void notify_power_off();
\r
738 _TCHAR path[_MAX_PATH];
\r
739 d88_bank_t bank[MAX_D88_BANKS];
\r
743 d88_file_t d88_file[MAX_FD];
\r
748 void open_cart(int drv, _TCHAR* file_path);
\r
749 void close_cart(int drv);
\r
750 bool cart_inserted(int drv);
\r
753 void open_disk(int drv, _TCHAR* file_path, int offset);
\r
754 void close_disk(int drv);
\r
755 bool disk_inserted(int drv);
\r
756 bool is_write_protected_fd(int drv);
\r
757 void write_protect_fd(int drv, bool flag);
\r
760 void open_quickdisk(int drv, _TCHAR* file_path);
\r
761 void close_quickdisk(int drv);
\r
762 bool quickdisk_inserted(int drv);
\r
765 void play_tape(_TCHAR* file_path);
\r
766 void rec_tape(_TCHAR* file_path);
\r
768 bool tape_inserted();
\r
770 #ifdef USE_TAPE_BUTTON
\r
774 #ifdef USE_LASER_DISC
\r
775 void open_laser_disc(_TCHAR* file_path);
\r
776 void close_laser_disc();
\r
777 bool laser_disc_inserted();
\r
779 #ifdef USE_BINARY_FILE1
\r
780 void load_binary(int drv, _TCHAR* file_path);
\r
781 void save_binary(int drv, _TCHAR* file_path);
\r
785 void start_rec_sound();
\r
786 void stop_rec_sound();
\r
787 void restart_rec_sound();
\r
788 bool now_rec_sound;
\r
790 void capture_screen();
\r
791 bool start_rec_video(int fps);
\r
792 void stop_rec_video();
\r
793 void restart_rec_video();
\r
794 bool now_rec_video;
\r
796 void update_config();
\r
804 void key_down(int code, bool repeat);
\r
805 void key_up(int code);
\r
806 void key_lost_focus()
\r
810 uint32 recent_key_sym;
\r
811 uint32 recent_key_mod;
\r
812 uint32 recent_key_unicode;
\r
814 void press_button(int num);
\r
817 void enable_mouse();
\r
818 void disenable_mouse();
\r
819 void toggle_mouse();
\r
820 bool get_mouse_enabled()
\r
822 return mouse_enabled;
\r
825 #ifdef USE_AUTO_KEY
\r
826 void start_auto_key();
\r
827 void stop_auto_key();
\r
828 bool now_auto_key()
\r
830 return (autokey_phase != 0);
\r
835 int get_window_width(int mode);
\r
836 int get_window_height(int mode);
\r
837 void set_display_size(int width, int height, bool window_mode);
\r
839 #if defined(_USE_AGAR)
\r
840 void update_screen(AG_Widget *target);
\r
841 #elif defined(_USE_QT)
\r
842 void update_screen(GLDrawClass *glv);
\r
844 void update_screen(HDC hdc);
\r
847 void reload_bitmap()
\r
849 first_invalidate = true;
\r
856 #ifdef USE_VIDEO_CAPTURE
\r
858 int get_cur_capture_dev_index()
\r
860 return cur_capture_dev_index;
\r
862 int get_num_capture_devs()
\r
864 return num_capture_devs;
\r
866 _TCHAR* get_capture_dev_name(int index)
\r
868 return capture_dev_name[index];
\r
870 void open_capture_dev(int index, bool pin);
\r
871 void close_capture_dev();
\r
872 void show_capture_dev_filter();
\r
873 void show_capture_dev_pin();
\r
874 void show_capture_dev_source();
\r
879 int get_socket(int ch)
\r
883 void socket_connected(int ch);
\r
884 void socket_disconnected(int ch);
\r
885 void send_data(int ch);
\r
886 void recv_data(int ch);
\r
889 #ifdef USE_DEBUGGER
\r
891 void open_debugger(int cpu_index);
\r
892 void close_debugger();
\r
893 bool debugger_enabled(int cpu_index);
\r
894 bool now_debugging;
\r
897 // ----------------------------------------
\r
898 // for virtual machine
\r
899 // ----------------------------------------
\r
904 #if defined(_USE_AGAR)
\r
906 #elif defined(_USE_QT)
\r
909 PostMessage(main_window_handle, WM_CLOSE, 0, 0L);
\r
914 uint8* key_buffer()
\r
918 uint32* joy_buffer()
\r
922 int* mouse_buffer()
\r
924 return mouse_status;
\r
928 void change_screen_size(int sw, int sh, int swa, int sha, int ww, int wh);
\r
929 scrntype* screen_buffer(int y);
\r
930 #ifdef USE_CRT_FILTER
\r
931 bool screen_skip_line;
\r
935 void get_host_time(cur_time_t* time);
\r
938 void printer_out(uint8 value);
\r
939 void printer_strobe(bool value);
\r
941 #ifdef USE_DIRECT_SHOW
\r
943 void get_direct_show_buffer();
\r
944 void mute_direct_show_dev(bool l, bool r);
\r
946 #ifdef USE_LASER_DISC
\r
947 bool open_movie_file(_TCHAR* file_path);
\r
948 void close_movie_file();
\r
952 void pause_movie();
\r
954 double get_movie_frame_rate()
\r
956 return movie_frame_rate;
\r
958 int get_movie_sound_rate()
\r
960 return movie_sound_rate;
\r
962 void set_cur_movie_frame(int frame, bool relative);
\r
963 uint32 get_cur_movie_frame();
\r
965 #ifdef USE_VIDEO_CAPTURE
\r
966 void set_capture_dev_channel(int ch);
\r
972 bool init_socket_tcp(int ch);
\r
973 bool init_socket_udp(int ch);
\r
974 bool connect_socket(int ch, uint32 ipaddr, int port);
\r
975 void disconnect_socket(int ch);
\r
976 bool listen_socket(int ch);
\r
977 void send_data_tcp(int ch);
\r
978 void send_data_udp(int ch, uint32 ipaddr, int port);
\r
982 void out_debug_log(const _TCHAR* format, ...);
\r
984 void out_message(const _TCHAR* format, ...);
\r
986 _TCHAR message[_MAX_PATH];
\r