Changeset 601 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE
- Timestamp:
- Feb 14, 2019, 7:38:08 PM (6 years ago)
- Location:
- trunk/XTIDE_Universal_BIOS/Src/Device/IDE
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm
r558 r601 59 59 60 60 %ifdef MODULE_8BIT_IDE_ADVANCED 61 je SHORT .ReverseA0andA3fromRegisterIndexInDX 61 cmp al, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 62 jbe SHORT .ReverseA0andA3fromRegisterIndexInDX 62 63 63 64 eSHL_IM dx, 1 ; ADP50L and XT-CF … … 99 100 IdeIO_OutputALtoIdeControlBlockRegisterInDL: 100 101 xor dh, dh ; IDE Register index now in DX 101 102 102 mov bl, [di+DPT_ATA.bDevice] 103 103 cmp bl, DEVICE_8BIT_XTIDE_REV2 … … 105 105 106 106 %ifdef MODULE_8BIT_IDE_ADVANCED 107 je SHORT .ReverseA0andA3fromRegisterIndexInDX 107 cmp bl, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 108 jbe SHORT .ReverseA0andA3fromRegisterIndexInDX 108 109 109 110 ; At this point remaining controllers (JRIDE, XTCF and ADP50L) all have a control … … 154 155 IdeIO_OutputALtoIdeRegisterInDL: 155 156 xor dh, dh ; IDE Register index now in DX 156 157 157 mov bl, [di+DPT_ATA.bDevice] 158 158 cmp bl, DEVICE_8BIT_XTIDE_REV2 … … 160 160 161 161 %ifdef MODULE_8BIT_IDE_ADVANCED 162 je SHORT .ReverseA0andA3fromRegisterIndexInDX 162 cmp bl, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 163 jbe SHORT .ReverseA0andA3fromRegisterIndexInDX 163 164 164 165 cmp bl, DEVICE_8BIT_JRIDE_ISA -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdePioBlock.asm
r589 r601 55 55 56 56 ;-------------------------------------------------------------------- 57 ; IdePioBlock_ReadFromXtideRev2_Olivetti 58 ; Parameters: 59 ; CX: Block size in 512 byte sectors 60 ; DX: IDE Data port address 61 ; ES:DI: Normalized ptr to buffer to receive data 62 ; Returns: 63 ; Nothing 64 ; Corrupts registers: 65 ; AX, CX 66 ;-------------------------------------------------------------------- 67 ALIGN JUMP_ALIGN 68 IdePioBlock_ReadFromXtideRev2_Olivetti: 69 UNROLL_SECTORS_IN_CX_TO_OWORDS 70 ALIGN JUMP_ALIGN 71 .InswLoop: 72 %rep 8 ; WORDs 73 XTIDE_MOD_OLIVETTI_INSW 74 %endrep 75 loop .InswLoop 76 ret 77 78 79 ;-------------------------------------------------------------------- 57 80 ; 8-bit PIO from a single data port. 58 81 ; -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm
r589 r601 328 328 ALIGN WORD_ALIGN 329 329 g_rgfnPioRead: 330 dw IdePioBlock_ReadFrom16bitDataPort ; 0, DEVICE_16BIT_ATA330 dw IdePioBlock_ReadFrom16bitDataPort ; 0, DEVICE_16BIT_ATA 331 331 %ifdef MODULE_ADVANCED_ATA 332 dw IdePioBlock_ReadFrom32bitDataPort ; 1, DEVICE_32BIT_ATA332 dw IdePioBlock_ReadFrom32bitDataPort ; 1, DEVICE_32BIT_ATA 333 333 %elifdef MODULE_8BIT_IDE 334 334 dw NULL 335 335 %endif ; MODULE_ADVANCED_ATA 336 336 %ifdef MODULE_8BIT_IDE 337 dw IdePioBlock_ReadFrom8bitDataPort ; 2, DEVICE_8BIT_ATA 338 dw IdePioBlock_ReadFromXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 339 dw IdePioBlock_ReadFrom16bitDataPort ; 4, DEVICE_8BIT_XTIDE_REV2 337 dw IdePioBlock_ReadFrom8bitDataPort ; 2, DEVICE_8BIT_ATA 338 dw IdePioBlock_ReadFromXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 339 dw IdePioBlock_ReadFrom16bitDataPort ; 4, DEVICE_8BIT_XTIDE_REV2 340 dw IdePioBlock_ReadFromXtideRev2_Olivetti ; 5, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 340 341 %ifdef MODULE_8BIT_IDE_ADVANCED 341 dw IdePioBlock_ReadFrom8bitDataPort ; 5, DEVICE_8BIT_XTCF_PIO8342 dw IdePioBlock_ReadFrom16bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD343 dw IdePioBlock_ReadFrom16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD344 dw IdeDmaBlock_ReadFromXTCF ; 8, DEVICE_8BIT_XTCF_DMA342 dw IdePioBlock_ReadFrom8bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8 343 dw IdePioBlock_ReadFrom16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD 344 dw IdePioBlock_ReadFrom16bitDataPort ; 8, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD 345 dw IdeDmaBlock_ReadFromXTCF ; 9, DEVICE_8BIT_XTCF_DMA 345 346 %endif ; MODULE_8BIT_IDE_ADVANCED 346 347 %endif ; MODULE_8BIT_IDE … … 348 349 349 350 g_rgfnPioWrite: 350 dw IdePioBlock_WriteTo16bitDataPort ; 0, DEVICE_16BIT_ATA351 dw IdePioBlock_WriteTo16bitDataPort ; 0, DEVICE_16BIT_ATA 351 352 %ifdef MODULE_ADVANCED_ATA 352 dw IdePioBlock_WriteTo32bitDataPort ; 1, DEVICE_32BIT_ATA353 dw IdePioBlock_WriteTo32bitDataPort ; 1, DEVICE_32BIT_ATA 353 354 %elifdef MODULE_8BIT_IDE 354 355 dw NULL 355 356 %endif ; MODULE_ADVANCED_ATA 356 357 %ifdef MODULE_8BIT_IDE 357 dw IdePioBlock_WriteTo8bitDataPort ; 2, DEVICE_8BIT_ATA 358 dw IdePioBlock_WriteToXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 359 dw IdePioBlock_WriteToXtideRev2 ; 4, DEVICE_8BIT_XTIDE_REV2 358 dw IdePioBlock_WriteTo8bitDataPort ; 2, DEVICE_8BIT_ATA 359 dw IdePioBlock_WriteToXtideRev1 ; 3, DEVICE_8BIT_XTIDE_REV1 360 dw IdePioBlock_WriteToXtideRev2 ; 4, DEVICE_8BIT_XTIDE_REV2 361 dw IdePioBlock_WriteToXtideRev2 ; 5, DEVICE_8BIT_XTIDE_REV2_OLIVETTI 360 362 %ifdef MODULE_8BIT_IDE_ADVANCED 361 dw IdePioBlock_WriteTo8bitDataPort ; 5, DEVICE_8BIT_XTCF_PIO8362 dw IdePioBlock_WriteTo16bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD363 dw IdePioBlock_WriteTo16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD364 dw IdeDmaBlock_WriteToXTCF ; 8, DEVICE_8BIT_XTCF_DMA363 dw IdePioBlock_WriteTo8bitDataPort ; 6, DEVICE_8BIT_XTCF_PIO8 364 dw IdePioBlock_WriteTo16bitDataPort ; 7, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD 365 dw IdePioBlock_WriteTo16bitDataPort ; 8, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD 366 dw IdeDmaBlock_WriteToXTCF ; 9, DEVICE_8BIT_XTCF_DMA 365 367 %endif ; MODULE_8BIT_IDE_ADVANCED 366 368 %endif ; MODULE_8BIT_IDE -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/JrIdeTransfer.asm
r592 r601 100 100 jc SHORT ReturnWithMemoryIOtransferErrorInAH 101 101 102 mov cx, [bp+MEMPIOVARS.wSectorsInBlock] ; Clears CH103 cmp [bp+MEMPIOVARS.bSectorsLeft], cl102 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] ; Clears DH 103 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 104 104 jbe SHORT .ReadLastBlockFromDrive 105 105 … … 119 119 ; transferred, there will be a wait for next block but DRQ is never 120 120 ; set since all is transferred! Then we get timeout error. 121 mov cx, [bp+MEMPIOVARS.wSectorsInBlock]122 sub [bp+MEMPIOVARS.bSectorsLeft], cl123 add [bp+MEMPIOVARS.bSectorsDone], cl124 cmp [bp+MEMPIOVARS.bSectorsLeft], cl121 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] 122 sub [bp+MEMPIOVARS.bSectorsLeft], dl 123 add [bp+MEMPIOVARS.bSectorsDone], dl 124 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 125 125 ja SHORT .ReadNextBlockFromDrive 126 126 127 127 ALIGN JUMP_ALIGN 128 128 .ReadLastBlockFromDrive: 129 mov cl, [bp+MEMPIOVARS.bSectorsLeft]130 push cx129 mov dl, [bp+MEMPIOVARS.bSectorsLeft] 130 push dx 131 131 call ReadSingleBlockFromSectorAccessWindowInDSSItoESDI 132 132 … … 181 181 jc SHORT ReturnWithMemoryIOtransferErrorInAH 182 182 183 mov cx, [bp+MEMPIOVARS.wSectorsInBlock]184 cmp [bp+MEMPIOVARS.bSectorsLeft], cl183 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] 184 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 185 185 jbe SHORT .WriteLastBlockToDrive 186 186 … … 192 192 193 193 ; Increment number of successfully written WORDs 194 mov cx, [bp+MEMPIOVARS.wSectorsInBlock]195 sub [bp+MEMPIOVARS.bSectorsLeft], cl196 add [bp+MEMPIOVARS.bSectorsDone], cl197 cmp [bp+MEMPIOVARS.bSectorsLeft], cl194 mov dx, [bp+MEMPIOVARS.wSectorsInBlock] 195 sub [bp+MEMPIOVARS.bSectorsLeft], dl 196 add [bp+MEMPIOVARS.bSectorsDone], dl 197 cmp [bp+MEMPIOVARS.bSectorsLeft], dl 198 198 ja SHORT .WriteNextBlockToDrive 199 199 200 200 ALIGN JUMP_ALIGN 201 201 .WriteLastBlockToDrive: 202 mov cl, [bp+MEMPIOVARS.bSectorsLeft]203 push cx202 mov dl, [bp+MEMPIOVARS.bSectorsLeft] 203 push dx 204 204 ePUSH_T bx, CheckErrorsAfterTransferringLastMemoryMappedBlock 205 205 ; Fall to WriteSingleBlockFromDSSIToSectorAccessWindowInESDI … … 208 208 ; WriteSingleBlockFromDSSIToSectorAccessWindowInESDI 209 209 ; Parameters: 210 ; CX: Number of sectors in block210 ; DX: Number of sectors in block 211 211 ; DS:SI: Normalized ptr to source buffer 212 212 ; ES:DI: Ptr to Sector Access Window … … 220 220 WriteSingleBlockFromDSSIToSectorAccessWindowInESDI: 221 221 mov bx, di 222 mov dx, cx223 222 xor cx, cx 224 223 ALIGN JUMP_ALIGN … … 235 234 ; ReadSingleBlockFromSectorAccessWindowInDSSItoESDI 236 235 ; Parameters: 237 ; CX Number of sectors in full block or sectors in last partialblock238 ; ES:DI: Normalized ptr to buffer to receive data (destination)239 ; DS:SI: Ptr to Sector Access Window (source)236 ; DX: Number of sectors in block 237 ; ES:DI: Normalized ptr to destination buffer 238 ; DS:SI: Ptr to Sector Access Window 240 239 ; Returns: 241 240 ; CX, DX: Zero … … 247 246 ReadSingleBlockFromSectorAccessWindowInDSSItoESDI: 248 247 mov bx, si 249 mov dx, cx250 248 xor cx, cx 251 249 ALIGN JUMP_ALIGN
Note:
See TracChangeset
for help on using the changeset viewer.