]>
Commit | Line | Data |
---|---|---|
6dca62a0 LV |
1 | /* |
2 | * | |
3 | * Copyright (c) 2011-2018 Laurent Vivier | |
4 | * | |
5 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
6 | * See the COPYING file in the top-level directory. | |
7 | */ | |
8 | ||
9 | #ifndef HW_MISC_MAC_VIA_H | |
10 | #define HW_MISC_MAC_VIA_H | |
11 | ||
12 | #include "exec/memory.h" | |
13 | #include "hw/sysbus.h" | |
14 | #include "hw/misc/mos6522.h" | |
db1015e9 | 15 | #include "qom/object.h" |
6dca62a0 LV |
16 | |
17 | ||
18 | /* VIA 1 */ | |
19 | #define VIA1_IRQ_ONE_SECOND_BIT 0 | |
20 | #define VIA1_IRQ_VBLANK_BIT 1 | |
21 | #define VIA1_IRQ_ADB_READY_BIT 2 | |
22 | #define VIA1_IRQ_ADB_DATA_BIT 3 | |
23 | #define VIA1_IRQ_ADB_CLOCK_BIT 4 | |
24 | ||
25 | #define VIA1_IRQ_NB 8 | |
26 | ||
27 | #define VIA1_IRQ_ONE_SECOND (1 << VIA1_IRQ_ONE_SECOND_BIT) | |
28 | #define VIA1_IRQ_VBLANK (1 << VIA1_IRQ_VBLANK_BIT) | |
29 | #define VIA1_IRQ_ADB_READY (1 << VIA1_IRQ_ADB_READY_BIT) | |
30 | #define VIA1_IRQ_ADB_DATA (1 << VIA1_IRQ_ADB_DATA_BIT) | |
31 | #define VIA1_IRQ_ADB_CLOCK (1 << VIA1_IRQ_ADB_CLOCK_BIT) | |
32 | ||
33 | ||
34 | #define TYPE_MOS6522_Q800_VIA1 "mos6522-q800-via1" | |
8063396b | 35 | OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA1State, MOS6522_Q800_VIA1) |
6dca62a0 | 36 | |
db1015e9 | 37 | struct MOS6522Q800VIA1State { |
6dca62a0 LV |
38 | /*< private >*/ |
39 | MOS6522State parent_obj; | |
40 | ||
41 | qemu_irq irqs[VIA1_IRQ_NB]; | |
42 | uint8_t last_b; | |
43 | uint8_t PRAM[256]; | |
44 | ||
45 | /* external timers */ | |
46 | QEMUTimer *one_second_timer; | |
47 | int64_t next_second; | |
48 | QEMUTimer *VBL_timer; | |
49 | int64_t next_VBL; | |
db1015e9 | 50 | }; |
6dca62a0 LV |
51 | |
52 | ||
53 | /* VIA 2 */ | |
54 | #define VIA2_IRQ_SCSI_DATA_BIT 0 | |
55 | #define VIA2_IRQ_SLOT_BIT 1 | |
56 | #define VIA2_IRQ_UNUSED_BIT 2 | |
57 | #define VIA2_IRQ_SCSI_BIT 3 | |
58 | #define VIA2_IRQ_ASC_BIT 4 | |
59 | ||
60 | #define VIA2_IRQ_NB 8 | |
61 | ||
62 | #define VIA2_IRQ_SCSI_DATA (1 << VIA2_IRQ_SCSI_DATA_BIT) | |
63 | #define VIA2_IRQ_SLOT (1 << VIA2_IRQ_SLOT_BIT) | |
64 | #define VIA2_IRQ_UNUSED (1 << VIA2_IRQ_SCSI_BIT) | |
65 | #define VIA2_IRQ_SCSI (1 << VIA2_IRQ_UNUSED_BIT) | |
66 | #define VIA2_IRQ_ASC (1 << VIA2_IRQ_ASC_BIT) | |
67 | ||
68 | #define TYPE_MOS6522_Q800_VIA2 "mos6522-q800-via2" | |
8063396b | 69 | OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2) |
6dca62a0 | 70 | |
db1015e9 | 71 | struct MOS6522Q800VIA2State { |
6dca62a0 LV |
72 | /*< private >*/ |
73 | MOS6522State parent_obj; | |
db1015e9 | 74 | }; |
6dca62a0 LV |
75 | |
76 | ||
77 | #define TYPE_MAC_VIA "mac_via" | |
8063396b | 78 | OBJECT_DECLARE_SIMPLE_TYPE(MacVIAState, MAC_VIA) |
6dca62a0 | 79 | |
db1015e9 | 80 | struct MacVIAState { |
6dca62a0 LV |
81 | SysBusDevice busdev; |
82 | ||
eb064db9 LV |
83 | VMChangeStateEntry *vmstate; |
84 | ||
6dca62a0 LV |
85 | /* MMIO */ |
86 | MemoryRegion mmio; | |
87 | MemoryRegion via1mem; | |
88 | MemoryRegion via2mem; | |
89 | ||
90 | /* VIAs */ | |
91 | MOS6522Q800VIA1State mos6522_via1; | |
92 | MOS6522Q800VIA2State mos6522_via2; | |
93 | ||
94 | /* RTC */ | |
95 | uint32_t tick_offset; | |
96 | ||
97 | uint8_t data_out; | |
98 | int data_out_cnt; | |
99 | uint8_t data_in; | |
100 | uint8_t data_in_cnt; | |
101 | uint8_t cmd; | |
102 | int wprotect; | |
103 | int alt; | |
eb064db9 | 104 | BlockBackend *blk; |
6dca62a0 LV |
105 | |
106 | /* ADB */ | |
107 | ADBBusState adb_bus; | |
87a34e2a LV |
108 | qemu_irq adb_data_ready; |
109 | int adb_data_in_size; | |
110 | int adb_data_in_index; | |
111 | int adb_data_out_index; | |
112 | uint8_t adb_data_in[128]; | |
113 | uint8_t adb_data_out[16]; | |
975fcedd | 114 | uint8_t adb_autopoll_cmd; |
db1015e9 | 115 | }; |
6dca62a0 LV |
116 | |
117 | #endif |