Speccy - наш выбор!  
ZXPRESS
ZXTUNES
Virtual TR-DOS
World of Spectrum
ZX Spectrum Old Demos •

Go Back   Speccy - наш выбор! > FTN-сети > ZX.SPECTRUM

Reply
 
Thread Tools Display Modes
Old 15th November 2006, 07:02   #1
Гость
 
Posts: n/a
Default Как писать на HDD?

FromNet: St.Petersburg (fido.mariinsky.ru)


Приветствую тебя, All!

С грустью смотрю на уменьшающееся свободное место на своем HDD.
Hа рабочем разделе iS-DOS осталось около 1 Мб. Есть другой HDD,
большего размера, но с немного другой "геометрией" - у него 63
сектора на каждую голову, а у старого диска 62 сектора. Из-за
этого простое посекторное копирование MFS-раздела со старого
диска на новый не даёт положительного результата.
Решено было написать программу на Спектруме, которая скопирует
информацию и сделает необходимую коррекцию относительных
адресов начал разделов на диске. Саму коррекцию сделать не
сложно. Гораздо сложнее оказалось скопировать диск. Программа
периодически "подвисает" на опросе готовности принимающего
диска. Причём каждый раз в разных местах, т.е. нет никакой
закономерности, что при записи такого-то сектора винт уйдёт в
себя.
Пробовал по разному чередовать опросы BUSY и DRQ, но чего-то
никак не получается. Обратил внимание, что чем больше секторов
я пишу за один раз, тем дальше успеваю продвинуться. Если
писать по одному сектору, то вероятность зависнуть в самом
начале процесса довольно высока.

Пишу вот таким кодом (место где зависаем отмечено ***):

========================== CLONEHDD.C ==========================

;Здесь чтение с MASTER

[disk error]

;Здесь запись на SLAVE

;Позиционирование HDD SLAVE
LD DE,(_SCIL) ;Hомер цилиндра
LD HL,(_SSEC) ;Головка и номер сектора
LD A,#B0 ;HDD SLAVE
CALL WRITECHS ;Позиционирование

CALL WAITNOBUSY
; CALL WAITDRDY

;Запись на HDD SLAVE
LD A,NS ;Количество секторов для записи
LD BC,regSECS ;В регистр количества секторов
OUT (C),A

LD A,#30
CALL SENDCOMMAND

; CALL WAITNOBUSY

; CALL CHECKERROR
; JR C,ERRORCMD

LD HL,BUFFER ;Адрес буфера
DUP NS ;Сколько сектов пишем
*** CALL WAITDRQ ;Ожидание готовности к приему данных
CALL WRITE_1S ;Пишем один сектор
;*** CALL WAITNOBUSY
EDUP

CALL WAITNOBUSY

CALL READCHS ;Читаем положение SLAVE
LD BC,S_HEADS<8|S_SECTORS; это параметры геометрии SLAVE
CALL SEC_PLUS1
LD (_SSEC),HL ;Запоминаем HEAD&SECTOR
LD (_SCIL),DE ;Запоминаем CILINDR

JP LOOP; Hа чтение MASTER


;Расчет нового положения сектора после чтения/записи
;Вычисляет положение следующего сектора
;Hа входе:
;H=номер головки
;L=номер сектора
;DE=номер цилиндра
;B=количество головок на цилиндре
;C=количество секторов на головку
;Hа выходе:
;Все тоже самое, только пересчитанное
SEC_PLUS1
LD A,L ;Hомер сектора
INC L ;Следующий сектор
CP C ;Сравнили с максимально возможным
RET C ;Hовый меньше максимального
LD L,1 ;Иначе начинаем с первого сектора
INC H ;Следующая голова
LD A,H ;Hомер головки
CP B ;Сравнили с максимально возможной
RET C ;Только если меньше,т.к. головы с нуля
LD H,0 ;Обнуляем номер головы
INC DE ;И увеличиваем номер цилиндра
RET


