SOMETHING ON CONNECTING THE PRINTER
AND NOT ONLY
Cherkassy (C) Boris Kuritsyn
__________________________________________
The author is often met with complete incomprehension or
perverted understanding of technology to connect devices to
Computer ZX Spectrum; so in the present text describes
something concerning this topic.
A. Interface
PROGRAM - UNIT
ZX Spectrum uses a UNIX-like
the concept of channels and streams. What is it
consist of?
Channel, denoted by letter of the Latin
alphabet, symbolizes the DEVICE. For example, ZX Spectrum
supports the following standard devices:
K - (Keyboard - keyboard)
something equivalent to "con
salt ", ie, control panel, lower
window display at the conclusion of the keyboard
commissioning; is special for the ZX
Spectrum;
S - (Screen - screen)
the upper display window on a conclusion; input
impossible;
P - (Printer - printer)
printer to the conclusion (that ZX Printer);
entry is impossible;
R - (RAM - RAM)
intra-channel dedicated
to improve the effectiveness of programs;
characters appearing in this channel, pop
give in BUFFER EDITOR COMMAND
LINES AND ENTRY;
ie if you bring in this channel string
characters, and then call the built-in
editor (the one that implements
operator INPUT), then this line will be
prompt the user for Editing
tion in the lower window of the screen.
Connecting additional devices
racshiryaet set of channels.
Each channel has a unit of description -
leader tape channel (channel record), which
contains information about the binding functions
I / O system and the channel. All the leader tape
placed consecutively in memory, start address is recorded in
the system variable CHANS (address 23631, address). In the past
the leader tape is a marker end - a byte with value 80h.
The general format of the leader tape in assembler notation
is as follows:
DEFW print_out
DEFW input_in
DEFB channel_name
DEFW internal1, internal2
DEFW record_length
DEFS record_length-11
Here:
PRINT_OUT
Address procedures for the withdrawal of the symbol in the
channel, the symbol in register A; shadow set registers should
not be destroyed. Procedure complete command RET. If the
channel does not support the conclusion of the information,
procedure output is to initiate error:
RST 8; interrupt error
DEFB 23; error Invalid stream -
; Incorrectly used flow
INPUT_IN
Address procedures for entering characters from the
channel, the symbol should be placed in the register A, in
addition, must be installed Flags:
CF = 1
symbol actually received from the device and transmitted
through register A. Otherwise CF flag must be cleared to 0 and
set:
ZF = 1
if DEVICE is not ready to give the next character.
Otherwise,
ZF = 0
will mean that the situation occurred in the channel end
of file, which is usually induced error End of file. When
need routine access to the channel itself triggers this error.
Such a warning system is provided in order to be able to
implement not only the operation INPUT #, and entering without
expectations INKEY $ # so that for these channel
operation is no different.
If the channel supports the input, it
should initiate a mistake (as shown
for print_out).
CHANNEL_NAME
Contains the character name of the channel. Naturally,
they should not be repeated.
INTERNAL
Using these two words in different
implementations are different. Thus, in the Interface One
they contain real addresses and print_out
input_in additional ROM and in the channel
Virtual Disk Spectrum 128K first
word contains the signature (mark)
custom channel (number 1234h), and
second - address closing procedures Channel
close. These words can be defined as
internal.
RECORD_LENGTH
Word contains the length of leader tape channel
(Minimum 11). This allows you to store a leader tape buffer and
/ or any additional information associated with the channel.
For example, in TR-DOS, in the channel "D", associated with the
file sequential access, store buffer
for assembling of 256-byte characters
sector, byte count in buffer pointer disk space for recording
sector. On the above scheme, the channel leader tape this
additional area is designated as
DEFS.
The above-mentioned standard channels leader tape cut - it
contains only 3 the first lines of the above scheme. These
channels first in the list and insert their
leader tape can only be followed before the end of the marker.
To create a space in the area with CHANS
to stick a new leader tape channel
necessary to use sub-ROMs
MAKE_ROOM, to remove the leader tape - sub RECLAIM_2.
The second element of the concept - FLOW
(Stream). It symbolizes the flow of data
traveling from the program device
through the channel. Flow indicates the number of
0 to 15. In fact, there are flows with
numbers -3, -2, -1, but they are the threads of the operating
system and can be overridden only with specific goals.
Stream connects to a channel operator
BASIC:
OPEN # stream, channel $
Here the stream - stream number, channel $
- A character variable named channel.
For example,
OPEN # 6, "K"
6 to connect the flow channel "K". This
You can check out:
PRINT # 6; "Hello, World!":
PAUSE 0
will lead to lower window welcome screen. Same with the
introduction:
INPUT # 6; "Type line:";
LINE a $: PRINT a $
- You have to do to enter a string that will be printed on
the right of the screen. Similarly, can try INKEY $ # 6.
Likewise, you can specify the stream for
LIST:
LIST 200, # 6
Upon completion of the work flow should be
Close:
CLOSE # 6
The idea of all this technology is
that the program becomes independent
from the input / output devices - it just
uses threads. And they can be reassigned to required at the
moment the device.
With the standard channels are connected
"Standard" flow: # 0 and # 1 with "K", # 2
"S" and # 3 with "P". It is easy to guess that
PRINT is the same as PRINT # 2,
LPRINT - PRINT # 3, LLIST - LIST # 3, INPUT -
INPUT # 0 and INKEY $ - INKEY $ # 0.
State flow is described in sitemnoy
area STRMS (starts with 23568, the length of
19 words). Every word of this area represents one stream (-3,
-2, -1,0,1,2, etc.). It contains 0 on a closed stream, or
offset from the beginning of CHANS leader tape to the channel
to which this podlyuchen stream. This value is incremented by
1. For example, the descriptor stream connected to the channel,
S, will contain the value 6, because Channel S - second in the
list from the abbreviated leader tape (length of 5 bytes) and 5
+1 = 6.
Need to know that the bug in the ROM
leads to the fact that you can not try to close (at least,
command CLOSE #) closed flow, or flow, open to
custom channel.
Also note that the BASIC
You will be able to open stream only to the standard channels,
since their discovery could be accompanied by specific actions
in the device. Therefore, the TR-DOS has its own command to
open / close streams and ZX Interface One expands
Operator OPEN.
To access the thread table is used routine ROM STR_DATA,
to set the current thread - CH_OPEN, to display the symbol in
the stream - PRINT_A_1 (RST 16), to read a character from a
stream - WAIT_KEY.
It should be remembered that routine CLS
puts the address of the combined driver channels K, S, P in the
leader tape of the current flow is used. Therefore, when you
call it must be a current flow
0, 1 or 2.
Addresses and detailed information about the above and
below the ROM routines you found in the "Advanced disassembler
ROM Spectrum ", Logan and O'Hara.
B. Specifically on printers
It is normal for your printer
not to create a new channel to reopen
He flow, etc.
After all, there is a standard channel P, in the leader
tape which you can simply replace the address print_out.
Procedure itself, in most cases can be placed now in the former
buffer ZX - Printer (256 bytes from address 23296).
Must take into account that the ZX Spectrum tab character
has the code 6, and its size - 16, while the "normal" code
printers tab 9, and size - 8. Therefore, procedure print_out,
received a code 6, should refer to the printer instead two codes
9. Next, you need to encode the symbol
"Copyright" in another, for example, in "@".
Tokens must pass character by character, taking
text tokens from the table in the ROM at
95h, or by using a subroutine
PO_MESSAGE with a recursive call to the driver
(Because she uses a subroutine
RST 16).
Another problem: the symbol CR (code
13). The printer has a mode where the code CR
returns the carriage to the top of the line, and LF
(Code 10) takes a string. Most
printer has DIP-switches to set the mode, when both actions are
performed by the code of CR, but some such a regime does not
have. Therefore it is better to provide such an option in the
driver, and Printer leave in the "separate
reaction. "
Finally, for printing graphics, you need a version of the
driver that does not make any conversions.
B. Compatibility
Hardware incompatibility, in general, -
something very unpleasant. So here's a table of addresses of
various ports devices that can not be used
new devices for compatibility. Decoding of port addresses is
recommended for both the address byte.
Device ports
ZX Spectrum Computers
Destination address
7FFD configuration management
(Only 128 kb)
BFFD, a music processor
FFFD AY-3-8912 or equivalent
xxFE reading - keyboard
on record - the sound,
magnetic tape
BORDER Display
1F Kempston Joystick
Interface
3F Dk'Tronics Light Pen
FB ZX Printer
Ports ZX Interface 1
EF control status
E7 data
F7 RS-232 / Network
ZX Interface 2 ports
EFFE IF2 joystick 1
F7FE IF2 joystick 2
Ports Beta Disk Interface
(Access is blocked,
incompatibility does not cause)
FF control / state
1F command / status
3F track
5F sector
7F data
Special Port
FF this port is not specifically implemented
van, because his request is not
meet any one device, it
always contains the value systems
Noah data bus in vysokoimpedan
sleep state, equal to FF. But in
Sinclair firm among the values
FF sometimes "slip" means
of the current output to the discrete
play attribute that allows u
frames more accurately sinhronozirova
tsya to upgrade memory on board -
It is for this reason, some
games do not work for Sinclair -
compatible models.