The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
2.25	2023-05-27

	Bug Fixes
	* #4: Makefile out-of-date with respect to lib/CPU/Z80/Assembler.pm

2.24	2023-05-27

	Other
	* Add bugtracker URL

2.23	2023-05-27

	Bug Fixes
	* #3: Can't locate Asm/Preproc.pm in @INC

2.22	2023-05-24

	Bug Fixes
	* Configure git workflows to test on Ubuntu, MaxOS and Windows
	* #2 fails on Perl v10
	* Fix failure on Windows machines

2.21	2023-05-23

	Bug Fixes
	* t/issue_1.t needs full path to z80masm

2.20	2023-05-23

	Bug Fixes
	* #1 Label addresses are incorrect after a second ORG

2.19	2023-05-21

	Bug Fixes
	* Bug #140160 for CPU-Z80-Assembler: circular dependency in CPU::Z80::Assembler::List fails syntax check

2.18	2019-07-06

	Bug Fixes
	* Dollar in strings was causing evaluation error

2.17	2019-07-06

	Feature Changes
	* Accept C-like escape sequences in double-quoted strings

2.16	2018-02-20

	Bug Fixes
	* https://rt.cpan.org/Public/Bug/Display.html?id=124499

	Other
	* Fix license value in Makefile.PL
	* Add Travis-CI control file

2.15	2015-12-28
	Other
	* Add link to git repository

2.14	2013-07-26
	Other
	* Use Asm::Preproc 1.00, where Asm::Preproc::Stream is removed, and 
	  Iterator::Simple::Lookahead is used instead

2.13	2010-11-21
	Bug Fixes
	* Bug detecting circular references: was giving false positives 
	  in the following example code:
			err equ 10
			y0  equ err
			ld a,(iy+err-y0) ; gives circular reference error, and should not

	New Features
	* Add defm, defmz, defm7, equ
	* Add z80asm_file function.

	Feature Changes
	* Replace AsmTable by Asm::Z80::Table. This has the impacts:
	  - accept 'jr <po|pe|p|m>,NN', compile 'jp ...' instead
	  - no longer support for variants of ixh, ixl, iyh, iyl (e.g. xh, hx, ...)
	  - no longer support variants db, dw, dt, dm of defb, defw, deft, defm
	  - no longer support for [] instead of ()
	  - no longer support for exa

	Other
	* Merge CPU::Z80::Assembler::Preprocessor and CPU::Z80::Assembler::Lexer
	  into CPU::Z80::Assembler, they were just wrapper functions on other modules.

2.12	2010-10-02
	* Sequence (?|...) not recognized in regex in Perl 5.8

2.11 	2010-10-01
	* Make CPU::Z80::Assembler::Lexer as a wrapper to Asm::Preproc::Lexer, use 
	  Asm::Preproc::Token instead of CPU::Z80::Assembler::Token
	* Solve #59195 (use hex instead of eval)

2.10 2010-09-12
	* Make CPU::Z80::Assembler::Preprocessor as a wrapper to Asm::Preproc
	* Error messages stopped showing actual text of line containing the 
	  error - cluters the display
	* Use L<zzz|zzz> instead of L<zzz> in POD to avoid "the zzz manpage" rendering

2.09 2010-03-23
	* bump version

2.08_01 2010-03-22
	* CPAN cannot unpack tarball, permission denied; give full control to
	  Win7 source files before make dist, add noacl to cygwin fstab

2.08 2010-03-21
	* Failed t/JumpOpcode.t test 36 in perl 5.11.5, 
	  operation "eq": no method found 
	  when comparing two CPU::Z80::Assembler::Line; 
	  convert to string before passing on to is()

2.07 2009-11-12
	* One test of t/Preprocessor-include.t failed on localized version of $!

2.06 2009-10-26
	* Bump up version number

2.05_06 2009-09-22
	* Move back to 5.008, CPAN of 5.006 did not compile, Regexp::Trie requires 5.008
	* '$' no longer used as label prefix, to be able to support $FF syntax 
	* '%' (bin), '$' (hex), '#' (hex) number prefixes
	* removed ORG label - does not make sense with several segments
	* Rename link() to _locate() : only address location is done; make it private, 
	  called by bytes()
	* Remove restriction on ORG - each new org creates a new segment,
	  gaps between the segments are filled with 0xFF (configurable)
	* Change 'JR' to 'JP', and 'DJNZ' to 'DEC B:JP NZ' if distance too far
	* Publish AsmTable.pm - usefull for disassembler

2.05_05 2009-08-26
	* Fix Parser.pm version
	* Remove dead code
	* Improve documentation 
	* Tests failed in Unix due to lack of \r processing
	* Compatible with perl 5.006, downgraded requirement from 5.008.
	* Error in macro expansion : was eating statement terminator

2.05_04 2009-08-23
	* New Stream class - faster than HOP::Stream, because head element is always 
	  available to be read without computation (is_promise() in HOP::Stream) and 
	  no test is needed to distinguish a stream node from a array-ref element
	  (is_node() in HOP::Stream). The stream has an head element, and a list of
	  the next elements, which may contain iterators.
	* List object uses the input to the assembler to read the lines again during
	  the listing phase, instead of globing all tokens in memory
	* Remove usage of HOP::Stream
	* Move the macro processing into the parser - removes one level of stream
	  processing
	* Added the unofficial Z80 opcodes to the test cases
	* Benchmark assembly times:
	  0.337 sjasmplus
	  2.734 z80masm-2.01
	  2.738 z80masm-2.05
	  2.898 z80masm-current
	  3.555 z80masm-2.05_03
	 11.342 z80masm-1.03

