diff --git a/src/sound_audiopci.c b/src/sound_audiopci.c index 4fd9f76..fb6ef0c 100644 --- a/src/sound_audiopci.c +++ b/src/sound_audiopci.c @@ -52,7 +52,7 @@ typedef struct es1371_t int16_t out_l, out_r; int32_t vol_l, vol_r; - } dac[2]; + } dac[2], adc; int dac_latch, dac_time; @@ -186,6 +186,10 @@ static uint8_t es1371_inb(uint16_t port, void *p) case 0x09: ret = es1371->uart_status; break; + + case 0x0c: + ret = es1371->mem_page; + break; case 0x1a: ret = es1371->legacy_ctrl >> 16; @@ -297,6 +301,34 @@ static uint32_t es1371_inl(uint16_t port, void *p) ret |= es1371->codec_regs[(es1371->codec_ctrl >> 16) & 0x3f]; ret |= CODEC_READY; break; + + case 0x34: + switch (es1371->mem_page) + { + case 0xc: + ret = es1371->dac[0].size | (es1371->dac[0].count << 16); + break; + + case 0xd: + ret = es1371->adc.size | (es1371->adc.count << 16); + break; + + default: + pclog("Bad es1371_inl: mem_page=%x port=%04x\n", es1371->mem_page, port); + } + break; + + case 0x3c: + switch (es1371->mem_page) + { + case 0xc: + ret = es1371->dac[1].size | (es1371->dac[1].count << 16); + break; + + default: + pclog("Bad es1371_inl: mem_page=%x port=%04x\n", es1371->mem_page, port); + } + break; default: pclog("Bad es1371_inl: port=%04x\n", port); @@ -538,6 +570,11 @@ static void es1371_outl(uint16_t port, uint32_t val, void *p) es1371->dac[0].count -= 4; break; + case 0xd: + es1371->adc.size = val & 0xffff; + es1371->adc.count = val >> 16; + break; + default: pclog("Bad es1371_outl: mem_page=%x port=%04x val=%08x\n", es1371->mem_page, port, val); } @@ -573,9 +610,6 @@ static void es1371_outl(uint16_t port, uint32_t val, void *p) es1371->dac[1].size = val & 0xffff; es1371->dac[1].count = val >> 16; break; - - case 0xd: - break; default: pclog("Bad es1371_outl: mem_page=%x port=%04x val=%08x\n", es1371->mem_page, port, val);