1 /* 2 * vicii.h - A cycle-exact event-driven MOS6569 (VIC-II) emulation. 3 * 4 * Written by 5 * Ettore Perazzoli <ettore@comm2000.it> 6 * Andreas Boose <viceteam@t-online.de> 7 * 8 * This file is part of VICE, the Versatile Commodore Emulator. 9 * See README for copyright notice. 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 24 * 02111-1307 USA. 25 * 26 */ 27 28 #ifndef VICE_VICII_H 29 #define VICE_VICII_H 30 31 #include "types.h" 32 33 struct canvas_refresh_s; 34 struct machine_timing_s; 35 struct raster_s; 36 struct screenshot_s; 37 struct snapshot_s; 38 39 #define VICII_STANDARD 0 40 #define VICII_EXTENDED 1 41 #define VICII_DTV 2 42 43 /* VICII border mode defines */ 44 #define VICII_NORMAL_BORDERS 0 45 #define VICII_FULL_BORDERS 1 46 #define VICII_DEBUG_BORDERS 2 47 #define VICII_NO_BORDERS 3 48 #define VICII_BORDER_MODE(v) (v << 12) 49 50 /* VICII model defines (for vicii/) FIXME enum instead? */ 51 #define VICII_MODEL_PALG 0 52 #define VICII_MODEL_PALG_OLD 1 53 #define VICII_MODEL_NTSCM 2 54 #define VICII_MODEL_NTSCM_OLD 3 55 #define VICII_MODEL_PALN 4 56 57 /* VICII model defines (for viciisc/) FIXME enum instead? */ 58 /* PAL, 63 cycle, 9 luma, "old" */ 59 #define VICII_MODEL_6569 0 60 /* PAL, 63 cycle, 9 luma, "new" */ 61 #define VICII_MODEL_8565 1 62 /* PAL, 63 cycle, 5 luma, "old" */ 63 #define VICII_MODEL_6569R1 2 64 /* NTSC, 65 cycle, 9 luma, "old" */ 65 #define VICII_MODEL_6567 3 66 /* NTSC, 65 cycle, 9 luma, "new" */ 67 #define VICII_MODEL_8562 4 68 /* NTSC, 64 cycle, ? luma, "old" */ 69 #define VICII_MODEL_6567R56A 5 70 /* PAL-N, 65 cycle, ? luma, "?" */ 71 #define VICII_MODEL_6572 6 72 #define VICII_MODEL_NUM 7 73 74 extern int vicii_resources_init(void); 75 extern int vicii_cmdline_options_init(void); 76 extern struct raster_s *vicii_init(unsigned int flag); 77 extern struct video_canvas_s *vicii_get_canvas(void); 78 79 extern void vicii_reset(void); 80 extern void vicii_set_light_pen(CLOCK mclk, int state); 81 extern void vicii_trigger_light_pen(CLOCK mclk); 82 extern CLOCK vicii_lightpen_timing(int x, int y); 83 extern void vicii_set_vbank(int new_vbank); 84 extern void vicii_set_ram_base(uint8_t *base); 85 extern void vicii_powerup(void); 86 extern void vicii_set_canvas_refresh(int enable); 87 extern void vicii_reset_registers(void); 88 extern void vicii_update_memory_ptrs_external(void); 89 extern void vicii_handle_pending_alarms_external(int num_write_cycles); 90 extern void vicii_handle_pending_alarms_external_write(void); 91 92 extern void vicii_screenshot(struct screenshot_s *screenshot); 93 extern void vicii_shutdown(void); 94 extern void vicii_change_timing(struct machine_timing_s *machine_timing, int border_mode); 95 96 extern int vicii_dump(void); 97 98 extern void vicii_snapshot_prepare(void); 99 extern int vicii_snapshot_write_module(struct snapshot_s *s); 100 extern int vicii_snapshot_read_module(struct snapshot_s *s); 101 102 extern void vicii_async_refresh(struct canvas_refresh_s *r); 103 104 extern void vicii_set_phi1_vbank(int num_vbank); 105 extern void vicii_set_phi2_vbank(int num_vbank); 106 extern void vicii_set_phi1_ram_base(uint8_t *base); 107 extern void vicii_set_phi2_ram_base(uint8_t *base); 108 extern void vicii_set_phi1_addr_options(uint16_t mask, uint16_t offset); 109 extern void vicii_set_phi2_addr_options(uint16_t mask, uint16_t offset); 110 extern void vicii_set_chargen_addr_options(uint16_t mask, uint16_t value); 111 extern void vicii_set_phi1_chargen_addr_options(uint16_t mask, uint16_t value); 112 extern void vicii_set_phi2_chargen_addr_options(uint16_t mask, uint16_t value); 113 114 /* 8502 specific functions */ 115 extern CLOCK vicii_clock_add(CLOCK clock, int amount); 116 extern void vicii_clock_read_stretch(void); 117 extern void vicii_clock_write_stretch(void); 118 extern int vicii_get_half_cycle(void); 119 extern void vicii_memory_refresh_alarm_handler(void); 120 extern int vicii_check_memory_refresh(CLOCK clock); 121 122 #endif 123