Add OPL4 playback and analyzer support
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
|
||||
..\..\tools\robimg\robimg.exe -p="wc.img" -s=102400 -C="..\..\soft\wc\exe"
|
||||
|
||||
pause
|
||||
Binary file not shown.
@@ -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!
|
||||
@@ -0,0 +1,72 @@
|
||||
# sjasmplus
|
||||
[](https://cirrus-ci.com/github/z00m128/sjasmplus/master)
|
||||
[](https://github.com/z00m128/sjasmplus/)
|
||||
[](https://github.com/z00m128/sjasmplus/blob/master/LICENSE.md)
|
||||
[](https://coveralls.io/github/z00m128/sjasmplus?branch=master)
|
||||
[](https://github.com/z00m128/sjasmplus/actions/workflows/codeql-analysis.yml)
|
||||
[](https://www.linux.org/)
|
||||
[](https://www.freebsd.org/)
|
||||
[](https://www.netbsd.org/)
|
||||
[](https://www.raspberrypi.org/)
|
||||
[](https://www.apple.com/lae/macos/)
|
||||
[](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 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._
|
||||
@@ -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.
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.
Binary file not shown.
@@ -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 ("MAGIC" 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 ("MAGIC" 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
@@ -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)
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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.
@@ -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 ("MAGIC" 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 ("MAGIC" 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
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user