Echo #03
31 марта 1997

Tricks-2 - On the correct handling Retry / Abort / Ignore in the TR-DOS.

<b>Tricks-2</b> - On the correct handling Retry / Abort / Ignore in the TR-DOS.

      On the correct processing of R / I / A



   VfNG / NEW


   In many programs, people may want to grab a standard message
DOS Error reading / writing sector to
Lovely open its window, do
Request Retry / Abort / Ignore, get an answer
and the right to continue or terminate the program. Not all are 
able to do it. I will try to illuminate this issue.



   At # 3F0A DOS is a procedure that provides a record of the 
sector, and by # 3F0E-reading. Is precisely because of these 
procedures and is read / write standard features. Consider these

procedures carefully:

# 3F0A LD A, # A0; code write command

                      ; Sector

        JR # 3F10
# 3F0E LD A, # 80; code read command

                      ; Sector
# 3F10 LD (# 5CFE), A

        LD D, # 0A; number of attempts

                           ; Reading / writing
# 3F15 PUSH DE

        DI

        LD A, (# 5CFF)

        INC A

        OUT (# 5F), A; sector number

        LD HL, (# 5D00); buffer

        LD C, # 7F; data port

        LD A, (# 5CFE); command code

        OUT (# 1F), A; invoking

        CP # A0; entry?

        PUSH AF

        CALL Z, # 3FBA; call recording

                           ; Sector

        POP AF

        CALL NZ, # 3FD5; reading challenge

                           ; Sector

        POP DE

        EI

        IN A, (# 1F); reading register

                          ; State

        LD B, A

        AND # 7F

        RET Z; out if there is no

                          ; Error

        LD HL, # 29D8; address labels

                          ; "Read Only"

        AND # 40; write protection?

        JR NZ, # 3F4B; yes

        LD A, B

        AND 4, loss of data?

        JR Z, # 3FA0; not. re

                          ; Attempt to read.

        DEC D; last attempt?

        JR NZ, # 3F15; not, another

        LD HL, # 29E2; address labels

                          ; "Disk error"

        LD A, # D0

        OUT # 1F, A; cease to
                          ; Mande, if it

                    , Continues to be executed

        LD A, B

        AND 1

        JP NZ, # 3EE7; treatment

                          ; "No disk"

        IN A, # 3F; reading register

                          ; Track

        OR A; zero?

        JR NZ, # 3F5F; yes

        IN A, # 5F; reading register

                          ; Sector

        CP # 0A; ten?

        RET Z; output, if so
# 3F5F PUSH HL
# 3F60 CALL # 1D97; call clearing

                          ; Screen

        POP HL

        RST # 18

        LD HL, # 2A13; address labels

                          ; "Trk."

        RST # 18; output

        IN A, # 3F; reading register

                          ; Track

        CALL # 1DA3; withdrawal rates

                          ; Track

        LD HL, # 2A18; address labels

                          ; "Sec."

        RST # 18; output

        IN A, # 5F; reading register

                          ; Sector

        CALL # 1DA3; withdrawal rates

                          ; Sector

        LD HL, # 29FE; address labels

                    ; "Retry / Abort / Ignore?"

        RST # 18; output labels
# 3F7B CALL # 1052, # 1052 procedure
And returns to the A ASCII-code pressed on the keyboard
# 3F7E CP "I"; Ignore?

        RET Z; refund if

                          Yea

        CP "R"; Retry?

        JR Z, # 3F94; yes, access to

                          ; The next cycle

                          ; Attempts

        CP "A"; Abort?

        JR NZ, # 3F7B; not, go to

                          , Reading the keyboard
                          ; Tours
# 3F89; Abort


   The main thing that can be extracted from the drawn above, 
is that as a result of error, we find ourselves either in the # 
3F60, or # 3EE7. # 3F60 Poprubuem examine more closely.


# 3F60 CALL # 1D97
# 1D97 RST # 20

        DEFB # 6B

        DEFB # 0D
# 0020 JP # 2F72
# 2F72 LD (# 5D02), HL

        LD (# 5D04), DE

        POP HL

        LD E, (HL)

        INC HL

        LD D, (HL)

        INC HL

        PUSH HL

        LD HL, # 3D2F

        PUSH HL

        PUSH DE

        LD HL, # 5CC2

        PUSH HL

        LD HL, (# 5D02)

        LD DE, (# 5D04)

        RET


   Thus, when a disk error is different from "No disk", we fly 
to # 5CC2. In # 5CC2 standard sticks RET. This point

used to call subroutines ROM
BASIC. Two bytes in # 5CC3 and # 5CC4 not used, then we are 
legally able to enter in the # 5CC2 team of 3 bytes: JP 
kudanibud, such as driver of treatment. 


   Note that after this most at JP
stack will protrude number # 0D6B. Hence,
make the following veshchichki:

DRIVER EX (SP), HL

        PUSH AF

        LD A, H

        CP # 0D

        JR Z, ERROR

        POP AF

        EX (SP), HL

        RET


   Guess for yourself what happened then. Well
and now

ERROR POP HL

        POP HL

        POP HL

        POP HL

        POP HL

        CALL PROC; call their own
; RIA procedure return-to A "R", "I", "A"
, Respectively.

        LD HL, # 3F7E

        EX (SP), HL

        JP # 3D2F; return to DOS

                        ; Answer!

   In the simplest case CALL PROC replaced by LD A, "R" / "I" / 
"A", if the answer to error is defined odnaznachno.



   Similarly, although somewhat more complicated
is the case with the processing of "No disk"
(# 3EE7). In this, as well as to depart on
"Abort", sort it out themselves, it is not difficult
do.




Other articles:

Introduction - On the control interface of the newspaper.

Assembler - An interesting trick with the assembler.

roof was demolished - DI: HALT is not always caused a breakdown of ... Santa Claus.

fun begin - The main event of 1996. Dictionary programmer.

own opinion - IMP talks about the development of Russia's ZX-demoscene.

What are heard behind the hill - What is now doing all the known Western manufacturers software on Speccy? ..

Hour ottyaga - Notes of a Terminator T-1000.

Small news - What happens to the Speccy in Belarus? ..

Form - The survey goes on ...

Fantasy - A fantastic tale "Ice and Flame" (continued).

Prikolchik - Prikolchik's Navapolatsk?. What letter comes to us in the laboratory.

Description - Description, prohodilka game BLINKY'S SCARRY SCHOOL.

Presentation - REALSOFT is a strategic game Technodrom.

Ottyag - have a good time can be different. Book of problems - "puzzles" math.

Programmers - On additional functions TR-DOS 5.04.

Programmers - On the music format modules Sound Tracker Pro and source player.

HARDWARE - Mode switch Profi / Pentagon.

Tricks-2 - How to throw a screen to one INT.

Tricks-2 - On the correct handling Retry / Abort / Ignore in the TR-DOS.

interesting letter - Letters from readers containing two different things: - If you burn a floppy drive on the buggy;

Presentation-2 - Description of the TEXT PRINT v1.2.

Humor - A story about Stirlitz.

Humor - Stirlitz: Elephants go north.

Book - Secrets ZX-Spectrum: TOC.

Book - Secrets ZX-Spectrum: Keyboard.

Book - Secrets ZX-Spectrum: Editor.

Book - Secrets ZX-Spectrum: ZX-BASIC.

Book - Secrets ZX-Spectrum: Computer Arithmetic.

Book - Secrets ZX-Spectrum: memory usage.

Book - Secrets ZX-Spectrum: BASIC system variables.

Book - Secrets ZX-Spectrum: Channels and Streams.

Book - Secrets ZX-Spectrum: System Procedures.

Book - Secrets ZX-Spectrum: Bugs in the System.

Advertising - Advertisements and announcements ...

Afterword - That was not included in this number.


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

Similar articles:
Review WEB - Russian-language resources on the ZX Spectrum.
Chip'n'Dale - 1 - Chip 'n Dale Rescue Rangers zaSAVEitsya Part 1.
Party Zone - Overview of demos with CC'000 Invitation Intro Compo.

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