Modem driver
ZXNet echo conference «zxnet.soft»
From Eugene Palenock → To Vlad Sotnikov 30 May 2001
Hello Vlad!
29 May 01 02:34, Vlad Sotnikov -> Stanislav Udin:
VS> As far as I know, no. I have a creation in the distant future
VS> MMD-compatible driver for HAYES, but this requires learning
VS> documentation, and I don’t even know yet if this is real :(
The PC modem is much more intelligent than ZX modems.
In general, you can write, but most of the entry points
mmd-compatible driver will not be used.
Accordingly, there is a need for support for their “neglect” in
program. Isn’t it easier then to just do it in a program?
work with a PC modem?
There is no need to invent protocols, etc. - it is necessary
only receive and transmit bytes to the port.
VS> But no one knows the principle of operation of the HAYES modem.
You are undoubtedly... Because there is simply no
principle you need to know. You only need to call teams
specific modem model (which you can dial in the terminal
necessary to configure it) and be able to work with RS232 (modem
at low level looks like an RS232 port)
Best regards, Evgeniy.
From Kirill Frolov → To Stanislav Udin 11 June 2001
Press RESET immediately, Stanislav!
01 Jun 01 21:55, Stanislav Udin wrote to Eugene Palenock:
SU> Where can you get acquainted with these entry points into MMD-compatible
SU> driver?
Modem/clock driver.
The driver is located at address #C000 (49152)
to address #EFFF (61439). Maximum time
driver measures 12Kb (12288 bytes). Area pa-
memory #F000...#FFFF is used by the system
under the buffers.
The driver must not change registers IX, IY,
SP, change interrupt type
Driver input points:
D_INSTAL EQU #C000
INSTALLING THE DRIVER
when entering [HL] - modem buffer address.
When returned to the modem buffer, it is written to
ASCII form of speed values, for each
speed is allocated 5 bytes, maximum
number of speeds - 8, description ends -
Code #00.
The register pair [HL] returns the address
processing subinterrupts. If a non-
maskable interrupt, then a re-
move to this address. Processing subroutine
interrupts should not change the value of the re-
hysteres with the exception of [A], [BC] and [HL]
If when calling this function the flag CY=1,
then a test call to the driver occurs. And
The modem driver may not perform in-
stacking and not returning data. This is mo-
may be useful if the driver
The modem is packed. First, "US-" is called
TAOVKA" with the CY flag set, forfor the driver to unpack, and then
The actual setting is made at CY=0.
D_COPYR EQU #C003
OBTAINING INFORMATION ABOUT THE DRIVER.
when returned to the modem buffer, it is written
driver name (up to 43 characters), final
code #00
D_RD_STAT EQU #C006
READING LIII/DRIVER STATUS
When entering [A] curb color
When returning to [A] - data for port #FE
This is mainly needed for the VICOMM modem.
If the modem does not “touch” port #FE, then the value
register [A] must not be changed!
When returning in register [B]:
bit0 line status: "0" - the modem is not occupying
nyu, "1" - the modem occupies the line
bit3 presence of tone dialing
bit4 is it necessary to turn off TUBRO mode when
calling the driver
bit5 has line control, i.e. modem
can “pick up” and “hang up” the phone.
bit6 presence of clock in driver
bit7 presence of a timer in the driver
D_WAIT_INS EQU #C009
SETTINGS BEFORE LINE SURVEY
(BIG ESTABLISHMENT)
This function must not change registers!
When entering [A], line audio output volume.
This value is used when executing
functions D_WAIT_LN and D_WAIT_BLC. If
[A]=0, then there is no sound if it is not equal to
lyu, then the state of the telephone line should
displayed, for example, on a musical
processor with the specified volume.
D_WAIT_LN EQU #C00C
LIIII SURVEY
upon return
CY=1: data not accepted
[B] line poll execution time
[C] maximum execution time
line polling
CY=0[A]=#01: block accepted
#02: busy signal detected
#03: "call" detected
D_WAIT_BLC EQU #C00F
LONG WAIT
upon return
CY=1 no block
[BC] length
[D] speed (#80 undefined)
D_TRANSMIT EQU #C012
Transfer a block of data from the modem buffer
at the speed numbered in [A],
[BC] - block length
D_ON_LINE EQU #C015
Hang up the phone
D_OFF_LINE EQU #C018
Hang up
D_CALL EQU #C01B
FUCK OMER, THE TUBE IS ALREADY DOWN,
at the entrance
[HL] - dialed numbers
[A] - dialing method: 0 pulse, 1 tone
[B] - pulse period (60+40)ms std. 100
[C] - interdigital pause ms/10
upon return:
CY=0 number dialed successfully
CY=1 error, error code in [A]:
#00 dialing error
#01 no long beep
#02 execution interrupted
D_AON EQU #C01E
CALLED WHEN A CALL IS DETECTED.
THE TUBE IS SIMPLE + DEFINITION O-
MEASURE
upon entry:
[A] number of requests
[B] pause before request /2 ms
[C] number of digits
[D] sensitivity to ATC response
[E] line sensitivity
when returning to MOD_BUFF defined
phone number in ASCII form, code #00 at the end.
SET_CON_A EQU #C021
ACTIVE CONNECTION SETUP (PE-
EDIT)
SET_CON_P EQU #C024
PASSIVE CONNECTION INSTALLATION (RECEIVE)
MOD_BUFF returns a text message
connection information (CARRIER/SPEED), in
end code #00.
[A] is the set speed, or #80 if
speed is uncertain
CY=1 connection could not be established
D_SET_TIME EQU #C027
SET TIMEat the entrance
[H] - GG [C] - MM
[D] - DD [B] - HH
[L] - MM [E] - SS
[A] - DAY EDELI
upon return
CY=1 ERROR
D_RD_TIME EQU #C02A
COUNT THE TIME
upon return
[H] - GG [C] - MM
[D] - DD [B] - HH
[L] - MM [E] - SS
[A] - DAY EDELI
CY=1 ERROR
D_OFF_DRV EQU #C02D
DISABLED DRIVER
This subsection is called when
the system does not plan for a long time
contact the driver.
For example, when executing PAUSE commands,
COPY, MOVE. And also when running the file
for execution.
Calling any p/n driver - its inverse
inclusion.
D_SET_ALR EQU #C030
SET TIMER A [A] MIUT
D_ADD_ALR EQU #C033
ADD TO TIMER [A] MIUT
D_RD_ALR EQU #C036
TIME OUT?
upon return
CY=1 - time has expired
CY=0 - there is still time left.
[A] - how many minutes are left
Addition Driver
Download address #6800,
driver length 256 bytes
The driver should not change
interrupt type and state and
register values
IX, IY, SP, HL