Changeset 631 in xtideuniversalbios


Ignore:
Timestamp:
Feb 1, 2025, 12:45:33 PM (3 hours ago)
Author:
Krister Nordvall
Message:

Changes:

  • Fixed a bug in XTIDECFG where changing the COM port for a virtual serial device would not work at all. Thanks to Jaroslaw Jablonski for reporting this problem.
  • Added a couple of macros to the library, LPUSH and LPOP, which creates the long (two bytes) encoding of PUSH and POP respectively. They are pretty much useless except LPOP can be used to differentiate between 808x and NEC V CPUs.
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Assembly_Library/Inc/Macros.inc

    r602 r631  
    77
    88;--------------------------------------------------------------------
     9; The long (two byte) form of PUSH. Supported by NEC V20/V30.
     10;
     11; LPUSH
     12;   Parameters:
     13;       %1:     Any 16 bit general purpose register.
     14;   Returns:
     15;       Nothing
     16;   Corrupts registers:
     17;       Nothing
     18;--------------------------------------------------------------------
     19%macro LPUSH 1.nolist
     20    %ifidni     %1, ax
     21        db      0FFh, 0F0h
     22    %elifidni   %1, cx
     23        db      0FFh, 0F1h
     24    %elifidni   %1, dx
     25        db      0FFh, 0F2h
     26    %elifidni   %1, bx
     27        db      0FFh, 0F3h
     28    %elifidni   %1, sp
     29        db      0FFh, 0F4h
     30    %elifidni   %1, bp
     31        db      0FFh, 0F5h
     32    %elifidni   %1, si
     33        db      0FFh, 0F6h
     34    %elifidni   %1, di
     35        db      0FFh, 0F7h
     36    %else
     37        %error "Invalid parameter passed to LPUSH"
     38    %endif
     39%endmacro
     40
     41
     42;--------------------------------------------------------------------
     43; The long (two byte) form of POP. Not supported by NEC V20/V30.
     44; NEC V20/V30 CPU:s will adjust SP but not actually move the contents
     45; of the top WORD on the stack to the destination register.
     46;
     47; LPOP
     48;   Parameters:
     49;       %1:     Any 16 bit general purpose register.
     50;   Returns:
     51;       Nothing
     52;   Corrupts registers:
     53;       Nothing
     54;--------------------------------------------------------------------
     55%macro LPOP 1.nolist
     56    %ifidni     %1, ax
     57        db      8Fh, 0C0h
     58    %elifidni   %1, cx
     59        db      8Fh, 0C1h
     60    %elifidni   %1, dx
     61        db      8Fh, 0C2h
     62    %elifidni   %1, bx
     63        db      8Fh, 0C3h
     64    %elifidni   %1, sp
     65        db      8Fh, 0C4h
     66    %elifidni   %1, bp
     67        db      8Fh, 0C5h
     68    %elifidni   %1, si
     69        db      8Fh, 0C6h
     70    %elifidni   %1, di
     71        db      8Fh, 0C7h
     72    %else
     73        %error "Invalid parameter passed to LPOP"
     74    %endif
     75%endmacro
     76
     77
     78;--------------------------------------------------------------------
    979; Skips the immediately following 1 byte instruction by using it
    1080; as an immediate value to a dummy instruction.
     
    2191%macro SKIP1B 1.nolist
    2292    %ifidni     %1, f
    23         db  03Ch                    ; Opcode byte for CMP AL, <immed>
    24         ;db 0A8h                    ; Alt. version TEST AL, <immed>
     93        db      03Ch                ; Opcode byte for CMP AL, <immed>
     94        ;db     0A8h                ; Alt. version TEST AL, <immed>
    2595    %elifidni   %1, al
    26         db  0B0h                    ; Opcode byte for MOV AL, <immed>
     96        db      0B0h                ; Opcode byte for MOV AL, <immed>
    2797    %elifidni   %1, ah
    28         db  0B4h                    ; Opcode byte for MOV AH, <immed>
     98        db      0B4h                ; Opcode byte for MOV AH, <immed>
    2999    %elifidni   %1, bl
    30         db  0B3h                    ; Opcode byte for MOV BL, <immed>
     100        db      0B3h                ; Opcode byte for MOV BL, <immed>
    31101    %elifidni   %1, bh
    32         db  0B7h                    ; Opcode byte for MOV BH, <immed>
     102        db      0B7h                ; Opcode byte for MOV BH, <immed>
    33103    %elifidni   %1, cl
    34         db  0B1h                    ; Opcode byte for MOV CL, <immed>
     104        db      0B1h                ; Opcode byte for MOV CL, <immed>
    35105    %elifidni   %1, ch
    36         db  0B5h                    ; Opcode byte for MOV CH, <immed>
     106        db      0B5h                ; Opcode byte for MOV CH, <immed>
    37107    %elifidni   %1, dl
    38         db  0B2h                    ; Opcode byte for MOV DL, <immed>
     108        db      0B2h                ; Opcode byte for MOV DL, <immed>
    39109    %elifidni   %1, dh
    40         db  0B6h                    ; Opcode byte for MOV DH, <immed>
     110        db      0B6h                ; Opcode byte for MOV DH, <immed>
    41111    %else
    42112        %error "Invalid parameter passed to SKIP1B"
    43113    %endif
    44114%endmacro
     115
    45116
    46117;--------------------------------------------------------------------
     
    59130%macro SKIP2B 1.nolist
    60131    %ifidni     %1, f
    61         db  03Dh                    ; Opcode byte for CMP AX, <immed>
    62         ;db 0A9h                    ; Alt. version TEST AX, <immed>
     132        db      03Dh                ; Opcode byte for CMP AX, <immed>
     133        ;db     0A9h                ; Alt. version TEST AX, <immed>
    63134    %elifidni   %1, ax
    64         db  0B8h                    ; Opcode byte for MOV AX, <immed>
     135        db      0B8h                ; Opcode byte for MOV AX, <immed>
    65136    %elifidni   %1, cx
    66         db  0B9h                    ; Opcode byte for MOV CX, <immed>
     137        db      0B9h                ; Opcode byte for MOV CX, <immed>
    67138    %elifidni   %1, dx
    68         db  0BAh                    ; Opcode byte for MOV DX, <immed>
     139        db      0BAh                ; Opcode byte for MOV DX, <immed>
    69140    %elifidni   %1, bx
    70         db  0BBh                    ; Opcode byte for MOV BX, <immed>
     141        db      0BBh                ; Opcode byte for MOV BX, <immed>
    71142    %elifidni   %1, sp
    72         db  0BCh                    ; Opcode byte for MOV SP, <immed>
     143        db      0BCh                ; Opcode byte for MOV SP, <immed>
    73144    %elifidni   %1, bp
    74         db  0BDh                    ; Opcode byte for MOV BP, <immed>
     145        db      0BDh                ; Opcode byte for MOV BP, <immed>
    75146    %elifidni   %1, si
    76         db  0BEh                    ; Opcode byte for MOV SI, <immed>
     147        db      0BEh                ; Opcode byte for MOV SI, <immed>
    77148    %elifidni   %1, di
    78         db  0BFh                    ; Opcode byte for MOV DI, <immed>
     149        db      0BFh                ; Opcode byte for MOV DI, <immed>
    79150    %else
    80151        %error "Invalid parameter passed to SKIP2B"
  • trunk/BIOS_Drive_Information_Tool/Src/Strings.asm

    r630 r631  
    44;
    55; XTIDE Universal BIOS and Associated Tools
    6 ; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2024 by XTIDE Universal BIOS Team.
     6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2025 by XTIDE Universal BIOS Team.
    77;
    88; This program is free software; you can redistribute it and/or modify
     
    2222
    2323g_szProgramName:    db  "BIOS Drive Information Tool v1.0.3",CR,LF
    24                     db  "(C) 2012-2024 by XTIDE Universal BIOS Team",CR,LF
     24                    db  "(C) 2012-2025 by XTIDE Universal BIOS Team",CR,LF
    2525                    db  "Released under GNU GPL v2",CR,LF
    2626                    db  "http://xtideuniversalbios.org/",CR,LF,NULL
  • trunk/XTIDE_Universal_BIOS/Inc/Revision.inc

    r630 r631  
    1 630
     1631
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm

    r605 r631  
    44;
    55; XTIDE Universal BIOS and Associated Tools
    6 ; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
     6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2025 by XTIDE Universal BIOS Team.
    77;
    88; This program is free software; you can redistribute it and/or modify
     
    250250    retf                ; NOTE: DL is set to the drive number
    251251
    252 ; Boot by calling INT 18h (ROM Basic of ROM DOS)
     252; Boot by calling INT 18h (ROM Basic or ROM DOS)
    253253.RomBoot:
    254254    int     BIOS_BOOT_FAILURE_INTERRUPT_18h ; Never returns
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm

    r625 r631  
    44;
    55; XTIDE Universal BIOS and Associated Tools
    6 ; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
     6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2025 by XTIDE Universal BIOS Team.
    77;
    88; This program is free software; you can redistribute it and/or modify
     
    133133    at  MENUITEM.bType,             db  TYPE_MENUITEM_HEX
    134134    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
    135     at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgIdeCmdPort
     135    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgIdeSerialPort
    136136    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  8h
    137137    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  3F8h
     
    578578    push    ax
    579579    xlat
    580     mov     [es:di+IDEVARS.bIRQ-IDEVARS.wBasePort], al
     580    mov     [es:di+IDEVARS.bIRQ], al
    581581    pop     ax
    582582
     
    639639    ; XT-CF does not support IRQ so it must be disabled (IRQ setting is not visible for XT-CF)
    640640    ; XTIDE does not use IRQs by default
    641     mov     BYTE [es:di+IDEVARS.bIRQ-IDEVARS.wBasePort], 0
     641    mov     BYTE [es:di+IDEVARS.bIRQ], 0
    642642
    643643.WriteNonSerial:
     
    658658
    659659.ChangingToSerial:
    660 ;
    661 ; For serial drives, we pack the port number and baud rate into a single byte, and thus
    662 ; we need to take care to properly read/write just the bits we need.  In addition, since
    663 ; we use the Port/PortCtrl bytes in a special way for serial drives, we need to properly
    664 ; default the values stored in both these words when switching in and out of the Serial
    665 ; device choice.
    666 ;
    667     mov     al, SERIAL_DEFAULT_COM
    668     mov     BYTE [es:di+IDEVARS.bSerialBaud-IDEVARS.wBasePort], SERIAL_DEFAULT_BAUD
    669     mov     [es:di+IDEVARS.bIRQ-IDEVARS.wBasePort], ah  ; Clear .bIRQ to keep the boot menu from printing it
    670 
     660    mov     al, ah                              ; Clear AL to point to the default COM port in the PackedCOMPortAddresses table
     661    mov     BYTE [es:di+IDEVARS.bSerialBaud], SERIAL_DEFAULT_BAUD
     662    mov     [es:di+IDEVARS.bIRQ], ah            ; Clear .bIRQ to keep the boot menu from printing it
    671663    sub     di, IDEVARS.wBasePort - IDEVARS.bSerialCOMPortChar
     664    mov     BYTE [es:di], SERIAL_DEFAULT_COM
    672665    call    IdeControllerMenu_SerialWriteCOM
    673     stosb
    674666
    675667.Done:
     
    685677;
    686678;   Parameters:
    687 ;       AL:     COM port
     679;       AX:     COM port menu choice index
    688680;       ES:DI:  Ptr to IDEVARS.bSerialCOMPortChar
    689681;       DS:SI:  MENUITEM pointer
    690682;   Returns:
    691 ;       Nothing
     683;       AX:     COM port menu choice index
    692684;   Corrupts registers:
    693685;       BX
     
    695687ALIGN JUMP_ALIGN
    696688IdeControllerMenu_SerialWriteCOM:
    697     push    ax
    698     push    si
    699 
    700     mov     bx, PackedCOMPortAddresses - 1
    701     mov     si, g_rgbChoiceToValueLookupForCOM - 2
    702 
    703 .Loop:
    704     inc     bx
    705     inc     si
    706     inc     si
    707 
    708     mov     ah, [bx]
    709     cmp     ah, SERIAL_DEFAULT_CUSTOM_PORT >> 2
    710     je      SHORT .NotFound
    711 
    712     cmp     al, [si]
    713     jne     SHORT .Loop
    714 
    715 .NotFound:
    716     mov     [es:di+IDEVARS.bSerialPort-IDEVARS.bSerialCOMPortChar], ah
    717 
    718     pop     si
    719     pop     ax
     689    xchg    bx, ax
     690    mov     al, [bx+PackedCOMPortAddresses]
     691    mov     [es:di+IDEVARS.bSerialPort-IDEVARS.bSerialCOMPortChar], al
     692    xchg    bx, ax
    720693    ret
    721694
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm

    r630 r631  
    44;
    55; XTIDE Universal BIOS and Associated Tools
    6 ; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2024 by XTIDE Universal BIOS Team.
     6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2025 by XTIDE Universal BIOS Team.
    77;
    88; This program is free software; you can redistribute it and/or modify
     
    9898g_szNfoMainFlash:       db  "Flash loaded BIOS image to EEPROM.",NULL
    9999g_szNfoMainSave:        db  "Save BIOS changes back to original file from which it was loaded.",NULL
    100 g_szNfoMainLicense:     db  "XTIDE Universal BIOS and XTIDECFG Copyright (C) 2009-2010 by Tomi Tilli, 2011-2024 by XTIDE Universal BIOS Team."
     100g_szNfoMainLicense:     db  "XTIDE Universal BIOS and XTIDECFG Copyright (C) 2009-2010 by Tomi Tilli, 2011-2025 by XTIDE Universal BIOS Team."
    101101                        db  " Released under GNU GPL v2, with ABSOLUTELY NO WARRANTY. Press ENTER for more details...",NULL
    102102g_szNfoMainHomePage:    db  "Visit http://xtideuniversalbios.org (home page) and http://forum.vcfed.org (support)",NULL
    103103
    104104g_szHelpMainLicense:    db  "XTIDE Universal BIOS and XTIDECFG Configuration program are Copyright 2009-2010 by Tomi Tilli,"
    105                         db  " 2011-2024 by XTIDE Universal BIOS Team. Released under GNU GPL v2. This software comes with ABSOLUTELY NO WARRANTY."
     105                        db  " 2011-2025 by XTIDE Universal BIOS Team. Released under GNU GPL v2. This software comes with ABSOLUTELY NO WARRANTY."
    106106                        db  " This is free software, and you are welcome to redistribute it under certain conditions."
    107107                        db  " See the LICENSE.TXT file that was included with this distribution,"
     
    250250g_szDlgIdeEnIRQ:            db  "Enable interrupt?",NULL
    251251g_szDlgIdeIRQ:              db  "Enter IRQ channel (2...7 for 8-bit controllers, 2...15 for any other controller).",NULL
     252g_szDlgIdeSerialPort:       db  "Enter serial port I/O address.",NULL
    252253g_szUnsupportedDevice:      db  "There is no support for this device type in the currently loaded BIOS."
    253254                            db  " You must load a BIOS built with the proper module included to be able to use this type of device.",NULL
Note: See TracChangeset for help on using the changeset viewer.