]> git.proxmox.com Git - mirror_qemu.git/blame - include/hw/audio/asc.h
asc: generate silence if FIFO empty but engine still running
[mirror_qemu.git] / include / hw / audio / asc.h
CommitLineData
ac13a6b3
MCA
1/*
2 * QEMU Apple Sound Chip emulation
3 *
4 * Apple Sound Chip (ASC) 344S0063
5 * Enhanced Apple Sound Chip (EASC) 343S1063
6 *
7 * Copyright (c) 2012-2018 Laurent Vivier <laurent@vivier.eu>
8 * Copyright (c) 2022 Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 */
12
13#ifndef HW_AUDIO_ASC_H
14#define HW_AUDIO_ASC_H
15
16#include "qemu/osdep.h"
17#include "hw/sysbus.h"
18#include "audio/audio.h"
19
20#define ASC_FREQ 22257
21
22enum {
23 ASC_TYPE_ASC = 0, /* original discrete Apple Sound Chip */
24 ASC_TYPE_EASC = 1 /* discrete Enhanced Apple Sound Chip */
25};
26
27#define ASC_FIFO_OFFSET 0x0
28#define ASC_FIFO_SIZE 0x400
29
30#define ASC_REG_OFFSET 0x800
31#define ASC_REG_SIZE 0x60
32
33#define ASC_EXTREG_OFFSET 0xf00
34#define ASC_EXTREG_SIZE 0x20
35
36typedef struct ASCFIFOState {
37 int index;
38
39 MemoryRegion mem_fifo;
40 uint8_t fifo[ASC_FIFO_SIZE];
41 uint8_t int_status;
42
43 int cnt;
44 int wptr;
45 int rptr;
46
47 MemoryRegion mem_extregs;
48 uint8_t extregs[ASC_EXTREG_SIZE];
49
50 int xa_cnt;
51 uint8_t xa_val;
52 uint8_t xa_flags;
53 int16_t xa_last[2];
54} ASCFIFOState;
55
56struct ASCState {
57 SysBusDevice parent_obj;
58
59 uint8_t type;
60 MemoryRegion asc;
61 MemoryRegion mem_fifo;
62 MemoryRegion mem_regs;
63 MemoryRegion mem_extregs;
64
65 QEMUSoundCard card;
66 SWVoiceOut *voice;
67 uint8_t *mixbuf;
68 int samples;
69 int shift;
70
5243e554
MCA
71 uint8_t *silentbuf;
72
ac13a6b3
MCA
73 /* Time when we were last able to generate samples */
74 int64_t fifo_empty_ns;
75
76 qemu_irq irq;
77
78 ASCFIFOState fifos[2];
79
80 uint8_t regs[ASC_REG_SIZE];
81};
82
83#define TYPE_ASC "apple-sound-chip"
84OBJECT_DECLARE_SIMPLE_TYPE(ASCState, ASC)
85
86#endif