Changelog:

Added new experimental dosbox.conf option that turns off the
A20 gate automatically if loading a COM/EXE file to a memory
location below 64KB. Option is off by default. This is intended
for the startup routines of programs that assume 8086 wraparound
to prevent them from crashing (joncampbell123).
Bump tinyfiledialogs to v3.19.1 (maron2000)
Fix VGA render-on-demand bug that causes all screen updates to
stop working if something changes video state without changing
any other attribute (width, height, frame rate, etc.). In
PC-98 mode this bug could be triggered by leaving the text
layer open while switching off the graphics layer when the
graphics layer is in 256-color PEGC mode. Fix for KOARMADA.EXE
when exiting back to the DOS prompt. (joncampbell123).
In PC-98 mode, add I/O port 43Bh which guest applications can
then read to determine whether the 15MB “memory hole” is open.
The guest can use this bit to determine whether the PEGC 256-color
framebuffer is available at that location, or whether that is
just plain system memory. Added for homebrew PC-9821 project
KOARMADA.EXE which uses that bit to determine how to talk to
the framebuffer. (joncampbell123).
Fix keyboard ISR in PC-98 mode to assume there is data waiting
from the keyboard I/O ports (then check the status for more).
The reason is that CWSDPMI.EXE for PC-98 has a keyboard ISR
of it’s own that reads the scan code first (which clears the
“data available” bit) before then passing control to the
real-mode keyboard ISR. If our keyboard ISR first checks for
status in that case it will never see any keyboard data and
keyboard input will never register to the guest while running
under CWSDPMI (joncampbell123).
Fix BIOS POST location (F000:FFF0) JMP instruction in PC-98 mode
so that the segment value of the JMP instruction matches a
specific value that the DJGPP C runtime checks for to detect
PC-98. (joncampbell123).
Stop serving IBM PC-specific CWSDPMI.EXE in NEC PC-98 mode.
It happens to work unless any interrupt or exception happens.
Instead, provide an alternate common version of CWSDPMI.EXE
that was patched to support PC-98 machines when machine=pc98
(joncampbell123).
Add support for ucrt64 builds (maron2000)
DOS CTRL+C handling: Remove NULL vector check because built-in
COMMAND.COM long ago was fixed to provide a CTRL+C vector. Fix
code to use a different value for the C++ exception so that it
cannot be confused for any other common signal in the emulator
(joncampbell123).
Remove DOSBox Integration Device VGA “self capture”,
which was never used much anyway, as part of cleanup (joncampbell123).
x86 paging: Remove unused non-“full TLB” code. (joncampbell123).
Use mmap() to allocate system memory if available. This is
for future work that may involve something that requires
page-aligned allocation, such as KVM support in Linux (joncampbell123).
VGA cleanup, organization (joncampbell123).
Fixed regression of specifying DBCS fontx file was ignored. (maron2000)
Fixed mistakes in adding double quotes to filenames to pass to IMGMOUNT
command, and syntax errors in showing a message dialog box. (maron2000)
Fixed bug where bios memSize was not set when using TTF. (maitchison)
Fixed CMS was always disabled regardless of config settings. (xrip)
Switch off TTF mode in text modes not working in TTF mode. (maron2000)
Gravis Ultrasound: Add dosbox.conf option that when enabled,
prints a warning to the log file every time the guest pokes
data into GUS RAM beyond the 1MB supported by the card,
in order to better identify errant Demoscene code and/or
any bugs in new tracker code currently in development. (joncampbell123)
VGA: Fix buffer overrun that can occur with 4bpp planar
16-color modes if the guest writes beyond the first 2MB
of video RAM. The planar support code also copies the 3rd
bitplane to a font RAM array used in EGA/VGA text mode.
This font RAM array is only 512KB, therefore in planar
memory space, writes beyond (2MB/4) = 512KB cause corruption
of emulator state and possibly crashes. Solve the issue
therefore by not copying to font RAM beyond 512KB. (joncampbell123)
VESA BIOS support: Fix VGA draw and bank switching code
to ensure that the guest cannot write outside video RAM
limits, and fix VBE bank switching code to consider 4bpp
planar SVGA modes properly. (joncampbell123)
VESA BIOS support: Fix scan line and page calculations related
to 4bpp planar 16-color SVGA modes. (joncampbell123)
VESA BIOS support: Fix 24bpp RGB bugs related to VBE calls
that control scan line length and display panning/scrolling.
Now VBETEST can test 24bpp panning without potentially giving
the user an epileptic seizure, and there are no more overlong
scanlines. (joncampbell123)
VESA BIOS support: Correct mode information for SVGA text modes (joncampbell123)
VESA BIOS support: Like real Pentium-era hardware, do not
list 4bpp planar 16-color modes as having a linear framebuffer.
Most SVGA cards only support planar VGA memory within the
standard VGA A0000-BFFFFh region and do not support the same
up in the linear framebuffer area. (joncampbell123)
Save state support: Let the option to control whether or not
compression is applied, apply to the ZIP compression. If you
turn off compression, the ZIP file uses “store” mode instead,
otherwise compresses as normal. (joncampbell123)
It turns out that for whatever reason, the savestate code was
compressing the state twice. Once by itself, and then again when
writing to the ZIP archive. Furthermore, storing the original
length at the end of the compressed data using size_t is a big
problem. Remove the extra compression/decompression and let the
ZIP file support do the compression. Save states from now on
will be marked as “No compression” for at least some backwards
compatibility. (joncampbell123)
Volume label cleanup and fixes. Do not pad labels with white spaces. (maron2000)
Some NEC PC-98 games that support MIDI through MPU-401 like to use
Roland GS-specific SysEx messages to control master volume and
reset the MIDI synth, instead of standard messages. These games
were known in DOSBox-X to have problems with MIDI stuck notes and
hanging notes for this reason. Added code to recognize Roland GS
reset SysEx and reissue it as standard MIDI reset, to resolve that.
Added code to Fluidsynth MIDI support to recognize the Roland GS
master volume SysEx commands and apply it to the output, which
allows these games to “fade out” the MIDI properly. PC-98 games
should no longer have hanging/stuck MIDI notes (joncampbell123).
Fix VESA BIOS modelist mistake that marked all “high definition”
modes as modes to round bytes per line up to a power of 2 (joncampbell123)
Fix memory size register determination for S3 Virge/VX (clbianco)
Fixed a Y2038 bug by replacing Int32x32To64 with regular multiplication.
(CookiePLMonster)
Fixed pasting Bell code (0x07) from clipboard was ignored. (maron2000)
Fixed a segfault crash when pasting the content of clipboard is empty
or consists of invalid characters only. (maron2000)
Fixed crash when trying to access MOUNTed empty physical CD/Floppy
drives. (maron2000)

