Changeset 589 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdePioBlock.asm
- Timestamp:
- May 22, 2016, 12:26:57 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdePioBlock.asm
r580 r589 29 29 ; -------------------------------------------------------------------------------------------------- 30 30 31 32 31 %ifdef MODULE_8BIT_IDE 33 34 32 ;-------------------------------------------------------------------- 35 33 ; IdePioBlock_ReadFromXtideRev1 … … 57 55 58 56 ;-------------------------------------------------------------------- 57 ; 8-bit PIO from a single data port. 58 ; 59 59 ; IdePioBlock_ReadFrom8bitDataPort 60 ;61 ; 8-bit PIO from a single data port.62 ;63 60 ; Parameters: 64 61 ; CX: Block size in 512 byte sectors … … 68 65 ; Nothing 69 66 ; Corrupts registers: 70 ; AX, BX,CX67 ; AX, CX 71 68 ;-------------------------------------------------------------------- 72 69 ALIGN JUMP_ALIGN … … 87 84 ret 88 85 %endif 89 90 %endif ; MODULE_8BIT_IDE 91 92 93 ;-------------------------------------------------------------------- 86 %endif ; MODULE_8BIT_IDE 87 88 89 ;-------------------------------------------------------------------- 90 ; 16-bit and 32-bit PIO from a single data port. 91 ; 94 92 ; IdePioBlock_ReadFrom16bitDataPort 95 ; 96 ; 16-bit PIO from a single data port. 97 ; 93 ; IdePioBlock_ReadFrom32bitDataPort 98 94 ; Parameters: 99 95 ; CX: Block size in 512 byte sectors … … 103 99 ; Nothing 104 100 ; Corrupts registers: 105 ; AX, BX,CX101 ; AX, CX 106 102 ;-------------------------------------------------------------------- 107 103 ALIGN JUMP_ALIGN 108 104 IdePioBlock_ReadFrom16bitDataPort: 109 105 %ifdef USE_186 110 xchg cl, ch ; Sectors to WORDs106 xchg cl, ch ; Sectors to WORDs 111 107 rep insw 112 108 ret … … 126 122 127 123 ;-------------------------------------------------------------------- 124 %ifdef MODULE_ADVANCED_ATA 128 125 ALIGN JUMP_ALIGN 129 126 IdePioBlock_ReadFrom32bitDataPort: 130 db 0C1h ; SHL 131 db 0E1h ; CX 132 db 7 ; 7 (Sectors to DWORDs) 133 rep 134 db 66h ; Override operand size to 32-bit 135 db 6Dh ; INSW/INSD 136 ret 137 127 shl cx, 7 ; Sectors to DWORDs 128 rep insd 129 ret 130 %endif ; MODULE_ADVANCED_ATA 138 131 139 132 … … 145 138 146 139 %ifdef MODULE_8BIT_IDE 147 148 140 ;-------------------------------------------------------------------- 149 141 ; IdePioBlock_WriteToXtideRev1 … … 151 143 ; CX: Block size in 512-byte sectors 152 144 ; DX: IDE Data port address 153 ; ES:SI: Normalized ptr to buffer containing data145 ; DS:SI: Normalized ptr to buffer containing data 154 146 ; Returns: 155 147 ; Nothing … … 159 151 ALIGN JUMP_ALIGN 160 152 IdePioBlock_WriteToXtideRev1: 161 push ds162 153 UNROLL_SECTORS_IN_CX_TO_QWORDS 163 154 mov bl, 8 ; Bit mask for toggling data low/high reg 164 push es165 pop ds166 155 ALIGN JUMP_ALIGN 167 156 .OutswLoop: … … 170 159 %endrep 171 160 loop .OutswLoop 172 pop ds173 161 ret 174 162 … … 179 167 ; CX: Block size in 512-byte sectors 180 168 ; DX: IDE Data port address 181 ; ES:SI: Normalized ptr to buffer containing data182 ; Returns: 183 ; Nothing 184 ; Corrupts registers: 185 ; AX, BX,CX169 ; DS:SI: Normalized ptr to buffer containing data 170 ; Returns: 171 ; Nothing 172 ; Corrupts registers: 173 ; AX, CX 186 174 ;-------------------------------------------------------------------- 187 175 ALIGN JUMP_ALIGN 188 176 IdePioBlock_WriteToXtideRev2: 189 177 UNROLL_SECTORS_IN_CX_TO_QWORDS 190 push ds191 push es192 pop ds193 178 ALIGN JUMP_ALIGN 194 179 .WriteNextQword: … … 197 182 %endrep 198 183 loop .WriteNextQword 199 pop ds200 184 ret 201 185 … … 206 190 ; CX: Block size in 512-byte sectors 207 191 ; DX: IDE Data port address 208 ; ES:SI: Normalized ptr to buffer containing data209 ; Returns: 210 ; Nothing 211 ; Corrupts registers: 212 ; AX, BX,CX192 ; DS:SI: Normalized ptr to buffer containing data 193 ; Returns: 194 ; Nothing 195 ; Corrupts registers: 196 ; AX, CX 213 197 ;-------------------------------------------------------------------- 214 198 ALIGN JUMP_ALIGN … … 216 200 %ifdef USE_186 217 201 shl cx, 9 ; Sectors to BYTEs 218 es ; Source is ES segment219 202 rep outsb 220 203 ret … … 222 205 %else ; 808x 223 206 UNROLL_SECTORS_IN_CX_TO_QWORDS 224 push ds225 push es226 pop ds227 207 ALIGN JUMP_ALIGN 228 208 .WriteNextQword: … … 232 212 %endrep 233 213 loop .WriteNextQword 234 pop ds 235 ret 236 %endif 237 214 ret 215 %endif 238 216 %endif ; MODULE_8BIT_IDE 239 217 … … 245 223 ; CX: Block size in 512-byte sectors 246 224 ; DX: IDE Data port address 247 ; ES:SI: Normalized ptr to buffer containing data248 ; Returns: 249 ; Nothing 250 ; Corrupts registers: 251 ; AX, BX,CX225 ; DS:SI: Normalized ptr to buffer containing data 226 ; Returns: 227 ; Nothing 228 ; Corrupts registers: 229 ; AX, CX 252 230 ;-------------------------------------------------------------------- 253 231 ALIGN JUMP_ALIGN … … 255 233 %ifdef USE_186 256 234 xchg cl, ch ; Sectors to WORDs 257 es ; Source is ES segment258 235 rep outsw 259 236 ret … … 261 238 %else ; 808x 262 239 UNROLL_SECTORS_IN_CX_TO_QWORDS 263 push ds264 push es265 pop ds266 240 ALIGN JUMP_ALIGN 267 241 .WriteNextQword: … … 271 245 %endrep 272 246 loop .WriteNextQword 273 pop ds274 ret 275 %endif 276 277 ;-------------------------------------------------------------------- 247 ret 248 %endif 249 250 ;-------------------------------------------------------------------- 251 %ifdef MODULE_ADVANCED_ATA 278 252 ALIGN JUMP_ALIGN 279 253 IdePioBlock_WriteTo32bitDataPort: 280 db 0C1h ; SHL 281 db 0E1h ; CX 282 db 7 ; 7 (Sectors to DWORDs) 283 es ; Source is ES segment 284 rep 285 db 66h ; Override operand size to 32-bit 286 db 6Fh ; OUTSW/OUTSD 287 ret 254 shl cx, 7 ; Sectors to DWORDs 255 rep outsd 256 ret 257 %endif ; MODULE_ADVANCED_ATA
Note:
See TracChangeset
for help on using the changeset viewer.