Lines Matching full:fs
117 static uint8_t asc_fifo_get(ASCFIFOState *fs) in asc_fifo_get() argument
119 ASCState *s = container_of(fs, ASCState, fifos[fs->index]); in asc_fifo_get()
120 bool fifo_half_irq_enabled = fs->extregs[ASC_EXTREGS_INTCTRL] & 1; in asc_fifo_get()
123 assert(fs->cnt); in asc_fifo_get()
125 val = fs->fifo[fs->rptr]; in asc_fifo_get()
126 trace_asc_fifo_get('A' + fs->index, fs->rptr, fs->cnt, val); in asc_fifo_get()
128 fs->rptr++; in asc_fifo_get()
129 fs->rptr &= 0x3ff; in asc_fifo_get()
130 fs->cnt--; in asc_fifo_get()
132 if (fs->cnt <= 0x1ff) { in asc_fifo_get()
134 fs->int_status |= ASC_FIFO_STATUS_HALF_FULL; in asc_fifo_get()
137 fs->int_status &= ~ASC_FIFO_STATUS_HALF_FULL; in asc_fifo_get()
140 if (fs->cnt == 0x1ff && fifo_half_irq_enabled) { in asc_fifo_get()
145 if (fs->cnt == 0) { in asc_fifo_get()
147 fs->int_status |= ASC_FIFO_STATUS_FULL_EMPTY; in asc_fifo_get()
168 ASCFIFOState *fs = &s->fifos[i]; in generate_fifo() local
170 switch (fs->extregs[ASC_EXTREGS_FIFOCTRL] & 0x83) { in generate_fifo()
176 if (!fs->cnt) { in generate_fifo()
181 if (fs->xa_cnt == -1) { in generate_fifo()
183 fs->xa_flags = asc_fifo_get(fs); in generate_fifo()
184 fs->xa_cnt = 0; in generate_fifo()
187 shift = fs->xa_flags & 0xf; in generate_fifo()
188 filter = fs->xa_flags >> 4; in generate_fifo()
189 f0 = (int8_t)fs->extregs[ASC_EXTREGS_CDXA_DECOMP_FILT + in generate_fifo()
191 f1 = (int8_t)fs->extregs[ASC_EXTREGS_CDXA_DECOMP_FILT + in generate_fifo()
194 if ((fs->xa_cnt & 1) == 0) { in generate_fifo()
195 if (!fs->cnt) { in generate_fifo()
200 fs->xa_val = asc_fifo_get(fs); in generate_fifo()
201 d = (fs->xa_val & 0xf) << 12; in generate_fifo()
203 d = (fs->xa_val & 0xf0) << 8; in generate_fifo()
205 t = (d >> shift) + (((fs->xa_last[0] * f0) + in generate_fifo()
206 (fs->xa_last[1] * f1) + 32) >> 6); in generate_fifo()
220 fs->xa_cnt++; in generate_fifo()
222 fs->xa_last[1] = fs->xa_last[0]; in generate_fifo()
223 fs->xa_last[0] = (int16_t)t; in generate_fifo()
225 if (fs->xa_cnt == 28) { in generate_fifo()
227 fs->xa_cnt = -1; in generate_fifo()
235 if (fs->cnt) { in generate_fifo()
236 val = asc_fifo_get(fs); in generate_fifo()
291 ASCFIFOState *fs = &s->fifos[channel >> 1]; in generate_wavetable() local
300 sample = fs->fifo[0x200 * (channel >> 1) + offset]; in generate_wavetable()
368 ASCFIFOState *fs = opaque; in asc_fifo_read() local
370 trace_asc_read_fifo('A' + fs->index, addr, size, fs->fifo[addr]); in asc_fifo_read()
371 return fs->fifo[addr]; in asc_fifo_read()
377 ASCFIFOState *fs = opaque; in asc_fifo_write() local
378 ASCState *s = container_of(fs, ASCState, fifos[fs->index]); in asc_fifo_write()
379 bool fifo_half_irq_enabled = fs->extregs[ASC_EXTREGS_INTCTRL] & 1; in asc_fifo_write()
381 trace_asc_write_fifo('A' + fs->index, addr, size, fs->wptr, fs->cnt, value); in asc_fifo_write()
384 fs->fifo[fs->wptr++] = value; in asc_fifo_write()
385 fs->wptr &= 0x3ff; in asc_fifo_write()
386 fs->cnt++; in asc_fifo_write()
388 if (fs->cnt <= 0x1ff) { in asc_fifo_write()
390 fs->int_status |= ASC_FIFO_STATUS_HALF_FULL; in asc_fifo_write()
393 fs->int_status &= ~ASC_FIFO_STATUS_HALF_FULL; in asc_fifo_write()
396 if (fs->cnt == 0x200 && fifo_half_irq_enabled) { in asc_fifo_write()
401 if (fs->cnt == 0x3ff) { in asc_fifo_write()
403 fs->int_status |= ASC_FIFO_STATUS_FULL_EMPTY; in asc_fifo_write()
407 fs->fifo[addr] = value; in asc_fifo_write()
422 static void asc_fifo_reset(ASCFIFOState *fs);
514 ASCFIFOState *fs = opaque; in asc_ext_read() local
517 value = fs->extregs[addr]; in asc_ext_read()
519 trace_asc_read_extreg('A' + fs->index, addr, size, value); in asc_ext_read()
526 ASCFIFOState *fs = opaque; in asc_ext_write() local
528 trace_asc_write_extreg('A' + fs->index, addr, size, value); in asc_ext_write()
530 fs->extregs[addr] = value; in asc_ext_write()
587 static void asc_fifo_reset(ASCFIFOState *fs) in asc_fifo_reset() argument
589 fs->wptr = 0; in asc_fifo_reset()
590 fs->rptr = 0; in asc_fifo_reset()
591 fs->cnt = 0; in asc_fifo_reset()
592 fs->xa_cnt = -1; in asc_fifo_reset()
593 fs->int_status = 0; in asc_fifo_reset()
596 static void asc_fifo_init(ASCFIFOState *fs, int index) in asc_fifo_init() argument
598 ASCState *s = container_of(fs, ASCState, fifos[index]); in asc_fifo_init()
601 fs->index = index; in asc_fifo_init()
603 memory_region_init_io(&fs->mem_fifo, OBJECT(s), &asc_fifo_ops, fs, in asc_fifo_init()
608 memory_region_init_io(&fs->mem_extregs, OBJECT(s), &asc_extregs_ops, in asc_fifo_init()
609 fs, name, ASC_EXTREG_SIZE); in asc_fifo_init()