static void audio_state_channel2 (int nr, bool perfin) { struct audio_channel_data *cdp = audio_channel + nr; bool chan_ena = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); bool old_dma = cdp->dmaenstore; int audav = adkcon & (0x01 << nr); int audap = adkcon & (0x10 << nr); int napnav = (!audav && !audap) || audav; int hpos = current_hpos (); cdp->dmaenstore = chan_ena; if (currprefs.produce_sound == 0) { zerostate (cdp); return; } audio_activate (); if ((cdp->state == 2 || cdp->state == 3) && usehacks1 () && !chan_ena && old_dma) { // DMA switched off, state=2/3 and "too fast CPU": kill DMA instantly // or CPU timed DMA wait routines in common tracker players will lose notes newsample (cdp, (cdp->dat2 >> 0) & 0xff); if (napnav) setirq (nr); zerostate (cdp); return; }
static TCHAR *writets (void) { struct tm *t; struct _timeb tb; static TCHAR out[100]; TCHAR *p; static TCHAR lastts[100]; TCHAR curts[100]; if (bootlogmode) return NULL; if (nodatestamps) return NULL; _ftime (&tb); t = localtime (&tb.time); _tcsftime (curts, sizeof curts / sizeof (TCHAR), _T("%Y-%m-%d %H:%M:%S\n"), t); p = out; *p = 0; if (_tcsncmp (curts, lastts, _tcslen (curts) - 3)) { // "xx\n" _tcscat (p, curts); p += _tcslen (p); _tcscpy (lastts, curts); } _tcsftime (p, sizeof out / sizeof (TCHAR) - (p - out) , _T("%S-"), t); p += _tcslen (p); _stprintf (p, _T("%03d"), tb.millitm); p += _tcslen (p); if (vsync_counter != 0xffffffff) _stprintf (p, _T(" [%d %03d%s%03d]"), vsync_counter, current_hpos (), lof_store ? _T("-") : _T("="), vpos); _tcscat (p, _T(": ")); return out; }