Changeset 199 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS_Configurator_v2
- Timestamp:
- Nov 21, 2011, 11:01:08 AM (13 years ago)
- google:author:
- gregli@hotmail.com
- 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 50 50 .wMaxValue: 51 51 .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 52 54 endstruc 53 55 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
r181 r199 190 190 ALIGN JUMP_ALIGN 191 191 .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 192 199 shl ax, 1 ; Shift for WORD lookup 193 add ax, [si+MENUITEM.itemValue+ITEM_VALUE.rgwChoiceToValueLookup] 194 xchg bx, ax 200 add bx, ax 195 201 mov ax, [bx] ; Lookup complete 196 202 ; Fall to .StoreByteOrWordValueFromAXtoESDIwithItemInDSSI … … 210 216 ALIGN JUMP_ALIGN 211 217 .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 212 227 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE 213 228 jnz SHORT .StoreByteFromAL 214 229 215 230 mov [es:di+1], ah 216 231 ALIGN JUMP_ALIGN … … 269 284 push es 270 285 push di 286 push bx 271 287 call GetConfigurationBufferToESDIforMenuitemInDSSI 272 288 add di, [si+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset] 273 289 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 274 299 pop di 275 300 pop es -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/BootMenuSettingsMenu.asm
r144 r199 10 10 at MENUPAGE.fnEnter, dw BootMenuSettingsMenu_EnterMenuOrModifyItemVisibility 11 11 at MENUPAGE.fnBack, dw ConfigurationMenu_EnterMenuOrModifyItemVisibility 12 at MENUPAGE.wMenuitems, dw 612 at MENUPAGE.wMenuitems, dw 7 13 13 iend 14 14 … … 66 66 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgBootFloppyDrvs 67 67 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBootFloppyDrvs 68 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw g_rgwChoiceToValueLookupForFloppyDrives68 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw NULL 69 69 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFloppyDrives 70 70 iend … … 101 101 iend 102 102 103 g_MenuitemBootMenuSerialScanDetect: 104 istruc 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 117 iend 118 103 119 g_rgwChoiceToValueLookupForDisplayModes: 104 120 dw DEFAULT_TEXT_MODE … … 118 134 dw g_szValueBootDispModeMono 119 135 120 g_rgwChoiceToValueLookupForFloppyDrives: ; (No translation)121 dw 0122 dw 1123 dw 2124 dw 3125 dw 4126 136 g_rgszValueToStringLookupForFloppyDrives: 127 137 dw g_szValueBootFloppyDrvsAuto -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm
r153 r199 10 10 at MENUPAGE.fnEnter, dw IdeControllerMenu_EnterMenuOrModifyItemVisibility 11 11 at MENUPAGE.fnBack, dw ConfigurationMenu_EnterMenuOrModifyItemVisibility 12 at MENUPAGE.wMenuitems, dw 812 at MENUPAGE.wMenuitems, dw 11 13 13 iend 14 14 … … 50 50 at MENUITEM.szQuickInfo, dw g_szNfoIdeDevice 51 51 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 53 53 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE 54 54 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL … … 57 57 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw g_rgwChoiceToValueLookupForDevice 58 58 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForDevice 59 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw IdeControllerMenu_WriteDevice 59 60 iend 60 61 … … 89 90 iend 90 91 92 g_MenuitemIdeControllerSerialCOM: 93 istruc 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 108 iend 109 110 g_MenuitemIdeControllerSerialPort: 111 istruc 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 125 iend 126 127 g_MenuitemIdeControllerSerialBaud: 128 istruc 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 142 iend 143 91 144 g_MenuitemIdeControllerEnableInterrupt: 92 145 istruc MENUITEM … … 135 188 dw g_szValueCfgDeviceSerial 136 189 190 g_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 205 g_rgszValueToStringLookupForBaud: 206 dw g_szValueCfgBaud2400 207 dw g_szValueCfgBaud9600 208 dw g_szValueCfgBaud38_4 209 dw g_szValueCfgBaud115_2 210 211 g_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 137 216 138 217 ; Section containing code … … 161 240 lea ax, [bx+IDEVARS.wPort] 162 241 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 164 247 lea ax, [bx+IDEVARS.wPortCtrl] 165 248 mov [cs:g_MenuitemIdeControllerControlBlockAddress+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax … … 168 251 mov [cs:g_MenuitemIdeControllerEnableInterrupt+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 169 252 mov [cs:g_MenuitemIdeControllerIdeIRQ+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax 253 170 254 ret 171 255 … … 185 269 pop ds 186 270 call .EnableOrDisableIRQ 271 call .EnableOrDisableSerial 187 272 mov si, g_MenupageForIdeControllerMenu 188 273 jmp Menupage_ChangeToNewMenupageInDSSI … … 226 311 ret 227 312 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 229 363 ;-------------------------------------------------------------------- 230 364 ; MENUITEM activation functions (.fnActivate) … … 250 384 call MasterSlaveMenu_InitializeToDrvparamsOffsetInBX 251 385 jmp MasterSlaveMenu_EnterMenuOrModifyItemVisibility 386 387 PackedCOMPortAddresses: ; 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 ; 438 ALIGN JUMP_ALIGN 439 IdeControllerMenu_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 ; 498 ALIGN JUMP_ALIGN 499 IdeControllerMenu_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 ; 522 ALIGN JUMP_ALIGN 523 IdeControllerMenu_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 546 IdeControllerMenu_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 ; 557 ALIGN JUMP_ALIGN 558 IdeControllerMenu_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 ; 566 ALIGN JUMP_ALIGN 567 IdeControllerMenu_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 ; 588 ALIGN JUMP_ALIGN 589 IdeControllerMenu_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 ; 599 ALIGN JUMP_ALIGN 600 IdeControllerMenu_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 67 67 g_szDlgFileFilter: db "*.*",NULL 68 68 69 69 70 g_szNfoMainExitToDOS: db "Quits XTIDE Universal BIOS Configurator.",NULL 70 71 g_szNfoMainLoadFile: db "Load BIOS file to be configured or flashed.",NULL … … 111 112 g_szItemIdeEnIRQ: db "Enable interrupt",NULL 112 113 g_szItemIdeIRQ: db "IRQ",NULL 114 g_szItemSerialCOM: db "COM Port",NULL 115 g_szItemSerialBaud: db "Baud Rate",NULL 116 g_szItemSerialPort: db "COM Port I/O address",NULL 117 118 g_szItemIdeSerialComPort: db "COM port",NULL 119 g_szItemIdeSerialBaudRate: db "Baud rate",NULL 113 120 114 121 g_szDlgDevice: db "Select controller type.",NULL … … 117 124 g_szDlgIdeEnIRQ: db "Enable interrupt?",NULL 118 125 g_szDlgIdeIRQ: db "Enter IRQ channel (2...7 for 8-bit controllers, 2...15 for any other controller).",NULL 119 126 120 127 g_szNfoIdeBackToCfgMenu:db "Back to XTIDE Universal BIOS Configuration Menu.",NULL 121 128 g_szNfoIdeMaster: db "Settings for Master Drive.",NULL … … 123 130 g_szNfoIdeDevice: db "Select controller device type.",NULL 124 131 g_szNfoIdeCmdPort: db "IDE Controller Command Block (base port) address.",NULL 125 g_szNfoIdeCtrlPort: db "IDE Controller Control Block address. Usually Cmd Block + 200h.",NULL132 g_szNfoIdeCtrlPort: db "IDE Controller Control Block address. Usually Cmd Block + 8 for XTIDE, and Cmd Block + 200h for ATA.",NULL 126 133 g_szNfoIdeEnIRQ: db "Interrupt or polling mode.",NULL 127 134 g_szNfoIdeIRQ: db "IRQ channel to use.",NULL 135 g_szNfoIdeSerialCOM: db "Select a COM port by number.",NULL 136 g_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 137 g_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 128 138 129 139 g_szHelpIdeCmdPort: incbin "IDE_CommandPort.txt" … … 135 145 g_szHelpIdeIRQ: incbin "IDE_IRQ.txt" 136 146 db NULL 147 g_szHelpIdeSerialCOM: incbin "IDE_SerialCOM.txt" 148 db NULL 149 g_szHelpIdeSerialPort: incbin "IDE_SerialPort.txt" 150 db NULL 151 g_szHelpIdeSerialBaud: incbin "IDE_SerialBaud.txt" 152 db NULL 137 153 138 154 g_szMultichoiceCfgDevice: … … 144 160 db "Serial port virtual device",NULL 145 161 162 g_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 177 g_szValueCfgCOM1: db "COM1",NULL 178 g_szValueCfgCOM2: db "COM2",NULL 179 g_szValueCfgCOM3: db "COM3",NULL 180 g_szValueCfgCOM4: db "COM4",NULL 181 g_szValueCfgCOM5: db "COM5",NULL 182 g_szValueCfgCOM6: db "COM6",NULL 183 g_szValueCfgCOM7: db "COM7",NULL 184 g_szValueCfgCOM8: db "COM8",NULL 185 g_szValueCfgCOM9: db "COM9",NULL 186 g_szValueCfgCOMA: db "COMA",NULL 187 g_szValueCfgCOMB: db "COMB",NULL 188 g_szValueCfgCOMC: db "COMC",NULL 189 g_szValueCfgCOMx: db "Custom",NULL 190 191 g_szSerialBaudChoice: 192 db "2400 baud",LF 193 db "9600 baud",LF 194 db "38.4K baud",LF 195 db "115.2K baud",NULL 196 197 g_szValueCfgBaud2400: db "2400",NULL 198 g_szValueCfgBaud9600: db "9600",NULL 199 g_szValueCfgBaud38_4: db "38.4K",NULL 200 g_szValueCfgBaud115_2: db "115.2K",NULL 201 146 202 g_szValueCfgDeviceDual8b: db "XTIDE",NULL 147 203 g_szValueCfgDeviceMod: db "Chuck(G)",NULL … … 149 205 g_szValueCfgDevice16b: db "16-bit",NULL 150 206 g_szValueCfgDevice32b: db "32-bit",NULL 151 g_szValueCfgDeviceSerial: db " serial",NULL207 g_szValueCfgDeviceSerial: db "Serial",NULL 152 208 153 209 … … 184 240 g_szItemBootFloppyDrvs: db "Number of Floppy Drives",NULL 185 241 g_szItemBootSwap: db "Swap boot drive numbers",NULL 242 g_szItemSerialDetect: db "Scan for Serial Drives",NULL 186 243 187 244 g_szDlgBootTimeout: db "Enter Boot Menu selection timeout in BIOS timer ticks (1...1092, 0 disables timeout).",NULL … … 190 247 g_szDlgBootFloppyDrvs: db "Select number of Floppy Drives to display on boot menu.",NULL 191 248 g_szDlgBootSwap: db "Enable drive number translation?",NULL 192 249 g_szDlgSerialDetect: db "Scan for serial drives?",NULL 250 193 251 g_szNfoBootTimeout: db "Menu item selection timeout in BIOS timer ticks.",NULL 194 252 g_szNfoBootDrive: db "Default drive on boot menu.",NULL … … 196 254 g_szNfoBootFloppyDrvs: db "Number of Floppy Drives to display on boot menu.",NULL 197 255 g_szNfoBootSwap: db "Drive Number Translation (swap first drive with selected).",NULL 256 g_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 198 257 199 258 g_szHelpBootTimeout: incbin "Bootmenu_Timeout.txt" … … 205 264 g_szHelpBootSwap: incbin "Bootmenu_SwapDrives.txt" 206 265 db NULL 266 g_szHelpSerialDetect: incbin "Bootmenu_SerialDetect.txt" 267 db NULL 207 268 208 269 g_szMultichoiceBootDispMode:
Note:
See TracChangeset
for help on using the changeset viewer.