Emu71 v1.19

EMU71.RC
- changed version and copyright

HPIL.C
- changed function IoThread(), the minimum timer resolution for the
  WaitForSingleObject() timeout base on the timeBeginPeriod()
  setting which is normally done for all threads in function
  StartTimers(), to be sure that we have here the minimum possible
  timer resultion it's set before using

LODEPNG.C
- changed implementation file to LodePNG version 20250506 with
  unmarked typecast patches for VS2005 x64 compatibility, Copyright
  (c) 2005-2025 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20250506


Emu71 v1.18

DEBUGGER.C
- changed position of debugger window with a default position marker
- bugfix in function GetAddr() and NewValue(), _istxdigit() thrown
  an assertion on negative input values
- changed function Debugger(), in case WM_INITDIALOG set windows
  position only if given windows position don't contain the default
  position marker
- changed function OnToolDebug(), on dialog creation set main window
  as parent window
- changed function LoadMemData() and SaveMemData(), changed function
  prototype by adding a bit mode flag to load or save data in 8-bit
  or 4-bit mode
- changed function DebugMemLoad() and DebugMemSave(), added decoding
  of radio buttons and adjusted to new prototypes of function
  LoadMemData() and SaveMemData()

EMU71.C
- bugfix in function Disasm(), _istxdigit() thrown an assertion on
  negative input values
- bugfix in function WinMain(), changed UNICODE command line
  argument decoding to prevent memory leak and added WSAStartup() /
  WSACleanup() network stack sequence calling once

EMU71.RC
- changed IDD_DEBUG_MEMSAVE and IDD_DEBUG_MEMLOAD, added radio
  buttons to select bit width of memory files
- changed version and copyright

KML.C
- bugfix in function ParseInteger() and Lex(), _istdigit() thrown an
  assertion on negative input values

LODEPNG.C
- changed implementation file to LodePNG version 20241015 with
  unmarked typecast patches for VS2005 x64 compatibility, Copyright
  (c) 2005-2024 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20241015

RESOURCE.H
- added definitions


Emu71 v1.17

EMU71.C
- changed function WinMain(), added disable of TIMER_RESOLUTION
  throttling for Windows 11 and added a more flexible CPU binding
  for the Saturn core emulation thread on Windows Vista and later
  with function GetCurrentProcessorNumber()

EMU71.DSP
- added pngcrc.c sources
- added "LODEPNG_NO_COMPILE_CRC" to lodepng.c definitions

EMU71.RC
- changed version and copyright

FILES.C
- renamed pbySignature[] to bySignature[] and defined signature as
  constant
- changed function MapFile(), speed optimization unpacking ROM image
- changed function UnmapRom(), removed check for ROM NULL pointer
- changed function OpenDocument(), simplified file signature check
  and added error handling for memory allocation
- changed function SaveDocument(), adjusted to bySignature[]
- changed function SaveBackup(), RestoreBackup() and
  CreateRgnFromBitmap(), added error handling for memory allocation
  failed
- changed function DecodeGif(), ignore pixel aspect ratio setting
  instead of returning a decoding error
- changed function DecodePng(), removed NULL pointer check for
  freeing allocated PNG image data

KML.C
- changed function AddToLog(), optimized implementation
- changed function DestroyKmlList(), minor optimization
- changed function CreateKmlList(), ParseLine(), ParseLines() and
  ParseBlock(), added error handling for memory allocation failed
- changed function ParseString(), optimized memory allocation and
  added error handling for memory allocation failed

LODEPNG.C
- changed implementation file to LodePNG version 20230410 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2023 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20230410

PCH.H
- added definitions, emum and struct for calling function
  SetProcessInformation()

PNGCRC.C
- new module for generating the PNG CRC32 replacing the CRC
  generation in LODEPNG.C


Emu71 v1.16

EMU71.C
- changed function SaveChanges(), added document name to MRU list
- changed function OnFileMruOpen(), modified implementation taking
  care of the SaveChanges() modification adding a filename to the
  MRU list after saving a document

EMU71.H
- changed function prototype
- extern declaration of global functions

EMU71.RC
- changed version and copyright

FILES.C
- changed function DibNumColors(), CreateBIPalette() and
  DecodeBmp(), marked BITMAPINFOHEADER pointer as unaligned
- changed function CreateBIPalette() and DecodeBmp(), minor
  optimization at input data check
- changed function DecodePng(), simplified destination row pointer
  calculation in main loop and removed dead code in function
  cleanup

LODEPNG.C
- changed implementation file to LodePNG version 20220717 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2022 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20220717

MRU.C
- added some remarks
- added function MruID(), return ID of the given entry
- changed function MruFilename(), changed function interface writing
  found filename into a buffer instead of returning a pointer to the
  filename

PCH.H
- added __unaligned definition for MSVC6.0 SDK and earlier


Emu71 v1.15

DEBUGGER.C
- bugfix in function EnterBreakpoint(), returned an uninitialized
  address value on empty breakpoint edit control
- bugfix in function OnDrawBreakWnd(), modified implementation and
  fixed background color of highlighted selection

DISASM.C
- bugfix in function disasm_1() and disasm_8(), fixed decoding of
  r=ss, ss=r and rssEX with ss = 5, 6, 7, D, E or F register select

EMU71.C
- changed function OnContextMenu(), when the context menu was
  generated from the keyboard it opened at a fix position, now when
  the mouse cursor position is inside the client window, at the
  mouse cursor position

EMU71.RC
- changed version

FETCH.C
- bugfix in table o81Af2_, o81Af1_ and o81Af0_, replaced o_invalid6
  function pointers by their corresponding opcode function
- bugfix in table o12_, o11_ and o10_, replaced o_invalid3 function
  pointers by their corresponding opcode function

LODEPNG.C
- changed implementation file to LodePNG version 20210627 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2021 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20210627


Emu71 v1.14

EMU71.RC
- changed version and copyright

HPIL.C
- added variable dwHpilConncetTimeout for loading the non-blocked IO
  connect timeout
- changed function CreateHpilThread(), added initialization of
  dwHpilConncetTimeout

HPIL.H
- added dwHpilConncetTimeout variable saving the non-blocked IO connect timeout

HPIL.H
- extern declaration of global variable

TCPIP.C
- added function SetNonBlockedIO() for enable/disable blocked IO
- bugfix in function TcpSendFrame(), new IPv4 only implementation
  fixing host name resolution with a buffer maybe destroyed before
  using and added implementation for non-blocked IO connect
- changed function TcpInit(), added initialization of
  dwConncetTimeout to blocked IO connect

TCPIP.H
- added dwConncetTimeout for non-blocked IO client connect

SETTINGS.C
- changed function ReadSettings() and WriteSettings(), added item
 "ConnectTimeout" in section [HPIL] in the INI-File


Emu71 v1.13

EMU71.DSP
- removed external.c sources

EMU71.H
- removed extern declaration of global functions

EMU71.RC
- changed version

ENGINE.C
- changed function InitAdjustSpeed(), added critical section for
  writing reference CPU cycles and reference time
- bugfix in function AdjKeySpeed() and SetSpeed(), removed critical
  section handling for initializing CPU slow down, because this
  section is locked when the CPU emulation thread already slow down
  the CPU speed

EXTERNAL.C
- file deleted

FETCH.C
- changed table o81B_, removed 1LK7 changes because table has no
  1LK7 related opcodes any more
- changed table o81_, replaced beep patch opcode o81B_ by
  o_invalid3, so table o81B_ isn't used any more

KML.C
- changed function InitKML(), changed warning to error at ROM beep
  patch detection

LODEPNG.C
- changed implementation file to LodePNG version 20201017 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2020 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20201017

MOPS.C
- bugfix in function TAcc(), moved critical section because
  InitAdjustSpeed() part is already protected

OPCODES.C
- removed function o81B0() and o81B1() as part of the beep patch

OPCODES.H
- removed extern declaration of function o81B0() and o81B1()

SOUND.C
- bugfix in function SoundOut(), removed critical section handling
  because InitAdjustSpeed() is already protected


Emu71 v1.12

DISPLAY.C
- changed function UpdateContrast(), UpdateMainDisplay() and
  StartDisplay(), changed call of function UpdateAnnunciators()
  updating all annunciators
