PDA

Просмотр полной версии : NEMO IDE + SDtoIDE adapter



VELESOFT
09.10.2010, 22:05
I use WILD COPIER and FATALL with IDE port. If in IDE connector(40 pin) are connect HDD or CF card, then ide driver work. But if I connect SDtoIDE adapter to IDE connector then IDE driver not work. :v2_conf2:

I test more SDtoIDE adapters:
http://velesoft.speccy.cz/zx/sd_to_ide.htm

http://velesoft.speccy.cz/zx/sd2ide/sd_to_ide_b.jpg

I think the faulty IDE driver in russian software. If I use european software for ZX with IDE support then work correct with HDD,CF and SDtoIDE connector. :v2_thumb:

I can release both IDE drivers and we can compare it.

VELESOFT
10.10.2010, 12:09
NEMO IDE DRIVER in FATALL:

;LAST UPDATE: 04.03.2010 savelij

Hddinit EQU 0
Hddoff EQU 1
Hddrds EQU 2
Hddrdm EQU 3
Hddwrs EQU 4
Hddwrm EQU 5

;Ž�™?ź ’Ž—Š? ‚•Ž„? „‹ź �?�Ž’› ‘ HDD NEMO
EXA
EX (SP),HL
LD A,(HL)
INC HL
EX (SP),HL
ADD A,A
PUSH HL
LD HL,TBLHDDN
ADD A,L
LD L,A
LD A,H
ADC A,0
LD H,A
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EXA
EX (SP),HL
RET

TBLHDDN DW HDDINIT ;INIT HDD
DW HDDOFF
DW HDDRDS ;READ SINGLE SECTOR
DW HDDRDM ;READ MULTI SECTOR
DW HDDWRS ;SAVE SINGLE SECTOR
DW HDDWRM ;SAVE MULTI SECTOR

;‚室*ëĄ Ż*ŕ*¬Ąâŕë ®ˇé¨Ą:
;HL-*¤ŕĄá §*Łŕ㧪¨ ˘ Ż*¬ďâě
;BCDE-32-ĺ ˇ¨â*ë© *®¬Ąŕ ᥪâ®ŕ*
;A-Ş®«¨çĄá⢮ ˇ«®Ş®˘ (ˇ«®Ş=512 ˇ*©â)
;⮫쪮 ¤«ď ¬*®Ł®ˇ«®ç*®© §*Ż¨á¨/çâĄ*¨¨

P_1F7 EQU #F0 ;�…ƒˆ‘’� ‘Ž‘’ŽźŤˆź/�…ƒˆ‘’� ŠŽŚ?Ť„
P_1F6 EQU #D0 ;CHS-ŤŽŚ…� ƒŽ‹Ž‚› ˆ “‘’�/LBA ?„�…‘ 24-27
P_1F5 EQU #B0 ;CHS-–ˆ‹ˆŤ„� 8-15/LBA ?„�…‘ 16-23
P_1F4 EQU #90 ;CHS-–ˆ‹ˆŤ„� 0-7/LBA ?„�…‘ 8-15
P_1F3 EQU #70 ;CHS-ŤŽŚ…� ‘…Š’Ž�?/LBA ?„�…‘ 0-7
P_1F2 EQU #50 ;‘—…’—ˆŠ ‘…Š’Ž�Ž‚
P_1F1 EQU #30 ;ŹŽ�’ Ž˜ˆ�ŽŠ/‘‚Ž‰‘’‚
P_1F0 EQU #10 ;ŹŽ�’ „?ŤŤ›•
P_3F6 EQU #C8 ;�…ƒˆ‘’� ‘Ž‘’ŽźŤˆź/“Ź�?‚‹…Ťˆź
P_HI EQU #11 ;‘’?�˜ˆ… 8 �ˆ’
PRT_RW EQU P_1F0*256+P_HI ;ŹŽ�’› —’…Ťˆź/‡?Źˆ‘ˆ Ž„ŤˆŚ ‘‹Ž‚ŽŚ

