![]() |
|
|
|
|
|
#1 |
|
Veteran
Join Date: 16th November 2005
Location: Санкт-Петербург
Posts: 1,725
Thanks: 1,256
Thanked 634 Times in 294 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
У меня следующая ситуация: есть процедурка (почти идентичная оригинальной TR-DOS'ной - нету только проверки на кнопку Break) по определению наличия диска в дисководе.
Так вот. Как корректно отключить мотор дисковода, если диска в дисководе нету? Буду весьма признателен за куслчек кода
__________________
Scorpion ZS-256 Turbo, SMUC v2.A, HDD 40Gb, GS 2Mb, ZXMC1v25, TSFM, FDD 5'25 Teac x2, FDD 3'5 Sony, VGA&PAL v3.0, PC Keyboard & Mouse |
|
|
|
|
|
#2 |
|
Master
Join Date: 27th April 2005
Location: Москва
Posts: 869
Thanks: 0
Thanked 6 Times in 5 Posts
![]() |
Посмотри дизассемблер ПЗУ, я сейчас не помню адрес, она там есть. Загружаешь номер дисковода кажется в A и вызываешь ее через #3D2F.
Она там вызывается при входе в командный процессор (#3D00).
__________________
Pentagon-128 + AY + Kempston Бабло побеждает зло! |
|
|
|
|
|
#3 | |
|
Guru
Join Date: 14th January 2005
Location: Ekaterinburg
Posts: 2,340
Thanks: 74
Thanked 633 Times in 358 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Quote:
Code:
; ПРОЦЕДУРА из TRDOS 5.03 и выше ; ИММИТАЦИЯ УСТАНОВКИ ДИСКА ДЛЯ ОТКЛЮЧЕНИЯ ; МОТОРА ДИСКОВОДА ; В (A) код определяющий номер дисковода: ; 0 - A:, 1 - B:, 2 - C:, 3 - D: L02B9: LD B,32 ;32/2 ИМПУЛЬСА ПО INDEX L02BB: PUSH BC XOR 1000B ;ИНВЕРСИЯ INDEX OUT (FDCUP),A PUSH AF LD A,5 CALL DELA ;ПАУЗА DT*5 POP AF POP BC DJNZ L02BB ;ПОВТОРЯТЬ 32 РАЗА RET |
|
|
|
|
|
|
#4 |
|
Veteran
Join Date: 16th November 2005
Location: Санкт-Петербург
Posts: 1,725
Thanks: 1,256
Thanked 634 Times in 294 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
То что нужно! Спасибо, уважаемые коллеги!
__________________
Scorpion ZS-256 Turbo, SMUC v2.A, HDD 40Gb, GS 2Mb, ZXMC1v25, TSFM, FDD 5'25 Teac x2, FDD 3'5 Sony, VGA&PAL v3.0, PC Keyboard & Mouse |
|
|
|
|
|
#5 |
|
Master
Join Date: 27th April 2005
Location: Москва
Posts: 869
Thanks: 0
Thanked 6 Times in 5 Posts
![]() |
Кстати, интересно...
Во-первых, вижу комментарий "5.03 и выше". Разве в 5.01 не было? Она не останавливала дисковод? Во-вторых, ВГ93 использовалась кроме Спека практически во всех бытовых машинах. А как там с этим поступали? В схемах их контроллеров нет имитации IP.
__________________
Pentagon-128 + AY + Kempston Бабло побеждает зло! |
|
|
|
|
|
#6 | ||
|
Guru
Join Date: 14th January 2005
Location: Ekaterinburg
Posts: 2,340
Thanks: 74
Thanked 633 Times in 358 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Quote:
Quote:
Этим битом и включается/выключается мотор. |
||
|
|
|
|
|
#7 |
|
Veteran
Join Date: 16th November 2005
Location: Санкт-Петербург
Posts: 1,725
Thanks: 1,256
Thanked 634 Times in 294 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Еще у меня вопросец образовался.
Ситуация такая: В дисководах A и B стоят диски. В портах TR-DOS и FF записаны значения касающиеся дисковода A. Теперь нужно перенастроиться на дисковод B - выставить регистры дорожки и сектора в правильные значения для B. Как это сделать не используя команду Восстановление?
__________________
Scorpion ZS-256 Turbo, SMUC v2.A, HDD 40Gb, GS 2Mb, ZXMC1v25, TSFM, FDD 5'25 Teac x2, FDD 3'5 Sony, VGA&PAL v3.0, PC Keyboard & Mouse |
|
|
|
|
|
#8 |
|
Veteran
Join Date: 18th February 2005
Location: Набережные Челны
Posts: 1,556
Thanks: 598
Thanked 115 Times in 75 Posts
![]() ![]() ![]() |
Странный код честно говоря. Помню что когда мне надо было остановить привод я смотрел как это было сделано в BestView. Изза чего кстати он и не работает на R80 под которым я пишу преимущественно - он использует команду восстановления вслед за которой сразу же (!) без всяких пауз идёт команда экстренного безусловного останова. Почему не работает в эмулях - да всё просто - эмулятор в отличие от реала успевает выполнить эту команду %) восстановления. Помню что в своей View для гашения привода я использовал немного другой алгоритм - любой из реалов и эмулей отрабатывал это корректней чем алгоритм из BestView - вначале восстановление и сброс, затем позиционирование на ту дорожку, где головка находилась до команды восстановления и так же принудительный сброс. На самом деле мотор остановится ещё на первой команде, вторая нужна чтобы дурные эмуляторы не глючили.
Пауза же в BestView была, но только в процедуре определения диска в флопике - там так же даётся команда восстановления, вслед за которой - после паузы - запускается подпрограмма IN_1F, опять же лучше почитать статьи Ивана Рощина, как он это делал и из каких соображений задавалась пауза. Ага, вот счас специально посмотрел в своей п/п чтения дисков, завершалась она так: LD A,(#5CF5) AND A RRA ; задаётся номер физической дорожки LD C,#7F CALL OUTCA LD A,#18 ; команда позиционирования с загрузкой - бит h=1 LD C,#1F CALL OUTCA LD A,#D0 ; команда принудительного прерывания JP OUTCA и OUTCA LD IX,OUTC JP TO_DOS ; OUTC есть OUTC EQU #2A53 Ага, я похоже изменил алгоритм - вместо того чтобы два раза позиционироваться - вначале на нулевую потом на основную дорожку, сразу ставил позиционирование на основную дорожку. |
|
|
|
|
|
#9 |
|
Master
Join Date: 27th April 2005
Location: Москва
Posts: 869
Thanks: 0
Thanked 6 Times in 5 Posts
![]() |
Ничего странного. Команда прерывания отключает мотор только при присутствии диска. Это багофича у ВГ93 такая - останов мотора происходит после прошествия скольких-то индексных импульсов.
Указанный код гарантированно формирует пачку импульсов на выводе IP. Для этого в контроллере диод стоит между каким-то из битов порта #FF и IP.
__________________
Pentagon-128 + AY + Kempston Бабло побеждает зло! |
|
|
|
|
|
#10 |
|
Veteran
Join Date: 16th November 2005
Location: Санкт-Петербург
Posts: 1,725
Thanks: 1,256
Thanked 634 Times in 294 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
А я
как же я?
__________________
Scorpion ZS-256 Turbo, SMUC v2.A, HDD 40Gb, GS 2Mb, ZXMC1v25, TSFM, FDD 5'25 Teac x2, FDD 3'5 Sony, VGA&PAL v3.0, PC Keyboard & Mouse |
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|