- bugfix in function UpdateMainDisplay(), at leaving display blink
  mode the annunciators haven't been updated when the display was in
  off state
- changed function UpdateAnnunciators(), changed function prototype
  with an additional argument to get information which annunciators
  have changed, so only the annunciators which have changed are
  redrawn now

EMU71.C
- changed function OnPaint(), changed call of function
  UpdateAnnunciators() updating all annunciators

EMU71.H
- changed function prototype

EMU71.RC
- changed version and copyright

FILES.C
- changed function OpenDocument(), when KML script file name is
  longer than the file buffer, skip the name heading until the name
  remainder fits into the buffer, this cause a KML script error with
  the selection of a new KML script instead of a general document
  file read error before

ENGINE.C
- changed function WorkerThread(), changed call of function
  UpdateAnnunciators() updating all annunciators

LODEPNG.C
- changed implementation file to LodePNG version 20200306 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2020 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20200306

MOPS.C
- changed function WriteIO(), the annunciator access variable now
  contain bit coded the annunciators which have changed and is the
  argument for the modified UpdateAnnunciators() function


Emu71 v1.11

DEBUGGER.C
- added enum type, static variables and static function prototypes
  for trace implementation
- removed all occurrences of UNREFERENCED_PARAMETER(wParam);
- changed function NotifyDebugger(), added flush trace buffer
- changed function Debugger(), added trace implementation in case
  WM_INITDIALOG, WM_DESTROY and WM_COMMAND
- added functions StartTrace(), StopTrace(), FlushTrace(),
  PrintTrace(), OutTrace(), OnBrowseTraceSettings(),
  TraceSettings(), OnTraceSettings() and OnTraceEnable() for trace
  implementation

DISPLAY.C
- changed function CreateMainBitmap(), changed LoadBitmapFile()
  function call loading a bitmap with realizing a palette
- changed function CreateAnnunBitmap(), changed LoadBitmapFile()
  function call loading a bitmap without realizing a palette

EMU71.C
- added variable bMouseButton saving if mouse button was pressed
  when mouse cursor was inside a virtual button hit area
- removed function OnNcHitTest(), replaced by additional
  OnLButtonDown() implementation
- changed function OnLButtonDown(), added part for windows movement
  when having no title bar prior done over the WM_NCHITTEST message
  handler which caused side effects
- changed function OnLButtonUp() and OnKeyDown(), added reset of
  variable bMouseButton
- changed function MainWndProc(), added WM_ENDSESSION handler for
  document saving, WM_CONTEXTMENU calls the context menu only when
  the right mouse button was not pressed over a virtual button hit
  area before, removed the WM_NCRBUTTONUP case and removed the
  WM_NCHITTEST message handler

EMU71.H
- changed function prototype
- extern declaration of global functions

EMU71.RC
- added dialog IDD_TRACE
- changed menu IDR_DEBUG, added ID_TRACE_SETTINGS and
  ID_TRACE_ENABLE menu items
- changed version and copyright

ENGINE.C
- changed function Debugger(), added function fnOutTrace() call

FILES.C
- added function CheckForBeepPatch() looking for ROM beep patches at
  known positions
- bugfix in function NewDocument(), initialize the ROM fingerprint
  after loading the KML script
- changed function DecodeBmp(), DecodeGif(), DecodePng() and
  LoadBitmapFile(), changed function prototype by adding an argument
  if a palette should realized

KML.C
- bugfix in function ParseLines() and ParseBlocks(), if loading of
  an include file failed the KML script line number at the error
  message was wrong
- changed function InitKML(), added warning for ROM beep patches

LODEPNG.C
- changed implementation file to LodePNG version 20190914 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2019 Lode Vandevenne

LODEPNG.H
- changed header file to LodePNG version 20190914

RESOURCE.H
- added definitions

TCPIP.C
- changed function ThreadTcpIpServer(), first argument of function
  select() wasn't Berkeley sockets compatible but had no influence
  on Windows usage


Emu71 v1.10

DEBUGGER.C
- bugfix in function AddPortChip(), showed wrong HPIL mailbox size,
  bug introduced in v1.09 when saving the internal HPIL CPU state

DISPLAY.C
- added function SetAnnunBitmap(), setting a created annunciator
  bitmap

EMU71.C
- bugfix in function OnViewCopy(), fixed unsynchronized GDI
  operation

EMU71.DSP
- added lodepng.h and lodepng.c sources

EMU71.H
- extern declaration of global function

EMU71.RC
- changed version and copyright

FILES.C
- added function DecodePng() as wrapper for decoding PNG image files
- changed function LoadBitmapFile(), added PNG image file support
- added function EncodeColorBits() returning bitfield position
  encoded color bits
- bugfix in function CreateRgnFromBitmap(), removed GetObject() call
  for getting the image properties, they are get over a GetDIBits()
  query now, removed creating a memory DC because it's unused and
  added bitfield decoding which is important for the 16 bit (5:6:5)
  color setting

HPIL.H
- added wTalkerFrame variable saving the last talker frame
- added bySrqEn variable saving the SRQ acknowledge flag

HPILBUF.C
- bugfix in OutSetFrame(), fixed deadlock by adding a timeout for
  the case not being active talker

HPILCMD.C
- changed function TransmitFrame(), added Remote implementation
  for HP-IL Interface Status Byte as controller and parallel poll
  memory implementation addressing myself
- changed function enter_bytes(), optimized ETO/ETE detection and
  added ETE handling after single data byte and NRD frame
- changed function end_listen(), optimized ETO/ETE detection and
  added ETE return to EOT received status message
- bugfix in function execmd15(), at case 3 "set SOT response" added
  status SRQ acknowledge flag handling and parallel poll SRQ
  handling
- bugfix in function execmd(), at case 1 "frame class" added frame
  type checking when operating as device

HPILDEV.C
- changed function DeviceInit(), changed initialization of device
  ID and added initialization of parallel poll, local mode, last
  talker frame and SRQ acknowledge flag
- bugfix in function class_doe(), as active talker a set SRQ bit in
  the DOE frames wasn't preserved, added talker ETE implementation
  and last received data frame variable must be set as listener
  only, otherwise frames to other listener overwrite this variable
- bugfix in function class_cmd(), added PPE, PPD, PPU and GTL frame
  implementation, changed the REN frame implementation: REN switch
  from 'local mode' to the newly created 'remote enabled mode' and a
  following LAD frame switch from the 'remote enabled' to the
  'remote mode', expanded NRE frame implementation with cleaning up
  the internal state register
- changed function class_rdy(), added last talker frame saving,
  status of SRQ acknowledge flag and expanded SST implementation
  with parallel poll SRQ handling
- bugfix in function DeviceFrame(), added SRQ bit in frame only if
  SRQ is not acknowledged by reading the HP-IL status and added IDY
  implementation for parallel poll

KML.C
- changed function AdjustPixel(), changed function prototype using
  a buffer position instead of device context pixel coordinate to
  locate the adjustable pixel
- changed function TransparentCircle(), complete new implementation
  with changed function prototype; the prior implementation used the
  GetPixel()/SetPixel() method to adjust the pixel color of a single
  pixel, this method was extremely slow on some PC configurations,
  the current method is creating a byte copy of the complete target
  area, does the pixel adjustments on byte level and finally copy
  the result back to the target device context
- changed function DrawButton(), adjusted implementation to new
  prototype of function TransparentCircle()
- bugfix in function DrawAnnunciator(), used wrong device context on
  external annunciator bitmap for getting background pixel color
  (buggy implementation only worked with external bitmaps having a
  white background color)
- changed function ResizeMainBitmap(), added annunciator resize
  handling for annunciator definitions inside main bitmap

LODEPNG.C
- new module for decoding PNG files LodePNG version 20180910 with
  unmarked typecast patches for x64 compatibility, Copyright (c)
  2005-2018 Lode Vandevenne

LODEPNG.H
- header file for decoding PNG files LodePNG version 20180910,
  Copyright (c) 2005-2018 Lode Vandevenne


Emu71 v1.09

DISPLAY.C
- bugfix in function ResizeWindow(), added Critical Section for GDI
  access

