コード例 #1
0
static void onRecv(YM2148* midi, UInt32 time)
{
    midi->timeRecv = 0;

	if (midi->status & STAT_RXRDY) {
        midi->status |= STAT_OE;
        if (midi->command & CMD_RSTER) {
            ym2148Reset(midi);
            return;
        }
	} 
    
    if (midi->rxPending != 0) {
        archSemaphoreWait(midi->semaphore, -1);
        midi->rxData = midi->rxQueue[(midi->rxHead - midi->rxPending) & (RX_QUEUE_SIZE - 1)];
        midi->rxPending--;
        archSemaphoreSignal(midi->semaphore);
        midi->status |= STAT_RXRDY;
        if (midi->command & CMD_RDINT) {
            boardSetDataBus(midi->vector, 0, 0);
            boardSetInt(0x800);
            midi->status |= ST_INT;
        }
    }
    
    midi->timeRecv = boardSystemTime() + midi->charTime;
    boardTimerAdd(midi->timerRecv, midi->timeRecv);
}
コード例 #2
0
static void ym2148WriteCommand(YM2148* midi, UInt8 value)
{
    midi->command = value;

    if (value & 0x02) {
    }

    if (value & CMD_RST) {
        ym2148Reset(midi);
    }

    midi->charTime = (UInt32)((UInt64)144 * boardFrequency() / 500000);
}
コード例 #3
0
ファイル: romMapperSfg05.c プロジェクト: CocoaMSX/CocoaMSX
static YM2148* ym2148Create()
{
    YM2148* midi = (YM2148*)calloc(1, sizeof(YM2148));

    midi->midiIo = midiIoCreate(midiInCallback, midi);
    midi->semaphore = archSemaphoreCreate(1);
    midi->timerRecv   = boardTimerCreate(onRecv, midi);
    midi->timerTrans  = boardTimerCreate(onTrans, midi);

    ym2148Reset(midi);

    return midi;
}
コード例 #4
0
ファイル: romMapperSfg05.c プロジェクト: CocoaMSX/CocoaMSX
static void ym2148WriteCommand(YM2148* midi, UInt8 value)
{
    UInt8 oldValue = midi->command;

    midi->command = value;
    
    if (value & CMD_RST) {
        ym2148Reset(midi);
        return;
    }

	if (value & CMD_TXINT) {
        if ((midi->status & STAT_TXEMPTY) && (value & CMD_TXEN)) {
                if (midi->command & CMD_TXINT) {
                boardSetDataBus(midi->vector, 0, 0);
                boardSetInt(0x800);
                midi->status |= ST_INT;
            }
        }
    }
}
コード例 #5
0
static void reset(RomMapperNet* rm) 
{
    ym2151Reset(rm->ym2151);
    ym2148Reset(rm->ym2148);
    rm->kbdLatch = 0;
}