static void cyberstorm_mk1_mk2_dma_read(void *opaque, uint8_t *buf, int len)
{
struct ncr9x_state *ncr = (struct ncr9x_state*)opaque;
+ if (!(ncr->dma_ptr & 0x00000001)) {
+ write_log(_T("cyberstorm_dma_read mismatched direction!\n"));
+ return;
+ }
while (len > 0) {
uae_u16 v = get_word(ncr->dma_ptr & ~1);
*buf++ = v >> 8;
static void cyberstorm_mk1_mk2_dma_write(void *opaque, uint8_t *buf, int len)
{
struct ncr9x_state *ncr = (struct ncr9x_state*)opaque;
+ if (ncr->dma_ptr & 0x00000001) {
+ write_log(_T("cyberstorm_dma_write mismatched direction!\n"));
+ return;
+ }
while (len > 0) {
uae_u16 v;
v = *buf++;
static void blizzard_dma_read(void *opaque, uint8_t *buf, int len)
{
struct ncr9x_state *ncr = (struct ncr9x_state*)opaque;
+ if (!(ncr->dma_ptr & 0x80000000)) {
+ write_log(_T("blizzard_dma_read mismatched direction!\n"));
+ return;
+ }
while (len > 0) {
uae_u16 v = get_word((ncr->dma_ptr & 0x7fffffff) * 2);
*buf++ = v >> 8;
static void blizzard_dma_write(void *opaque, uint8_t *buf, int len)
{
struct ncr9x_state *ncr = (struct ncr9x_state*)opaque;
+ if (ncr->dma_ptr & 0x80000000) {
+ write_log(_T("blizzard_dma_write mismatched direction!\n"));
+ return;
+ }
while (len > 0) {
uae_u16 v;
v = *buf++;
scsi_emulate_cmd(sd);
if (sd->direction == 0)
return 1;
+ if (sd->direction > 0)
+ return -sd->data_len;
return sd->data_len;
}
void scsiesp_req_unref(SCSIRequest *req)