EMU71.DSP
- added hpilbuf.c and hpildev.c sources

EMU71.H
- changed window style for disabled title bar, added system menu
  with minimize in task bar
- extern declaration of global variable and functions

EMU71.RC
- changed version and copyright

FILES.C
- changed function NewDocument(), removed SetWindowLocation() call
  in restore case because on a valid document the window position
  was already restored in function RestoreBackup()
- changed function OpenDocument(), skip packed HPIL module data
  check
- added function LoadIconFromFile(), load icon file and activate the
  icons
- added function LoadIconDefault(), activate the window class
  default icons

HPIL.C
- replaced HPILMEM structure variable dwSize by HPILDATA structure
  array size constant byIOMem
- changed access to all variables located in the I/O processor data
  structure now
- added function InitIoMem() for basic initialization of the I/O
  processor memory
- added function ResetHpilData() for resetting the I/O processor
  memory
- changed function CreateHpilThread(), moved initialization of the
  I/O processor memory to function InitIoMem() and removed
  bController setting
- changed function DestroyHpilThread(), cleanup device features
- changed function IoThread(), detect controller mode now over the
  status bit in byIoStatus
- changed function AllocHpilMem(), changed function prototype to be
  able to modify the given module data size and the size of the
  module data array and added initialization logic and saving the
  complete I/O processor data structure now
- bugfix in function UncnfgHpilMem(), changed function prototype
  returning VOID
- bugfix in function DetachHpilMem(), removed searching for the
  hMemModule instance in the module list, from design the module to
  remove must be the one given by the 1st argument and changed
  function prototype removing the 2nd argument hMemModule

HPIL.H
- the I/O processor data is separated into an own structure which is
  part of the module administration structure
- added critical sections
- added I/O processor RAM
- added state variables for working as device
- moved variable byIdySrqPollTimeout to address in I/O processor RAM
- changed variable bAbort to byAbort
- added extern declaration of global functions

HPILBUF.C
- new module with HPIL input and output buffer handling

HPILCMD.C
- changed access to all variables located in the I/O processor data
  structure now
- added critical section around all byIoStatus write access
- replaced all calls of HpilController() with TransmitFrame()
- added function IntrFrame(), helper function to decode interrupt
  cause from frame
- added function TransmitFrame(), added special handling for LAD 00,
  TAD 00, UNL, UNT and SDA frames, send frame over the loop and
  decode controller specific interrupt cause
- changed function sendbytes(), added device mode implementation
- bugfix in function enter_bytes(), IDY frames had been detected as
  an END data frame
- changed function execmd0(), at case 2 "request hpil status" set
  "I/O CPU requires service" bit when in device mode and data is in
  the input buffer and also clear HP-71 NRD bit in mailbox, at case
  3 "end of message" added device mode implementation, at case 6
  "send error msg" also clear HP-71 NRD bit in mailbox, at case 14
  "read my loop address" added device implementation and at case 15
  "take/give loop control" replaced bController variable usage and
  added terminator mode and byCstate settings
- changed function execmd15(), at case 0 "read memory" added a basic
  implementation, at case 3 "set SOT response" added implementation,
  at case 9 "set IDY SRQ poll timeout" replaced variable
  byIdySrqPollTimeout by byRAM[0x64], the address in the I/O
  processor RAM, at case 10 "set up interrupt mask" save the
  interrupt mask value in the I/O processor RAM, at case case 11
  "read interrupt cause" and at case 12 "read DDC frame" added
  implementation
- bugfix in function execmd(), at case 1 "frame class" added device
  mode implementation, at case 2 "(un)address me as TL" fixes in
  address (setting TL) and unaddress (unaddress only with one or
  both of the TL bits set) and added byCstate setting, at case 12
  "pass control", at case 13 "set frame timeout value" and case 14
  "set frame count" added implementation
- changed function reset_mb(), added device specific resets and use
  external function for resetting the I/O processor memory
- added function device_listen(), added listen transfer from input
  buffer to mailbox when configured as device
- changed function ilmailbox(), added device listen transfer
- moved function DeviceFrame() to HPILDEV.C

HPILDEV.C
- new module with HP71 device implementation

KML.C
- added keyword "Opaque" and "Icon" to pLexToken[] table
- changed function InitGlobal(), added implementation of keyword
  "Icon"
- changed function InitAnnunciator(), added implementation of
  keyword "Opaque"
- changed function KillKML(), added LoadIconDefault() to disable
  custom icons
- changed function DrawAnnunciator(), added opaque bitmap drawing
- bugfix in function ResizeMainBitmap(), added Critical Section
  for GDI access and added upscaling feature
- changed function InitKML(), removed main bitmap downscaling
  limitation

KML.H
- added TOK_OPAQUE and TOK_ICON definition
- added bOpaque in KmlAnnunciator structure

MOPS.C
- added global variable HMap for remembering hard configured chips
- changed function MapDDC() and MapROM(), added hard configured chip
  setting
- bugfix in function MapIRam(), map only free memory pages
- changed function Map(), disable hard configured chip settings and
  config ROM modules first
- changed function MountPorts(), adjusted call of function
  AllocHpilMem()
- changed function DismountPorts(), removed memory handle argument
  from pfnDetachMem() call
- bugfix in function Uncnfg(), had only unconfigured first module
  with matching base address, but have to unconfigure all
- changed function UpdateBatState(), changed function prototype
  returning VOID

PORTCFG.C
- changed valid module type list from an array of strings to an
  array of pairs with module type and corresponding string; this
  allows to change order of the list
- new function GetModuleID() returning the module type list entry
  for the given module type
- changed function ShowPortConfig(), adjusted to new module type
  list and added "UNKNOWN" module type message
- changed function OnAddPort(), adjusted to new module type list and
  optimized filename control
- changed function ApplyPort() and PortSettingsProc(), adjusted to
  new module type list

PORTMEM.C
- changed function UncnfgMem(), changed function prototype returning
  VOID

SATMEM.C
- bugfix in function MapSaturnMem(), map only free memory pages
- changed function ConfigSaturnMem(), optimized by using config page
- bugfix in function UncnfgSaturnMem(), changed address page to
  DWORD, increased readability by page of base address calculation,
  had only unconfigured first module with matching base address, but
  have to unconfigure all and changed function prototype returning
  VOID
- bugfix in function DetachSaturnMem(), removed searching for the
  hMemModule instance in the module list, from design the module to
  remove must be the one given by the 1st argument and changed
  function prototype removing the 2nd argument hMemModule

STACK.C
- changed function DspRedraw(), allocate memory for CHIPSET copy
  from heap now to avoid a possible stack overflow
- changed function OnStackPaste(), shrinked display status variable
  to 2 bytes and so the data to transfer

TCPIP.C
- changed function ThreadTcpIpServer(), the response type is now
  dependent on the frame initiator
- changed function TcpInit(), added initialization of variable
  bOriginClient
- changed function HpilController(), added frame initiator control
  handling
- changed function HpilDevice(), changed function prototype and
  added broken loop feature

TCPIP.H
- replaced bController by bOriginClient variable in TCPIP structure
- changed function prototype

TYPES.H
- changed pfnUncnfg function pointer prototype to VOID return
- changed pfnDetachMem function pointer prototype removing
  hMemModule argument


Emu71 v1.08

DEBUGGER.C
- changed function UpdateStackWnd(), OnStackPush() and OnStackPop(),
  fixed signed/unsigned mismatch
- changed function OnUpdate(), added call of UpdateMemMapWnd()
- bugfix in function OnLButtonUp(), fixed a buffer overflow when
  converting a 3 byte hexadecimal string to variable Chipset.out
  which overwrite the content of variable Chipset.in and fixed a
  buffer overflow when converting a 4 byte hexadecimal string to
  variable Chipset.in which overwrite the content of variable
  Chipset.SoftInt
- changed function UpdateProfileWnd(), fixed signed/unsigned
  mismatch and optimized ENG unit search break
- added function GetExpMemCfgTree(), the get expanded or collapsed
  state of all tree nodes
- added function SetExpMemCfgTree(), restore the state of tree the
  nodes
- added function UpdateMemMapWnd(), update memory mapping dialog
  content