2.05_03 2009-08-11
	* Performance : 
	  - hand-coded contructor and accessor for Line.pm and Token.pm instead
	    of Class::Struct, because too much time was being spent on Token->new()
	* Remove Class.pm : plugin replacement to Class::Class to solve RT #42710
	* Remove Node.pm : cannot use inheritance with Class::Struct; define different
	  modules (Program.pm, Segment.pm, Opcode.pm, Expr.pm) with the same interface
	  (child contains list of children of this node).
	* All test scripts now pass
	* Move test scripts data files to t\data
	* Move all bechmarking scripts to tools\benchmark
	* New List.pm class to handle output of the assembly file listing at the
	  code generation stage.
	* New ParserGenerator.pm class to generate a try-based non-backtracking parser.
	  Builds a complete state table for the input grammar, where each state is a
	  map of current-token => next-state, or current-token => accept-rule, or
	  current-token => call-sub-rule. The input grammar accepts 
	  rule => token token ... [sub-rule] ... action 
	  The sub-rule call accepts optional ('?'), 0 or more ('*') or 1 or more ('+').
	  The output is the new Parser.pm module with about 7K states and 20K lines
	  of Perl code --> PERFORMANCE PENALTY.
	* Remove ParserTable.pm : whole Parser.pm is now generated by
	  tools\build_Parser.pl
	* Expr.pm parser now checks for the correct syntax. The previous parser just
	  extracted balanced parentheses.
	* Lexer.pm : 
	  - accept db, dw, dt, dm as alias to defb, defw, deft, defm
	  - remove quotes from STRING token value
	* Line.pm : added back is_equal() and is_different()
	* Macro.pm : 
	  - return the list of newline tokens parsed inside of a macro 
	    definition back to the stream, so that the assembly listing contains 
	    also these lines.
	  - replace statement_end() by /[:\n]/ -> performance
	* Program.pm, Segment.pm : new org() and add() methods to be called by code
	  generator.

	  The lexer is still the performance botleneck, together with the heavy usage
	  of HOP::Stream.
	%Time ExclSec CumulS #Calls sec/call Csec/c  Name
	 43.7   0.500  3.052  71417   0.0000 0.0000  HOP::Stream::tail
	 33.6   0.385  0.665  98780   0.0000 0.0000  HOP::Stream::head
	 24.6   0.282  0.466 170197   0.0000 0.0000  HOP::Stream::is_node
	 22.4   0.257  1.214  17902   0.0000 0.0001  CPU::Z80::Assembler::Lexer::__ANON__
	 21.3   0.244  0.257  67163   0.0000 0.0000  HOP::Stream::is_promise
	 20.7   0.237  2.173  34954   0.0000 0.0001  CPU::Z80::Assembler::Macro::__ANON__
	 20.4   0.234  0.250      9   0.0260 0.0278  CPU::Z80::Assembler::Macro::BEGIN
	 19.6   0.225  0.225 242140   0.0000 0.0000  UNIVERSAL::isa
	 18.6   0.213  3.250  71417   0.0000 0.0000  HOP::Stream::drop

2.05_02	2009-04-25
	* Line.pm, Token.pm : 
	  - go back to Class::Struct instead of Class::Class (bad performance of the
	    later)
	  - do not use "eval(Data::Dump::dump())" for clone - bad performance
	  - add overload for 'bool' and '0+' - '""' was being used, and is too slow
	    because it uses Data::Dump::dump() internally
	  - remomve is_equal() and is_different() methods (Line.pm)

2.05_01	2009-04-23
	* Add Line, Token classes. No need to create LINE tokens - each token carries the
	  line number.
	* Change to single-pass design.
	* Use Class::Class hierarchy for parsed objects. 
	* Several test scripts fail.
	* Documentation needs update.
	* Dead code needs to be removed.

2.05    2009-01-04
	* Fixed VERSION file - wrong version parsed by CPAN.

2.04	2009-01-04
	* Added MANIFEST.SKIP. Created VERSION file.

2.03    2009-01-04 
	* Fixed MANIFEST - missing files.

2.02    2009-01-04 
	* Support undocumented Z80 instructions (t/test_z80.asm)
	* Auto-generate ParserTable.pm and test_z80.asm, cross
	  check the assembly with the sjasmplus assembler.
	* Fix documentation and show usage when called without arguments.
	* Integer out of range is now a warning instead of a fatal error.
	  "+d" in "(ix+d)" is optional.

2.01    2008-07-13 
	* 10-lexer.t and 11-z80pp.t tests failed in Unix.

2.00    2008-07-13 
	* Re-implemented for speed improvement.
	* Split into three layers - lexical scanner, instructions 
	  parser and code generator.
	* Added Z80 undocumented instructions.
	* $ in front of labels is optional, accepts lower case 
	  assembly instructions, improved error messages, 
	  accepts multiple assembly instructions in a line 
	  separated by ':'

1.03    2008-06-25 
	* Bugfixes from Paulo Custodio:
	  see https://rt.cpan.org/Ticket/Display.html?id=36991

1.02    2008-06-22 
	* Added INCLUDE
	* Added support for #comments at start of line
	  (for C pre-processor friendliness)

1.01    2008-06-14 
	* Macro parameters no longer clash with labels
	  whose names start the same as a parameter.
	  eg, a param $r no longer clashes with label
	  $rr
	* Likewise labels

1.0     2008-06-13 
	* Original release