Error: No Drive !
ZXNet echo conference «code.zx»
From 500:812/22.01 → To All 7 May 1998
▒
▒▒▒┌┐▒ ▒▒ ▒▒ ▒ ┌┐▒
┌┐┌┐▒└┘▒▒ ┌──┐┌┐▒┌┐▒ ┌┘└┐▒
│└┘│┌──┐▒ │┌┐│││▒││▒ └┐┌┘▒
│┌┐│└┐┌┘▒ ▒ │└┘│││▒││▒ └┘▒
││││┌┘└┐┌─┐▒│┌┐││└┐│└┐▒ ┌┐▒
└┘└┘└──┘└┐│▒└┘└┘└─┘└─┘ └┘
└┘
I thought and decided: it’s simply necessary
detect the presence of a disk drive, when
for him! After all, every program
may break off and say "NO DISK". A
The disk is there, there's just no disk drive...
Therefore, here is the program that I
I recommend inserting it wherever possible.
Of course, if there is a disk access there
bypassing #3D13.
Obvious disadvantages: 2 system systems are damaged
variables in TR-DOS and when you click on
BREAK is called by RST #08, and therefore
BASIC or part of it is required.
Possible problems with interruptions - I haven't
I know whether they will definitely be turned off at the entrance
valid if they were turned off at the input.
Also I cannot guarantee the absence
glitches in determining the drive on special
brake discs. And on the faulty ones.
Determination occurs by active
TRK00 interface signal level. For
this causes the head to move to track 0
and the microcon status register is read
troller. If the level is passive, then
either there is no disk drive at all, or it has
The sensor is faulty or does not move
head
;---------------------------------------
;(C) FK0 1998
; DETERMINING THE PRESENCE OF A DISK DRIVE
; AT THE OUTPUT:
; Z - NO DISK DRIVE; CY - PRESS BREAK
DRVDET LD HL,(#5C3D) ; Intercepting BREAK
PUSH HL
LD (END+1),SP
LD HL,ERR_SP
LD (#5C3D),HL
LD A,#D8
LD(#5CD8),A ; Interrupt ****
LD C,#1F
CALL OUTDOS
LD A,#08 ; Recovery
CALL OUTDOS
LD D,0
PUSH DE
CALL POSIT ; Waiting for the end
POP DE ; movement
CALL POSIT ; heads and
LD A,(#5CCD) ; read register
AND #04 ; condition.
JR END ; TRK00 = 2 bit
OUTDOS LD HL,#2A53 ; Output to port
JR DOS1
POSIT LD HL,#2740 ; Positioning
DOS1 PUSH HL
JP #3D2F
DS 12; To interrupt
ERR_SP DW $+2 ; IM 1 and for RST #08
SCF ; on Scorpio
END LD SP,0
POP HL
LD (#5C3D),HL
PUSH AF
LD C,#FF ; Stopping the disk
XOR A
CALL OUTDOS
LD B,0 ; Pause ****
DJNZ$
LD A,#3C
CALL OUTDOS
LD C,#3F
XOR A
CALL OUTDOS
POP AF
RET
;---------------------------------------
****Microcontroller interrupt
maybe not necessary.
**** The pause may be too long.
Everything is checked - it works
even on a slow TEAK!
P.S. I'm too lazy to write, but I figured it out
that BREAK can be intercepted more easily -via #5CC2. Of course we need to check it.
-+- ZXASM_3.0
From 500:812/08.14 → To Kirill Frolov 9 May 1998
Hi, Kirill!
KF> I thought and decided: it’s simply necessary
KF> detect the presence of a disk drive, when installed
KF> And therefore here is the program that I
KF> I recommend inserting it wherever possible.
Yes, here's the problem - there is no choice of disk drive anywhere.
it will check the one that was selected last.
KF> Also, I cannot guarantee the absence
KF> glitches in determining the drive on special
KF> brake disc drives.
will work on any.
KF> LD C,#FF ; Stopping the disk
KF> XOR A
KF> CALL OUTDOS
KF> LD B,0 ; Pause ****
KF> DJNZ $
KF> LD A,#3C
KF> CALL OUTDOS
but stopping the disk like this is not good.
It's better to use command #20 - step with your head up.
The disk drive cuts out immediately and does not have time to move.
KF> P.S. I'm too lazy to write, but I thought of it
KF> that BREAK can be intercepted more easily -
KF> via #5CC2. Of course we need to check.
both simpler and better.
Best wishes.Dmitry aka -=LD=- / X-TRADE GROUP.
-+- SMM version 1.08
From 500:812/06.13 → To Kirill Frolov 10 May 1998
Hello, Kirill!
07-05-98 в 18:17:00 Kirill Frolov => All:
===============cut===================
SEA_DRV OR #3C
CALL TO_PRFF
CALL SEA_INI
BIT 2,A
JR NZ,SEA_DR1
LD A, #4
CALL TO_PR3F
CALL SEA_INI
BIT 2,A
JR NZ,SEA_DR1
;----------------------
;----------------------
SEA_INI LD A,#0
CALL TO_PR1F
LD IX,#3EF5 ;WAITING OF INTRQ
CALL TO_TWO
JP FR_PR1F
===============cut===================
Мой вариант.
С нилучшими пожеланиями, Олег aka Ruiner.
-+- Брысь-Edit v6.06