- changed function MemMap() and OnMemMap(), switched from modal to
  non modal dialog

DISPLAY.C
- added function CreateAnnunBitmap() and DestroyAnnunBitmap(),
  handle a separate annunciator bitmap
- bugfix in function ResizeWindow(), the WM_PAINT message wasn't
  generated by the InvalidateRect() call when the title and menu bar
  was disabled and the client area was empty, so we got a main
  window with zero size which could not be activated any more ->
  issue solved by forcing a menu bar when client area is empty

EMU71.C
- changed szLicence string, updated to the latest revision of the
  GPLv2
- moved function SetSoundDeviceList() to SNDENUM.C
- changed function WinMain(), added non modal "Memory Mapping"
  dialog box in main message handler

EMU71.DSP
- added snddef.h and sndenum.c sources

EMU71.H
- extern declaration of global variables and functions

EMU71.RC
- changed IDD_SETTINGS, removed text "Device" and enlarged width of
  combo box IDC_SOUND_DEVICE
- changed IDD_CHOOSEKML, enlarged width of dialog to get an enlarged
  "Current KML Script" combo box
- changed IDD_KMLLOG, enlarged width of "Title of the Script", "by"
  and "The Author" text boxes
- changed IDD_DEBUG_MEMMAP, added WS_VISIBLE style
- changed version and copyright

ENGINE.C
- added global variable bBusCfg for signaling if the device
  configuration changed since last debugger update
- added global variable bBusCfgOpc for signaling that current opcode
  will change the device configuration
- changed function Debugger(), added signaling device configuration
  changed

FILES.C
- bugfix in function OpenDocument(), prevent buffer overflow on
  reading pbyPlugData and removed switcher for document format
  version

HPIL.C
- changed function CreateHpilThread(), added initialization of
  byIdySrqPollTimeout
- changed function IoThread(), added the IDY frame polling feature
- added function SReqMem() returning the HP-IL service request state
- changed function ReadIOHpilMem(), removed obsolete remark
- changed function AttachHpilMem(), added initialization of the
  service request function pointer

HPIL.H
- added byIdySrqPollTimeout variable saving the IDY SRQ poll timeout

HPILCMD.C
- changed function SendFrame(), added "SRQ received from loop"
  mailbox bit support
- bugfix in function enter_bytes(), received data frames with set
  SRQ frame bit had been send back to the loop without cleared SRQ
  frame bit
- changed function execmd15(), at case 9 "set IDY SRQ poll timeout"
  added implementation, at case 14 "power up the loop" added
  clearing bus SRQ mailbox bit and disable the IDY polling and at
  case 15 "enable/disable IDY poll" added implementation
- changed function execmd(), at case 1 "frame class" added manual
  mode and "SRQ received from loop" mailbox bit support and at case
  3 "power down the loop" added clearing the SRQ bits in the mailbox
  and clearing the IDY polling status bit
- changed function reset_mb(), added initialization of
  byIdySrqPollTimeout and removed switching to state MBIDLE to avoid
  executing reset_mb() more than one time

KML.C
- added keyword "Scale" to pLexToken[] table
- changed function InitGlobal(), added implementation of keyword
  "Scale"
- changed function InitLcd(), added implementation of keyword
  "Bitmap"
- changed function KillKML(), added DestroyAnnunBitmap() and preset
  of some global variables
- changed function iSqrt(), changed implementation to Heron's method
  for speed optimization
- changed function DrawAnnunciator(), added alternative annunciator
  bitmap
- added function ResizeMainBitmap(), resize main bitmap and main
  bitmap dependend variables like size, offset, ...
- changed function InitKML(), added downscaling main bitmap

KML.H
- added TOK_SCALE definition

MOPS.C
- bugfix in function MapROM(), map ROM only if loaded and masking
  the ROM size with 0xFFFFF is not necessary
- changed function DismountPorts(), optimized setting of detached
  marker
- bugfix in function Uncnfg(), modules on the ports 1-5 were only
  unconfigured when the corresponding DAISYIN line had been high
- changed function C_Eq_Id(), loop optimization scanning for ID in
  attached port
- added function SREQ(), general function to capture the service
  requests from the modules (this function was necessary to
  synchronize the main CPU with the HP-IL I/O CPU)
- changed function NreadEx(), removed conditional jump for speed
  optimization

OPCODES.C
- changed function o80E(), added some remarks and replaced direct
  loading of the service request BUS content by a function call for
  CPU synchronization

PORTMEM.C
- added function SReqMem() as empty function for service request
- changed function AllocPortMem(), added initialization of service
  request function pointer

SNDDEF.H
- include files and interface definitions for SNDENUM.C for
  compilers without installed DirectX SDK

SNDENUM.C
- new module with implementation of function SetSoundDeviceList()
  prior located in EMU48.C for sound device enumeration showing the
  full device name used since Windows Vista

TYPES.H
- added service request function pointer in PORTACC structure


Emu71 v1.07

DEBUGGER.C
- bugfix in function OnContextMenu(), when the context menu was
  generated from the keyboard it was opened at the wrong position
- bugfix in function Debugger(), use critical section for secure
  deletion of the last instruction buffer
- bugfix in function ShowMemCfgTree(), used interface port list as
  counter for enumbering the loaded port list (it doesn't matter
  here because both arrays have had the same number of elements)

DISPLAY.C
- changed function CreateMainBitmap(), removed unreferenced variable
  in release mode
- changed function WritePixelDWORD() and WritePixelWORD(), changed
  order of operands to enable constant folding of compiler
- changed function ResizeWindow(), optimized implementation now
  works independent from window style and menu bar setting

EMU71.C
- added global variable dwTColor and dwTColorTol for the background
  transparency color matching
- added global variable hRgn to hold a region resource handle for
  a transparent background bitmap
- added global variables bTitleBar, bShowTitle, bShowMenu and
  bClientWinMove
- added Critical Section initialization
- added function UpdateWindowBars(), helper function to update state
  of title and menu bar
- changed function SettingsProc(), added "Show Title" and
  "Show Menu" checkbox handling
- changed function OnPaint(), added UpdateWindowBars() call
- changed function OnInitMenu(), added MRU list update
- added function OnContextMenu(), context menu implementation
- added function OnNcHitTest(), when no title bar check if mouse
  position is in client not over a button area
- changed function MainWndProc(), minor change in WM_PALETTECHANGED
  implementation and added WM_CONTEXTMENU, WM_NCRBUTTONUP and
  WM_NCHITTEST message handler
- changed function WinMain(), changed method of memory leak
  detection by adding _CrtSetDbgFlag() at begin and removing
  _CrtDumpMemoryLeaks() at end of program

EMU71.H
- added window styles definition
- added IRAM macro for linear address access to the 1LF3 RAM part
- changed function prototypes
- extern declaration of global variables and function

EMU71.RC
- changed IDD_SETTINGS, added "Show Title" and "Show Menu" checkbox
- added menu IDM_MENU
- changed version and copyright

ENGINE.C
- bugfix in function SaveInstrAddr(), added critical section to be
  sure that last instruction buffer is still available

FETCH.C
- added typecast to all pLnk entries for compatibility with C++
  compiling on GCC 4.8.1

FILES.C
- defined abs() and labs() as intrinsic
- changed function ResetDocument(), init the external port interface
  after dismounting the ports is obsolete, because dismount ports
  already cleared the external port interface; the problem may occur
  before, if the external port interface isn't initialized with NULL
  pointers the function DismountPorts() fail and may corrupt memory!
- changed function SaveBackup(), changed local variable type of
  source structure from PPORTDATA *ppsData to PPORTDATA psData and
  made sure that all source data refer to psData and not to
  ppsDataBackup, even if the target variable already contain the
  necessary data
- changed function RestoreBackup(), changed local variable type of
  source structure from PPORTDATA *ppsDataBackup to PPORTDATA
  psDataBackup and made sure that all source data refer to
  psDataBackup and not to ppsData, even if the target variable
  already contain the necessary data
- changed function DecodeGif(), changed function prototype by adding
  an argument overwritten by the transparent color if found
- changed function LoadBitmapFile(), adjusted to new prototype of
  function DecodeGif()
