Releases: johanberntsson/ozmoo
Release 9: Support for z1, z2 and z7
New features:
- Support for Z-machine version 1, 2 and 7 story files (z1/z2/z7).
Release 8: Make MEGA65 terp fast
New/change features:
- Changed history to allow cursor up/down even if there is pending user input
- Improved error messages when giving bad z-code palette options
Optimizations:
- Added support for caching story data in HyperRAM on MEGA65
- Changed so we access the Floppy Disk Controller directly on MEGA65 when reading raw disk blocks, instead of using DOS commands, for speed.
- Added a 60 KB cache in chipmem for disk tracks, used when reading raw disk blocks on MEGA65.
- Made all page copying use DMA on MEGA65
- Removed unnecessary mapping of F1 and F8 for all languages in streams.asm
- Rearranged character translation tables, making the code faster and shorter
- Changed the mechansim for downcasing user input
- Minor optimization in reading and writing global variables in non-SLOW mode on C64 and MEGA65.
Bugfixes:
- Fixed indexing bug in add_line_to_history (issue 36)
- Stopped downcasing accented characters for read_char
- Fixed bug which copied 256 bytes instead of 0 bytes from config info to
vmap_z_h (highbytes of vmem map) when game had no preloaded vmem blocks. - Updated outdated debug code for TRACE_VM (Issue 39)
Release 7: MEGA65 support
New/change features:
- Target MEGA65 is now supported.
- Made z3 timeline print score and moves separately on 80 column screens.
Optimizations:
- Optimized search for properties, utilizing that they are stored in descending order.
Bugfixes:
- Updated font Clairsys Regular for German and Swedish, since there was an incorrect character in them.
Release 6: Input history, input colours, font updates
New/changed features:
- Optional input history implemented. Activate with -ch
- Added player input colour parameters -ic and -dmic
- New version of Clairsys font, new localized versions of Clairsys.
- New font Clairsys Bold, including localized versions.
- Font folder has been reorganized.
- Changed so when Ozmoo is built without vmem (mode -P), SLOW mode is automatically enabled, and no buffers are used - memory access under IO/ROM is instead done with banking on every access. This allows for bigger games to use this mode.
- Updated to Exomizer 3.1.0.
Optimizations:
- Made scrolling faster. A lot.
- Reordered and optimized code in the main loop to shave off some cycles, based on how often different code paths are used.
- Optimized calculation of object address
- Changed jump in main loop using self-modifying code to avoid checking the z_exe_mode for every instruction.
- Optimized reading of object property data.
- Cache y value in new ZP register (mempointer_y) in vmem routines.
- Optimized skip_bytes_z_address.
- Moved Z-code instruction jump table to where it will always be in the same page, to avoid cycle penalty in lookup.
- Optimized lookup in vmem table to it's faster and so the lowbyte part doesn't pass a page boundary.
- Slight optimizations in test_attr, set_attr and clear_attr.
Fixed bugs:
- Warning with latest Acme due to typo ("Hex literal without any digits")
- Builds crashed if -t:c64 was specified, due to SUPPORT_REU being undefined.
- Blank out 40 col screen when decruncing using 2MHz on C128.
- Fixed bug which set colour incorrectly when clearing lines or entire screen on Plus/4
- @read_char didn't reset the row counter for the MORE prompt.
- Score/Time in z3 statusline is now placed close to the right-hand border even on 80 column screens.
- Fixed bug in calculate_propery_length_number (issue 29)
- Moved calls to before_dynmem_read and after_dynmem_read in objecttable.asm around to make sure they're always executed.
- Changed so the number of cache pages is always set to 4 when building for C128, since it has to be that size or Ozmoo crashes.
- Changed so the number of cache pages is set to 0, 1 or 2 (depending on splash screen) when using build mode -P (which doesn't use the cache, but the splash screen code is also located in the cache area).
- SLOW mode wasn't really working any more for platforms other than Plus/4. Fixed.
- Toggling darkmode in 40 col mode in a z5 game on C128 would change all text on screen to the new text colour, even text that had been printed with a different colour. Fixed. (It's still like this for 80 col, because it's hard to read the colour memory in 80 col)
Release 5.2: Fixed -t:c64 builds crashing
- Fixed bug which crashed builds if you explicitly set target to C64 ( -t:c64 ) when invoking make.rb
Release 5: C128 and Plus/4 targets, Beyond Zork mode, preload updates and bug fixes
New/changed features:
- C128 support (both 40 and 80 column screens)
- Plus/4 support (also C16 expanded to 64 KB RAM)
- New build mode -71, producing 1571 disk images. Can only be used for target C128.
- Disk drives with device# 8-15 can now be used.
- All produced disk images get names starting with the platform name
- Added a progress bar when loading data into REU or memory at game start.
- Added re-use of game data in REU after a restart.
- Question to use REU can now only be answered by Y or N (any other key would work like N before, making it easy to accidentally answer no).
- Interpreter number can now be customized with -in:N in make.rb
- Changed so C128 interpreter uses interpreter# 7 by default.
- Changed format of output from preload optimization slightly to make more data fit on screen. This means old preload optimization files need to be modified to be used again.
- Data to be read from disk when game starts in a game using preload optimization will now be read in the order it appears on disk, making load time shorter and causing less drive noise.
- make.rb can optionally fill up with more vmem blocks to load when using preload optimization (commandline switch -cf).
- Added option -b to not preload virtual memory blocks from disk when the game starts. This makes the interpreter a little smaller. Option is automatically enabled if make.rb is certain no preloading from disk will be needed anyway.
- Cursor colour now defaults to special value 1, meaning "same as current foreground colour".
- Cursor blink rate is now 1-99 where 1 is the fastest
- New option -u to do less checks for runtime errors, making the interpreter a little smaller and faster
- Commandline flag -r for make.rb to use reduced memory has been removed.
- When game restarts, it now loads the file "story". This means restart won't work if you rename the file.
- make.rb now prints a lot less, unless you use option -v (verbose).
- make.rb detects if Beyond Zork is built and changes the interpreter number to say it's the Apple IIe interpreter, since this gives the best results on Ozmoo.
- make.rb will now patch Beyond Zork story file before writing it to disk image(s) to make it work better on 40 column screen. Original story file is left untouched.
- Darkmode support is automatically removed when building Beyond Zork, since it gets in the way of a built-in keyboard shortcut in the game, and the game restores the colours even if you change them.
Optimizations:
- Increased vmem block age resolution by 1 bit, which should lead to better paging, espescially for z8 games which only had a five bit resolution.
- Centralized code to pick a free vmem buffer.
Fixed bugs:
- @Tokenise could use arbitrary value for parameter "flag" if it wasn't supplied.
- @Tokenise didn't skip words the way it should if parameter "flag" was set (which stopped Beyond Zork from recognizing any commands).
- Added support for terminating character array ($2e/$2f in the header)
- Fixed bug with creating .d81 partition, which made it impossible to use build mode 81 for small games ( non-dynamic memory < ~10KB).
- Cursor timing code was broken
- Some characters could get a weird colour in the save slot listing.
- Fixed line breaks in the wrong place in games which started buffering in window 0 while window 1 was selected, like AMFV.
Release 5.1: Fix an ugly warning when building for C128
Bugfixes:
- Acme (newest version only) threw a warning when building for C128.
Release 4: Configurable cursor, loadscreen, bugfixes
Special thanks to Eric Sherman for cursor patches and Steve Flintham for VM bug fix patches
New features:
- cursor shape, colour and blinking configuration settings (see documentation/colours.txt)
- make.rb support for additional target platforms (currently only -t:c64)
- Added a runtime error for division by zero
- Option -i to add a loader showing a picture while the game loads
- Option -if to add a loader showing a picture while the game loads + a slight border flicker while loading
Optimizations:
- Slight optimization to buffered printing (routine printchar_buffered).
Fixed bugs:
- SuperCPU + REU combination bug avoided by deselecting REU when SuperCPU used
- Fixed bug in docs for colour settings
- Fixed code that caused errors and warnings with new version of ACME
- Merged bug fixes in virtual memory code from Steven Flintham
Release 3: Darkmode, splash screen, bugfixes, more languages
Features
-
Added a secondary, configurable, colour scheme called Darkmode, which the player can toggle with the F1 key.
-
Added a configurable and optional splash screen which is displayed just before the game starts. The game starts after a few seconds or when the user presses a key. By default it shows the Ozmoo version and the instruction to use F1 to access Darkmode.
-
Time display on statusline in z3 games has been changed to AM/PM format and made to show 99:99 PM when the player doesn't hold the watch in Cutthroats.
-
Added filtering of ZSCII characters which can't be handled in output. They will now be omitted in production builds, and printed as hex codes "/ff/" in Debug mode.
-
Added fonts and character mappings for Italian, Danish, Spanish and French (in addition to German and Swedish which were already supported).
-
Added modified versions of the system font for several languages.
-
Updated several fonts.
-
Added a build flag in code (SMALL_CODE) which eliminates most runtime error checks in order to save about 120 bytes.
-
Put the story file first on a d81 disk image instead of the partition. This enabled Vice to load the right file when loading "*" even without true drive emulation.
Fixed bugs
-
A paragraph ending with a character in the last screen column would not get a newline.
-
A custom alphabet could change the meaning of character 7 in alphabet A2. This character should always be a newline.
-
@buffer_mode always flushed the print buffer, and printed the contents to the current window.
-
Time display in z3 games with time on statusline has been bugfixed.
-
Bug in @scan_table.
-
Bug in @set_font.
-
Numerous bugs in @print_table.
-
Bugs in wordwrap after player input and when text buffering started in column > 0.
-
Bug in @Tokenise which could make it mistakenly think there was a user dictionary.
-
Bug in quickindex, a shorthand list of recently used blocks in virtual memory, which made it think it had found a block if it found one with the same address modus 65536.
-
make.rb crashed when building a three-disk game.
-
Fixed spurious characters being output at start of game on an Ultimate 64.
-
make.rb silently clipped a story file after 51 KB in single file build mode.
-
@erase_line always erased the whole line, when it should erase from cursor.
-
Cursor started at bottom of screen in z5 games, when it should start at top.
-
Splitscreen in z3 games was working but the terp told the games it didn't support it, so the splitscreen sonar display in Seastalker didn't work.
-
£ character wasn't mapped, so games could not display it and it wouldn't be recognized in player input.
-
We used a graphic character to represent the backslash character. We have now edited all fonts included with Ozmoo to make it look like a real backslash character.
-
Pipe character was incorrectly mapped for output to the graphic character that looks like a pipe character, even for languages where that character has been repurposed as an accented character. Pipe character has instead been mapped to another graphic character with a vertical bar but to the left instead of in the middle of the 8x8 matrix.
-
We didn't have input mapping for backslash, underscore and pipe character so if you managed to type them at an input prompt, a game still couldn't recognize them.
-
@print_table printed too many characters if it encountered an illegal ZSCII code, due to a bug in translate_zscii_to_petscii.
Release 2: REU support, .d81 support, bugfixes
Features
- REU support: All the game data that would normally be retrieved from disk as needed can be cached in an REU instead. This also allows a user with a single disk drive and an REU to play a game built for a dual drive system.
- Added support for building a game to a 1581 disk image (d81), typically to be used with an emulator, or a real C64 with a 1581 drive or an SD2IEC.
- Changed MORE prompt to not cover any text.
- Added character mappings using the C64's graphics characters to show (approximations of) the regular ASCII characters that are part of ZSCII but not PETSCII.
- Added easily usable mappings and fonts for games in Swedish and German
- Ozmoo now shows a cursor while waiting for the user to press a key. This makes a cursor appear when filling in the form in Bureaucracy, where it was dearly missed.
- Upper window now auto-expands in z3, z5 and z8, if a game prints outside its limits. This makes a lot of not-so-well-behaved games work a lot better, with menus etc.
- Text in upper window is now truncated at right border instead of overflowing into the next line. This makes games which don't expect such a narrow screen work better.
- Text in upper window can be printed outside the left border. The text doesn't show, but the cursor moves as it should. This makes quote boxes and the like written for wider screens look as good as they can.
- Handling of upper window has been bugfixed and improved in many ways to work as best practice states.
- z3 programs can now split off an upper window without it being confused with the z3 statusline.
Optimizations
- Improved algorithm for which virtual memory block is swapped out when space is needed. This means fewer blocks typically need to be loaded during a game session.
- Faster code to convert between PETSCII and ZSCII, which speeds up all printing and player input
- Removed superfluous parsing of dictionaries
- Fixed bug which made the vmem quick index (a list of the six last used block in virtual memory) useless
- Fixed bug in make.rb which made it preload some memory blocks even when explicitly asked not to. This made PREOPT less efficient.
- Fixed bug which made make.rb use more disk blocks than necessary for story data. The bugfix allows for slightly larger games to be built with Ozmoo in modes S1 and D2.
- Fixed bug which caused make.rb to fail when building a game over a certain size in mode D2, forcing the user to use D3 instead when D2 should be enough.
Bugfixes
- Bug in @throw, which was rendering @catch/@throw useless
- Removed extra linebreak when printing text that ended in last column.
- Bug in PREOPT mode
- Bug in timed input
- Bug in @get_cursor which made it return rows and columns starting with 0,0 instead of 1,1 as the standard states
- Bug which would sometimes crash dictionary search when searching for a word not in the dictionary
- Bug in @restart which made it not work after the game had been saved or restored to a disk in the same drive as the boot disk.
- Bugs in make.rb where the program would not signal failure properly in many cases.
- Bug which caused some extra letters to be printed on the line below the statusline in many games.
Other improvements
- Updated documentation
- Changed screen dimension units in header to characters rather than pixels. This works well with more games.
- Updated to latest version of Exomizer (3.0.2)