Changeset 536 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src


Ignore:
Timestamp:
Apr 10, 2013, 6:27:15 PM (11 years ago)
Author:
krille_n_@…
google:author:
krille_n_@hotmail.com
Message:

Changes:

  • Added support for the Silicon Valley Computer ADP50L controller (and possibly other IDE controllers from SVC using memory mapped I/O). Please note that this has not been tested in any way since I don't have any of these cards myself (make backups before trying this on drives with important data). Also, *if* it works, make sure it works reliably (stress test the disk system). Some things you should know: 1) Autodetection for this controller has not been added to XTIDECFG, you need to manually select the "SVC ADP50L" controller (and possibly change the BIOS segment address if not using the default of C800h). 2) The memory mapped I/O window is inside the ROM address space of the controller. The XTIDE Universal BIOS currently do not support this so that means you need to use another ROM (for example, an XTIDE or XTCF card or the BOOT ROM of a NIC). This presents another problem, the original ADP50L BIOS needs to be disabled somehow to avoid conflicts. Either pull the ROM chip or disable the BIOS by removing jumper J3. Note, I have no idea if any of this will actually work. It's basically a shot in the dark.
Location:
trunk/XTIDE_Universal_BIOS/Src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm

    r526 r536  
    175175%ifdef MODULE_8BIT_IDE_ADVANCED
    176176    cmp     BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_XTCF_MEMMAP
    177     jae     SHORT JrIdeTransfer_StartWithCommandInAL    ; DEVICE_8BIT_XTCF_MEMMAP or DEVICE_8BIT_JRIDE_ISA
     177    jae     SHORT JrIdeTransfer_StartWithCommandInAL    ; DEVICE_8BIT_XTCF_MEMMAP, DEVICE_8BIT_JRIDE_ISA or DEVICE_8BIT_ADP50L
    178178%endif
    179179    jmp     IdeTransfer_StartWithCommandInAL
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm

    r526 r536  
    6161    je      SHORT .ReverseA0andA3fromRegisterIndexInDX
    6262
     63    eSHL_IM dx, 1   ; ADP50L and XT-CF
    6364    cmp     al, DEVICE_8BIT_JRIDE_ISA
    64     jne     SHORT .ShlRegisterIndexInDX         ; All XT-CF modes
    65     ; Fall to .InputToALfromMemoryMappedRegisterInDX
    66 
    67 .InputToALfromMemoryMappedRegisterInDX:
     65    jb      SHORT .InputToALfromRegisterInDX    ; All XT-CF modes
     66    mov     bh, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8
     67    je      SHORT .InputToALfromMemoryMappedRegisterInBX
     68    mov     bl, dl
     69    mov     bh, ADP50L_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8
     70
     71.InputToALfromMemoryMappedRegisterInBX:
    6872    push    ds
    69     mov     ds, [di+DPT.wBasePort]  ; Segment for JR-IDE/ISA
    70     mov     al, [bx+JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET]
     73    mov     ds, [di+DPT.wBasePort]  ; Segment for JR-IDE/ISA and ADP50L
     74    mov     al, [bx]
    7175    pop     ds
    7276    ret
     
    7579.ReverseA0andA3fromRegisterIndexInDX:
    7680    mov     dl, [cs:bx+g_rgbSwapA0andA3fromIdeRegisterIndex]
    77     SKIP2B  bx  ; Skip shl dx, 1
    78 
    79 .ShlRegisterIndexInDX:
    80     eSHL_IM dx, 1
    81     ; Fall to .InputToALfromRegisterInDX
    8281
    8382.InputToALfromRegisterInDX:
     
    108107    je      SHORT .ReverseA0andA3fromRegisterIndexInDX
    109108
     109    ; At this point remaining controllers (JRIDE, XTCF and ADP50L) all have a control
     110    ; block offset of 8 or (8<<1) so we add 8 here and do the SHL 1 later if needed.
     111    add     dx, 8
    110112    cmp     bl, DEVICE_8BIT_JRIDE_ISA
    111     jne     SHORT .ShlRegisterIndexInDX     ; All XT-CF modes
    112     ; Fall to .OutputALtoMemoryMappedRegisterInDX
    113 
    114 .OutputALtoMemoryMappedRegisterInDX:
    115     mov     bx, JRIDE_CONTROL_BLOCK_REGISTER_WINDOW_OFFSET
    116     jmp     SHORT IdeIO_OutputALtoIdeRegisterInDL.OutputALtoMemoryMappedRegisterInDXwithWindowOffsetInBX
     113    jb      SHORT IdeIO_OutputALtoIdeRegisterInDL.ShlRegisterIndexInDXandOutputAL   ; All XT-CF modes
     114    mov     bx, JRIDE_CONTROL_BLOCK_REGISTER_WINDOW_OFFSET - 8          ; Zeroes BL. -8 compensates for the ADD
     115    je      SHORT IdeIO_OutputALtoIdeRegisterInDL.OutputALtoMemoryMappedRegisterInDXwithWindowOffsetInBX
     116    ; The commented instructions below shows what happens next (saved for clarity) but as an optimization
     117    ; we can accomplish the same thing with this jump.
     118    jmp     SHORT IdeIO_OutputALtoIdeRegisterInDL.ShlDXandMovHighByteOfADP50LoffsetsToBH
     119;   eSHL_IM dx, 1
     120;   mov     bh, (ADP50L_CONTROL_BLOCK_REGISTER_WINDOW_OFFSET - 16) >> 8 ; -16 compensates for the ADD and SHL
     121;   jmp     SHORT IdeIO_OutputALtoIdeRegisterInDL.OutputALtoMemoryMappedRegisterInDXwithWindowOffsetInBX
    117122%endif
    118123
     
    122127    ; a small trick since we only access Device Control Register at
    123128    ; offset 6h: Always clear A3 and set A0.
     129    mov     bh, dh  ; Zero BH
    124130    add     dx, [cs:bx+IDEVARS.wControlBlockPort]
    125131    xor     dl, 1001b                       ; Clear A3, Set A0
    126     jmp     SHORT OutputALtoPortInDX
    127 
    128 .ShlRegisterIndexInDX:
    129     eSHL_IM dx, 1
    130     add     dx, BYTE XTCF_CONTROL_BLOCK_OFFSET
    131     jmp     SHORT OutputALtoRegisterInDX
     132    out     dx, al
     133    ret
    132134
    133135.OutputALtoControlBlockRegisterInDX:
    134     call    AccessDPT_GetIdevarsToCSBX
     136    call    AccessDPT_GetIdevarsToCSBX      ; *FIXME* Why is this call here but not in the above block?
    135137    add     dx, [cs:bx+IDEVARS.wControlBlockPort]
    136     jmp     SHORT OutputALtoPortInDX
     138    out     dx, al
     139    ret
    137140
    138141
     
    160163
    161164    cmp     bl, DEVICE_8BIT_JRIDE_ISA
    162     jne     SHORT .ShlRegisterIndexInDX     ; All XT-CF modes
    163     ; Fall to .OutputALtoMemoryMappedRegisterInDX
    164 
    165 .OutputALtoMemoryMappedRegisterInDX:
    166     mov     bx, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET
     165    jb      SHORT .ShlRegisterIndexInDXandOutputAL  ; All XT-CF modes
     166    mov     bx, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET  ; Zeroes BL
     167    je      SHORT .OutputALtoMemoryMappedRegisterInDXwithWindowOffsetInBX
     168.ShlDXandMovHighByteOfADP50LoffsetsToBH:
     169    eSHL_IM dx, 1
     170    mov     bh, ADP50L_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8    ; BL is zero so we only need to change BH
     171
    167172.OutputALtoMemoryMappedRegisterInDXwithWindowOffsetInBX:
    168173    add     bx, dx
    169174    push    ds
    170     mov     ds, [di+DPT.wBasePort]  ; Segment for JR-IDE/ISA
     175    mov     ds, [di+DPT.wBasePort]  ; Segment for JR-IDE/ISA and ADP50L
    171176    mov     [bx], al
    172177    pop     ds
     
    177182    mov     bx, dx
    178183    mov     dl, [cs:bx+g_rgbSwapA0andA3fromIdeRegisterIndex]
    179     SKIP2B  bx  ; Skip shl dx, 1
    180 
    181 .ShlRegisterIndexInDX:
     184    SKIP2B  bx  ; Skip eSHL_IM dx, 1
     185
     186.ShlRegisterIndexInDXandOutputAL:
    182187    eSHL_IM dx, 1
    183188    ; Fall to OutputALtoRegisterInDX
     
    186191OutputALtoRegisterInDX:
    187192    add     dx, [di+DPT.wBasePort]
    188 OutputALtoPortInDX:
    189193    out     dx, al
    190194    ret
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/JrIdeTransfer.asm

    r526 r536  
    2727    .bSectorsDone           resb    1   ; 8, Number of sectors xferred
    2828endstruc
    29 
    30 SECTOR_ACCESS_WINDOW_SIZE   EQU     512 ; 512 bytes
    3129
    3230
     
    6866    mov     dx, [di+DPT.wBasePort]
    6967    cmp     BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_JRIDE_ISA
    70     jne     SHORT .GetSectorAccessWindowForXTCF
    71 
    72     ; Get Sector Access Window for JR-IDE/ISA
     68    jb      SHORT .GetSectorAccessWindowForXTCF
     69
     70    ; Get Sector Access Window for JR-IDE/ISA and ADP50L
     71    mov     ds, dx      ; Segment for JR-IDE/ISA and ADP50L
    7372    mov     di, JRIDE_SECTOR_ACCESS_WINDOW_OFFSET
    74     mov     ds, dx      ; Segment for JR-IDE/ISA
     73    je      SHORT .SectorAccessWindowLoadedToDSDI
     74    mov     di, ADP50L_SECTOR_ACCESS_WINDOW_OFFSET
    7575    jmp     SHORT .SectorAccessWindowLoadedToDSDI
    7676
     
    231231    mov     bx, di
    232232    mov     dx, cx
    233     xor     cl, cl
     233    xor     cx, cx
    234234ALIGN JUMP_ALIGN
    235235.WriteNextSector:
    236     mov     ch, SECTOR_ACCESS_WINDOW_SIZE >> 9
     236    inc     ch
    237237    rep movsw
    238238    mov     di, bx  ; Reset for next sector
     
    258258    mov     bx, si
    259259    mov     dx, cx
    260     xor     cl, cl
     260    xor     cx, cx
    261261ALIGN JUMP_ALIGN
    262262.ReadNextSector:
    263     mov     ch, SECTOR_ACCESS_WINDOW_SIZE >> 9
     263    inc     ch
    264264    rep movsw
    265265    mov     si, bx  ; Reset for next sector
     
    289289    ret
    290290
    291 
    292 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
    293 %if SECTOR_ACCESS_WINDOW_SIZE <> 512
    294     %error "SECTOR_ACCESS_WINDOW_SIZE is no longer equal to 512. JrIdeTransfer.asm needs changes."
    295 %endif
    296 %endif
  • trunk/XTIDE_Universal_BIOS/Src/Main.asm

    r529 r536  
    147147    at  ROMVARS.ideVars1+IDEVARS.bXTCFcontrolRegister,  db  XTCF_8BIT_PIO_MODE
    148148    at  ROMVARS.ideVars1+IDEVARS.bDevice,               db  DEVICE_8BIT_XTCF_PIO8
     149%endif
     150
    149151    at  ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,  db  DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
    150152    at  ROMVARS.ideVars1+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags,   db  DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
    151 %else
    152     at  ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,  db  DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
    153     at  ROMVARS.ideVars1+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags,   db  DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
    154 %endif
    155153
    156154    at  ROMVARS.ideVars2+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,  db  DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
  • trunk/XTIDE_Universal_BIOS/Src/Strings.asm

    r526 r536  
    144144g_szDeviceTypeValues_XTCFmem:   db  "M8 ",NULL  ; Memory Mapped 8-bit
    145145g_szDeviceTypeValues_JrIde:     db  "M8 ",NULL
     146g_szDeviceTypeValues_ADP50L:    db  "M8 ",NULL
    146147g_szDeviceTypeValues_Serial:    db  "SER",NULL
    147148
     
    178179        %error "g_szDeviceTypeValues Displacement Incorrect 8"
    179180    %endif
    180     %if g_szDeviceTypeValues_Serial <> g_szDeviceTypeValues_JrIde + g_szDeviceTypeValues_Displacement
     181    %if g_szDeviceTypeValues_ADP50L <> g_szDeviceTypeValues_JrIde + g_szDeviceTypeValues_Displacement
    181182        %error "g_szDeviceTypeValues Displacement Incorrect 9"
    182183    %endif
     184    %if g_szDeviceTypeValues_Serial <> g_szDeviceTypeValues_ADP50L + g_szDeviceTypeValues_Displacement
     185        %error "g_szDeviceTypeValues Displacement Incorrect 10"
     186    %endif
    183187%endif
    184188
    185189
    186190g_szSelectionTimeout:   db  DOUBLE_BOTTOM_LEFT_CORNER,DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL,"%ASelection in %2-u s",NULL
    187 
    188 
    189 ; Boot Menu information strings
    190 g_szCapacity:           db  "Capacity : %s",NULL
    191 g_szCapacityNum:        db  "%5-u.%u %ciB",NULL
    192 g_szInformation:        db  "%s",LF,CR
    193     db  "Addr. ",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus",SINGLE_VERTICAL,"IRQ",SINGLE_VERTICAL,"Reset",LF,CR
    194     db  "%s",SINGLE_VERTICAL,"%5-u",SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x",NULL
    195191
    196192
     
    220216    %endif
    221217%endif
     218
     219
     220; Boot Menu information strings
     221g_szCapacity:           db  "Capacity : %s",NULL
     222g_szCapacityNum:        db  "%5-u.%u %ciB",NULL
     223g_szInformation:        db  "%s",LF,CR
     224                        db  "Addr. ",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus",SINGLE_VERTICAL,"IRQ",SINGLE_VERTICAL,"Reset",LF,CR
     225                        db  "%s",SINGLE_VERTICAL,"%5-u",SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x",NULL
    222226
    223227%endif ; MODULE_BOOT_MENU
  • trunk/XTIDE_Universal_BIOS/Src/StringsCompressed.asm

    r526 r536  
    289289                                  db     53h,  30h,  00h          ; compressed
    290290
     291g_szDeviceTypeValues_ADP50L:    ; db    "M8 ",NULL
     292                                ; db     4dh,  38h,  20h,  00h    ; uncompressed
     293                                  db     53h,  30h,  00h          ; compressed
     294
    291295g_szDeviceTypeValues_Serial:    ; db    "SER",NULL
    292296                                ; db     53h,  45h,  52h,  00h    ; uncompressed
     
    326330%error "g_szDeviceTypeValues Displacement Incorrect 8"
    327331%endif
    328 %if g_szDeviceTypeValues_Serial <> g_szDeviceTypeValues_JrIde + g_szDeviceTypeValues_Displacement
     332%if g_szDeviceTypeValues_ADP50L <> g_szDeviceTypeValues_JrIde + g_szDeviceTypeValues_Displacement
    329333%error "g_szDeviceTypeValues Displacement Incorrect 9"
     334%endif
     335%if g_szDeviceTypeValues_Serial <> g_szDeviceTypeValues_ADP50L + g_szDeviceTypeValues_Displacement
     336%error "g_szDeviceTypeValues Displacement Incorrect 10"
    330337%endif
    331338%endif
     
    335342                        ; db    0c8h, 0b5h,  25h,  41h,  53h,  65h,  6ch,  65h,  63h,  74h,  69h,  6fh,  6eh,  20h,  69h,  6eh,  20h,  25h,  32h,  2dh,  75h,  20h,  73h,  00h    ; uncompressed
    336343                          db     31h,  32h,  3bh,  59h,  6bh,  72h,  6bh,  69h,  7ah,  6fh,  75h, 0f4h,  6fh, 0f4h,  3ah,  20h, 0b9h                                              ; compressed
    337 
    338 
    339 
    340 ; Boot Menu information strings
    341 g_szCapacity:           ; db    "Capacity : %s",NULL
    342                         ; db     43h,  61h,  70h,  61h,  63h,  69h,  74h,  79h,  20h,  3ah,  20h,  25h,  73h,  00h    ; uncompressed
    343                           db     49h,  67h,  76h,  67h,  69h,  6fh,  7ah, 0ffh, 0c0h,  1dh                            ; compressed
    344 
    345 g_szCapacityNum:        ; db    "%5-u.%u %ciB",NULL
    346                         ; db     25h,  35h,  2dh,  75h,  2eh,  25h,  75h,  20h,  25h,  63h,  69h,  42h,  00h    ; uncompressed
    347                           db     36h,  29h,  35h,  20h,  3ch,  6fh,  88h                                        ; compressed
    348 
    349 g_szInformation:        ; db    "%s",LF,CR
    350                         ; db     25h,  73h,  0ah,  0dh    ; uncompressed
    351                           db     3dh,  39h                ; compressed
    352 
    353     ; db    "Addr. ",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus",SINGLE_VERTICAL,"IRQ",SINGLE_VERTICAL,"Reset",LF,CR
    354     ; db     41h,  64h,  64h,  72h,  2eh,  20h, 0b3h,  42h,  6ch,  6fh,  63h,  6bh, 0b3h,  42h,  75h,  73h, 0b3h,  49h,  52h,  51h, 0b3h,  52h,  65h,  73h,  65h,  74h,  0ah,  0dh    ; uncompressed
    355       db     47h,  6ah,  6ah,  78h,  29h,  20h,  23h,  48h,  72h,  75h,  69h,  71h,  23h,  48h,  7bh,  79h,  23h,  4fh,  58h,  57h,  23h,  58h,  6bh,  79h,  6bh,  7ah,  39h          ; compressed
    356 
    357     ; db    "%s",SINGLE_VERTICAL,"%5-u",SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x",NULL
    358     ; db     25h,  73h, 0b3h,  25h,  35h,  2dh,  75h, 0b3h,  25h,  73h, 0b3h,  20h,  25h,  32h,  2dh,  49h, 0b3h,  25h,  35h,  2dh,  78h,  00h    ; uncompressed
    359       db     3dh,  23h,  36h,  23h,  3dh,  23h,  20h,  34h,  23h,  18h                                                                            ; compressed
    360344
    361345
     
    404388%endif
    405389%endif
     390
     391
     392; Boot Menu information strings
     393g_szCapacity:           ; db    "Capacity : %s",NULL
     394                        ; db     43h,  61h,  70h,  61h,  63h,  69h,  74h,  79h,  20h,  3ah,  20h,  25h,  73h,  00h    ; uncompressed
     395                          db     49h,  67h,  76h,  67h,  69h,  6fh,  7ah, 0ffh, 0c0h,  1dh                            ; compressed
     396
     397g_szCapacityNum:        ; db    "%5-u.%u %ciB",NULL
     398                        ; db     25h,  35h,  2dh,  75h,  2eh,  25h,  75h,  20h,  25h,  63h,  69h,  42h,  00h    ; uncompressed
     399                          db     36h,  29h,  35h,  20h,  3ch,  6fh,  88h                                        ; compressed
     400
     401g_szInformation:        ; db    "%s",LF,CR
     402                        ; db     25h,  73h,  0ah,  0dh    ; uncompressed
     403                          db     3dh,  39h                ; compressed
     404
     405    ; db    "Addr. ",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus",SINGLE_VERTICAL,"IRQ",SINGLE_VERTICAL,"Reset",LF,CR
     406    ; db     41h,  64h,  64h,  72h,  2eh,  20h, 0b3h,  42h,  6ch,  6fh,  63h,  6bh, 0b3h,  42h,  75h,  73h, 0b3h,  49h,  52h,  51h, 0b3h,  52h,  65h,  73h,  65h,  74h,  0ah,  0dh    ; uncompressed
     407      db     47h,  6ah,  6ah,  78h,  29h,  20h,  23h,  48h,  72h,  75h,  69h,  71h,  23h,  48h,  7bh,  79h,  23h,  4fh,  58h,  57h,  23h,  58h,  6bh,  79h,  6bh,  7ah,  39h          ; compressed
     408
     409    ; db    "%s",SINGLE_VERTICAL,"%5-u",SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x",NULL
     410    ; db     25h,  73h, 0b3h,  25h,  35h,  2dh,  75h, 0b3h,  25h,  73h, 0b3h,  20h,  25h,  32h,  2dh,  49h, 0b3h,  25h,  35h,  2dh,  78h,  00h    ; uncompressed
     411      db     3dh,  23h,  36h,  23h,  3dh,  23h,  20h,  34h,  23h,  18h                                                                            ; compressed
     412
    406413
    407414%endif ; MODULE_BOOT_MENU
     
    554561;; translated usage stats
    555562;; 33:1
    556 ;; 32:34
     563;; 32:35
    557564;; 181:1
    558565;; 53:2
     
    568575;; 34:3
    569576;; 49:1
    570 ;; 56:7
     577;; 56:8
    571578;; 45:2
    572579;; 175:1
     
    609616;; 75,K:1
    610617;; 76,L:4
    611 ;; 77,M:7
     618;; 77,M:8
    612619;; 78,N:2
    613620;; 79,O:2
Note: See TracChangeset for help on using the changeset viewer.