Changeset 414 in xtideuniversalbios for trunk


Ignore:
Timestamp:
May 3, 2012, 12:56:04 PM (12 years ago)
Author:
aitotat@…
google:author:
aitotat@gmail.com
Message:

Changes to XTIDE Universal BIOS:

  • MEMPIOVARS no longer overflow when not building MODULE_EBIOS.
Location:
trunk/XTIDE_Universal_BIOS
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Inc/DeviceIDE.inc

    r410 r414  
    2222
    2323; Reset delays
    24 HSR0_RESET_WAIT_US      EQU     5       ; Delay at least 5us
    25 HSR1_RESET_WAIT_US      EQU     2000    ; Delay at least 2ms
     24HSR0_RESET_WAIT_US      EQU     6       ; Delay must be at least 5 us
     25HSR1_RESET_WAIT_US      EQU     2100    ; Delay must be at least 2 ms
    2626
    2727; Polling timeout delays (system timer ticks, 1 tick = 54.9 ms)
     
    3434TIMEOUT_DRDY            EQU     TIMEOUT_MOTOR_STARTUP
    3535%else
    36 TIMEOUT_BSY             EQU     (2500/55)   ; 2500 ms
    37 TIMEOUT_DRDY            EQU     (2500/55)   ; 2500 ms
     36TIMEOUT_BSY             EQU     (2600/55)   ; 2600 ms
     37TIMEOUT_DRDY            EQU     (2600/55)   ; 2600 ms
    3838%endif
    3939
  • trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc

    r413 r414  
    2626%endif
    2727
    28 
    29 ; Variables for translating drive numbers.
    30 struc XLATEVARS
    31 %ifdef MODULE_SERIAL_FLOPPY
    32     .bFlopCreateCnt:
    33     .bFlopCntAndFirst   resb    1   ; Normally, packed starting floppy drive number (high order 7 bits)
    34                                     ; and number of drives (low order bit, max 2 drives supported).
    35                                     ; During initialization, until the end of DetectDrives_FromAllIDEControllers,
    36                                     ; this byte contains the raw number of floppy drives seen (using .bFlopCreateCnt)
    37 %else
    38                         resb    1   ; alignment
    39 %endif
    40     .bXlatedDrv         resb    1   ; Drive number after translation
    41     .wFDandHDswap:
    42     .bFDSwap            resb    1   ; Floppy Drive to swap to 00h and vice versa
    43     .bHDSwap            resb    1   ; Hard Drive to swap to 80h and vice versa
    44 endstruc
    45 
    4628; RAM Variables.
    4729; Variables should be kept to minimum since they might be located
     
    6042
    6143    ; Variables for drive number translation
    62     .xlateVars      resb    XLATEVARS_size
     44%ifdef MODULE_HOTKEYS
     45    .xlateVars          resb    XLATEVARS_size
     46%endif
    6347endstruc
     48
     49
     50; Variables for translating drive numbers.
     51%ifdef MODULE_HOTKEYS
     52    struc XLATEVARS
     53    %ifdef MODULE_SERIAL_FLOPPY
     54        .bFlopCreateCnt:
     55        .bFlopCntAndFirst   resb    1   ; Normally, packed starting floppy drive number (high order 7 bits)
     56                                        ; and number of drives (low order bit, max 2 drives supported).
     57                                        ; During initialization, until the end of DetectDrives_FromAllIDEControllers,
     58                                        ; this byte contains the raw number of floppy drives seen (using .bFlopCreateCnt)
     59    %else
     60                            resb    1   ; alignment
     61    %endif
     62        .bXlatedDrv         resb    1   ; Drive number after translation
     63        .wFDandHDswap:
     64        .bFDSwap            resb    1   ; Floppy Drive to swap to 00h and vice versa
     65        .bHDSwap            resb    1   ; Hard Drive to swap to 80h and vice versa
     66    endstruc
     67%endif
     68
    6469
    6570%ifdef MODULE_SERIAL_FLOPPY
     
    7782; wire for MODULE_SERIAL, please do not change the order or insert other members.
    7883;
    79 struc IDEPACK
     84struc IDEPACK   ; PIOVARS and MEMPIOVARS overwrite the first 7 bytes
    8085    .bFeatures              resb    1
    8186    .bDrvAndHead            resb    1   ; LBA28 27...24
     
    9297
    9398    .bCommand               resb    1
    94     .bDeviceControl         resb    1   ; Offset 7 shared with PIOVARS
    95                             resb    1
     99    .bDeviceControl         resb    1   ; Offset 7 shared with PIOVARS and MEMPIOVARS
     100                            resb    1   ; Used by PIOVARS and MEMPIOVARS
    96101
    97102%ifdef MODULE_EBIOS
     
    102107    .bLbaHighExt            resb    1   ; LBA48 47...40
    103108%endif
     109
    104110    .intpack                resb    INTPACK_size
    105111endstruc
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm

    r412 r414  
    3333;--------------------------------------------------------------------
    3434IdeIO_OutputALtoIdeControlBlockRegisterInDL:
    35 %ifdef MODULE_8BIT_IDE
    36     mov     dh, [di+DPT_ATA.bDevice]
    37 %ifdef MODULE_JRIDE
    38     test    dh, dh
    39     jnz     SHORT .OutputToIoMappedIde
    40 
    41     add     dx, JRIDE_CONTROL_BLOCK_REGISTER_WINDOW_OFFSET
    42     jmp     SHORT OutputToJrIdeRegister
    43 .OutputToIoMappedIde:
    44 %endif  ; MODULE_JRIDE
    45 %endif  ; MODULE_8BIT_IDE
     35    %ifdef MODULE_8BIT_IDE
     36        mov     dh, [di+DPT_ATA.bDevice]
     37        %ifdef MODULE_JRIDE
     38            test    dh, dh
     39            jnz     SHORT .OutputToIoMappedIde
     40       
     41            add     dx, JRIDE_CONTROL_BLOCK_REGISTER_WINDOW_OFFSET
     42            jmp     SHORT OutputToJrIdeRegister
     43        .OutputToIoMappedIde:
     44        %endif  ; MODULE_JRIDE
     45    %endif  ; MODULE_8BIT_IDE
    4646
    4747    mov     bl, IDEVARS.wPortCtrl
     
    6262ALIGN JUMP_ALIGN
    6363IdeIO_OutputALtoIdeRegisterInDL:
    64 %ifdef MODULE_8BIT_IDE
    65     mov     dh, [di+DPT_ATA.bDevice]
    66 %ifdef MODULE_JRIDE
    67     test    dh, dh
    68     jnz     SHORT OutputALtoIOmappedIdeRegisterInDL
    69 
    70 %if JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET & 0FFh = 0
    71     mov     dh, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8
    72 %else
    73     add     dx, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET
    74 %endif
    75 OutputToJrIdeRegister:
    76     mov     bx, dx
    77     mov     [cs:bx], al
    78     ret
    79 ALIGN JUMP_ALIGN
    80 OutputALtoIOmappedIdeRegisterInDL:
    81 %endif  ; MODULE_JRIDE
    82 %endif  ; MODULE_8BIT_IDE
     64    %ifdef MODULE_8BIT_IDE
     65        mov     dh, [di+DPT_ATA.bDevice]
     66        %ifdef MODULE_JRIDE
     67            test    dh, dh
     68            jnz     SHORT OutputALtoIOmappedIdeRegisterInDL
     69       
     70        %if JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET & 0FFh = 0
     71            mov     dh, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8
     72        %else
     73            add     dx, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET
     74        %endif
     75        OutputToJrIdeRegister:
     76            mov     bx, dx
     77            mov     [cs:bx], al
     78            ret
     79        ALIGN JUMP_ALIGN
     80        OutputALtoIOmappedIdeRegisterInDL:
     81        %endif  ; MODULE_JRIDE
     82    %endif  ; MODULE_8BIT_IDE
    8383
    8484    mov     bl, IDEVARS.wPort
     
    114114;--------------------------------------------------------------------
    115115IdeIO_InputToALfromIdeRegisterInDL:
    116 %ifdef MODULE_8BIT_IDE
    117     mov     dh, [di+DPT_ATA.bDevice]
    118 %ifdef MODULE_JRIDE
    119     test    dh, dh
    120     jnz     SHORT .InputToALfromIOmappedIdeRegisterInDL
    121 
    122 %if JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET & 0FFh = 0
    123     mov     dh, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8
    124 %else
    125     add     dx, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET
    126 %endif
    127     mov     bx, dx
    128     mov     al, [cs:bx]
    129     ret
    130 .InputToALfromIOmappedIdeRegisterInDL:
    131 %endif  ; MODULE_JRIDE
    132 %endif  ; MODULE_8BIT_IDE
     116    %ifdef MODULE_8BIT_IDE
     117        mov     dh, [di+DPT_ATA.bDevice]
     118        %ifdef MODULE_JRIDE
     119            test    dh, dh
     120            jnz     SHORT .InputToALfromIOmappedIdeRegisterInDL
     121       
     122        %if JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET & 0FFh = 0
     123            mov     dh, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET >> 8
     124        %else
     125            add     dx, JRIDE_COMMAND_BLOCK_REGISTER_WINDOW_OFFSET
     126        %endif
     127            mov     bx, dx
     128            mov     al, [cs:bx]
     129            ret
     130        .InputToALfromIOmappedIdeRegisterInDL:
     131        %endif  ; MODULE_JRIDE
     132    %endif  ; MODULE_8BIT_IDE
    133133    mov     bl, IDEVARS.wPort
    134134    call    GetIdePortToDX
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm

    r402 r414  
    2020; Structure containing variables for PIO transfer functions.
    2121; This struct must not be larger than IDEPACK without INTPACK.
    22 struc PIOVARS
    23     .wDataPort              resb    2   ; 0, IDE Data Port
    24     .fnXfer                 resb    2   ; 2, Offset to transfer function
    25     .wSectorsInBlock        resb    2   ; 4, Block size in sectors
     22struc PIOVARS   ; Must not be larger than 9 bytes! See IDEPACK in RamVars.inc.
     23    .wDataPort              resb    2   ; 0-1, IDE Data Port
     24    .fnXfer                 resb    2   ; 2-3, Offset to transfer function
     25    .wSectorsInBlock        resb    2   ; 4-5, Block size in sectors
    2626    .bSectorsLeft           resb    1   ; 6, Sectors left to transfer
    2727                            resb    1   ; 7, IDEPACK.bDeviceControl
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/JrIdeTransfer.asm

    r412 r414  
    2020; Structure containing variables for PIO transfer functions.
    2121; This struct must not be larger than IDEPACK without INTPACK.
    22 struc MEMPIOVARS
    23     .wSectorsInBlock        resb    2   ; 0, Block size in sectors
    24     .bSectorsLeft           resb    1   ; 2, Sectors left to transfer
    25     .bSectorsDone           resb    1   ; 3, Number of sectors xferred
    26                             resb    3   ; 4, 5, 6
     22struc MEMPIOVARS    ; Must not be larger than 9 bytes! See IDEPACK in RamVars.inc.
     23    .wSectorsInBlock        resb    2   ; 0-1, Block size in sectors
     24    .fpDPT                  resb    4   ; 2-5, Far pointer to DPT
     25    .bSectorsLeft           resb    1   ; 6, Sectors left to transfer
    2726                            resb    1   ; 7, IDEPACK.bDeviceControl
    28     .fpDPT                  resb    4   ; 8, Far pointer to DPT
     27    .bSectorsDone           resb    1   ; 8, Number of sectors xferred
    2928endstruc
    3029
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h.asm

    r395 r414  
    4545%ifdef MODULE_HOTKEYS
    4646    call    DriveXlate_ToOrBack
    47 %endif
    4847    mov     [RAMVARS.xlateVars+XLATEVARS.bXlatedDrv], dl
     48%endif
    4949
    5050    call    FindDPT_ForDriveNumberInDL  ; DS:DI points to our DPT, or NULL if not our drive
     
    129129    mov     [bp+IDEPACK.intpack+INTPACK.si], si
    130130    mov     [bp+IDEPACK.intpack+INTPACK.bx], bx
     131%ifdef MODULE_HOTKEYS
    131132    mov     [bp+IDEPACK.intpack+INTPACK.dh], dh
     133%else
     134    mov     [bp+IDEPACK.intpack+INTPACK.dx], dx
     135%endif
    132136    mov     [bp+IDEPACK.intpack+INTPACK.cx], cx
    133137    mov     [bp+IDEPACK.intpack+INTPACK.ax], ax
     
    135139    pop     WORD [bp+IDEPACK.intpack+INTPACK.flags]
    136140    call    RamVars_GetSegmentToDS
    137     cmp     dl, [RAMVARS.xlateVars+XLATEVARS.bXlatedDrv]
     141
     142%ifdef MODULE_HOTKEYS
     143    cmp     dl, [RAMVARS.xlateVars+XLATEVARS.bXlatedDrv]    ; DL is still drive number?
    138144    je      SHORT .ExchangeInt13hHandlers
    139     mov     [bp+IDEPACK.intpack+INTPACK.dl], dl     ; Something is returned in DL
     145    mov     [bp+IDEPACK.intpack+INTPACK.dl], dl ; Something is returned in DL
    140146ALIGN JUMP_ALIGN
    141147.ExchangeInt13hHandlers:
     148%endif
     149
    142150%ifdef USE_186
    143151    push    Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
     
    192200Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH_ALHasDriveNumber:
    193201    call    Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber
     202
    194203%else
    195204    call    Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH
    196205%endif
     206
    197207Int13h_ReturnFromHandlerWithoutStoringErrorCode:
    198208    or      WORD [bp+IDEPACK.intpack+INTPACK.flags], FLG_FLAGS_IF   ; Return with interrupts enabled
     
    265275    mov     bx, BDA.bHDLastSt
    266276    test    al, al
    267     js      .HardDisk
     277    js      SHORT .HardDisk
    268278    mov     bl, BDA.bFDRetST & 0xff
    269279.HardDisk:
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm

    r413 r414  
    2929;--------------------------------------------------------------------
    3030Int19h_BootLoaderHandler:
    31     sti                                         ; Allow timer interrupts
    32     LOAD_BDA_SEGMENT_TO es, ax                  ; Load BDA segment (zero) to ES
     31    sti                                 ; Enable interrupts
     32    cld                                 ; String instructions to increment pointers
     33    LOAD_BDA_SEGMENT_TO es, ax          ; Load BDA segment (zero) to ES
    3334    ; Fall to .PrepareBootLoaderStack
    3435
Note: See TracChangeset for help on using the changeset viewer.