Changeset 76 for hacks/xtide/atalib.h


Ignore:
Timestamp:
Dec 28, 2015, 2:37:00 AM (10 years ago)
Author:
bird
Message:

xtide-utils: ataid fixes. new delay method.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • hacks/xtide/atalib.h

    r75 r76  
    103103#define ATA_FV_XFERMODE_MWDMA_MODE_XXX_FLAG          UINT8_C(0x20)
    104104
     105
     106#define ATA_PIT_FREQ                        UINT32_C(1193182)
     107void AtaDelayPitTicks(uint8_t cTicks);
     108#pragma aux AtaDelayPitTicks = \
     109    "pushf" \
     110    "cli" \
     111    "in     al, 40h" \
     112    "mov    ch, al" /* ch = prev */ \
     113 "again:" \
     114    "nop" \
     115    "in     al, 40h" \
     116    "sub    ch, al" /* ch = ticks elapsed */ \
     117    "sub    cl, ch" /* check if ticks left is <= ticks elapsed; update ticks left. */ \
     118    "mov    ch, al" /* ch = prev tick count */ \
     119    "ja     again" \
     120    "popf" \
     121    parm [cl] \
     122    modify exact [ax cx];
     123
    105124/** Delay a bit by reading PIC mask. Should take 4-5 bus cycles,
    106125 * and thus be more than the required 400ns delay on old computers. */
    107 #define ATA_DELAY_400NS()   do { inp(0x21); } while (0)
     126#if 0
     127# define ATA_DELAY_400NS()   do { inp(0x21); } while (0)
     128# define ATA_DELAY_5US()     \
     129    do { ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); \
     130         ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); \
     131         ATA_DELAY_400NS(); ATA_DELAY_400NS(); ATA_DELAY_400NS(); \
     132    } while (0)
     133#else
     134# define ATA_DELAY_400NS()   AtaDelayPitTicks(1)
     135# define ATA_DELAY_5US()     AtaDelayPitTicks(6)
     136#endif
     137
    108138
    109139extern uint16_t g_cHeads;
Note: See TracChangeset for help on using the changeset viewer.