- added function AbsColorCmp() and LabColorCmp(), compare colors
  with tolerance
- added function CreateRgnFromBitmap(), create opaque bitmap region

HPIL.C
- added variable bEnableRFC to enable the RFC frame following each
  CMD frame
- changed function CreateHpilThread(), added reinitialization of
  DISPLAY IS setting, added initialization of bEnableRFC, bAbort,
  bySleep, byEndchar, byManual, byMsgCount and byPowered variable,
  cleared "System Controller" and set "Address Table is not valid"
  bit in the I/O Processor Status initialization, removed some
  double variable initializations and changed info message when
  server start fail
- changed function IoThread(), removed initialization of virtual IL,
  set sleep state of the I/O CPU and adjusted ilmailbox() call to
  the new function prototype
- bugfix in function ReadIOHpilMem(), update I/O memory only when
  reading the I/O Low handshake nibble, added the sleep state of the
  I/O CPU to the mailbox and fixed bug clearing the I/O CPU Message
  Available bit in the I/O CPU Low Handshake Nibble
- changed function AttachHpilMem(), added error handling for
  hMemModule is NULL

HPIL.H
- added bEnableRFC variable adding RFC frames, added bAbort variable
  for abort operation because of fatal error, added bySleep variable
  holding the sleep state of the I/O CPU, added byPowered variable
  holding the power state of the loop, added byMsgCount variable for
  returning more than one message by a mailbox command and added
  byManual holding the manual state of the I/O CPU to the HPILMEM
  structure
- added extern declaration of global variable
- removed extern declaration of global functions

HPILCMD.C
- replaced all calls of HpilController() with SendFrame()
- in functions writing to the I/O CPU Low Handshake Nibble fixed
  clearing all bits instead of the sleep flag and the I/O CPU
  Message Available bit only
- in functions writing to the I/O CPU High Handshake Nibble fixed
  clearing all bits instead of the three data bytes and error
  occurred bit only
- in functions loading the mailbox register nibble 12 with the
  status register 2 removed the explicit setting of bit 0
- removed function init_hpil() and hpil_ctrl()
- added function SendFrame(), sending a frame over the loop, check
  if CMD frames aren't modified and append the RFC behind a CMD
  frame
- bugfix in function autoaddrloop(), fixed an endless loop in the
  "auto extended addressing" implementation when the number of "auto
  extended addressing" devices was a multiple of 31, also fixed a
  wrong byAAD content when only "auto extended addressing" devices
  are in the loop and also implemented the status bit "Address Table
  is not valid"
- changed function incr_addr(), because of bugfix in function
  autoaddrloop() byAEP and byAAD has to be checked for last address
- bugfix in function enter_bytes(), a dwMaxCount value of 0xFFFFF
  wasn't interpreted as "is termed infinity"
- changed function end_listen(), minor code size optimizations
- bugfix in function do_listen(), at case 1 "received 1 bytes" the
  "Error Occurred" bit in the I/O CPU High Handshake Nibble was set
- changed function findndevice(), added exits for aborting frame
  sequence
- bugfix in function execmd0(), at case 1 "read address table" the
  "Three Data Bytes" bit in the I/O CPU High Handshake Nibble wasn't
  set, at case 2 "request hpil status" clearing the "requires
  service" bit is only allowed when "C" bit is set, at case 3 "end
  of message" added implementation, at case 8 "go into manual mode"
  and case 9 "go into auto mode" added rudimentary manual state
  support, at case 10 "update system controller bit" added
  implementation, at case 12 "read current address" and case 13
  "increment current address" the message nibble 13 was wrong in
  "auto extended addressing" mode, the nibbles 14 and 15 aren't
  updated by the I/O CPU and also at case 13 the error bit hasn't to
  be set when sending the status message, at case "read my loop
  address" the nibbles 14 and 15 aren't updated by the I/O CPU, at
  case 15 "take/give loop control" the "L" bit wasn't checked and so
  a requested CMD frame wasn't send, also fixed overwriting the "C"
  bit of the status register
- changed function execmd15(), at case 0 "read memory" and case 1
  "write memory" added TRACE comments, at case 2 "self test" added
  implementation, at case 4 "set terminator mode" optimized
  implementation, at case 14 "power up the loop" added setting the
  power state of the loop, if the loop is powered don't send the NOP
  frame any more and at a broken loop the mailbox message available
  flag isn't set any more
- bugfix in function execmd(), at case 1 "frame class" the message
  nibbles 12 and 13 had been wrong, the nibbles 14 and 15 aren't
  updated by the I/O CPU, at case 3 "power down the loop" added a
  primitive implementation of the command, at case 6 "find Nth
  device, type M" and case 7 "auto address the loop" the message
  nibble 13 was wrong in "auto extended addressing" mode, the
  nibbles 14 and 15 aren't updated by the I/O CPU, at case 6 the
  error code in the status register and the error bit hasn't been
  set, but the message nibbles 14 and 15 are set to error code 1
  when sending the status message, at case 7 both I/O CPU Handshake
  Nibbles had been undefined
- changed function reset_mb(), cleared "System Controller" bit in
  the I/O Processor Status, removed auto addressing the loop, added
  reset of manual state, added reset for mailbox command returning
  one message and added state setting
- changed function ilmailbox(), changed function prototype by
  removing the mailbox message data because the pointer to the
  message data is part of the mailbox data set and added support for
  mailbox commands returning more than one message

KML.C
- added keyword "SysItem" to pLexToken[] table
- changed function InitGlobal(), added implementation of keyword
  "Color"
- changed function RunLine(), added implementation of keyword
  "SysItem"
- changed function KillKML(), added reset of variables hRgn,
  dwTColor and dwTColorTol
- added function MouseIsButton() to check if mouse over button area
- changed function MouseMovesTo(), changed _ASSERT implementation to
  make sure that class cursor is NULL and use function
  MouseIsButton() to select cursor type now

KML.H
- added TOK_SYSITEM definition
- changed structure KmlToken, replaced TCHAR array szName[20] with
  LPCTSTR szName pointer
- added MouseIsButton() function prototype

MOPS.C
- made variable psExtPorts[] static, this make also sure that the
  variable is initialized with 0
- bugfix in function MapROM(), make sure that ROM address space is
  disabled for writing
- changed function ReadIO() and WriteIO(), optimized default case

MRU.C
- changed all function argument types from INT to UINT
- removed global variables hMruMenu and nMruPos
- removed all update menu calls in this module and made functions
  robust against non initialized MRU list and ID index out of range
- changed function GetMenuPosForId(), changed function prototype so
  the resulting menu handle and menu position aren't global
  variables any more
- changed function MruInit(), changed return value from FALSE to
  TRUE for success and changed implementation like used in the PPC
  emulator variants
- changed function MruUpdateMenu(), changed function prototype by
  adding the HMENU argument for updating the selected menu and added
  initialization prior done in function MruInit()
- changed function MruWriteList(), if there are no entries don't
  write the "FileCount" setting any more

PCH.H
- added GCLP_HCURSOR, SetClassLongPtr, GetClassLongPtr and ULONG_PTR
  definitions for MSVC6.0 SDK and earlier

PORTCFG.C
- changed function OnAddPort(), removed disabling the no. of chips
  combobox at HP-IL module type
- changed function PortSettingsProc(), renamed variable ppsCfgIns to
  psCfgIns and changed the "Add" button default configuration from a
  4KB to a 32KB RAM module

RESOURCE.H
- added definitions

SATMEM.C
- changed function AllocSaturnMem(), not necessary to clear the
  allocated memory
- changed function AttachSaturnMem(), added error handling for
  hMemModule is NULL

SETTINGS.C
- changed function ReadSettings() and WriteSettings(), added item
  "ShowTitle", "ShowMenu" and "ClientWinMove" in section [Emulator]
  and item "EnableRFC" in section [HPIL] in the INI-File

SYMBFILE.C
- changed function RplLoadTable(), made optimizations and added
  integrity checks

TCPIP.C
- changed function TcpCreateSvr(), changed WSADATA variable storage
  location from instance static to local

TCPIP.H
- removed wsd variable from TCPIP structure

