1.3.0.dev0 (Next Release) ------------------------- 1.2.0 (2024-04-12) ------------------ - Fixed a bug with character input that would cause characters to be dropped when pasting in larger amounts of text. This makes it possible to paste programs into EhBASIC and Taliforth. Patch by SamCoVT. - Fixed interactive assembly on Python 3. - Fixed regular expression warnings on Python 3.12. - The ``fill`` command in the monitor now shows an error message if an address or value is out of range. - Added ``irq()`` and ``nmi()`` methods to the ``MPU`` class, so that interrupts can be simulated. Patch by Irmen de Jong. - The ``MPU`` class constructor now accepts ``None`` for the initial PC, which will cause it to read the address from the reset vector on ``reset()``. - The ``py65`` package is no longer a namespace package. - Fixed assembly and disassembly of 65C02 instruction $64 (``STZ $12``). Patch by Patrick Surry. - Removed use of the ``asyncore`` module deprecated in Python 3.10. 1.1.0 (2018-07-01) ------------------ - The ``Monitor`` class now allows the default memory to be supplied in the constructor. Patch by Irmen de Jong. - Fixed a bug where setting the MPU via ``py65mon`` command line arguments would have no effect. Reported by Michael A. Morris, patch by Ed Spittles. - The ``itoa()`` function in ``conversions.py`` now raises an error when an unsupported base is given. Patch by Scot W. Stevenson. - The unused hexdump loader utility has been removed. 1.0.0 (2017-05-11) ------------------ - Fixed a bug where the ordering of ``py65mon`` command line arguments produced different results. Arguments can now be specified in any order. Patch by Mario Keller. - Added new ``--input`` and ``--output`` arguments to ``py65mon`` that allow the addresses of the ``getc`` and ``putc`` handlers to be changed. Patch by Mario Keller. - Fixed a 65C02 bug where the TSB and TRB instructions did not set the Z flag correctly. Thanks to Kris Kennaway for reporting it. 0.24 (2015-03-31) ----------------- - Released as a universal wheel. 0.23 (2015-02-10) ----------------- - Added a workaround to $F001 output to catch encoding errors and display a "?" instead of crashing. This condition can occur if the 6502 program sends bytes to $F001 that aren't compatible with the terminal's character encoding. 0.22 (2015-02-09) ----------------- - Fixed a bug where ``py65mon --rom`` would raise an exception on Python 3. 0.21 (2015-02-09) ----------------- - Added support for breakpoints in the monitor. Contributed by Alessandro Gatti. - ASCII literals are now supported by the assembler. The statement "LDA #'A'" is equivalent to "LDA #$41". - Fixed console input when run under Python 3 on Windows. Closes #27. 0.20 (2014-05-08) ----------------- - Page wrapping for indexed indirect (X) operations on 65C02 has been restored. This reverts the change introduced in 0.18. We now believe that this mode works the same on the 65C02 as it does on the 6502. 0.19 (2014-03-12) ----------------- - Fixed 65C02 opcode $D2: CMP Zero Page, Indirect. - Blocking character input at $F005 has been removed. The I/O area was designed to be compatible with Michal Kowalski's simulator, and it uses this address for another purpose. Examples that depended on $F005 have been changed to use $F004. 0.18 (2014-01-30) ----------------- - Fixed a bug in RTS where popping $FFFF off the stack would cause the program counter to overflow to $10000. It now wraps around to $0000 as it should. Thanks to Gábor Lénárt for reporting it. - Fixed BRK on 65C02 so it clears the decimal flag. On NMOS 6502, the decimal flag is unaffected on BRK. On 65C02, it is always cleared. - Assembling now tolerates extra whitespace between opcode and operand. - Removed page wrap bug from JMP indirect on 65C02. - Removed page wrap bug from indexed indirect (X) operations on 65C02. 0.17 (2013-10-26) ----------------- - Added support for Python 3.2 and 3.3 based on work by David Beazley. 0.16 (2013-04-03) ----------------- - Fixed a bug in the monitor that caused loading from the command line with "--rom" to crash. 0.15 (2013-01-06) ----------------- - Disassembling can now wrap around memory if the start address given is greater than the end address. - Fixed the disassembler to accept a range of "start:end" instead of "start:end+1" for consistency with the other commands. 0.14 (2012-11-30) ----------------- - Assembling now detects syntax errors, overflows, and bad labels separately and shows specific error messages. - Fixed assembling 65C02 opcodes whose mnemonics have a digit such as "RMB3". - Reformatted source code to comply with PEP8. - Fixed a bug where the MPU status display would wrap unexpectedly on some terminals. - Added support for 65C02 opcode 0x89: BIT #. - Added support for 65C02 opcode 0x7C: JMP (abs,x). - Assembling now shows an Overflow Error if the statement won't fit at the top of memory. - Fixed a bug in the disassembler where instructions that wrap past the top of memory would not be displayed properly. 0.13 (2012-11-15) ----------------- - Fixed a bug where negative numbers could be entered for addresses in the monitor. 0.12 (2012-02-16) ----------------- - Fixed a bug that caused ``help cd`` to raise an exception in the monitor. - Fixed a bug in the 65C02 simulation where the opcode 0x7A was named "PHY" instead of "PLY", causing incorrect assembly and disassembly. Thanks to Brian Cassidy for reporting it. - Fixed the cycle count of 0xD2 (CMP zero page indirect) in the 65C02 simulation. Thanks to Brian Cassidy for reporting it. - Added "h" as a monitor shortcut for "help". 0.11 (2012-01-07) ----------------- - Added a new 65Org16 MPU simulation written by Ed Spittles. - The monitor now accepts command line arguments. See ``py65mon --help`` for usage. Contributed by Ed Spittles. - The monitor's load command can now fetch URLs. - Python versions earlier than 2.6 are no longer supported. 0.10 (2011-08-27) ----------------- - Fixed long-standing bugs in relative branch calculations in the assembler and disassembler. Based on a patch by Ed Spittles. - Zero page operations now have the correct page wrap around. Patch by Martti Kühne. 0.9 (2011-03-27) ---------------- - Fixed two monitor tests that were broken under Windows. Thanks to Oscar Lindberg for reporting this. - Removed use of defaultdict to fix compatibility with Python 2.4. - Decimal mode bugs have been fixed. Thanks to Ed Spittles who ported Bruce Clark's tests to find failures and then rewrote the decimal handling code. 0.8 (2010-03-08) ---------------- - Fixed deprecation warnings on Python 2.6 - We no longer bundle ez_setup to bootstrap setuptools installation. - Restoring the processor status register from interrupt now correctly set the BREAK and UNUSED flags to be high. Thanks to Ed Spittles for reporting this. - Applied patch by Ed Spittles that fixes the behavior of the BREAK and UNUSED flags in the processor status register. Closes #16. - Added ">" as a monitor shortcut for the fill command for consistency with VICE. 0.7 (2009-09-03) ---------------- - When using the monitor, the nonblocking character input at $F004 should now work on the Microsoft Windows platform. - Fixed that relative branch calculations would not use the correct start address when assembling in the monitor. Closes #10. - The processor status register ("p" or "flags") can now be changed in the monitor using the "registers" command with an argument of "p", such as "registers p=00". - MPU objects now return a two-line string as their __repr__ with the processor status register displayed as binary for readability. - The processor status register is now initialized to 0 on reset. Previously, its unused bit (bit 5) was set to 1 on reset. - Applied patch from Ed Spittles to change the CMP algorithm so that it no longer fails Rob Finch's test suite. Closes #8. - Added a new interactive assembly mode to the monitor. Entering the the assemble command with a statement such as "a c000 lda #0" works as before. Entering "a c000" will start the interactive assembler at that address. Entering "a" alone will start it at the current program counter. - Applied patch from Ed Spittles so that SBC now properly sets the Overflow (V) flag. This fixes a failure in Rob Finch's test suite. Closes #6. - Applied patch from Ed Spittles so that SBC now properly sets the Carry (C) and Zero (Z) flags. This fixes failures caught by Ed's own tests (see http://forum.6502.org/viewtopic.php?p=8854#8854). Closes #15. - A new "save" command has been added to the monitor that will save a range of memory to a binary file. 0.6 (2009-08-11) ---------------- - Added monitor shortcut "a" for "assemble". - Fixed that ASL would not properly set the Z flag. Closes #7. - Fixed that ADC would not properly set the Overflow (V) flag. The overflow calculation that is now used originated from XGS: Apple IIGS Emulator (cputable.h). Originally written and Copyright (C)1996 by Joshua M. Thompson. Copyright (C) 2006 by Samuel A. Falvo II. http://bitbucket.org/kc5tja/lib65816/src/tip/src/cputable.h Closes #3. 0.5 (2009-08-06) ---------------- - Fixed signatures of getc/putc callbacks in monitor that were broken when the ObservableMemory interface changed in 0.3. Closes #1. - Fixed that ROL would not properly set the Z flag. Closes #2. 0.4 (2009-06-06) ---------------- - Added ez_setup.py to bootstrap setuptools installation. 0.3 (2009-06-03) ---------------- - Added shortcuts for monitor commands such as "m" for "memory". These are mostly the same as the VICE monitor shortcuts. - The terminal width can now be changed in the monitor using the new "width" command. Some commands, like "mem", will wrap to this width. - Fixed a bug where BRK would increment PC by 3 instead of 2. Thanks to Oscar Lindberg. - Added a new 65C02 MPU simulation started by Oscar Lindberg. It is now mostly complete. - Added a new "mpu" command to the monitor. It will switch between the NMOS 6502 and CMOS 65C02 simulations. - A new "devices" module has been added to organize device simulations. - The mpu6502 and mpu65c02 devices have been reorganized internally to use Python decorators to build their lookup tables based on an idea by Oscar Lindberg. - A new "utils" module has been added with various utility functions. - The ObservableMemory interface has been changed for clarity. - Python 2.4 or later is now required. 0.2 (2008-11-09) ---------------- - Added a new "disassemble" command to the monitor. It can disassemble any range of memory ("disassemble c000:c010"). If labels have been defined, the disassembly will show them in the operands. - Added a new "assemble" command to the monitor. It can assemble a single instruction at an address ("assemble c000 jsr $ffd2"). Labels in the operands are also supported ("assemble c000 jsr charout"). - Moved the character I/O area from $E000 to $F000 for compatibility with the EhBASIC binary saved from Michal Kowalski's Windows-based simulator. In a future version of Py65, the I/O area will be configurable. - When running a program in the monitor, a read to $F004 will now do a non-blocking read from STDIN. If no character is available, a null byte ($00) will be returned. - Fixed a bug where a CMP instruction could crash the simulator due to an undefined variable. - EhBASIC 2.09 now runs in the simulator! - Documented all remaining monitor commands. In the monitor, use the command "help command" for help on any command. 0.1 (2008-11-21) ---------------- - First release.