ZX Time #08
30 апреля 2002
  TR-DOS  

Coder - private moments in the work of TR-DOS (TR-DOS port level).

<b>Coder</b> - private moments in the work of TR-DOS (TR-DOS port level).
Encoders


                                    Nuts


    Private moments to work with TR-DOS



  So today we'll talk about work
with TR-DOS port level. This question
repeatedly obmusolivalsya in various media, I just want to note
a few things that were mentioned
malorasprotrannenyh only in newspapers and
Journals: someone has long been
their programs, while others continue to not
know.


  First of all we are talking about reading
notorious port # 1F TR-DOS. Briefly
remember its purpose.


  Bit 0 - busy is the command.


  Bit 1 - Index pulse (small
hole in the floppy disk is located between the optocoupler 
photosensor) - "the beginning of the track." 


  Bit 2 - magnetic head is in
original position.


  Bit 3 - CRC error in the sector.


  Bit 4 - positioning error.


  Bit 5 - magnetic head is in
position.


  Bit 6 - on disk is the label for write protection.


  As is known, the standard TR-DOS ROM
can not directly read the port.
Therefore, even Larchenko and Rodionov still in
early 90-ies porylis in this same ROM and invented a method of 
indirect reading of the port: if by cunning utanovit some 
registers and variables, then one of the procedures ROM

match transitions akkurat to normal
RET.


  This method was published in a book
the aforementioned: "ZX SPECTRUM 'TR-DOS
for users and organisms "... ie
ugh ... PROGRAMMERS ... "here. This book
received a well-known distribution, and
on these things and the way too. Of him dancing and
izestny and respected by all, Ivan Roshchin.
He has published in various sources
a large number of corrections and comments to this method. 
Therefore, there was a certain concentration of thought on this 
method. 


    But this is not the only method!


  For example, we solve the problem
forehead: pick up and flash the ROM in a couple of
byte read ports. Developing such
method produced, in my opinion, the company MICRO
ART with its ATM Turbo, in ROM which
these bytes are. Known HONEY
COMMANDER, who uncompromisingly demanded precisely these bytes 
in ROM, not wanting to work without them. In addition, I want to

mention ELS COMMANDER, (c) 1995
Electronic services, Gomel - he did not
desired. Leave this question because
there are a lot of versions of the ROM, with all
changes - all I do not remember!


  Other methods are also often used,
but since the boom in the pages of Esme
does not cease - have about them to say again.


  Below are a couple of methods, more
or less used by programmers:


  1) Method, torn from MultiColor
Studio v2.0, (c) OHG. It applies to
every other program, and even somewhere
published.


  It is based on the same method as above, but in another 
procedure ROM: formatting the hard drive, or rather, the 
verification procedure sector after formatting. For this sector 
is read and verified the contents of our favorite port. Thus, 
this procedure can be used to verify errors when reading from 
disk. 


  Here is a used piece of
Procedure:

# 2099 IN A, (# 1F); READ PORT

        AND A, # 7F; PROVIDES Bits 0-6

        POP BC; SOMETHING recovered
                   ; Vai from the stack

        JR Z, # 20A6; no errors - transitions
                   , Dim

        LD HL, # 5CD6; address of the variable -

                   ; Number of bad sectors
                   The pit

        INC (HL); increase its
# 20A6 POP HL; SOMETHING recovered
                   ; Vai from the stack

        LD A, (HL); do

        INC HL; check

        CP 1, should be 1

        JR NZ, # 20A8; otherwise somewhere Pra
                   , Guy

        EI; and if 1 ->

        RET; vertaemsya


  Thus, to read port # 1F and test are equal to zero
his bits 0-6 must:


  1) write a zero in an intrinsic # 5CD6;


  2) Th Nito put on stack;


  3) put on the stack address at which
accurately place number 1;


  4) put on a stack of mail continue
program after it left the
ROM;


  5) put on a stack address routines
# 2099;


  6) to jump into the ROM # 3D2F


  7) in the continuation of the program (after it comes out 
from the ROM) to check the variable # 5CD6: Yezhel there is 
zero, then to work on, otherwise - to handle the error. 


  The following protsedurka implements
this algorithm.