;Ť? ‚›•Ž„…:
;H-„‹ź MASTER 0-HDD, 1-CDROM, #FF-NONE
;L-„‹ź SLAVE 0-HDD, 1-CDROM, #FF-NONE
HDDINIT LD A,#E0
PUSH HL
CALL ID_DEV
POP HL
AND A
CALL Z,INIT_91
LD D,A
LD A,#F0
PUSH DE
PUSH HL
CALL ID_DEV
POP HL
AND A
CALL Z,INIT_91
POP HL
LD L,A
XOR A

HDDOFF RET

INIT_91 PUSH HL
LD L,49*2+1,A,(HL)
AND 2
JR Z,INI_912
LD BC,#FF00+P_1F2
LD L,#0C
LD A,(HL)
OUT (C),A
LD L,6
LD C,P_1F6
LD A,(HL)
DEC A
OUT (C),A
LD C,P_1F7
LD A,#91
OUT (C),A
LD DE,#1000
INI_911 DEC DE
LD A,D
OR E
JR Z,INI_912
IN A,(C)
AND #80
JR NZ,INI_911
POP HL
RET

INI_912 LD A,#FF
POP HL
RET

;READ 1 SECTOR HDD
HDDRDS LD A,1

;READ "A" SECTORS HDD
HDDRDM PUSH BC
PUSH DE
CALL SETHREG
EXA
LD C,P_1F7
LD A,#20
OUT (C),A
LD C,P_1F7
HDDRD1 IN A,(C)
AND #88
CP 8
JR NZ,HDDRD1
EXA
HDDRD2 EXA
CALL READSEC
LD C,P_1F7
HDDRD3 IN A,(C)
AND #80
JR NZ,HDDRD3
EXA
DEC A
JR NZ,HDDRD2
JR EXITNHD

;WRITE 1 SECTOR HDD
HDDWRS LD A,1

;WRITE "A" SECTORS HDD
HDDWRM PUSH BC
PUSH DE
CALL SETHREG
EXA
LD C,P_1F7
LD A,#30
OUT (C),A
LD C,P_1F7
HDDWR1 IN A,(C)
AND #88
CP 8
JR NZ,HDDWR1
EXA
HDDWR2 EXA
CALL WRITSEC
LD C,P_1F7
HDDWR3 IN A,(C)
AND #80
JR NZ,HDDWR3
EXA
DEC A
JR NZ,HDDWR2
EXITNHD POP DE
POP BC
LD A,B
AND #0F
LD B,A
XOR A
RET

;READ SECTOR (512 BYTES)
READSEC LD DE,PRT_RW
LD A,#40
READSC1 LD C,D
INI
LD C,E
INI
LD C,D
INI
LD C,E
INI
LD C,D
INI
LD C,E
INI
LD C,D
INI
LD C,E
INI
DEC A
JR NZ,READSC1
RET

;SAVE SECTOR (512 BYTES)
WRITSEC EXX
PUSH HL
LD HL,0
ADD HL,SP
EXX
LD SP,HL
LD A,#40
LD HL,PRT_RW
WR_SEC1 POP DE
LD C,L
OUT (C),D
LD C,H
OUT (C),E
POP DE
LD C,L
OUT (C),D
LD C,H
OUT (C),E
POP DE
LD C,L
OUT (C),D
LD C,H
OUT (C),E
POP DE
LD C,L
OUT (C),D
LD C,H
OUT (C),E
DEC A
JR NZ,WR_SEC1
LD HL,0
ADD HL,SP
EXX
LD SP,HL
POP HL
EXX
RET

;SET HDD PORTS
SETHREG PUSH DE
LD D,B
LD E,C
LD BC,#FF00+P_1F6
OUT (C),D
EXA
LD C,P_1F7
SETHRE1 IN A,(C)
AND #80
JR NZ,SETHRE1
LD C,P_1F5
OUT (C),E
POP DE
LD C,P_1F4
OUT (C),D
LD C,P_1F3
OUT (C),E
LD C,P_1F2
EXA
OUT (C),A
RET

