Changeset 76 for hacks/xtide/atalib.h
- Timestamp:
- Dec 28, 2015, 2:37:00 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
hacks/xtide/atalib.h
r75 r76 103 103 #define ATA_FV_XFERMODE_MWDMA_MODE_XXX_FLAG UINT8_C(0x20) 104 104 105 106 #define ATA_PIT_FREQ UINT32_C(1193182) 107 void 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 105 124 /** Delay a bit by reading PIC mask. Should take 4-5 bus cycles, 106 125 * 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 108 138 109 139 extern uint16_t g_cHeads;
Note:
See TracChangeset
for help on using the changeset viewer.