83 lines
2.5 KiB
C
83 lines
2.5 KiB
C
/*
|
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
|
* running old operating systems and software designed for IBM
|
|
* PC systems and compatibles from 1981 through fairly recent
|
|
* system designs based on the PCI bus.
|
|
*
|
|
* This file is part of the 86Box distribution.
|
|
*
|
|
* Interface to the actual OPL emulator.
|
|
*
|
|
* TODO: Finish re-working this into a device_t, which requires a
|
|
* poll-like function for "update" so the sound card can call
|
|
* that and get a buffer-full of sample data.
|
|
*
|
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
|
* Miran Grca, <mgrca8@gmail.com>
|
|
*
|
|
* Copyright 2017-2020 Fred N. van Kempen.
|
|
* Copyright 2016-2020 Miran Grca.
|
|
*/
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <wchar.h>
|
|
#define HAVE_STDARG_H
|
|
|
|
#include "cpu.h"
|
|
#include <86box/86box.h>
|
|
#include <86box/device.h>
|
|
#include <86box/io.h>
|
|
#include <86box/sound.h>
|
|
#include <86box/snd_opl.h>
|
|
|
|
static uint32_t fm_dev_inst[FM_DRV_MAX][FM_MAX];
|
|
|
|
uint8_t
|
|
fm_driver_get(int chip_id, fm_drv_t *drv)
|
|
{
|
|
switch (chip_id) {
|
|
case FM_YM3812:
|
|
if (fm_driver == FM_DRV_NUKED) {
|
|
*drv = nuked_opl_drv;
|
|
drv->priv = device_add_inst(&ym3812_nuked_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
} else {
|
|
*drv = ymfm_drv;
|
|
drv->priv = device_add_inst(&ym3812_ymfm_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
}
|
|
break;
|
|
|
|
case FM_YMF262:
|
|
if (fm_driver == FM_DRV_NUKED) {
|
|
*drv = nuked_opl_drv;
|
|
drv->priv = device_add_inst(&ymf262_nuked_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
} else {
|
|
*drv = ymfm_drv;
|
|
drv->priv = device_add_inst(&ymf262_ymfm_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
}
|
|
break;
|
|
|
|
case FM_YMF289B:
|
|
*drv = ymfm_drv;
|
|
drv->priv = device_add_inst(&ymf289b_ymfm_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
break;
|
|
|
|
case FM_YMF278B:
|
|
*drv = ymfm_drv;
|
|
drv->priv = device_add_inst(&ymf278b_ymfm_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
break;
|
|
|
|
case FM_ESFM:
|
|
*drv = esfmu_opl_drv;
|
|
drv->priv = device_add_inst(&esfm_esfmu_device, fm_dev_inst[fm_driver][chip_id]++);
|
|
break;
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
};
|