Updated 16 July 2000
Z88 External Console for Windows
Use a PC as a terminal to the Z88 to display the Z88 screen on the PC
and/or allow the PC keyboard to control the Z88.
It was discussed many times over the years if an external monitor could be attached to the Z88.
Now in a way it can.
- Use for troubleshooting bad Z88 screens and keyboards
by disconnecting screen or keyboard and resetting the Z88 with an EPROM installed containing a
Boot.cli file with the necesary CLI redirection commands.
- Help document Z88 programs by producing screen dumps.
- Use it with the PC connected to a video projector
for demonstrating Z88 programs for large crowds. :-)
Supported screen driver codes:
Window define, select and init, clear and hold.
Window scroll up and down.
Clear from cursor to end of row / end of window.
Direct codes BEL, BS, HT, LF, VT, FF, CR and DEL.
All special characters.
Cursor to X, Y, XY.
Display attributes Cursor, Vertical and Horizontal scrolling, CapsLock
Bold, Tiny, Underline, Reverse and Grey.
Text Justification and Margins.
Supported keyboard driver codes (CLI):
All standard ASCII character keys.
Special keys Index, Menu, Help.
Special keys Enter, Tab, Del, Arrow Left, Right, Down, Up and Space,
alone and with Shift, Diamond or Square.
Special keys Diamond and Square, pressed and released followed by other keys.
Limitations in the Z88.
When redirecting output, scrolling output like from a BASIC LIST or a
Filer Catalogue Files command, is not paused with a Page Wait at each screen full.
When redirecting input, Menu and Help screens are not properly output.
9907xx - 990925 v.0.0
First implementation in Visual Basic Pro 3.0.
Support for cursor, justification, left and right margin.
Print user defined characters as the character of their code (@ to DEL).
Generate r beeps m long with s wait is parsed but only one beep output
Send nn copies of code mm implemented
Increased receive buffer from 1 to 8K.
Justification really fixed
Output codes 155-158 as black squares same as 127.
Send nn copies of code mm changed
Choice of com port saved in ini-file.
Support CapsLock attribute
Restrict 'Output nn copies of code mm' to current line.
First try at "Blank hole" handling.
Disabled blank hole handling.
Changed version to 0.2.
Support new undocumented screen driver code for Window Delete.
First try at sending keyboard data to Z88 with redirected input.
Support for special and shifted keys.
New menus Edit, Copy Screen, User Area and Window.
Implemented copy to clipboard.
Added arrow SHIFT and DEL symbols and full block cursor symbol,
duplicated Turkish characters at ISO Latin 3 and 5 positions,
and moved some characters in the font, and changed mapping accordingly.
Now Edit, Copy commands work well.
Display the font character set at program load.
Corrected horizontal scrolling.
Changed version to 0.3.
Support Tiny attribute.
Support Reverse Video attribute,
Apply and Invert current toggles.
Support Underline, Grey, Bold attributes and
Grey/Ungrey current window.
Fixed CapsLock in window 7.
Moved Window.Initialized from WinReset to WinCls.
Fixed Screen copy as bitmap.
Choice of letters or arrow SHIFT and DEL symbol according to OZ version.
Restoring screen after Menu, Help and for applications not doing it itself.
Optional double size fonts.
Support for Flash attribute.
User defined characters.
Downloads, 16-bit version for Windows 3.1+, 95+ and NT 4+
Download z88-xcon.exe. Z88 External Console for Windows. Version 0.3, 2 November 1999. 35K.
Download z88-font.zip. Z88 LoRes1 font for Windows. Version 0.0, 29 October 1999. 1K.
Don't count on this font remaining unchanged. It's likely that special characters will be moved and/or changed.
If you don't already have mscomm.vbx and vbrun300.dll in your \windows\system\ directory:
Download ftp://ftp.microsoft.com/Softlib/MSLFILES/MSCOMM.EXE. Self-extracting archive, 27K, containing mscomm.vbx Visual Basic Communications Control. Version of mscomm.vbx needs to be at least 22.214.171.124.
Download ftp://ftp.microsoft.com/Softlib/MSLFILES/VBRUN300.EXE. Self-extracting archive, 241K, containing the Visual Basic 3.0 runtime library, vbrun300.dll.
If you are interested in having a look at the source code,
Download z88-xcon03.zip. Visual Basic 3.0 source code. 27K.
Undocumented Z88 Screen Driver Functions
This project has revealed more details of screen driver functions.
It has also raised new questions on not previously documented fuctions.
Below follows some speculations about these.
Could the lack of screen restoring be blamed on the fact that it is observed during redirection
of standard output? The page wait function is suppressed when redirecting output.
- Screen driver sequence 1,"2.[".
Output every time a new application is started or reentering a suspended application
but not when going to Index with the [ESC] key, [INDEX] key or I.
Output in Filer before the scrolling output of Catalogue Files.
- Screen driver sequence 1,"2.]".
Output in Filer after the scrolling output of Catalogue Files.
Output on loading Filer after drawing the topics area but before defining and drawing the application windows.
Output in Filer before and after showing Copy dialog window.
Output after every switch off/on while in Filer.
- Preserve screen over preemption.
Applications like BASIC and Terminal does not redraw the screen after preemption and
rightfully so because it's specified so in their application static structures.
However it seems the system before the screen driver does not preserve the screen for
later restoring it by sending new data to the screen driver. Instead it is likely the
responibility of the screen driver to preserve and restore screens. But by what commands?
The same seems to apply when displaying Menu and Help pages.
The BASIC and Terminal window should probably be restored at the first select and hold command.
But how to know which is the first and which screen to restore. Several BASICs could be preserved.
- Window 6 reserved for system?
The Z88 Developers Notes and BBC BASIC (Z80) Reference Manual both refer to window 1 to 6
being available for user definition. Window 7 and 8 reserved for the system.
Z88: A Dabhand Guide reserves also window 6 for the system.
Menu and Help pages always use window 6. Should this imply that the screen
driver should preserve the screen before drawing window 6?
Of the internal application main windows only the Alarm banner use window 6.
- Window define types.
The Z88 Developers Notes specifies the use of the window type bit 0 set for left and right
vertical bars, bit 1 for shelf brackets, bit 2 to 6 ignored and bit 7 allways set.
The PipeDream map window have bit 5 and 6 set and not bit 7.
- Screen driver sequence 1, '2', 'D', n+'0'.
It's function is to delete all characters in window n, and if there are borders, delete those aswell.
- Output n copies of the code m.
The interpretation of n-32 being the number of characters to output might not be true at all times.
PipeDream Option page, Header, Footer and Title item positions are blanked out with spaces by
this command. Using n-183 works here to make 197 or 184 spaces not to overwrite on following rows.
PipeDream file save window, 'Name of file to save' item is also blanked out by spaces.
Using n-62 works here to make 50 spaces not to overwrite the next row.
Are these cases programming errors that should be taken care of by the 'Output n copies' function
stopping at a window right border?
Probably not programming errors. If you in the above 'Name of file to save' enter a path longer than
19 characters, the string scrolls left and in the process characters pushed out to the left are swallowed
by a "blank hole". To the screen driver is sent the full string every time a character is added so
it must be the responsibility of the screen driver to scroll all characters to the right of the
rightmost blank position.
- Null characters.
Null characters are output to the screen driver at very specific locations. Namely exactly after all
the first row characters are output in window 7, the topics area, and menu windows.
I guess a combination of 1,"2.[", 1,"2.]", null characters and specific sequences of window init and
hold commands could provide enough information to know when to save and restore screen or windows.
But how to know which of several suspended BASIC screens to restore? Sofar I have seen no possible
instance identification. Is it possible that the screens are stored in each instance memory space?
Well. Anyone have some thoughts on this?
Main internal application windows
|Application ||Window ||Number ||Left ||Top ||Width ||Height ||Type ||Notes |
| ||User area ||8 ||10 ||0 ||94 ||8 || || |
| ||Topics ||7 ||0 ||0 ||10 ||8 || || |
| ||Menu ||6 ||11 ||0 ||92 ||8 || ||No topics |
| ||Menu ||6 ||10 ||0 ||94 ||8 || ||Topics |
| || ||6 ||11 ||0 ||27 ||8 ||129 || |
| || ||6 ||39 ||0 ||27 ||8 ||129 || |
| || ||6 ||67 ||0 ||27 ||8 ||129 || |
| || ||6 ||95 ||0 ||8 ||8 ||129 || |
| || ||6 ||11 ||0 ||92 ||8 || || |
| ||Help ||6 ||11 ||0 ||61 ||8 ||129 || |
| || ||6 ||73 ||0 ||30 ||8 ||129 || |
|Index ||Applications ||4 ||11 ||0 ||18 ||8 ||131 || |
| || ||2 ||11 ||2 ||18 ||6 || || |
| ||Suspended ||4 ||31 ||0 ||56 ||8 ||131 || |
| || ||3 ||31 ||2 ||56 ||6 || || |
|Diary ||Text ||2 ||11 ||0 ||79 ||8 ||129 || |
| ||Date ||3 ||91 ||0 ||12 ||8 ||131 || |
|PipeDream ||Map ||5 ||90 ||0 ||14 ||8 ||96 ||Map |
| ||Sheet ||1 ||10 ||0 ||80 ||8 || ||Map |
| || ||1 ||10 ||0 ||94 ||8 || ||No map |
|BASIC || ||1 ||10 ||0 ||94 ||8 || || |
|Calculator ||CALCULATOR ||5 ||20 ||0 ||33 ||8 ||131 || |
| ||CONVERT ||4 ||56 ||0 ||22 ||8 ||131 || |
|Calender || ||5 ||20 ||0 ||35 ||8 ||131 || |
|Clock || ||5 ||60 ||0 ||16 ||8 ||131 || |
|Alarm || ||6 ||30 ||0 ||54 ||8 ||131 || |
| || ||5 ||30 ||2 ||54 ||6 || || |
|Filer ||COMMANDS ||4 ||11 ||0 ||24 ||8 ||131 || |
| ||Commands ||1 ||11 ||1 ||24 ||7 || || |
| ||Directory ||4 ||37 ||0 ||54 ||8 ||131 || |
| ||Files ||2 ||37 ||1 ||54 ||7 || || |
|PrinterEd || ||1 ||11 ||0 ||92 ||8 ||129 || |
|Panel || ||1 ||11 ||0 ||92 ||8 ||129 || |
|Terminal || ||1 ||11 ||0 ||80 ||8 ||129 || |
|Imp-Export || ||1 ||11 ||0 ||92 ||8 ||129 || |
Back to Cambridge Computer Z88