A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 770 lines 26 kB view raw
1 2 * * * * * * * * * * * * * * * 3 * * 4 * S P E C T E M U * 5 * * 6 * Version 0.94 * 7 * * 8 * * * * * * * * * * * * * * * 9 10 11This package contains a 48k ZX-Spectrum emulator for Linux and other 12UNIX operating systems, with full Z80 instruction set, comprehensive 13screen, sound and tape emulation, and snapshot file saving and 14loading. It can run on a Linux console, or in an X11 window. 15 16The program is free software and is copyrighted under the GNU General 17Public License. It comes with absolutely no warranty. See the file 18COPYING for details. 19 20Written by Miklos Szeredi 21Email: mszeredi@inf.bme.hu 22 23It can be downloaded by FTP from: 24 tsx-11.mit.edu:/pub/linux/ALPHA/spectemu/spectemu-0.94.tar.gz 25or 26 sunsite.unc.edu:/pub/Linux/system/emulators/zx/spectemu-0.94.tar.gz 27 28For news and updates have a look at the Spectemu Page: 29 http://www.inf.bme.hu/~mszeredi/spectemu/ 30 31 32You can also join a mailing list (at the Spectemu Page), to receive a 33notice when new versions of spectemu are available. 34 35 36Table of contents 37================= 38 39 1. Requirements 40 41 2. Recommended 42 43 3. Features 44 45 4. Drawbacks 46 47 5. Compiling and installation 48 49 6. Using the emulator 50 51 6.1 Command line arguments and configuration files (NEW) 52 53 6.2 Using the Spectrum keyboard 54 55 6.3 Keys that control the emulator 56 57 6.4 Effects of changing frame frequency and sound buffer size 58 59 7. Where can I get ZX Spectrum games for this emulator 60 61 8. Tape files 62 63 8.1 Loading a tape file 64 65 8.2 Quick loading of tape files 66 67 8.3 Saving to a tape file 68 69 8.4 Saving a tape file to real tape 70 71 8.5 Making a tape file from a real tape 72 73 9. Bug reports 74 75 10. Credits 76 77 781. Requirements 79=============== 80 81Linux or other UNIX OS. 82Color X11 server (depths 8, 16 and 32 bits are supported) 83 and/or 84SVGALIB console graphics library on Linux. 85 862. Recommended 87============== 88 89A sound-card on Linux for wonderful spectrum 1-bit sound. And well, a 90fast enough processor... (Especially for the X11 version.) 91 923. Features 93=========== 94 95 - Very fast because of assembly code in emulation (only on Intel 96 processors). 97 98 - Emulation also in C, which is slower, but supports any processor. 99 100 - X support (with MITSHM if available, optionally double size window) 101 102 - Linux console graphics (with SVGALIB) 103 104 - Sound support (through Linux kernel sound-card driver, 105 or SUN sound drivers) 106 107 - Snapshot saving and loading (.Z80 and .SNA format) 108 109 - Tape emulation: loading from tape files (.TAP and .TZX format) 110 111 - Optional quick loading of tapes. 112 113 - Saving to tape files. 114 115 - Separate utility to save tape files to real tape 116 117 - Configurable with config files and from command line 118 1194. Drawbacks 120============ 121 122 - Poor user interface 123 124See the file TODO for a list of things which still need to be done (Maybe 125by YOU) 126 1275. Compiling and installation 128============================= 129 130To install the precompiled Linux executables just run 'make install' 131as root. 132 133To recompile the programs on other platforms first type 134 135 ./configure 136 137This tries to determine the system type and parameters. Probably you 138won't have to give any options to configure, but here is the list of 139the most important options: 140 141 --help Print a full list of options 142 143 --prefix=PREFIX Install files under PREFIX (default is /usr/local) 144 Executables go under PREFIX/bin, ... 145 146 --without-readline Do not use the readline library (default is to 147 use it if it's available on your system) 148 149 --without-i386asm Do not use the Intel assembly code (default is 150 to use it, if your system is Intel based) 151 152You may want to have a look at the produced `Makefile' and `config.h'. 153Then just type 154 155 make clean 156 make 157 158Then to install the program, login as root, and run 159 160 make install 161 162(If you want to compile on another machine be sure to `make realclean' 163before re-configuring and re-making the program!) 164 165At the moment, there are two executable programs for running the emulator: 166 167 xspect the X11 version 168 vgaspect the Linux console version 169 170'vgaspect' uses the SVGALIB library. If you do not have this installed 171on your system 'vgaspect' cannot be started. You _MUST_ have SVGALIB 172version 1.2.10 or greater installed, and it is STRONGLY recommended, 173that you get version 1.2.11 or later! 174 175SVGALIB is available at: 176sunsite.unc.edu:/pub/Linux/libs/graphics/ 177 178If you have SVGALIB version 1.2.11 or later, the emulator can run in 179background when you switch virtual consoles. 180 1816. Using the emulator 182===================== 183 184After starting 'xspect' or 'vgaspect' you should get the '(C) 1982 Sinclair 185Research Ltd' message, and after pressing a key, the flashing cursor. If 186not, then all I can say, is hard luck to you (if you are ambitious, compile 187the programs with debug information, and try to figure out what is causing 188the problem). Do not start the emulator processes in the background, the 189terminal is needed when loading or saving files. 190 191To load a snapshot immediately after the start of the emulator, you 192can enter the name of the snapshot file on the command line. (Also see 193section 6.1) 194 195E.g. 196 197xspect snap/chuckie2 198 199In X you can resize the window. Window size can only be a multiple of 200the smallest window size (320x256). Smaller window means faster 201emulation, so if emulation doesn't run at full speed, try making the 202window smaller. 203 2046.1 Command line arguments and configuration files 205-------------------------------------------------- 206 207You can give options to Spectemu in three different ways: 208 209 1) In a configuration file (either ~/.spectemurc, or 210 /usr/local/share/spectemu/spectemu.cfg) 211 212 2) With the X Resource Database (.Xdefaults), this applies only to 'xspect' 213 214 3) On the command line 215 216Most of the options are common to all three methods, only the syntax 217differs slightly. Here are examples of the different syntax: 218 219Config File: 220 scale = 1 221 private-map = true 222 sound = false 223 color-type = grayscale 224 225.Xdefaults: 226 xspect.scale: 1 227 xspect.privateMap: true 228 xspect.sound: false 229 xspect.colorType: grayscale 230 231Command line: 232 xspect -scale 1 -private-map -no-sound -color-type grayscale 233 234List of common options: 235~~~~~~~~~~~~~~~~~~~~~~~ 236 237 NAME RANGE DEFAULT DESCRIPTION 238 ---- ----- ------- ----------- 239 240 frame-skip 1... 2 The smaller this is, the more 241 often the screen is updatated 242 243 scale 1..4 2 Window size of 'xspect' 244 245 private-map yes/no no Use private colormap in 'xspect' 246 247 mit-shm yes/no yes Use MIT-SHM extension in X server 248 if available 249 250 vga-mode 320x200 320x240 Resolution to use in 'vgaspect', 251 320x240 320x200 is faster (but not so nice) 252 253 sound yes/no yes Spectrum sound, if availble 254 255 sound-delay 1... 4 The amount of frames (1/50 seconds) 256 to delay sound. See section 6.4 257 258 sound-device filename (system The name of the sound device 259 dependent) 260 261 sound-sample-rate 4000... ~15625 Sample rate of sound device 262 263 sound-autoclose yes/no yes Whether to close sound device when 264 unused (so other programs can use it) 265 266 sound-dsp-setfrag yes/no yes Set this to 'no' if you use PCSND 267 sound driver 268 269 keyboard-type extended extended Specifies the mapping of the keys, 270 spectrum from the PC keyboard to the spectrum 271 compat keys. See section 6.2 272 custom 273 274 cursor-type shifted shifted How to use the arrow keys on the 275 raw PC keyboard. See section 6.2 276 joystick 277 278 allow-ascii yes/no yes Interpret other keys on the PC 279 keyboard. See section 6.2 280 281 true-shift <modif>* alt Modifier to get shifted symbol 282 as on the PC. 283 284 func_shift <modif>* control Modifier to get control functions. 285 286 color-type normal normal What type of colors to use. Gray- 287 grayscale scale looks better on monochrome 288 custom displays. 289 290 pause-on-iconify yes/no no Whether to pause emulator, when it 291 is iconified ('xspect' only) 292 293 vga-pause-bg yes/no no Whether to pasue emulator, when you 294 switch to a different console 295 296 quick-load yes/no no Use built in (quick) loader for 297 tapefiles. 298 299 auto-stop yes/no no Pause tape after each segment when 300 quick loading. 301 302 load-immed yes/no no Load tapefile immediately (as if 303 you typed LOAD "" / ENTER) 304 305 pause yes/no no Pause the emulator on startup 306 307 308* <modif> can be one of: none, shift, lock, control, alt, 309 mod2, mod3, mod4, mod5 310 311Extra command line parameters: 312~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 313 314On the command line you may also use the following options: 315 316 -help Prints usage information, and a list of available 317 options 318 319 -version Prints out the version 320 321 322Also on the command line, a snapshot file and/or a tapefile can be 323specified. Spectemu figures out the type of file from the extension. 324You can omit the extension, e.g. you have a snapshot file 'snap.z80' 325and you start spectemu with 'xspect snap', then it will add the '.z80' 326extension. 327 328You can specify what type is the file by preceding it with one of 329'-z80', '-sna', '-tap' or '-tzx' options. This is useful for cases, 330when the filename does not have an extension (e.g. automatic starting 331with the midnight commander). 332 333Extra config file options: 334~~~~~~~~~~~~~~~~~~~~~~~~~~ 335 336Color configuration 337''''''''''''''''''' 338You can configure the custom colors in the config files (and the X 339Resource Database) with: 340 341 color[0..15] = R G B 342 343e.g. 344 345 color-type = custom 346 347 color0 = 10 20 30 348 color7 = 40 50 60 349 350changes the 0-th (black) and the 7-th (white) colors. 351 352Keyboard configuration 353'''''''''''''''''''''' 354You can set custom key bindings in the config file: 355 356 Key_<keysym_name> = K ... 357 ... 358 359Or in the X resource database: 360 361 xspect.keys: <keysym_name> = K ...; ... 362 363 364The <keysym_name> can be set to any keysym (defined in 'spkey_p.h'). 365The K arguments are the spectrum keys to be assigned to the given PC 366key. K can be any letter, number (a..z, 0..9) or the following: 367 368 none, space, enter, capsshift, symbolshift, 369 kempston_up, kempston_down, kempston_left, kempston_right, kempston_fire 370 371e.g. 372 373 keyboard-type = custom 374 true-shift = none 375 376 Key_Insert = capsshift 9 377 Key_Tab = capsshift symbolshift 378 Key_Shift_R = kempston_fire 379 Key_Alt_L = symbolshift 380 Key_Alt_R = symbolshift 381 382or as it would appear in a .Xdefaults file: 383 384 xspect.keyboardType: custom 385 xspect.trueShift: none 386 387 xspect.keys: Insert = capsshift 9; \ 388 Tab = capsshift symbolshift; \ 389 Shift_R = kempston_fire; \ 390 Alt_L = symbolshift; Alt_R = symbolshift 391 3926.2 Using the Spectrum keyboard 393------------------------------- 394 395Those of you that have at some time used a Spectrum know, that the keyboard 396of this little computer is something very strange, with a LOT of keywords 397and symbols on and around each key. If you have not seen this keyboard (or 398have somehow managed to forget some bit of information that is on it) we 399produced quite a good copy of it, found in the 'spectkey.gif' file. 400 401If you are using 'xspect' than pressing 'Ctrl-k' brings up the picture 402of the spectrum keyboard. You can press keys with the mouse (even more 403than one if you like), and it also shows which keys are pressed. (You 404can see what the emulator does when, for example you press 'BackSpace' 405or a '[' key on the PC keyboard). 406 407The default mapping of the spectrum's keyboard to the PC's is the 408following: 409 410The numbers, the letters, Enter and Space are the same. The left Shift on 411the PC corresponds to the CAPS SHIFT key of the Spectrum, and the right 412Shift corresponds to the SYMBOL SHIFT. This is quite simple and with these 413keys you can get all the functionality of the original Spectrum (assuming 414of course, you know how). 415 416But... 417 418To make life a bit easier, you can also use the Backspace, the arrow 419keys, and the following symbols as on a PC keyboard: ,./;'-=<>?:"_+[]{}\|~ 420(unless you turn the 'allow-ascii' option off) 421 422To get a symbol which is written above the numbers on the PC, and not 423the function or symbol that is on the Spectrum, press Alt (actually 424the value of the 'true-shift' option) instead of Shift. 425 426You can slightly modify the mapping with the 'keyboard-type' and 427'cursor-type' options. Every mapping includes the basic keys (letters, 428numbers, Space and Enter). Here are the mappings special to each 429keyboard type and cursor type: 430 431 PC Key Spectrum Key 432 ------ ------------ 433 434(Keyboard Types) 435 436extended: (default) 437 Left Shift -> Caps Shift 438 Right Shift -> Symbol Shift 439 Back Space -> Caps Shift + '0' 440 Escape -> Caps Shift + '1' 441 442spectrum: (spectrum-like layout, useful for some games, e.g. Jumping Jack) 443 < same as extended, plus: > 444 Comma (,) -> Symbol Shift 445 Period (.) -> Space 446 Semicolon (;) -> Enter 447 448compat: (similar to other emulators' layouts, e.g. Z80, X128, XZX ...) 449 Shift (both) -> Caps Shift 450 Alt -> Symbol Shift 451 Back Space -> Caps Shift + '0' 452 Escape -> Caps Shift + '1' 453 454custom: 455 Use key bindings specified in the config file (see section 6.1) 456 457(Cursor Types) 458 459shifted: (default) 460 Left Arrow -> Caps Shift + '5' 461 Down Arrow -> Caps Shift + '6' 462 Up Arrow -> Caps Shift + '7' 463 Right Arrow -> Caps Shift + '8' 464 465raw: 466 Left Arrow -> '5' 467 Down Arrow -> '6' 468 Up Arrow -> '7' 469 Right Arrow -> '8' 470 471 472joystick: 473 Left Arrow -> Kempston Left 474 Down Arrow -> Kempston Down 475 Up Arrow -> Kempston Up 476 Right Arrow -> Kempston Right 477 Keypad Ins -> Kempston Fire 478 Keypad Del -> Kempston Fire 479 Keypad Home -> Kempston Up + Left 480 Keypad PgUp -> Kempston Up + Right 481 Keypad End -> Kempston Down + Left 482 Keypad PgDn -> Kempston Down + Right 483 484 4856.3 Keys that control the emulator 486---------------------------------- 487 488All control keys are produced by pressing the Ctrl key and another key. 489 490 Ctrl-c, F10 Quit the emulator immediately 491 492 Ctrl-l, F3 Load a snapshot file; you must type the path and 493 filename on the terminal where you started the emulator, 494 e.g. 'snap/chuckie2'. The type and extension of the 495 file is determined automatically (.z80 or .sna). 496 497 Ctrl-t, F2 Save the current state of the emulator in a snapshot file. 498 Format depends on the extension (.z80 or .sna). If no 499 extension is given, .z80 is appended. 500 501 Ctrl-w, Ctrl-F2 Save a snapshot to a temporary file 502 503 Ctrl-e, Ctrl-F3 Restore last temporary snapshot saved with 'Ctrl-w' 504 505 Ctrl-q, F5 Reset the Spectrum 506 507 Ctrl-f Fast mode 508 509 Ctrl-n Normal speed mode 510 511 Ctrl-b Pause/Unpause emulator (you can do operations like loading 512 a snapshot file, etc... in paused mode too) 513 514 Ctrl-m Toggle sound on/off 515 516 Ctrl-h, F1 Print help 517 518 Ctrl-k Display (undisplay) keyboard of spectrum. See section 6.2. 519 520 Ctrl-p, F4 Play tape. Tape file must be entered on the terminal. 521 Optionally the starting segment can be entered; 522 e.g. 'tape/tape1.tap' or 'tape/tape1.tzx 13' 523 524 Ctrl-s, F7 Stop tape 525 526 Ctrl-y Toggle quick loading 527 528 Ctrl-o, F6 Pause and unpause during tapefile playing (restarts the 529 current segment). 530 531 Ctrl-r Record to tape file. See section 8.3. 532 533 Ctrl-\, F9 Refresh screen, reset keyboard state and 534 refresh colors. 535 536 Ctrl-j Toggle private colormap mode (only X) 537 538 Ctrl-comma Decrease window size (only X) 539 540 Ctrl-dot Increase window size (only X) 541 542 Ctrl-equals Skip more screen frames 543 544 Ctrl-minus Skip less screen frames 545 546 Ctrl-] Increase sound buffer size 547 548 Ctrl-[ Decrease sound buffer size 549 550 5516.4 Effects of changing frame frequency and sound buffer size 552------------------------------------------------------------- 553 554ONLY READ THIS IF YOU ARE NOT TOTALLY SATISFIED WITH THE EMULATOR'S 555PERFORMANCE 556 557This should be totally automatic, so I'm now programming you to do what 558the emulator should. (Luckily you are much easier to program) 559 560Frame skipping determines, after how many frames the emulator displays one 561on the screen. There are 50 frames in one second, and normally every other 562frame is displayed (25 per second). If the emulator is too slow under X, 563increasing frame skipping can have a good effect on performance, but at the 564cost of poorer quality. But the interesting thing is, that increasing frame 565skipping may cause a worsening of both performance and of picture quality 566(I will not explain it here why). 567 568Decreasing frame skipping has the opposite effect of the above. 569 570If the emulator uses sound, but sound is not continuous, then experiment 571with increasing sound buffer size, and increasing frame skipping. If you 572are lucky you can make things a bit better. Increasing sound buffer size 573has also the negative effect of delaying more the sound effects. 574 5757. Where can I get ZX Spectrum games for this emulator 576====================================================== 577 578On the Spectemu homepage (http://www.inf.bme.hu/~mszeredi/spectemu/) 579you can find a list of sites worth checking. Here are some: 580 581http://www.void.demon.nl/spectrum.html 582http://www.nvg.unit.no/sinclair/planet/ 583 584The fact is, that there were a lot of Spectrum games around on audio tapes, 585and some of them are really good. There were always cracked and copyable 586versions around, and nobody was interested in copyrights. Unfortunately the 587big FTP archives do not allow non free software on their servers, so I 588can't include any games in this distribution. 589 590(Because Spectrums have died out, and perhaps some of the software 591companies do not exist any more, probably some games could be distributed 592freely. But I will not check on those things.) 593 594I've included a program named 'spconv', written by Henk de Groot 595(hegr@ensae.ericsson.se) which can convert between snapshot file formats. 596 597Alternatively if you have some old spectrum tapes laying around, and you 598are very brave, you can check out section 8.5. 599 6008. Tape files 601============= 602 6038.1 Loading a tape file 604----------------------- 605 606The emulator now supports G.A. Lunter's .TAP and Tomaz Kac's .TZX tape 607files. To load a file, enter 608 609LOAD "" 610 611to the spectrum (by pressing keys j""), then press 'Ctrl-p'. 612On the terminal enter the name of the tape file to load, e.g. 613 614tape/cnamemat 615 616The emulator will now load from the tape file 'tape/cnamemat.tzx' or 617'tape/cnamemat.tap' whichever exists. Playing automatically stops at 618the end of the tape file. To stop loading before this press Ctrl-s. 619 620The default extensions are '.tap' / '.tzx' or '.TAP' / '.TZX' depending 621on whether the entered tape file is upper or lower case. 622 623While loading try pressing Ctrl-f, which can speed things up. After loading 624the file press press Ctrl-n to restore normal speed. 625 6268.2 Quick loading of tape files 627------------------------------- 628 629Quick loading means bypassing of the tape loading routine in the 630spectrum ROM, and loading of tape blocks directly into the memory. 631Some programs use their own tape loading routines, and in that case 632the tape blocks are always "slow loaded" (see above section). 633 634Quick loading is optional and can be toggled with the 'Ctrl-y' key. 635 636When quick loading is on, after entering 'LOAD ""' you are immediately 637prompted for a tapefile. If the tapefile can't be loaded, the quick 638loading of the first header block is cancelled, but you can still load 639the rest of tape by pressing 'Ctrl-p' and entering the tapefile name. 640 641Even in quick load mode, the playing of tapes is not automatically 642paused, when the program doesn't load more blocks, so with '.tap' 643files containing multipart games, you have to pause the tape at the 644end of each part with 'Ctrl-o' ('.tzx' tapefiles can contain a 645"Stop the Tape" mark, to automatically pause playing). 646 6478.3 Saving to a tape file 648------------------------- 649 650If you want to save something to a tape file using the spectrum's "SAVE" 651command, do the following: 652 6531) Enter 'SAVE "file"' on the spectrum 6542) press Ctrl-r to start the recording 6553) on the terminal enter the name of the tapefile to use 6564) press a key on the spectrum 6575) wait for the recording to stop 6586) press Ctrl-s to stop recording 659 660If the specified tape file already exists, the newly saved segments are 661appended to the old tapefile. 662 663 6648.4 Saving a tape file to real tape 665----------------------------------- 666 667The utility 'tapeout' enables you to save tape files (.tap and .tzx) 668to real tape via the soundcard. At the moment it only works on Linux, 669because it uses the OSS sound driver. (You can compile it for non 670linux systems, by adding -DNO_SOUNDCARD to CFLAGS in Makefile. Then 671instead of writing to the sound device, the program writes to a 672headerless wav file (bits: 8, sample rate: what you've given).) 673 674You can compile 'tapeout' by entering 675 676 make tapeout 677 678in the main directory of spectemu. The command line parameters are: 679 680 tapeout sample_rate tapefile [start_block [output_file]] 681 682The default value for start_block is 0, for output_file it is "/dev/dsp" 683(or if compiled -DNO_SOUNDCARD it is "tape.out"). 684 685You can stop recording to the tape by pressing Ctrl-C. 686 6878.5 Making a tape file from a real tape 688--------------------------------------- 689 690WARNING, ONLY TRY THIS IF YOU REALLY-REALLY WANT TO! 691 692Well it's not so bad as that, I've digitized a lot Spectrum tapes with 693ease, but I have the advantage of having played with tapes a lot on the 694real Spectrum, and of being able to modify the code which does the 695digitization. 696 697First of all you must have a sound-card to do this. If you've got it, then 698you have a small chance of succeeding. 699 700First get the cassette player which you used to play Spectrum tapes. Then 701plug it in your sound-card's 'line-in' or 'mic' inputs. Then somehow set the 702sound driver so that it reads things form the input in which you plugged 703your cassette (I use 'xmmix' the 'Motif Audio Mixer' to do this). And if 704you've managed to get this far, go to the directory where you want to store 705the tape files (remember, there will be a lot of little files: one for each 706little segment!), and enter the following command: 707 708 recs - 32000 | filt | spload tapefile 709 710 or 711 712 recs - 32000 | spload tapefile 713 714(The first type worked better for me) 715 716Where 'recs', 'filt' and 'spload' are programs found in the utils 717directory, and 'tapefile' is the name of the tape file without the '.spt' 718extension. 719 720'.spt' tape files only exist because of historical reasons (the tape 721digitizing program preceeded the emulator, and also at that time I didn't 722know of the '.TAP' format), and now it isn't suppurted by the emulator 723any more. So you must convert '.spt' files to '.tap' with the utility 724spt2tap (in the utils directory) to use it with the emulator. 725 726(The contents of the utils directory can be remade by changing to that 727directory and entering the command: 'make realclean; make') 728 729Now you can put your favorite Spectrum cassette in the cassette player, and 730press the Play button. 731 732'spload' will write a lot of information on the terminal, of which you 733might try to make some sense. Also you can do a 'tail -f tapefile.spt' in 734another terminal, to see what is happening. Again if nothing happens, then 735you are on your own (and most probably at first nothing will happen). 736 737And remember that this digitizer is not better than the real Spectrum, so 738if you cannot load a program with a Spectrum, you'll most probably will not 739be able to load it with 'spload'. 740 741Good Luck! 742 7439. Bug reports 744============== 745 746Please send bug reports to: 747 748mszeredi@inf.bme.hu 749 750If you make any changes to the source, please mail me the 'diff -u' of the 751file(s) changed, and also why were the changes needed. 752 753Please also tell me if you would like to maintain, or to continue 754developing spectemu. 755 75610. Credits 757=========== 758 759Szeredi Tamas, for testing the emulator, and for helping with the 760'spectkey.gif'. 761 762Egmont Koblinger for helping to write some parts of the emulator, and for 763a lot of useful suggestions. 764 765Dani Nagy and Zsazsa for helping to test the emulator. 766 767G.A. Lunter for a very good description of the Spectrum, the undocumented 768features of Z80, and the '.z80' snapshot file format. 769 770And lots of others, who sent me good ideas and modifications.