============================================================================ Wang 2200 emulator release notes, v2.0 June 13, 2005 ============================================================================ ---- What is It? ---- This emulates a Wang 2200 system with a choice of two CPU architectures: * 2200T CPU (the highest end of the first generation 2200's) * 2200VP CPU (2nd generation 2200 CPU architecture) and a number of periperhals: * 6312 (64x16) and 7011 (80x24) CRT controllers * 6367 keyboard controller * 6541 disk controller and 2270 disk subsystem * configurable printer controller The emulator is primarily written under Windows XP, but it should also run on Win98SE and up. Due to the contribution of Paul Heller, it now runs natively on Mac OS X (10.3.9 at least) as well. It very well might run on Linux under the Wine Win32 emulation layer. ---- What's New ---- *) Added emulation for the 2200VP CPU. Now WangEmu can run BASIC-2 programs. In this mode, the muxed terminals are not supported, just the directly attached display generator and keyboard, ala an upgraded 2200T system. To chose the 2200VP mode, bring up the configuration dialog by the Configure/Configure System... menu choice. Beware that to do anything interesting, you must have a disk controller set up and a 2200VP boot disk; this is because in the VP architecture, the BASIC-2 microcode is downloaded, not built in. *) Paul Heller ported the emulator to run natively under Mac OSX. *) Paul Heller also added an emulated printer system. Output appears in a printer window, with or without greenbar appearance. This log can be saved to a file and it can be cleared at will. Print preview and printing have been implemented; there are some issues since the conceptual model is a continuous feed line printer but in real life the output device is likely to be a page oriented printer. There is an option to print each page automatically as they accumulate. *) Rewrote the 2200T microcode interpreter for a 2.5x speedup (when CPU bound). There is benefit even if you run the emulator in real time mode since this increased efficiency translates into less load on the host CPU. *) You can now switch between windowed mode and full screen mode by selecting from the menu Display/Fullscreen, or by typing Alt-Enter. The emulator keeps track of the font size preferences for fullscreen mode separately from when not full screen. *) There is now the option for the CRT display to use the original Wang dot matrix character set. The font was read off of the character generator ROM used by a real Wang 7011 (80x24) display controller. *) Previous versions of WangEmu had a menu called "Display". Because of increased complexity and a general lack of reason to make it so accessible, the display options are now on their own dialog that is accessed from the "Configure/Configure Screen..." submenu. *) When printing to the CRT, HEX(06) turns off the cursor, HEX(05) turns it on. Strictly speaking, the 6312 CRT contoller (64x16) didn't support this behavior, but neither did it support lower case, underlining, nor the beep generator (at least now without an upgrade). The emulator supports all of these features even for the 6312. *) When running in regulated CPU speed mode, the CRT timing is also emulated. For instance, printing HEX(03) (clear screen) takes a lot longer than print HEX(20) (space). If the CPU is in unregulated speed mode, then emulated CRT timing does not introduce these delays and runs as fast as possible. *) The status bar now has an option to disable showing the simulated time. When timing is shown, the status bar now displays the simulated number of CPU seconds as before, although it is updated roughly once per real second instead of once per simulated second. Also, more information is presented. For instance, Sim time: 531 seconds, 1.0x means 531 simulated CPU seconds have elapsed since program launch and the emulator is running 1.0x realtime. *) There is an option to show a toolbar containing all the special function keys. To enable/disable it, select the menu "Configure/SF Key Toolbar" item. This feature is especially important on the Mac since function keys 9, 10, and 11 are usurped by the operating system for the Exposé feature. It is also useful for the PC since F10 is used for accessibility so it must be pressed twice in the emulator to get noticed. One of the prime uses of the Wang special function keys is for line editing. For the Mac a new set of shortcuts was set up since using the toolbar can be a hassle. Ctrl-E (EDIT), Ctrl-F (Recall), Ctrl-I (Insert), Ctrl-D (Delete), Ctrl-K (Erase). *) Ctrl-C used to mean CONTINUE, but now it is a synonym for HALT/STEP. CONTINUE is now invoked by Ctrl-Z. This is a concession to the fact that many people highly associate Ctrl-C with stopping a program. Ctrl-Z was chosen since is often means "undo" on windows, which is loosely like undoing a HALT. *) If there is more than one CRT controller installed, only the primary one (the one mapped to /005) has the status bar and the full set of menu items. Non-primary CRTs have simpler menus. *) Removed the "uCode" and "Keyboard" selection boxes from the configuration dialog since they were inactive in the dialog anyway. *) The "New Disk..."/"Inspect Disk..." dialog has been redesigned. It is now less flexible (only a fixed set of disk configurations can be specified, and the disk type can't be changed after creation). The benefit is that it is must easier to use and a lot less confusing. *) Creating a new disk used to be very slow, painfully slow for large virtual disk images. in this release it is all lighting fast. Of course, if you "SCRATCH DISK F END=32000", the emulator still takes a long time since it involves 32000 file opens/seeks/closes. I could improve this a lot by keeping the filehandle on the disk image open until the virtual disk is unmounted, but it would run the risk of dataloss. I guess I could also keep the file open and do a flush every Nth sector write or every N seconds. Maybe the next release. *) There is a new configuration option to globally disallow warnings when an I/O address is accessed and there is no card to receive it. *) Lots of code restructuring. Although all files are now .cpp, only IOcard_* have been restructured to use cpp features. Class names and file names were rationalized somewhat. ---- Bugs Fixed in this Release ---- *) The program is now "wangemu.exe" instead of "emu.exe". This was my intent all along, but somehow I never got around to renaming it. Although trivial, it makes it easier to find the program in the system task list and to identify the program if the binary gets separated from the rest of the distribution. *) In previous releases, the CPU speed choice (regulated/unregulated) was not saved in the ini file, and just always defaulted to regulated. Now the user's choice is persistent. *) If you changed only the memory size in the system configuration dialog box, the "Revert" button would not become enabled. *) While a script is being processed by the emulator (File/Script...), typing BREAK now causes the script to be aborted but any other key will be ignored. In previous releases, pressing a key while a script was running would just mess things up. *) If the system was configured with two CRTs and two keyboards with the two CRTs ties to different keyboards, on the next start up the emulator would assert. *) Previous versions of the emulator attempted to incrementally update the display with each I/O operation. This can be efficient if relatively little is being sent to the display, but it is terribly inefficient if there is a lot of I/O, to the point the emulator couldn't even stay real-time. Also, under certain circumstances the display wasn't always properly refreshed. Now the entire screen is updated at 50-60 Hz. This is more efficient if there is a lot of I/O, and leads to much more stable performance. *) Characters sent to the CRT with values >= HEX(90) should have been underlined. Also, when using the system native font, the characters > 0x80 are remapped to more closely approximate the true Wang character set. *) Alt-K was used as the accelerator key for both selecting the top level "Disk" menu as well as toggling the Alpha/Keyword keyboard mode, with the latter taking precedence. The accelerator for the disk menu was changed to be Alt-D. *) Launching help now uses a library routine to launch the default browser; hopefully it will be more robust than the ad-hoc method used in previous releases of WangEmu. *) When you double click on an error message line, a window pops up with the explanation from the manual. When you dismiss the pop up, the focus is restored to the emulator window properly. In the previous release, you'd have to click in the window before you could type into it again. Also, certain error codes were not always recognized. *) If wangemu.ini was left in a state where it had virtual disks in the disk drives but the virtual disk being pointed at didn't exist (for example, it had been deleted), the next time WangEmu start up it would get a fatal exception. *) The "New Disk..."/"Inspect Disk..." dialog didn't properly set a minimum size so it was possible to resize it to absurdly small dimensions. It now also remembers its position and size between invocations. *) There was a bug in invoking the disk inspector via control-clicking on a disk icon. The bug was due to a workaround that isn't needed any longer with the new disk icon control scheme, and so now that hack has been removed. ---- Known Bugs ---- *) Under OS X, using the print preview feature causes some of the the printer window's menus to get disabled after the preview is closed. It may be an application bug or perhaps a library bug. Fixing it is a priority for the next release. *) Previous versions of WangEmu allowed disks up to 32767 sectors. This was also a limitation of Wang BASIC. The VP should allow up to 65535 sectors on a disk, and this feature was added to the emulator. However, such disks failed to work, so the limit of 32767 was put back in place. If the bug is figured out the maximum size limit will be raised again. *) In the 2200T CPU mode, the real 2200T has a dummy microinstruction cycle that performs refresh. This isn't modelled in the emulator, so the emulator is about 3% faster than realtime. *) cpu_breakdown() is called when rebuilding the CPU, but not on shutdown, leading to the leak of 128KB. it doesn't affect anything; it is just program hygiene. *) Reading the wxWidgets "wxApp Overview" topic, it might be that an application isn't supposed to have any wx objects declared within the class -- only pointers. Right now there are a number of wxString objects declared in MyApp. Is this a problem? Come back to it later.