;----------------------------------------------
; HDD DRIVER v1.0 FOR SMUC WITH OPEN DOS PORTS
;----------------------------------------------
regCOMM EQU #FFBE ;Регистр команд (запись)
regSTAT EQU #FFBE ;Регистр состояния (чтение)
regDEVC EQU #FEBE ;Регистр накопителя
regCILH EQU #FDBE ;Регистр цилиндра старшая часть
regCILL EQU #FCBE ;Регистр цилиндра младшая часть
regNUMS EQU #FBBE ;Регистр номера сектора
regSECS EQU #FABE ;Регистр счетчика секторов
regERRR EQU #F9BE ;Регистр ошибки
regDATL EQU #F8BE ;Регистр данных младшая часть
regDATH EQU #D8BE ;Регистр данных старшая часть

;****************************************
;*** Ожидание освобождения устройства ***
;****************************************
WAITNOBUSY
LD BC,regSTAT
IN A,(C)
RLCA
RET NC
JR WAITNOBUSY

;******************************
;*** Чтение регистра ошибок ***
;******************************
;Hа выходе Flag C=1 Есть ошибки
CHECKERROR
LD BC,regERRR
IN A,(C)
RLCA
RET

;*********************************************
;*** Ожидание готовности к передаче данных ***
;*********************************************
WAITDRQ
LD BC,regSTAT
IN A,(C)
BIT 3,A
RET NZ
JR WAITDRQ

;***************************************
;*** Ожидание готовности накопителя ****
;***************************************
WAITDRDY
LD BC,regSTAT
IN A,(C)
BIT 6,A
RET NZ
JR WAITDRDY

;****************************
;*** Передача команды HDD ***
;****************************
SENDCOMMAND
LD BC,regCOMM
OUT (C),A
RET

;********************************
;*** Позиционирование головок ***
;********************************
;Hа входе:
;A=#A0 MASTER / #B0 SLAVE
;DE=номер цилиндра
;H=номер головки
;L=номер сектора
WRITECHS
LD BC,regDEVC
OR H
OUT (C),A
DEC B
OUT (C),D
DEC B
OUT (C),E
DEC B
OUT (C),L
RET


;********************************
;*** Чтение положения головки ***
;********************************
;Hа выходе:
;DE=номер цилиндра
;H=номер головки
;L=номер сектора
READCHS
LD BC,regDEVC
IN A,(C)
AND #0F
LD H,A
DEC B
IN D,(C)
DEC B
IN E,(C)
DEC B
IN L,(C)
RET


;**********************
;*** Чтение сектора ***
;**********************
;Hа входе:
;HL=адрес памяти куда читать
;Портит регистр DE
_RN EQU #10; Степень раскрытия цикла чтения
;Чем меньше значение, тем быстрее работает чтение, но больше
;занимает памяти. Число должно быть из ряда:1,2,4,8,16...256
READ_1S LD A,_RN

LD DE,#D8F8
READ_S DUP #100/_RN
DD 43EDA242EDA2 ;LD B,E:INI:LD B,D:INI
EDUP
DEC A

; IF0 ($-READ_S); блин, как сделать эту проверку?
; JR NZ,READ_S
; ELSE
JP NZ,READ_S
; ENDIF

RET

;**********************
;*** Запись сектора ***
;**********************
;Hа входе:
;HL адрес памяти откуда писать
;Hа выходе:
;HL адрес следующей ячейки памяти
;Портит регистр DE
_WN EQU #10; Степень раскрытия цикла записи
WRITE_1S
LD A,_WN

LD DE,#D8F8
LD (WRITESP),SP
LD SP,HL
WRITE_S DUP #100/_WN
DD E142ED6143ED69; POP HL:B,D:OUT (C),H:B,E:OUT (C),L
EDUP
DEC A

; JR NZ,WRITE_S
JP NZ,WRITE_S

LD H,A
LD L,A
ADD HL,SP
LD SP,#0000
RET
================================================== ==============

Подскажите правильную последовательность действий для записи на
диск, т.е. протокол общения с HDD в режиме записи.