READ1F LD B, 1

        XOR A

        LD (# 5CD6), A; zero out

        LD HL, TEMP; address where 1

        LD (HL), a

        LD DE, # 2099

        LD IX, CONTIN

        PUSH IX

        PUSH HL; all put

        PUSH BC; on stack

        JP DOS_DE; and jump into the ROM
CONTIN LD A, (# 5CD6); continued

        DI

        OR A; check

        JR NZ, DERR; mistake!

        ; Work beyond

TEMP DB 0; Temporary variables

DOS_DE PUSH DE; jump in ROM DOS

        JP # 3D2F; through the point


  That's it.


  2) The process for reading the port with
procedures for TR-DOS, located at
# 3FE5. Applies to quadrupeds Program
RDS v3.1 (c) RokSoftware. This procedure
usually designed for reading array
data from port (C), with the synchronization
by bits 6 and 7 (strobe and data availability) port # FF.


  Here we used is not quite the standard treatment, because if, 
immediately make the transition to this procedure, it fixated 
on a survey of these bits. Therefore, we first define the drive 
controller relatively long command polls the port and just in 
time for the execution of this team and arrive at the polling 
bit. Happens is your address # 3FEC: 

# 3FEC INI; read port (C)

            , And place it

            ; Soderschimoe in (HL)

        JR # 3FE5; prehodim

# 3FE5 IN A, (# FF); Examine

        AND # C0; bits

        JR Z, # 3FE5; preparedness

        RET M; vertaemsya

                   And if all reads


  Thus read port and write its contents to the specified address
should:


  1) Run to execute the command
drive. For this purpose, commonly used command position. The 
point is that the drive will be positioned on the current path, 
ie just start. This limits

Application method: it can be used in the procedure to check 
for a floppy disk in the drive; 


  2) Record in the register C port number:
# 1F;


  3) Record of HL will be written to address the port;


  4) It would be nice and stop the drive


  According to this algorithm works following procedure to 
check for disk in the drive.



  Despite the fact that the procedure reads
all the bits of the port, the procedure checks only the second 
bit - the presence of anti- write to disk. This is explained by 
the fact that not all drives work procedures that make such a 
check on the presence of an index pulse (hole in the

floppy disk) - it seems the hardware implementation
and temporal characteristics of different
drives differ greatly
from each other.


  This procedure only reads this
bits, and the procedure must check
wait for 1 in this bit (when the disk is pulled out), then 0. 
If the disc is protected write, then while it is inserted, this 
bit always be installed.


DREADY LD A, # 3C; entry # FF

        CALL TOFF

        LD A, # 1F; pozitsianirovanie on

        CALL TO1F; current track

        LD A, # D8; interrupt opreatsii

        CALL TO1F

        LD HL, TEMP; read here

        LD C, # 1F; from port # 1F

        LD DE, # 3FEC

        CALL DOS_DE; read

        XOR A; reset controller

        CALL TO1F

        LD A, # D8; interrupt opreatsii

        CALL TO1F

        LD A, (TEMP); check bit 6

        AND # 40

        RET Z; reset

        LD A, 1

        RET; set

TOFF LD C, # FF; entry # FF

        JR TOWG
TO1F LD C, # 1F; entry # 1F
TOWG LD IX, # 2A53; OUT (C), A
DOS_IX PUSH IX; passage in Rom

        JP 15663

TEMP DB 0; temporary variable



     Ultra-fast positioning

               drive


  This technique is used very rarely,
while providing a quiet and fast moving drive heads. Almost -
is the replacement of hardware turbirovanie drive. The downside 
of this produdury is its incompatibility with some type of 
"slow drive" with worm ("Screw") by moving the heads. Strictly 
speaking, this procedure used MultiColor Studio v2.0,

(C) OHG. So if this program is a
You do not go, then the blame should drive and
The author, not predusmotrevshih
setup procedure.


  In general, it is desirable to consider turning off this 
sverbystrogo positioning, in addition, this method You can 
"hedge" more team positioning controller

drive. The program itself uses
command a forward step "and" step back ". Speed ​​premescheniya 
defined delay between two such teams (preferably

provide for its regulation!).


  You must first write
