Add OPL4 playback and analyzer support

This commit is contained in:
2026-09-15 14:59:29 +03:00
commit 1686838e03
553 changed files with 50524 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
@echo off
..\..\tools\robimg\robimg.exe -p="wc.img" -s=102400 -C="..\..\soft\wc\exe"
pause
BIN
View File
Binary file not shown.
+114
View File
@@ -0,0 +1,114 @@
## Installation Instructions
Requirements:
- GNU/Linux / Unix / macOS / BSD with bash compatible shell
- all common system progs (grep, cat, etc...)
- all common build requirements (libc, libstdc++, g++, GNU make, etc...)
- optionally CMake
or
- complete MinGW environment for MS Windows, configured with MinGW bin directories added in `PATH` variable (typically `C:\MinGW\bin;` `C:\MinGW\msys\1.0\bin`) or possibly with any BASH emulator (e.g. the one which comes with [git for windows](https://gitforwindows.org/)) will do it instead of msys is missing / not set.
- CMake installed into MinGW bin directory (optionally)
Compilation is tested with GCC 5.5.0, it should run also with older 5.x versions. It will not work with GCC 4.x and older.
## Getting full source code of sjasmplus
Use `git` to clone the github repository and all git-submodules:
git clone --recursive -j8 https://github.com/z00m128/sjasmplus.git
If you already have cloned repository without submodules, you can update submodules only by:
git submodule update --init --recursive
If you are not using `git`, you can download and extract archive from releases, the manually added `.tar.xz` one (the automatically github provided zip files are missing the submodules sources and will fail to build). Or you can download the github provided archives, but then you need to download each submodule individually and extract them to correct folders inside sjasmplus folder.
## Default method for GNU/Linux / Unix / macOS / BSD
Go to folder with sjasmplus project. Edit install path `PREFIX` in file `Makefile` according your preferences (default `/usr/local`). Run following commands:
make clean
make
Then run as root or use sudo:
make install
### Gentoo GNU/Linux
Check [cizo2000's github gentoo-overlay/dev-util/sjasmplus](https://github.com/cizo2000/gentoo-overlay/tree/master/dev-util/sjasmplus) for ebuild files.
### Arch Linux
Recently (2022) it seems leo72 started providing AUR for z00m's fork of sjasmplus: [aur.archlinux.org/packages/sjasmplus-z00m128](https://aur.archlinux.org/packages/sjasmplus-z00m128) (AFAIK there's no connection with any maintainer of this project, but hopefully this will continue and provide good experience to AUR users, thanks leo72).
## Default method for MS Windows
Go to folder with sjasmplus project. Edit install path `PREFIX` in file `Makefile.win` according your preferences (default `c:\mingw\usr\local\bin`). Remove `-static` parameter in `CFLAGS` if you don't need standalone Windows executable (binary is MinGW dependant then, but it's smaller). Run following commands:
make -f Makefile.win clean
make -f Makefile.win
make -f Makefile.win install
## CMAKE method for Linux / Unix / macOS / BSD
Go to folder with sjasmplus project and run following set of commands:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
The project will use internal copy of Lua 5.4.4 by default, but you can use system Lua 5.4 by using `-DSYSTEM_LUA=ON`.
For disabling of LUA scripting support add `-DENABLE_LUA=OFF` option:
cmake -DENABLE_LUA=OFF ..
Binary sjasmplus file will be placed in `/usr/bin` by default.
To change install directory prefix add `-DCMAKE_INSTALL_PREFIX:PATH` option with specified prefix:
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/local ..
## CMake method for MS Windows
Go to folder with sjasmplus project. Delete or rename file `Makefile`. Rename file `Makefile.win` to `Makefile`. Create `build` subdirectory and enter to it. Run following command:
cmake-gui
Click `Browse Source...` button, select extracted tarball folder. Click `Browse Build...` button, select the `build` folder. Click `Configure` button, select `MinGW Makefiles`, select `Use default native compilers`. Click `Finish` and wait until configuration is done. Change `CMAKE_INSTALL_PREFIX` install path according your preferences (click on path). Click `Generate`. Run `cmd.exe`, enter the build directory and run following commands:
make
make install
The CMake can generate also VS project files, and sources should compile with VS compiler, since
v1.14.1 the VS built executable should mostly work as well as MinGW, although there are still
corner-case bugs which need to be fixed, see issues #77 and #78 for details/progress and to help.
The official binary "exe" is built with MinGW toolchain and that's recommended option.
## Helping with sjasmplus development
There are few extra recommendations if you want to join sjasmplus development and use all the features:
- work with git clone of repository ideally, so you can easily update to latest source base, track your changes or review changes of other developers
- within the git repository init and update the submodules too, this will clone the UnitTest++ and LuaBridge2.8 repository which are required to build sjasmplus and unit tests (`git submodule init`, `git submodule update`)
- linux + gcc + Makefile is the config of Ped7g, having access to the same config to re-create his workflow locally may be of help (when troubleshooting some issue or comparing results with different platform)
- but having different local configuration would be very helpful to keep the source base cross-platform and in good shape
- you can check `.cirrus.yml` file and accompanying scripts/batch-files in `ContinuousIntegration` folder to see how different environments and different build tasks are prepared and executed. If you are not familiar with CI setup and configuration yet, you should take at least a brief glimpse on it, even if you want just to contribute small patch to the sjasmplus, because any pull request will be scrutinized by the CI build system automatically.
My (Ped7g) local workflow is:
1. KDevelop IDE set up to use CMake import of project to build+install debug binary in my `~/.local/bin` folder, which is the first binary found by my search path (to build + install the sjasmplus I use Project/Install Selection [Shift+F8]).
1. with new debug binary locally installed, I run in terminal `ContinuousIntegration/test_folder_tests.sh` to verify if it works (adding new tests exercising the feature/change which I am working at). Sometimes I limit the scope of tests being run by adding argument to the script like "module" to run only `tests/modules/*` tests.
1. when I'm finished with a change, and I'm preparing commit, I use `make clean && make` to verify the release can be built too, and `make DEBUG=1 clean && make DEBUG=1 coverage` to run full test suite, C++ unit tests and create coverage report (text files in build directory) so I can manually check if everything did change as expected.
1. after this review I commit + push the changes to the repository, where the Cirrus CI setup will try to replicate my local experience in different environments of the CI, if some of these fails, I check the Cirrus logs to see why build failed, and work on the fix commit.
1. when working on small/medium change where I'm sure I can get main repository into "green" state whenever I push changes to github, I tend to work directly on `master` branch, but when experimenting with things with unclear outcome, I use experimental branches, later merging them into `master` when they are ready (or even my fork of the main repository, if the experiment is really just experiment, and I am not even sure if it will ever land in the main repository).
Enjoy!
+72
View File
@@ -0,0 +1,72 @@
# sjasmplus
[![Build Status](https://api.cirrus-ci.com/github/z00m128/sjasmplus.svg)](https://cirrus-ci.com/github/z00m128/sjasmplus/master)
[![GitHub repo size in bytes](https://img.shields.io/github/repo-size/z00m128/sjasmplus.svg)](https://github.com/z00m128/sjasmplus/)
[![BSD 3-Clause License](https://img.shields.io/github/license/z00m128/sjasmplus.svg)](https://github.com/z00m128/sjasmplus/blob/master/LICENSE.md)
[![Coverage Status](https://coveralls.io/repos/github/z00m128/sjasmplus/badge.svg?branch=master)](https://coveralls.io/github/z00m128/sjasmplus?branch=master)
[![CodeQL](https://github.com/z00m128/sjasmplus/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/z00m128/sjasmplus/actions/workflows/codeql-analysis.yml)
[![GNU/Linux](docs/img/linux-logo-24px.png)](https://www.linux.org/)
[![FreeBSD](docs/img/freeBSD-logo-24px.png)](https://www.freebsd.org/)
[![NetBSD](docs/img/NetBSD-logo-24px.png)](https://www.netbsd.org/)
[![Raspberry Pi](docs/img/raspberry-pi-logo-24px.png)](https://www.raspberrypi.org/)
[![macOS](docs/img/apple-logo-24px.png)](https://www.apple.com/lae/macos/)
[![Windows](docs/img/microsoft-windows-logo-24px.png)](https://www.microsoft.com/en-us/windows)
Command-line cross-compiler of assembly language for [Z80 CPU](https://en.wikipedia.org/wiki/Zilog_Z80).
Supports many [ZX-Spectrum](https://en.wikipedia.org/wiki/ZX_Spectrum) specific directives, has built-in Lua scripting engine and 3-pass design.
For GNU/Linux, BSD, Raspberry Pi, macOS and [Windows (click for exe)](https://github.com/z00m128/sjasmplus/releases/latest).
GNU make or CMake [installation methods](INSTALL.md) for your convenience.
Online [documentation](http://z00m128.github.io/sjasmplus/documentation.html) (it is also included in the binary-release zip for offline viewing).
Post issues, feedback, feature requests, etc on [github](https://github.com/z00m128/sjasmplus/issues).
Main Features
=============
* Full source of assembler available under BSD license, modify and extend as you wish
* Z80/R800/Z80N/i8080/LR35902 documented and undocumented opcodes support
* Macro language, defines, array of defines
* Built-in Lua scripting engine
* Conditional assembly, block repeating
* Modules (namespaces), local and temporary labels
* Source and binary file inclusion, include paths
* Multi file output, file updating, various types of exports
* Structures to work easily with structured data in memory (`STRUCT` pseudo-op)
* Relocation data generator to support SymbOS-like relocation of executables
* Virtual device mode for common machines: ZX 128, ZX Next, Amstrad CPC, … (pseudo op `DEVICE`)
* ZX Spectrum specific directives and pseudo ops (SAVESNA, SAVETAP, SAVEHOB, INCHOB, INCTRD…)
* ZX Spectrum Next specific features and directives (Z80N, 8ki memory paging, `SAVENEX`)
* Amstrad CPC 464/6128 specific directives (`SAVECPCSNA`)
* Correctness is assured by Cirrus-CI with 380+ automated tests (that's also 380+ examples of usage!)
* Fake instructions as `LD HL,DE` (`LD H,D:LD L,E`) and more
* Code inlining through colon (`LD A,C:INC A:PUSH AF:IFDEF FX:LD A,D:ENDIF`…)
* Very fast compilation: 1 million lines by 2-3 seconds on modern computer
* Multiline block comments and user’s messages
This repository was created by import from original Aprisobal's repository @ https://sourceforge.net/projects/sjasmplus/.
### Other useful tools for sjasmplus users
Some of these may be useful for sjasmplus users (depending on the platform and tools you are using):
[Support for Z80 macro-assemblers in Visual Studio Code](https://github.com/mborik/z80-macroasm-vscode) - syntax highlighting, "problem matcher" for assembler output, on hover info about labels, symbols, completion proposals,
renaming provider, macro documenter and arguments definitions.
This can be further complemented by [Z80 Assembly meter](https://github.com/theNestruo/z80-asm-meter-vscode) plugin for Visual Studio Code.
[#CSpect](http://cspect.org/) is ZX Spectrum Next emulator with built-in debugger and map-files support to show labels from source code.
[ZEsarUX](https://github.com/chernandezba/zesarux) is multi-machine emulator focusing on ZX Spectrum family of machines, including also ZX Spectrum Next, having many many options, lot of menus, and lot debugging capabilities - if you are particularly interested into ZX Spectrum Next SW development, the #CSpect is often a bit ahead in overall emulation fidelity, but ZEsarUX is often more accurate in subtle edge-case details, so you may want to have both of them around for different occasions. Also you may want to have ZEsarUX around for:
[DeZog - Z80 Debugger (for Visual Studio Code)](https://github.com/maziac/DeZog) for debugging ZX Spectrum code, writing unit tests for it, time the execution, etc.
(if you are not excited about using VSC as IDE and want to try some alternative) Syntax highlight (only)
for [![Kate icon](docs/img/kate-logo-24px.png)Kate editor](https://kate-editor.org/) is
included directly in sjasmplus [sources](https://github.com/z00m128/sjasmplus/blob/master/asm-z80-sj.xml).
--------------------
_All product names, trademarks and registered trademarks are property of their respective owners. All company, product and service names used in this website are for identification purposes only. Use of these names,trademarks and brands does not imply endorsement._
+119
View File
@@ -0,0 +1,119 @@
body {
background-color: #CDF;
}
/********************************/
/* start of styles in block.xsl */
.formalpara-title {
font-weight: bold;
}
div.blockquote-title {
font-weight: bold;
margin-top: 1em;
margin-bottom: 1em;
}
span.msgmain-title {
font-weight: bold;
}
span.msgsub-title {
font-weight: bold;
}
span.msgrel-title {
font-weight: bold;
}
div.msglevel, div.msgorig, div.msgaud {
margin-top: 1em;
margin-bottom: 1em;
}
span.msglevel-title, span.msgorig-title, span.msgaud-title {
font-weight: bold;
}
div.msgexplan {
margin-top: 1em;
margin-bottom: 1em;
}
span.msgexplan-title {
font-weight: bold;
}
/* end of styles in block.xsl */
/********************************/
/********************************/
/* start of styles in autotoc.xsl */
/* end of styles in autotoc.xsl */
/********************************/
/********************************/
/* start of styles in formal.xsl */
div.figure-title {
font-weight: bold;
}
div.example-title {
font-weight: bold;
}
div.equation-title {
font-weight: bold;
}
div.table-title {
font-weight: bold;
}
div.sidebar-title {
font-weight: bold;
}
/* end of styles in formal.xsl */
/********************************/
/********************************/
/* start of styles in verbatim.xsl */
pre.programlisting {
font-family: monospace;
font-size: 1.1em;
white-space: pre;
background: #EEE;
border: 1px solid gray;
padding: 1em;
margin: 1em;
max-width: 80em;
overflow: auto; /* add scrollbar if the listing doesn't fit on screen*/
}
pre.synopsis {
white-space: pre;
font-family: monospace;
overflow: auto; /* add scrollbar if the listing doesn't fit on screen*/
}
div.screen {
white-space: pre;
font-family: monospace;
}
/* end of styles in verbatim.xsl */
/********************************/
/* footnote rule */
hr.footnote-hr {
width: 100;
}
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
View File
Binary file not shown.
+536
View File
@@ -0,0 +1,536 @@
<HTML STYLE="width: {?x}px; height: {?y}px">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<HEAD>
<TITLE>UnrealSpeccy: current key bindings</TITLE>
</HEAD>
<BODY BGCOLOR="Gray" TEXT="white">
<a href="#mainkeys"> </a>
<CENTER> <H1> Emulator keys </H1> </ENTER>
<table border=2>
<tr> <td> <B>{main.exit}</B> </td>
<td> exit emulator </td> </tr>
<tr> <td> <B>{main.settings}</B> </td>
<td> configure emulator </td> </tr>
<tr> <td> <B>{main.lockmouse}</B> </td>
<td> bind mouse in windowed mode to kempston mouse</td> </tr>
<tr> <td> <B>{main.monitor}</B> </td>
<td> enter debugger </td> </tr>
<tr> <td> <B>{main.selectfilter}</B> </td>
<td> select video filter for output </td> </tr>
<tr> <td> <B>{main.selectdriver}</B> </td>
<td> select driver for filters, working through driver </td> </tr>
<tr> <td> <B>{main.flictoggle}</B> </td>
<td> toggle flic/noflic </td> </tr>
<tr> <td> <B>{main.fullscreen}</B> </td>
<td> toggle full-screen on/off (only for GDI, Overlay, or ddraw blitter video modes)</td> </tr>
<tr> <td> <B>{main.pause}</B> </td>
<td> pause </td> </tr>
<tr> <td> <B>{main.selectfix}</B> </td>
<td> select video parameter for tune-up </td> </tr>
<tr> <td> <B>{main.selectsnd}</B> </td>
<td> select sound parameter for tune-up </td> </tr>
<tr> <td> <B>{main.incfix}</B> </td>
<td> increase selected parameter </td> </tr>
<tr> <td> <B>{main.decfix}</B> </td>
<td> decrease selected parameter </td> </tr>
<tr> <td> <B>{main.incfix10}</B> </td>
<td> coarse increase selected parameter </td> </tr>
<tr> <td> <B>{main.decfix10}</B> </td>
<td> coarse decrease selected parameter </td> </tr>
<tr> <td> <B>{main.leds}</B> </td>
<td> toggle on-screen leds</td> </tr>
<tr> <td> <B>{main.status}</B> </td>
<td> toggle status line</td> </tr>
<tr> <td> <B>{main.maxspeed}</B> </td>
<td> toggle max. speed</td> </tr>
<tr> <td> <B>{main.pokedialog}</B> </td>
<td> show poke dialog</td> </tr>
<tr> <td> <B>{main.starttape}</B> </td>
<td> start tape </td> </tr>
<tr> <td> <B>{main.tapebrowser}</B> </td>
<td> show tape browser </td> </tr>
<tr> <td> <B>{main.screenshot}</B> </td>
<td> write screenshot </td> </tr>
<tr> <td> <B>{main.shotclipbrd}</B> </td>
<td> copy screenshot to clipboard </td> </tr>
<tr> <td> <B>{main.reset}</B> </td>
<td> reset to default mode </td> </tr>
<tr> <td> <B>{main.reset128}</B> </td>
<td> reset to 128K </td> </tr>
<tr> <td> <B>{main.resetsys}</B> </td>
<td> reset to service ROM </td> </tr>
<tr> <td> <B>{main.reset48}</B> </td>
<td> reset to 48K </td> </tr>
<tr> <td> <B>{main.resetbasic}</B> </td>
<td> reset to 48K basic with unlocked high memory </td> </tr>
<tr> <td> <B>{main.resetdos}</B> </td>
<td> reset to TR-DOS </td> </tr>
<tr> <td> <B>{main.resetcache}</B> </td>
<td> reset to cache </td> </tr>
<tr> <td> <B>{main.nmi}</B> </td>
<td> generate NMI </td> </tr>
<tr> <td> <B>{main.nmidos}</B> </td>
<td> select TR-DOS and generate NMI (&quotMAGIC&quot button) </td> </tr>
<tr> <td> <B>{main.nmicache}</B> </td>
<td> select cache and generate NMI </td> </tr>
<tr> <td> <B>{main.help}</B> </td>
<td> show this help </td> </tr>
<tr> <td> <B>{main.save}</B> </td>
<td> save disk or memory image </td> </tr>
<tr> <td> <B>{main.load}</B> </td>
<td> load disk or memory image </td> </tr>
<tr> <td> <B>{main.savesound}</B> </td>
<td> start sound recording </td> </tr>
<tr> <td> <B>{main.qsave1}</B> </td>
<td> quick-save to slot 1 </td> </tr>
<tr> <td> <B>{main.qsave2}</B> </td>
<td> quick-save to slot 2 </td> </tr>
<tr> <td> <B>{main.qsave3}</B> </td>
<td> quick-save to slot 3 </td> </tr>
<tr> <td> <B>{main.qload1}</B> </td>
<td> quick-load from slot 1 </td> </tr>
<tr> <td> <B>{main.qload2}</B> </td>
<td> quick-load from slot 2 </td> </tr>
<tr> <td> <B>{main.qload3}</B> </td>
<td> quick-load from slot 3 </td> </tr>
<tr> <td> <B>{main.keystick}</B> </td>
<td> toggle sticky-keys mode </td> </tr>
<tr> <td> <B>{main.autofire}</B> </td>
<td> toggle autofire mode </td> </tr>
<tr> <td> <B>{main.saveram}</B> </td>
<td> save RAM dump </td> </tr>
<tr> <td> <B>{main.saveall}</B> </td>
<td> save CMOS and unsaved diskette images </td> </tr>
<tr> <td> <B>{main.xtkbd}</B> </td>
<td> enable/disable ATM XT keyboard controller (emulation control keys will be disabled in this mode) </td> </tr>
<tr> <td> <B>{main.pastetext}</B> </td>
<td> copy text from clipboard to keyboard buffer </td> </tr>
<tr> <td> <B>{main.memsearch}</B> </td>
<td> search in memory for changed values (cheats, etc) </td> </tr>
<tr> <td> <B>{main.size1}</B> </td>
<td> set normal window size in windowed mode </td> </tr>
<tr> <td> <B>{main.size2}</B> </td>
<td> set double window size in windowed mode </td> </tr>
<tr> <td> <B>{main.sizem}</B> </td>
<td> maximize window in windowed mode </td> </tr>
<tr> <td> <B>{main.tsutoggle}</B> </td>
<td> toggle TSU layers </td> </tr>
</table>
<a href="#monitor_keys"> </a>
<CENTER> <H1> Debugger Keys </H1> </CENTER>
<table border=2>
<tr> <td> <B>{mon.exit}</B> </td>
<td> exit to system </td> </tr>
<tr> <td> <B>{mon.emul}</B> </td>
<td> back to emulation </td> </tr>
<tr> <td> <B>{mon.settigns}</B> </td>
<td> configure emulator </td> </tr>
<tr> <td> <B>{mon.bpdialog}</B> </td>
<td> breakpoints manager </td> </tr>
<tr> <td> <B>{mon.gs}</B> </td>
<td> general sound status dialog </td> </tr>
<tr> <td> <B>{mon.pokedialog}</B> </td>
<td> enter pokes </td> </tr>
<tr> <td> <B>{mon.tapebrowser}</B> </td>
<td> tape browser </td> </tr>
<tr> <td> <B>{mon.reset128}</B> </td>
<td> reset to 128K </td> </tr>
<tr> <td> <B>{main.resetsys}</B> </td>
<td> reset to service ROM </td> </tr>
<tr> <td> <B>{mon.reset48}</B> </td>
<td> reset to 48K </td> </tr>
<tr> <td> <B>{mon.resetbasic}</B> </td>
<td> reset to 48K basic with unlocked high memory </td> </tr>
<tr> <td> <B>{mon.resetdos}</B> </td>
<td> reset to TR-DOS </td> </tr>
<tr> <td> <B>{mon.resetcache}</B> </td>
<td> reset to cache </td> </tr>
<tr> <td> <B>{mon.nmi}</B> </td>
<td> generate NMI </td> </tr>
<tr> <td> <B>{mon.nmidos}</B> </td>
<td> select TR-DOS and generate NMI (&quotMAGIC&quot button) </td> </tr>
<tr> <td> <B>{mon.nmicache}</B> </td>
<td> select cache and generate NMI </td> </tr>
<tr> <td> <B>{mon.help}</B> </td>
<td> show this help </td> </tr>
<tr> <td> <B>{mon.save}</B> </td>
<td> save disk or memory image </td> </tr>
<tr> <td> <B>{mon.load}</B> </td>
<td> load disk or memory image </td> </tr>
<tr> <td> <B>{mon.savesound}</B> </td>
<td> start sound recording </td> </tr>
<tr> <td> <B>{mon.qsave1}</B> </td>
<td> quick-save to slot 1 </td> </tr>
<tr> <td> <B>{mon.qsave2}</B> </td>
<td> quick-save to slot 2 </td> </tr>
<tr> <td> <B>{mon.qsave3}</B> </td>
<td> quick-save to slot 3 </td> </tr>
<tr> <td> <B>{mon.qload1}</B> </td>
<td> quick-load from slot 1 </td> </tr>
<tr> <td> <B>{mon.qload2}</B> </td>
<td> quick-load from slot 2 </td> </tr>
<tr> <td> <B>{mon.qload3}</B> </td>
<td> quick-load from slot 3 </td> </tr>
<tr> <td> <B>{mon.screen}</B> </td>
<td> show spectrum screen, as it present in video memory </td> </tr>
<tr> <td> <B>{mon.altscreen}</B> </td>
<td> show 128K spectrum screen at bank#7 </td> </tr>
<tr> <td> <B>{mon.rayscreen}</B> </td>
<td> show painted screen area until crt-ray (with MC, border & 2-scr effects) </td> </tr>
<tr> <td> <B>{mon.step}</B> </td>
<td> trace single Z80 M1 cycle </td> </tr>
<tr> <td> <B>{mon.stepover}</B> </td>
<td> trace Z80 over loops, calls, etc... </td> </tr>
<tr> <td> <B>{mon.exitsub}</B> </td>
<td> trace until word in (PC) (designed for 'exit routine') </td> </tr>
<tr> <td> <B>{mon.loadblock}</B> </td>
<td> load memory block </td> </tr>
<tr> <td> <B>{mon.saveblock}</B> </td>
<td> save/disasm memory block </td> </tr>
<tr> <td> <B>{mon.fillblock}</B> </td>
<td> fill memory block with pattern </td> </tr>
<tr> <td> <B>{mon.setbank}</B> </td>
<td> write to port #7FFD </td> </tr>
<tr> <td> <B>{mon.sethimem}</B> </td>
<td> write to model-specific extended memory port </td> </tr>
<tr> <td> <B>{mon.next}</B> </td>
<td> next window </td> </tr>
<tr> <td> <B>{mon.prev}</B> </td>
<td> prev. window </td> </tr>
<tr> <td> <B>{mon.dump}</B> </td>
<td> toggle mode of dump window </td> </tr>
<tr> <td> <B>{mon.rip}</B> </td>
<td> activate ripper's tool </td> </tr>
<tr> <td> <B>{mon.osw}</B> </td>
<td> configure on-screen watches </td> </tr>
<tr> <td> <B>{mon.scrshot}</B> </td>
<td> toggle screenshot/screendump/watches </td> </tr>
<tr> <td> <B>{mon.setwatch}</B> </td>
<td> set user-defined watch address </td> </tr>
<tr> <td> <B>{mon.switchay}</B> </td>
<td> switch active AY (turbo-sound) </td> </tr>
<tr> <td> <B>{mon.labels}</B> </td>
<td> goto label </td> </tr>
<tr> <td> <B>{mon.memsearch}</B> </td>
<td> search in memory for changed values (cheats, etc) </td> </tr>
</table>
<CENTER> <H2> Debugger Keys - registers window </H2> </CENTER>
<table border=2>
<tr> <td> <B>{reg.left}</B> </td>
<td> left </td> </tr>
<tr> <td> <B>{reg.right}</B> </td>
<td> right </td> </tr>
<tr> <td> <B>{reg.up}</B> </td>
<td> up </td> </tr>
<tr> <td> <B>{reg.down}</B> </td>
<td> down </td> </tr>
<tr> <td> <B>{reg.edit}</B> </td>
<td> edit current register </td> </tr>
<tr> <td> <B>{reg.a}</B> </td>
<td> edit register 'A' </td> </tr>
<tr> <td> <B>{reg.f}</B> </td>
<td> edit flags </td> </tr>
<tr> <td> <B>{reg.bc}</B> </td>
<td> edit BC </td> </tr>
<tr> <td> <B>{reg.de}</B> </td>
<td> edit DE </td> </tr>
<tr> <td> <B>{reg.hl}</B> </td>
<td> edit HL </td> </tr>
<tr> <td> <B>{reg.pc}</B> </td>
<td> edit PC </td> </tr>
<tr> <td> <B>{reg.sp}</B> </td>
<td> edit SP </td> </tr>
<tr> <td> <B>{reg.ix}</B> </td>
<td> edit IX </td> </tr>
<tr> <td> <B>{reg.iy}</B> </td>
<td> edit IY </td> </tr>
<tr> <td> <B>{reg.i}</B> </td>
<td> edit I </td> </tr>
<tr> <td> <B>{reg.r}</B> </td>
<td> edit R </td> </tr>
<tr> <td> <B>{reg.im}</B> </td>
<td> toggle interrupt mode </td> </tr>
<tr> <td> <B>{reg.iff1}</B> </td>
<td> toggle iff1 </td> </tr>
<tr> <td> <B>{reg.iff2}</B> </td>
<td> toggle iff2 </td> </tr>
<tr> <td> <B>{reg.SF}</B> </td>
<td> toggle flag SF </td> </tr>
<tr> <td> <B>{reg.ZF}</B> </td>
<td> toggle flag ZF </td> </tr>
<tr> <td> <B>{reg.F5}</B> </td>
<td> toggle flag F5 </td> </tr>
<tr> <td> <B>{reg.HF}</B> </td>
<td> toggle flag HF </td> </tr>
<tr> <td> <B>{reg.F3}</B> </td>
<td> toggle flag F3 </td> </tr>
<tr> <td> <B>{reg.PF}</B> </td>
<td> toggle flag PF </td> </tr>
<tr> <td> <B>{reg.NF}</B> </td>
<td> toggle flag NF </td> </tr>
<tr> <td> <B>{reg.CF}</B> </td>
<td> toggle flag CF </td> </tr>
<tr> <td> <B>{reg.codejump}</B> </td>
<td> goto address in code window under cursor </td> </tr>
<tr> <td> <B>{reg.datajump}</B> </td>
<td> goto address in data window under cursor </td> </tr>
</table>
<CENTER> <H2> Debugger Keys - disasm window </H2> </CENTER>
<table border=2>
<tr> <td> <B>{cpu.findpc}</B> </td>
<td> set cursor at PC </td> </tr>
<tr> <td> <B>{cpu.here}</B> </td>
<td> trace to cursor </td> </tr>
<tr> <td> <B>{cpu.findtext}</B> </td>
<td> find string </td> </tr>
<tr> <td> <B>{cpu.findcode}</B> </td>
<td> find code with mask </td> </tr>
<tr> <td> <B>{cpu.goto}</B> </td>
<td> push cursor position and goto address </td> </tr>
<tr> <td> <B>{cpu.bpx}</B> </td>
<td> breakpoint under cursor </td> </tr>
<tr> <td> <B>{cpu.asm}</B> </td>
<td> edit instruction </td> </tr>
<tr> <td> <B>{cpu.setpc}</B> </td>
<td> set PC to cursor </td> </tr>
<tr> <td> <B>{cpu.up}</B> </td>
<td> up </td> </tr>
<tr> <td> <B>{cpu.down}</B> </td>
<td> down </td> </tr>
<tr> <td> <B>{cpu.left}</B> </td>
<td> left </td> </tr>
<tr> <td> <B>{cpu.right}</B> </td>
<td> right </td> </tr>
<tr> <td> <B>{cpu.pgdn}</B> </td>
<td> next page </td> </tr>
<tr> <td> <B>{cpu.pgup}</B> </td>
<td> prev. page </td> </tr>
<tr> <td> <B>{cpu.save1}</B> </td>
<td> save cursor position to slot 1 </td> </tr>
<tr> <td> <B>{cpu.save2}</B> </td>
<td> save cursor position to slot 2 </td> </tr>
<tr> <td> <B>{cpu.save3}</B> </td>
<td> save cursor position to slot 3 </td> </tr>
<tr> <td> <B>{cpu.save4}</B> </td>
<td> save cursor position to slot 4 </td> </tr>
<tr> <td> <B>{cpu.save5}</B> </td>
<td> save cursor position to slot 5 </td> </tr>
<tr> <td> <B>{cpu.save6}</B> </td>
<td> save cursor position to slot 6 </td> </tr>
<tr> <td> <B>{cpu.save7}</B> </td>
<td> save cursor position to slot 7 </td> </tr>
<tr> <td> <B>{cpu.save8}</B> </td>
<td> save cursor position to slot 8 </td> </tr>
<tr> <td> <B>{cpu.rest1}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 1 </td> </tr>
<tr> <td> <B>{cpu.rest2}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 2 </td> </tr>
<tr> <td> <B>{cpu.rest3}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 3 </td> </tr>
<tr> <td> <B>{cpu.rest4}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 4 </td> </tr>
<tr> <td> <B>{cpu.rest5}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 5 </td> </tr>
<tr> <td> <B>{cpu.rest6}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 6 </td> </tr>
<tr> <td> <B>{cpu.rest7}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 7 </td> </tr>
<tr> <td> <B>{cpu.rest8}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 8 </td> </tr>
<tr> <td> <B>{cpu.back}</B> </td>
<td> pop cursor position from jumpstack </td> </tr>
<tr> <td> <B>{cpu.context}</B> </td>
<td> push cursor position and goto instruction operand </td> </tr>
<tr> <td> <B>{cpu.datajump}</B> </td>
<td> jump to instruction operand in data window </td> </tr>
<tr> <td> <B>{cpu.labels}</B> </td>
<td> show labels on/off </td> </tr>
<tr> <td> <B>{cpu.importl}</B> </td>
<td> menu for importing labels from XAS/ALASM </td> </tr>
</table>
<CENTER> <H2> Debugger Keys - memory/disk editor window </H2> </CENTER>
<table border=2>
<tr> <td> <B>{mem.left}</B> </td>
<td> left </td> </tr>
<tr> <td> <B>{mem.right}</B> </td>
<td> right </td> </tr>
<tr> <td> <B>{mem.up}</B> </td>
<td> up </td> </tr>
<tr> <td> <B>{mem.down}</B> </td>
<td> down </td> </tr>
<tr> <td> <B>{mem.pgup}</B> </td>
<td> page up </td> </tr>
<tr> <td> <B>{mem.pgdn}</B> </td>
<td> page down </td> </tr>
<tr> <td> <B>{mem.switch}</B> </td>
<td> move between hex/ascii fields </td> </tr>
<tr> <td> <B>{mem.stline}</B> </td>
<td> goto start of line </td> </tr>
<tr> <td> <B>{mem.endline}</B> </td>
<td> goto end of line </td> </tr>
<tr> <td> <B>{mem.findtext}</B> </td>
<td> find text in memory / disk track </td> </tr>
<tr> <td> <B>{mem.findcode}</B> </td>
<td> find code with mask in memory / disk track </td> </tr>
<tr> <td> <B>{mem.goto}</B> </td>
<td> goto address </td> </tr>
<tr> <td> <B>{mem.mem}</B> </td>
<td> select memory editor </td> </tr>
<tr> <td> <B>{mem.diskphys}</B> </td>
<td> select disk editor (physical track) </td> </tr>
<tr> <td> <B>{mem.disklog}</B> </td>
<td> select disk editor (logical sectors) </td> </tr>
<tr> <td> <B>{mem.diskgo}</B> </td>
<td> select drive/track/sector in diskeditor </td> </tr>
<tr> <td> <B>{mem.pc}</B> </td>
<td> goto PC </td> </tr>
<tr> <td> <B>{mem.sp}</B> </td>
<td> goto SP </td> </tr>
<tr> <td> <B>{mem.bc}</B> </td>
<td> goto BC </td> </tr>
<tr> <td> <B>{mem.de}</B> </td>
<td> goto DE </td> </tr>
<tr> <td> <B>{mem.hl}</B> </td>
<td> goto HL </td> </tr>
<tr> <td> <B>{mem.ix}</B> </td>
<td> goto IX </td> </tr>
<tr> <td> <B>{mem.iy}</B> </td>
<td> goto IY </td> </tr>
</table>
</BODY></HTML>
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
48.rom - оригинальная прошивка от ZX Spectrum 48k
2006.rom - 48k прошивка 2006 года (отличается исправлением багов оригинала) - не для 128 бейсика!
atm103rs.rom - прошивка ATM Turbo 1
xBIOS132+sl.rom - прошивка ATM Turbo 2+
bios_1_07_13 - BIOS 1.07.13 для ATM2+
QC_3_05.rom - Quick Commander (вместо 128 бейсика)
scorp295.rom - старая скорпионовская прошивка 2.95
scorp_prof401.rom - профПЗУ 4.01 для Scorpion (с поддержкой SMUC)
profi.rom - прошивка для Profi
pentagon.rom - стандартная прошивка для pentagon basic 48, basic 128 с пунктом tr-dos в меню
kay1024.rom - прошивка для KAY 1024, 2000, JV Kramis 0.3
kay1024b.rom - прошивка для KAY 1024, 1998, JV Kramis 0.2
trd503.rom - tr-dos 5.03
trd504tm.rom - tr-dos 5.04tm
bootgs.rom - прошивка для ngs (на базе gs1.05a)
ts-bios.rom - BIOS for TS-Configuration (includes: TS BIOS Setup and start code, 128 basic ROM (32 kB), tr-dos 5.04T)
Дополнительные rom (не входят в компект)
48for128.rom - 48k прошивка для 128 бейсика
128tr!.rom - 128k прошивка с TR-DOS'ом наверху
DOS6_10E.rom - TR-DOS с исправленными глюками и поддержкой рамдиска (см. Info Guide #7)
GLUKPEN.rom - Mr Gluk Reset Service 6.5R (фикс для US0.37.1 - дискдоктор по reset+G и номер диска) (см. Info Guide #7)
GLUKATM.rom - версия Глюка для ATM Turbo 2+ (на реале работать не может, нужна для разработки TR-DOS программ под ATM)
+30
View File
@@ -0,0 +1,30 @@
Tests:
- check TheLink Turbo switching for Pentagon config
Bugs:
- Wrong multicolor rendering: truncate tcpu to lower limit of attribute address
- Add WnR=1 to CRAM and SFILE DMA, otherwise ignore
- Incorrect exit from DEBUG in Bomber (paging?)
- Probably incorrect DOS on/off behaviour with regard to RAM at #0000 (MEMCONFIG)
- 3x and 4x renderers on Win7 crash Unreal
Missing features:
- ld a,r and ld a,i tacts not recalculated for Turbo (op_ed.cpp.177 and op_ed.cpp.232)
- leds
- ATM3 wrong palette update in Personal Nightmare demo due to fine ATM3 port decode (PN uses coarse addressing)
- NoFlic (in some renderers)
- VDOS
- other clones full compatibility
- TheLink doesn't compile on TSconf (probably missing #EFF7 features)
To Do:
- Save settings to .ini
- Carry out Debugger into separate window
- Add all models resources to Debugger
- Save .avi using VFW
- Add some workaround for TR-DOS timeouts on 7+ Turbo
- Separate reset() and res_init() procedures
- Add res_init() to SNA load when TS-conf active
X-factors:
- Regular lags/glitches in when Process Explorer ON
+676
View File
@@ -0,0 +1,676 @@
----------------------------------------------------------------------
UnrealSpeccy 0.37.7 by SMT and Others
----------------------------------------------------------------------
contents
1. features
2. system requirements
3. command line
4. keys in emulator
5. bugs and incompatibilities
6. greets
7. license
----------------------------------------------------------------------
features
cpu
Z80: all (un)documented commands and flags
memory
Pentagon 128/512/1024 and 48K ROM
TS-Configuration
Scorpion 256/1024 RAM and 64K ROM
Scorpion PROF-ROM with SMUC support (128/256/512K)
KAY-256/1024 and 64K ROM
ZX Evolution
Profi 1024 RAM/ROM and memory mapper
ATM TURBO 1 v4.50 512/1024 RAM, 64-1024K ROM
ATM TURBO 2+ v7.10 128/512/1024 RAM, 64-1024K ROM
cache 16/32K
CMOS/RTC: russian chip (512Bu1, 64 bytes, 1st day is monday) or
pc-compatible (DALLAS, 256 bytes, 1st day of week is sunday)
SMUC RTC and NVRAM (24LC16)
sound
beeper, tape saving and loading tones
AY-3-8910/YM2149: excellent sound emulation, including digital
and unusual effects, parallel ports on R14/R15 are not emulated
Turbo-AY (Turbo-Sound): two AY(or YM) chips by PoS and NedoPC schemes
TurboSound FM: two YM2203 chips (6 AY channels + 6 FM channels)
also there is 'unreal' (not available in real Spectrum) mode:
playing AY music using digital player - emul plays three sound samples
with volumes and frequencies taken from corresponding AY registers
and 'pseudo-turbo' - two parallel YM chips with some phase shift
two covoxes - Pentagon (port #FB) & Scorpion (port #DD)
SounDrive
saving sound to WAV or VTX (VTX - good format for AY sound, much
more compact than PSG, but you need lha.exe somewhere in %PATH%)
General Sound - FX & MOD player through BASS sound system.
You can save music and listen it in your favourite mod-player
General Sound low level emulation (including internal Z80 on 12MHz,
512Kb onboard memory, internal ports and DACs)
BASS offers higher quality and more sound channels than low-level
emulation. Low-level emulation is useful for programs altering the
firmware player and using second Z80 for their own needs. In general,
use BASS for games, and low-level emulation for advanced sound/music
editors (RIFF tracker)
video
several video drivers, from simple and fastest to complex bi-linear
filtering, that upsamples Spectrum display to 512x384 * 64 colors;
'noflic' filter is specially for programs fast switching two screens
to get more colors;
several chunky filters for 21st century demos
amazing video filter: Anti-Text64. Designed for reading e-zines.
It converts 4x8 fonts to 8x8 or 8x16 on the fly and saves your eyes
multicolors are fixed for Pentagon & Scorpion, 1T screen update
for all border effects
able to emulate scorpion timings, including scorpion border update
nopaper mode for debugging border effects
flash-color (using 128 ink colors with black paper when FLASH bit on)
hi-res modes: Pentagon 512x192, Profi 512x240, ATM
(works with 'double' video filter)
ATM-TURBO color video modes (works with 'double' video filter):
text mode 80x25, EGA mode 320x200, 640x200.
To use custom text-mode font, place your "SGEN.ROM" to unreal directory.
Don't use border=none with ATM video modes
Pentagon 384x304 mode [see ZX-Guide#2, AlCoNews#32]
Pentagon color-per-pixel mode [see Info Guide#8, #9]
hardware multicolor
attribute port #FF
tune-up video/sound with hotkeys
change video settings, such as number of t-states/frame, t-states/line,
fix with grey+, grey-, grey*
t-states/frame is a computer speed, so it's easy to adjust speed in
fast (or slow) games in very wide range for comfortable playing
alt+grey*, grey-, grey+ selects soundchip (AY/YM) and
stereo mode (ABC/ACB), or palette
beta 128 disk interface
implemented all FDC WD1793 commands, including read/format track
traps for read/write sector - more then 256 times speedup
tape
full TAP and TZX support
CSW support
tape browser
auto-start tape when accessing to ROM load routine
fast loading: UnrealSpeccy is able to recognize loader logic
and speed up loader by removing delay loops and edge detection loops.
(Of course, UnrealSpeccy leaves original t-states timing,
so max speed mode must be enabled for fast loading - press NumLock)
With this technique any 128K game may be loaded in 10-20 secs.
I've developed this feature independent from RAMSOFT, but looks like
they used the same idea in RS 0.90.38...
For really fast loading, also choose 'normal' video driver
IDE
UnrealSpeccy is able to use KAY, SCORPION and ATM-2 IDE interfaces with
two devices on it (hard disks or CD-ROMs)
for hard disks you may use image file or Spectrum drive, connected to
computer. CD-ROM requires physical or windows-level emulated device
schemes supported:
Nemo - controller for ZX-BUS manufactured by Nemo and NedoPC
ATM - ATM TURBO 2+ v7.10
Nemo(A8) - Nemo scheme modification: uses A8 instead of A0 to
select high/low byte of 16bit data (easy to
transfer sector with just two commands INIR:INIR)
SMUC - IDE controller for ZS Scorpion
modem
ISA modem, configured to use COM1 ports 03F8-03FF
translated to Spectrum's ports #F8EF-#FFEF.
Modem interrupt (translated to Spectrum NMI) is not emulated
Host computer should have installed windows driver for real modem.
At least ping/dns by Kamil Karimov tested and works fine
with empty 'modem initialization string'
input devices
fully customizable keyboard
copy text from clipboard via emulation of Spectrum keyboard
AY-mouse (KORVET mouse, connected to AY-3-8910/12 port A)
kempston mouse with adjustable speed and swap-buttons option,
mouse wheel included (D7..D4 in buttons' port or UP/DOWN keys)
kempston joystick on keyboard
kempston joystick on mouse (joystick will follow mouse cursor)
mouse wheel and buttons can be bound to any zx keys or kempston
PC joystick/gamepad can be bound to any zx keys or kempston
sticky keys mode [stolen from ZX_Emul, read description there]
autofire (with adjustable key and period)
files
reading:
SP, SNA and Z80 (all versions, 48k and 128k)
TAP, TZX, CSW
FDI, TRD, SCL, TD0, UDI
if disk image does not contain boot.B, it may be appended.
Disk images for every drive may be loaded automatically
at start of UnrealSpeccy
HOBETA format - appends file to existing disk; if no disk, then empty
TR-DOS disk will be created. Best use with command line:
unreal.exe prog.$B prog.$C <- will be placed on same disk
You can also load it from 'F3' dialog, but only by one file
writing:
SNA 48k and 128k
TRD, FDI, UDI
TD0 (saved unpacked, so expect saved file larger than loaded)
SCR, BMP (screenshots)
WAV, VTX
disk images converter:
emulator can open disk image in any format (TRD/TD0/FDI/SCL/UDI)
and save it to any other format
leds
1. AY volume/status. Just for fun. White color - tone, yellow - noise,
green - envelope; also shows YM2203 and GS volumes
2. perfomance leds. One displays how much Z80 t-states is between two
interrupts. While watching some demo you can see how much time
takes one or another effect. Second led shows PC framerate - at
normal speed it must be 50. If it is less, then your CPU is too
slow, and sound may be jerky - try to select faster video driver,
disable some devices, increase skipframe or decrease t-states
per int. When running on max speed, framerate shows how fast you
computer is. For example, 800 fps is 16 times faster than
Spectrum, so average game will load in 20 secs.
3. input led. Shows which input devices are active - keyboard, mouse,
kempston joystick. For keyboard, displays queried keyrows.
One example: I've noticed, that in KOL0BOK2 intro active keyrows
are <B>-<SPACE> and A-G. <SPACE> is an exit, but why program
scans <A>-<G> ? I've pressed <A>, and I saw that now program
queries <Y>-<P>. After pressing A+P, program queries <CAPS>-<V>.
When pressing A+P+X active keyrow areonly <B>-<SPACE>. So, I've
found cheat without digging in program code! (Another way was to
set breakpoint on reading port #FE and analyze code nearby)
4. loading led. When saving/loading from disk, emulator shows
blue or red diskette. When formatting track, yellow disk is
displayed. When loading from tape, emulator displays
cassette picture and progress for current block (or 'PS' - tape
silence)
5. local time - for those ZX Spectrum fans, who spend all their
time with virtual Spectrum
6. on-screen watches - display used RAM and ROM banks in last frame,
count user-defined expressions
7. using leds on AT keyboard to display AY amplitude peaks
leds look strange when flash-color is enabled. It's not a bug
monitor
software that in PC world is called 'debugger', in Spectrum world
is often called 'monitor'
find text or code.
Using mask: code matches when ((code & mask) == (pattern & mask))
unlimited number of code breakpoints
conditional breakpoints of any complexity, uses C-like expression
syntax (with this feature can be easily done: breakpoint on range,
breakpoint to port in and out, on instruction, etc..)
memory access breakpoints (on reading/writing/executing of given memory
areas)
built-in Z80 assembler/disassembler
save-load memory blocks
disk editor
ripper's tool: for ripping routines with their data.
Marks which bytes were read/written, and saves whole 64kb memory,
replacing unreferenced bytes with user-defined byte (default is #CF)
hotkeys to save/restore cursor position in disasm window
hotkeys for location instruction operand in Z80 or dump window
on-screen watches: show memory areas addressed by register pairs
GUI
all settings, that present in INI file, may be changed in GUI
(but will not be saved, for permanent effect edit INI file)
easy entering POKEs, if you don't want to use monitor or use
HEX addresses. Delimiters for numbers are space, comma, colon,
semicolon - so POKEs can be cut'n'pasted from any cheats collection
loading from archives. Now supported: CAB,ZIP,RAR.
You can add your own archivers to INI file
----------------------------------------------------------------------
system requirements
Windows 95 or higher, or NT (not tested).
Windows 2000/XP/2003 are required for real HDD support.
for running UnrealSpeccy you need:
Pentium-166 CPU MMX for basic functionality
Celeron-266 CPU for Profi/Pentagon/ATM/Anti-Text64 hi-res modes
Celeron-400 CPU for GS low-level emulation
UnrealSpeccy eats only 12Mb of RAM, so
if you've started Windows, then memory is enough
2D accelerared video card with hardware support of
video overlays and color keying for overlay modes
3D accelerared video card for hardware chunky bilinear filter
2 Mb of video memory in fullscreen
4 Mb of video memory for windowed mode
16-bit sound card [optional, but recommended]
if you have such hardware, but emulator runs slow, try the
following:
0. install latest directX and videocard drivers
1. increase sound buffer size (especially for Win95) in INI file
2. select video filter='small', video driver='ddraw'
3. disable vsync
4. set 'ShareCPU=0' in INI file
5. do not use General Sound low-level emulation
6. do not use YM2203
7. set 'skipframe=4' in INI file
8. set 'Frame=30000' in INI file (if nothing else does not work)
9. disable sound (without sound emulator runs much faster)
this should help
----------------------------------------------------------------------
command line parameters
/i <file> specify custom INI file, default:
emulator_executable_filename_without_extension.ini
/l <file> specify labels file, default: user.l
/b <file> specify breakpoints file, default: bpx.ini
----------------------------------------------------------------------
keys in emulator
these are default keys, can be changed in INI file
Ctrl-F1 monitor
Shift-ESC only for windowed mode: give mouse to emulator or to MS Windows
Alt-F1 help on keys
F1 options/GUI
F2 write snapshot/disk image
Alt-F2 quicksave to qsave1.sna
Ctrl-F2 quicksave to qsave2.sna
Shift-F2 quicksave to qsave3.sna
F3 read snapshot/tape/disk image
Alt-F3 quickload from qsave1.sna
Ctrl-F3 quickload from qsave2.sna
Shift-F3 quickload from qsave3.sna
(SHIFT+)F4 select video driver (filter)
Alt-F4 exit emulator
F5 start/stop saving sound (WAV or VTX formats).
May be used from monitor: set breakpoint to
start/stop routines and save;
when saving to vtx, start and end silence are wiped
F6 enter POKE(s)
Alt-F6 search in memory for changed values (cheats, etc)
F7 start/stop tape
Shift-F7 tape browser
Alt-F8 screenshot
F9 quicksave all altered disk images and CMOS
Alt-Shift-F11 NMI
Alt-F11 NMI to cache
Ctrl-F11 NMI to TR-DOS ("magic")
F12 reset to default mode, as specified in INI file
Ctrl-Shift-F12 reset to basic-128
Ctrl-F12 reset TR-DOS (128)
Shift-F12 reset to 48 basic, but port 7FFD unlocked
Alt-Shift-F12 reset to 48 basic, port 7FFD locked
Alt-F12 reset to system ROM
Ctrl-Alt-F12 reset to cache
pause/break pause
grey/ leds on/off
grey* select parameter to change: t-states/int (speed), fix, etc...
Alt+grey* select parameter to change: AY/palette
grey+,grey- change sound/video parameter (press with SHIFT for finetuning)
NumLock max speed on/off (no sound on max speed)
Alt-NumLock toggle autofire on/off
Alt-Ctrl-Z toggle ATM XT(AT)-keyboard controller on/off
Alt-Enter toggle full-screen mode
Alt-Shift-Ins copy text from clipboard to keyboard buffer
Alt-1 set window size to 1x scale in windowed mode
Alt-2 set window size to 2x scale, useful for hardware-stretched
modes like overlay and blitter
Alt-3 maximize window
keys in monitor
(CTRL,SHIFT,ALT+)F1,F2,F3,F5,F11,F12 - see above
Ctrl-F1 exit, run program
F7 step
F8 trace, skip calls and loops
F9 show Spectrum screen
Shift-F9 show alternative 128k screen
Alt-F9 show screen until painted point with border, mc and 2-scr
effects
F11 run program until address (SP)
TAB next window
SHIFT-TAB previous window
Alt-D toggle text/hex dump
Alt-B write to port 7FFD (select bank / screen)
Alt-M write to model-specific extended memory port (like
#1FFD,#FDFD,#DFFD,...)
Alt-P enter POKE(s)
Alt-F6 search in memory for changed values (cheats, etc)
Alt-R load memory block from file
Alt-W save memory block to file
Alt-F fill memory block with hex pattern
(note: to copy block, please use save+load)
Alt-G General Sound status (double-click - play sample)
Alt-T ripper's tool
Alt-O configure on-screen watches
Alt-U disasm to file
Alt-S cycle screenshot (ray-painted) / screendump (screen memory) /
watches
Alt-F render current frame to video buffer without border and MC
effects
Ctrl-U set user-defined watch address
Ctrl-L view labels, visible for Z80 in current memory state
Ctrl-J select and go to label
Alt-C breakpoints manager
Alt-Y switch active sound chip in Turbo-Sound mode
manager can handle 3 types of breakpoints:
1. conditional breakpoints and on-screen watches
are using C expression syntax.
operators (in priority order):
() ! ~ M(x) -> * % / + - >> << > < == = <= >= != & ^ | && ||
operands:
a,b,c,d,e,h,l,bc,de,hl - common registers
a',b',c',d',e',h',l',bc',de',hl' - alternative registers
ix,iy,pc,sp,i,r - control registers
FD - memory port #FD (also known as #7FFD)
PG0, PG1, PG2, PG3 - TS-conf page registers for memory windows at #0000, #4000, #8000, #C000
OUT - port used in 'OUT' command (or 0FFFFFFFF when no outs)
IN - port used in 'IN' command (or 0FFFFFFFF when no ins)
VAL - read/written value to port (only meaningful when OUT !=
0FFFFFFFF or IN != 0FFFFFFFF)
RD - address used in memory read operation
WR - address used in memory write operation
MDT - data read/written to memory
numbers - hex, must start with digit: DFFD - wrong, 0DFFD - right
characters - must be enclosed in single quotes ('A','B',etc..)
All calculations use 32-bit unsigned interger arithmetic.
If you are not familiar with C, use brackets as much as possible, due to
non-intuitive operator's precedence, e.g.
out & 0FF == 0FE is treated as 'out & (0FF == 0FE)' <- always 0
M(x) is byte from memory address x (same as x->0)
'=' is an alias for '==' (for Pascal programmers)
examples:
(out+1) | (in+1) - in/out to any port
(in & 8001) == 0 - read keyboard row from <B> to <SPACE>
!(out & 1) - any out to port #FE
(out & 0FF)==0BB && (val==0F3 || val==0F4) - reset General Sound
(out & 0FF)==0FD && (val&7)==3 - set 3rd memory page
(FD & 7) == 3 - the same
M(pc)==0CB && pc->1 >= 10 && pc->1 <= 17
- set break on executing instruction "rl <reg>"
I hope, these examples will be enough to get idea
note: double-click on breakpoint to edit it
2. execution breakpoints (also set in CPU window by pressing SPACE).
In manager window it is easy to setup breakpoint on execution
range like 6000-FFFF
3. breakpoints on reading/writing memory. Similar to execution
breakpoints, but have flags "R" and "W" to issue interrupt on
reading/writing memory address (flags may be set together)
monitor: registers window
Cursor select register
ENTER,0-F change register
Ctrl+A,F,B,D,H,S,P,X,Y,I,R,M,1,2 edit A,F,BC,DE,HL,SP,PC,IX,IY,I,R,IM,IFF1,IFF2
Alt+S,Z,5,H,3,P,N,C toggle flag
' go to value under cursor in CPU window
; go to value under cursor in memory window
monitor: CPU window
F4 trace to cursor
Alt-F7 find text
Ctrl-F7 find code with mask
HOME go to PC
Ctrl-G go to address
SPACE set/reset breakpoint under cursor
ENTER edit Z80 instruction, opcode bytes or cursor address
A-X assemble new Z80 instruction
Z set PC to cursor
Ctrl-1,.,Ctrl-8 save current position to slot 1-8
1-8 save current position to stack, go to saved position in slot 1-8
Backspace restore position from jumpstack
' push cursor position and go to instruction operand
; jump to instruction operand in data window
Ctrl-A reading labels from XAS or ALASM, using 3 methods:
1. XAS7: assembler should be in bank 6 (or bank #46 for Pentagon-512)
2. ALASM: version 4.42-5.0x should be in 128k-memory (pages 1-7)
3. ALASM+STS: STS should be in bank#7 (or bank #47 for Pentagon-512)
monitor: memory window
Alt-F7 find text in memory / disk track
Ctrl-F7 find code with mask in memory / disk track
Cursor,Home,End,PgUp,PgDn move
Ctrl-G go to address
Ctrl-M select memory editor
Ctrl-V select disk editor (physical track)
Ctrl-O select disk editor (logical sectors)
Ctrl-T select disk/track/sector in diskeditor
Ctrl-TAB move to hex/ascii
Ctrl+S,P,B,D,H,X,Y go to SP,PC,BC,DE,HL,IX,IY
other keys edit
monitor: Beta 128 window
here is a typical FDC indicator content
CD:1820
STAT:21
SECT:09
T:01/01
S:3C/00
first line is command and data register (cmd18,data20 - seek track 20)
2nd line - status register
3rd line - sector register
4th line - actual FDD head position and track register
5th line - Beta disk system register and DRQ/INTRQ port
----------------------------------------------------------------------
bugs and incompatibilities
some programs, such as Manic Miner and Lode Runner, require
old 48K ROM (1982.rom), while some other programs require
ZX Spectrum 128 ROM (48for128.rom + 128tr!.rom)
some TR-DOS programs (Unreal Megademo by KSA, Street Fighter)
work only if TR-DOS traps are disabled and all delays enabled
Profi service ROM can work only when all TR-DOS delays are enabled
Bumpy does not work in default configuration, it tries to read port
#FFDF for kempston joystick - so disable kempston mouse before
playing [bug found by Paul Pavlov]
sounddrv=wave does not work with CTSB128PCI (Creative Sound Blaster),
there is a bug in drivers for this card. [bug found by Nuts]
some ABS adventures (ALIEN.SCL, LENIN.SCL) do not work with TR-DOS 5.04TM,
use version 5.03 - it is most compatible [bug found by Paul Pavlov]
Vixen 1,2,3 - incompatible with SounDrive [bug found by Paul Pavlov]
Fernandez - incompatible with SounDrive [bug found by Shadow Maker]
port #FF sometimes is not responding when SkipFrame!=0
(the same to SkipFrameMaxSpeed!=0 and max speed mode)
Scorpion 'MAGIC' generates NMI even if PC < #4000, but shadow
monitor is not designed for this situation and may crash
CacheVox by AlCo requires TR-DOS delays enabled and [BETA128] IL=1
If the emulator after returning of focus seems to have a sticky key,
press Scroll Lock, deactivate blinking key, then press Scroll Lock again.
If emulator control keys work wrong after returning of focus, press Enter,
and keys must go normal.
If emulator hangs with General Sound, try DSPrimary=0.
If emulator crashes with General Sound, try GSType=Z80.
If Kempston Joystick doesn't work, go to menu, press NumLock there,
then return.
In case of bad sound, try DSPrimary=1 (may crash emulator eventually!)
or SoundDrv=wave in .ini.
Screenshots are saved to the emulator directory.
Files to read and write via debugger are situated in a current directory
(which is seen by F3).
Download sys.trd (for drive B:) from http://alonecoder.narod.ru/zx/SYS.rar
Download xBIOS for ATM Turbo2+ from http://atmturbo.nedopc.com/
Get WNASPI32.DLL from Ahead Nero or from Ahead website
BASS.DLL v2.3 was taken from http://www.un4seen.com/
----------------------------------------------------------------------
greetings from SMT:
* dj.Z, IMP and MIC - I enjoyed your music a lot !
* Nik-O and Fatal Snipe - for adherence to ay scene
* Hacker KAY - thanks for most accurate information about AY/YM
* Paul Pavlov - maintainer of largest TR-DOS archive
* Raul Gomez Sanchez (author of R80)
* Stalker - thanks for STS
* Placebo, Extreme, Digital Reality, CBS - for quality demos
* V_Soft (Roman Scherbakov) - for Vortex format
* Sergey Bulba - for AY_Emul
* Alone Coder - you keep Spectrum alive
* Ian Luck - thanks for BASS
* SirX - just a hello
* all ZX Spectrum fans - Speccy is da best!
special thanks to people, who were interested in
UnrealSpeccy's development and sent me info about hard/soft:
* Maxim Vasilyev - sent me many bugreports
* Mac Buster - some info about beta 128 disk interface
* Shiru Otaku - sent me GSPAK.ZIP
* Alexey Kravchenko - Scorpion timing info
* Vitaliy Pigo - testing and benchmarking
* Alex Baskakov - helped me with TD0 format
* Alone Coder - thnx for many info about Pentagon hardware
* Dexus - for integrating YM2203 support
* Maksagor - ATM information
* and many others, who emailed me congratulations/suggestions/etc
----------------------------------------------------------------------
license
UnrealSpeccy is completely freeware. You may use this emulator
and its sources without any restrictions. You may use the
sources in your own emul or to release bugfixed/new versions.
in this case you do not have to release updated source code,
(unlike GNU Public License requires, for example). You may port
emulator to any other platform (but there are many
MSVC-specific language constructions, so it's doubtful that
you can compile it with another compiler)
+710
View File
@@ -0,0 +1,710 @@
----------------------------------------------------------------------
UnrealSpeccy 0.37.7 by SMT and Others
----------------------------------------------------------------------
содержание
1. возможности
2. требования к системе
3. командная строка
4. управляющие клавиши эмулятора
5. несовместимость
6. приветы и благодарности
7. лицензия
----------------------------------------------------------------------
возможности
процессор
Z80: все (не)документированные команды и флаги
модели памяти
Pentagon 128/512/1024 с 64K ПЗУ
TS-Configuration
Scorpion 256/1024 с 64K ПЗУ
Scorpion ПрофПЗУ с поддержкой SMUC (128/256/512K)
KAY-256/1024 с 64K ПЗУ
ZX Evolution
Profi 1024 ОЗУ/ПЗУ с memory mapper'ом
ATM TURBO 1 v4.50 512/1024 ОЗУ, 64-1024K ПЗУ
ATM TURBO 2+ v7.10 128/512/1024 ОЗУ, 64-1024K ПЗУ
кэш 16/32K
CMOS/часы(RTC):
советская микросхема (512ВИ1, 64 байта, 1-й день - понедельник) или
микросхема из IBM PC (DALLAS, 256 байт, 1-й день - воскресенье)
часы и энергонезависимое ОЗУ (NVRAM) (24LC16) контроллера SMUC
звук
бипер и звук магнитофона
AY-3-8910/YM2149: точная эмуляция, включая цифровой звук
и нестандартные эффекты, но параллельные порты на R14/R15 не эмулируются
Turbo-AY (Turbo-Sound): 2 микросхемы AY(или YM) по схеме PoS или NedoPC
TurboSound FM: 2 микросхемы YM2203 (6 AY каналов + 6 FM каналов)
режим 'use digital samples' (отсутствующий на реальном Спектруме):
AY-музыка через цифровой плейер - играются три сэмпла
с громкостями и частотами из соответствующих регистров AY
режим 'pseudo-turbo': 2 запараллеленных микросхемы YM со сдвигом по фазе
два ковокса - Pentagon (порт #FB) и Scorpion (порт #DD)
SounDrive
запись звука в WAV или VTX (VTX - хороший формат для AY звука, гораздо
плотнее, чем PSG, но для него требуется lha.exe где-либо в %PATH%)
General Sound - плейер MOD и звуковых эффектов через библиотеку BASS.
Можно сохранить музыку, чтобы затем слушать её во внешнем плейере
низкоуровневая эмуляция General Sound (внутренний Z80 на 12MHz,
512Kb внутреннего ОЗУ, внутренние порты и ЦАПы)
BASS даёт более высокое качество и больше каналов, чем низкоуровневая
эмуляция. Низкоуровневая эмуляция нужна для программ, подменяющих
фирменный плейер и использующих Z80 для своих целей. На практике
BASS рекомендуется для игр, а низкоуровневая эмуляция - для продвинутых
музыкальных/звуковых редакторов (RIFF tracker)
графика
множество фильтров, от быстрого simple до билинейной
фильтрации, масштабирующей спектрумовское изображение до 512x384
с 64 цветами;
фильтр 'noflic' для программ, которые быстро переключают два экрана,
чтобы получить больше цветов;
несколько чанковых фильтров для демок XIX века
замечательный фильтр 'Anti-Text64'. Предназначен для чтения прессы.
На лету заменяет шрифты 4x8 на более приятные для глаз шрифты 8x8 и 8x16
настройки Pentagon и Scorpion для мультиколорных эффектов,
причём бордер обновляется с точностью до такта
для эмуляции скорпионовских бордерных эффектов имеется режим
обновления бордера раз в 4 такта
режим nopaper для отладки бордерных эффектов
flash-color (в каждом знакоместе при включенном бите FLASH можно выбрать
один из 128 цветов ink на чёрном фоне)
режимы высокого разрешения: Pentagon 512x192, Profi 512x240, ATM
(работают только с фильтром 'double')
цветные видеорежимы ATM-TURBO (только с фильтром 'double'):
текстовый 80x25, EGA 320x200, мультиколор 640x200.
Для смены шрифта текстового режима поместите SGEN.ROM в папку unreal.
Не включайте border=none в видеорежимах ATM
режим 384x304 компьютера Pentagon [см. ZX-Guide#2, AlCoNews#32]
режим "цвет на точку" компьютера Pentagon [см. Info Guide#8, #9]
аппаратный мультиколор
порт атрибутов #FF
настройка графики и звука горячими клавишами
параметры графики (число тактов в кадре и в строке) выбираются и
настраиваются клавишами grey+, grey-, grey* на цифровой клавиатуре
t-states/frame (число тактов в кадре) позволяет подобрать скорость
в слишком быстрых (или слишком медленных) играх
комбинации alt+grey*, grey-, grey+ выбирают звуковой сопроцессор (AY/YM)
и стереорежим (ABC/ACB), или же палитру
дисковый интерфейс Beta 128
все команды контроллера ВГ93 (WD1793), включая чтение/запись дорожки
перехват чтения/записи секторов - ускорение более чем в 256 раз
магнитофон
полная поддержка TAP и TZX
поддержка CSW
выбор файла (tape browser)
автозапуск ленты при обращении к стандартной процедуре чтения
быстрая загрузка: UnrealSpeccy может распознать логику загрузчика
и ускорить его путём пропуска циклов задержек и ожидания фронтов.
Разумеется, UnrealSpeccy при этом не сбивает тайминги,
так что для быстрой загрузки требуется включить max speed (NumLock).
Таким образом, любую 128K игру можно загрузить за 10-20 секунд.
Эта хитрость разработана независимо от RAMSOFT, но похоже, что
RS 0.90.38 работает аналогичным образом.
Для действительно быстрой загрузки включите видеофильтр 'normal'
IDE
UnrealSpeccy эмулирует IDE-интерфейсы компьютеров KAY, SCORPION и ATM-2
с двумя устройствами типа жёсткий диск/CD-ROM
вместо реальных жёстких дисков можно использовать файл-образы.
CD-ROM эмулируется через реальное устройство или через виртуальное,
работающее на уровне операционной системы
эмулируемые схемы:
Nemo - контроллер для шины ZX-BUS, производившийся Nemo и NedoPC
ATM - ATM TURBO 2+ v7.10
Nemo(A8) - изменение схемы Nemo: использует A8 вместо A0, чтобы
выбирать старший/младший байт 16-разрядного слова (можно
считать сектор двумя командами INIR:INIR)
SMUC - IDE-контроллер для компьютера ZS Scorpion
модем
Внутренний ISA-модем, настроенный на COM1 (порты 03F8-03FF,
транслируемые на спектрумовские порты #F8EF-#FFEF).
Прерывание от модема (NMI на Спектруме) не эмулируется.
Требуется установить драйвер модема в Windows.
Программа ping by Kamil Karimov проверена и работает
при пустой строке инициализации модема (modem initialization string)
устройства ввода
полностью настраиваемая клавиатура
вставка текста из буфера обмена через эмуляцию спектрумовской клавиатуры
AY-mouse (мышь от КОРВЕТа, подключённая к порту A звукового сопроцессора)
kempston mouse с настраиваемой скоростью и опцией обмена кнопок,
с поддержкой колеса (D7..D4 в порту кнопок либо как клавиши UP/DOWN)
kempston joystick на клавиатуре
kempston joystick на мыши (джойстик следует за курсором мыши)
колесо и кнопки мыши можно привязать к любым клавишам
клавиатуры Спектрума или кемпстон-джойстика
джойстик для PC можно привязать к любым клавишам
клавиатуры Спектрума или кемпстон-джойстика
режим залипших клавиш (sticky keys) [взято из ZX_Emul, см. его описание]
autofire (настраиваемая клавиша, настраиваемый период)
файлы
читаются:
SP, SNA и Z80 (все версии, 48k и 128k)
TAP, TZX, CSW
FDI, TRD, SCL, TD0, UDI
если образ диска не содержит boot.B,
можно его автоматически добавлять.
Можно использовать загрузку образов дисков для
каждого из дисководов при запуске эмулятора
формат HOBETA - файл добавляется на существующий диск;
если нет диска, создаётся пустой TR-DOS диск.
Удобно грузить из командной строки:
unreal.exe prog.$B prog.$C <- будут помещены на один диск
Можно грузить хобетные файлы через меню 'F3',
но только по одному файлу
записываются:
SNA 48k и 128k
TRD, FDI, UDI
TD0 (записывается без сжатия, поэтому записанный файл, скорее всего,
будет больше считанного)
SCR, BMP (скриншоты)
WAV, VTX
преобразование форматов:
эмулятор может открыть образ диска в одном из форматов
(TRD/TD0/FDI/SCL/UDI) и записать его в другом формате
индикаторы
1. громкость/состояние AY. Белый цвет - тон, жёлтый - шум,
зелёный - огибающая; также отображаются громкости YM2203 и GS
2. индикаторы performance. Один показывает, сколько тактов Z80
прошло между двумя прерываниями. При просмотре демонстраций можно
увидеть, сколько времени занимает тот или иной эффект. Второе число -
частота кадров PC - на нормальной скорости должно быть 50.
Если оно меньше, то ваш компьютер слишком медленный, и вы слышите
искажённый звук. Выберите более быстрый видеодрайвер и фильтр,
отключите какие-нибудь устройства, увеличьте skipframe или убавьте
t-states per int. При прогоне на max speed частота кадров показывает,
насколько ваш компьютер быстр. Например, 800 fps - это в 16 раз
быстрее, чем Spectrum, и средняя игра загрузится за 20 секунд.
3. индикатор input. Показывает, какие устройства ввода опрашиваются -
клавиатура, мышь, кемпстон-джойстик. Для клавиатуры показываются
опрашиваемые полуряды. Пример: я заметил, что в интро к KOL0BOK2
активны полуряды <B>-<SPACE> и A-G. <SPACE> - это выход, но почему
программа опрашивает <A>-<G>? Я нажал <A> и увидел, что теперь
программа опрашивает <Y>-<P>. После нажатия A+P программа опрашивает
<CAPS>-<V>. После нажатия A+P+X активным остаётся только полуряд
<B>-<SPACE>. Получается, что я нашёл cheat без залезания в код!
(Можно было поставить breakpoint на чтение порта #FE и анализировать
код в этом районе)
4. индикатор loading. При записи/чтении диска эмулятор показывает
синюю/красную дискету. При форматировании дорожки дискета жёлтая.
При загрузке с магнитофона эмулятор показывает кассету и прогресс
считывания текущего блока (или 'PS' - пауза в записи)
5. local time - часы для тех, что проводит всё своё время с
виртуальным Спектрумом
6. on-screen watches - показывает банки ОЗУ и ПЗУ, использованные
в последнем кадре; вычисляет выражения, определённые пользователем
7. можно использовать лампочки на AT клавиатуре в качестве индикаторов
громкости AY каналов
индикаторы необычно окрашиваются в режиме flash-color. Это не глюк
монитор-отладчик
программа, называемая в мире PC "дебаггером", в мире Spectrum часто
носит название "монитор"
поиск текста или кода.
Использует маску: совпадение, когда ((code & mask) == (pattern & mask))
неограниченное число точек останова (breakpoints)
остановы по условию (conditional breakpoints) любой сложности,
используют Си-подобный синтаксис (через них можно реализовать останов
по чтению или записи в порт определённого значения, по определённой
команде процессора и т.п.)
остановы по обращению к памяти (по чтению/записи/исполнению указанных
областей памяти)
встроенный ассемблер/дизассемблер Z80
сохранение-загрузка областей памяти
редактор образа диска (диск-доктор)
ripper's tool: для извлечения процедур с их данными. Показывает, какие
байты были считаны/записаны, и сохраняет всё адресное пространство
процессора, забивая неиспользованные адреса указанным байтом
(по умолчанию #CF)
горячие клавиши сохранения/восстановления положения курсора в окне
дизассемблера
горячие клавиши перехода по адресу, указанному в команде - в окно
дизассемблера или в окно дампа
on-screen watches: показывают области памяти, адресованные
регистровыми парами
графический интерфейс (GUI)
все настройки, имеющиеся в INI-файле, можно изменять в GUI
(но они не сохраняются, для постоянного изменения редактируйте INI-файл)
легко вводимые POKE, если вы не хотите использовать монитор или
шестнадцатеричную систему счисления. Разделители чисел - пробел,
запятая, двоеточие, точка с запятой - так что можно копировать POKE
прямо из коллекций cheat'ов
чтение из архивов. Поддержаны: CAB,ZIP,RAR.
Можете добавить свои архиваторы в INI файле
----------------------------------------------------------------------
требования к системе
Windows 95 и выше, либо NT (не проверялось).
Для работы с реальным HDD требуется Windows 2000/XP/2003.
для работы UnrealSpeccy требуется:
Pentium-166 CPU MMX для минимального функционирования
Celeron-266 CPU для режимов высокого разрешения
Profi/Pentagon/ATM/Anti-Text64
Celeron-400 CPU для низкоуровневой эмуляции GS
UnrealSpeccy занимает всего 12Mb ОЗУ, так что
если Windows запустился, то памяти хватает
видеокарта с 2D ускорителем, поддерживающая video overlays и
color keying for overlay modes
видеокарта с 3D ускорителем для hardware chunky bilinear filter
2 Mb видеопамяти в полноэкранном режиме (fullscreen)
4 Mb видеопамяти в оконном режиме (windowed)
16-битная звуковая карта [не обязательна, но рекомендуется]
Если вы имеете соответствующее железо, но эмулятор тормозит,
то попробуйте следующее:
0. установите свежий directX и свежие дрова видеокарты
1. увеличьте размер sound buffer (особенно для Win95) в INI-файле
2. выберите video filter='small', video driver='ddraw'
3. отключите vsync
4. установите 'ShareCPU=0' в INI-файле
5. отключите низкоуровневую эмуляцию General Sound
6. отключите YM2203
7. установите 'skipframe=4' в INI-файле
8. установите 'Frame=30000' в INI-файле
(если больше ничего не помогает)
9. отключите звук (без звука эмулятор работает значительно быстрее)
Это должно помочь
----------------------------------------------------------------------
параметры командной строки
можно запускать эмулятор, указав следующие параметры командной строки:
/i <файл> указать собственный файл конфигурации, по умолчанию:
имя_исполняемого_файла_эмулятора_без_расширения.ini
/l <файл> указать файл меток, по умолчанию: user.l
/b <файл> указать файл ловушек, по умолчанию: bpx.ini
кроме того после параметров можно указать список файлов, поддерживаемых
эмулятором форматов для загрузки.
----------------------------------------------------------------------
управляющие клавиши эмулятора
перечислены клавиши по умолчанию, их можно сменить в INI-файле
Ctrl-F1 монитор-отладчик
Shift-ESC для оконного режима: отдать мышь эмулятору или системе
Alt-F1 помощь по клавишам
F1 настройки/GUI
F2 записать снапшот/образ диска
Alt-F2 записать снапшот qsave1.sna
Ctrl-F2 записать снапшот qsave2.sna
Shift-F2 записать снапшот qsave3.sna
F3 загрузить снапшот/образ ленты/образ диска
Alt-F3 загрузить снапшот qsave1.sna
Ctrl-F3 загрузить снапшот qsave2.sna
Shift-F3 загрузить снапшот qsave3.sna
(SHIFT+)F4 выбрать видеодрайвер (фильтр)
Alt-F4 выход из эмулятора
F5 начать/закончить сохранение звука (WAV или VTX).
Можно использовать из монитора: установите точки останова на
начальных/конечных процедурах и записывайте;
при записи vtx убираются паузы в начале и конце
F6 ввести POKE (одно или много)
Alt-F6 поиск изменённых значений в памяти (для cheat'ов и т.п.)
F7 запустить/остановить ленту
Shift-F7 выбор файла на ленте (tape browser)
Alt-F8 записать скриншот
F9 сохранить все изменённые образы диска и содержимое CMOS-часов
Alt-Shift-F11 NMI
Alt-F11 NMI в кэш
Ctrl-F11 NMI в TR-DOS ("magic")
F12 сброс в режиме по умолчанию, указанном в INI
Ctrl-Shift-F12 сброс в 128 бейсик
Ctrl-F12 сброс в TR-DOS (128)
Shift-F12 сброс в 48 бейсик с открытой верхней памятью
Alt-Shift-F12 сброс в 48 бейсик в режиме 48k
Alt-F12 сброс в системную страницу ПЗУ
Ctrl-Alt-F12 сброс в кэш
pause/break пауза
grey/ индикаторы on/off
grey* выбор параметра для изменения: t-states/int (скорость), fix...
Alt+grey* выбор параметра для изменения: AY/палитра
grey+,grey- настройка выбранного параметра (с SHIFT'ом более тонкая)
NumLock максимальная скорость (max speed) on/off (в max speed нет звука)
Alt-NumLock autofire on/off
Alt-Ctrl-Z on/off контроллер клавиатуры XT(AT) компьютера ATM
Alt-Enter полноэкранный режим on/off
Alt-Shift-Ins вставить текст из буфера обмена через эмуляцию клавиатуры Спектрума
Alt-1 установить размер окна 1x в оконном режиме
Alt-2 установить размер окна 2x, полезно для режимов, использующих
графический ускоритель, таких как overlay и blitter
Alt-3 максимизировать окно
клавиши в мониторе-отладчике
(CTRL,SHIFT,ALT+)F1,F2,F3,F5,F11,F12 - см. выше
Ctrl-F1 выход из монитора в программу
F7 шаг (выполнить одну команду процессора)
F8 шаг без трассировки подпрограмм и циклов
F9 показать экран Спектрума
Shift-F9 показать неактивный экран 128k Спектрума
Alt-F9 показать экран до текущей отрисованной точки, с бордером,
мультиколорами и двухэкранными эффектами
F11 запустить программу с остановом в точке (SP)
TAB следующая панель
SHIFT-TAB предыдущая панель
Alt-D переключение текст/дамп
Alt-B изменить значение в порту 7FFD (выбор банка / экрана)
Alt-M изменить значение дополнительного порта памяти (#1FFD,#FDFD,#DFFD,...)
Alt-P ввести POKE (одно или много)
Alt-F6 поиск изменённых значений в памяти (для cheat'ов и т.п.)
Alt-R загрузить область памяти из файла
Alt-W записать область памяти в файл
Alt-F заполнить область памяти указанной последовательностью
(чтобы скопировать область памяти, запишите её, потом загрузите)
Alt-G состояние General Sound (двойной щелчок мышью - играть сэмпл)
Alt-T выдиралка процедур (ripper's tool)
Alt-O настройка on-screen watches
Alt-U дизассемблирование в файл
Alt-S переключение скриншот (отрисованный с мультиколорами и т.п.) /
дамп экрана (изображение экранной памяти) / watches
Alt-F отрендерить текущий кадр в видеобуфер без мультиколорных
эффектов и т.п.
Ctrl-U установить произвольный адрес для watch
Ctrl-L показ меток, видимых для Z80 в текущем состоянии диспетчера памяти
Ctrl-J переход по меткам
Alt-C менеджер точек останова (breakpoints)
Alt-Y переключить активный звуковой сопроцессор в режиме Turbo-Sound
менеджер точек останова оперирует тремя типами точек останова:
1. условные остановы (conditional breakpoints) и on-screen watches
используют Си-подобный синтаксис выражений.
операции (перечислены в порядке убывания приоритета):
() ! ~ M(x) -> * % / + - >> << > < == = <= >= != & ^ | && ||
операнды:
a,b,c,d,e,h,l,bc,de,hl - основной набор регистров
a',b',c',d',e',h',l',bc',de',hl' - альтернативный набор регистров
ix,iy,pc,sp,i,r - прочие регистры
FD - порт памяти #FD (также известен как #7FFD)
PG0, PG1, PG2, PG3 - регистры страниц для TS-conf для окон #0000, #4000, #8000, #C000
OUT - порт, использованный в команде OUT (или 0FFFFFFFF, если OUT не было)
IN - порт, использованный в команде IN (или 0FFFFFFFF, если IN не было)
VAL - значение, считанное/записанное в порт (имеет смысл, только
если OUT или IN != 0FFFFFFFF)
RD - адрес памяти из которого производилось чтение
WR - адрес памяти в который производилась запись
MDT - значение, считанное/записанное в память
числа - шестнадцатеричные, должны начинаться с цифры: DFFD - нельзя, 0DFFD - можно
коды символов - заключаются в апострофы ('A','B' и т.п.)
Все вычисления производятся в 32-битной беззнаковой целой арифметике.
Если вы плохо знакомы с Си, ставьте скобки, где возможно,
т.к. приоритет операций неинтуитивен, например:
out & 0FF == 0FE понимается как 'out & (0FF == 0FE)' <- всегда 0
M(x) - байт, считанный из адреса x (можно записать как x->0)
'=' - то же, что '==' (для паскалистов)
Примеры:
(out+1) | (in+1) - IN/OUT в любой порт
(in & 8001) == 0 - чтение клавиш от <B> до <SPACE>
!(out & 1) - любой вывод в порт #FE
(out & 0FF)==0BB && (val==0F3 || val==0F4) - сброс General Sound
(out & 0FF)==0FD && (val&7)==3 - установка 3-й банки памяти
(FD & 7) == 3 - то же самое
M(pc)==0CB && pc->1 >= 10 && pc->1 <= 17
- останавливается во время выполнения команды RL <reg>
Надеюсь, этих примеров достаточно для понимания идеи
Чтобы редактировать точку останова, щёлкните на ней мышью два раза
2. точки останова по адресам (также ставятся в окне дизассемблера кнопкой
"пробел"). В окне менеджера точек останова легко расставить точки
останова на большой диапазон памяти, например, 6000-FFFF
3. остановы по чтению/записи памяти. Похожи на остановы по адресам,
но имеют флаги "R" и "W", означающие останов по чтению/записи
указанных адресов памяти (можно установить оба флага)
монитор: окно регистров
стрелки выбор регистра
ENTER,0-F изменение значения регистра
Ctrl+A,F,B,D,H,S,P,X,Y,I,R,M,1,2
изменить A,F,BC,DE,HL,SP,PC,IX,IY,I,R,IM,IFF1,IFF2
Alt+S,Z,5,H,3,P,N,C
переключить соответствующий флаг
' перейти в панель дизассемблера к адресу под курсором
; перейти в панель дампа к адресу под курсором
монитор: панель дизассемблера (CPU window)
F4 выполнение программы до адреса под курсором
Alt-F7 поиск текста
Ctrl-F7 поиск кодов с учётом маски
HOME перейти на адрес PC
Ctrl-G перейти на указанный адрес
SPACE установить/снять точку останова под курсором
ENTER редактировать команду Z80, её код или текущий адрес
A-X ввести команду Z80
Z установить PC на адрес под курсором
Ctrl-1,.,Ctrl-8 запомнить адрес курсора в спецячейку 1..8
1-8 запомнить адрес курсора в спецстеке и перейти к адресу,
ранее запомненному в спецячейке 1..8
Backspace вернуть курсор по запомненному в спецстеке адресу
' запомнить адрес курсора в спецстеке и перейти в панели
дизассемблера к адресу, указанному в команде под курсором
; перейти из панели дизассемблера в панель дампа
к адресу, указанному в команде под курсором
Ctrl-A чтение меток из XAS или ALASM, используя 3 метода:
1. XAS7: ассемблер должен лежать в банке 6 (или #46 для Pentagon-512)
2. ALASM: версия 4.42-5.0x должна лежать в 128k памяти (банки 1-7)
3. ALASM+STS: STS должен лежать в банке 7 (или #47 для Pentagon-512)
монитор: окно дампа (memory window)
Alt-F7 поиск текста в памяти / дорожке диска
Ctrl-F7 поиск кодов с учётом маски в памяти / дорожке диска
стрелки,Home,End,PgUp,PgDn движение курсора
Ctrl-G перейти на указанный адрес
Ctrl-M включить редактирование памяти
Ctrl-V включить редактирование диска (физической дорожки)
Ctrl-O включить редактирование диска (логических секторов)
Ctrl-T выбор диска/дорожки/сектора при редактировании диска
Ctrl-TAB переход между дампом и текстом
Ctrl+S,P,B,D,H,X,Y перейти по адресу SP,PC,BC,DE,HL,IX,IY
прочие клавиши редактирование
монитор: панель дискового интерфейса Beta 128
здесь обычный набор индикаторов дискового контроллера
CD:1820
STAT:21
SECT:09
T:01/01
S:3C/00
первая строка - команда и регистр данных (1820 - переход к дорожке #20)
2-я - регистр состояния (status)
3-я - регистр сектора
4-я - реальное положение головки дисковода и содержимое регистра дорожки
5-я - системный регистр Beta disk и порт для чтения DRQ/INTRQ (порт #ff)
----------------------------------------------------------------------
несовместимость
некоторые программы, такие как Manic Miner и Lode Runner, требуют
старое 48K ПЗУ (1982.rom), некоторые другие требуют ПЗУ от
ZX Spectrum 128 (48for128.rom + 128tr!.rom)
некоторые TR-DOS программы (Unreal Megademo by KSA, Street Fighter)
работают только если перехват процедур TR-DOS (TR-DOS traps) выключен
и включены задержки (delays)
сервисное ПЗУ Profi работает только при включенных задержках TR-DOS
Bumpy не работает в конфигурации по умолчанию, т.к. пытается читать
кемпстон-джойстик через порт #FFDF - выключайте kempston mouse перед
запуском этой игры [bug found by Paul Pavlov]
sounddrv=wave не работает на CTSB128PCI (Creative Sound Blaster)
из-за глюка в драйверах этой звуковой карты. [bug found by Nuts]
некоторые адвентюры, созданные в ABS (ALIEN.SCL, LENIN.SCL) не работают на
TR-DOS 5.04TM, используйте версию 5.03 - самую совместимую [bug found by Paul Pavlov]
Vixen 1,2,3 - несовместимы с SounDrive [bug found by Paul Pavlov]
Fernandez - несовместимо с SounDrive [bug found by Shadow Maker]
port #FF иногда не отвечает при SkipFrame!=0
(то же самое при SkipFrameMaxSpeed!=0 в режиме max speed)
Кнопка 'MAGIC' на компьютере Scorpion генерирует NMI даже при PC < #4000,
но теневой монитор не рассчитан на это и может сглючить
CacheVox by AlCo требует включения TR-DOS задержек и [BETA128] IL=1
Если в эмуляторе после возвращения фокуса залипает клавиша, следует нажать
Scroll Lock, деактивировать мерцающую клавишу, потом снова нажать
Scroll Lock.
Если в эмуляторе после возвращения фокуса неадекватно работают управляющие
клавиши, следует нажать Enter, и работа клавиш исправится.
Если эмулятор виснет при работе с General Sound, попробуйте DSPrimary=0.
Если эмулятор вываливается при работе с General Sound, попробуйте GSType=Z80.
Если Kempston Joystick не работает, войдите в меню, нажмите там NumLock,
затем вернитесь из меню.
Если звук плохой, попробуйте в .ini DSPrimary=1 (эмулятор может при этом
неожиденно закрываться!) или SoundDrv=wave.
Скриншоты кладутся в каталог эмулятора.
Чтение-запись файла в отладчике - в текущем каталоге (который видно по F3).
Качайте sys.trd (для дисковода B:) с http://alonecoder.narod.ru/zx/SYS.rar
Качайте xBIOS для ATM Turbo2+ с http://atmturbo.nedopc.com/
Возьмите WNASPI32.DLL из Ahead Nero или с веб-сайта Ahead
BASS.DLL v2.3 взят с http://www.un4seen.com/
----------------------------------------------------------------------
приветы от SMT:
* dj.Z, IMP и MIC - мне очень нравится ваша музыка !
* Nik-O и Fatal Snipe - за верность AY сцене
* Hacker KAY - спасибо за самую точную информацию про AY/YM
* Paul Pavlov - собрал самый (сейчас уже не самый) большой TR-DOS архив
* Raul Gomez Sanchez (автор R80)
* Stalker - спасибо за STS
* Placebo, Extreme, Digital Reality, CBS - за качественные демки
* V_Soft (Roman Scherbakov) - за формат Vortex
* Sergey Bulba - за AY_Emul
* Alone Coder - you keep Spectrum alive
* Ian Luck - спасибо за BASS
* SirX - просто привет
* всем фанатам ZX Spectrum - Speccy is da best!
особая благодарность людям, заинтересованным в развитии UnrealSpeccy и
присылавшим информацию о железе и софте:
* Maxim Vasilyev - присылал много багрепортов
* Mac Buster - информация про дисковый интерфейс Beta 128
* Shiru Otaku - прислал GSPAK.ZIP
* Alexey Kravchenko - прислал скорпионовские тайминги
* Vitaliy Pigo - тестирование и замеры скорости
* Alex Baskakov - помог с форматом TD0
* Alone Coder - прислал много информации о пентагоновском железе
* Dexus - интегрировал поддержку YM2203
* Maksagor - информация про ATM
* многие другие, кто присылал письма с благодарностями/предложениями и т.п.
----------------------------------------------------------------------
лицензия
UnrealSpeccy распространяется совершенно свободно. Вы можете
использовать эмулятор и его исходники без всяких ограничений.
Вы можете использовать исходники UnrealSpeccy в своих эмуляторах.
Вы можете выпускать исправленные/новые версии UnrealSpeccy.
В этом случае вы не обязаны распространять исходный код (в отличие,
например, от требований GNU Public License).
Вы можете портировать эмулятор на любую другую платформу
(но здесь много специфических для MSVC конструкций языка,
поэтому сборка другим компилятором затруднительна)
Binary file not shown.
+537
View File
@@ -0,0 +1,537 @@
<HTML STYLE="width: {?x}px; height: {?y}px">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<HEAD>
<TITLE>UnrealSpeccy: current key bindings</TITLE>
</HEAD>
<BODY BGCOLOR="Gray" TEXT="white">
<a href="#mainkeys"> </a>
<CENTER> <H1> Emulator keys </H1> </ENTER>
<table border=2>
<tr> <td> <B>{main.exit}</B> </td>
<td> exit emulator </td> </tr>
<tr> <td> <B>{main.settings}</B> </td>
<td> configure emulator </td> </tr>
<tr> <td> <B>{main.lockmouse}</B> </td>
<td> bind mouse in windowed mode to kempston mouse</td> </tr>
<tr> <td> <B>{main.monitor}</B> </td>
<td> enter debugger </td> </tr>
<tr> <td> <B>{main.selectfilter}</B> </td>
<td> select video filter for output </td> </tr>
<tr> <td> <B>{main.selectdriver}</B> </td>
<td> select driver for filters, working through driver </td> </tr>
<tr> <td> <B>{main.flictoggle}</B> </td>
<td> toggle flic/noflic </td> </tr>
<tr> <td> <B>{main.fullscreen}</B> </td>
<td> toggle full-screen on/off (only for GDI, Overlay, or ddraw blitter video modes)</td> </tr>
<tr> <td> <B>{main.pause}</B> </td>
<td> pause </td> </tr>
<tr> <td> <B>{main.selectfix}</B> </td>
<td> select video parameter for tune-up </td> </tr>
<tr> <td> <B>{main.selectsnd}</B> </td>
<td> select sound parameter for tune-up </td> </tr>
<tr> <td> <B>{main.incfix}</B> </td>
<td> increase selected parameter </td> </tr>
<tr> <td> <B>{main.decfix}</B> </td>
<td> decrease selected parameter </td> </tr>
<tr> <td> <B>{main.incfix10}</B> </td>
<td> coarse increase selected parameter </td> </tr>
<tr> <td> <B>{main.decfix10}</B> </td>
<td> coarse decrease selected parameter </td> </tr>
<tr> <td> <B>{main.leds}</B> </td>
<td> toggle on-screen leds</td> </tr>
<tr> <td> <B>{main.status}</B> </td>
<td> toggle status line</td> </tr>
<tr> <td> <B>{main.maxspeed}</B> </td>
<td> toggle max. speed</td> </tr>
<tr> <td> <B>{main.pokedialog}</B> </td>
<td> show poke dialog</td> </tr>
<tr> <td> <B>{main.starttape}</B> </td>
<td> start tape </td> </tr>
<tr> <td> <B>{main.tapebrowser}</B> </td>
<td> show tape browser </td> </tr>
<tr> <td> <B>{main.screenshot}</B> </td>
<td> write screenshot </td> </tr>
<tr> <td> <B>{main.reset}</B> </td>
<td> reset to default mode </td> </tr>
<tr> <td> <B>{main.reset128}</B> </td>
<td> reset to 128K </td> </tr>
<tr> <td> <B>{main.resetsys}</B> </td>
<td> reset to service ROM </td> </tr>
<tr> <td> <B>{main.reset48}</B> </td>
<td> reset to 48K </td> </tr>
<tr> <td> <B>{main.resetbasic}</B> </td>
<td> reset to 48K basic with unlocked high memory </td> </tr>
<tr> <td> <B>{main.resetdos}</B> </td>
<td> reset to TR-DOS </td> </tr>
<tr> <td> <B>{main.resetcache}</B> </td>
<td> reset to cache </td> </tr>
<tr> <td> <B>{main.nmi}</B> </td>
<td> generate NMI </td> </tr>
<tr> <td> <B>{main.nmidos}</B> </td>
<td> select TR-DOS and generate NMI (&quotMAGIC&quot button) </td> </tr>
<tr> <td> <B>{main.nmicache}</B> </td>
<td> select cache and generate NMI </td> </tr>
<tr> <td> <B>{main.help}</B> </td>
<td> show this help </td> </tr>
<tr> <td> <B>{main.save}</B> </td>
<td> save disk or memory image </td> </tr>
<tr> <td> <B>{main.load}</B> </td>
<td> load disk or memory image </td> </tr>
<tr> <td> <B>{main.savesound}</B> </td>
<td> start sound recording </td> </tr>
<tr> <td> <B>{main.qsave1}</B> </td>
<td> quick-save to slot 1 </td> </tr>
<tr> <td> <B>{main.qsave2}</B> </td>
<td> quick-save to slot 2 </td> </tr>
<tr> <td> <B>{main.qsave3}</B> </td>
<td> quick-save to slot 3 </td> </tr>
<tr> <td> <B>{main.qload1}</B> </td>
<td> quick-load from slot 1 </td> </tr>
<tr> <td> <B>{main.qload2}</B> </td>
<td> quick-load from slot 2 </td> </tr>
<tr> <td> <B>{main.qload3}</B> </td>
<td> quick-load from slot 3 </td> </tr>
<tr> <td> <B>{main.keystick}</B> </td>
<td> toggle sticky-keys mode </td> </tr>
<tr> <td> <B>{main.autofire}</B> </td>
<td> toggle autofire mode </td> </tr>
<tr> <td> <B>{main.saveram}</B> </td>
<td> save RAM dump </td> </tr>
<tr> <td> <B>{main.saveall}</B> </td>
<td> save CMOS and unsaved diskette images </td> </tr>
<tr> <td> <B>{main.xtkbd}</B> </td>
<td> enable/disable ATM XT keyboard controller (emulation control keys will be disabled in this mode) </td> </tr>
<tr> <td> <B>{main.pastetext}</B> </td>
<td> copy text from clipboard to keyboard buffer </td> </tr>
<tr> <td> <B>{main.memsearch}</B> </td>
<td> search in memory for changed values (cheats, etc) </td> </tr>
<tr> <td> <B>{main.size1}</B> </td>
<td> set normal window size in windowed mode </td> </tr>
<tr> <td> <B>{main.size2}</B> </td>
<td> set double window size in windowed mode </td> </tr>
<tr> <td> <B>{main.sizem}</B> </td>
<td> maximize window in windowed mode </td> </tr>
<tr> <td> <B>{main.tsutoggle}</B> </td>
<td> toggle TSU layers </td> </tr>
</table>
<a href="#monitor_keys"> </a>
<CENTER> <H1> Debugger Keys </H1> </CENTER>
<table border=2>
<tr> <td> <B>{mon.exit}</B> </td>
<td> exit to system </td> </tr>
<tr> <td> <B>{mon.emul}</B> </td>
<td> back to emulation </td> </tr>
<tr> <td> <B>{mon.settigns}</B> </td>
<td> configure emulator </td> </tr>
<tr> <td> <B>{mon.bpdialog}</B> </td>
<td> breakpoints manager </td> </tr>
<tr> <td> <B>{mon.gs}</B> </td>
<td> general sound status dialog </td> </tr>
<tr> <td> <B>{mon.pokedialog}</B> </td>
<td> enter pokes </td> </tr>
<tr> <td> <B>{mon.tapebrowser}</B> </td>
<td> tape browser </td> </tr>
<tr> <td> <B>{mon.reset128}</B> </td>
<td> reset to 128K </td> </tr>
<tr> <td> <B>{main.resetsys}</B> </td>
<td> reset to service ROM </td> </tr>
<tr> <td> <B>{mon.reset48}</B> </td>
<td> reset to 48K </td> </tr>
<tr> <td> <B>{mon.resetbasic}</B> </td>
<td> reset to 48K basic with unlocked high memory </td> </tr>
<tr> <td> <B>{mon.resetdos}</B> </td>
<td> reset to TR-DOS </td> </tr>
<tr> <td> <B>{mon.resetcache}</B> </td>
<td> reset to cache </td> </tr>
<tr> <td> <B>{mon.nmi}</B> </td>
<td> generate NMI </td> </tr>
<tr> <td> <B>{mon.nmidos}</B> </td>
<td> select TR-DOS and generate NMI (&quotMAGIC&quot button) </td> </tr>
<tr> <td> <B>{mon.nmicache}</B> </td>
<td> select cache and generate NMI </td> </tr>
<tr> <td> <B>{mon.help}</B> </td>
<td> show this help </td> </tr>
<tr> <td> <B>{mon.save}</B> </td>
<td> save disk or memory image </td> </tr>
<tr> <td> <B>{mon.load}</B> </td>
<td> load disk or memory image </td> </tr>
<tr> <td> <B>{mon.savesound}</B> </td>
<td> start sound recording </td> </tr>
<tr> <td> <B>{mon.qsave1}</B> </td>
<td> quick-save to slot 1 </td> </tr>
<tr> <td> <B>{mon.qsave2}</B> </td>
<td> quick-save to slot 2 </td> </tr>
<tr> <td> <B>{mon.qsave3}</B> </td>
<td> quick-save to slot 3 </td> </tr>
<tr> <td> <B>{mon.qload1}</B> </td>
<td> quick-load from slot 1 </td> </tr>
<tr> <td> <B>{mon.qload2}</B> </td>
<td> quick-load from slot 2 </td> </tr>
<tr> <td> <B>{mon.qload3}</B> </td>
<td> quick-load from slot 3 </td> </tr>
<tr> <td> <B>{mon.screen}</B> </td>
<td> show spectrum screen, as it present in video memory </td> </tr>
<tr> <td> <B>{mon.altscreen}</B> </td>
<td> show 128K spectrum screen at bank#7 </td> </tr>
<tr> <td> <B>{mon.rayscreen}</B> </td>
<td> show painted screen area until crt-ray (with MC, border & 2-scr effects) </td> </tr>
<tr> <td> <B>{mon.step}</B> </td>
<td> trace single Z80 M1 cycle </td> </tr>
<tr> <td> <B>{mon.stepover}</B> </td>
<td> trace Z80 over loops, calls, etc... </td> </tr>
<tr> <td> <B>{mon.exitsub}</B> </td>
<td> trace until word in (PC) (designed for 'exit routine') </td> </tr>
<tr> <td> <B>{mon.loadblock}</B> </td>
<td> load memory block </td> </tr>
<tr> <td> <B>{mon.saveblock}</B> </td>
<td> save/disasm memory block </td> </tr>
<tr> <td> <B>{mon.fillblock}</B> </td>
<td> fill memory block with pattern </td> </tr>
<tr> <td> <B>{mon.setbank}</B> </td>
<td> write to port #7FFD </td> </tr>
<tr> <td> <B>{mon.sethimem}</B> </td>
<td> write to model-specific extended memory port </td> </tr>
<tr> <td> <B>{mon.next}</B> </td>
<td> next window </td> </tr>
<tr> <td> <B>{mon.prev}</B> </td>
<td> prev. window </td> </tr>
<tr> <td> <B>{mon.dump}</B> </td>
<td> toggle mode of dump window </td> </tr>
<tr> <td> <B>{mon.rip}</B> </td>
<td> activate ripper's tool </td> </tr>
<tr> <td> <B>{mon.osw}</B> </td>
<td> configure on-screen watches </td> </tr>
<tr> <td> <B>{mon.scrshot}</B> </td>
<td> toggle watches/screendump </td> </tr>
<tr> <td> <B>{mon.scrshot_alt}</B> </td>
<td> toggle main\alt screen in screendump window </td> </tr>
<tr> <td> <B>{mon.setwatch}</B> </td>
<td> set user-defined watch address </td> </tr>
<tr> <td> <B>{mon.switchay}</B> </td>
<td> switch active AY (turbo-sound) </td> </tr>
<tr> <td> <B>{mon.labels}</B> </td>
<td> goto label </td> </tr>
<tr> <td> <B>{mon.memsearch}</B> </td>
<td> search in memory for changed values (cheats, etc) </td> </tr>
</table>
<CENTER> <H2> Debugger Keys - registers window </H2> </CENTER>
<table border=2>
<tr> <td> <B>{reg.left}</B> </td>
<td> left </td> </tr>
<tr> <td> <B>{reg.right}</B> </td>
<td> right </td> </tr>
<tr> <td> <B>{reg.up}</B> </td>
<td> up </td> </tr>
<tr> <td> <B>{reg.down}</B> </td>
<td> down </td> </tr>
<tr> <td> <B>{reg.edit}</B> </td>
<td> edit current register </td> </tr>
<tr> <td> <B>{reg.a}</B> </td>
<td> edit register 'A' </td> </tr>
<tr> <td> <B>{reg.f}</B> </td>
<td> edit flags </td> </tr>
<tr> <td> <B>{reg.bc}</B> </td>
<td> edit BC </td> </tr>
<tr> <td> <B>{reg.de}</B> </td>
<td> edit DE </td> </tr>
<tr> <td> <B>{reg.hl}</B> </td>
<td> edit HL </td> </tr>
<tr> <td> <B>{reg.pc}</B> </td>
<td> edit PC </td> </tr>
<tr> <td> <B>{reg.sp}</B> </td>
<td> edit SP </td> </tr>
<tr> <td> <B>{reg.ix}</B> </td>
<td> edit IX </td> </tr>
<tr> <td> <B>{reg.iy}</B> </td>
<td> edit IY </td> </tr>
<tr> <td> <B>{reg.i}</B> </td>
<td> edit I </td> </tr>
<tr> <td> <B>{reg.r}</B> </td>
<td> edit R </td> </tr>
<tr> <td> <B>{reg.im}</B> </td>
<td> toggle interrupt mode </td> </tr>
<tr> <td> <B>{reg.iff1}</B> </td>
<td> toggle iff1 </td> </tr>
<tr> <td> <B>{reg.iff2}</B> </td>
<td> toggle iff2 </td> </tr>
<tr> <td> <B>{reg.SF}</B> </td>
<td> toggle flag SF </td> </tr>
<tr> <td> <B>{reg.ZF}</B> </td>
<td> toggle flag ZF </td> </tr>
<tr> <td> <B>{reg.F5}</B> </td>
<td> toggle flag F5 </td> </tr>
<tr> <td> <B>{reg.HF}</B> </td>
<td> toggle flag HF </td> </tr>
<tr> <td> <B>{reg.F3}</B> </td>
<td> toggle flag F3 </td> </tr>
<tr> <td> <B>{reg.PF}</B> </td>
<td> toggle flag PF </td> </tr>
<tr> <td> <B>{reg.NF}</B> </td>
<td> toggle flag NF </td> </tr>
<tr> <td> <B>{reg.CF}</B> </td>
<td> toggle flag CF </td> </tr>
<tr> <td> <B>{reg.codejump}</B> </td>
<td> goto address in code window under cursor </td> </tr>
<tr> <td> <B>{reg.datajump}</B> </td>
<td> goto address in data window under cursor </td> </tr>
</table>
<CENTER> <H2> Debugger Keys - disasm window </H2> </CENTER>
<table border=2>
<tr> <td> <B>{cpu.findpc}</B> </td>
<td> set cursor at PC </td> </tr>
<tr> <td> <B>{cpu.here}</B> </td>
<td> trace to cursor </td> </tr>
<tr> <td> <B>{cpu.findtext}</B> </td>
<td> find string </td> </tr>
<tr> <td> <B>{cpu.findcode}</B> </td>
<td> find code with mask </td> </tr>
<tr> <td> <B>{cpu.goto}</B> </td>
<td> push cursor position and goto address </td> </tr>
<tr> <td> <B>{cpu.bpx}</B> </td>
<td> breakpoint under cursor </td> </tr>
<tr> <td> <B>{cpu.asm}</B> </td>
<td> edit instruction </td> </tr>
<tr> <td> <B>{cpu.setpc}</B> </td>
<td> set PC to cursor </td> </tr>
<tr> <td> <B>{cpu.up}</B> </td>
<td> up </td> </tr>
<tr> <td> <B>{cpu.down}</B> </td>
<td> down </td> </tr>
<tr> <td> <B>{cpu.left}</B> </td>
<td> left </td> </tr>
<tr> <td> <B>{cpu.right}</B> </td>
<td> right </td> </tr>
<tr> <td> <B>{cpu.pgdn}</B> </td>
<td> next page </td> </tr>
<tr> <td> <B>{cpu.pgup}</B> </td>
<td> prev. page </td> </tr>
<tr> <td> <B>{cpu.save1}</B> </td>
<td> save cursor position to slot 1 </td> </tr>
<tr> <td> <B>{cpu.save2}</B> </td>
<td> save cursor position to slot 2 </td> </tr>
<tr> <td> <B>{cpu.save3}</B> </td>
<td> save cursor position to slot 3 </td> </tr>
<tr> <td> <B>{cpu.save4}</B> </td>
<td> save cursor position to slot 4 </td> </tr>
<tr> <td> <B>{cpu.save5}</B> </td>
<td> save cursor position to slot 5 </td> </tr>
<tr> <td> <B>{cpu.save6}</B> </td>
<td> save cursor position to slot 6 </td> </tr>
<tr> <td> <B>{cpu.save7}</B> </td>
<td> save cursor position to slot 7 </td> </tr>
<tr> <td> <B>{cpu.save8}</B> </td>
<td> save cursor position to slot 8 </td> </tr>
<tr> <td> <B>{cpu.rest1}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 1 </td> </tr>
<tr> <td> <B>{cpu.rest2}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 2 </td> </tr>
<tr> <td> <B>{cpu.rest3}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 3 </td> </tr>
<tr> <td> <B>{cpu.rest4}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 4 </td> </tr>
<tr> <td> <B>{cpu.rest5}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 5 </td> </tr>
<tr> <td> <B>{cpu.rest6}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 6 </td> </tr>
<tr> <td> <B>{cpu.rest7}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 7 </td> </tr>
<tr> <td> <B>{cpu.rest8}</B> </td>
<td> push cursor position to jumpstack and restore cursor position from slot 8 </td> </tr>
<tr> <td> <B>{cpu.back}</B> </td>
<td> pop cursor position from jumpstack </td> </tr>
<tr> <td> <B>{cpu.context}</B> </td>
<td> push cursor position and goto instruction operand </td> </tr>
<tr> <td> <B>{cpu.datajump}</B> </td>
<td> jump to instruction operand in data window </td> </tr>
<tr> <td> <B>{cpu.labels}</B> </td>
<td> show labels on/off </td> </tr>
<tr> <td> <B>{cpu.importl}</B> </td>
<td> menu for importing labels from XAS/ALASM </td> </tr>
</table>
<CENTER> <H2> Debugger Keys - memory/disk editor window </H2> </CENTER>
<table border=2>
<tr> <td> <B>{mem.left}</B> </td>
<td> left </td> </tr>
<tr> <td> <B>{mem.right}</B> </td>
<td> right </td> </tr>
<tr> <td> <B>{mem.up}</B> </td>
<td> up </td> </tr>
<tr> <td> <B>{mem.down}</B> </td>
<td> down </td> </tr>
<tr> <td> <B>{mem.pgup}</B> </td>
<td> page up </td> </tr>
<tr> <td> <B>{mem.pgdn}</B> </td>
<td> page down </td> </tr>
<tr> <td> <B>{mem.switch}</B> </td>
<td> move between hex/ascii fields </td> </tr>
<tr> <td> <B>{mem.stline}</B> </td>
<td> goto start of line </td> </tr>
<tr> <td> <B>{mem.endline}</B> </td>
<td> goto end of line </td> </tr>
<tr> <td> <B>{mem.findtext}</B> </td>
<td> find text in memory / disk track </td> </tr>
<tr> <td> <B>{mem.findcode}</B> </td>
<td> find code with mask in memory / disk track </td> </tr>
<tr> <td> <B>{mem.goto}</B> </td>
<td> goto address </td> </tr>
<tr> <td> <B>{mem.mem}</B> </td>
<td> select memory editor </td> </tr>
<tr> <td> <B>{mem.diskphys}</B> </td>
<td> select disk editor (physical track) </td> </tr>
<tr> <td> <B>{mem.disklog}</B> </td>
<td> select disk editor (logical sectors) </td> </tr>
<tr> <td> <B>{mem.diskgo}</B> </td>
<td> select drive/track/sector in diskeditor </td> </tr>
<tr> <td> <B>{mem.pc}</B> </td>
<td> goto PC </td> </tr>
<tr> <td> <B>{mem.sp}</B> </td>
<td> goto SP </td> </tr>
<tr> <td> <B>{mem.bc}</B> </td>
<td> goto BC </td> </tr>
<tr> <td> <B>{mem.de}</B> </td>
<td> goto DE </td> </tr>
<tr> <td> <B>{mem.hl}</B> </td>
<td> goto HL </td> </tr>
<tr> <td> <B>{mem.ix}</B> </td>
<td> goto IX </td> </tr>
<tr> <td> <B>{mem.iy}</B> </td>
<td> goto IY </td> </tr>
</table>
</BODY></HTML>
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1117
View File
File diff suppressed because it is too large Load Diff