CDROM into your home ...
Once I connected to the
its spec PC-claves,
PC-mouse, and HDD, I was
interesting, but whether
connected to a spectrum CDROM? In
Basically it is possible of course:)
Connector that after all IDE-standard.
But the problem is that
Controller at me from the master
Nemo: (and as soon as I
pull up the train to his
samsung x24 it so soon and
ofigel: (stops responding
generally to any buttons ... That
Well there he drove controller
by Nemo, I do not understand
: (But here's something kind of Old
management CDROM'om in general and in
particular, I found on the Internet.
Perhaps it will seem to someone
interesting.
ATAPI (IDE) CD information for
meditation Constantine
Norvatov (C) 1997
This document in no way
is not a complete description
Standard ATAPI-CD. Here
were collected only basic
data necessary for the general
understanding of the principles
functioning.
Assumed knowledge (at least
in general) IDE-interface
(Standard went under the name
ATA-R4C .*).
For those wishing to quickly get
source control
CD-ROM can recommend
Driver VIDE-CDD.SYS. It is easier
all amenable
disassembling and contains
pretty good code. Except
addition, the source code
Driver CD for Linux
contains much useful
information, although orientation
"Yuniksoidny" type queries
prevents the use of these
texts to compile a
MS-DOS.
Agreement and used
reduction.
When referring to specific
Address is understood that
CD is a master address
Controller - 170h. If you have
used other addresses
instead of 17x to
substitute 1Fx, 1E8 + x or
168 + x.
Tic = 18.2 Hz.
Data length in word or
dword to / from CD go to
format co higher than the first
byte (in contrast to the PC, where
the first byte - the younger).
AP - Atapi packet, 12 bytes
transferred to the CD-Rom.
Contain the command and key
data for it.
WARNING: there may be
c device package length
16 bytes. However, the vast
Most drivers do not
analyze and do not support
this format. To determine
packet size used
ATA-team A1h.
AK-Atapi team
M - minutes
S - second
F - frame number (1 / 75 sec)
Frequently used bits
Status Register (177h):
BSY - Bit 80h
DRQ - Bit 08h
CHK - Bit 01h
I. Determination of the CD
system
To verify the presence of
Atapi-CD unit
should:
1. To select the right loop
the desired device
(Master / Slave) in register
176h.
2. Check the BSY
3. If the device is not busy.
Then you can give the command
total discharge (output code 8 in
register 177h and wait for 3.1
tick), or try to
do without it. If the CD
is in
normal expectations of the team
discharge does not necessarily give.
3. In the ports 174h and 175h
write something that differs
from 14EBh.
4. In the port 177h to bring the team
ECh and wait a couple of ticks.
5. Check port 174h (DB =
14h) and port 175h (gb = EBh).
It should be borne in mind that
registers should be
error is set (177h -
51h, 171h - 04h). This
normal.
If all conditions are met, the
we can assume that
IDE-loop is present Atapi
device. To clarify the type of
devices can be
use already
Atapi-teams.
This algorithm can
only apply
When certain that
CD had not acted
commands. Otherwise, the bit
BSY can be installed.
If necessary, check
status register can be
mitigated by only checking
the presence of the ATA device
recorded in the registers.
II. Executing commands
To perform the necessary AK
(Work without interruption):
1. Select the appropriate
device (Master / Slave) in
Port 176h
2. Wait ready (BSY and
DRQ = 0). Drivers waiting to
10-20 seconds. If readiness
No - you can try
reset the drive.
3. Set the desired
block size in the registers 174h
(Jr.) and 175h (Art. part) If
command does not return data
it can not do. For
DMA-shnyh exchanges at this moment
need to install other
registers.
4. In 177h write command
A0h. In response to this device
can set BSY to time
Preparing for AP.
5. Wait for data requirements
(DRQ = 1, BSY = 0). (Usually a wait
no need - the drive exhibits
requirement immediately). In this case,
register 172h two least significant bits
must have a value of 01.
6. In the forward if
write to port 170h 6 words
AP.
7. Wait ready
(BSY = 0). (Depending on
command type and other
circumstances, the drive can
execute a command in a time of
thousandths of a second before
tens of seconds (If,
for example, difficult to read
sector of the disk).
8. Check the DRQ bit and if he
installed, then read from
registers 174h and 175h length
Telegram.
9. If length = 0 or bit DRQh
in the 177h is not set - n. 11,
another to exchange data
port 170h. In this case two
least significant bits of register 172h
may take the value of 00
(When transferring data to a CD) or
02 (when receiving data from the CD).
10.If a team has not finished
return (bits BSY = 1),
repeat with n 7.
11.Posle command completion
two least significant bits of register 172
usually take the value 03,
that means a willingness drive
to the issuance of exit status
team. It is possible
analyze results
command finishes (registers
177h and 171h). When errors
You can use the
ATAPI-function 03h to
more detailed
information.
III. Types of teams
On modes of exchange team
can be divided into three groups:
a) Office
As a rule, all data
are in AP. In some
commands used
additionally sent
data block. The result can be
determined by the error register
(171h and 177h) or by
additional team
receiving state.
b) Data
Address data and parameters
transfer are in AP
Since the CD writers are not
considered (to me they do not
known), then the data block,
transferred to the CD,
absent. If a team
involves the transmission of
data from the CD and no errors, CD
Drive shows in response to
command unit (s) of data.
c) Obtaining information
All data requests are
in AP. In response to the command CD
gives a block of data.
IV. ATA commands
I have several CD
support teams
are executed in the same way
As usual the team
IDE-HDD. At the same time
destination registers equal
with nazacheniem on ATA.
Here are the basic commands:
A0h - Team transmission AP.
A1h - Identification of the drive.
Analogue of the team for ECh
IDE-HDD, but the format
output block the other (described
in Appendix C).
ECh - perceived as
error, but in the registers 174h and
175h set signature
14EBh - sign Atapi
device.
08h - Programming reset.
Performs the boot
initialization.
Also, can be performed
Some commands
energy conservation, installation
opportunities, etc. In many
drives they are perceived
as a valid command, but
not actually performed or
partially fulfilled.
V. Teams in the ATAPI-packages
The first byte in the AP is
command code. This
single byte, which
always analyzed.
The remaining 11 bytes contain
information depending on
specific command.
-----------------------------
Command 00h - Dummy,
checks readiness
Package:
db 0
11 db * dup (0) *
Does nothing, can
used to test changes
Disk
NOTES:
1) First Team after the change
disc will be rejected with code
error "Media Change".
2) Here and further: data
marked with "*" as a rule,
not analyzed the CD, but for
compatibility should be
set to 0.
----------------------------- Command 01h - Set
head on the top of the disc
Package:
db 01h
12 db * dup (0) *
Management Team
(Hardly used).
----------------------------- Command 03h - read status
drive
Package:
db 03h
db 3 * dup (0) *
db Len; length
output block
db 7 * dup (0) *
At the output table of 12h bytes
in which the most interesting
are the bytes 2, 0C and 0D -
is three bytes of the error code
the last operation.
----------------------------- Team 012h - read a string
parameters of the manufacturer of drive
Package:
db 12h
db 0h, 0h; sometimes
Here we establish some
parameters
db 0h; *
db Len; length
output string
db 7 * dup (0) *
Drive shows some row
manufacturer (in the format
manufacturer) Depends on the type of
CD-Rom. Sometimes used in
drivers to test
appropriate drivers and
device.
The structure of output block:
0 db 1Fh - device type (CD
= 5) E0h - for the CD =
1 db 7Fh - = 0 (for Joint. With
SCSI-1) 80h - supported
removable media
2 db 0 - Version ISO, ECMA, and
ANSI.
3 db 0 - for compatibility with
SCSI-2
4 db? - The length of the remaining
block
5 db 2 dup (?) - Reserve
7 db 0 - for compatibility with
SCSI-2
8 db 8 dup (?) - Line
manufacturer (there is
'ATAPI')
10h db 10h dup (?) - Name
Product
20h db 4 dup (?) - Audit
Text boxes form a single
strings separated by spaces.
----------------------------- Team 01Bh - Management
Trey and stuff
Package:
db 1Bh
db 3 * dup (0) *
db Func; subfunction
db 7 * dup (0) *
Management team.
Subfunctions:
0-enter Sleep mode
1-stop proigryv. / reading
2 to push the tray
3-close tray
----------------------------- Team 01Eh - lock tray
Package:
db 1Eh
db 3 * dup (?); *
db Func; subfunction
db 7 * dup (?); *
Management team.
Low bit Func
0 - unlock tray
= 1 - block tray
----------------------------- Team 025h - get the size of
disc inserted in the sectors.
Package:
db 25h
11 db * dup (0) *
Team information.
User response
transferred to a block of 8 bytes:
dd Sectors; number
sectors on the current drive
dd SectSize; size
sector (as a rule, not
depends on the disc and is equal to 930h)
----------------------------- Team 02Bh - Seek
Package:
db 2Bh
db 2 * dup (0) *
db M, S, F; to
positioned
db 6 * dup (0) *
Management team.
-----------------------------
Team 042h - Mixed
information (read subchannel)
Package:
db 42h
db ScMsf; 0/2-tip
addresses the issue (number of sectors
or MSF)
db FullInfo; version
query (full / short -
bits 40h)
db Func; subfunction
(Only for full search)
db 3 * dup (0) *
dw Length; length of the table
db 3 * dup (0) *
Command information, issues
unit the following information:
00h dw state of play
Audio:
00h - unknown or not
supported
11h - Playing Audio
12h - Audio stands
13h - Audio stopped on
end
14h - open a door or a mistake
run
15h - Miscellaneous
02h dw length of follow-up
Data (0 - no)
04h and then present at the
40h in the presence of bits and FullInfo
depend on Func
Func is not equal to 2 or 3
04h db 01h (data format
subchannel = 1)
05h db Ctrl / Addr
06h db TrackNumber
07h db Point or Index
08h db 0
09h db 3 * dup (?) -MSF/SECTOR On
CD
0Ch db 0
0Dh db 3 * dup (?) -MSF/SECTOR On
track
Subfunction 2
(Get a UPC code)
04h db 02h (data format
subchannel = 2)
05h db 3h * dup (?)
08h db 80h-check the availability of UPC
(If not, then the UPC is missing)
09h db 0Ch * dup (?) - Here
stored UPC code (6 digits in the BCD
code)
15h db 3 * dup (?) - Situation
something on the disk in a format MSF
Subfunction 3
(Get the ISRC code)
04h db 03h (data format
subchannel = 2)
05h db Ctrl / Addr
06h db TrackNumber-not always
used.
07h db?
08h db 80h-box presence
(Similar function 02h)
09h db on record ISRC
-----------------------------
Team 043h - about
tracks (READ TOC)
Package:
db 43h
db ScMsf; 0 / 2 type of issue
Address (number of sectors or MSF)
db 4 * dup (0) *
db BegTrk; initial
track (1, 0 is replaced
1)
dw Length; length of the table
db Func; options issue
information (0/40h/80h)
db 2 * dup (0) *
Command information, issues
table tracks. Maximum
length table 8 * 64h +4 bytes or
64h (100.) Lanes.
Func
= 00h; get a regular table
tracks
= 40h; get a table sessions
= 80h; get a regular table
in a larger format
The general format of the table:
dw Len; length
subsequent fields in bytes
db BegTrk; first track
db EndTrk; last
track
d? <track_Def>; description
tracks
Description of track
MB three formats:
1) 5 bytes per track
(Internal format, outside of
CD is not given):
db Ctrl / Addr; type of track and
Flags
db Index; index tracks
(Number)
db * 3 Start; starting address
Track
2) 8 bytes per track
(Func = 0h/40h):
db?
db Ctrl / Addr; type of track
and flags
db TrackNumber; room
Track
db?
db * 4 Start; starting address
Track
3) 11 bytes per track (Func =
80h):
db Res1
db Ctrl / Addr; type of track
db Res2
db Index; index tracks
db Res3
db Res4
db Res5
db * 4 Start; starting address
Track
Ctrl / Addr - the type of track (that is,
that in MSCDEX, but
rearranged tetrads):
Ctrl (younger tetrad
individual bits):
01 - a pre-emphasis
02 - allowed to copy
04 - Track Data
08 - 4 channel (instead of 2)
Addr (older tetrad and codes):
0-no subchannel
1-encoded in the subchannels
position
2-in subchannels coded UPC
3-encoded in the subchannels ISRC
Others - reserved
The most common codes:
14h - ROM
10h - audio
Index - encoded in BCD and
normal track is
range 01-99. Codes A0 and
above have a special
value, they are not matched against a
physical tracks on the disc,
and the nature of the business are -
informed about the number of lanes,
beginning of the disk drive and the end
etc.
Start - depending on the
query can be either
sector number or address
sector in the format of MSF.
----------------------------- Team 044h - about
actual labels of
(Read HEADER)
Package:
db 44h
db SL; bit 2 - that
write to the output buffer
(The original number of sectors or
believe)
db 0; *
db M, S, F; Number sector
db 0; *
dw Len; length issued
informa
db 3 * dup (0) *
Command information, issues
the following table of 8 bytes:
db SectorType; type of format
sector (data mode)
db 4 * dup (0)
db M, S, F; sector address
The package is only granted
if the CD could be considered
given sector and to identify
its type.
-----------------------------
Team 045h - play
audio in terms of blocks (length
- A word)
Package:
db 45h
db 0; *
dd StartBlock; block start
play (-1 - a tech.
Provisions)
db?
dw Length; number of blocks
db 3 * dup (); *
Management team.
-----------------------------
Team 047h - play
audio style MSF
Package:
db 47h
db 2 * dup (?); *
db M, S, F; top
interval (FF: FF: FF - current
position)
db M, S, F; end of the segment
db 3 * dup (?); *
Management team.
-----------------------------
Team 04Bh - Start / stop
audio
Package:
db 4Bh
db 7 * dup (0) *
db Func
db 3 * dup (0) *
Management team.
Low bit Func
= 0 - stop
= 1 - start
-----------------------------
Team 04Eh - stop
playback
Package:
db 4eh
11 db * dup (?); *
Management team.
-----------------------------
Team 055h - install
parameters
Package:
db 55h
db? , 1-bit store
in the NVRAM (?)
db Page; required
page options
db 4 dup (?)
dw Length; length of the table
db 3 * dup (0) *
Team management, codes and
page format is described in
command 5Ah.
-----------------------------
Team 05Ah - get
parameters
Package:
db 5Ah
db?
db Page-defines the required
parameters, consists of two
bit fields:
3Fh - page number you want
parameters:
01h - Correction Options
Error
0Dh - general parameters
0Eh - Audio Control
2Ah - device parameters
(Read only)
3Fh - All pages
C0 - bits of the type required
Pages:
00 - current value
01 - changed values
10 - default
11 - stored value
db 4 dup (?)
dw Length; length of the table
db 3 * dup (0) *
Command information, issues
the corresponding page
parameters.
General heading:
00h dw length of the entire unit
(Without the first word)
02h db Drive status
03h db 5 dup (?);
Header of each page:
08h db Number of pages
query
The page length 09h db
Page 01-fix errors
0Ah db parameter correction
Error
0Bh db meter repeats reading
Page 0D - general parameters
0Ah db?
0Bh db multiplier timer does not
aktivnosti
0Ch dw number of S units per M
one format MSF (60)
0Eh dw F number of units in S
one format MSF (75)
Page 0E - audio options
0Ah db? option does not fix. but
changes
0Bh db 2 dup (?)
0Dh db? LBA = 0 is always equal to
sector number, Senior bits
indicates the correctness
the next field
0Eh dw 0 Number of logical
blocks per second for
playing. (Usually not
used)
10h db ml. tetrad - bits
output port of channel 0
11h db volume of channel 0
12h db ml. tetrad - bits
output port of channel 1
13h db volume of channel 1
14h db ml. tetrad - bits
output port of channel 2
15h db volume of channel 2
16h db ml. tetrad - bits
Output Port Channel 3
17h db volume channel 3
Page 2Ah - options
device (read only);
bits of the presence / absence
Functions
0Ch db 01h-play audio
02h-composite audio /
video stream
04h-Digital out to
port 1
08h-Digital out to
port 2
10h-read sectors
Mode 2 Form 1
20h-read sectors
Mode 2 Form 2
40h-Reading
Multi Disc
80h -?
0Dh db 01h - Reading RedBook
through the command Read-CD
02h - Reading RedBook
"With accurate stream"
04h - Reading subchannel
08h - Support
deinterlivinga data
subchannel
10h - Support
"C2 error pointers"
20h - Support for reading
ISRC
40h - Support for reading
UPC
80h -?
0Eh db 01h-lock carrier
02h-read status
lock
04h-Disk prevent jumper
present
08h-team release
Media
10h-?
E0h-Loader Type:
0 - Caddy
1 - Tray
2 - Pop-Up
3 - Reserved
4 - changer with
individually replaceable
Disk
5 - Cartridge
6 - Reserved
7 - Reserved
0Fh db 01h-Split
Control channels
02h-Split
channel switcher
04h-Info
a disc
08h
10h
20h
40h
80h
10h dw Maximum speed
sharing, in kilobytes
13h db Number of gradations
Volume
14h dw buffer size in
kilobytes
16h dw current rate of exchange
- Can sometimes be absent
18h db?
19h db 01h - Digital out on
Front / recession signal BCKF
02h - LRCK indicates
Left / right channel
04h - data format
LSB / MSB
08h
10h BCKs: 0 - 32
20h | 1 - 16
40h / 2 - 24
3 - 24 (I ^ 2S)
80h -?
The length of each of the pages may
be different. Here we describe
only those fields that
more or less standard. If
requested all pages
(Code 3Fh), then the output unit
will be one
common header and
consistently placed
pages with their
headings.
-----------------------------
Team 0A5h - play
audio in terms of blocks
Package:
db A5h
db 0; *
dd StartBlock; block start
play | -1 c current
position
dd Length; number of blocks
db 2 * dup (?); *
Management team.
-----------------------------
Team 0B9h - read data
Package:
db B9h;
db Fmt; can be = 00h
fit any format
; 08h ordinary CD-ROM
(Yellow Book)
; 10h species
; 14h / Green XA
db 0; *
db M, S, F; start reading
db M, S, F; the end of reading
db Flg; flags readable
pieces of the sector:
; 01h three
; 02h unused
; 04h bit (?)
; 08h EDC / Zero / ECC
; 10h main body
sector (data)
; 20h descriptor
sector addresses (head)
; 40h data
subchannel (sub)
; 80h initial
sinhrobayty (sync)
; Transmitted only
those parts of the sectors for which
; Set bits.
Transmitted part of the Sector
should go straight, without
Pass
db 0; always gb = 0
otherwise error (?)
db 0; *
The command transfer data. If
start = end, is
positioning to the specified
position and test readability.
In this case, the data is not
transmitted.
-----------------------------
Team 0BEh - read data
terms of sectors
Package:
db BEh;
db Fmt;
dd Sec; start reading
(Spanish only 24-bit
db 0; *
dw ScNum; number of sectors
db Flg; flags readable
pieces of the sector (as in B9h)
db 0; always gb = 0, otherwise
error (?)
db 0; *
The team is completely analogous
team B9, except
assignment addresses the Reading
in terms of sectors.
==============================
Note b42 (b-reeze) In
annex to cweek, you can
find examples of writing instruction
in C for the PC, as well as a number of
documents, which were both
annex to the present. (Not
included in the number itself because
of formatting
text)
==============================
P.S. Initially, this document
was composed exclusively for the
internal use by
reason can not be found
The standard corporate
for ATAPI-CD. Since the entire
Information was taken from
disassembled
driver source
Linux, otdizassemblirovannoy
Firmware ACER665, a well of
description of SCSI-packages and
standard ATAPI, it is quite
, certain
discrepancies with the standard (in
whose existence I did not
sure). Despite this, I
it seems that even this
description is
a certain value.
In this description was not hit
team special reading
data (028h/0A8h) - I
there are no clear data on its work,
as well as several others,
are not used in
drivers and are not supported
all actuators. This applies
teams potrekovaya
playing Audio-CD, teams
in multi-disc CD changer
drives, etc. I
remained something else which
information, such as text
CD-drivers, firmware, etc.
which were considered
irrelevant or unduly
cumbersome. If necessary,
can be inserted into the document
excerpts from the driver.
For fans of "detailed
descriptions "can recommend
Standard SCSI-2 (X3T9.2). There
there are a large number of
interesting information, but
substantial amount (more than 20 thousand
lines, or about 1.7 Mb),
some differences from the SCSI
ATAPI and "littered"
unnecessary details complicate
obtaining the necessary information.
If you need more
detailed examination of
exchange process (exchange of
DMA, overlapping command and
etc.) can read standard
for ATAPI devices (X3T10).
However, the description of the specific CD
command is not there (there are
reference to the SCSI).
Suggestions, comments and curses
etc. Please send
at 2:5030 / 163.44
Constantine Norvatov
(Konstantin Norvatoff, KonNor)
Also, you can try to find
me at:
konnor@small.spb.su
==============================
Note2: b42 (b-reeze)
By the time of writing this
article, I still managed to
CDROM connected to the controller
NEMO together with the HDD. And the HDD,
as the master disk, and CDROM as
slave. Just would like to
clarification about the teams in
examples of packages for
Management CDROM. Record Type
db 3 * dup (0) means that the code
# 00 should be repeated 3 times.
I hope this article will help
deal with management
CDROM and soon we
obtain valuable work with
CD on the ZX.