Changeset 199 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS_Configurator_v2


Ignore:
Timestamp:
Nov 21, 2011, 11:01:08 AM (12 years ago)
Author:
gregli@…
google:author:
gregli@hotmail.com
Message:

Adding proper serial port support to the Configurator, which required some minor changes elsewhere. Also added an option, off by default, to automatically scan for serial drives at the end of normal drive detection (no ALT key required, although that is still available if the option is off).

Location:
trunk/XTIDE_Universal_BIOS_Configurator_v2
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc

    r108 r199  
    5050    .wMaxValue:
    5151    .wValueBitmask          resb    2   ; Bitmask for item value flag
     52    .fnValueReader          resb    2   ; Called just after ROMVARS is read, providing a hook for further action
     53    .fnValueWriter          resb    2   ; Called just before ROMVARS is written, providing a hook for further action
    5254endstruc
    5355
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm

    r181 r199  
    190190ALIGN JUMP_ALIGN
    191191.TranslateChoiceToValueUsingLookupTable:
     192;
     193; if the lookup pointer is NULL, no translation is needed
     194;
     195    mov     bx, [si+MENUITEM.itemValue+ITEM_VALUE.rgwChoiceToValueLookup]
     196    test    bx, bx
     197    jz      .StoreByteOrWordValueFromAXtoESDIwithItemInDSSI
     198       
    192199    shl     ax, 1           ; Shift for WORD lookup
    193     add     ax, [si+MENUITEM.itemValue+ITEM_VALUE.rgwChoiceToValueLookup]
    194     xchg    bx, ax
     200    add     bx, ax
    195201    mov     ax, [bx]        ; Lookup complete
    196202    ; Fall to .StoreByteOrWordValueFromAXtoESDIwithItemInDSSI
     
    210216ALIGN JUMP_ALIGN
    211217.StoreByteOrWordValueFromAXtoESDIwithItemInDSSI:
     218    push    bx
     219    mov     bx,[si+MENUITEM.itemValue+ITEM_VALUE.fnValueWriter]
     220    test    bx,bx
     221    jz      SHORT .NoWriter
     222
     223    call    bx     
     224
     225.NoWriter:
     226    pop     bx
    212227    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE
    213228    jnz     SHORT .StoreByteFromAL
    214 
     229       
    215230    mov     [es:di+1], ah
    216231ALIGN JUMP_ALIGN
     
    269284    push    es
    270285    push    di
     286    push    bx
    271287    call    GetConfigurationBufferToESDIforMenuitemInDSSI
    272288    add     di, [si+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
    273289    mov     ax, [es:di]
     290
     291    mov     bx, [si+MENUITEM.itemValue+ITEM_VALUE.fnValueReader]
     292    test    bx,bx
     293    jz      SHORT .NoReader
     294
     295    call    bx
     296
     297.NoReader:     
     298    pop     bx
    274299    pop     di
    275300    pop     es
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/BootMenuSettingsMenu.asm

    r144 r199  
    1010    at  MENUPAGE.fnEnter,           dw  BootMenuSettingsMenu_EnterMenuOrModifyItemVisibility
    1111    at  MENUPAGE.fnBack,            dw  ConfigurationMenu_EnterMenuOrModifyItemVisibility
    12     at  MENUPAGE.wMenuitems,        dw  6
     12    at  MENUPAGE.wMenuitems,        dw  7
    1313iend
    1414
     
    6666    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgBootFloppyDrvs
    6767    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBootFloppyDrvs
    68     at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForFloppyDrives
     68    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  NULL
    6969    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFloppyDrives
    7070iend
     
    101101iend
    102102
     103g_MenuitemBootMenuSerialScanDetect:     
     104istruc MENUITEM
     105    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
     106    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
     107    at  MENUITEM.szName,            dw  g_szItemSerialDetect
     108    at  MENUITEM.szQuickInfo,       dw  g_szNfoSerialDetect
     109    at  MENUITEM.szHelp,            dw  g_szHelpSerialDetect
     110    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_FLAGVALUE
     111    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
     112    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  ROMVARS.wFlags
     113    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgSerialDetect
     114    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
     115    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
     116    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_ROMVARS_SERIAL_SCANDETECT
     117iend       
     118
    103119g_rgwChoiceToValueLookupForDisplayModes:
    104120    dw  DEFAULT_TEXT_MODE
     
    118134    dw  g_szValueBootDispModeMono
    119135
    120 g_rgwChoiceToValueLookupForFloppyDrives:    ; (No translation)
    121     dw  0
    122     dw  1
    123     dw  2
    124     dw  3
    125     dw  4
    126136g_rgszValueToStringLookupForFloppyDrives:
    127137    dw  g_szValueBootFloppyDrvsAuto
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm

    r153 r199  
    1010    at  MENUPAGE.fnEnter,           dw  IdeControllerMenu_EnterMenuOrModifyItemVisibility
    1111    at  MENUPAGE.fnBack,            dw  ConfigurationMenu_EnterMenuOrModifyItemVisibility
    12     at  MENUPAGE.wMenuitems,        dw  8
     12    at  MENUPAGE.wMenuitems,        dw  11
    1313iend
    1414
     
    5050    at  MENUITEM.szQuickInfo,       dw  g_szNfoIdeDevice
    5151    at  MENUITEM.szHelp,            dw  g_szNfoIdeDevice
    52     at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_BYTEVALUE
     52    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_MODIFY_MENU
    5353    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
    5454    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     
    5757    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForDevice
    5858    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForDevice
     59    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  IdeControllerMenu_WriteDevice
    5960iend
    6061
     
    8990iend
    9091
     92g_MenuitemIdeControllerSerialCOM:
     93istruc MENUITEM
     94    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
     95    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
     96    at  MENUITEM.szName,            dw  g_szItemSerialCOM
     97    at  MENUITEM.szQuickInfo,       dw  g_szNfoIdeSerialCOM
     98    at  MENUITEM.szHelp,            dw  g_szHelpIdeSerialCOM
     99    at  MENUITEM.bFlags,            db  FLG_MENUITEM_MODIFY_MENU
     100    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
     101    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     102    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDevice
     103    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szSerialCOMChoice
     104    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  NULL
     105    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForCOM
     106    at  MENUITEM.itemValue + ITEM_VALUE.fnValueReader,              dw  IdeControllerMenu_SerialReadCOM 
     107    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  IdeControllerMenu_SerialWriteCOM
     108iend
     109
     110g_MenuitemIdeControllerSerialPort:
     111istruc MENUITEM
     112    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateHexInputForMenuitemInDSSI
     113    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteHexValueStringToBufferInESDIfromItemInDSSI
     114    at  MENUITEM.szName,            dw  g_szItemSerialPort
     115    at  MENUITEM.szQuickInfo,       dw  g_szNfoIdeSerialPort
     116    at  MENUITEM.szHelp,            dw  g_szHelpIdeSerialPort
     117    at  MENUITEM.bFlags,            db  FLG_MENUITEM_MODIFY_MENU       
     118    at  MENUITEM.bType,             db  TYPE_MENUITEM_HEX
     119    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     120    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgIdeCmdPort
     121    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  240h
     122    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  438h
     123    at  MENUITEM.itemValue + ITEM_VALUE.fnValueReader,              dw  IdeControllerMenu_SerialReadPort
     124    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  IdeControllerMenu_SerialWritePort
     125iend       
     126
     127g_MenuitemIdeControllerSerialBaud:     
     128istruc MENUITEM
     129    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
     130    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
     131    at  MENUITEM.szName,            dw  g_szItemSerialBaud
     132    at  MENUITEM.szQuickInfo,       dw  g_szNfoIdeSerialBaud
     133    at  MENUITEM.szHelp,            dw  g_szHelpIdeSerialBaud
     134    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
     135    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     136    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDevice
     137    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szSerialBaudChoice
     138    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  NULL
     139    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForBaud
     140    at  MENUITEM.itemValue + ITEM_VALUE.fnValueReader,              dw  IdeControllerMenu_SerialReadBaud
     141    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  IdeControllerMenu_SerialWriteBaud
     142iend
     143       
    91144g_MenuitemIdeControllerEnableInterrupt:
    92145istruc MENUITEM
     
    135188    dw  g_szValueCfgDeviceSerial
    136189
     190g_rgszValueToStringLookupForCOM:       
     191    dw  g_szValueCfgCOM1
     192    dw  g_szValueCfgCOM2
     193    dw  g_szValueCfgCOM3
     194    dw  g_szValueCfgCOM4
     195    dw  g_szValueCfgCOM5
     196    dw  g_szValueCfgCOM6
     197    dw  g_szValueCfgCOM7
     198    dw  g_szValueCfgCOM8
     199    dw  g_szValueCfgCOM9
     200    dw  g_szValueCfgCOMA
     201    dw  g_szValueCfgCOMB
     202    dw  g_szValueCfgCOMC
     203    dw  g_szValueCfgCOMx
     204
     205g_rgszValueToStringLookupForBaud:
     206    dw  g_szValueCfgBaud2400
     207    dw  g_szValueCfgBaud9600
     208    dw  g_szValueCfgBaud38_4
     209    dw  g_szValueCfgBaud115_2
     210
     211g_wPrintBaud:
     212    dw  DEVICE_SERIAL_PRINTBAUD_2400
     213    dw  DEVICE_SERIAL_PRINTBAUD_9600
     214    dw  DEVICE_SERIAL_PRINTBAUD_38_4
     215    dw  DEVICE_SERIAL_PRINTBAUD_115_2
    137216
    138217; Section containing code
     
    161240    lea     ax, [bx+IDEVARS.wPort]
    162241    mov     [cs:g_MenuitemIdeControllerCommandBlockAddress+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
    163 
     242    mov     [cs:g_MenuitemIdeControllerSerialPort+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     243    mov     [cs:g_MenuitemIdeControllerSerialCOM+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax     
     244    mov     [cs:g_MenuitemIdeControllerSerialBaud+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     245                ;; baud also modifies the next two bytes (print chars in wPortCtrl), but it never reads them
     246       
    164247    lea     ax, [bx+IDEVARS.wPortCtrl]
    165248    mov     [cs:g_MenuitemIdeControllerControlBlockAddress+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     
    168251    mov     [cs:g_MenuitemIdeControllerEnableInterrupt+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
    169252    mov     [cs:g_MenuitemIdeControllerIdeIRQ+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     253
    170254    ret
    171255
     
    185269    pop     ds
    186270    call    .EnableOrDisableIRQ
     271    call    .EnableOrDisableSerial
    187272    mov     si, g_MenupageForIdeControllerMenu
    188273    jmp     Menupage_ChangeToNewMenupageInDSSI
     
    226311    ret
    227312
    228 
     313.EnableOrDisableSerial:
     314    mov     bx, g_MenuitemIdeControllerCommandBlockAddress
     315    call    .DisableMenuitemFromCSBX
     316
     317    mov     bx, g_MenuitemIdeControllerControlBlockAddress
     318    call    .DisableMenuitemFromCSBX
     319
     320    mov     bx, g_MenuitemIdeControllerEnableInterrupt
     321    call    .DisableMenuitemFromCSBX
     322
     323    mov     bx, g_MenuitemIdeControllerSerialBaud
     324    call    .DisableMenuitemFromCSBX
     325
     326    mov     bx, g_MenuitemIdeControllerSerialCOM
     327    call    .DisableMenuitemFromCSBX
     328
     329    mov     bx, g_MenuitemIdeControllerSerialPort
     330    call    .DisableMenuitemFromCSBX
     331               
     332    mov     bx, [cs:g_MenuitemIdeControllerDevice+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]       
     333    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
     334    cmp     al,DEVICE_SERIAL_PORT
     335    jnz     .DisableAllSerial
     336
     337    mov     bx, g_MenuitemIdeControllerSerialCOM
     338    call    .EnableMenuitemFromCSBX
     339
     340    mov     bx, g_MenuitemIdeControllerSerialBaud
     341    call    .EnableMenuitemFromCSBX
     342
     343    mov     bx, [cs:g_MenuitemIdeControllerSerialCOM+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]         
     344    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
     345    mov     bx, g_MenuitemIdeControllerSerialPort
     346    cmp     al,'x'
     347    jz      .EnableMenuitemFromCSBX
     348    jmp     .DisableMenuitemFromCSBX
     349
     350.DisableAllSerial:
     351
     352    mov     bx, g_MenuitemIdeControllerCommandBlockAddress
     353    call    .EnableMenuitemFromCSBX
     354
     355    mov     bx, g_MenuitemIdeControllerControlBlockAddress
     356    call    .EnableMenuitemFromCSBX
     357
     358    mov     bx, g_MenuitemIdeControllerEnableInterrupt
     359    call    .EnableMenuitemFromCSBX             
     360
     361    ret
     362       
    229363;--------------------------------------------------------------------
    230364; MENUITEM activation functions (.fnActivate)
     
    250384    call    MasterSlaveMenu_InitializeToDrvparamsOffsetInBX
    251385    jmp     MasterSlaveMenu_EnterMenuOrModifyItemVisibility
     386
     387PackedCOMPortAddresses:             ; COM1 - COMC (or COM12)
     388    db      (DEVICE_SERIAL_COM1 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     389    db      (DEVICE_SERIAL_COM2 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     390    db      (DEVICE_SERIAL_COM3 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     391    db      (DEVICE_SERIAL_COM4 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1   
     392    db      (DEVICE_SERIAL_COM5 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     393    db      (DEVICE_SERIAL_COM6 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     394    db      (DEVICE_SERIAL_COM7 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1   
     395    db      (DEVICE_SERIAL_COM8 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1   
     396    db      (DEVICE_SERIAL_COM9 - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     397    db      (DEVICE_SERIAL_COMA - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1   
     398    db      (DEVICE_SERIAL_COMB - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1
     399    db      (DEVICE_SERIAL_COMC - DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT) >> 1 
     400    db      0                       ; null terminated
     401
     402;------------------------------------------------------------------------------------------
     403;
     404; Reader/Writer Routines
     405;
     406; For serial drives, we pack the port number and baud rate into a single byte, and thus
     407; we need to take care to properly read/write just the bits we need.  In addition, since
     408; we use the Port/PortCtrl bytes in a special way for serial drives, we need to properly
     409; default the values stored in both these words  when switching in and out of the Serial
     410; device choice.
     411;
     412; Writers:
     413;   Parameters:
     414;       AX:     Value that the MENUITEM system was interacting with
     415;       ES:DI:  ROMVARS location where the value is to be stored
     416;       DS:SI:  MENUITEM pointer
     417;   Returns:
     418;       AX:     Value to actually write to ROMVARS
     419;   Corrupts registers:
     420;       AX
     421;
     422; Readers:
     423;   Parameters:
     424;       AX:     Value read from the ROMVARS location
     425;       ES:DI:  ROMVARS location where the value was just read from
     426;       DS:SI:  MENUITEM pointer
     427;   Returns:
     428;       AX:     Value that the MENUITEM system will interact with and display
     429;   Corrupts registers:
     430;       AX
     431;
     432
     433;
     434; No change to Device byte, but use this opportunity to change defaults stored in wPort and wPortCtrl if we are
     435; changing in/out of a Serial device (since we use these bytes in radically different ways).  Also clear the
     436; interrupt informtion is we are moving into Serial (since the serial device does not use interrupts).
     437;
     438ALIGN JUMP_ALIGN
     439IdeControllerMenu_WriteDevice:
     440        push    ax
     441        push    bx
     442        push    di
     443
     444        mov     bl,[es:di]                          ; what is the current Device?
     445       
     446        add     di,IDEVARS.wPort - IDEVARS.bDevice  ; Get ready to set the Port addresses
     447       
     448        cmp     al,DEVICE_SERIAL_PORT
     449        jz      .changingToSerial
     450
     451        cmp     bl,DEVICE_SERIAL_PORT
     452        jnz     .done                               ; if we weren't Serial before, nothing to do
     453
     454.changingFromSerial:
     455        cmp     al,DEVICE_16BIT_ATA
     456        jl      .xtide
     457
     458        mov     ax,DEVICE_ATA_DEFAULT_PORT          ; Defaults for 16-bit and better ATA devices
     459        mov     bx,DEVICE_ATA_DEFAULT_PORTCTRL
     460        jmp     .writeNonSerial
     461
     462.xtide:
     463        mov     ax,DEVICE_XTIDE_DEFAULT_PORT        ; Defaults for 8-bit XTIDE devices
     464        mov     bx,DEVICE_XTIDE_DEFAULT_PORTCTRL       
     465
     466.writeNonSerial:       
     467        mov     [es:di],ax                          ; Store defaults in IDEVARS.wPort and IDEVARS.wPortCtrl
     468        mov     [es:di+2],bx
     469
     470        jmp     .done
     471
     472.changingToSerial:     
     473        cmp     bl,DEVICE_SERIAL_PORT
     474        jz      .done                               ; if we were already serial, nothing to do
     475
     476        mov     ax,DEVICE_SERIAL_DEFAULT_COM
     477        call    IdeControllerMenu_SerialWriteCOM
     478        mov     [es:di],ax
     479       
     480        mov     ax,DEVICE_SERIAL_DEFAULT_BAUD
     481        call    IdeControllerMenu_SerialWriteBaud
     482        mov     [es:di],ax
     483               
     484        add     di,IDEVARS.bIRQ - IDEVARS.wPort     ; clear out the interrupt information, we don't use interrupts
     485        mov     al,0
     486        mov     [es:di],al
     487
     488.done: 
     489        pop     di
     490        pop     bx
     491        pop     ax
     492
     493        ret
     494
     495;
     496; "COMn" ASCII characer -> Numeric COM number
     497;
     498ALIGN JUMP_ALIGN
     499IdeControllerMenu_SerialReadCOM:
     500        xor     ah,ah                               ; clear out packedportbaud value
     501
     502        cmp     al,'x'                              ; base this on the ASCII character used to print
     503        jz      .custom
     504
     505        cmp     al,'A'
     506        jae     .over10
     507
     508        sub     al, '0'+1                           ; convert ASCII value '0'-'9' to numeric
     509        ret
     510
     511.over10:
     512        sub     al, 'A'-10+1                        ; convert ASCII value 'A'-'C' to numeric
     513        ret
     514
     515.custom:
     516        mov     al, 12                              ; convert ASCII value 'x' (for custom) to numeric
     517        ret
     518
     519;
     520; Numeric COM number -> Packed port address, and update ASCII character for printing "COMn"
     521;               
     522ALIGN JUMP_ALIGN
     523IdeControllerMenu_SerialWriteCOM:
     524        push    bx
     525
     526        cmp     al,12                               ; custom?
     527        jge     .custom
     528
     529        mov     bx,ax                               ; lookup packed port address based on COM address
     530        mov     ah,[cs:bx+PackedCOMPortAddresses]
     531
     532        cmp     al,9                                ; COMA or higher, but not custom
     533        jge     .atorabove10
     534
     535        add     al, '0'+1                           ; convert numeric to ASCII '1' to '9'
     536        jmp     IdeControllerMenu_SerialWriteCOM_PackAndRet
     537
     538.custom:
     539        mov     al,'x'                              ; ASCII value 'x' for custom
     540        mov     ah,0                                ; 240h is default custom value
     541        jmp     IdeControllerMenu_SerialWriteCOM_PackAndRet
     542
     543.atorabove10:
     544        add     al, 'A'-10+1                        ; convert numeric to ASCII 'A' to 'C'
     545
     546IdeControllerMenu_SerialWriteCOM_PackAndRet:
     547        mov     bl,[es:di+1]                        ; read baud rate bits
     548        and     bl,DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK     
     549        or      ah,bl
     550
     551        pop     bx
     552        ret     
     553
     554;
     555; Packed Baud -> Numeric Baud
     556;               
     557ALIGN JUMP_ALIGN
     558IdeControllerMenu_SerialReadBaud:
     559        xchg    al,ah
     560        and     ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK         ; also clears high order byte
     561        ret
     562
     563;
     564; Numeric Baud -> Packed Baud, also update ASCII printing characters for baud rate
     565;               
     566ALIGN JUMP_ALIGN
     567IdeControllerMenu_SerialWriteBaud:
     568        and     ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDBITS         ; ensure we only have the bits we want
     569       
     570        push    bx
     571
     572        mov     bx,ax                                               ; lookup printing word for wPortCtrl
     573        shl     bx,1
     574        mov     bx,[cs:bx+g_wPrintBaud]
     575        mov     [es:di+2],bx
     576
     577        xchg    al,ah                                               ; or in port bits
     578        mov     bx,[es:di]
     579        and     bh,DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK
     580        or      ax,bx
     581
     582        pop     bx
     583        ret
     584
     585;
     586; Packed Port -> Numeric Port
     587;               
     588ALIGN JUMP_ALIGN
     589IdeControllerMenu_SerialReadPort:       
     590        mov     al,ah
     591        and     ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK         ; note that this clears AH
     592        shl     ax,1
     593        add     ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT
     594        ret
     595
     596;
     597; Numeric Port -> Packed Port, convert from Custom to a defined COM port if we match one
     598;
     599ALIGN JUMP_ALIGN
     600IdeControllerMenu_SerialWritePort:     
     601        push    bx
     602
     603        sub     ax,DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT     ; convert from numeric to packed port number
     604        shr     ax,1
     605        and     al,DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK
     606
     607        mov     bx,PackedCOMPortAddresses                           ; loop, looking for port address in known COM address list
     608.next: 
     609        mov     ah,[cs:bx]
     610        inc     bx
     611        test    ah,ah
     612        jz      .notfound
     613        cmp     al,ah
     614        jnz     .next
     615
     616        sub     bx,PackedCOMPortAddresses + 1                       ; FOUND!, +1 since we already incremented
     617        mov     ax,bx
     618        pop     bx
     619        jmp     IdeControllerMenu_SerialWriteCOM                    ; if found, use that logic to get ASCII character
     620
     621.notfound:
     622        xchg    ah,al                                               
     623        mov     al,'x'
     624        jmp     IdeControllerMenu_SerialWriteCOM_PackAndRet
     625
     626
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm

    r185 r199  
    6767g_szDlgFileFilter:      db  "*.*",NULL
    6868
     69
    6970g_szNfoMainExitToDOS:   db  "Quits XTIDE Universal BIOS Configurator.",NULL
    7071g_szNfoMainLoadFile:    db  "Load BIOS file to be configured or flashed.",NULL
     
    111112g_szItemIdeEnIRQ:       db  "Enable interrupt",NULL
    112113g_szItemIdeIRQ:         db  "IRQ",NULL
     114g_szItemSerialCOM:      db  "COM Port",NULL
     115g_szItemSerialBaud:     db  "Baud Rate",NULL
     116g_szItemSerialPort:     db  "COM Port I/O address",NULL
     117
     118g_szItemIdeSerialComPort:       db      "COM port",NULL
     119g_szItemIdeSerialBaudRate:      db      "Baud rate",NULL
    113120
    114121g_szDlgDevice:          db  "Select controller type.",NULL
     
    117124g_szDlgIdeEnIRQ:        db  "Enable interrupt?",NULL
    118125g_szDlgIdeIRQ:          db  "Enter IRQ channel (2...7 for 8-bit controllers, 2...15 for any other controller).",NULL
    119 
     126       
    120127g_szNfoIdeBackToCfgMenu:db  "Back to XTIDE Universal BIOS Configuration Menu.",NULL
    121128g_szNfoIdeMaster:       db  "Settings for Master Drive.",NULL
     
    123130g_szNfoIdeDevice:       db  "Select controller device type.",NULL
    124131g_szNfoIdeCmdPort:      db  "IDE Controller Command Block (base port) address.",NULL
    125 g_szNfoIdeCtrlPort:     db  "IDE Controller Control Block address. Usually Cmd Block + 200h.",NULL
     132g_szNfoIdeCtrlPort:     db  "IDE Controller Control Block address. Usually Cmd Block + 8 for XTIDE, and Cmd Block + 200h for ATA.",NULL
    126133g_szNfoIdeEnIRQ:        db  "Interrupt or polling mode.",NULL
    127134g_szNfoIdeIRQ:          db  "IRQ channel to use.",NULL
     135g_szNfoIdeSerialCOM:    db  "Select a COM port by number.",NULL
     136g_szNfoIdeSerialBaud:   db  "Select the COM port's Baud Rate. The server must match this speed. Note UART clock multipliers may impact the actual speed.",NULL
     137g_szNfoIdeSerialPort:   db  "Select a COM port by custom I/O port address. Address must be in the range 240h and 438h and be on an 8-byte boundary.", NULL
    128138
    129139g_szHelpIdeCmdPort:     incbin  "IDE_CommandPort.txt"
     
    135145g_szHelpIdeIRQ:         incbin  "IDE_IRQ.txt"
    136146                        db  NULL
     147g_szHelpIdeSerialCOM:   incbin  "IDE_SerialCOM.txt"
     148                        db  NULL
     149g_szHelpIdeSerialPort:  incbin  "IDE_SerialPort.txt"
     150                        db  NULL
     151g_szHelpIdeSerialBaud:  incbin  "IDE_SerialBaud.txt"
     152                        db  NULL
    137153
    138154g_szMultichoiceCfgDevice:
     
    144160                        db  "Serial port virtual device",NULL
    145161
     162g_szSerialCOMChoice:
     163                        db  "COM1 - Port 3f8h",LF
     164                        db  "COM2 - Port 2f8h",LF
     165                        db  "COM3 - Port 3e8h",LF
     166                        db  "COM4 - Port 2e8h",LF
     167                        db  "COM5 - Port 2f0h",LF
     168                        db  "COM6 - Port 3e0h",LF
     169                        db  "COM7 - Port 2e0h",LF
     170                        db  "COM8 - Port 260h",LF
     171                        db  "COM9 - Port 368h",LF
     172                        db  "COMA - Port 268h",LF
     173                        db  "COMB - Port 360h",LF
     174                        db  "COMC - Port 270h",LF
     175                        db  "COMx - Custom Port",NULL
     176
     177g_szValueCfgCOM1:       db      "COM1",NULL
     178g_szValueCfgCOM2:       db      "COM2",NULL
     179g_szValueCfgCOM3:       db      "COM3",NULL
     180g_szValueCfgCOM4:       db      "COM4",NULL
     181g_szValueCfgCOM5:       db      "COM5",NULL
     182g_szValueCfgCOM6:       db      "COM6",NULL
     183g_szValueCfgCOM7:       db      "COM7",NULL
     184g_szValueCfgCOM8:       db      "COM8",NULL
     185g_szValueCfgCOM9:       db      "COM9",NULL
     186g_szValueCfgCOMA:       db      "COMA",NULL
     187g_szValueCfgCOMB:       db      "COMB",NULL
     188g_szValueCfgCOMC:       db      "COMC",NULL
     189g_szValueCfgCOMx:       db      "Custom",NULL
     190       
     191g_szSerialBaudChoice:
     192                        db  "2400 baud",LF
     193                        db  "9600 baud",LF
     194                        db  "38.4K baud",LF
     195                        db  "115.2K baud",NULL
     196
     197g_szValueCfgBaud2400:   db      "2400",NULL
     198g_szValueCfgBaud9600:   db      "9600",NULL
     199g_szValueCfgBaud38_4:   db      "38.4K",NULL
     200g_szValueCfgBaud115_2:  db      "115.2K",NULL
     201       
    146202g_szValueCfgDeviceDual8b:   db  "XTIDE",NULL
    147203g_szValueCfgDeviceMod:      db  "Chuck(G)",NULL
     
    149205g_szValueCfgDevice16b:      db  "16-bit",NULL
    150206g_szValueCfgDevice32b:      db  "32-bit",NULL
    151 g_szValueCfgDeviceSerial:   db  "serial",NULL
     207g_szValueCfgDeviceSerial:   db  "Serial",NULL
    152208
    153209
     
    184240g_szItemBootFloppyDrvs: db  "Number of Floppy Drives",NULL
    185241g_szItemBootSwap:       db  "Swap boot drive numbers",NULL
     242g_szItemSerialDetect:   db  "Scan for Serial Drives",NULL
    186243
    187244g_szDlgBootTimeout:     db  "Enter Boot Menu selection timeout in BIOS timer ticks (1...1092, 0 disables timeout).",NULL
     
    190247g_szDlgBootFloppyDrvs:  db  "Select number of Floppy Drives to display on boot menu.",NULL
    191248g_szDlgBootSwap:        db  "Enable drive number translation?",NULL
    192 
     249g_szDlgSerialDetect:    db  "Scan for serial drives?",NULL
     250       
    193251g_szNfoBootTimeout:     db  "Menu item selection timeout in BIOS timer ticks.",NULL
    194252g_szNfoBootDrive:       db  "Default drive on boot menu.",NULL
     
    196254g_szNfoBootFloppyDrvs:  db  "Number of Floppy Drives to display on boot menu.",NULL
    197255g_szNfoBootSwap:        db  "Drive Number Translation (swap first drive with selected).",NULL
     256g_szNfoSerialDetect:    db  "Will scan COM ports for a serial drive. Can also be invoked by holding down ALT at the end of standard drive detection.",NULL
    198257
    199258g_szHelpBootTimeout:    incbin  "Bootmenu_Timeout.txt"
     
    205264g_szHelpBootSwap:       incbin  "Bootmenu_SwapDrives.txt"
    206265                        db  NULL
     266g_szHelpSerialDetect:   incbin  "Bootmenu_SerialDetect.txt"
     267                        db  NULL
    207268
    208269g_szMultichoiceBootDispMode:
Note: See TracChangeset for help on using the changeset viewer.