;HL-?„�…‘ �“”…�? ‘…Š’Ž�? ˆ„…Ť’ˆ”ˆŠ?–ˆˆ
;A=E0-„‹ź MASTER, A=F0-„‹ź SLAVE
ID_DEV LD BC,#FF00+P_1F6
OUT (C),A
LD C,P_1F7
LD D,26
ID_DEV3 EI
HALT
DI
DEC D
JR Z,NO_DEV
IN A,(C)
BIT 7,A
JR NZ,ID_DEV3
AND A
JR Z,NO_DEV
INC A
JR Z,NO_DEV
XOR A
LD C,P_1F5
OUT (C),A
LD C,P_1F4
OUT (C),A
LD A,#EC
LD C,P_1F7
OUT (C),A
LD C,P_1F7
ID_DEV1 IN A,(C)
AND A
JR Z,NO_DEV
INC A
JR Z,NO_DEV
DEC A
RRCA
JR C,ID_DEV2
RLCA
AND #88
CP 8
JR NZ,ID_DEV1
ID_DEV2 LD C,P_1F4
IN E,(C)
LD C,P_1F5
IN D,(C)
LD A,D
OR E
JP Z,READSEC
LD HL,#EB14
SBC HL,DE
LD A,1
RET Z
NO_DEV LD A,#FF
RET

VELESOFT
10.10.2010, 12:49
NEMO IDE DRIVER in WILD COPIER:

;IDE DRIVER for WDC (NEMO IDE PORTS)
ORG #9A00
;-IDE Ports:----------------------------
RCOM EQU #00F0
RHEAD EQU #00D0

RCYLH EQU #00B0
RCYLL EQU #0090

RSEC EQU #0070
RCOUNT EQU #0050

RERR EQU #0030

RDATL EQU #0010
RDATH EQU #0011
;---------------------------------------
FLGA NOP
TMR NOP
;-------
CDoHD NOP
NSDC NOP
EOC NOP
SRIN NOP
;-------
MAS DB #E0
SLE DB #B0

ECC NOP
NOP
;-------
LTHL DS 2
LTDE DS 2;(14)
;-------
SPDPK DB #BB,0,#01,#60:DS 8;x1:#00,#B0
; x4:#02,#C0
; x8:#05,#80
READP DB #28,0
SECTOR DB 0,0,0,#10
DB 0
SECTORS DB 0,1
DB #10:DS 2

SESSION DB #43,0:DS 4:DB 1
DB #03,#20:DB 0
DS 2
;---------------------------------------
JP ECCOM; KERNAL 2
JP EJTR
JP LOTR
JP SPEED
JP CDSPD
JP SLWCD
JP CDSLP

JP COMAH
JP COMM

JP XPOZI
JP PROZ
JP POZI
JP RPOZ

JP RDDSE
JP SDDSE
JP RDDSE

JP SLPP
JP WKUP
JP CONF

JP 0
JP SNDPAK

JP RDY; ˇĄáŞ®*Ąç. ®¦¨¤. Ł®â-â¨
JP READY;®¦¨¤. Ł®â-⨠á t-out
JP WAITDRQ
JP ERROR_7

JP SEL_SLA
JP SEL_MAS

JP TRANSIN;çâĄ*¨Ą Ż ŞĄâ ®â CD

JP HLTOLEN
JP LENTOHL

JP CDDET
JP DRDET

JP READSE
JP 0

JP TOSC
JP TOS
JP TOSE
JP TOTAK
JP TOTOK
;------¨*¨ć¨ «¨§ ć¨ď IDE ¤ŕ ©˘Ąŕ :------
IDE_INI ;JR NZ,LST_INI
; ¤ **ë© Ş®¤ ˇă¤Ąâ ˘ë§˘ * Ż®çâ¨
; áŕ §ă Ż®á«Ą § Żă᪠WDC

