mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
cuda: convert to use the shared mos6522 device
Add the relevant hooks as required for the MacOS timer calibration and delayed SR interrupt. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
committed by
David Gibson
parent
cc5a0ae03e
commit
09a573474b
+159
-447
File diff suppressed because it is too large
Load Diff
+44
-41
@@ -30,6 +30,7 @@
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/ide/internal.h"
|
||||
#include "hw/input/adb.h"
|
||||
#include "hw/misc/mos6522.h"
|
||||
|
||||
/* SMP is not enabled, for now */
|
||||
#define MAX_CPUS 1
|
||||
@@ -44,59 +45,48 @@
|
||||
|
||||
#define ESCC_CLOCK 3686400
|
||||
|
||||
/* CUDA commands (2nd byte) */
|
||||
#define CUDA_WARM_START 0x0
|
||||
#define CUDA_AUTOPOLL 0x1
|
||||
#define CUDA_GET_6805_ADDR 0x2
|
||||
#define CUDA_GET_TIME 0x3
|
||||
#define CUDA_GET_PRAM 0x7
|
||||
#define CUDA_SET_6805_ADDR 0x8
|
||||
#define CUDA_SET_TIME 0x9
|
||||
#define CUDA_POWERDOWN 0xa
|
||||
#define CUDA_POWERUP_TIME 0xb
|
||||
#define CUDA_SET_PRAM 0xc
|
||||
#define CUDA_MS_RESET 0xd
|
||||
#define CUDA_SEND_DFAC 0xe
|
||||
#define CUDA_BATTERY_SWAP_SENSE 0x10
|
||||
#define CUDA_RESET_SYSTEM 0x11
|
||||
#define CUDA_SET_IPL 0x12
|
||||
#define CUDA_FILE_SERVER_FLAG 0x13
|
||||
#define CUDA_SET_AUTO_RATE 0x14
|
||||
#define CUDA_GET_AUTO_RATE 0x16
|
||||
#define CUDA_SET_DEVICE_LIST 0x19
|
||||
#define CUDA_GET_DEVICE_LIST 0x1a
|
||||
#define CUDA_SET_ONE_SECOND_MODE 0x1b
|
||||
#define CUDA_SET_POWER_MESSAGES 0x21
|
||||
#define CUDA_GET_SET_IIC 0x22
|
||||
#define CUDA_WAKEUP 0x23
|
||||
#define CUDA_TIMER_TICKLE 0x24
|
||||
#define CUDA_COMBINED_FORMAT_IIC 0x25
|
||||
|
||||
/* Cuda */
|
||||
#define TYPE_CUDA "cuda"
|
||||
#define CUDA(obj) OBJECT_CHECK(CUDAState, (obj), TYPE_CUDA)
|
||||
|
||||
/**
|
||||
* CUDATimer:
|
||||
* @counter_value: counter value at load time
|
||||
*/
|
||||
typedef struct CUDATimer {
|
||||
int index;
|
||||
uint16_t latch;
|
||||
uint16_t counter_value;
|
||||
int64_t load_time;
|
||||
int64_t next_irq_time;
|
||||
uint64_t frequency;
|
||||
QEMUTimer *timer;
|
||||
} CUDATimer;
|
||||
typedef struct MOS6522CUDAState MOS6522CUDAState;
|
||||
|
||||
/**
|
||||
* CUDAState:
|
||||
* @b: B-side data
|
||||
* @a: A-side data
|
||||
* @dirb: B-side direction (1=output)
|
||||
* @dira: A-side direction (1=output)
|
||||
* @sr: Shift register
|
||||
* @acr: Auxiliary control register
|
||||
* @pcr: Peripheral control register
|
||||
* @ifr: Interrupt flag register
|
||||
* @ier: Interrupt enable register
|
||||
* @anh: A-side data, no handshake
|
||||
* @last_b: last value of B register
|
||||
* @last_acr: last value of ACR register
|
||||
*/
|
||||
typedef struct CUDAState {
|
||||
/*< private >*/
|
||||
SysBusDevice parent_obj;
|
||||
/*< public >*/
|
||||
|
||||
MemoryRegion mem;
|
||||
/* cuda registers */
|
||||
uint8_t b;
|
||||
uint8_t a;
|
||||
uint8_t dirb;
|
||||
uint8_t dira;
|
||||
uint8_t sr;
|
||||
uint8_t acr;
|
||||
uint8_t pcr;
|
||||
uint8_t ifr;
|
||||
uint8_t ier;
|
||||
uint8_t anh;
|
||||
|
||||
ADBBusState adb_bus;
|
||||
CUDATimer timers[2];
|
||||
MOS6522CUDAState *mos6522_cuda;
|
||||
|
||||
uint32_t tick_offset;
|
||||
uint64_t tb_frequency;
|
||||
@@ -105,6 +95,7 @@ typedef struct CUDAState {
|
||||
uint8_t last_acr;
|
||||
|
||||
/* MacOS 9 is racy and requires a delay upon setting the SR_INT bit */
|
||||
uint64_t sr_delay_ns;
|
||||
QEMUTimer *sr_delay_timer;
|
||||
|
||||
int data_in_size;
|
||||
@@ -120,6 +111,18 @@ typedef struct CUDAState {
|
||||
QEMUTimer *adb_poll_timer;
|
||||
} CUDAState;
|
||||
|
||||
/* MOS6522 CUDA */
|
||||
typedef struct MOS6522CUDAState {
|
||||
/*< private >*/
|
||||
MOS6522State parent_obj;
|
||||
|
||||
CUDAState *cuda;
|
||||
} MOS6522CUDAState;
|
||||
|
||||
#define TYPE_MOS6522_CUDA "mos6522-cuda"
|
||||
#define MOS6522_CUDA(obj) OBJECT_CHECK(MOS6522CUDAState, (obj), \
|
||||
TYPE_MOS6522_CUDA)
|
||||
|
||||
/* MacIO */
|
||||
#define TYPE_OLDWORLD_MACIO "macio-oldworld"
|
||||
#define TYPE_NEWWORLD_MACIO "macio-newworld"
|
||||
|
||||
Reference in New Issue
Block a user