TIMER.C
- changed function SetHPTime(), use the IRAM macro to update the
  NXTIRQ memory content now
- changed function StopTimers(), removed VERIFY at waiting for timer
  function finished because at program debugging the timer may
  already elapsed and so WAIT_OBJECT_0 never occur any more


Emu71 v1.06

DEBUGGER.C
- removed INSTRSIZE definition
- changed function GetAddr(), made function more general by adding
  address range check and the ability of decoding a symbolic entry
  into an address
- changed function ViewCodeWnd(), removed remainder of PCO
  detection
- changed function Debugger(), removed initialization of global
  variable wInstrSize
- changed function EnterAddr(), changed parameter storage from
  static variable to window user data and replaced address decoder
  code by GetAddr() function call
- changed function EnterBreakpoint(), replaced address decoder code
  by GetAddr() function call and so added decoding a symbolic entry
  into an address
- changed function AddPortChip(), removed TYPE_EMPTY case because
  it's only used as end marker and not as valid module
- bugfix in function LoadMemData(), forgot to check if file content
  fit into Saturn address range, loading now stops also after last
  Saturn address written
- changed function SaveMemData(), added assertion for Saturn address
  verification
- bugfix in function DebugMemLoad() and DebugMemSave(), adjusted to
  new prototype of function GetAddr() and so added checking if the
  given addresses are in the Saturn address range because Saturn
  read/write functions don't do the range check; this also cause a
  change in behavior, on empty address fields the operation fails
  and the dialog still remains open

DISPLAY.C
- changed function UpdateContrast(), replaced BitBlt() by PatBlt()
  function call
- changed function CreateLcdBitmap(), added implementation to select
  the pixel drawing routine over function pointer, Zoom factors 1-4
  still using the old implementation, greater Zoom factors are using
  a more generic approach
- changed DestroyLcdBitmap(), added reset of variables x-zoom factor
  and function pointer WritePixel
- replaced function WritePixelQuad() by the new functions
  WritePixelZoom4(), WritePixelZoom3(), WritePixelZoom2() and
  WritePixelZoom1() and WritePixelDWORD(), WritePixelWORD() and
  WritePixelBYTE() with new implementation to support nLcdZoom
  values > 4
- added function WriteDisplayCol() for writing a display column
- bugfix in function UpdateMainDisplay(), removed zoom factor
  assertion, handle blink mode only if display is on, fixed a off by
  one synchronization problem in blink mode, redraw annunciators
  only on change of blink state to avoid annunciator symbols
  flickering and simplified writing of the display area
- changed function UpdateAnnunciators(), minor size optimization
  with better readability
- changed function StartDisplay(), added reset of blink counter
- bugfix in function StopDisplay(), restoring the LCD background
  wasn't locked against GUI thread GDI access

EMU71.C
- changed function SetSoundDeviceList(), replaced "Standard Audio"
  device ID from constant to definition
- bugfix in function SettingsProc(), restart the sound engine by
  calling the clean up and initialization functions now
- changed function OnFileNew(), removed call of function
  SaveBackup() which is already a part of function NewDocument()
- changed function OnFileNew(), OnFileOpen(), OnFileMruOpen(),
  OnFileSave(), OnFileSaveAs() and OnFileClose(), switched detection
  of document is available from variable pbyRom (ROM image loaded)
  to variable bDocumentAvail
- changed function OnViewCopy(), removed nLcdZoom assertion
- changed function WinMain(), added sound engine initialization and
  clean up

EMU71.DSP
- added portmem.c sources

EMU71.H
- changed function prototype

EMU71.RC
- changed version and copyright

ENGINE.C
- initialized variable wInstrSize with size of last instruction
  array (the circular buffer can hold (wInstrSize-1) instructions)
- bugfix in function WorkerThread(), moved sound engine
  initialization and clean up from SM_RUN state to main function,
  this prevents a non responding Saturn CPU emulation when changing
  from SM_SLEEP to SM_RUN state during sound engine initialization

FETCH.C
- made typedef of jump table struct constant, so the const keyword
  was removed from all references of JMPTAB
- changed function EvalOpcode(), minor code optimization

FILES.C
- changed function MapFile(), added check of file size and added
  64bit qualifier for packed image mask constant
- bugfix in function PatchRom(), removed limitation that patch file
  must have 6 characters minimum, fixed a buffer overflow when end
  of patch file consists of white space characters, recalculate
  checksums only on address patch written and return failture on
  syntax errors now
- changed argument type of function ResetPortModule() from PPORTDATA
  *ppsData to PPORTDATA psData
- changed function ResetPortData(), adjusted to new prototype of
  function ResetPortModule()
- changed function OpenDocument() and SaveDocument(), removed
  TYPE_EMPTY from module type switcher

HPIL.C
- changed function AllocHpilMem(), changed function prototype
  returning a HANDLE type
- deleted function FreeHpilMem()
- changed function DetachHpilMem(), made function static, added
  freeing the memory of the module instance and changed function
  prototype by changing 2nd argument type from PHPILMEM to HANDLE
- changed function AttachHpilMem(), changed method of memory
  allocation for the port interface, added setting the destructor
  function pointer, added freeing memory of module instance in error
  case, changed function prototype by returning a success flag and
  changing 2nd argument type from PHPILMEM to HANDLE

HPIL.H
- changed function AllocHpilMem(), AttachHpilMem() and
  DetachHpilMem(), changed function prototypes from PHPILMEM to
  HANDLE
- deleted prototype of function FreeHpilMem() and DetachHpilMem()

HPILCMD.C
- used incompatible GCC #else and #endif extention
- changed function init_hpil(), init the loop only when controller

KML.C
- changed function InitLcd(), removed Zoom factor 4 limitation

MOPS.C
- changed function MapDDC(), wrong position of close bracket inside
  end of IORAM mapping calculation caused a GCC warning
- changed function Map(), Config(), Uncnfg(), Reset(), C_Eq_Id() and
  GetPortModule(), removed module function pointer check because
  the function pointers are loaded now with default handlers
- changed function Config() and Uncnfg(), removed WORD cast when
  calling the Map() function
- changed function MountPorts(), adjusted to new interfaces of
  AllocSaturnMem(), AttachSaturnMem(), AllocHpilMem() and
  AttachHpilMem() and removed TYPE_EMPTY case as module type
- changed function DismountPorts(), new implementation using the
  generic port detach function
- changed function NreadEx() and Nwrite(), changed position of
  'eChip = NONE' setting to avoid GCC warning
- changed function UpdateSreq(), replaced binary with boolean OR
  operator with BOOL data type as 1st operand
- bugfix in function WriteIO(), annunciators must be redrawn when
  changing the DON bit or clearing the DBLINK bit in the DDCTL
  (0xFF) register of the master chip

PCH.H
- added MSVC6.0 compatible 64bit constant qualifier macro

PORTCFG.C
- changed function SaveCurrPortConfig(), adjusted to new prototype
  of function ResetPortModule()
- changed function GetOpenImageFile() and GetSaveImageFile(), merged
  dialog flags to one constant
- changed function PortSettingsProc(), removed remaining code of an
  early beta version

RESOURCE.H
- removed IDD_RPLVIEW and IDC_CFG_SELHPIL

SATMEM.C
- added SATMEM structure from file SATMEM.H
- changed function AllocSaturnMem(), changed function prototype
  returning a HANDLE type
- deleted function FreeSaturnMem()
- changed function ConfigSaturnMem() and UncnfgSaturnMem(), removed
  WORD cast when calling the Map() function
- changed function DetachSaturnMem(), made function static, added
  freeing the memory of the module instance and changed function
  prototype by changing 2nd argument type from PSATMEM to HANDLE
- changed function AttachSaturnMem(), changed method of memory
  allocation for the port interface, added memory allocation check,
  added setting the destructor function pointer, added freeing
  memory of module instance in error case, changed function
  prototype by returning a success flag and changing 2nd argument
  type from PSATMEM to HANDLE

SATMEM.H
- moved SATMEM structure to file SATMEM.C
- changed function AllocSaturnMem(), AttachSaturnMem() and
  DetachSaturnMem(), changed function prototypes from PSATMEM to
  HANDLE