;˘Ąŕč¨* á⥪ 㦥 ˘ëáâ ˘«Ą* , ˘®â
;¨*¨ć¨ «¨§ 樨 ˘áĄ Ż®©¤ăâ 㦥 Ż®á«Ą í⮩
;RET

;------˘ëŕ㡠*¨Ą ¤ŕ ©˘Ąŕ :--------------
LST_INI ;§ Şŕë˘ Ą¬ âĄ*Ą˘ëĄ Ż®ŕâë ¨ â.¤.
; ¨ â.Ż.
RET
;=======================================
KEY1 LD A,#F7:IN A,(#FE):RRCA:RET
KEY2 LD A,#F7:IN A,(#FE):RRCA:RRCA
RET
;---------------------------------------
ECCOM LD A,(ECC):OR A:RET NZ
ECCO LD BC,RCOM,A,#EC:OUT A
RET

EJTR LD HL,TROUT:CALL SNDPAK
JP RDY
LOTR LD HL,TRIN:JR EJTR+3
SPEED LD A,(CDoHD):OR A:RET NZ
CDSPD LD HL,16:CALL TOSC
LD HL,SPDPK:CALL EJTR+3
LD HL,0:JP READSE
SLWCD CALL CDSLP:JP RDY
CDSLP LD HL,SLPMO:JP SNDPAK
;---------------------------------------
;-------------Źŕ®ćë ¤«ď HDD-------------
COMAH LD BC,RCOM:OUT A
JP READY
COMM LD BC,RCOM:OUT A:RET
LOLL LD BC,RCOM:IN A:RET

XPOZI LD (LTHL),HL,(LTDE),DE
PROZ LD A,H,H,D,D,E,E,A
;DE,cyl H,head L,sec
POZI LD A,H:AND %00001111:LD H,A
LD A,(DRVRE)
OR H
LD BC,RHEAD:OUT A
LD A,L,BC,RSEC:OUT A
LD A,D,BC,RCYLH:OUT A
LD A,E,BC,RCYLL:OUT A
RET

RPOZ LD BC,RHEAD:IN A:AND #0F
LD H,A,BC,RSEC:IN A
LD L,A,BC,RCYLH:IN A
LD D,A,BC,RCYLL:IN A
LD E,A
RET

;HL,in da kudy A,secs
RDDSE PUSH AF
LD BC,RCOUNT:OUT A
LD A,#20
CALL COMAH
POP BC
RDH1 PUSH BC
CALL READS
LD (BUFA),HL
CALL READY
POP BC
DJNZ RDH1
RET
SDDSE PUSH AF
LD BC,RCOUNT:OUT A
LD A,#30
CALL COMAH
POP BC
SDH1 PUSH BC
CALL SAVDS
LD (BUFA),HL
CALL READY
POP BC
DJNZ SDH1
RET


SLPP CALL CONF
LD A,#E0:CALL COMM
JP READY
WKUP CALL CONF
LD A,252
LD BC,RCOUNT:OUT A
LD A,#E2:CALL COMM
JP READY
CONF CALL SEL_MAS,READY
LD DE,0,HL,2
CALL XPOZI
LD A,1:CALL RDDSE
LD DE,0,HL,4
CALL XPOZI
LD A,1
JP RDDSE

DRVRE NOP
BUFA DS 2
HEDSEC DS 2
;---------------------------------------
;-------------Źŕ®ćë ¤«ď CD--------------
SNDPAK PUSH HL; IN HL ADDR OF PAK
CALL READY
CALL SEL_SLA
LD HL,#0800
CALL HLTOLEN
LD A,#A0:CALL COMM
POP HL
LD BC,12

TRANSOU PUSH BC
CALL RDY
CALL WAITDRQ
POP BC
OR A
RR B,C
JR NC,$+3
INC BC

