version 2026 (07 Sep 2026)
- cout: preserves BP to avoid crashes on the original IBM PC BIOS
- cout: fixed EGA detection (2025 regression)
- dos: ctrlc_inhibit sets INT 23h with correct DS:DX (not DX only)
- mda: cls resets logrow so the next log line starts at row 0
- mouse: minor optimizations
- mouse: mdr_mouse_rawmotion() accepts NULL arguments
- opl: notebend keeps KEY-ON bit so pitch bend does not note-off
- pcx: mdr_pcx_anal() no longer closes the pcx file descriptor on error
- pktdrv: init publishes PKTDRV_PTR only after recv patch succeeds
- pktdrv: mdr_pktdrv_send() returns failure when the driver sets CF
- sbdigi: off-by-one fix while providing the DMA controller with sample ptr
- sbdigi: install IRQ handler to ack DSP and send PIC EOI
- timer: stop is a no-op if not inited; callmod reset on init
- unzip: fixed data-descriptor skip after memset wiped nextidxoffset
- unzip: guard empty filenames in dir detection (len == 0)
- vid12: vid12_rawscanlines_to_plane() becomes vid12_rawscanlines_to_planes()
- vid12: added vid12_setorigin()
- wave: skips unrecognized fmt bytes instead of choking on them
- xms: push/pull reject odd lengths (XMS move requires even count)
- tests: per-module test programs (TESTS\T_*.C)

version 2025 (29 Jul 2025)
- cout: added mdr_cout_scrollup()
- cout: mdr_cout_close() restores the cursor (if it has been hidden)
- mda: added the mda driver (MDA dual screen access)
- mouse: added mdr_mouse_rawmotion()
- mouse: mdr_mouse_fetchrelease() accepts NULL arguments
- pcx: removed the pcx_load() convenience function
- pcx: pcx_loadrow() takes a memory pointer instead of a FILE handler
- pcx: exposing the mdr_pcx_palentry struct so it can be accessed by programs
- pcx: minor optimizations
- pktdrv: added the pktdrv packet driver Ethernet interface
- vid12: added vid12_vline() vid12_rawscanlines_to_plane() vid12_vramcpy_8px()
- video_detectega() returns 0 when EGA is *NOT* found
- vidx: added the vidx driver (VGA "MODE X", 320x240, 8bpp, 3 video pages)
- xms: functions expose the 16bit handle instead of an exotic struct
- xms: memory move routine fixed so it works in large model
- xms: all functions prefixed with "mdr_" (eg. "mdr_xms_init()")
- xms: dropped the DOS.H and STDLIB.H dependencies (smaller and faster code)
- xms: xms_pull() and xms_push() return an unsigned char instead of an int

version 2024 (29 Jul 2024)
- added the OPL driver (Adlib-style OPL2 FM synth) along with IMF playback
- new mdr_dos_selfexe()
- new mdr_dos_truename()
- new mdr_coutraw_str() and mdr_coutraw_crlf()
- new mdr_dos_ctrlc_inhibit(), mdr_dos_ctrlc_enable(), mdr_dos_ctrlc_disable()
- added mdr_bios_ticks()
- renamed keyb_getkey() to mdr_dos_getkey()
- renamed keyb_flush() to mdr_dos_flushkeyb()
- renamed all timer_ functions to mdr_timer_
- new mdr_dos_getkey2(), same as mdr_dos_getkey() but immune to CTRL+C
- new mdr_dos_keypending()
- removed keyb_getkey_ifany(): use mdr_dos_keypending + mdr_dos_getkey instead
- renamed pcx_anal() and pcx_load() to mdr_pcx_anal() and mdr_pcx_load()
- added pcx_loadrow(): loads PCX data row by row (useful on PCX files > 64K)
- replaced pcx_convto8bpp() by mdr_pcx_to8bpp()
- vid12_putscanline() optimizations: 22% faster
- renamed all the mouse_ functions to mdr_mouse_
- improved mdr_cout_cursor_hide() so it works well on VirtualBox
- added mdr_mouse_setcursor()
- added vid12_waitblank()

version 2023 (29 Jul 2023)
- all routines are built as a library now
- advertising MDR version (MDR_VER_MAJOR and MDR_VER_MINOR in VER.H)
- added the SBDIGI driver (SoundBlaster Digitized sound)
- added the COUT module (text-mode console output)
- added the DOS module (mdr_dos_* functions)
- added the UNZIP module for iteration over ZIP archives
- added the BIOS module (with the mdr_bios_tickswait() function)
- vid12: fast VRAM copy (vid12_vramcpy_* functions)
- vid12: vid12_clrline()
- vid12: fixed color mapping in vid12_setpalette()
- vid12: added functions vid12_hline() and vid12_linepat()
- vid12: fixed reverting the previous video mode at vid12_close()
- vid12: optimized vid12_putpixel() - 17% faster

version 2022 (09 Oct 2022)
- initial public release (unorganized lump of routines)
