============================================================
   ENGLISH - Original
   SPANISH - Translated by: Alvaro Gerardo Suárez
   FRENCH - Translated by: R. Moumaneix
============================================================


============================================================
                        ENGLISH
============================================================

                      Virtual HP-41
                        Release 9O

                   http://www.hp41.org


--------------------------------------
LOADING APPLICATION PACS
--------------------------------------
From the V41 menu, select File... Edit Configuration... to add or remove .MOD
files which contain the program code of the associated plug-in modules.
Almost all common modules are included in the MOD subdirectory. Click Info to
see the Function Address Table and the ROM files that are in the MOD file.
Moving a module up or down will position it higher or lower in memory. Some
modules are hardcoded to certain addresses.

-------------------------------------
KEYS
--------------------------------------
The PC Keyboard is mapped to the HP-41 keyboard as follows:
  F1 brings up help file
  F2 maps to ON
  F3 maps to USER
  F4 maps to PRGM
  F5 maps to ALPHA
  F6 maps to SST
  F7 maps to R/S
  ESC and Backspace map to BACKARROW
  CTRL copies the LCD
  TAB activates TURBO mode
  SHIFT maps to SHIFT
  ,< and .> map to .,
  /*-+ keys map to corresponding keys
  '" maps to MULTIPLY
  A-Z, 1-9 are directly mapped to corresponding keys regardless of shift state
  This means in ALPHA mode, the number keys do not produce numbers.

The mouse (or a touchscreen) can be used to press any key.

If you click on the LCD its contents will be copied and may then be pasted into
another application.

Since Release 9B the keyboard simulation engine has been rewritten. In combination
with a change in the PC keyboard interface allowing to press more than one key at
the same time a 2-key rollover is now possible.

If the key hold down time as single key is too short, it's still possible that
sometimes a keystroke gets missed. This problem should go away if you increase
the "processor speed" in V41 (Options... Settings...)

--------------------------------------
GET/PUT USER CODE PROGRAMS
--------------------------------------
From the File menu, select Get or Put to load or save one or more user code
programs in .RAW format. Until Release 8E Put User Code save only the code from
the selected global label until the corresponding global END. On Release 9 this
behavior has been changed. First, the listbox with the catalog shows only the
first global label of each user code now, this prevents saving user code parts
twice. Second, the saved user code does not begin with the global label any
more, it begins with the byte followed by the END of the previous user code.
This allow saving user code constructions like code beginning with a numeric
label and the main text label entry, which was chosen for selection, is
somewhere inside the code. By selecting more than one label in the listbox,
you can put all selected user code into one RAW file.

The HP41 User Code is quite similar to the code used by the HP42S and Free42,
so it's possible to load user code from theses sources too. It depends on the
program design and the used XROM libraries, if this works or not.

V41 has a detection for native HP41 User Code files looking for the differences
between the HP41 and the HP42S file format. So you might get a warning for a
non-native HP41 file and asked to continue loading.

The RAW file format is a binary format compiled by various utilities. These are
recommended:

Leo Duran's User Code Utility (Converts/Compiles/Decompiles/Generates Barcode)
Ulisse Quadri's Graphical User Interface for above

--------------------------------------
LOAD FILES (.LOD)
--------------------------------------
A load file contains configuration directives for V41.

Any line with a semicolon or asterisk first will be ignored.

These directives are case insensitive:

$MODULE Directive for Loading MOD Files
    $MODULE <MOD File>
    The MOD file is automatically loaded into the next available space.
    The MOD file must be in the same directory as the V41.exe file or in the
    MOD subdirectory under it and does not include the path or file extension.
    Normally the order of loading does not matter but it is possible it will
    with certain unusual configurations.

$GET User Code Directive
    $GET <RAW User Code File>
    Where <RAW User Code File> is the name of the .RAW user code file to load.
    This file must be in the same directory as the V41.exe file and must not
    include the path or file extension.

    If a program is loaded and there is already a program in memory that is not
    terminated with an END, the new program will be appended. This is unlike
    the card reader, which first deletes the existing program.

    When a .LOD file is saved by V41 (using File..Save/As), any $GET directives
    in an existing LOD file will be lost. Any user code programs will be
    preserved in the registers. Any files loaded with $GET will be appended to
    any programs already preserved in the registers.

$TCPIP Directive
    $TCPIP <Out TCP/IP address> <Out port> <In Port>
    These are the settings for the Virtual HP-IL interface. <Out TCP/IP address>
    is the TCP/IP address and <Out port> the port number of the next virtual
    HP-IL device. <In Port> is the input port for the incoming frames from the
    last virtual HP-IL device.

$UDP Directive
    $UDP <UDP address> <UDP port>
    These are the UDP protocol settings for the Thermal or Infrared Printer
    interface. <UDP address> and <UPD port> are the IPv4 address and the port
    number of the Printer simulation software.

    $UDP <COM port> <baud rate>
    These are the RS-232C protocol settings for the Thermal or Infrared Printer
    interface. <COM port> and <baud rate> are the COM port connector and the
    baud rate of connected Printer simulation.

Register State Directives
    :<REG_NAME> Value(s)

    Where <REG_NAME> can be some or all of the state variables as documented
    in the source code (HP41.h). This includes CPU, Display, Timer and
    RAM registers as well as special V41 variables. These values are
    processed before any $GET directives. Resist the temptation to randomly
    change these values.

LOD File Example:
;Load commands for the minimal HP-41C
$MODULE NUT-C
$GET MyCoolProgram
$GET AnotherProgram
:A_REG 00099999999990
:B_REG 00000000000000
:C_REG DF00C320000002
etc...

--------------------------------------
LOAD FILES (.D41)
--------------------------------------
V41 also accepts .D41 state files from a SwissMicros DM41L or DM41X.

Because a .D41 file contains no module information, the NUT-CX.MOD file is
automatically added to the configuration. When Extended Memory was used,
automatically two X-MEMORY modules are added too. All other necessary modules
must be loaded manually.

DM41
00  08888800000004  08880000000002  08800000000001  00000000000000
etc...

--------------------------------------
COMMAND LINE
--------------------------------------
The name of a .LOD file can be passed on the command line (without .LOD file extension).
/console starts the simulator in Mcode Console mode for debugging

--------------------------------------
SINGLE INSTANCE
--------------------------------------
The Settings option "Single Instance" allows a convenient way to run only one
instance of V41. If you try to start a new instance of V41, the new instance
recognize the already running instance and switch to this one. Since Release
9A V41 uses an improved version of the "Single Instance" mode. If you start
a new instance without a given filename, "Single Instance" operates like usual.
But if you start the new V41 instance with a given .LOD filename, the already
running instance compare the given .LOD filename with its own one and if they
are differ, the new .LOD file is loaded. What's happen with the previous .LOD
file? This depends on the "Auto Save on Exit" setting. If this checkbox is checked
the previous non "Untitled" file is automatically saved before loading the new one,
otherwise all changes are discarded without further notice.

--------------------------------------
PAGE VIEW
--------------------------------------
Loading a module into the code address space of V41 is an automated process
mainly controlled by the settings inside the .MOD file and the order of the
modules in the module configuration table.

Using .MOD instead of .ROM files should customers keep away from the tiny
details installing a module consisting of more than one 4K page or special
modules which must be placed on a dedicated page. So plugging a virtual module
should be as easy as plugging a real module into a HP41.

For experts it's sometimes useful to know on which page which modules are
located. This allows to optimize the configuration order for best usage of
the limited address space of 16 pages.

"Page View..." opens a dialog with rows containing the following information:

1st column: the number of an occupied page in decimal
2nd column: empty if the module has no FAT or the function 0 name has less
            than 8 characters otherwise the name of FAT function 0
3rd column: the module description used inside the configuration table

--------------------------------------
RAM VIEWER
--------------------------------------
V41 has an integrated sizable RAM Viewer dialog showing the actual editable
register content. The following information is not a description of the HP41
memory structure, you need additional literature to understand the concepts
behind.

The context menu allows selecting if empty registers or HP41 flags are shown
and to copy parts or the complete RAM content to the clipboard dependent on
the empty registers setting.

The view is separated into memory blocks. Some blocks are always visible, some
are only visible if they contain registers.

- X-Memory 2
The RAM of the 2nd X-MEMORY module (HP-82181A). On a real calculator the
module is loacted in a port with an even (2 or 4) port number.

+-----------+-----------+
|1:         |2:   X     |
+-----------+-----------+
|3:         |4:   X     |
+-----------+-----------+

- X-Memory 1
The RAM of the 1st X-MEMORY module (HP-82181A). On a real calculator the
module is loacted in a port with an odd (1 or 3) port number.

+-----------+-----------+
|1:   X     |2:         |
+-----------+-----------+
|3:   X     |4:         |
+-----------+-----------+

- Data
The Data area from "Top of Memory" to the Data curtain address. The
"Top of Memory" address depends on the calculator model and the equipped
HP-82106A or HP-82170A memory modules.

- PRGM
The Program Memory area from Data curtain address -1 to the address of the
"chain head" (permanent .END. address).

- Free Registers
The Free Registers area from the "chain head" -1 to "End of Buffer".

This must not be the number of free registers calculated by the HP41. The
"End of Buffer" is in the HP41 view the first register from "chain head" -1
to address 0C0h which is not completely filled with null bytes.

But this maybe wrong in two situations:
1) erroneous filled register with garbage (too less free registers)
2) last register of I/O buffer is filled with null bytes (too much free registers)

- Buffer
This area contain the "Key assignments" and I/O buffers. The "End of Buffer"
is calculated by going through the chain of "Key assignments" and buffer ID's
beginning from address 0C0h up to higher addresses. Each buffer ID (byte 6)
register contain also the reserved number of registers (byte 5) for this buffer.
This "End of Buffer" calculation is different from the calculation by the HP41
described in the "Free Registers" section and is used as end for the
"Free Registers" section above.

- X-Functions
The RAM of the X-FUNCTIONS module (HP-82180A).

The Extended Memory always begins with the RAM of the X-FUNCTIONS module and
can be expanded by additional X-Memory modules. On the lowest module address
there's a link to the next X-Memory module.

040: 00 00 10 00 00 00 BF Link ID=0BF Next=000

In the case of an initialized X-FUNCTIONS module only, in address 40 the "ID"
is the highest memory address of the module, "Next" the link to the next extended
memory module. With Next=000 there's no other module.

040: 00 00 40 02 2E F0 BF Link ID=0BF Next=2EF

This shows the same link address now with an extra Extended Memory module plugged
in into a left module slot.

The Extended Memory is filled with a chain of data, the end of the chain is
marked with the "End of XM" marker.

0BF: FF FF FF FF FF FF FF End of XM

An extended data entry always begin with a register containing the data name
followed by a register with the data type and the length information in registers.
If the data type is a program, the data type register also contains the program
length without the checksum in bytes.

'P' = Program
'D' = Data
'A' = ASCII

The Remark text begins with the data type followed by the data length in registers
as decimal number.

X-Functions
  0BF: 50 52 49 4D 20 20 20 PRIM
  0BE: 10 00 00 00 04 10 0A P010
  0BD: C6 00 F5 00 45 46 46
  0BC: 53 00 12 17 A7 42 00
  0BB: 16 19 A7 42 77 85 00
  0BA: 00 C2 03 F5 00 50 52
  0B9: 49 4D 11 01 11 40 91
  0B8: 71 43 44 B2 51 69 67
  0B7: B2 00 90 72 94 74 76
  0B6: 71 B1 83 02 F3 59 45
  0B5: 53 67 F2 4E 4F 8E CA
  0B4: 05 0D D3 00 00 00 00 Checksum D3=D3
  0B3: FF FF FF FF FF FF FF End of XM
  040: 00 00 10 00 00 00 BF Link ID=0BF Next=000

This is an extract of the X-Functions memory view. The Extended Memory begins
with a program called "PRIM". It's a (P)rogram with a length of 10 registers and
a program length of 65 bytes decimal. Then we have the registers with the program
data. In the case of a (P)rogram the last register contains the checksum. As
remark you see the calculated checksum as first argument, the reference checksum
behind the equal character as second argument. So when you get a "CHKSUM ERR" as
result of your 'GETP' request, you may fix the reference checksum in register
edit mode.

In our example we don't have more data, so we get the "End of XM" marker next.

- IR-Memory
The RAM of the Infrared module (HP-82242A). It's always visible here independent
from the RAM access state. If the RAM access state is disabled, the registers
are marked with an asterisk. The registers at address 028-02F have only a width
of 8 bit, so the upper bits contain always zero.

- Status
The RAM with the status registers.

To enter the register edit mode:

1) Select the register line with a single left mouse button click or by keyboard
2) The line is selected now
3) Select the register line with a single left mouse button click a second time
   or use the <F2> key
4) This activates the edit mode, the line is now enclosed by vertical bars or
   marked by a rectangle
5) Use the left mouse button or the keyboard to position the input cursor
6) Enter the new register content
7) To accept the changes select a different line with the left mouse button or
   use the <ENTER> or <TAB> key, to quit the changes use the <ESC> key

--------------------------------------
MCode Console
--------------------------------------
The MCode Console is a dialog for single step machine code debugging. The
console can be opened manually or is opened when a breakpoint occur and stops
CPU code execution.

You regularly see the actual CPU register content in hexadecimal with the
exception of the "BK", "FI" and "ST" register.

"BK" shows the actual bank switcher state beginning on the left side with page
0 until page 15 on the right side. Each page contains a bank number from bank
1 until bank 4.

The "FI" and "ST" register are shown as bitfields, meaning each digit is a bit.
For easier reading a bit containing 0 is marked as "-", a bit containing 1 show
the bit number beginning with 0.

For example "ST: --BA-- 7-------" mean that the ST bits 11 (B), 10 (A) and 7
are set, all others are cleared. So a "?FS 5" in Zencode can easily be
answered, the bit is not set in our example.

A context menu opens the possibility to modify some selected CPU registers.

--------------------------------------
BREAKPOINTS
--------------------------------------
The edit control in the Breakpoints dialog allows to enter a breakpoint
address in hexadecimal, in octal or in the global name format.

Lets make an example, DATE is a known global name and the function entry
is located at 5100h, 50400o.

1) Hexadecimal input: 5100
2) Octal input:       50400o
3) Global name input: DATE

Press 'Set' and on a HP-41CX you see

5100: 2D9168 [DATE]  GSUBNC 5AB6

as bank 1 breakpoint in the breakpoint list.

From calculator memory design it is possible that one memory page has
up to four banks. So on the HP-41CX for example page 5 bank 1 contain
the TIME module ROM and page 5 bank 2 an additional part of XFUNC module
ROM.

If you want to set a special breakpoint different from bank 1, you
have to enter the 'bank no.' followed by the '#' hash character and
the breakpoint address in the page.

As example whe want to add the breakpoint address 5100h from top in
page 5 bank 2.

1) Hexadecimal input: 2#5100
2) Octal input:       2#50400o

Press 'Set' and on a HP-41CX you see

2#5100: 0CA   C=B WPT

--------------------------------------
TRACE DUMP
--------------------------------------
This feature is activated and deactivated by selecting the
Options/Trace/Enable menu option. When enabled every MCODE instruction is
written out to a trace file named in the Options/Trace/Settings... dialog.

For "File Mode" select "New" for creating a new empty trace file or select
"Append" for appending the new trace output when trace is enabled. If you
chosen "Append" and the trace file don't exists, a new trace file is
created.

"Octal Address" shows the address infront of the disassembled opcode
and target address references in octal instead of hexadecimal. This
setting is interesting when debugging code with having a VASM reference
listing. Depends on the age of this document, the addresses are given in
octal or hexadecimal.

The "Logging" checkboxes "CPU Register", "Clock Register", "Octal Address",
"Opcode" and "HP-IL Frames" determine the output content of the trace file.

"CPU Register" enables printing the CPU register content in front of the
disassembled opcode.

"Clock Register" enables printing the Time Module register content also
in front of the disassembled opcode.

"IR Register" enables printing the Infrared Module register content also
in front of the disassembled opcode. The hexadecimal register name is an
alias for the RAM register address of the module.

"Opcode" enables the hexadecimal numeric opcode output in the disassembled
line.

"HP-IL Frames" enables printing the sent and received HP-IL frames.

--------------------------------------
SOUND
--------------------------------------
There are two types of sound simulation: speaker and wave. The speaker only works
on Windows 95/98 systems with a built in speaker. It also takes control of the
processor speed so these options are not available in the Settings dialog.

Wave sound should work on any system with a sound board and sounds very realistic.
Some sound boards support multiple sources. That means you can play songs and
listen to HP41 tones at the same time. Others support only a single source and
you must exit any other applications that use the sound board first.

--------------------------------------
HP-IL
--------------------------------------
Loading the 82160A HP-IL Module ROM Image enables a program interface for
connecting so called Virtual HP-IL devices. These virtual devices like a virtual
HP9114B disk drive are separated programs connected over a TCP/IP interface.
Different devices are available at https://hp.giesselink.com/hpil.htm. The most
common device is ILPer combing a generic printer, two disk drives and a special
device for transferring RAW data into an all in one solution.

Some printer devices are using the AUTO IDY feature of the HP-IL chip generating
IDY frames automatically. This feature can be deactivted to reduce the traffic
on the virtual loop. Therefore uncheck the item "Auto IDY Frames" in the
"More Settings..." dialog.

The Virtual HP-IL ecosystem, primary build for Emu71/Win, also allows accessing
real hardware devices over Jean-François Garnier PIL-Box, available at
http://www.jeffcalc.hp41.eu/hpil/index.html.

The TCP/IP interface configuration parameters for Virtual HP-IL can be changed
over the "More Settings..." dialog or set manually in the .LOD file.

--------------------------------------
.MOD files with QROM
--------------------------------------
What is QROM? QROM or Q-ROM stands for Quasi-ROM. In difference to the RAM
Memory Modules 82106A and 82170A (to expand the register memory) and the
X Memory Modules 82180A and 82181A, QROM is special page memory with a
word width of 10 bit which can be used for MCODE program execution or
data storage. So QROM is part of such famous modules like the HEPAX or
the W&W RAMBOX. In some documents this memory is also called QRAM, don't
worry about.

The RAM content of the HP41 including Memory Modules and X Memory Modules
is saved in the .LOD file. In contrast the content of QROM is stored
together with other module data in the corresponding .MOD file.

The different storage location of QROM (.MOD instead of .LOD file) takes
effect when different .LOD files load the same .MOD file and so may get
the QROM content from a different .LOD file session. Even more, when you
run two or more instances of V41 all using the same .MOD file, each
instance make a copy of the .MOD file content at startup and the last
program instance closing, write back its module QROM content. So the
modifications of the QROM content of the other instances get lost!

So as part of your data backup strategy, you should frequently make backups
of your .LOD files and .MOD files with QROM data content. .MOD files with
QROM data can easily be detected by watching the file modification date.
Every time such a module is unload, the file modification date change to
the unload time.

Some words updating V41 with the installer. Normally the installer update
the current installation by overwriting the installed files. The exception
are the .LOD files, the .MOD files in the MOD directory and the .RAW files
in the RAW directory. These files are only overwritten when the recent
file modification date of the installer file content is newer than the
file in the installation directory!

--------------------------------------
W&W RAMBOX I & II
--------------------------------------
The W&W RAMBOX modules are supported. With the current .MOD files the RAMBOX
fills the pages 8-F with RAM. Therefore these pages must be free at module load
time. The easiest way to ensure this, is adding the RAMBOX .MOD file directly
after loading the operating system file in the Edit Configuration... dialog.

Later added .MOD files with a given page number may cover any RAMBOX page,
even the RAMBOX OS page. Modules with the module position setting
"Any page 8-F" will be located at the first found RAMBOX RAM page. In
connection with the default RAMBOX .MOD files this is page 9, because the
RAMBOX OS is located at page 8.

--------------------------------------
HELIOS & Blinky PRINTER
--------------------------------------
The 82143A Thermal Printer implementation has the ability to print data to an
external HP82143A, the HP82242A Infrared Printer implementation the ability
to print data to an external HP82240A/B printer simulation both over the UDP
protocol to port 5025 on the local PC or to a COM port. You can change the
protocol settings by modifying the $UDP Directive in the .LOD file.

Examples for an UDP or a COM port setting are:

$UDP localhost 5025             ;Thermal Printer Settings
$UDP COM202 115200		;Thermal Printer Settings

Using the COM port maybe a bit complicated. You may have a printer
simulation like Diego Diaz USB 82143A software. This may listen for data on
COM2. But you cannot send data directly to COM2 from another application.
To do this you need a Null-Modem cable for two physical COM ports or a
Null-Modem emulator. I personally use a signed version of the Null-Modem
emulator com0com for my x64 Windows and configured a Null-Modem connection
between COM2 <-> COM202.

Why COM2? Many old software, especially software from HP ACO, is only
supporting COM1-COM4. In worst case, like in the HP49G firmware update
tool, only COM1 and COM2 are supported. I regular reserve COM1 for a
physical COM port and so COM2 is in my humble opinion the best choice for
a virtual COM port. I don't have to take care about the other COM port name
in the Null-Modem pair, because my written software accepts every installed
COM port name. But COM202 as counterpart to COM2 is easily to remember, so
my second choice is COM202.

The MAN/TRACE/NORM switch of the 82143A printer is simulated by the calculator
Flags 15 (1=TRACE) and 16 (0=MAN / 1=NORM) similar to the HP82242A solution.

The HP82242A module save some settings like MAPON inside the module RAM.
When you unplug the module and close the emulator these settings get lost.

A suitable HP82143A printer simulation can be found at Diego Diaz page
https://www.clonix41.org/Projects/USB-82143A/USB-82143A.zip or at
https://hp.giesselink.com/hp82240b.htm. The HP82240B printer simulation on
this page also supports a HP82143A mode. For proper HP82143A printing results
in connection with this version of V41 it's recommended to use v1.18 or later.

--------------------------------------
OPERATING SYSTEM COMPATIBILITY
--------------------------------------
You have to install the VS2005 runtime files.

V41 has been tested on the following:
- Windows 11
- Windows 10, x86/x64
- Windows 7, x86/x64
- Windows XP, SP3
- Windows 98 Second Edition

V41 has NOT been tested on the following but should work OK:
- Windows XP, SP1, SP2
- Windows 2000 SP2, SP3, SP4
- Windows 2000 SP1 - May have problem with fonts
- Windows NT 4.0 SP6A
- Windows ME
- Windows 98 First Edition
- Windows 95

This release of V41 is NOT compatible with the following:
- Windows CE
- 16 Bit Windows (3.x)
- DOS
- Any variant of UNIX

--------------------------------------
KNOWN PROBLEMS
--------------------------------------
- When using a low Processor Speed setting loud sound clicks caused by sample buffer
  underruns.

Feel free to try to fix these problems!  That is why I made the source code available.

--------------------------------------
RELEASE 9O (05/19/2026)
--------------------------------------
- Added "Export DM41 File..." to create a DM41 compatible state file
  and added possibility to load a DM41 .D41 state file over the
  regular "Open..." menu item
- Added several code optimizations
- Changed .LOD file saving, replaced multiple formatted string savings
  by a function implementation
- Changed "Put User Code...", replaced CPtrArray by a more recent
  std::vector implementation
- Changed "RAM Viewer..." dialog, added X-Memory program checksum to
  display view
- Changed .LOD file parser, method GetLine() can now handle CR+LF or
  LF terminated lines
- Fixed time accuracy of AUTO IDY frames, with no TIME module in the
  emulation Windows used a lower timer accuracy and so the repeating
  interval increased from regular 10ms to ~15ms
- Fixed Module Info in the Edit Configuration dialog, interrupt vectors
  only showed in the report when a FAT was deteced
- Fixed "RAM Viewer..." dialog, overlapping PRGM and Buffer area may
  garbled register output with switching headlines
- Fixed class 1 GSUBNC and GSUBC opcodes, a long jump to NOP is not
  suppressed, the long jump is executed but the NOP at the target
  address is handled as RTN
- Fixed class 3 opcodes, a relative jump with offset 0 jumped to the
  next instruction instead of stay at the same adress, defect
  introduced with release 8D

--------------------------------------
RELEASE 9N (07/15/2025)
--------------------------------------
- Changed "Get User Code...", added detection for native HP41 raw file
  by verifying the relative Global Label/GTO/XEQ offsets, check for a
  NULL byte after every number and check for packed data, if not ask
  for permission to continue loading
- Changed "Put User Code...", write original END byte code instead of
  generic one
- Changed "RAM Viewer..." dialog, added disabled flag for "IR-Memory"
  register view
- Changed :FI_REG format in .LOD file, added FI register content of
  time module and Infrared Printer
- Changed Medium, Large and XLarge main window with disabled title
  bar, added the close symbol X at top right of the window
- Changed Module Info in the Edit Configuration dialog, changed report
  file type to UTF-8 to use the Unicode character set in MCODE and
  USER CODE FAT names
- Fixed FI register handling, dependent on selected peripheral the
  time module and the Infrared Printer use their own state of the FI
  bits, so the same bit number like bit 12 can be shared now

--------------------------------------
RELEASE 9M (11/12/2024)
--------------------------------------
- Added 'FileCount' registry entry to set the maximum number of elements
  in the MRU list
- Changed ST and FI register display in trace output
- Changed Mcode Console register layout for improved P, Q, ST and FI
  register output
- Changed peripheral command decoder of 1LB6 simulation to a more
  general approach
- Changed Module Info in the Edit Configuration dialog, added page
  address information to FAT entries for loaded module pages
- Fixed Thermal Printer status register copy, an EOL character don't
  clear the "#06 SCO Special Column Output" bit
- Fixed Mcode Console Single- and Multi-Step mode, Infrared Printer
  timer wasn't updated
- Fixed "RAM Viewer..." window position when taskbar is not at the
  bottom of the desktop
- Fixed ROM checksum calculation, calculation introduced in release 9H
  cannot calculate checksum 001 and fixed checksum verification for
  failed checksum 000
- Fixed peripheral read for not equipped devices, return 0 in the C[W]
  register
- Updated Infrared Printer simulation to the latest reference
  implementation

--------------------------------------
RELEASE 9L (04/23/2024)
--------------------------------------
- Added Infrared Printer simulation
- Added disable TIMER_RESOLUTION throttling for Windows 11 and later
- Added QUAD relative jumps disassembly as remark to trace output
- Added line content to LoadConfig() syntax error messages
- Changed "RAM Viewer..." dialog, added context menu item to show HP41
  flags, view content of Alpha register in ASCII and changed decoded
  BCD number exponent output to display view
- Changed Tiny background image mode, removed special mainframe menu
  without Help item
- Fixed MOD file loading, when page position "Odd" was defined before
  page position "Even", the "Odd" page wasn't loaded and using page
  position "Ordered" caused a configuration error when there are gaps
  between installed module pages
- Fixed class 1 opcodes, a long jump to NOP should only suppressed on
  GSUBNC or GSUBC and not on GOLNC or GOLC
- Fixed A=A-B, A=A-1, A=A-C, C=A-C, C=C-1, ?A<C and ?A<B opcode
  implementation when CPU is in DEC mode and a nibble result is a
  positive hexadecimal number between A-F
- Fixed Mcode Console disassembly of HPIL and printer peripheral opcodes
- Fixed breakpoint disassembly, the 2nd word of a 2-word opcode was
  fetched wrong when the opcode was on a different bank
- Fixed peripheral Thermal Printer trace output mnemonics
- Fixed .LOD file parser, method CurrentLine() sometimes returned an
  incomplete line

--------------------------------------
RELEASE 9K (11/28/2023)
--------------------------------------
- Changed Configuration dialog, replaced module name creation by buffer
  length independent CString class usage
- Fixed "RAM Viewer..." dialog, with intruducing X-Memory file view in
  release 9I, V41 crashed in an endless loop when the calculator model
  had no X-FUNCTIONS memory equipped

--------------------------------------
RELEASE 9J (10/24/2023)
--------------------------------------
- Added "Page View..." dialog
- Added HP-IL trace settings and frame output in trace log
- Changed "Copy LCD", added LCD graphic to the clipboard bitmap data
- Changed File/New, added dialog with request to remove the plug-in
  modules
- Replaced HEPAX key press workaround at session start for initializing
  the HEPAX ROM when the calculator is already on
- Fixed trace output with disabled opcode view, adjusted column positions
- Fixed peripheral trace output, added Thermal Printer mnemonics for the
  HP-IL mnemonics used before
- Fixed Module Info in the Edit Configuration dialog, ignore the FAT
  setting in the Module Page Header, added a generic FAT check (this
  allows to show the FAT content of modules in QROM pages), added the
  41CL YCRC checksum of a ROM page as fingerprint, expanded the FAT
  report decoding references to different ROM pages and added decoding
  the LBL names of User Code entries
- Fixed wave sound speaker cracking on changing the .LOD file when the
  content of the F register differ between the .LOD files

--------------------------------------
RELEASE 9I (02/21/2023)
--------------------------------------
- Added Thermal Printer simulation
- Changed "RAM Viewer..." dialog, use global TreeCtrl variable now, added
  register edit, X-Memory file view and in the context menu an item
  selection showing empty registers
- Fixed Kernel HP-IL and Thermal Printer command execution when the
  corresponding hardware isn't enabled in the .MOD file
- Fixed POWOFF instruction, opcode 060 should/must followed by a NOP (000)
  to go into a sleep mode and fixed trace output showing the 2nd
  instruction word
- Fixed .LOD file loading, when selected .LOD file don't exist stay on
  current configuration
- Fixed .LOD file "Save As..." message handler, if on the last access the
  dialog was canceled a valid .LOD file wasn't saved at program exit

--------------------------------------
RELEASE 9H (05/31/2022)
--------------------------------------
- Added MOD2 file format support
- Added "RAM Viewer..." dialog
- Changed "Get User Code...", the error message "Not enough free
  registers" return the number of missing registers now
- Changed behaviour of nonmodal dialogs, they are now child windows of
  the desktop so the calculator main window can be moved on top over
  these nonmodal dialogs, this has also an effect on the minimize
  button of the mainframe, this button now only minimize the mainframe
  and not the nonmodal dialogs any more, each got a separate minimize
  button now
- Changed Mcode Console and Breakpoints dialog, the options Jump to
  Foreground and Always On Top take effect now
- Changed fetching MCODE opcode from image, clear bits 10-15 of the
  opcode at fetching time, this allows executing MOD2 images with meta
  information in these bits without clearing them in the image
- Fixed restoring PageCustom field data on MOD file writing
- Fixed OnEndSession() handler, made sure no message box pop up in .LOD
  file saving
- Fixed "Get User Code...", find bottom of available memory was wrong
  for buffers not terminated with 0xf0 in byte 6
- Fixed .LOD file loading, on module error the new configuration without
  the faulty modules is loaded, but the file reference still pointed to
  the prior .LOD file, so at saving the new configuration was saved
  under the prior filename, defect introduced with release 9B
- Fixed hardware reset, the keyboard scanner state machine got no reset
- Updated MODFile helper tools

--------------------------------------
RELEASE 9G (11/16/2021)
--------------------------------------
- Added initial directory setting for file dialogs affecting .MOD, .LOD
  and .RAW files, in the case of .LOD and .RAW files using the last
  used directory each
- Changed Mcode Console register layout to get more room for improved
  bank switcher settings output, and added some CPU register modification
  over the context menu
- Changed Breakpoints dialog, changed address list box from single to
  extended type, added checkbox to enable/disable each breakpoint
  separately and added bank# in breakpoint handling
- Added settings dialog for extended Trace options
- Changed register output design in Trace file
- Removed execution pause when calculator is minimized
- Set PUS (Power Up Status) bit in timer status register when loading
  a state file without the :TIMER_STATUS line
- Fixed command line /console argument, defect introduced with release 9A
- Fixed a pressed virtual calculator key at state file startup
- Fixed main loop freezing calculator on heavy display modification
- Fixed "Put User Code...", the calculator could change the memory content
  during program catalog creation
- Fixed time module implementation, removed UINT64 register working
  copies of clock, alarm and interval timer using the original timer
  register arrays instead which allow the use of hexadecimal values for
  service tests in these registers
- Fixed automatic timer increment of time module when Mcode Console is
  open, in Single- and Multi-Step mode the timers are incremented over
  elapsed CPU instructions to simulate the 0.01s timer period
- Fixed Mcode Console "?KEY:" view by redraw when pressing a virtual
  calculator key
- Fixed trace output, use entry point names only for addresses in bank 1
- Fixed use of .MOD files containing space characters inside the file name
- Fixed TCP/IP client connect time implementation
- Fixed Advanced HEPAX HepaxAdv.mod file, page definition of
  "HEP-ADV-RAM2" and "HEP-ADV-RAM3" was wrong
- Changed HEP-MEM.MOD and HEP-2MEM.MOD, added RAM size to the module title
- Removed timer register writing in .LOD file when calculator has no timer
- Added breakpoint loading/saving in .LOD file
- The LCD Font sample output of the Settings dialog has the background color
  setting of the background image and is centered now

--------------------------------------
RELEASE 9F (03/23/2021)
--------------------------------------
- Added XLarge background image mode
- Fixed loading LCD contrast and font color setting from registry, defect
  introduced with release 9D
- Changed "Put User Code..." don't delete the key assignment from global
  labels any more, the key assignment is still removed when importing
  files with "Get User Code..."
- Fixed "Get User Code...", for proper import of HP42 FOCAL programs the
  jump offsets of GTO and XEQ must be set to zero to force a recalculation
  of these offsets at program runtime
- Fixed File/New, emulation engine wasn't stopped before clearing RAM
- Fixed address in MOD file XROM function overview, content was sometimes
  wrong
- Don't save a config file with an empty module list
- On capable OS changed arrow to hand cursor over a calculator button

--------------------------------------
RELEASE 9E (01/19/2021)
--------------------------------------
- Added non-blocked IO feature to TCP/IP client connect
- Reduced TCP/IP client connect time to 10ms for each protocol
- Added support for the W&W RAMBOX module
- Fixed HEPAX instruction ROMBLK, when the HEPAX ROM destination page was
  higher then the source page, bank 1 in destination page was corrupted
- Fixed wakeup from deep sleep when HEPAX module is equipped
- Fixed W&W RAMBOX II MOD file loading and allow loading pages over the
  W&W RAMBOX pages
- Fixed MOD file saving, HEPAX file was garbled when the ROM part was
  mapped on a higher page than the RAM pages, this also would happen
  when the module order in a MOD file will change
- Fixed 64K WWRAMBOXII.MOD file using 2 banks and added 32K WWRAMBOXI.MOD
  file using one bank both with ROM on page 8 and RAM from page 9-F

--------------------------------------
RELEASE 9D (03/24/2020)
--------------------------------------
- Removed disconnect and restart of the Virtual HP-IL server at User Code
  loading
- Fixed incomplete hardware register reset at File/New, File/Open and
  File/Recent File selection
- Fixed HP-IL coldstart and a HP-IL endless loop with no loop devices
- Changed Shifted Alpha Keys dialog to nonmodal
- Some minor improvements

--------------------------------------
RELEASE 9C (08/06/2019)
--------------------------------------
- Fixed startup on PC without prior session information

--------------------------------------
RELEASE 9B (05/26/2019)
--------------------------------------
- Rewrote parts of Virtual HP-IL interface for the [SCOPE] mode of the
  HP-IL Development Module
- The controller timeouts for the HP-IL frames are now given by the NUT CPU
  instruction cycles and not by the Virtual HP-IL simulation any more
- Added error message when TCP/IP server port is already in use
- Added 2-key rollover possibility for keyboard usage
- Added last used .LOD file loading instead of default one and added MRU list
- Added request for saving old .LOD file when loading a new one
- Added "Reset Calculator" menu item setting the PC to 0
- Fixed showing the '@' character when using the TTF font on recent OS
- Fixed wrong timer register values in .LOD file when calculator startup failed
- Fixed windows position when taskbar is not at the bottom of the desktop
- Fixed directory location of trace.log file
- Fixed Breakpoints global breakpoint name search
- Speed improvement for global label name search
- Improved Edit Configuration dialog usability holding the cursor visible
  after operations and implemented a basic file format check for "Add" module
- The Color sample of the LCD Font inside the Settings dialog is using the
  selected LCD font with background now
- Main window context menu can be opened by keyboard now
- Updated 1LB6 simulation with changes from Emu75/DOS 1.32
- Updated icon file from Peter Janssen

--------------------------------------
RELEASE 9A (01/29/2019)
--------------------------------------
- Added AUTO IDY support to the HP-IL simulation (disabled by default)
- Fixed a HP-IL issue causing an endless loop sending IL frames
- No directory limitations for .LOD files any more
- Improved single instance option
- Fixed some timer related code
- Fixed too large display font issue on recent OS
- The small clicks at wave sound have gone
- Fixed issue with "Untitled" LOD file without file extension
- Speed slider in Mcode Console change speed at slider movement now
- Trace log file now show the actual content of the timer module registers
  CLK_A, CLK_B and INTV_CNT
- Added x64 source code compatibility

--------------------------------------
RELEASE 9 (10/22/2018)
--------------------------------------
- Release 9 changes made by Christoph Giesselink
- Added Virtual HP-IL implementation
- Moved configuration settings from HKLM to HKCU
- Improved User Code by handling multi LBL programs in .RAW format files
- File overwrite question is now integrated in the SaveAs dialog
- Fixed problem at display read in connection with HP-IL
- Fixed client window size
- Fixed some Mcode Console related problems
- The small clicks at wave sound are more quiet now
- Includes several minor fixes
- Fix for compiling with VS2017

--------------------------------------
RELEASE 8E (2/20/2012)
--------------------------------------
- Fixed an obscure bug with C=G, G=C, C<>G special cases

--------------------------------------
RELEASE 8D (7/23/2011)
--------------------------------------
- Fixed a bug with long jump which was not working in a special case

--------------------------------------
RELEASE 8C (5/27/2010)
--------------------------------------
- Fixed a problem with POWOFF reseting banks - caused problems with HEPAX
- Updated MOD files

--------------------------------------
RELEASE 8B (8/2/2008)
--------------------------------------
- Includes several undocumented minor fixes
- Help file comes up for first time use
- Redesigned the processor speed management
- Added non-rectangular window option for medium & large (Martin Lafferty)
- Added breakpoints

--------------------------------------
RELEASE 8 (10/20/2005)
--------------------------------------
- Rewrote timer code to fix problems
- Added MOD file format, removed ROM file format
- Added Tiny keyboard
- Added COPY LCD function by clicking on LCD or pressing CTRL
- Added Jump to Foreground option
- Added font color option
- Fixed some file I/O issues
- Added TURBO execution by pressing TAB
- Took out support for old .REG files (SDK41)
- Added support for HEPAX module
- Revised internal variable names and program structure some

--------------------------------------
RELEASE 7B (12/5/2003)
This release changes only one file (LCD4.ttf):
--------------------------------------
- Updated LCD4.ttf to fix a problem with Windows 2000 SP4 and XP SP1

--------------------------------------
RELEASE 7A (10/29/2002)
This release changes only one file (V41.exe):
--------------------------------------
- Found another TEF arithmetic bug that was preventing SOLVE and INTEG from working
- Replaced TEF code with Eric Smith's NSIM implementation
- Added dialog to edit ROM configuration
- Implemented CPU bugs as documented in David Assembler manual
- Fixed LCD display bug indicated by service module
- The volume control is grayed when None is selected
- Added an 'X' close button to the console window

--------------------------------------
RELEASE 7 (5/6/2002)
--------------------------------------
- Added TrueType font (S.E. Vincent)
- Improved keyboard bitmaps (S.E. Vincent)
- Changed some default settings
- Removed the 16 color bitmaps
- Made menu accessable by right click and added hide menu option
- Implemented MCODE Console
- Added wave sound (Frank Bauernoeppel)
- Removed some command line options because settings are now in registry
- Added single instance option
- Fixed some display anomalies such as excessive flashing and CATALOG glitches

--------------------------------------
RELEASE 6 (11/14/2001)
--------------------------------------
- Built with Visual Studio 6.0, Install Shield 5.5 Professional and Package for
  the Web 2.0
- Added timer simulation (Zharkoi Oleg).
- Added 256 Color palette support for older 8 bit display adapters.
- Bitmaps moved out of resource file to make .exe smaller
- Added extra large keyboard.
- Added two new annunciator fonts.
- Added large LCD font.
- Replaced shifted alpha bitmap with a better one
- Converted bitmaps to 256 colors (Jim McCarthy).  There is very little visible
  difference from original 24 bit images.
- LOD file enhanced to include plain text dump of all registers.
- REG file is obsolete and will not be written to, but can still be read for
  backwards compatibility.
- MCODE & CPU Trace output (Zharkoi Oleg).
- Default simulation speed increased to reduce keystroke misses.
- Fixed TEF bug in half adder code.  Service ROM now says "CPU OK".
- There are known problems with CCD ROM simulation especially enhanced LCD
  features (halfnut).
- Added Always On Top option
- Added sound simulation (Zharkoi Oleg) for BEEP and TONE
  This works on Win9x but not WinNT
- Added menu item check on keyboard selected

--------------------------------------
RELEASE 5 (10/8/00)
--------------------------------------
- User code loading and saving added (with help from Leo Duran).

--------------------------------------
RELEASE 4 (4/17/00)
--------------------------------------
- First GNU GPL Release


============================================================
                        SPANISH
          Translated by: Alvaro Gerardo Suárez
============================================================

                      Virtual HP-41
                        Release 8

                   http://www.hp41.org

Atención: Las tildes y eñes del texto en Español se pueden leer
correctamente si se abre este archivo con el Bloc de Notas "NOTEPAD".

--------------------------------------
CARGANDO MODULOS DE APLICACIONES
--------------------------------------
Desde el menú de V41, seleccione File .... Edit Configuration... y luego los
botones "Add" o "Remove" para adicionar o remover archivos .MOD ,los cuales
contienen el código de programa de los módulos insertables asociados.
Casi todos los módulos comunes están incluidos en el subdirectorio MOD.
Presione con el ratón sobre "Info" para ver la tabla de direcciones de las
funciones y los archivos ROM que están en el archivo MOD.
Mover un módulo hacia arriba o hacia abajo lo posicionará más arriba o más
abajo en la memoria.
Algunos módulos están fijos a ciertas direcciones de memoria y no pueden ser
movidos.


--------------------------------
TECLADO
--------------------------------
El teclado del PC está asociado con el teclado de la HP-41 de
la siguiente forma:

   F1 trae el archivo de ayuda
   F2 está encadenado con la tecla ON
   F3 está encadenado con USER
   F4 está encadenado a PRGM
   F5 está encadenado con ALPHA
   F6 está encadenado a SST
   F7 está encadenado a R/S
   ESC y Backspace activan la tecla FLECHA IZQUIERDA
   CTRL copia la pantalla de la 41.
   TAB activa modo TURBO
   SHIFT del PC activa SHIFT de la calculadora. (Tecla amarilla)
   ,< y .> activan .,
   Las teclas /*-+ se corresponden con sus equivalentes en la calculadora.
   '" está asociado con la tecla de multiplicación.
   A-Z, 1-9 están asociadas directamente a las teclas correspondientes,
   independientemente del estado de la tecla SHIFT.
   Esto significa que en modo ALPHA , las teclas de números no producen
   números.

El ratón (o una pantalla sensible al tacto) pueden ser usados para presionar
cualquier tecla.

Si usted presiona el botón izquierdo del ratón sobre la pantalla de la
calculadora, el contenido de la pantalla será copiado y puede ser pegado
en cualquier otra aplicación.

V41 atrapa las teclas presionadas y liberadas sin ejecutar ningún proceso.
El núcleo de la HP41 interpreta las teclas pero no existe un histórico de las
teclas presionadas. El resultado es que algunas veces una tecla se pierde
si el evento es demasiado rápido. Este problema podría eliminarse si ud.
incrementa la "velocidad del procesador" en V41 (Options .. Settings ..
Processor speed).

-------------------------------------
CARGAR Y GUARDAR PROGRAMAS DE USUARIO
-------------------------------------

Desde el menú File, seleccione Get o Put para cargar o guardar programas
con código de usuario en formato .RAW

Este es un formato para los programas de usuario creado por varios utilitarios.
Se recomiendan los siguientes:

Utilidad para código de usuario de Leo Durán (Convierte/Compila/Descompila/
Genera código de barras).

Interfaz gráfica para el utilitario anterior creada por Ulisse Quadri.

------------------------------
ARCHIVOS DE CARGA (.LOD)
------------------------------

Un archivo de carga contiene directivas de configuración para V41.

Si un archivo de carga no es especificado en la línea de comando cuando se
está iniciando V41, entonces es usado el archivo de carga predeterminado
"HP-41CX.LOD"

Estas directivas pueden digitarse en mayúsculas o minúsculas:

$MODULE : Directiva para la carga de archivos MOD
    $MODULE <Archivo MOD>
    El archivo MOD es cargado automáticamente en el próximo espacio
    disponible.
    El archivo MOD debe estar en el mismo directorio que tiene el archivo
    .LOD file o en un subdirectorio MOD por debajo de él y no debe
    incluir el sendero o la extensión del archivo.
    Normalmente el orden de carga no importa pero es posible que se
    produzcan configuraciones no usuales.

$PAGE : Directiva para cargar imágenes ROM  -OBSOLETA- NO SE SOPORTA MAS


$COMMENT : Directiva para comentarios.
    Cualquier línea que comience con punto y coma o asterisco será
    ignorada.

$GET : Directiva para cargar código de usuario
    $GET <Archivo RAW con código de Usuario>
    donde <Archivo RAW con código de Usuario> es el nombre del archivo RAW
    con el programa de usuario a cargar.

    Este archivo debe estar en el mismo directorio que el archivo .LOD y
    no debe incluir el sendero o la extensión.

    Si un programa es cargado y ya hay un programa en memoria que no está
    terminado con un END, el código cargado se adicionará al final de ese
    programa. Este comportamiento es diferente al que se presenta con la
    Lectora de Tarjetas, en el cual primero se borra el programa existente.

    Cuando un archivo .LOD es guardado por V41 (usando File .. Save/As),
    todas las  directivas  $GET que contenga un archivo LOD existente, se
    perderán. Todos los programas de usuario serán preservados en los
    registros. Todos los archivos cargados con $GET serán adicionados a
    los programas ya preservados en los registros.

$REG : Directiva de archivos
    $REG <Archivo REG>
    en donde <Archivo REG> es el nombre del archivo .REG a cargar.

    El archivo REG debe estar en el mismo directorio que el archivo .LOD
    y no debe incluir el sendero o la extensión del archivo.
    Un archivo REG contiene una instantánea de todos los registros del
    Sistema y los programas con código de usuario.

    Esto es obsoleto a partir de la version 6 de V41, la cual leerá archivos
    creados por versiones más antiguas pero no se podrá escribir en ellos.

Directivas de Estado de Registros
    :<REG_NAME> Valor(es)

    donde <REG_NAME> puede ser alguna o todas las variables de estado cómo
    está documentado en el código fuente (HP41.h).  Esto incluye CPU,
    Pantalla, registros de tiempo y RAM, también cómo variables especiales
    V41. Estos valores son procesados antes que cualquier directiva $GET.
    Se recomienda resistir la tentación de cambiar estos valores al azar.

Ejemplo de carga de Archivo LOD:
;Carga comandos para la HP-41C mínima
$MODULE NUT-C
$GET MiPrograma
$GET OtroPrograma
:A_REG 00099999999990
:B_REG 00000000000000
:C_REG DF00C320000002
etc...

--------------------------------------
LINEA DE COMANDOS
--------------------------------------

El nombre de un archivo .LOD puede ser pasado cómo parámetro desde la
línea de comandos (sin la extension .LOD)
/console inicia el emulador en modo de Consola "Mcode" para rastreo de
errores.

--------------------------------------
VOLCADO DE DATOS (trace dump)
--------------------------------------

Esta característica es activada o desactivada seleccionando en "Options...
Trace menu option". Cada instrucción de MCODE ejecutada resultará en que
los registros de la CPU sean escritos a un archivo de volcado de datos
llamado trace.log el cual está localizado en el directorio de instalación
de V41.
El contenido previo de este archivo se pierde cuando se activa
la opción TRACE.

--------------------------------------
SONIDO
--------------------------------------
Hay dos tipos de emulación de sonido: parlante (speaker) y onda (wave). La
primera solamente trabaja en sitemas Windows 95/98 con un parlante
disponible.

El sonido tipo onda debería trabajar en cualquier sistema con
una tarjeta de sonido y los sonidos que se oyen son muy parecidos a los
originales de la HP41. Algunas tarjetas de sonido soportan múltiples fuentes
de sonido. Esto significa que usted puede tocar canciones y simultáneamente
oir tonos de la HP41. Otras tarjetas soportan unicamente una sola fuente de
sonido y usted debe salir primero de todas las demás aplicaciones que usan
la tarjeta de sonido antes de poder oir los tonos de la 41. Usted podría oir
unos cuantos pequeños sonidos (clicks) y el emulador no simulará el producido
por la tecla OFF cuando el sonido tipo onda está activado.

--------------------------------------
IMPRESORA
--------------------------------------
La impresora térmica 82143A no está soportada en este momento.

-----------------------------------------
COMPATIBILIDAD CON EL SISTEMA OPERACIONAL
-----------------------------------------

V41 ha sido probado sobre las siguientes versiones:
- Windows NT 4.0 SP6A
- Windows 98 Segunda Edición
- Windows 2000 SP2, SP3, SP4
- Windows XP, SP1

V41 no ha sido probado en las siguientes versiones de Windows,
pero debería trabajar correctamente:

- Windows 95 (podría requerir dos archivos adicionales de Microsoft:
              MFC42.DLL, MSVCRT.DLL)
- Windows 98 Primera Edicion
- Windows ME
- Windows 2000 SP1 - Podría tener problemas con los "fonts"

Esta versión de V41 NO es compatible con los siguientes S.O.:
- Windows CE
- Windows de 16 Bits (3.x)
- DOS
- Cualquier variante de UNIX

--------------------------------------
RELEASE 8C (5/27/2010)
--------------------------------------
- Fixed a problem with POWOFF reseting banks - caused problems with HEPAX
- Updated MOD files

--------------------------------------
RELEASE 8B (8/2/2008)
--------------------------------------
- Includes several undocumented minor fixes
- Help file comes up for first time use
- Redesigned the processor speed management
- Added non-rectangular window option for medium & large (Martin Lafferty)
- Added breakpoints

--------------------------------------
VERSION 8 (10/20/2005)
--------------------------------------
- Reescrito el código para control de tiempo (timer) para corregir
  problemas.
- Añadido formato de archivo MOD, eliminado formato de archivo ROM.
- Añadido teclado "Tiny" (muy pequeño).
- Adicionada la funcion COPY LCD oprimiendo el botón del ratón.
  sobre el LCD o presionando la tecla CTRL.
- Adicionada la opción de Salto a Primer Plano (unicamente trabaja
  con NT 4.0).
- Añadida la opción de escoger color para la fuente (font).
- Corregidos algunos problemas con Archivos de Entrada y Salida (I/O).
- Añadido modo de ejecución TURBO mediante una opción del Menú o
  presionando TAB.
- Eliminado el soporte para archivos .REG antiguos (SDK41).
- Añadido soporte para el modulo HEPAX.
- Fueron revisados los nombres internos de las variables
  así como la estructura del programa.

-----------------------------------------------------
VERSION 7B (12/5/2003)
Esta versión cambia unicamente un archivo: (LCD4.ttf):
-----------------------------------------------------
- Actualizada LCD4.ttf para corregir un problema con 2000 SP4 y XP SP1.

----------------------------------------------
VERSION 7A (10/29/2002)
Esta versión cambia un solo archivo: (V41.exe)
----------------------------------------------
- Hallado otro error de aritmética TEF el cual impedía que funcionaran
  SOLVE e INTEG .
- Reemplazado el código TEF con la implementación NSIM de Eric Smith.
- Añadida caja de diálogo para editar la configuración del ROM.
- Implementados los errores de la CPU como está documentado en el
  manual "David Assembler".
- Corregido el problema con la pantalla LCD indicado por el módulo
  de Servicio.
- El control de volúmen está desactivado cuando está seleccionado
  "ninguno" (None).
- Añadido un botón 'X' para cerrar la ventana de consola.

--------------------------------------
VERSION 7 (5/6/2002)
--------------------------------------
- Añadida fuente TrueType (S.E. Vincent).
- Mejorados los gráficos tipo .BMP para el teclado (S.E. Vincent)
- Cambiadas algunas características preestablecidas.
- Eliminadas las gráficas .BMP de 16 colores.
- Ahora el Menú se puede accesar presionando el botón derecho del
  ratón y se añadió una opción para esconder el menú.
- Implementada la consola de MCODE.
- Adicionado sonido tipo onda (wave) . (Frank Bauernoeppel)
- Removidas algunas opciones en la línea de comandos debido a que
  ahora pueden controlarse desde el Registro de Windows.
- Añadida la opción de una sola instancia.
- Corregidas algunas anomalías de la pantalla tales como parpadeo
  excesivo y problemas con CATALOG.

--------------------------------------
VERSION 6 (11/14/2001)
--------------------------------------
- Construido con "Visual Studio" 6.0, "Install Shield 5.5" Profesional y
  el Paquete para la Web 2.0
- Adicionada la emulación del "timer" (Zharkoi Oleg).
- Añadido soporte para paleta de 256 Colores con antiguos adaptadores
  de pantalla de 8 bits.
- Los archivos .BMP (Mapas de Bits) fueron movidos fuera del archivo
  de recursos para hacer el .exe más pequeño.
- Añadido el teclado extra grande.
- Adicionadas dos nuevas fuentes (fonts) para los mensajes anunciadores.
- Añadida una fuente grande para la pantalla (LCD) de la calculadora.
- Reemplazado el mapa de bits usado con la tecla SHIFT en modo ALPHA,
  con uno mejor.
- Mapas de bits convertidos a 256 colores (Jim McCarthy).  Hay una muy
  pequeña diferencia visible con respecto a las imágenes originales en
  24 bits.
- Archivo LOD mejorado para incluir volcado (dump) a texto plano de
  todos los registros.
- El archivo REG es obsoleto y no será reescrito, pero aún puede ser
  leído por compatibilidad hacia atrás.
- La velocidad predeterminada de emulación fue incrementada para
  reducir la pérdida de teclas presionadas.
- Corregido error TEF en medio del código de adición. El ROM de
  Servicio ahora informa "CPU OK".
- Hay problemas conocidos con la emulación del ROM CCD especialmente
  con las posibilidades mejoradas del CCD (halfnut).
- Añadida la opción de Ventana "Siempre por encima".
- Adicionada emulación de sonido (Zharkoi Oleg) para BEEP y TONE.
  Esto trabaja sobre Windows 9x pero no con Windows NT.
- Adicionada marca de chequeo sobre el teclado seleccionado en el menú.

--------------------------------------
VERSION 5 (10/8/00)
--------------------------------------
- Adicionada la posibilidad de cargar y guardar código de usuario
  (con ayuda de Leo Durán).

--------------------------------------
VERSION 4 (4/17/00)
--------------------------------------
- Primera versión GNU GPL


============================================================
                        FRANÇAIS
              Traduit par : R. Moumaneix
============================================================

                      HP-41 virtuelle
                        Version 8

                   http://www.hp41.org

--------------------------------------
CHARGEMENT DES MODULES
--------------------------------------
Dans V41 (si la barre des menus n'est pas affichée faire un clic droit sur la calculatrice) sélectionner
"File", "Edit...", une fenêtre nommée "Edit Configuration" s'ouvre.
Dans cette fenêtre sont présents 7 boutons :
- "Add" pour ajouter un module enfichable (fichier ".MOD" dans le sous-répertoire de V41, nommé MOD)
- "Remove" pour supprimer le module sélectionné
- "Info" pour afficher les informations relatives au composant sélectionné
- "Up" pour faire monter, dans la mémoire, le module sélectionné
- "Down" pour faire descendre, dans la mémoire, le module sélectionné
- "OK" pour valider
- "Cancel" pour abandonner

Presque tous les modules courants sont inclus dans le sous-répertoire "MOD".
En cliquant sur Info, alors qu'un module est sélectionné, le Bloc-notes ouvre un fichier texte,
une ligne commence par "PAGE:" (vingtième ligne environ) qui donne la position du module en mémoire.
Certains modules sont codés en dur pour certaines adresses (le lecteur de cartes HP 82104A, "Card-rdr.mod",
est toujours à la même adresse).
Déplacer un module vers le haut ou vers le bas, pour qu'il soit en position supérieure ou inférieure dans la mémoire,
permet de résoudre des conflits d'adresses entre les modules (confit signalé lors de la validation).

-------------------------------------
Touches
--------------------------------------
Le clavier de l'ordinateur est mappé sur le clavier de la HP-41 comme suit :
- F1 affiche le fichier d'aide (ce fichier)
- F2 touche ON
- F3 touche USER
- F4 touche PRGM
- F5 touche ALPHA
- F6 touche SST
- F7 touche R/S
- ESC et BACKSPACE touche <- (CLX / CLA)
- CTRL copie dans le presse-papier l'affichage de l'écran LCD
- TAB active le mode "TURBO"
- MAJ (anciennement SHIFT) touche SHIFT (touche jaune, doit être utilisée AVANT l'autre touche)
- , et . touche ". / ,"
- les touches /, *, - et + du pavé numérique correspondent aux mêmes touches de la calculatrice
- les touches A à Z et 1 à 9 correspondent directement (même en fonction de SHIFT)
- en mode ALPHA, les touches numériques ne produisent pas de chiffres.

La souris (ou un écran tactile) peut être utilisée pour appuyer sur une touche.

Si vous cliquez sur l'écran LCD de la calculatrice, l'affichage sera copié dans le presse-papier et
peut être collé dans une autre application.

Si la frappe au clavier est trop rapide, la pression d'une touche peut ne pas être prise en compte.
Ce problème peut être résolu en déplaçant vers la droite le curseur "Speed" dans V41
("Options", "More Settings...", "Processor").

REMARQUE V41 se comporte comme la HP41 : pour obtenir le chiffre 1 par exemple, alors que le mode
ALPHA est activé, il est nécessaire d'effectuer une séquence de pressions succsessives de touches :
appui et relâchement de la touche SHIFT, puis appui et relâchement de la touche "1".
Vous pouvez consulter l'aide-mémoire accessible par "Help", "Shifted Alpha Keys...".

--------------------------------------
GET/PUT USER CODE PROGRAMS
--------------------------------------
À partir du menu "File" vous pouvez charger ("Get User Code...") ou sauvegarder
("Put User Code...") des programmes personnels en format ".RAW".
Il est préférable de ne pas les enregistrer dans le sous-répertoire "RAW" mais
de les laisser dans le répertoire de "V41.exe".

--------------------------------------
LOAD FILES (.LOD)
--------------------------------------
Un fichier ".LOD" est un fichier de configuration pour V41.exe.
Le fichier "HP-41CX.lod" est pris par défaut si aucun fichier de configuration n'est passé
en paramètre lors de l'appel de "V41.exe".
Il ne faut pas préciser l'extension ".LOD".
Exemple d'appel : "%ProgramFiles%\v41\v41.exe hp-41c"

Instructions éventuellement contenues dans un fichier ".LOD" (insensibles à la casse) :

- $MODULE chargement des fichiers MOD
    $MODULE <fichier .MOD>
    le fichier ".MOD" est automatiquement chargé dans le premier logement libre,
    le fichier ".MOD" doit être dans le même répertoire que le fichier ".LOD" ou
    dans le répertoire MOD pour ne pas devoir préciser ni le chemin ni l'extension,
    normalement l'ordre de chargement des modules n'a pas d'importance mais peut en
    avoir dans certaines configurations inhabituelles.

- $PAGE chargement des images ROM - CETTE INSTRUCTION N'EST PLUS SUPPORTÉE.

- $COMMENT précède un commentaire
    en plus, sur une même ligne, tout ce qui suit un point-virgule ou un astérisque est ignoré.

- $GET chargement "User Code"
    $GET <fichier RAW>
    où <fichier RAW> est le nom du fichier "User Code" (".RAW") à charger,
    ce fichier DOIT être dans le même répertoire que le fichier ".LOD",
    ni le chemin ni l'extension ne doivent être indiqués.

    Si un programme, déjà présent en mémoire, n'est pas terminé par l'instruction "END"
    (ne pas confondre avec ".END."), le nouveau programme est concaténé.
    Ce n'est pas comme le "Lecteur de Cartes" qui, dans ces conditions, supprimait ce dernier programme.

    Quand un fichier ".LOD" est sauvegardé par V41 (en utilisant "File", "Save As..."), le nouveau fichier ".LOD"
    écrase le précédent (ce qui fait disparaître toute instruction $GET). Tout programme présent en mémoire de V41
    est sauvé dans les registres. L'ajout d'une instruction $GET dans ce fichier ".LOD" peut éventuellement
    fusionner deux programmes.

- $REG
    $REG <fichier .REG> obsolète depuis la version 6 de V41, c'est en fait une partie d'un fichier ".LOD".

- : indique un registre d'état
    :<REG_NAME> Valeur(s)
    <REG_NAME> peut être tout ou partie des variables d'état décrites dans
    le code source (HP41.h). Cela inclut CPU, écran, alarmes du module "Time",
    les registres de RAM ainsi que des variables spéciales V41.
    Ces valeurs sont traitées avant toute instruction $GET.
    NE MODIFIEZ PAS CES VALEURS PAR HASARD.

Exemple partiel de fichier ".LOD" :
;la ligne suivante est est la partie minimale d'un fichier ".LOD"
$MODULE NUT-C
$GET MonProgrammePréféré
$GET AutreProgramme
:A_REG 00099999999990
:B_REG 00000000000000
:C_REG DF00C320000002
etc...

--------------------------------------
LIGNE DE COMMANDE
--------------------------------------
Le nom d'un fichier ".LOD" peut être passé en ligne de commande (SANS l'extension ".LOD").
Le paramètre "/console" démarre le simulateur V41.exe en "Mcode Console mode" pour le débogage,
vous pouvez obtenir le même résultat par "Options", "Console...".

--------------------------------------
TRACE DUMP
--------------------------------------
Cette fonctionnalité est activée et désactivée en sélectionnant la bascule "Options", "Trace Dump".
Chaque instruction MCODE exécutée et ses conséquences dans les registres CPU sont
écrites dans un fichier nommé "trace.log", situé dans le répertoire d'installation V41.
L'éventuel fichier "trace.log" précédent est écrasé.

--------------------------------------
SON
--------------------------------------
Le son "Wave" devrait fonctionner sur n'importe quel système avec une carte son, avec des sons très réalistes.
Certaines cartes son permettent la simultanéïté de plusieurs sources. Cela signifie, qu'avec ces cartes,
vous pouvez écouter de la musique et entendre en même temps les sons émis par la V41.
D'autres cartes n'acceptent qu'une seule source et vous devrez fermer les applications qui utilisent la carte son.
Il se peut qu'il y ait quelques claquements de faible niveau.

--------------------------------------
IMPRIMANTE
--------------------------------------
Actuellement l'imprimante thermique HP 82143A n'est pas supportée.

--------------------------------------
COMPATIBILITÉ AVEC LES SYSTÈMES D'EXPLOITATION
--------------------------------------
V41 a été testé avec les systèmes d'exploitation suivants :
- Windows NT 4.0 SP6A
- Windows 98 Deuxième Édition
- Windows 2000 SP2, SP3, SP4
- Windows XP, SP1
- Windows ME.

V41 n'a pas été testé sur les systèmes d'exploitation suivants, mais devrait fonctionner correctement :
- Windows 95 (peut exiger deux autres fichiers Microsoft MFC42.DLL et MSVCRT.DLL)
- Windows 98 Première Édition
- Windows 2000 SP1 - Il peut y avoir un problème avec les polices.

Cette version de V41 N'EST PAS COMPATIBLE avec :
- Windows CE
- Les versions 16 bits de Windows (3.x)
- DOS
- Toute version d'UNIX.

--------------------------------------
PROBLÈMES CONNUS
--------------------------------------
- Il y a encore un problème avec le code du module "Time".
  Voir la séquence d'effacemant des "flags" 12 et 13 après l'utilisations de fonctions du module "Time".
- L'instruction "Get User Code" pourrait être améliorée pour lire des programmes multi-LBL au format ".RAW".
  Voir le code de  Christoph Giesselink's dans Emu42.

N'HÉSITEZ PAS À ESSAYER DE RÉSOUDRE CES PROBLÈMES, C'EST POUR CETTE RAISON QUE LE CODE SOURCE EST DIPONIBLE !

--------------------------------------
VERSION 8C (5/27/2010)
--------------------------------------
- Correction d'un problème de réinitialisation des "banks" avec POWOFF - a causé des problèmes avec "HEPAX".
- Mise à jour des fichiers ".MOD".

--------------------------------------
VERSION 8B (8/2/2008)
--------------------------------------
- Inclut plusieurs corrections mineures non documentées.
- Le fichier d'aide s'affiche à la première utilisation de V41.
- Refonte de la gestion de la vitesse du processeur.
- Ajout d'une option fenêtre non-rectangulaire pour les affichages grand et moyen (Martin Lafferty).
- Ajout de la possibilité d'utilisation de points d'arrêt.

--------------------------------------
VERSION 8 (10/20/2005)
--------------------------------------
- Réécriture du code du module "Time" pour régler les problèmes.
- Ajout du format de fichier ".MOD", suppression du format de fichier ".ROM".
- Ajout du petit clavier.
- Ajout de la fonction de copie de l'écran LCD en cliquant desssus ou en appuyant sur la touche CTRL.
- Ajout de la possibilité d'affichage au premier plan ("Options", "Jump to Foreground").
- Ajout de l'option de coloration de l'affichage ("Options", "More Settings...", "LCD Fonts").
- Correction de quelques problèmes de fichiers I/O.
- Ajout du mode "TURBO" par appui sur la touche TAB.
  Réglage : "Options", "More Settings...", "Processor" et déplacement du curseur "Turbo".
- Abandon de la prise en charge des anciens fichiers ".REG" (SDK41).
- Ajout de la prise en charge du module HEPAX.
- Révision des noms des variables internes et de quelques structures du programme.

--------------------------------------
VERSION 7B (12/5/2003)
Cette version ne change qu'un fichier (LCD4.ttf)
--------------------------------------
- Mise à jour de LCD4.ttf pour résoudre un problème avec Windows 2000 SP4 et XP SP1.

--------------------------------------
VERSION 7A (10/29/2002)
Cette version ne change qu'un fichier (V41.exe)
--------------------------------------
- Découverte d'un bug arithmétique TEF qui empêchait SOLVE et INTEG de travailler.
- Remplacementdu code TEF par celui d'Éric Smith mis en œuvre dans NSIM.
- Ajout de dialogues pour la modification de la configuration ROM.
- Mise en œuvre bugs CPU comme indiqué dans le manuel David Assembler.
- Correction d'un bug d'affichage LCD indiqué par le module de service.
- Le contrôle du volume est grisé lorsque "None" est sélectionné ("Options", "More Settings...", "Sond").
- Ajout d'un bouton de fermeture "X" à la fenêtre de V41.exe.

--------------------------------------
VERSION 7 (5/6/2002)
--------------------------------------
- Ajout d'une police TrueType (S.E. Vincent).
- Amélioration du "bitmap" du clavier (S.E. Vincent).
- Modification de certains paramètres par défaut.
- Abandon du "bitmap" 16 couleurs.
- Menu rendu accessible par clic droit et ajout de l'option de montrer/cacher le menu ("Options", "Show Menu").
- Mise en œuvre du MCODE de la console.
- Ajout du son Wave (Frank Bauernoeppel).
- Suppression de certaines options en ligne de commande car les paramètres sont maintenant dans le registre de Windows.
- Ajout d'une option d'instance unique.
- Correction de quelques anomalies d'affichage (clignotements excessifs) et de défauts de le fonction CATALOG.

--------------------------------------
VERSION 6 (11/14/2001)
--------------------------------------
- Construit avec "Visual Studio 6.0", "Install Shield 5.5 Professional" et "Package for the Web 2.0".
- Ajout du module "Time" (Zharkoi Oleg).
- Ajout de la palette de 256 couleurs pour les vieilles cartes graphiques 8 bits.
- Bitmaps déplacés hors du fichier de ressources pour obtenir un exécutable de petite taille.
- Ajout d'un grand clavier.
- Ajout de deux nouvelles polices d'affichage.
- Ajout d'une grande police pour l'écran LCD.
- Amélioration du "shifted alpha bitmap".
- Bitmaps convertis en 256 couleurs (Jim McCarthy). Peu de différences avec l'original en 24 bits.
- Fichiers ".LOD" améliorés afin d'inclure le fichier "dump" de tous les registres.
- Les fichier ".REG" sont obsolètes, ils peuvent être lus mais ne peuvent plus être écris (compatibilité ascendante).
- Sortie de MCODE & CPU Tracet (Zharkoi Oleg).
- Vitesse de simulation par défaut améliorée pour réduire les touches "ratées".
- Correction d'un bug dans la moitié du code additionneur. La ROM de Service affiche maintenant "CPU OK".
- Il ya des problèmes connus avec la simulation ROM CCD en particulier des fonctionnalités LCD améliorées (halfnut).
- Ajout de la bascule "Always On Top" ("Options", "Always On Top").
- Ajout des sons pour BEEP et TONE (Zharkoi Oleg). Ça fonctionne sous Windows 9x mais pas sous Windows NT.
- Ajout d'une vérification du menu sur le clavier sélectionné.

--------------------------------------
VERSION 5 (10/8/00)
--------------------------------------
- Ajout du chargement et de la sauvegarde du code utilisateur (avec l'aide de Léo Duran).

--------------------------------------
VERSION 4 (4/17/00)
--------------------------------------
- Première version GNU GPL.