- deleted prototype of function FreeSaturnMem() and
  DetachSaturnMem()

SETTINGS.C
- changed function ReadSettings() and WriteSettings(), added item
  "LastInstrBufSize" in section [Debugger] in the INI-File

SOUND.C
- bugfix in function DestroyWaveThread(), the WM_QUIT message may
  failed and so the sound message thread wasn't shut down
- changed function SoundOpen(), added additional check if the sound
  device support the necessary audio format

TCPIP.C
- changed function ThreadTcpIpServer(), removed unused peer socket
  information and added a security check to prevent a buffer
  overflow
- changed function StartServer(), updated IPv6_DUAL implementation
  to last reference implementation with more checks and removed
  usage of function GetVersionEx() to set the IPV6_V6ONLY option

TIMER.C
- removed AUTO_OFF, UNIX_0_TIME, OFF_TIME and ALRM4 definition
- removed unused uTMaxTicks global variable

TYPES.H
- added destructor function pointer in PORTACC structure


Emu71 v1.05

DEBUGGER.C
- bugfix in function OnSetCursor(), on "Activation follows mouse"
  enabled child dialogs lost focus when cursor moved over parent
  debugger dialog

EMU71.C
- bugfix in function SettingsProc(), on "Activation follows mouse"
  enabled debugger dialog maybe get focus even if it's not the last
  active one
- bugfix in function OnViewScript(), ROM image change wasn't handled

EMU71.H
- extern declaration of global functions
- removed extern declaration of global variable
- changed function prototype

EMU71.RC
- changed version

EXTERNAL.C
- removed global variable bWaveBeep
- removed functions BeepWave(), BeepWin9x() and Beeper()
- changed function External0() and External1(), removed maximum
  frequency limitation and removed PC speaker support and used
  function SoundBeep() instead of Beeper() for beep output over
  sound card

FILES.C
- added function CalcWarmstart(), if calculator ROM enabled do a
  warmstart else a coldstart
- changed function OpenDocument(), use function CalcWarmstart() on
  ROM change detection now and adjusted to new prototype of function
  GetOpenImageFile()

HPIL.C
- adjusted byCurrentAddr variable name

HPIL.H
- renamed variable byNoDev to byAAD and added the variables byAEP
  and byAES to hold the last addresses of the "auto extended
  addressing" method
- changed variable type of byCurrentAddr from BYTE to WORD to hold
  the 10 bits of an extended HP-IL address

HPILCMD.C
- bugfix in function init_hpil(), incomplete initialization on
  broken HP-IL loop
- added function autoaddrloop() for initializing the loop with
  auto-address (AAD) or auto-extended address (AES, AEP, AAD) method
- added function incr_addr() to increment HP-IL address to next
  device
- changed function findndevice(), execmd0() and execmd(), added
  auto-extended addressing method
- bugfix in function DeviceFrame(), device address 30 wasn't allowed

MOPS.C
- changed function MountPorts() and DismountPorts(), changed local
  variable type of source structure from PPORTDATA *ppsData to
  PPORTDATA psData

PCH.H
- added GWLP_USERDATA, SetWindowLongPtr, GetWindowLongPtr and
  LONG_PTR definitions for MSVC6.0 SDK and earlier

PORTCFG.C
- changed function LoadCurrPortConfig(), changed local variable type
  of source structure from PPORTDATA *ppsData to PPORTDATA psData
- changed function SaveCurrPortConfig(), changed local variable type
  of source structure from PPORTCFG *ppsCfg to PPORTCFG psCfg
- changed function ShowPortConfig(), minor optimization with UNICODE
  handling
- changed function OnAddPort() and ApplyPort(), changed local
  variable type from PPORTCFG *ppsCfg to PPORTCFG psCfg
- changed function GetOpenImageFile(), GetSaveImageFile() and
  OnEditTcpIpSettings(), added function argument to define the
  parent window for the called dialog
- bugfix in function OnBrowse(), OnPortCfgDataLoad(),
  OnPortCfgDataSave(), OnPortCfgTcpIpSettings() and
  PortSettingsProc(), adjusted to the new function prototypes above
  by adding the actual dialog handle as parent window to fix the
  possibility of opening a 2nd instance of the child window
- changed function TcpIpSettingsProc() and OnEditTcpIpSettings(),
  changed parameter type from PPORTCFG *ppsCfg to PPORTCFG psCfg and
  parameter storage from static variable to window user data

SETTINGS.C
- changed function ReadSettings() and WriteSettings(), deleted item
  "WaveBeep" in section [Emulator] in the INI-File

SOUND.C
- changed function GetSoundBuf() and SoundOpen(), eliminate GCC
  warning
- added function SoundBeep(), simple beeper function with frequency
  and duration argument as replacement for the BeepWave() function

TIMER.C
- changed function TimeProc(), Critical Section for reading the
  original timer MSB content isn't necessary


Emu71 v1.04

DEBUGGER.C
- changed function UpdateProfileWnd(), changed CPU frequency from
  640000 constant to calculated one from T2CYCLES

EMU71.C
- replaced global variable ThreadId with local variable dwThreadId
- added global variable with the identifier for the waveform-audio
  output device
- added function SetSoundDeviceList(), helper function for filling
  sound device combo box with waveform-audio output devices
- changed function SettingsProc(), removed sound radio button
  handlers and added implementation of sound device combo box

EMU71.DSP
- added sound.c sources

EMU71.H
- extern declaration of global variables and functions

EMU71.RC
- changed IDD_SETTINGS, removed "Speaker" and "Wave" radio buttons
  and added "Device" combo box in the sound section
- changed version

ENGINE.C
- added global variable bEnableSlow for global disabling slowing
  down the CPU
- added global variable bSoundSlow slowing down the CPU core at
  sound output
- added global variable nOpcSlow to hold the number of CPU opcodes
  slowing down the CPU core
- changed function AdjustSpeed(), added sound and CPU opcode slow
  down implementation
- added function InitAdjustSpeed(), initialize sound and CPU slow
  down part if necessary
- changed function AdjKeySpeed() and SetSpeed(), use function
  InitAdjustSpeed() to initialize the CPU slow down variables
- changed function WorkerThread(), added sound engine control

EXTERNAL.C
- changed PCM sampling frequency and definition name
- moved global variable dwWaveVol to module sound.c
- bugfix in function BeepWave(), eliminated DC offset from waveform,
  use global waveform-audio output device identifier for opening and
  made a more general initialization of the waveform-audio output
  device
- added function GetFlag() returning the state of the given system
  flag
- bugfix function External1(), beeper was always enabled even if the
  frequency value was 0 Hz or the beeper flag -2 was set (BEEP OFF)

KML.C
- bugfix in function KillKML(), key mapping state table wasn't
  cleared at the end

MOPS.C
- added function TAcc(), checking timer access for CPU speed
  measurement behaviour
- changed function ReadIO(), the timer2 LSB register access is now
  monitored to analyze the read access scheme

OPCODES.C
- changed function o801(), call beeper handler function on beeper
  port change

RESOURCE.H
- added definition
- removed IDC_SOUND_SPEAKER and IDC_SOUND_WAVE

SETTINGS.C
- changed function ReadSettings() and WriteSettings(), added item
  "WaveDeviceId" and "WaveTime" in section [Emulator] in the
  INI-File

SOUND.C
- new module for native beeper emulation over wave output device


Emu71 v1.03

DEBUGGER.C
- prepared for C++ compiling
- changed function OnFindOK(), added downwards search direction
- changed function Find(), added and changed message handler for the
  "Previous" and "Next" buttons

EMU71.C
- prepared for C++ compiling
- added function OnCopyData() as WM_COPYDATA message handler
  implementation for changing the state file to the given state file
  name
- changed function MainWndProc(), added WM_COPYDATA message handler
- changed function WinMain(), expanded single instance case by
  transmitting the given state file name to the already opened
  program instance

EMU71.H
- added WM_COPYDATA identifier definition

EMU71.RC
- changed IDD_FIND, added a "Previous" button for previous search,
  shorten the text of the "Find Next" button to "Next" and changed
  the ID of the next search button
- changed version and copyright

FETCH.C
- prepared for C++ compiling