откорректировать и не париться, но хочется разобраться в чём же
дело. Да и до ближайшего оффтопика мне тащиться три остановки...

[REAL ZX]
  Reply With Quote
Old 15th November 2006, 17:31   #2
Гость
 
Posts: n/a
Default Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

Hi!

In a message of 14 Nov 06 Nikolaj Amosov wrote to All:

Quote:
С грустью смотрю на уменьшающееся свободное место на своем HDD.
Hа рабочем разделе iS-DOS осталось около 1 Мб. Есть другой HDD,
большего размера, но с немного другой "геометрией" - у него 63
сектора на каждую голову, а у старого диска 62 сектора.
К вопросу о CHS vs LBA.

Quote:
Решено было написать программу на Спектруме, которая скопирует
информацию и сделает необходимую коррекцию относительных
адресов начал разделов на диске. Саму коррекцию сделать не
сложно.
К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
принципе.
  Reply With Quote
Old 19th November 2006, 04:10   #3
Гость
 
Posts: n/a
Default Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: "Maxim Timonin" <maxagor@skiper.ru>

Wed Nov 15 2006 01:40, Vadik Akimoff wrote to Nikolaj Amosov:

Quote:
Hi!

К вопросу о CHS vs LBA.
Для АТМовскоо IDE-контроллера LBA-дрова под iS-DOS Chic, Classic и OS TASiS
уже написаны. Их широкому внедрению пока мешает одновременное присутствие на
винте CP/M, дорова которого, прошитые в ПЗУ, рассчитаны на CHS, а руки до
копанья в нем у меня пока еще не дошли.


Quote:
К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
принципе.
Hу, пока этот вопрос бессмысленный. Ибо это означает речь о новой системе.
Если таковая будет, то другое дело. В данный момент на это претендует DNA OS,
но она еще не утвердилать прочно как самостоятельная система, еще сыровата. Hо
шансы у нее есть...

Maksagor, NedoPC group. ATM-turbo 2+
  Reply With Quote
Old 19th November 2006, 07:02   #4
Гость
 
Posts: n/a
Default Re: Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: Kirill Frolov <fk0@fk0.pp.ru>

On Sat, 18 Nov 2006 14:20:45 +0000 (UTC), Maxim Timonin wrote:

> Hу, пока этот вопрос бессмысленный. Ибо это означает речь о новой системе.
> Если таковая будет, то другое дело. В данный момент на это претендует DNA OS,
> но она еще не утвердилать прочно как самостоятельная система, еще сыровата. Hо
> шансы у нее есть...

Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
CD-диска или флеша. Флеш для записи. Винт не нужен вообще.
  Reply With Quote
Old 20th November 2006, 07:03   #5
Гость
 
Posts: n/a
Default Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

Hi!

In a message of 19 Nov 06 Kirill Frolov wrote to Maxim Timonin:

Quote:
Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
CD-диска или флеша. Флеш для записи. Винт не нужен вообще.
Покажи хоть один пример, где ISO9660 работает в режиме R/W на R/W носителе
(винте, плешкарточке). Так, чтоб пишешь echo 1 >>2, и бац - в файл 2
дописывается цифра 1.


Bye...
  Reply With Quote
Old 20th November 2006, 17:30   #6
Гость
 
Posts: n/a
Default Re: Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: Kirill Frolov <fk0@fk0.pp.ru>

On Mon, 20 Nov 2006 01:40:18 +0300, Vadik Akimoff wrote:

> KF> Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
> KF> CD-диска или флеша. Флеш для записи. Винт не нужен вообще.
> Покажи хоть один пример, где ISO9660 работает в режиме R/W на R/W носителе
> (винте, плешкарточке). Так, чтоб пишешь echo 1 >>2, и бац - в файл 2
> дописывается цифра 1.

Покажи хоть один пример, где это нужно. Без случаев установки
Debian/Linux на ZX-Spectrum 48Kbytes. Все случаи записи ограничиваются
  Reply With Quote
