xref: /qemu/include/hw/misc/mac_via.h (revision 61a608cd79bff815cb0248dd5b1d2c36369daa5f)
16dca62a0SLaurent Vivier /*
26dca62a0SLaurent Vivier  *
36dca62a0SLaurent Vivier  * Copyright (c) 2011-2018 Laurent Vivier
46dca62a0SLaurent Vivier  *
56dca62a0SLaurent Vivier  * This work is licensed under the terms of the GNU GPL, version 2 or later.
66dca62a0SLaurent Vivier  * See the COPYING file in the top-level directory.
76dca62a0SLaurent Vivier  */
86dca62a0SLaurent Vivier 
96dca62a0SLaurent Vivier #ifndef HW_MISC_MAC_VIA_H
106dca62a0SLaurent Vivier #define HW_MISC_MAC_VIA_H
116dca62a0SLaurent Vivier 
126dca62a0SLaurent Vivier #include "exec/memory.h"
136dca62a0SLaurent Vivier #include "hw/sysbus.h"
146dca62a0SLaurent Vivier #include "hw/misc/mos6522.h"
15db1015e9SEduardo Habkost #include "qom/object.h"
166dca62a0SLaurent Vivier 
176dca62a0SLaurent Vivier 
1802a68a3eSMark Cave-Ayland #define VIA_SIZE   0x2000
1902a68a3eSMark Cave-Ayland 
206dca62a0SLaurent Vivier /* VIA 1 */
21*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ONE_SECOND_BIT CA2_INT_BIT
22*61a608cdSMark Cave-Ayland #define VIA1_IRQ_60HZ_BIT       CA1_INT_BIT
23*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ADB_READY_BIT  SR_INT_BIT
24*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ADB_DATA_BIT   CB2_INT_BIT
25*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ADB_CLOCK_BIT  CB1_INT_BIT
266dca62a0SLaurent Vivier 
276dca62a0SLaurent Vivier #define VIA1_IRQ_NB             8
286dca62a0SLaurent Vivier 
29*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ONE_SECOND     BIT(VIA1_IRQ_ONE_SECOND_BIT)
30*61a608cdSMark Cave-Ayland #define VIA1_IRQ_60HZ           BIT(VIA1_IRQ_60HZ_BIT)
31*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ADB_READY      BIT(VIA1_IRQ_ADB_READY_BIT)
32*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ADB_DATA       BIT(VIA1_IRQ_ADB_DATA_BIT)
33*61a608cdSMark Cave-Ayland #define VIA1_IRQ_ADB_CLOCK      BIT(VIA1_IRQ_ADB_CLOCK_BIT)
346dca62a0SLaurent Vivier 
356dca62a0SLaurent Vivier 
366dca62a0SLaurent Vivier #define TYPE_MOS6522_Q800_VIA1 "mos6522-q800-via1"
378063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA1State, MOS6522_Q800_VIA1)
386dca62a0SLaurent Vivier 
39db1015e9SEduardo Habkost struct MOS6522Q800VIA1State {
406dca62a0SLaurent Vivier     /*< private >*/
416dca62a0SLaurent Vivier     MOS6522State parent_obj;
426dca62a0SLaurent Vivier 
4302a68a3eSMark Cave-Ayland     MemoryRegion via_mem;
4402a68a3eSMark Cave-Ayland 
456dca62a0SLaurent Vivier     qemu_irq irqs[VIA1_IRQ_NB];
46291bc180SMark Cave-Ayland     qemu_irq auxmode_irq;
476dca62a0SLaurent Vivier     uint8_t last_b;
488064d7bbSMark Cave-Ayland 
498064d7bbSMark Cave-Ayland     /* RTC */
506dca62a0SLaurent Vivier     uint8_t PRAM[256];
518064d7bbSMark Cave-Ayland     BlockBackend *blk;
528064d7bbSMark Cave-Ayland     VMChangeStateEntry *vmstate;
536dca62a0SLaurent Vivier 
54741258b0SMark Cave-Ayland     uint32_t tick_offset;
55741258b0SMark Cave-Ayland 
56741258b0SMark Cave-Ayland     uint8_t data_out;
57741258b0SMark Cave-Ayland     int data_out_cnt;
58741258b0SMark Cave-Ayland     uint8_t data_in;
59741258b0SMark Cave-Ayland     uint8_t data_in_cnt;
60741258b0SMark Cave-Ayland     uint8_t cmd;
61741258b0SMark Cave-Ayland     int wprotect;
62741258b0SMark Cave-Ayland     int alt;
63741258b0SMark Cave-Ayland 
645f083d42SMark Cave-Ayland     /* ADB */
655f083d42SMark Cave-Ayland     ADBBusState adb_bus;
665f083d42SMark Cave-Ayland     qemu_irq adb_data_ready;
675f083d42SMark Cave-Ayland     int adb_data_in_size;
685f083d42SMark Cave-Ayland     int adb_data_in_index;
695f083d42SMark Cave-Ayland     int adb_data_out_index;
705f083d42SMark Cave-Ayland     uint8_t adb_data_in[128];
715f083d42SMark Cave-Ayland     uint8_t adb_data_out[16];
725f083d42SMark Cave-Ayland     uint8_t adb_autopoll_cmd;
735f083d42SMark Cave-Ayland 
746dca62a0SLaurent Vivier     /* external timers */
756dca62a0SLaurent Vivier     QEMUTimer *one_second_timer;
766dca62a0SLaurent Vivier     int64_t next_second;
774c8f4ab4SMark Cave-Ayland     QEMUTimer *sixty_hz_timer;
784c8f4ab4SMark Cave-Ayland     int64_t next_sixty_hz;
79db1015e9SEduardo Habkost };
806dca62a0SLaurent Vivier 
816dca62a0SLaurent Vivier 
826dca62a0SLaurent Vivier /* VIA 2 */
836dca62a0SLaurent Vivier #define VIA2_IRQ_SCSI_DATA_BIT  0
84812f0699SMark Cave-Ayland #define VIA2_IRQ_NUBUS_BIT      1
856dca62a0SLaurent Vivier #define VIA2_IRQ_UNUSED_BIT     2
866dca62a0SLaurent Vivier #define VIA2_IRQ_SCSI_BIT       3
876dca62a0SLaurent Vivier #define VIA2_IRQ_ASC_BIT        4
886dca62a0SLaurent Vivier 
896dca62a0SLaurent Vivier #define VIA2_IRQ_NB             8
906dca62a0SLaurent Vivier 
916dca62a0SLaurent Vivier #define VIA2_IRQ_SCSI_DATA      (1 << VIA2_IRQ_SCSI_DATA_BIT)
92812f0699SMark Cave-Ayland #define VIA2_IRQ_NUBUS          (1 << VIA2_IRQ_NUBUS_BIT)
936dca62a0SLaurent Vivier #define VIA2_IRQ_UNUSED         (1 << VIA2_IRQ_SCSI_BIT)
946dca62a0SLaurent Vivier #define VIA2_IRQ_SCSI           (1 << VIA2_IRQ_UNUSED_BIT)
956dca62a0SLaurent Vivier #define VIA2_IRQ_ASC            (1 << VIA2_IRQ_ASC_BIT)
966dca62a0SLaurent Vivier 
97dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_NB       7
98dde602aeSMark Cave-Ayland 
99dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_9        0
100dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_A        1
101dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_B        2
102dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_C        3
103dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_D        4
104dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_E        5
105dde602aeSMark Cave-Ayland #define VIA2_NUBUS_IRQ_INTVIDEO 6
106dde602aeSMark Cave-Ayland 
1076dca62a0SLaurent Vivier #define TYPE_MOS6522_Q800_VIA2 "mos6522-q800-via2"
1088063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2)
1096dca62a0SLaurent Vivier 
110db1015e9SEduardo Habkost struct MOS6522Q800VIA2State {
1116dca62a0SLaurent Vivier     /*< private >*/
1126dca62a0SLaurent Vivier     MOS6522State parent_obj;
1136dca62a0SLaurent Vivier 
11402a68a3eSMark Cave-Ayland     MemoryRegion via_mem;
115db1015e9SEduardo Habkost };
1166dca62a0SLaurent Vivier 
1176dca62a0SLaurent Vivier #endif
118