VirtualBox

Ignore:
Timestamp:
Apr 11, 2016 12:39:13 PM (9 years ago)
Author:
vboxsync
Message:

VGABIOS,PCBIOS: Build variants for 80286 and 8086 in addition to the default 80386 one. Added build time checking of the BIOSORG results (sed + map file). Fixed shutdown code 0ah jump.

Location:
trunk/src/VBox/Devices/Graphics/BIOS
Files:
6 added
2 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/BIOS/Makefile.kmk

    r56292 r60422  
    2525 # VBoxVgaBios - The VGA BIOS.
    2626 #
    27  MISCBINS += VBoxVgaBios
    28  VBoxVgaBios_TEMPLATE = VBoxBios
    29  VBoxVgaBios_ASFLAGS = -0
    30  VBoxVgaBios_DEFS = VBE
    31  VBoxVgaBios_SOURCES = \
     27 MISCBINS += VBoxVgaBios386
     28 VBoxVgaBios386_TEMPLATE = VBoxBios
     29 VBoxVgaBios386_ASFLAGS = -0
     30 VBoxVgaBios386_CFLAGS = -3
     31 VBoxVgaBios386_DEFS = VBE VBOX_BIOS_CPU=80386
     32 VBoxVgaBios386_SOURCES = \
    3233        vgarom.asm \
    3334        vberom.asm \
    3435        vgabios.c \
    3536        vbe.c
    36  VBoxVgaBios_LDFLAGS = \
     37 VBoxVgaBios386_LDFLAGS = \
    3738        output raw offset=0xC0000 \
    3839        order \
     
    4445          segment _DATA  segaddr=0xC000 offset=0x4600 \
    4546
     47 MISCBINS += VBoxVgaBios286
     48 VBoxVgaBios286_EXTENDS = VBoxVgaBios386
     49 VBoxVgaBios286_CFLAGS  = -2
     50 VBoxVgaBios286_DEFS    = $(filter-out VBOX_BIOS_CPU=80386,$(VBoxVgaBios386_DEFS)) VBOX_BIOS_CPU=80286
     51
     52 MISCBINS += VBoxVgaBios8086
     53 VBoxVgaBios8086_EXTENDS = VBoxVgaBios386
     54 VBoxVgaBios8086_CFLAGS  = -0
     55 VBoxVgaBios8086_DEFS    = $(filter-out VBOX_BIOS_CPU=80386,$(VBoxVgaBios386_DEFS)) VBOX_BIOS_CPU=8086
     56
    4657 #
    4758 # Updates the alternative source file.
    4859 #
    49  update-vgabios-source +| $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.asm $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.md5sum: \
    50                 $$(VBoxVgaBios_1_TARGET) \
    51                 $(VBOX_MAKE_ALTERNATIVE_SOURCE) \
    52                 $(VBOX_VBOXCMP)
    53  if1of ($(KBUILD_TYPE), release)
    54         $(VBOX_MAKE_ALTERNATIVE_SOURCE) \
    55                 --bios-image $< \
    56                 --bios-map $(basename $<).map \
    57                 --bios-sym $(basename $<).sym \
     60 define def_VBoxVgaBiosUpdateAltSource
     61  $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).asm +| $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).md5sum: \
     62                $$$$(VBoxVgaBios$(1)_1_TARGET) \
     63                $$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
     64                $$(VBOX_VBOXCMP)
     65  if1of ($$(KBUILD_TYPE), release)
     66        $$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
     67                --bios-image $$< \
     68                --bios-map $$(basename $$<).map \
     69                --bios-sym $$(basename $$<).sym \
    5870               --bios-type vga \
    59                 --output $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm
    60         $(QUIET)yasm -f bin -o $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.bin $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm
    61         $(VBOX_VBOXCMP) $< $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.bin
    62         $(CP) --changed -- $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
    63         $(REDIRECT) -C $(dir $(VBoxVgaBios_1_TARGET)) -- \
    64                 $(MD5SUM_EXT) -bo $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.md5sum $(notdir $(VBoxVgaBios_1_TARGET))
    65         $(CP) --changed -- $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.md5sum $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
    66         $(RM) -f -- $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.bin $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.md5sum
    67  else
    68         $(QUIET)$(ECHO) "Fatal error: Can only update VBoxVgaBiosAlternative.asm/md5sum with a release build."
    69         $(QUIET)exit 1
    70  endif
     71                --output $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm
     72        $$(QUIET)yasm -f bin \
     73                -o $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).bin \
     74                -l $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).lst \
     75                $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm
     76        $$(VBOX_VBOXCMP) $$< $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).bin
     77        $$(CP) --changed -- $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm $$(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative$(1).asm
     78        $$(REDIRECT) -C $$(dir $$(VBoxVgaBios$(1)_1_TARGET)) -- \
     79                $$(MD5SUM_EXT) -bo $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).md5sum $$(notdir $$(VBoxVgaBios$(1)_1_TARGET))
     80        $$(CP) --changed -- $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).md5sum $$(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative$(1).md5sum
     81        $$(RM) -f -- $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm \
     82                $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).bin \
     83                $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).lst \
     84                $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).md5sum
     85  else
     86        $$(QUIET)$$(ECHO) "Fatal error: Can only update VBoxVgaBiosAlternative$(1).asm/md5sum with a release build."
     87        $$(QUIET)exit 1
     88  endif
     89 endef
     90
     91 $(evalcall2 def_VBoxVgaBiosUpdateAltSource,386)
     92 $(evalcall2 def_VBoxVgaBiosUpdateAltSource,286)
     93 $(evalcall2 def_VBoxVgaBiosUpdateAltSource,8086)
     94
     95 update-vgabios-source: \
     96        $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative386.asm \
     97        $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative286.asm \
     98        $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative8086.asm
    7199
    72100endif # VBOX_WITH_OPEN_WATCOM
     
    79107VgaBiosBin_TEMPLATE  = VBOXR3
    80108VgaBiosBin_DEFS      = IN_VBOXDD2
    81 VgaBiosBin_SOURCES   = \
    82         $(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c
    83 VgaBiosBin_DEPS      = \
    84         $(VgaBiosBin_0_OUTDIR)/vbetables.h
    85 VgaBiosBin_CLEAN     = \
    86         $(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c \
    87         $(VgaBiosBin_0_OUTDIR)/vbetables.h
     109VgaBiosBin_SOURCES   =
     110VgaBiosBin_DEPS      = $(VgaBiosBin_0_OUTDIR)/vbetables.h
     111VgaBiosBin_CLEAN     = $(VgaBiosBin_0_OUTDIR)/vbetables.h
    88112
    89 ifdef VBOX_WITH_OPEN_WATCOM
    90  $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c: $$(VBoxVgaBios_1_TARGET) $(VBOX_BIN2C) | $$(dir $$@)
    91         $(call MSG_TOOL,bin2c,VgaBiosBin,$<,$@)
    92         $(QUIET)$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary $< $@
    93 else
    94  VgaBiosBin_CLEAN    += $(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom
     113define def_VBoxVgaBiosBin
     114 VgaBiosBin_SOURCES += $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c
     115 VgaBiosBin_CLEAN   += $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c
     116 ifdef VBOX_WITH_OPEN_WATCOM
     117  $$$$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c: $$$$(VBoxVgaBios$(1)_1_TARGET) $$(VBOX_BIN2C) | $$$$(dir $$$$@)
     118        $$(call MSG_TOOL,bin2c,VgaBiosBin,$$<,$$@)
     119        $$(QUIET)$$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary$(1) $$< $$@
     120 else
     121  VgaBiosBin_CLEAN  += $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom
    95122
    96  $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c + $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom: \
    97                 $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.asm \
    98                 $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.md5sum \
    99                 $(VBOX_BIN2C) | $$(dir $$@)
    100         $(call MSG_TOOL,bin2c,VgaBiosBin,$<,$@)
    101         $(QUIET)yasm -f bin -o $(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom $<
    102         $(QUIET)$(REDIRECT) -C $(VgaBiosBin_0_OUTDIR) -- \
    103                 $(MD5SUM_EXT) -c $(basename $<).md5sum
    104         $(QUIET)$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary $(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom $@
    105         $(QUIET)$(RM) -f -- $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom
    106 endif
     123  $$$$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c + $$$$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom: \
     124                $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).asm \
     125                $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).md5sum \
     126                $$(VBOX_BIN2C) | $$$$(dir $$$$@)
     127        $$(call MSG_TOOL,bin2c,VgaBiosBin,$$<,$$@)
     128        $$(QUIET)yasm -f bin -o $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom $$<
     129        $$(QUIET)$$(REDIRECT) -C $$(VgaBiosBin_0_OUTDIR) -- \
     130                $$(MD5SUM_EXT) -c $$(basename $$<).md5sum
     131        $$(QUIET)$$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary$(1) $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom $$@
     132        $$(QUIET)$$(RM) -f -- $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom
     133 endif
     134endef
     135$(evalcall2 def_VBoxVgaBiosBin,386)
     136$(evalcall2 def_VBoxVgaBiosBin,286)
     137$(evalcall2 def_VBoxVgaBiosBin,8086)
    107138
    108139
     
    142173 INSTALLS += VBoxVgaBiosSym
    143174 VBoxVgaBiosSym_TEMPLATE = VBoxDbgSyms
    144  VBoxVgaBiosSym_SOURCES = $(basename $(VBoxVgaBios_1_TARGET)).sym
     175 VBoxVgaBiosSym_SOURCES = \
     176        $(basename $(VBoxVgaBios386_1_TARGET)).sym \
     177        $(basename $(VBoxVgaBios286_1_TARGET)).sym \
     178        $(basename $(VBoxVgaBios8086_1_TARGET)).sym
    145179endif
    146180
  • trunk/src/VBox/Devices/Graphics/BIOS/inlines.h

    r56292 r60422  
    7575#pragma aux rep_insw = ".286" "rep insw" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
    7676
     77#if VBOX_BIOS_CPU >= 80386
    7778char __far *rep_insd(char __far *buffer, unsigned ndwords, unsigned port);
    78 #pragma aux rep_insd = ".386" "rep insd" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
     79# pragma aux rep_insd = ".386" "rep insd" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
     80#endif
    7981
    8082char __far *rep_outsb(char __far *buffer, unsigned nbytes, unsigned port);
     
    8486#pragma aux rep_outsw = ".286" "rep outs dx,word ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
    8587
     88#if VBOX_BIOS_CPU >= 80386
    8689char __far *rep_outsd(char __far *buffer, unsigned ndwords, unsigned port);
    87 #pragma aux rep_outsd = ".386" "rep outs dx,dword ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
     90# pragma aux rep_outsd = ".386" "rep outs dx,dword ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
     91#endif
    8892
    8993uint16_t __far swap_16(uint16_t val);
  • trunk/src/VBox/Devices/Graphics/BIOS/vberom.asm

    r55666 r60422  
    3838
    3939include vgadefs.inc
     40include commondefs.inc
    4041
    4142public  _vga_compat_setup
     
    5657VGAROM  segment public 'CODE'
    5758
    58 .386
     59SET_DEFAULT_CPU
    5960
    6061VBE_BYTEWISE_IO EQU 1
     
    123124  jbe  get_bpp_noinc
    124125  mov  ah, al
     126if VBOX_BIOS_CPU gt 8086
    125127  shr  ah, 3
     128else
     129  shr  ah, 1
     130  shr  ah, 1
     131  shr  ah, 1
     132endif
    126133  test al, 07
    127134  jz   get_bpp_noinc
     
    283290  shr  bx, 1
    284291set_width_svga:
     292if VBOX_BIOS_CPU gt 8086
    285293  shr  bx, 3
     294else
     295  shr  bx, 1
     296  shr  bx, 1
     297  shr  bx, 1
     298endif
    286299  mov  dx, VGAREG_VGA_CRTC_ADDRESS
    287300  mov  ah, bl
     
    342355  pop  ax
    343356  push ax
     357if VBOX_BIOS_CPU gt 8086
    344358  shr  ax, 3
     359else
     360  shr  ax, 1
     361  shr  ax, 1
     362  shr  ax, 1
     363endif
    345364  dec  ax
    346365  mov  ah, al
     
    588607  or   bl, bl
    589608  jnz  no_4bpp_1
     609if VBOX_BIOS_CPU gt 8086
    590610  shl  ax, 3
     611else
     612  shl  ax, 1
     613  shl  ax, 1
     614  shl  ax, 1
     615endif
    591616  mov  bl, 1
    592617no_4bpp_1:
     
    604629  or   bl, bl
    605630  jnz  no_4bpp_2
     631if VBOX_BIOS_CPU gt 8086
    606632  shr  ax, 3
     633else
     634  shr  ax, 1
     635  shr  ax, 1
     636  shr  ax, 1
     637endif
    607638  mov  bl, 1
    608639no_4bpp_2:
     
    770801endif
    771802set_palette_data:
    772   pushad
     803  DO_PUSHAD
    773804  push  ds
    774805  push  es
     
    780811  mov   si, di
    781812set_pal_loop:
     813if VBOX_BIOS_CPU ge 80386
    782814  lodsd
    783815  ror   eax, 16
     
    787819  rol   eax, 8
    788820  out   dx, al
     821else
     822  lodsw
     823  mov   bx, ax
     824  lodsw
     825  out   dx, al
     826  mov   al, bh
     827  out   dx, al
     828  mov   al, bl
     829  out   dx, al
     830endif
    789831  loop  set_pal_loop
    790832  pop   ds
    791   popad
     833  DO_POPAD
    792834vbe_09_ok:
    793835  mov  ax, 004Fh
     
    795837
    796838get_palette_data:
    797   pushad
     839  DO_PUSHAD
    798840  mov   al, dl
    799841  mov   dx, VGAREG_DAC_READ_ADDRESS
    800842  out   dx, al
    801843  add   dl, 2
     844if VBOX_BIOS_CPU ge 80386
    802845get_pal_loop:
    803846  xor   eax, eax
     
    808851  in    al, dx
    809852  stosd
     853else
     854  xor   bx, bx
     855get_pal_loop:
     856  in    al, dx
     857  mov   bl, al
     858  in    al, dx
     859  mov   ah, al
     860  in    al, dx
     861  stosw
     862  mov   ax, bx
     863  stosw
     864endif
    810865  loop  get_pal_loop
    811   popad
     866  DO_POPAD
    812867  jmp   vbe_09_ok
    813868
  • trunk/src/VBox/Devices/Graphics/BIOS/vgarom.asm

    r43527 r60422  
    3434
    3535include vgadefs.inc
     36include commondefs.inc
    3637
    3738public  vgabios_int10_handler
     
    7980;;
    8081
    81 .286
     82SET_DEFAULT_CPU_286
    8283
    8384vgabios_int10_handler:
     
    8687  push es
    8788  push ds
    88   pusha
     89  DO_PUSHA
    8990  mov   bx, 0C000h
    9091  mov   ds, bx
    9192  call _int10_debugmsg
    92   popa
     93  DO_POPA
    9394  pop ds
    9495  pop es
     
    199200  push es
    200201  push ds
    201   pusha
     202  DO_PUSHA
    202203
    203204;; We have to set ds to access the right data segment
     
    206207  call _int10_func
    207208
    208   popa
     209  DO_POPA
    209210  pop ds
    210211  pop es
     
    484485  and   al, 0F7h
    485486  and   bl, 01
     487if VBOX_BIOS_CPU gt 8086
    486488  shl   bl, 3
     489else
     490  shl   bl, 1
     491  shl   bl, 1
     492  shl   bl, 1
     493endif
    487494  or    al, bl
    488495  mov   dx, VGAREG_ACTL_ADDRESS
     
    655662  jnz   set_dac_page
    656663  and   al, 07Fh
     664if VBOX_BIOS_CPU gt 8086
    657665  shl   bh, 7
     666else
     667  shl   bh, 1
     668  shl   bh, 1
     669  shl   bh, 1
     670  shl   bh, 1
     671  shl   bh, 1
     672  shl   bh, 1
     673  shl   bh, 1
     674endif
    658675  or    al, bh
    659676  mov   dx, VGAREG_ACTL_ADDRESS
     
    670687  and   al, 80h
    671688  jnz   set_dac_16_page
     689if VBOX_BIOS_CPU gt 8086
    672690  shl   bh, 2
     691else
     692  shl   bh, 1
     693  shl   bh, 1
     694endif
    673695set_dac_16_page:
    674696  and   bh, 0Fh
     
    778800  in    al, dx
    779801  mov   bl, al
     802if VBOX_BIOS_CPU gt 8086
    780803  shr   bl, 7
     804else
     805  shr   bl, 1
     806  shr   bl, 1
     807  shr   bl, 1
     808  shr   bl, 1
     809  shr   bl, 1
     810  shr   bl, 1
     811  shr   bl, 1
     812endif
    781813  mov   dx, VGAREG_ACTL_RESET
    782814  in    al, dx
     
    790822  test  bl, 01
    791823  jnz   get_dac_16_page
     824if VBOX_BIOS_CPU gt 8086
    792825  shr   bh, 2
     826else
     827  shr   bh, 1
     828  shr   bh, 1
     829endif
    793830get_dac_16_page:
    794831  mov   dx, VGAREG_ACTL_RESET
     
    923960  mov   dl, al
    924961  and   dl, 01
     962if VBOX_BIOS_CPU gt 8086
    925963  shl   dl, 3
     964else
     965  shl   dl, 1
     966  shl   dl, 1
     967  shl   dl, 1
     968endif
    926969  mov   ax, BIOSMEM_SEG
    927970  mov   ds, ax
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