FILES.C
- prepared for C++ compiling
- bugfix in function MapFile(), minimum checked file size was
  smaller than the initial read size for packed image file check and
  changed allocation method for image file buffer, don't need an 0
  initialized buffer
- changed function SaveBackup(), improved document available
  detection

HPIL.C
- prepared for C++ compiling

KML.C
- prepared for C++ compiling
- added global variable wKeybLocId to hold the keyboard layout input
  locale at begin of KML loading
- bugfix in function ParseLines(), return a TOK_NONE line for an
  empty block instead of a NULL pointer which regular stands for a
  syntax error
- changed function ParseBlocks(), use variable wKeybLocId instead
  of input locale reading
- changed function KillKML(), added reset of variable wKeybLocId
- changed function ReleaseButton(), for speed optimization skip
  function if button is already released
- bugfix in function InitKML(), changed implementation by reading
  the current keyboard layout and convert the layout data to the
  input locale setting

PCH.H
- added include malloc.h

PORTCFG.C
- bugfix in function ApplyPort(), fixed unsecured access reading the
  independent RAM signature of a RAM data file, at TYPE_ROM modules
  the check if the overall module size is a multiple of the single
  chip size wasn't working properly, made code optimization at
  TYPE_ROM file loading and improved the check if the single chip
  has a power of 2 size
- bugfix in function OnContextMenu(), fixed unsecured access reading
  the independent RAM signature of a RAM data file

RESOURCE.H
- added definitions

SETTINGS.C
- bugfix in function GetRegistryString(), ignored target buffer size
  when copying the default to the target string buffer

STACK.C
- prepared for C++ compiling

SYMBFILE.C
- prepared for C++ compiling


Emu71 v1.02

DEBUGGER.C
- removed variables pbyMapData and dwMapDataSize, the implementation
  behind moved to module DISMEM.C
- changed function SetMappingMenu(), ViewMemWnd() and OnFindOK(),
  changed to DISMEM.C implementation
- changed function GetMemCurAddr(), OnMemGoAdr(), OnKeyUpDown() and
  OnKeyPlusMinus(), variable dwMapDataSize isn't global any more,
  use function GetMemDataMask() instead
- changed function ViewCodeWnd(), set disassembler to memory mapped
  mode
- bugfix in function OnDblClick(), fixed buffer overflow when
  converting a 2 byte hexadecimal string to a byte and added an
  update of code window

DISASM.C
- changed function read_nibble(), call function GetMemNib() from the
  new module DISMEM.C for mapping mode memory access and made
  function static

DISMEM.C
- new module for accessing memory data for debug view purpose

DISPLAY.C
- initialize hBrush variable
- bugfix in function UpdateContrast(), delete brush only if exists
  and create new brush only for an initialized KML contrast palette
  entry
- bugfix in function CreateLcdBitmap(), preset KML contrast palette
  with black on background for the case of a complete uninitialized
  KML contrast palette and display pattern brush initialization may
  failed because of an uninitialized KML contrast palette -> brush
  now created in function UpdateContrast()
- changed function DestroyLcdBitmap(), reset hBrush after deleting
- changed function UpdateMainDisplay(), exchanged StretchBlt() back
  to BitBlt() because the bug in the WineHQ BitBlt() implementation
  was fixed in Wine 1.4

EMU71.C
- changed function OnPaint(), exchanged StretchBlt() back to
  BitBlt() in display redraw part because the bug in the WineHQ
  BitBlt() implementation was fixed in Wine 1.4
- changed function WinMain(), added more flexible CPU binding for
  the Saturn core emulation thread on Windows NT4.0 and later

EMU71.DSP
- added dismem.c sources

EMU71.H
- added enum MEM_MAPPING
- extern declaration of global functions
- removed extern declaration of global variable

EMU71.RC
- changed version

FILES.C
- bugfix in function DecodeBmp() and DecodeGif(), a 2nd bitmap load
  allocated and bound a 2nd palette to the main window, now only the
  1st bitmap (mostly the KML background bitmap) bound his palette to
  the main window

HPILCMD.C
- bugfix in function findndevice(), if a HP-IL device reply with a
  accessory ID to a SAI frame, the controller has to send back the
  accessory ID to get the ETO frame from the device

KML.C
- added global variable bLocaleInc for checking if locale block
  content already included
- added keyword "Locale" to pLexToken[] and token TOK_LOCALE to
  eIsGlobalBlock[] table
- changed function ParseString(), added decoding the \\ sequence as
  single '\' character
- changed function ParseLine() and ParseBlock(), preset szLexString
  variable with NULL after freeing
- changed function IncludeLines() and IncludeBlocks(), changed
  function prototype by adding a boolean argument for selecting the
  text message "Including" or "Parsing" in the log file
- bugfix in function ParseLines() and ParseBlocks(), changed
  function prototype by adding a boolean argument for selecting the
  mode "include" or "parse" for the next lines or blocks and
  verifying the "Include" argument was incomplete and may caused
  memory leaks at error condition
- bugfix in function ParseBlock(), verifying the block commmand
  argument was incomplete and may caused a memory leak at error
  condition
- changed function ParseBlocks(), changed function prototype by
  adding a boolean argument if an "End" token is also valid and
  added implementation of block "Locale"
- changed function KillKML(), added reset of variable bLocaleInc
- bugfix in function ReloadButtons(), ON key button wasn't handled
- bugfix in function LoadKMLGlobal(), fixed a memory leak caused by
  the error condition that expected block command is a string
- changed function InitKML(), added current keyboard input locale
  setting log file text

KML.H
- added TOK_LOCALE definition

TCPIP.C
- enable IPv6_DUAL definition on VS2005 and later

TIMER.C
- changed function SetHPTime(), time calculation now work properly
  for host system dates before 1970/01/01 and after 2106/02/07


Emu71 v1.01

DEBUGGER.C
- changed function ViewMemWnd(), removed initialized but unused
  variable

EMU42.ICO
- added renamed icon of v1.00

EMU71.C
- changed function SettingsProc(), added "Single Instance" checkbox
  handling
- changed function SaveChanges(), detect if document is available
  now over the variable bDocumentAvail and not over the variable
  pbyRom any more; in the case of an illegal KML script there maybe
  a document loaded, but no ROM image, so pbyRom will be NULL in
  this case
- bugfix in function OnViewScript(), when quitted the dialog "Choose
  Your KML Script" with the Cancel button when chosen an invalid
  script the function returned without the possibility of saving the
  current document; now the function try to reload the primarily KML
  script and if this also fails then the current document is saved
- changed function Disasm(), changed to DISMEM.C implementation
- changed function WinMain(), replaced multiple class name usage
  with atom variable, moved read settings before window creation,
  and added check for setting "SingleInstance" to switch to an
  already running program instance instead of creating a new one

EMU71.H
- extern declaration of global variables

EMU71.ICO
- new icon made by Pastor Jack

EMU71.RC
- adjusted IDD_ABOUT dialog to new Emu71 icon
- added item "Single Instance" in settings dialog
- added new Emu71 main icon, but remain prior icon with new name
  inside
- changed version and copyright

FILES.C
- changed function CrcRom(), if no ROM available return without
  modifying the checksum
- changed function ResetDocument(), NewDocument(), OpenDocument()
  and RestoreBackup(), added state variable if document is available

HPILCMD.C
- changed function execmd(), optimized frame generation in the
  "frame class" case by removing the pbyMsg[5] buffer usage

KML.C
- changed table pLexToken[], defined table as constant and changed
  last token id table preset from constant number to member of token
  id enumerator
- bugfix in function ParseString(), decoding the \" sequence as
  quotation mark inside a string was incomplete, so every single '\'
  character was also removed

MRU.C
- changed function MruUpdateMenu(), changed variable type of
  variable hMenu
- changed function MruReadList(), removed initialized but unused
  variable

RESOURCE.H
- added definition

SETTINGS.C
- changed function ReadSettings(), moved CPU speed setting to
  MainWndProc()
- changed function ReadSettings() and WriteSettings(), added item
  "SingleInstance" in section [Emulator] in the INI-File


Emu71 v1.00

- first public version


(c) by Christoph Gieelink, c dot giesselink at gmx dot de