desired values ​​in registers # 7F (track)
and # FF (the status of the controller). In addition,
need to store the value of the current track (in the variable 
TRACK), as from it counted the number of steps needed to move 
on a given track. Its contents - LUN track (0-166).



  At the entrance to the procedures in the register A should be 
given a track number, where by premeschenie.


POSIT PUSH AF; remember

        SRL A; get physical

        LD C, A; track number

        LD A, (TRACK); current

        SRL A; physical path

        CP C

        JR Z, POSI_OK; already here

        JR C, POSI_UP; forward

        SUB C; ago

        LD B, A; in tracks

        LD A, # 78, "Step Back"

        JR POSITI
POSI_UP LD D, A

        LD A, C

        SUB D; ago

        LD B, A; in tracks

        LD A, # 58; "Undo"
POSITI LD (POS_COM), A; command code

        CALL PAUSE; pause
POSITIC PUSH BC

        LD DE, # 2FC1

        CALL DOS_DE
POS_COM EQU $ +1

        LD A, # 58; code

        LD DE, # 2FC3; team

        CALL DOS_DE

        CALL PAUSE; wait a bit

        POP BC

        DJNZ POSITIC; repeat
POSI_OK POP AF

        LD (TRACK), A; new value

        RET

TRACK DB 0; current track

PAUSE PUSH BC

        PUSH HL

        LD BC, 400; delay
POS1 DEC BC

        LD A, B

        OR C

        JR NZ, POS1

        POP HL

        POP BC

        RET

DOS_DE PUSH DE; jump in ROM DOS

        JP # 3D2F; through the point



    Ultrafast stop the drive


  This protsedurka also ripped out
MultiColor Studio v2.0, (c) OHG. She
also based on muhlevanii with the team
positioning and the original reading
Port # 1F. To read this procedure is used at # 3EF3:

# 3EF3 IN H, (C); reading port
# 3EF5 IN A, (255), waiting

      AND 192; any signal

      JR Z, # 3EF5

      EI; in case of return

      RET M; if entered INTRQ

                  , Then return

      DI; ban interrupt

      IN A, (127) Read byte

      JR # 3EF5; repeat


  As you can see, the contents of the port remains in the
register H, and carried out by
execution team.

  Now, the procedure itself, which provides
otsanovku quick drive. I must say
it conflicts with some emulators: there is movement on the track
forward.

STOPDSK PUSH AF

        PUSH HL

        LD A, # 40, a step forward without

        ; Increment register tracks

        LD DE, # 2FC3

        CALL DOS_DE

        LD A, # D8; interrupt

        LD DE, # 2FC3

        CALL DOS_DE

        LD C, # 1F

        LD DE, # 3EF3

        CALL DOS_DE

        POP HL

        POP AF

        EI

        RET


                 *





Other articles:

From the Editor - DWT chastises Pavel Pavlov for the tip about the newspaper.

Review-mail - readers' letters: Vitaliy Petrenko (SLY), Vadim Chumachenko , Nuts, Xmus.

Review novya - Press: Adventurer # 13, Lamergy # 5 - # 9, Body # 33 - # 36, Heresy # 8, Target # 1910, DonNews # 16. Download: ACEdit 0.60, Pro Tracker 3.53. Game: Magic Music Toy 1.02, opener, 3D-Roost, Citadel demo.

News and age - continued Contest , Nuts stopped work on Commander TRouble, Dizzy Game Editor is almost ready, the demo version is ready, etc.

Opinion - Thoughts on the System Software on the Spectrum.

Opinion - lzb/j77: "I'm here and I will not be silent!"

Opinion - Passage: The new print newspaper for Sprektruma.

Coder - private moments in the work of TR-DOS (TR-DOS port level).

zhelezyaki - shemka: Video Spectrum Binding to the black level.

PC and Spectrum - Unreal vs ZX Mak: comparison of two popular emulators ZX Spectrum.

PC and Spectrum - an overview of PC software for ripping and converting Spectrum files.

about everything about everything - "The path before dawn."

and laughter, and a sin - Letter to the Military History forum.

Advertising - rekalama and announcements.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
INTRODUCTION TO SHELL - BornDead # 0E is uniquely a masterpiece of modern coding in all its aspects.
Vedem - Description, prohodilka play "Three Week'S in Paradise".

В этот день...   3 May