Changeset 152 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src


Ignore:
Timestamp:
May 1, 2011, 10:42:58 AM (14 years ago)
Author:
Tomi Tilli
google:author:
aitotat
Message:

Changes to XTIDE Universal BIOS:

  • XTIDE mod should now be supported (untested).
  • Interrupt Service Routine no longer requires variable from RAMVARS.
  • Some small improvements.
Location:
trunk/XTIDE_Universal_BIOS/Src
Files:
12 edited

Legend:

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

    r150 r152  
    7676ALIGN JUMP_ALIGN
    7777Device_OutputCommandWithParameters:
    78     call    IdeIrq_SetInServiceDPTandClearTaskFlag
    7978    test    WORD [di+DPT.wFlags], FLG_DPT_SERIAL_DEVICE
    8079    jnz     SHORT .OutputCommandToSerialPort
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm

    r150 r152  
    114114    mov     dl, DEVICE_CONTROL_REGISTER_out
    115115    mov     al, [bp+IDEPACK.bDeviceControl]
     116    test    al, FLG_DEVCONTROL_nIEN
     117    jnz     SHORT .DoNotSetInterruptInServiceFlag
     118    or      WORD [di+DPT.wFlags], FLG_DPT_INTERRUPT_IN_SERVICE
     119    push    ds
     120    LOAD_BDA_SEGMENT_TO ds, cx, !       ; Also zero CX
     121    mov     [BDA.bHDTaskFlg], al
     122    pop     ds
     123.DoNotSetInterruptInServiceFlag:
    116124    call    Device_OutputALtoIdeControlBlockRegisterInDL
    117125
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIrq.asm

    r150 r152  
    5050
    5151;--------------------------------------------------------------------
    52 ; IdeIrq_SetInServiceDPTandClearTaskFlag
    53 ;   Parameters:
    54 ;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    55 ;   Returns:
    56 ;       Nothing
    57 ;   Corrupts registers:
    58 ;       AX
    59 ;--------------------------------------------------------------------
    60 ALIGN JUMP_ALIGN
    61 IdeIrq_SetInServiceDPTandClearTaskFlag:
    62     mov     [RAMVARS.pInServiceDPT], di
    63     push    ds
    64     LOAD_BDA_SEGMENT_TO ds, ax, !       ; Also zero AX
    65     mov     [BDA.bHDTaskFlg], al
    66     pop     ds
    67     ret
    68 
    69 
    70 ;--------------------------------------------------------------------
    7152; IDE Interrupt Service Routines.
    7253;
     
    8667    call    AcknowledgeIdeInterruptAndSetTaskFlag
    8768
    88     mov     al, CMD_END_OF_INTERRUPT
     69    mov     al, COMMAND_END_OF_INTERRUPT
    8970    jmp     SHORT AcknowledgeMasterInterruptController
    9071
     
    9677    call    AcknowledgeIdeInterruptAndSetTaskFlag
    9778
    98     mov     al, CMD_END_OF_INTERRUPT    ; Load EOI command to AL
    99     out     WPORT_8259SL_COMMAND, al    ; Acknowledge Slave 8259
     79    mov     al, COMMAND_END_OF_INTERRUPT
     80    out     SLAVE_8259_COMMAND_out, al  ; Acknowledge Slave 8259
    10081AcknowledgeMasterInterruptController:
    101     out     WPORT_8259MA_COMMAND, al    ; Acknowledge Master 8259
     82    out     MASTER_8259_COMMAND_out, al ; Acknowledge Master 8259
    10283
    10384    ; Issue Int 15h, function AX=9100h (Interrupt ready)
     
    122103AcknowledgeIdeInterruptAndSetTaskFlag:
    123104    push    ds
     105    push    si
    124106    push    dx
    125107    push    bx
     
    127109    ; Reading Status Register acknowledges IDE interrupt
    128110    call    RamVars_GetSegmentToDS
    129     mov     di, [RAMVARS.pInServiceDPT]     ; DS:DI now points to DPT
     111    call    FindDPT_ToDSDIforInterruptInService
    130112    mov     dl, STATUS_REGISTER_in
    131113    call    Device_InputToALfromIdeRegisterInDL
     114
     115    ; Clear Interrupt In-Service Flag from DPT
     116    and     WORD [di+DPT.wFlags], ~FLG_DPT_INTERRUPT_IN_SERVICE
    132117
    133118    ; Set Task Flag
     
    137122    pop     bx
    138123    pop     dx
     124    pop     si
    139125    pop     ds
    140126    ret
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm

    r150 r152  
    213213
    214214;--------------------------------------------------------------------
    215 ; DualByteRead      Dual port 8-bit XTIDE PIO read transfer
    216 ; WordRead          Normal 16-bit IDE PIO read transfer
    217 ; DWordRead         VLB/PCI 32-bit IDE PIO read transfer
    218 ; SingleByteRead    Single port 8-bit PIO read transfer
     215; DualByteReadForXtide      Dual port 8-bit XTIDE PIO read transfer
     216; SingleByteRead            Single port 8-bit PIO read transfer
     217; WordReadForXTIDEmod       8088/8086 compatible 16-bit IDE PIO read transfer
     218; WordReadForXTplusAndAT    Normal 16-bit IDE PIO read transfer
     219; DWordRead                 VLB/PCI 32-bit IDE PIO read transfer
    219220;   Parameters:
    220221;       CX:     Block size in WORDs
     
    227228;--------------------------------------------------------------------
    228229ALIGN JUMP_ALIGN
    229 DualByteRead:
    230     times 2 shr cx, 1           ; Loop unrolling
    231     mov     bx, 8               ; Bit mask for toggling data low/high reg
     230DualByteReadForXtide:
     231    times 2 shr cx, 1   ; Loop unrolling
     232    mov     bx, 8       ; Bit mask for toggling data low/high reg
    232233ALIGN JUMP_ALIGN
    233234.InswLoop:
    234     eDUAL_BYTE_PORT_INSW
    235     eDUAL_BYTE_PORT_INSW
    236     eDUAL_BYTE_PORT_INSW
    237     eDUAL_BYTE_PORT_INSW
     235    XTIDE_INSW
     236    XTIDE_INSW
     237    XTIDE_INSW
     238    XTIDE_INSW
    238239    loop    .InswLoop
    239240    ret
    240241
    241 ALIGN JUMP_ALIGN
    242 WordRead:
    243     rep
    244     db      6Dh         ; INSW
    245     ret
    246 
    247 ALIGN JUMP_ALIGN
    248 DWordRead:
    249     shr     cx, 1       ; WORD count to DWORD count
    250     rep
    251     db      66h         ; Override operand size to 32-bit
    252     db      6Dh         ; INSW/INSD
    253     ret
    254 
     242;----
    255243ALIGN JUMP_ALIGN
    256244SingleByteRead:
    257245%ifdef USE_186  ; INS instruction available
    258     shl     cx, 1               ; WORD count to BYTE count
     246    shl     cx, 1       ; WORD count to BYTE count
    259247    rep insb
    260248%else           ; If 8088/8086
    261     shr     cx, 1               ; WORD count to DWORD count
     249    shr     cx, 1       ; WORD count to DWORD count
    262250ALIGN JUMP_ALIGN
    263251.InsdLoop:
    264252    in      al, dx
    265     stosb                       ; Store to [ES:DI]
     253    stosb               ; Store to [ES:DI]
    266254    in      al, dx
    267255    stosb
     
    274262    ret
    275263
    276 
    277 ;--------------------------------------------------------------------
    278 ; DualByteWrite     Dual port 8-bit XTIDE PIO write transfer
    279 ; WordWrite         Normal 16-bit IDE PIO write transfer
    280 ; DWordWrite        VLB/PCI 32-bit IDE PIO write transfer
    281 ; SingleByteWrite   Single port 8-bit PIO write transfer
     264;----
     265%ifndef USE_186
     266ALIGN JUMP_ALIGN
     267WordReadForXTIDEmod:
     268    times 2 shr cx, 1   ; WORD count to QWORD count
     269ALIGN JUMP_ALIGN
     270.ReadNextQword:
     271    in      ax, dx      ; Read 1st WORD
     272    stosw               ; Store 1st WORD to [ES:DI]
     273    in      ax, dx
     274    stosw               ; 2nd
     275    in      ax, dx
     276    stosw               ; 3rd
     277    in      ax, dx
     278    stosw               ; 4th
     279    loop    .ReadNextQword
     280    ret
     281%endif
     282
     283;----
     284ALIGN JUMP_ALIGN
     285WordReadForXTplusAndAT:
     286    rep
     287    db      6Dh         ; INSW (we want this in XT build)
     288    ret
     289
     290;----
     291ALIGN JUMP_ALIGN
     292DWordRead:
     293    shr     cx, 1       ; WORD count to DWORD count
     294    rep
     295    db      66h         ; Override operand size to 32-bit
     296    db      6Dh         ; INSW/INSD
     297    ret
     298
     299
     300;--------------------------------------------------------------------
     301; DualByteWriteForXtide     Dual port 8-bit XTIDE PIO write transfer
     302; SingleByteWrite           Single port 8-bit PIO write transfer
     303; WordWriteForXTIDEmod      8088/8086 compatible 16-bit IDE PIO read transfer
     304; WordWrite                 Normal 16-bit IDE PIO write transfer
     305; DWordWrite                VLB/PCI 32-bit IDE PIO write transfer
    282306;   Parameters:
    283307;       CX:     Block size in WORDs
     
    290314;--------------------------------------------------------------------
    291315ALIGN JUMP_ALIGN
    292 DualByteWrite:
     316DualByteWriteForXtide:
    293317    push    ds
    294318    push    bx
    295     times 2 shr cx, 1           ; Loop unrolling
    296     mov     bx, 8               ; Bit mask for toggling data low/high reg
    297     push    es                  ; Copy ES...
    298     pop     ds                  ; ...to DS
     319    times 2 shr cx, 1   ; Loop unrolling
     320    mov     bx, 8       ; Bit mask for toggling data low/high reg
     321    push    es          ; Copy ES...
     322    pop     ds          ; ...to DS
    299323ALIGN JUMP_ALIGN
    300324.OutswLoop:
    301     eDUAL_BYTE_PORT_OUTSW
    302     eDUAL_BYTE_PORT_OUTSW
    303     eDUAL_BYTE_PORT_OUTSW
    304     eDUAL_BYTE_PORT_OUTSW
     325    XTIDE_OUTSW
     326    XTIDE_OUTSW
     327    XTIDE_OUTSW
     328    XTIDE_OUTSW
    305329    loop    .OutswLoop
    306330    pop     bx
     
    308332    ret
    309333
    310 ALIGN JUMP_ALIGN
    311 WordWrite:
    312     eSEG    es          ; Source is ES segment
    313     rep
    314     db      6Fh         ; OUTSW
    315     ret
    316 
    317 ALIGN JUMP_ALIGN
    318 DWordWrite:
    319     shr     cx, 1       ; WORD count to DWORD count
    320     eSEG    es          ; Source is ES segment
    321     rep
    322     db      66h         ; Override operand size to 32-bit
    323     db      6Fh         ; OUTSW/OUTSD
    324     ret
    325 
     334;----
    326335ALIGN JUMP_ALIGN
    327336SingleByteWrite:
    328337%ifdef USE_186  ; OUTS instruction available
    329     shl     cx, 1               ; WORD count to BYTE count
    330     eSEG    es                  ; Source is ES segment
     338    shl     cx, 1       ; WORD count to BYTE count
     339    eSEG    es          ; Source is ES segment
    331340    rep outsb
    332341%else           ; If 8088/8086
    333     shr     cx, 1               ; WORD count to DWORD count
    334     push    ds                  ; Store DS
    335     push    es                  ; Copy ES...
    336     pop     ds                  ; ...to DS
     342    shr     cx, 1       ; WORD count to DWORD count
     343    push    ds          ; Store DS
     344    push    es          ; Copy ES...
     345    pop     ds          ; ...to DS
    337346ALIGN JUMP_ALIGN
    338347.OutsdLoop:
    339     lodsb                       ; Load from [DS:SI] to AL
     348    lodsb               ; Load from [DS:SI] to AL
    340349    out     dx, al
    341350    lodsb
     
    346355    out     dx, al
    347356    loop    .OutsdLoop
    348     pop     ds                  ; Restore DS
    349 %endif
    350     ret
     357    pop     ds          ; Restore DS
     358%endif
     359    ret
     360
     361;---
     362ALIGN JUMP_ALIGN
     363WordWriteForXTIDEmod:
     364    push    ds
     365    times 2 shr cx, 1   ; Loop unrolling
     366    push    es          ; Copy ES...
     367    pop     ds          ; ...to DS
     368ALIGN JUMP_ALIGN
     369.WriteNextQword:
     370    XTIDE_MOD_OUTSW
     371    XTIDE_MOD_OUTSW
     372    XTIDE_MOD_OUTSW
     373    XTIDE_MOD_OUTSW
     374    loop    .WriteNextQword
     375    pop     ds
     376    ret
     377
     378;----
     379ALIGN JUMP_ALIGN
     380WordWrite:
     381    eSEG    es          ; Source is ES segment
     382    rep
     383    db      6Fh         ; OUTSW
     384    ret
     385
     386ALIGN JUMP_ALIGN
     387DWordWrite:
     388    shr     cx, 1       ; WORD count to DWORD count
     389    eSEG    es          ; Source is ES segment
     390    rep
     391    db      66h         ; Override operand size to 32-bit
     392    db      6Fh         ; OUTSW/OUTSD
     393    ret
     394
    351395
    352396
     
    354398ALIGN WORD_ALIGN
    355399g_rgfnPioRead:
    356     dw      DualByteRead        ; DEVICE_8BIT_DUAL_PORT_XTIDE
    357     dw      NULL                ; DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
    358     dw      SingleByteRead      ; DEVICE_8BIT_SINGLE_PORT
    359     dw      WordRead            ; DEVICE_16BIT_ATA
    360     dw      DWordRead           ; DEVICE_32BIT_ATA
     400    dw      DualByteReadForXtide    ; DEVICE_8BIT_DUAL_PORT_XTIDE
     401%ifdef USE_186
     402    dw      WordReadForXTplusAndAT  ; DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
     403%else
     404    dw      WordReadForXTIDEmod
     405%endif
     406    dw      SingleByteRead          ; DEVICE_8BIT_SINGLE_PORT
     407    dw      WordReadForXTplusAndAT  ; DEVICE_16BIT_ATA
     408    dw      DWordRead               ; DEVICE_32BIT_ATA
     409
    361410g_rgfnPioWrite:
    362     dw      DualByteWrite       ; DEVICE_8BIT_DUAL_PORT_XTIDE
    363     dw      NULL                ; DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
    364     dw      SingleByteWrite     ; DEVICE_8BIT_SINGLE_PORT
    365     dw      WordWrite           ; DEVICE_16BIT_ATA
    366     dw      DWordWrite          ; DEVICE_32BIT_ATA
     411    dw      DualByteWriteForXtide   ; DEVICE_8BIT_DUAL_PORT_XTIDE
     412    dw      WordWriteForXTIDEmod    ; DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
     413    dw      SingleByteWrite         ; DEVICE_8BIT_SINGLE_PORT
     414    dw      WordWrite               ; DEVICE_16BIT_ATA
     415    dw      DWordWrite              ; DEVICE_32BIT_ATA
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH0h_HReset.asm

    r150 r152  
    161161    xor     bx, bx
    162162    call    FindDPT_ForDriveNumber
    163     jnc     SHORT .DptNotFound
    164163    mov     bl, [di+DPT.bIdevarsOffset]
    165164    mov     bx, [cs:bx+IDEVARS.wPort]
    166 .DptNotFound:
    167165    xchg    bx, cx
    168166    ret
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19hLate.asm

    r90 r152  
    1616ALIGN JUMP_ALIGN
    1717Int19hLate_InitializeInt19h:
    18     mov     bx, INTV_BOOTSTRAP
     18    mov     bx, BIOS_BOOT_LOADER_INTERRUPT_19h
    1919    mov     si, HandlerForLateInitialization
    2020    jmp     Interrupts_InstallHandlerToVectorInBXFromCSSI
     
    3131HandlerForLateInitialization:
    3232    LOAD_BDA_SEGMENT_TO es, ax
    33     call    Initialize_ShouldSkip       ; Skip initialization?
     33    call    Initialize_ShouldSkip           ; Skip initialization?
    3434    jnz     SHORT .SkipInitialization
    35     call    Initialize_AndDetectDrives  ; Installs boot menu loader
    36     int     INTV_BOOTSTRAP
     35    call    Initialize_AndDetectDrives      ; Installs boot menu loader
     36    int     BIOS_BOOT_LOADER_INTERRUPT_19h
    3737.SkipInitialization:
    38     call    RamVars_Initialize          ; RAMVARS must be initialized even for simple boot loader
    39     int     INTV_BOOTSTRAP              ; Call default system boot loader
     38    call    RamVars_Initialize              ; RAMVARS must be initialized even for simple boot loader
     39    int     BIOS_BOOT_LOADER_INTERRUPT_19h  ; Call default system boot loader
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19hMenu.asm

    r143 r152  
    8585    SWITCH_BACK_TO_POST_STACK
    8686    call    ClearSegmentsForBoot
    87     int     INTV_BOOT_FAILURE       ; Never returns
     87    int     BIOS_BOOT_FAILURE_INTERRUPT_18h ; Never returns
    8888
    8989
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/FloppyDrive.asm

    r124 r152  
    1919;--------------------------------------------------------------------
    2020FloppyDrive_IsInt40hInstalled:
    21     cmp     WORD [es:INTV_FLOPPY_FUNC*4+2], 0C000h  ; Any ROM segment?
     21    cmp     WORD [es:BIOS_DISKETTE_INTERRUPT_40h*4+2], 0C000h   ; Any ROM segment?
    2222%ifdef USE_AT   ; No need to verify on XT systems.
    2323    jb      SHORT .Int40hHandlerIsNotInstalled
     
    4545
    4646    call    .LoadInt40hVerifyParameters
    47     int     INTV_DISK_FUNC
     47    int     BIOS_DISK_INTERRUPT_13h
    4848    jc      SHORT .Int40hIsInstalled    ; Maybe there are not any floppy drives at all
    4949    push    es
     
    5151
    5252    call    .LoadInt40hVerifyParameters
    53     int     INTV_FLOPPY_FUNC
     53    int     BIOS_DISKETTE_INTERRUPT_40h
    5454
    5555    pop     dx
     
    113113    mov     ah, 08h         ; Get Drive Parameters
    114114    xor     bx, bx          ; FLOPPY_TYPE_525_OR_35_DD when function not supported
    115     int     INTV_FLOPPY_FUNC
     115    int     BIOS_DISKETTE_INTERRUPT_40h
    116116    ret
    117117
     
    167167    mov     ah, 08h                 ; Get Drive Parameters
    168168    cwd                             ; Floppy Drive 00h
    169     int     INTV_FLOPPY_FUNC
     169    int     BIOS_DISKETTE_INTERRUPT_40h
    170170    mov     cl, dl                  ; Number of Floppy Drives to CL
    171171
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/Initialize.asm

    r150 r152  
    8989.StoreDptPointersToIntVectors:
    9090    mov     dl, 80h
     91    call    RamVars_IsDriveHandledByThisBIOS
     92    jnc     SHORT .FindForDrive81h  ; Store nothing if not our drive
    9193    call    FindDPT_ForDriveNumber  ; DPT to DS:DI
    92     jnc     SHORT .FindForDrive81h  ; Store nothing if not our drive
    93     mov     [es:INTV_HD0DPT*4], di
    94     mov     [es:INTV_HD0DPT*4+2], ds
     94    mov     [es:HD0_DPT_POINTER_41h*4], di
     95    mov     [es:HD0_DPT_POINTER_41h*4+2], ds
    9596.FindForDrive81h:
    9697    inc     dx
     98    call    RamVars_IsDriveHandledByThisBIOS
     99    jnc     SHORT .ResetDetectedDrives
    97100    call    FindDPT_ForDriveNumber
    98     jnc     SHORT .ResetDetectedDrives
    99     mov     [es:INTV_HD1DPT*4], di
    100     mov     [es:INTV_HD1DPT*4+2], ds
     101    mov     [es:HD1_DPT_POINTER_46h*4], di
     102    mov     [es:HD1_DPT_POINTER_46h*4+2], ds
    101103    ; Fall to .ResetDetectedDrives
    102104
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm

    r150 r152  
    2929;--------------------------------------------------------------------
    3030.InitializeInt13hAnd40h:
    31     mov     ax, [es:INTV_DISK_FUNC*4]           ; Load old INT 13h offset
    32     mov     dx, [es:INTV_DISK_FUNC*4+2]         ; Load old INT 13h segment
     31    mov     ax, [es:BIOS_DISK_INTERRUPT_13h*4]  ; Load old INT 13h offset
     32    mov     dx, [es:BIOS_DISK_INTERRUPT_13h*4+2]; Load old INT 13h segment
    3333    mov     [RAMVARS.fpOldI13h], ax             ; Store old INT 13h offset
    3434    mov     [RAMVARS.fpOldI13h+2], dx           ; Store old INT 13h segment
    35     mov     bx, INTV_DISK_FUNC                  ; INT 13h interrupt vector offset
     35    mov     bx, BIOS_DISK_INTERRUPT_13h         ; INT 13h interrupt vector offset
    3636    mov     si, Int13h_DiskFunctionsHandler     ; Interrupt handler offset
    3737    call    Interrupts_InstallHandlerToVectorInBXFromCSSI
     
    4242    call    FloppyDrive_IsInt40hInstalled
    4343    jc      SHORT .InitializeInt19h
    44     mov     [es:INTV_FLOPPY_FUNC*4], ax     ; Store old INT 13h offset
    45     mov     [es:INTV_FLOPPY_FUNC*4+2], dx   ; Store old INT 13h segment
     44    mov     [es:BIOS_DISKETTE_INTERRUPT_40h*4], ax      ; Store old INT 13h offset
     45    mov     [es:BIOS_DISKETTE_INTERRUPT_40h*4+2], dx    ; Store old INT 13h segment
    4646    ; Fall to .InitializeInt19h
    4747
     
    5757;--------------------------------------------------------------------
    5858.InitializeInt19h:
    59     mov     bx, INTV_BOOTSTRAP
     59    mov     bx, BIOS_BOOT_LOADER_INTERRUPT_19h
    6060    mov     si, Int19hMenu_BootLoader
    6161    call    Interrupts_InstallHandlerToVectorInBXFromCSSI
     
    110110;--------------------------------------------------------------------
    111111.InstallHighIrqHandler:
    112     add     bx, BYTE INTV_IRQ8 - 8          ; Interrupt vector number
     112    add     bx, BYTE HARDWARE_IRQ_8_INTERRUPT_70h - 8   ; Interrupt vector number
    113113    mov     si, IdeIrq_InterruptServiceRoutineForIrqs8to15
    114114    jmp     SHORT Interrupts_InstallHandlerToVectorInBXFromCSSI
     
    125125;--------------------------------------------------------------------
    126126.InstallLowIrqHandler:
    127     add     bx, BYTE INTV_IRQ0              ; Interrupt vector number
     127    add     bx, BYTE HARDWARE_IRQ_0_INTERRUPT_08h       ; Interrupt vector number
    128128    mov     si, IdeIrq_InterruptServiceRoutineForIrqs2to7
    129129    ; Fall to Interrupts_InstallHandlerToVectorInBXFromCSSI
     
    177177.UnmaskHighIrqController:
    178178    sub     al, 8               ; Slave interrupt number
    179     mov     dx, PORT_8259SL_IMR ; Load Slave Mask Register address
     179    mov     dx, SLAVE_8259_IMR
    180180    call    .ClearBitFrom8259MaskRegister
    181181    mov     al, 2               ; Master IRQ 2 to allow slave IRQs
     
    192192;--------------------------------------------------------------------
    193193.UnmaskLowIrqController:
    194     mov     dx, PORT_8259MA_IMR ; Load Mask Register address
     194    mov     dx, MASTER_8259_IMR
    195195    ; Fall to .ClearBitFrom8259MaskRegister
    196196
  • trunk/XTIDE_Universal_BIOS/Src/Main.asm

    r150 r152  
    1515; Included .inc files
    1616%include "AssemblyLibrary.inc"  ; Assembly Library. Must be included first!
    17 %include "Interrupts.inc"       ; For interrupt equates
     17%include "IntController.inc"    ; For Interrupt Controller equates
    1818%include "ATA_ID.inc"           ; For ATA Drive Information structs
    1919%include "IdeRegisters.inc"     ; For ATA Registers, flags and commands
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/FindDPT.asm

    r150 r152  
    7171ALIGN JUMP_ALIGN
    7272FindDPT_ToDSDIForIdeMasterAtPortDX:
    73     mov     si, FindDPT_IterateToMasterAtPortCallback
     73    mov     si, IterateToMasterAtPortCallback
    7474    jmp     SHORT IterateAllDPTs
    7575
    7676ALIGN JUMP_ALIGN
    7777FindDPT_ToDSDIForIdeSlaveAtPortDX:
    78     mov     si, FindDPT_IterateToSlaveAtPortCallback
     78    mov     si, IterateToSlaveAtPortCallback
    7979    jmp     SHORT IterateAllDPTs
    8080
     
    8383; IDE base port for Master or Slave drive.
    8484;
    85 ; FindDPT_IterateToSlaveAtPortCallback
    86 ; FindDPT_IterateToMasterAtPortCallback
     85; IterateToSlaveAtPortCallback
     86; IterateToMasterAtPortCallback
    8787;   Parameters:
    8888;       CH:     Drive number
     
    9797;--------------------------------------------------------------------
    9898ALIGN JUMP_ALIGN
    99 FindDPT_IterateToSlaveAtPortCallback:
     99IterateToSlaveAtPortCallback:
    100100    test    BYTE [di+DPT.wFlags], FLG_DPT_SLAVE ; Clears CF
    101101    jnz     SHORT CompareBasePortAddress
     
    103103
    104104ALIGN JUMP_ALIGN
    105 FindDPT_IterateToMasterAtPortCallback:
     105IterateToMasterAtPortCallback:
    106106    test    BYTE [di+DPT.wFlags], FLG_DPT_SLAVE
    107107    jnz     SHORT ReturnWrongDPT                ; Return if slave drive
     
    116116    stc                                         ; Set CF since wanted DPT
    117117    ret
     118
     119
     120;--------------------------------------------------------------------
     121; FindDPT_ToDSDIforInterruptInService
     122;   Parameters:
     123;       DS:     RAMVARS segment
     124;   Returns:
     125;       DS:DI:  Ptr to DPT
     126;       CF:     Set if wanted DPT found
     127;               Cleared if DPT not found
     128;   Corrupts registers:
     129;       SI
     130;--------------------------------------------------------------------
     131ALIGN JUMP_ALIGN
     132FindDPT_ToDSDIforInterruptInService:
     133    mov     si, IterateToDptWithInterruptInServiceFlagSet
     134    jmp     SHORT IterateAllDPTs
     135
     136;--------------------------------------------------------------------
     137; IterateToDptWithInterruptInServiceFlagSet
     138;   Parameters:
     139;       DS:DI:  Ptr to DPT to examine
     140;   Returns:
     141;       CF:     Set if wanted DPT found
     142;               Cleared if wrong DPT
     143;   Corrupts registers:
     144;       Nothing
     145;--------------------------------------------------------------------
     146ALIGN JUMP_ALIGN
     147IterateToDptWithInterruptInServiceFlagSet:
     148    test    WORD [di+DPT.wFlags], FLG_DPT_INTERRUPT_IN_SERVICE
     149    jz      SHORT ReturnWrongDPT
     150    stc                                     ; Set CF since wanted DPT
     151    ret
    118152ReturnWrongDPT:
    119     clc                                         ; Clear CF since wrong DPT
     153    clc                                     ; Clear CF since wrong DPT
    120154    ret
    121155
     
    126160; IterateAllDPTs
    127161;   Parameters:
    128 ;       BX,DX:  Parameters to callback function
    129 ;       CS:SI:  Ptr to callback function
    130 ;       DS:     RAMVARS segment
     162;       AX,BX,DX:   Parameters to callback function
     163;       CS:SI:      Ptr to callback function
     164;       DS:         RAMVARS segment
    131165;   Returns:
    132 ;       DS:DI:  Ptr to wanted DPT (if found)
    133 ;       CF:     Set if wanted DPT found
    134 ;               Cleared if DPT not found
     166;       DS:DI:      Ptr to wanted DPT (if found)
     167;       CF:         Set if wanted DPT found
     168;                   Cleared if DPT not found
    135169;   Corrupts registers:
    136170;       Nothing unless corrupted by callback function
     
    141175    mov     cx, [RAMVARS.wDrvCntAndFirst]
    142176    jcxz    .AllDptsIterated            ; Return if no drives
    143     call    FindDPT_PointToFirstDPT     ; Point DS:DI to first DPT
     177    mov     di, RAMVARS_size            ; Point DS:DI to first DPT
    144178ALIGN JUMP_ALIGN
    145179.LoopWhileDPTsLeft:
     
    155189    pop     cx
    156190    ret
    157 
    158 
    159 ;--------------------------------------------------------------------
    160 ; Sets DI to point to first Disk Parameter Table.
    161 ;
    162 ; FindDPT_PointToFirstDPT
    163 ;   Parameters:
    164 ;       Nothing
    165 ;   Returns:
    166 ;       DI:     Offset to first DPT (even if unused)
    167 ;   Corrupts registers:
    168 ;       Nothing
    169 ;--------------------------------------------------------------------
    170 ALIGN JUMP_ALIGN
    171 FindDPT_PointToFirstDPT:
    172     mov     di, RAMVARS_size
    173     ret
Note: See TracChangeset for help on using the changeset viewer.