VirtualBox

Changeset 84901 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jun 22, 2020 1:37:32 PM (5 years ago)
Author:
vboxsync
Message:

BIOS: Do not hardcode conventional memory size, query from CMOS instead.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/BIOS/orgs.asm

    r84752 r84901  
    5353include commondefs.inc
    5454
    55 EBDA_SEG        equ     09FC0h          ; starts at 639K
    56 EBDA_SIZE       equ     1               ; 1K
    57 BASE_MEM_IN_K   equ     (640 - EBDA_SIZE)
     55EBDA_SIZE       equ     1               ; 1K minimum -- other modules may add to it
    5856
    5957CMOS_ADDR       equ     070h
     
    449447
    450448                ;; base memory in K to 40:13
    451                 mov     ax, BASE_MEM_IN_K
     449                mov     al, 16h
     450                out     CMOS_ADDR, al
     451                in      al, CMOS_DATA
     452                mov     ah, al
     453                mov     al, 15h
     454                out     CMOS_ADDR, al
     455                in      al, CMOS_DATA
     456                sub     ax, EBDA_SIZE
    452457                mov     ds:[413h], ax
    453458
     
    492497                xor     ax, ax
    493498                mov     ds, ax
    494                 ;; TODO: What's the point? The BDA is zeroed already?!
    495                 mov     ds:[417h], al   ; keyboard shift flags, set 1
    496                 mov     ds:[418h], al   ; keyboard shift flags, set 2
    497                 mov     ds:[419h], al   ; keyboard Alt-numpad work area
    498                 mov     ds:[471h], al   ; keyboard Ctrl-Break flag
    499                 mov     ds:[497h], al   ; keyboard status flags 4
    500499                mov     al, 10h
    501500                mov     ds:[496h], al   ; keyboard status flags 3
     
    882881                SET_INT_VECTOR 77h, BIOSSEG, dummy_isr  ; IRQ 15
    883882
    884                 mov     ax, EBDA_SEG
     883                ;; calculate EBDA segment
     884                xor     ax, ax
     885                mov     ds, ax
     886                mov     ax, ds:[413h]   ; conventional memory size minus EBDA size
     887                mov     cx, 64          ; 64 paras per KB
     888                mul     cx
     889                ;; store EBDA seg in 40:0E
     890                mov     word ptr ds:[40Eh], ax
     891                ;; store EBDA size in the first word of EBDA
    885892                mov     ds, ax
    886893                mov     byte ptr ds:[0], EBDA_SIZE
    887                 ;; store EBDA seg in 40:0E
     894                ;; must reset DS to zero again
    888895                xor     ax, ax
    889896                mov     ds, ax
    890                 mov     word ptr ds:[40Eh], EBDA_SEG
    891897                ret
    892898
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette