]>
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" | |
588c5b0b | 15 | #include "hw/input/adb.h" |
db1015e9 | 16 | #include "qom/object.h" |
6dca62a0 LV |
17 | |
18 | ||
02a68a3e MCA |
19 | #define VIA_SIZE 0x2000 |
20 | ||
6dca62a0 | 21 | /* VIA 1 */ |
61a608cd MCA |
22 | #define VIA1_IRQ_ONE_SECOND_BIT CA2_INT_BIT |
23 | #define VIA1_IRQ_60HZ_BIT CA1_INT_BIT | |
24 | #define VIA1_IRQ_ADB_READY_BIT SR_INT_BIT | |
25 | #define VIA1_IRQ_ADB_DATA_BIT CB2_INT_BIT | |
26 | #define VIA1_IRQ_ADB_CLOCK_BIT CB1_INT_BIT | |
6dca62a0 | 27 | |
61a608cd MCA |
28 | #define VIA1_IRQ_ONE_SECOND BIT(VIA1_IRQ_ONE_SECOND_BIT) |
29 | #define VIA1_IRQ_60HZ BIT(VIA1_IRQ_60HZ_BIT) | |
30 | #define VIA1_IRQ_ADB_READY BIT(VIA1_IRQ_ADB_READY_BIT) | |
31 | #define VIA1_IRQ_ADB_DATA BIT(VIA1_IRQ_ADB_DATA_BIT) | |
32 | #define VIA1_IRQ_ADB_CLOCK BIT(VIA1_IRQ_ADB_CLOCK_BIT) | |
6dca62a0 LV |
33 | |
34 | ||
35 | #define TYPE_MOS6522_Q800_VIA1 "mos6522-q800-via1" | |
8063396b | 36 | OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA1State, MOS6522_Q800_VIA1) |
6dca62a0 | 37 | |
db1015e9 | 38 | struct MOS6522Q800VIA1State { |
6dca62a0 LV |
39 | /*< private >*/ |
40 | MOS6522State parent_obj; | |
41 | ||
02a68a3e MCA |
42 | MemoryRegion via_mem; |
43 | ||
291bc180 | 44 | qemu_irq auxmode_irq; |
6dca62a0 | 45 | uint8_t last_b; |
8064d7bb MCA |
46 | |
47 | /* RTC */ | |
6dca62a0 | 48 | uint8_t PRAM[256]; |
8064d7bb MCA |
49 | BlockBackend *blk; |
50 | VMChangeStateEntry *vmstate; | |
6dca62a0 | 51 | |
741258b0 MCA |
52 | uint32_t tick_offset; |
53 | ||
54 | uint8_t data_out; | |
55 | int data_out_cnt; | |
56 | uint8_t data_in; | |
57 | uint8_t data_in_cnt; | |
58 | uint8_t cmd; | |
59 | int wprotect; | |
60 | int alt; | |
61 | ||
5f083d42 MCA |
62 | /* ADB */ |
63 | ADBBusState adb_bus; | |
64 | qemu_irq adb_data_ready; | |
65 | int adb_data_in_size; | |
66 | int adb_data_in_index; | |
67 | int adb_data_out_index; | |
68 | uint8_t adb_data_in[128]; | |
69 | uint8_t adb_data_out[16]; | |
70 | uint8_t adb_autopoll_cmd; | |
71 | ||
6dca62a0 LV |
72 | /* external timers */ |
73 | QEMUTimer *one_second_timer; | |
74 | int64_t next_second; | |
4c8f4ab4 MCA |
75 | QEMUTimer *sixty_hz_timer; |
76 | int64_t next_sixty_hz; | |
366d2779 MCA |
77 | |
78 | /* SETUPTIMEK hack */ | |
79 | int timer_hack_state; | |
db1015e9 | 80 | }; |
6dca62a0 LV |
81 | |
82 | ||
83 | /* VIA 2 */ | |
e787221e MCA |
84 | #define VIA2_IRQ_SCSI_DATA_BIT CA2_INT_BIT |
85 | #define VIA2_IRQ_NUBUS_BIT CA1_INT_BIT | |
86 | #define VIA2_IRQ_SCSI_BIT CB2_INT_BIT | |
87 | #define VIA2_IRQ_ASC_BIT CB1_INT_BIT | |
6dca62a0 | 88 | |
e787221e MCA |
89 | #define VIA2_IRQ_SCSI_DATA BIT(VIA2_IRQ_SCSI_DATA_BIT) |
90 | #define VIA2_IRQ_NUBUS BIT(VIA2_IRQ_NUBUS_BIT) | |
91 | #define VIA2_IRQ_UNUSED BIT(VIA2_IRQ_SCSI_BIT) | |
92 | #define VIA2_IRQ_SCSI BIT(VIA2_IRQ_UNUSED_BIT) | |
93 | #define VIA2_IRQ_ASC BIT(VIA2_IRQ_ASC_BIT) | |
6dca62a0 | 94 | |
dde602ae MCA |
95 | #define VIA2_NUBUS_IRQ_NB 7 |
96 | ||
97 | #define VIA2_NUBUS_IRQ_9 0 | |
98 | #define VIA2_NUBUS_IRQ_A 1 | |
99 | #define VIA2_NUBUS_IRQ_B 2 | |
100 | #define VIA2_NUBUS_IRQ_C 3 | |
101 | #define VIA2_NUBUS_IRQ_D 4 | |
102 | #define VIA2_NUBUS_IRQ_E 5 | |
103 | #define VIA2_NUBUS_IRQ_INTVIDEO 6 | |
104 | ||
6dca62a0 | 105 | #define TYPE_MOS6522_Q800_VIA2 "mos6522-q800-via2" |
8063396b | 106 | OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2) |
6dca62a0 | 107 | |
db1015e9 | 108 | struct MOS6522Q800VIA2State { |
6dca62a0 LV |
109 | /*< private >*/ |
110 | MOS6522State parent_obj; | |
6dca62a0 | 111 | |
02a68a3e | 112 | MemoryRegion via_mem; |
db1015e9 | 113 | }; |
6dca62a0 LV |
114 | |
115 | #endif |