Atualizações:

Adicionado uma nova opção experimental no dosbox.conf que desliga automaticamente o A20 gate se carregar um arquivo COM/EXE para uma localização de memória abaixo de 64KB. A opção está desligada por padrão. Isso é destinado para rotinas de inicialização de programas que assumem o wraparound 8086 para evitar que eles travem. (joncampbell123)
Ajuste da biblioteca tinyfiledialogs para v3.19.1 (maron2000).
Correção de bug de renderização VGA sob demanda que causava a interrupção de todas as atualizações da tela se algo mudasse o estado do vídeo sem alterar qualquer outro atributo (largura, altura, taxa de quadros, etc.). No modo PC-98, esse bug podia ser acionado ao deixar a camada de texto aberta enquanto desligava a camada gráfica quando esta estava em modo PEGC de 256 cores. Correção para KOARMADA.EXE ao sair para o prompt de comando. (joncampbell123).
No modo PC-98, adicionado o porta I/O 43Bh que os aplicativos podem ler para determinar se o “buraco de memória” de 15MB está aberto. O guest pode usar esse bit para determinar se o framebuffer PEGC de 256 cores está disponível naquele local ou se é apenas memória do sistema. Adicionado para o projeto homebrew PC-9821 KOARMADA.EXE que usa esse bit para saber como interagir com o framebuffer. (joncampbell123).
Correção do ISR de teclado no modo PC-98 para assumir que há dados aguardando nos portos de I/O do teclado (verificando o status para mais dados). Isso resolve o problema no CWSDPMI.EXE para PC-98, que tem um ISR de teclado próprio que lê o código de varredura primeiro (o que limpa o bit “dados disponíveis”) antes de passar o controle para o ISR de teclado real. Se o ISR do teclado for verificado primeiro, ele nunca verá dados do teclado e a entrada não será registrada enquanto o programa rodar sob o CWSDPMI. (joncampbell123).
Correção do endereço do BIOS POST (F000:FFF0) no modo PC-98 para que o valor de segmento da instrução JMP corresponda a um valor específico que o runtime DJGPP verifica para detectar o PC-98. (joncampbell123).
Interrupção do serviço de CWSDPMI.EXE específico para IBM PC no modo NEC PC-98. Ele funcionava, mas não em caso de interrupção ou exceção. Agora, fornecemos uma versão alternativa comum do CWSDPMI.EXE que foi corrigida para suportar máquinas PC-98 quando a configuração machine=pc98 estiver ativa. (joncampbell123).
Adição de suporte para builds ucrt64 (maron2000).
Manuseio do CTRL+C no DOS: Remoção da verificação do vetor NULL, pois o COMMAND.COM já corrige isso há muito tempo para fornecer um vetor CTRL+C. Correção do código para usar um valor diferente para a exceção C++ para evitar confusão com outros sinais comuns no emulador. (joncampbell123).
Remoção do “self capture” no dispositivo de integração DOSBox VGA, que nunca foi muito utilizado, como parte da limpeza. (joncampbell123).
Paginação x86: Remoção do código não utilizado de TLB “não completo”. (joncampbell123).
Uso do mmap() para alocar memória do sistema, se disponível. Isso é para futuros trabalhos que podem envolver algo que exija alocação alinhada por páginas, como o suporte a KVM no Linux. (joncampbell123).
Limpeza e organização do código VGA (joncampbell123).
Correção de regressão ao especificar o arquivo fontx DBCS, que estava sendo ignorado. (maron2000).
Correção de erros ao adicionar aspas duplas aos nomes de arquivos passados para o comando IMGMOUNT, além de erros de sintaxe na exibição de uma caixa de diálogo de mensagem. (maron2000).
Correção de bug onde o valor de bios memSize não estava sendo definido ao usar TTF. (maitchison).
Correção do CMS que estava sempre desabilitado, independentemente das configurações. (xrip).
Desligamento do modo TTF em modos de texto que não funcionam em TTF. (maron2000).
Gravis Ultrasound: Adicionada uma opção no dosbox.conf que, quando ativada, imprime um aviso no arquivo de log toda vez que o guest grava dados na RAM do GUS além de 1MB, ajudando a identificar códigos errados de Demoscene ou bugs em novos códigos de tracker atualmente em desenvolvimento. (joncampbell123).
Correção de buffer overflow no VGA que ocorria com modos 4bpp planar de 16 cores se o guest escrevesse além dos primeiros 2MB da memória de vídeo. O código de suporte planar também copiava o terceiro bitplane para uma matriz de memória de fonte usada no modo texto EGA/VGA. Essa matriz de RAM de fonte tem apenas 512KB, portanto, escrever além de 512KB causaria corrupção do estado do emulador e possíveis falhas. A solução foi não copiar para a RAM de fonte além de 512KB. (joncampbell123).
Suporte ao BIOS VESA: Correção no código de troca de banco VGA para garantir que o guest não escreva além dos limites da memória de vídeo e correção na troca de banco VBE para considerar corretamente modos 4bpp planar SVGA. (joncampbell123).
Correção na BIOS VESA para garantir o cálculo correto das linhas de varredura e páginas relacionadas a modos SVGA 4bpp planar de 16 cores. (joncampbell123).
Suporte ao BIOS VESA: Correção de bugs em modos 24bpp RGB relacionados a chamadas VBE que controlam o comprimento da linha de varredura e o deslocamento/deslocamento da tela. Agora o VBETEST pode testar o deslocamento 24bpp sem riscos para o usuário, e não há mais linhas de varredura excessivamente longas. (joncampbell123).
Correção da BIOS VESA no fornecimento de informações sobre modos de texto SVGA. (joncampbell123).
Como hardware real da era Pentium, não listar os modos 4bpp planar de 16 cores como tendo um framebuffer linear. A maioria das placas SVGA só suporta memória planar VGA dentro da área padrão de A0000-BFFFFh e não suporta o mesmo acima na área do framebuffer linear. (joncampbell123).
Suporte ao Save State: Agora, a opção para controlar se a compressão é aplicada ou não, também se aplica à compressão ZIP. Se você desligar a compressão, o arquivo ZIP usará o modo “store”, caso contrário, comprimirá normalmente. (joncampbell123).
Correção da compressão de estados salvos: O código estava comprimindo o estado duas vezes, uma vez sozinho e outra ao escrever no arquivo ZIP. Além disso, armazenar o comprimento original no final dos dados comprimidos usando size_t causava problemas. A compressão dupla foi removida, e o arquivo ZIP agora cuida da compressão. Os estados salvos agora serão marcados como “Sem compressão” para compatibilidade retroativa. (joncampbell123).
Limpeza de rótulos de volume: Não há mais preenchimento de rótulos com espaços em branco. (maron2000).
Alguns jogos NEC PC-98 que usam MPU-401 para MIDI e enviam mensagens SysEx específicas do Roland GS para controlar volume master e reiniciar o sintetizador MIDI agora não terão mais notas MIDI presas ou suspensas. O código foi adicionado para reconhecer essas mensagens SysEx do Roland GS e transformá-las em mensagens MIDI padrão, resolvendo esse problema. (joncampbell123).
Correção no modelo da BIOS VESA que marcava todos os modos “alta definição” como modos que arredondam os bytes por linha para a potência de 2. (joncampbell123).
Correção do tamanho de memória para S3 Virge/VX (clbianco).
Correção de bug Y2038 substituindo Int32x32To64 por multiplicação regular. (CookiePLMonster).
Correção ao colar código Bell (0x07) da área de transferência, que estava sendo ignorado. (maron2000).
Correção de falha de segmentação ao colar conteúdo vazio ou inválido da área de transferência. (maron2000).
Correção de falha ao tentar acessar unidades de CD/Floppy vazias após usar o comando MOUNT. (maron2000).