Jason.blk
ZXNet echo conference «real.speccy»
From Kirill Frolov → To All 23 March 2001
There is a sabzhe driver and ide+.blk for iS-DOS under the Nemov scheme.
So the disk from one driver is not visible to the other and vice versa.
Do they recalculate their coordinates in CHS differently? Which one
is “correct”? The correct formula is: LBA=(C*HEADS+H)*SECTORS+S-1.
* Crossposted in ZXNET.SOFT
* Crossposted in REAL.SPECCY
From Alexey Volyk → To All 24 March 2001
23 Mar 01, 21:13 "Kirill Frolov" wrote to "All":
KF> There is a driver for iS-DOS under the Nemov scheme, a driver and ide+.blk.
KF> So the disk under one driver is not visible to the other and vice versa.
KF> They recalculate their coordinates in CHS differently. ? Which one
KF> is “correct”? The correct formula is: LBA=(C*HEADS+H)*SECTORS+S-1.
Isn’t it destiny to configure ide_tune.bat? :)
With respect, Volyk Alexey
from Phantom Family.
From Kirill Frolov → To All 24 March 2001
KF>> ide+.blk. So the disk from one driver is not visible to another
KF>> and vice versa. Do they recalculate their coordinates in CHS differently?
KF>> Which one is “correct”? The correct formula is:
KF>> LBA=(C*HEADS+H)*SECTORS+S-1.
AV> Is it not destiny to configure ide_tune.bat? :)
Do you think I'm a complete slowdown? I set them up the same way. Here they are in the system
both
coordinates are the same, but one doesn’t see the other’s disks and vice versa!
And now I think that if some Mazda driver out of these two
calculates
coordinates incorrectly, then I risk other systems (ms-dos/cp/m) on this
screw screw up
the isdos partition or, on the contrary, the isdos screws up something. Is it really possible to pick up a disassembler again
and tinker with the driver? :-( I don’t feel like unscrewing the screw from the speck and looking in the pussy
what’s wrong
.
From Alexey Volyk → To All 25 March 2001
March 25 01, 00:22 "Kirill Frolov" wrote to "Alexey Volyk":
KF> Do you think I'm completely slow? I set them up the same way. Here they are both in the
KF> system, the coordinates are the same, but one doesn’t see the other’s disks and
KF> vice versa!
:)
KF> And now I think that if some Mazda driver out of two
KF> of these calculates the coordinates incorrectly, then I risk other
KF> systems (ms-dos/cp/m) on this screw screwing up the isod partition or
KF> on the contrary, he will screw up something. Is it really possible to pick up the disassembler again
KF> and tinker with the driver? :-( I don’t feel like unscrewing the screw from the speck and in the pussy
KF> to see what’s wrong there.
The point is different. Launch the program dev.com. It will show you a list of all drivers and
devices. drivers.
You can simply transfer devices to different drivers. That is, by disabling one
driver, attach another one there.
From Kirill Frolov → To All 25 March 2001
KF>> calculates the coordinates of these two incorrectly, then I risk
KF>> other systems (ms-dos/tsp/m) on this screw will screw up the isdos
KF>> section or, conversely, the isdos will screw up something. Is it really possible to pick up a disassembler again
KF>> and tinker with the driver? :-( I don’t feel like unscrewing
KF>> the screw from the speck and looking at what’s wrong there.
AV> The point is different. Launch the program dev.com. It will show you a list of all
AV> drivers and devices. more than
AV> one driver. You can simply transfer devices to different drivers.
AV> That is, by disabling one driver, attach another one.
I’m not a brake! I have one C: on ide+.blk, and the other D: Jason.blk.
And the program ide_tune.com for C: and D: for BOTH DRIVERS there were
the same coordinates are set. I loaded the drivers separately and together.
They don’t even have a zero block from another driver.видят!
From Valerij Kozhevnikoff → To All 26 March 2001
26 March 01 01:25, Kirill Frolov -> Alexey Volyk:
KF> I’m not a slowdown! I have one C: on ide+.blk, and the other D: Jason.blk.
KF> And the program ide_tune.com for C: and D: for BOTH DRIVERS there were
KF> identical coordinates are set. And I loaded the drivers separately and together.
KF> They don’t even see the zero block from another driver!
······------====== Monitor glass cutter ======------······
1999
29.4.99: Adopted driver
IDE HDD Jason.blk (Moscow), giving
acceleration up to 1.65 times on read-
copy operations:
Tests:
1. Copying disk to disk (15 MB) using abc.com - 1.65 times
2. Checking the disk with prog bad: in 1.4
3. Loading an electronic disk image
1.3 times (7 seconds instead of 9)
4. Checksum verification (9.7 MB)
13% (2'58" instead3'25")
5. Copying a directory (coca, 4286
blocks, 243 files) by 6.5%
However, this driver has no brakes (Break
is not tracked) and has hardly been tested
on bad sectors. Therefore, use
if you wish, at your own peril and
risk.
12.5.99: fileshow, arzt+ - Fixed
indication
15.5.99: trd_ram - key /a for automatic operation. Work in ISDOS Classic
15.5.99: ide+5.blk - Accelerated by the method
Almost as fast, but with
brakes and made of. tested
predecessors.
SPEED CHARACTERISTICS OF DRIVERS:
Special tests:
0.1 16368 kB (16 kB each) Linear READ TEST
ide+4 117" =140 kbps
ide+5 78" =210 kbps 1.50 times
Jason 73" =224 kbps at 1.60 (another 6.5%)
0.2 16368 blks 16kB REPEAT READ TEST
ide+4 107" =153 kbps
ide+5 68" =241 kbps at 1.57 times
Jason 66" =248 kbps at 1.62 (another 3%)
ed128 58" =282 kbps another 12%
0.3 10608kB Linear WRITE TEST
ide+4 101" =105 kbps
ide+5 52" =204 kbps at 1.94 times
Jason 45" =236 kbps at 2.24 (another 13.5%)
(ed128 282 kbps another 17%)
Real tasks:
1. bad.com 65520 blks (READ)
ide+4 138" =118 kbps
ide+5 99" =165 kbps (в 1.39 months)
Jason 99" =165 kbps
ed128 81" =202 kbps
floppy =14 kbps (kay.blk)
2. abc.com 7.8 MB (COPY)
ide+4 159" =50 kbps
ide+5 103" =77 kbps в 1.54
Jason 96" =83 kbps в 1.66 (price 7%)
floppy: once 7 kbps
······------====== Thanks for watching ======------······
What about you?
WBR, Jason.
[Team Obituary][Team Friday 13th][Team Obituary Мньяки][Team Огромпорые]
From Valerij Kozhevnikoff → To All 26 March 2001
KF> I'm not a brake! I have one C: on ide+.blk, and the other D: Jason.blk.
KF> And the program ide_tune.com for C: and D: for BOTH DRIVERS there were
KF> identical coordinates are set. And I loaded the drivers separately and together.
KF> They don’t even see the zero block from another driver!
Some kind of garbage. Leontyev saw my source code, tested the driver, everything was fine
.
;(c) Jason.
;idenemo.blk
;HDD IDE driver for IsDOS.
;NEMO controller supported.
;Direct HDD access used.
DEFW INSTL ;16 system bytes
DEFW BREAD
DEFW BWRITE
DEFW INIT
DEFB #E0 ;driver status bytes
DEFB #04
;disk rudiments
DEFW #0000 ;offset to IM2
DEFB #FC ;trdos type
DEFB #04 ;number of attempts R/W
DEFW #0000
;-----------------------;header format saved
HEAD DEFB #00 ;geometry. number of heads
SECTOR DEFB #00 ;sectors
HDDMAP DEFW 0 ;initial device cylinders
DEFW 0
DEFW 0
DEFW 0
DEFW 0
DEFW 0
DEFW 0
DEFW 0
QCYLND DEFW #0270 ;number of BLOCKS per cylinder!
DEFB #FA,#02 ;??? unclear
CURDEV DEFW #0000 ;start. cyl. current devices
CURDRV DEFB #A0 ;current mask drive
TICKS_ DEFW #1770 ;6000 ticks before shutdown
;==============================;then everything is mine
INSTL
CP #08 ;switching devices.
JR NC,INIT
;A=#FF is called after each move or installation
;A=#FE is called before deleting
RLCA
LD HL,HDDMAP
LD B,#00
LD C,A
ADD HL,BC
LD DE,CURDEV
LDI
LDI
INIT
IN A,(#F0) ;is the screw OK?
CP #50
RET Z ;yes!
SRESET DI ;otherwise we reset it
LD A,(CURDRV)
OUT (#D0),A
LD A,#0C
OUT (#C8),A
LD B,#00
1$ DJNZ 1$ ;pause
LD A,#08
OUT (#C8),A
2$ IN A,(#F0) ;waiting for BSY to be removed
RLCA
JR C,2$
LD A,#10
OUT (#F0),A ;recalibration command
EI
_WAIT_ CALL BRKTST
RET C
IN A,(#F0)
BIT 7,A
JR NZ,_WAIT_ ;waiting for execution
CP #50 ;screw OK?
RET Z
JR SRESET
BRKTST
LD C,9 ;check BREAK
RST #10
RET Z
CP #16
SCF
RET Z
OR A
RET
;==============================;
BREAD LD C,#00 ;read flag
JR LLLL
BWRITE LD C,#FF ;write flag
LLLL
CALL WORK__
EI
RET
WORK__ LD A,B ;!> (quantity)
PUSH DE ;start
EXX ;changed set
;-------------------------------;
POP DE ;task file calculation
LD HL,(QCYLND) ;cvol
SRL H
RR L
EX DE,HL
SRL H
RR L
EX AF,AF' ;!>
XOR A ;
LD C,A ;hl - disp
LD B,A ;de - cvol
CNTCLD SBC HL,DE ;disp?cvol
INC BC
JR NC,CNTCLD
DEC BC ;bc - disp/cvol = dcyl
ADD HL,DE ;hl - disp?cvol = lsec
LD A,(SECTOR) ;a - qsec
LD E,A
XOR A
LD D,A
CNTHED SBC HL,DE ;hl - lsec
INC A
JR NC,CNTHED
DEC A ;a - lsec/qsec = dhead
ADD HL,DE ;hl - lsec?qsec = dsec
LD H,A
EX DE,HL ;d-thead, e-tsec
INC E
LD HL,(CURDEV) ;hl - cyl
ADD HL,BC ;cyl + dcyl = tcyl!
LD A,(CURDRV)
OR D
LD D,A ;привод/головка в D
;-------------------------------;
PUSH HL ;
LD HL,FLAGS_
EX AF,AF' ;!< кол-во _блоков_ для опер.
LD B,A ;если коорд. четна - CY=0
LD A,#00
RLA ;четность коорд.
SRL B ;B/2 (счетчик)
RLA
JR NZ,TASKFL ;что-то нечетно
DEC HL
DEC HL
RRA
TASKFL LD C,A
LD A,B
LD (COUNT),A
LD B,#00
ADD HL,BC
LD A,(HL) ;<
LD (_FLAG),A ;злобные флажки
DI
POP HL
LD A,D ;write job file
OUT (#D0),A ;drive/head
LD A,H
OUT (#B0),A ;high byte of cylinder
LD A,L
OUT (#90),A ;low byte of cylinder
LD A,E
OUT (#70),A ;sector
EXX ;aha!
;============================================================================;
COUNT EQU $+1
_FLAG EQU $+2
LD DE,0
LD A,C ;use the flag
OR A ;
JP NZ,WRITE_ ;write
;-------------------------------;
SRL D ;and then read
JR NC,NO_ODR
INC E
NO_ODR LD A,E
OUT (#50),A ;set counter
OR A
CALL COMAND ;read
RET C
SRL D
JR C,R_LAST
LD C,#50
IN A,(C) ;counter
LD A,#40 ;read whole sector
JR Z,_INPUT
SRL D
JR NC,_INPUT
RRCA
CALL SKIP_4 ;skip half the sector
LD A,#20 ;read half the sector
_INPUT
CALL _INI_
W_BS_I IN A,(#F0) ;waitready
BIT 7,A ;BSY?
JR NZ,W_BS_I
BIT 3,A ;DRQ?
JR Z,END_RD
IN A,(#50) ;counter
OR A
LD A,#40
JR NZ,_INPUT ;if not 0, then again
SRL D ;last sector as a whole?
JR C,_INPUT ;yes!
;here are readers for single halves
;==============================;last block.
RRCA
R1HS2H ;read half a sector
CALL _INI_
LD A,#20 ;skip half a sector
CALL SKIP_4
JR ENDTST ;end
;-------------------------------;one block
R_LAST LD A,#20
SRL D
JR NC,R1HS2H
CALL SKIP_4 ;skip half a sector
LD A,#20 ;read half a sector
CALL _INI_
ENDTST
ET IN A,(#F0) ;state
BIT 7,A
JR NZ,ET
END_RD RRA
LD A,#07 ;error “broken disk”
RET
;main pump.
;reads A*4 words to address HL. At A=#40 - a full sector.
;In my scorpion driver, all the cycles are even more open,
; this gives a 10-15% increase in speed.
_INI_
LD C,#10
_INP INI ;16
INC C ;4
INI ;16
DEC C ;4 40
INI
INC C
INI
DEC C
INI
INC C
INI
DEC C
INI
INC C
INI
DEC C
DEC A
JP NZ,_INP
RET
;spits A*4 words.
SKIP_4
LD B,A
SKIP__
IN A,(#10)
IN A,(#10)
IN A,(#10)
IN A,(#10)
DJNZ SKIP__
RET
;-------------------------------------------;
;spits A*4 words with addresses in HL
; in the data register. When A=#40, a full
;sector (#200 bytes) will be spit out.
_OUTPUT
LD (STORE+1),SP
LD SP,HL
LD B,A
LD C,#10
_OUTSP
POP HL ;10
LD A,H ;4
OUT (#11),A ;11
OUT (C),L ;12 37
POP HL
LD A,H
OUT (#11),A
OUT (C),L
POP HL
LD A,H
OUT (#11),A
OUT (C),L
POP HL
LD A,H
OUT (#11),A
OUT (C),L
DJNZ _OUTSP
LD ($+5),SP
LDHL,0
STORE LD SP,0
RET
;the underlying one can be used instead of the upper one,
;if you can’t touch the stack
;_OUTPUT
; LD C,#10
;_OUTP INC C ;4
; INC HL ;7
; OUTD ;16
; DEC C ;4
; OUTI ;16
; INC HL ;7 54 (brakes in the garden!)
;
; INC C
; INC HL
; OUTD
; DEC C
; OUTI
; INC HL
;
; INC C
; INC HL
; OUTD
; DEC C
; OUTI
; INC HL
;
; INC C
; INC HL
; OUTD
; DEC C
; OUTI
; INC HL
;
; DEC A
; JP NZ,_OUTP
; RET
;--------------------------------------------------------------;
;sends the R/W command (by flag C), if C=1, then write.
;wait for readiness, returns flag C if there were errors.
COMAND
EX AF,AF'
WDRDY IN A,(#F0)
BIT 7,A
JR NZ,WDRDY
BIT 6,A ;waiting DRDY
JR Z,WDRDY
EX AF,AF'
LD A,#20 ;command read
JR NC,COM_RD
OR #10 ;or write
COM_RD
OUT(#F0),A ;command
WAIT_R IN A,(#F0)
BIT 7,A ;BSY? (busy?)
JR NZ,WAIT_R
BIT 0,A
JR NZ,ERR_CM ;error
BIT 3,A ;DRQ? (wants data?)
JR Z,WAIT_R
ERR_CM RRA ;error bit in flag C
LD A,#0A ;parameters are invalid
RET
;================================================
WRITE_ SLA D
JR NC,NO_ODW
INC E
NO_ODW SLA D
JP C,BL1HLF
SLA D
JR C,BL2HLF
LD A,E
OUT (#50),A ;counter
SCF
CALL COMAND ;write
RET C
_OUTSE LD A,#40 ;main loop
_OUTEX CALL _OUTPUT
W_BSY_
IN A,(#F0)
BIT 7,A ;BUSY?
JR NZ,W_BSY_
BIT 3,A ;DRQ?
JR NZ,_OUTSE
RRA
LD A,#07 ;if error
RET C
IN A,(#50) ;counter=0?
OR A
JR NZ,W_BSY_ ;if not, then again
SLA D
JP NC,WLSBLK ;completing the last block
XOR A ;successful completion
RET
;spitters herehalves
;-------------------------------;block in the 2nd half
BL2HLF ;sector counter=1
LD A,#01
OUT (#50),A
OR A ;read
CALL COMAND
RET C
PUSH HL
LD HL,BUFFER ;first
LD A,#20 ;half sec. cheat to buffer
CALL _INI_
LD A,#20 ;second half second. skip
CALL SKIP_4
POP HL
WBFBS1 ;waiting
IN A,(#F0)
CP #50
JR NZ,WBFBS1
LD A,E ;counter
OUT (#50),A
SCF
CALL COMAND ;record
RET C
PUSH HL
LD HL,BUFFER ;write a buffer
LD A,#20
CALL _OUTPUT
POP HL
_OUTBL LD A,#20 ;attribute a tail
JR _OUTEX ;and continue
;---------------------------------;block in the 1st half
BL1HLF SLA D
JR C,BL2HLF ;or 2nd
LD A,#01
OUT (#50),A
OR A ;read
CALL COMAND
RET C
S1HR2B
LD A,#20
CALL SKIP_4 ;skip first half
PUSHHL
LD HL,BUFFER
LD A,#20 ;second read. to buffer
CALL _INI_
POP HL
WBFBS2 ;waiting
IN A,(#F0)
CP #50
JR NZ,WBFBS2
LD A,E
OUT (#50),A
SCF
CALL COMAND ;write
RET C
LD A,#20 ;write to first half.
CALL _OUTPUT
LD HL,BUFFER ;and merge the buffer
JR _OUTBL
;-------------------------------;
WLSBLK LD DE,#8001 ;add one last
LD A,#02 ;block
OUT (#50),A ;counter=2
OR A ;read
CALL COMAND
RET C
LD A,#40 ;skip the entire current sector
CALL SKIP_4
BSY_LB
IN A,(#F0)
BIT 7,A ;BUSY?
JR NZ,BSY_LB
BIT 3,A ;DRQ?
JR NZ,S1HR2B ;skip 1st, read 2nd in buffer.
RRA ;error in flag C
LD A,#07
RET C ;return with error
JR BSY_LB
DEFB %11010011 ;evil flags
DEFB %11110111
FLAGS_ DEFB%00011000
DEFB %00000001
DEFB %00100101
DEFB %10111101
BUFFER
DEFS #100
;***
From Alexey Volyk → To All 27 March 2001
26 Mar 01, 01:25 "Kirill Frolov" wrote to "Alexey Volyk":
KF> I'm not a slowdown! I have one C: on ide+.blk, and the other D: Jason.blk.
KF> And the program ide_tune.com for C: and D: for BOTH DRIVERS there were
KF> the same coordinates are set. And I loaded the drivers separately and
KF> together. They don’t even see a zero block from another driver!
I specifically tried:
1. I installed a second screw driver with a different name.
2. I unfastened device E:
3 from the first driver. Attached to the second driver
4. Configured E: the second driver to the zero road
5. Selected drive E:
6. Selected drive C:
_IDENTAL!!!_
C: - DRIVER 1
E: - DRIVER 2
I'm fine!!!
I'm not a slowdown either. :))
From Dmitriy Nesmachny → To All 17 April 2001
You screwed up the steering program here, so here it is: it didn’t work... That is, I did what I did: I wrote down a large pkt in ISDOS (it turned out that 1 file was 255 long,
the second one was 80 sectors), wrote it down with the same name, only the stub called 0kt,
marked it, started the burner and let it hit the last track head-on. And when you press break
it crashes at 48 basic. Is this how it should be or is there something wrong there?
Sincerely, Dmitriy.