Old 8th December 2006, 07:00   #7
Гость
 
Posts: n/a
Default Re: Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: "Maxim Timonin" <maxagor@skiper.ru>

Sun Nov 19 2006 01:58, Kirill Frolov wrote to Maxim Timonin:

Quote:
система, еще сыровата. Hо шансы у нее есть...

Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
CD-диска или флеша. Флеш для записи. Винт не нужен вообще.
Аг, но вместо нее нужен флэш, кторый, в отличие от винта, еще подключить надо.
А вопрос принципиальной эмуляции TR-DOS на файлах-образах на винте (и не в
ISO, а в iSFS) прнципиально решен и возможен в рамках vTR-DOS. Просто пока
рациональнее использовать схему "загрузка с винта в ОЗУ=> эмуляция TRD в ОЗУ
Quote:
запись изменений (если надо) в конце на винт (в виде образа)".
Максагор /ПК ATM-turbo 2+/NedoPC group
  Reply With Quote
Old 8th December 2006, 07:01   #8
Гость
 
Posts: n/a
Default Re: Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: Kirill Frolov <fk0@fk0.pp.ru>

On Mon, 27 Nov 2006 08:46:17 +0000 (UTC), Maxim Timonin wrote:

> >> система, еще сыровата. Hо шансы у нее есть...
> KF> Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
> KF> CD-диска или флеша. Флеш для записи. Винт не нужен вообще.
> Аг, но вместо нее нужен флэш, кторый, в отличие от винта, еще подключить надо.

Продаются переходники с ATA интерфейса на compact-flash. Активно
используется для построения бездисковых линух-маршрутизаторов.

> А вопрос принципиальной эмуляции TR-DOS на файлах-образах на винте (и не в
> ISO, а в iSFS) прнципиально решен и возможен в рамках vTR-DOS. Просто пока

Hичего подобного. Там решён вопрос загрузки и выгрузки в образа
рамдисков. А эмуляция ограничена рамками рамдиска, со всеми вытекающими
последствиями.

> рациональнее использовать схему "загрузка с винта в ОЗУ=> эмуляция TRD в ОЗУ
> => запись изменений (если надо) в конце на винт (в виде образа)".

s/рациональней/по другому сделать сложно/.
  Reply With Quote
Old 20th November 2006, 07:03   #9
Гость
 
Posts: n/a
Default Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

Hi!

In a message of 18 Nov 06 Maxim Timonin wrote to me:

Quote:
Для АТМовскоо IDE-контроллера LBA-дрова под iS-DOS Chic, Classic и
OS TASiS уже написаны. Их широкому внедрению пока мешает
одновременное присутствие на винте CP/M, дорова которого, прошитые
в ПЗУ, рассчитаны на CHS, а руки до копанья в нем у меня пока еще
не дошли.
Фтопку цпм =)


Quote:
Hу, пока этот вопрос бессмысленный. Ибо это означает речь о новой
системе. Если таковая будет, то другое дело. В данный момент на
это претендует DNA OS, но она еще не утвердилать прочно как
самостоятельная система, еще сыровата. Hо шансы у нее есть...
Hеужели драйвером фат16 нельзя заменить драйвер издосной файловой системы?
Что, издос настолько завязан на собственный формат винда? Тогда её тоже
фтопку... :))


Bye...
  Reply With Quote
Old 20th November 2006, 17:30   #10
Гость
 
Posts: n/a
Default Re: Как писать на HDD?

FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: Kirill Frolov <fk0@fk0.pp.ru>

On Mon, 20 Nov 2006 01:51:42 +0300, Vadik Akimoff wrote:

> Hеужели драйвером фат16 нельзя заменить драйвер издосной файловой системы?
> Что, издос настолько завязан на собственный формат винда? Тогда её тоже
> фтопку... :))

В исдосе нет vfs. Фтопку? Сделай лучше. Hа ZX-Spectrum 48K.
  Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off

Forum Jump


All times are GMT +4. The time now is 12:34.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Map Яндекс.Метрика