TOUT1 PUSH BC
INC HL
LD A,(HL),BC,RDATH
OUT A
DEC HL
LD A,(HL),BC,RDATL
OUT A
INC HL,HL
POP BC
DEC BC
LD A,B
OR C
JR NZ,TOUT1
RET

RDY XOR A:OUT (254),A
CALL LOLL
RLCA:RET NC
LD A,4:OUT (254),A
JR RDY
READY XOR A:LD (TMR),A
REA CALL LOLL
RLCA:JR NC,RY
LD A,(TMR):CP 254:JR C,REA
LD A,1:OUT (254),A
CALL ECCOM
EI:HALT
JR READY
RY XOR A:OUT (254),A
RET

WAITDRQ CALL LOLL
BIT 3,A:RET NZ
JR WAITDRQ

ERROR_7 CALL LOLL
RRCA
RET

SEL_SLA LD A,(SLE)
LD (DRVRE),A
LD BC,RHEAD:OUT A:CALL LOLL
RLCA
RET
SEL_MAS LD A,(MAS)
JR SEL_SLA+3

ERRT POP BC
RET

TRANSIN ;HLŞă¤ë BC᪮Ş
PUSH BC
CALL SEL_SLA
CALL RDY,ERROR_7:JR C,ERRT
CALL WAITDRQ
POP BC
OR A
RR B,C
JR NC,$+3
INC BC
T_I1 PUSH BC
LD BC,RDATL
IN A:LD (HL),A:INC HL
LD BC,RDATH
IN A:LD (HL),A:INC HL
POP BC
DEC BC
LD A,B:OR C
JR NZ,T_I1
RET

HLTOLEN LD BC,RCYLL,A,L:OUT A
LD BC,RCYLH,A,H:OUT A
RET
LENTOHL LD BC,RCYLL:IN A:LD L,A
LD BC,RCYLH:IN A:LD H,A
RET

;¨¤Ą*â¨ä¨Ş ć¨ď CD ¨ HDD
CDDET CALL SEL_SLA
DRDET LD DE,0
LD H,D,L,E
CALL XPOZI
CALL ECCO
.4 HALT
CALL RPOZ
LD HL,#EB14
OR A:SBC HL,DE
RET Z
NFOC LD A,1:OR A
RET

;HLŞă¤ë ®áâ «ě*®Ą ˘ Ż ŞĄâĄ á¨¤¨â
READSE LD (HLAD),HL
RETRYL XOR A:OUT (254),A
LD A,(FLGA):OR A:JR Z,ACD
CALL KEY1,NC,ACTCD
CALL KEY2,NC,ACTHD
ACD LD HL,READP:CALL SNDPAK
LOADSE1 LD A,5:OUT (254),A
CALL READY
CALL ERROR_7:JR C,RETRYL
LD D,0
WDQ CALL LOLL
BIT 3,A:JR NZ,WQR
DEC D:JR Z,RETRYL
JR WDQ
WQR LD HL,(HLAD)
GSLOD
.4 CALL READS

XOR A:OUT (254),A
RET
ABT NOP
HLAD DS 2

;-------
; ;çâĄ*¨Ą 512ˇ ¤ **ëĺ ¨§ ˇăäĄŕ IDE ăá-˘
READS LD BC,RDATL,D,#80
RE1 INI:INC C
INI:DEC C

INI:INC C
INI:DEC C
DEC D:JR NZ,RE1
RET

;-------

;§ Ż¨áě ®çĄŕĄ¤*ëĺ 512ˇ ¤ **ëĺ * HDD
SAVDS LD BC,RDATH,D,#80
SA1 INC HL
OUTD:DEC C
OUTI:INC C
INC HL
INC HL
OUTD:DEC C
OUTI:INC C
INC HL
DEC D:JR NZ,SA1
RET

