#include "arcadia.h"
#include "audio.h"
-//#define CIA_DEBUG_R
-//#define CIA_DEBUG_W
+//#define CIAA_DEBUG_R
+//#define CIAA_DEBUG_W
+//#define CIAB_DEBUG_R
+//#define CIAB_DEBUG_W
//#define DONGLE_DEBUG
#define TOD_HACK
compute_passed_time ();
-#ifdef CIA_DEBUG_R
+#ifdef CIAA_DEBUG_R
write_log("R_CIAA: bfe%x01 %08.8X\n", addr, M68K_GETPC);
#endif
return (uae_u8)(ciaatod >> 8);
case 10:
if (!ciaatlatch) { /* only if not already latched. A1200 confirmed. (TW) */
- ciaatlatch = 1;
+ /* no latching if ALARM is set */
+ if (!(ciaacrb & 0x80))
+ ciaatlatch = 1;
ciaatol = ciaatod;
}
return (uae_u8)(ciaatol >> 16);
{
unsigned int tmp;
-#ifdef CIA_DEBUG_R
+#ifdef CIAB_DEBUG_R
+ if (addr >= 8 && addr <= 10)
write_log("R_CIAB: bfd%x00 %08.8X\n", addr, M68K_GETPC);
#endif
return (uae_u8)(ciabtod >> 8);
case 10:
if (!ciabtlatch) {
- ciabtlatch = 1;
+ /* no latching if ALARM is set */
+ if (!(ciabcrb & 0x80))
+ ciabtlatch = 1;
ciabtol = ciabtod;
}
return (uae_u8)(ciabtol >> 16);
static void WriteCIAA (uae_u16 addr,uae_u8 val)
{
-#ifdef CIA_DEBUG_W
+#ifdef CIAA_DEBUG_W
write_log("W_CIAA: bfe%x01 %02.2X %08.8X\n", addr, val, M68K_GETPC);
#endif
#ifdef ACTION_REPLAY
static void WriteCIAB (uae_u16 addr,uae_u8 val)
{
-#ifdef CIA_DEBUG_W
- write_log("W_CIAB: bfd%x00 %02.2X %08.8X\n", addr, val, M68K_GETPC);
+#ifdef CIAB_DEBUG_W
+ if (addr >= 8 && addr <= 10)
+ write_log("W_CIAB: bfd%x00 %02.2X %08.8X\n", addr, val, M68K_GETPC);
#endif
#ifdef ACTION_REPLAY
ar_ciab[addr & 0xf] = val;
static void drive_step (drive * drv)
{
-#if 0
- if (drv->dskready) {
- drv->dskready = 0;
- drv->dskready_time = DSKREADY_TIME;
- }
-#endif
#ifdef CATWEASEL
if (drv->catweasel) {
int dir = direction ? -1 : 1;
gui_unlock ();
if (drv->dskready_down_time > 0)
drv->dskready_down_time--;
-#if 1
/* emulate drive motor turn on time */
- if (drv->dskready_time) {
+ if (drv->dskready_time && !drive_empty(drv)) {
drv->dskready_time--;
if (drv->dskready_time == 0)
drv->dskready = 1;
}
-#endif
/* delay until new disk image is inserted */
if (drv->dskchange_time) {
drv->dskchange_time--;
static uae_u8 prevdata;
static int step;
- if (disk_debug_logging > 1)
- write_log ("%08.8X %02.2X %s", M68K_GETPC, data, tobin(data));
-
lastselected = selected;
selected = (data >> 3) & 15;
side = 1 - ((data >> 2) & 1);
direction = (data >> 1) & 1;
step_pulse = data & 1;
+ if (disk_debug_logging > 1)
+ write_log ("%08.8X %02.2X %s drvmask=%x", M68K_GETPC, data, tobin(data), selected ^ 15);
+
if ((prevdata & 0x80) != (data & 0x80)) {
for (dr = 0; dr < 4; dr++) {
if (floppy[dr].indexhackmode > 1 && !(selected & (1 << dr))) {
noselected = 1;
} else {
if (disk_debug_logging > 0) {
- write_log ("disk %s DMA started, drv=%x track %d mfmpos %d\n",
+ write_log ("disk %s DMA started, drvmask=%x track %d mfmpos %d\n",
dskdmaen == 3 ? "write" : "read", selected ^ 15,
floppy[dr].cyl * 2 + side, floppy[dr].mfmpos);
disk_dma_debugmsg();
#define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
#define GETBDD(x) ((x) % 100)
-#define WINUAEBETA 9
+#define WINUAEBETA 10
#define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2007, 2, 27)
+#define WINUAEDATE MAKEBD(2007, 2, 28)
#define IHF_WINDOWHIDDEN 6
#define NORMAL_WINDOW_STYLE (WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU)
+
+Beta 10:
+
+- in some cases dskready signal was set active even if floppy drive
+ was empty and motor was running
+- yet another undocumented CIA TOD related feature implemented
+ TOD does not latch (by reading TODHI) if CRB ALARM-bit is set.
+ Fixes Batman the Movie (which worked in older versions only
+ by accident..)
+
Beta 9: (RC 2)
- non-ASPI CDTV CD audio didn't always stop when exiting/reseting