;---------------------------------------
;---------------------------------------
TOSC LD DE,0,(SECTOR),DE
LD A,H,H,L,L,A,(SECTOR+2),HL
RET
TOS XOR A
LD (NSDC),A,(SRIN),A,(EOC),A
LD A,(CDoHD):OR A:RET NZ
LD DE,SECTOR:JR TOTAK+1
TOSE LD DE,SECTOR
TOTAK LD A,(HL),(DE),A:INC HL,DE
TOTOK LD A,(HL),(DE),A:INC HL,DE
LD A,(HL),(DE),A:INC HL,DE
LD A,(HL),(DE),A:INC HL,DE
RET
;---------------------------------------
; Ź?Š…’ˆŠˆ
INFOCD DB #12:DS 3:DB 36:DS 7

TROUT DB #1B:DS 3:DB 2:DS 7;‚›„‚ˆƒ ’�…
TRIN DB #1B:DS 3:DB 3:DS 7;‡?„‚ˆƒ ’�…
SLPMO DB #1B:DS 3:DB 0:DS 7;‘Ź?’ś!
;---------------------------------------
END DS 1024-(END-FLGA)
;Ł« ˘* ď ŞĄŕ* «ě ˘ë§®˘®˘(*Ą ˘áď!):
KERN EQU #6000; SP=5E20

NP0 EQU KERN; 1
NP1 EQU KERN+3
NP3 EQU KERN+6
STN EQU KERN+9
NP6 EQU KERN+12

DLt EQU KERN+15
ACTCD EQU KERN+18
ACTHD EQU KERN+21; 8
POZIR EQU KERN+24
;---------------------------------------

VELESOFT
10.10.2010, 12:49
IDE DRIVER for DIVIDE IDE ports: (this IDE driver work with all HDD,CF and SDtoIDE adapters)

;--- european DIVIDE IDE Ports: ---
RCOM EQU #00BF
RHEAD EQU #00BB

RCYLH EQU #00B7
RCYLL EQU #00B3

RSEC EQU #00AF
RCOUNT EQU #00AB

RERR EQU #00A7
RDAT EQU #00A3


inputs:

;HL = target ram address
;B = number of sectors for read/write
;E = sector (or LBA[7-0])
;D = cyl-low (or LBA[15-8])
;C = cyl-high (or LBA[23-16])

;A = head etc. (or LBA[28-24])
;bit 7=1
;bit 5=1
;bit 4=device (0=master, 1=slave)
;bit 6=CHS/LBA (0=CHS, 1=LBA)

;CY=operation (1=write, 0=read)


readsec: out (RHEAD),a
r1: in a,(RCOM)
bit 6,a
jr z,r1
ld a,b
out (RCOUNT),a
ld a,e
out (RSEC),a
ld a,d
out (RCYLL),a
ld a,c
out (RCYLH),a
ld a,$20
jr nc,r2
ld a,$30
r2: out (RCOM),a
rx: push af
r3: in a,(RCOM)
and $c8
cp $48
jr nz,r3
pop af
push bc
ld bc,RDAT
jr nc,rdsec
wrsec: otir ;write first 256 bytes of sector
otir ;write second 256 bytes of sector
jr r5
rdsec: inir ;read first 256 bytes of sector
inir ;read second 256 bytes of sector
r5: pop bc
djnz rx ;read/write next sectors
r6: in a,(RCOM)
rla
jr c,r6
ret

F0lken
11.03.2011, 17:04
Hello, VELESOFT. I can confirm, that this SD adaptor didn't worked "out of the box" with DivIDE board. Don't have an idea about the probable cause, but may be the problem was in the lack of this "fix" you applied.
Regarding the issue, you described - try to format your card with different cluster size. And remember, that some SD card vendors DO NOT create valid partition table data on stock SD. To resolve this, again, you can reformat the card in standart PC with cardreader, or even create partition table explicitly with fdisk, paragon, whatever...

sergey2b
29.03.2011, 17:43
I have some adapter like this and It is working fine with divide