PDA

Просмотр полной версии : Коммандер.



CPLx
10.03.2008, 13:45
Доделал коммандер (всё детство мечтал коммандер сделать :)).
Ну в общем, предлагаю заценить.

Особенно интересно чтобы реальщики потестили, а то у меня реала нет.


Файл TFC01.rar - версия 0.1.




Версия 0.2 (файл TFC02.rar)

Сделал некоторые изменения, предложенные Grand'ом.

- Написал документацию в MS Word.
- Изменил цвет курсора и файлового окна. Должно быть лучше видно на монохромном мониторе.
- Вьювер: счетчик процентов переключается в 100% при окончании текста.
- Вьювер: можно смотреть тексты со строками оканчивающимися на #0A.
- Сделана поддержка односторонних дисков. Коммандер может (???) запускаться с них (правда в Spectaculator и в EmuZWin не запускается), копировать на них/с них файлы, уплотнять и т.п. НЕ может: форматировать одну сторону, потреково копировать односторонние диски.
- При завершении некоторых дисковых операций происходит принудительное выключение дисковода.

Не сделано:
- Режим 8х8 во вьювере.
- Во вьювере в конце текста по прежнему отображается мусор.
- Во вьювере нельзя выбирать кодировки (есть только cp866).
- Не исправлено сообщение Nonsense in BASIC при старте кодового файла.
- Не менял процедуры старта файлов.




Версия 0.3

Находится в посте на странице 4 (пост #32 от 05.04.2008, 09:44)
Отличается от 0.2 только тем, что удалена процедура выключения дисковода.


Версия 0.4

- Поставил процедуру выключения дисковода от Grand (можно отключить в настройках).
- Дисковод должен выключаться при сообщении о смене диска во время копирования.
- Сделан звук (можно отключить в сетапе в первом секторе коммандера).
- Некоторые настройки (цвета, использование памяти и т.п.) вынесены в setup в первый сектор коммандера (описаны в Руководстве).
- В настройках можно запретить использование страниц 8 и 15 в SCORPION.





Версия 0.5

- Отличается от версии 0.4 только загрузчиком и номером версии. В версии 0.4 оказалось, что глючит процедура останова дисковода. Поэтому изменил загрузчик, чтобы он не портил нужную ячейку.


Версия 0.6 22 апреля 2008.
- Исправлено отключение дисковода.
- Убран глюк в докторе.

Firestarter
10.03.2008, 14:58
Думал что что то новое. нехрина. Уровень команндера 1994-1997 так и остался.

1. Шрифт 8*8 давно не респект
2. Такие рамочки уже всем приелись
3. Функционала мало
4. Какие процедуры чтения записи? #3d13?
5. Командер под какой режим 48к или 128к. больше тянит на 48к
6. Он одна панельный?
7. Всегда мечтал нормальный коммандер с подержкой MS-DOS

CPLx
10.03.2008, 15:25
Дык понятно, что старый. Я и сам в 1997 так и остался. :)
Командер делался специально, чтобы мог работать в 48К. Поэтому никаких многих функций уже по этой причине там быть не может.

1. Шрифт 4x8 мне не нравится. Любой другой - будет торможение. З.5 MHz, как никак. Поэтому выбор шрифтов изначально не богат. Либо печататься будет долго.
2. На вкус и цвет...
3. На 48К много и не может быть.
4. Нет. На чтение/запись программируется ВГ93.
6. Однопанельный, да.
7. Я не знаю что такое MS-DOS.

Firestarter
10.03.2008, 15:36
Дык понятно, что старый. Я и сам в 1997 так и остался. :)
Коммандер делался специально, чтобы мог работать в 48К. Поэтому никаких многих функций уже по этой причине там быть не может.

Срочно читай всякие журнальчики через неделю будеш уже на уровне 2002 года.

1. Шрифт 4x8 мне не нравится. Любой другой - будет торможение. З.5 MHz, как никак. Поэтому выбор шрифтов изначально не богат. Либо печататься будет долго.

Нее тут как реализовать все это дело. Написано в тех же журнальчиках


2. На вкус и цвет...
Сделай сетап какой нить где можно это настроить и еще цветовую гамму.


3. На 48К много и не может быть.
Может если опять же грамотно подойти. например большие модули запаковывать и распаковывать. Да много чего можно еще придумать.


4. Нет. На чтение/запись программируется ВГ93.

Обязательно сделай выбор либо #3d13 либо твой режим. а то на реале не всегда поюзать можно будет. например у кого HDD

6. Одно панельный, да.
в принципе нечего страшного самое главное функциональность


7. Я не знаю что такое MS-DOS.
Это уже моя мечта)))

CPLx
10.03.2008, 15:59
Срочно читай всякие журнальчики через неделю будеш уже на уровне 2002 года.
Это всё потом. Мне надоело уже всё пока.



Нее тут как реализовать все это дело. Написано в тех же журнальчиках

Реализовать-то можно, но печатать будет медленее, чем 8х8. Я не люблю торможение.



Сделай сетап какой нить где можно это настроить и еще цветовую гамму.
Возможно сделаю. А какие цвета менять, и, главное, как? На спеке это трудно сделать так, чтобы это было удобно. Можно сделать таблицу типа:

"цвет такого-то окна": #45
"цвет другого окна": #25

И т.п.
Но по-моему такой цветовой сетап это отстой. Не видно как меняется цвет окна вживую, как это на винде. Есть коммандеры, где это реализовано, чтобы посмотреть?


Может если опять же грамотно подойти. например большие модули запаковывать и распаковывать. Да много чего можно еще придумать.
Возможности паковки не безграничны. Я прикидывал, что сэкономил бы порядка 1кб. Ну запихнул бы в них CHECK и RESTORE DISK, либо дизасм в докторе (так и хотел сделать, потом забил). Это бы ничего не изменило. Здесь лучше делать модульную структуру, чтобы коммандер можно было сконфигурировать и на 48К с минимум функций, и можно было добавить кучу функций, но чтобы работало в 128К. Такая идея есть, но я пока устал. Если буду делать, то потом. Такая идея появилась уже позже, когда почти всё было сделано.


Обязательно сделай выбор либо #3d13 либо твой режим. а то на реале не всегда поюзать можно будет. например у кого HDD
Жесть. Я не умею работать через #3d13. Если увижу надпись тр-досом "Disk error" внизу экрана у меня инфаркт будет. :)
В принципе можно сделать, но я забыл как через #3d13 обрабатывать исключительные ситуации, чтобы не появлялись тр-досовские сообщения. Посмотрю.

Grand
14.03.2008, 04:55
А вот мне командер понравился!
И функционала, как раз в избытке.


Командер делался специально, чтобы мог работать в 48К.Работоспособность в 48К действительно очень важна. Почему-то такое простое понятие игнорируется современными кодерами!


Если увижу надпись тр-досом "Disk error" внизу экрана у меня инфаркт будет.Бояться этой надписи не надо. Важно правильно подключить процедуру обработки ошибок.


Особенно интересно чтобы реальщики потестили, а то у меня реала нет.Мы потестим. Только есть ли у автора желание продолжать совершенствовать командер, или наши рекомендации будут совсем впустую?


Вложения:
TFC01.rar (14.7 Кб)Почему-то SCL-файл из архива не принимается за свой ни Spectrum Navigator'ом, ни AMD Copier'ом. В чем он делался? Может, у меня RAR не так распаковался? Но я всё-таки переписал командер на реальный диск в эмуляторе Real Spectrum.

CityAceE
14.03.2008, 06:22
Командер делался специально, чтобы мог работать в 48К. Поэтому никаких многих функций уже по этой причине там быть не может.
Это не отговорка! :) TRDN тоже полноценно работает на 48К, но при этом он двухпанельный и содержит весь необходимый функционал.

CPLx
14.03.2008, 09:18
Работоспособность в 48К действительно очень важна. Почему-то такое простое понятие игнорируется современными кодерами!
48К сильно стесняют. Память всё-таки важный ресурс. Можно уложиться и в 8кб, но вид у такого коммандера будет, так скажем, несовременный. :) Ни меню, ни окон, минимум функций, тормозная печать, всё управление по горячим кнопкам, и т.д.



Мы потестим. Только есть ли у автора желание продолжать совершенствовать командер, или наши рекомендации будут совсем впустую?
Не знаю. Желание было. А сейчас не знаю. Нужно ли это кому-то. По-моему спек всё-таки умер.
В ближайшее время (месяца два) точно ничего делать не буду. У меня нет времени сейчас. Потом - возможно.
Если будут рекомендации, то пишите сразу. У меня будет время подумать как это организовать и буду представлять примерный объем работ и цели. Заодно и интерес появится. Когда не знаешь что людям надо, то и не знаешь что делать, то нет и интереса. Так что пишите. Это пойдет только на пользу. А если я и не возьмусь больше за коммандер, то пропадут впустую. Думаю не страшно, если вы напишите пару строк на форуме впустую? :) Мне-то код полюбому писать неделями потом.

Если я возьмусь за него снова, то первое что буду делать - модульную структуру. Это, как я думаю, поможет избавиться от проблем с памятью и сохранит возможность работы в 48К. Остальное уже будет проще - только модули дописывать потихоньку.



Почему-то SCL-файл из архива не принимается за свой ни Spectrum Navigator'ом, ни AMD Copier'ом. В чем он делался? Может, у меня RAR не так распаковался? Но я всё-таки переписал командер на реальный диск в эмуляторе Real Spectrum.[/QUOTE]
Делал Scl в Спектакалькуляторе. Потом заархивировал, потому что форум не пропускает Scl расширение. Странно, спековский форум, - и не пропускает Scl.


Это не отговорка! :) TRDN тоже полноценно работает на 48К, но при этом он двухпанельный и содержит весь необходимый функционал.

У меня проблемы с понятием "весь необходимый функционал". В моём коммандере есть RAM-DISK (это 2 кб на каталог), дисковый доктор, сравнение содержимого файлов. Если всё это выкинуть, то освободится память и можно сделать двухпанельный. Я решил, что лучше больше функций чем две панели.
Кстати, TRDN070b у меня не запускается в Спектакалькуляторе. Интересно, почему.

Black_Cat
14.03.2008, 09:35
Остальное уже будет проще - только модули дописывать потихоньку.а на другой видеорежим можно будет при этой модульности перейти?

newart
14.03.2008, 09:51
Нужно ли это кому-то.
А какая разница?
Ну, вот к примеру, нужна утилита по удалению дублей из TRD/SCL коллекций и что, от надобности кто-то взялся ее писать? Нифига. :(

CPLx
14.03.2008, 12:17
а на другой видеорежим можно будет при этой модульности перейти?
Я не знаю ничего про видеорежимы (застрял в 1997). Наверное можно. :)


А какая разница?
Ну, вот к примеру, нужна утилита по удалению дублей из TRD/SCL коллекций и что, от надобности кто-то взялся ее писать? Нифига. :(

Напиши что за утилита. Что делать должна, интерфейс. На писюке? Может сделаю.

Grand
17.03.2008, 04:11
Кстати, TRDN070b у меня не запускается в Спектакалькуляторе. Интересно, почему.Загадка какая-то... :) Вообще же, мы больше времени уделяли реалу. Лично я запускал TRDN обычно в Real Spectrum'е.
Но разобраться надо. Как именно он не запускается? Сбрасывается во время загрузки? Не стартует?



... есть ли у автора желание продолжать совершенствовать командер ... ?Не знаю. Желание было. А сейчас не знаю. Нужно ли это кому-то. По-моему спек всё-таки умер.Мне, как человеку, каждый день включающему реальный Спектрум (и отнюдь не для того, чтобы поиграть) уже на протяжении 10-и лет странно слышать такое. Ты и сам доказал обратное, выпустив командер!


Если будут рекомендации, то пишите сразу. У меня будет время подумать как это организовать ...
Тогда начнём... Вообще, то что я напишу, - это мнение одного человека, и с ним можно не соглашаться (однако, оно основано на опыте как кодера, так и пользователя :)).
Не хватает документации. Хотя бы на первых порах описания клавиш. Она обязательно должна быть написана! Про цвет уже сообщали. Почти не видно курсор на чёрнобелом мониторе. Кстати, на эмуляторе это легко отлаживать - многие из них имеют режим чернобелого отображения. Можно сделать, как в старой программе BK Cardfile (http://trd.speccy.cz/sbor/CARDFILE.ZIP), - выбор в настройках одной из двух готовых палитр: для ч/б и для цв. монитора. Пожелания по просмотрщику текстов: чтобы правильно работал счетчик процентов, был режим 8x8, в конце текста не отображался бы мусор, был бы выбор кодировок, и можно было бы смотреть тексты, где строки заканчиваются кодом #0A (такие тексты попадаются).

От меня пока всё. Но тестирование продолжается! :)

CPLx
17.03.2008, 12:59
Загадка какая-то... :) Вообще же, мы больше времени уделяли реалу. Лично я запускал TRDN обычно в Real Spectrum'е.
Но разобраться надо. Как именно он не запускается? Сбрасывается во время загрузки? Не стартует?
Зависон при загрузке. Наверное глюк Спектакулятора.


Мне, как человеку, каждый день включающему реальный Спектрум (и отнюдь не для того, чтобы поиграть) уже на протяжении 10-и лет странно слышать такое. Ты и сам доказал обратное, выпустив командер!
Будем стараться. :)




Документацию сделаю. В ближайшее время.

На счет цветов - могу сделать выбор цветовой схемы.

Про счетчик процентов. Как его сделать "правильным" я не сообразил. :) Можно сделать, чтобы в конце страницы он печатался как "100%". Но будет заметно что он скачкообразно увеличился.

Режим 8х8 в данном коммандере сделать не получится, т.к. нет памяти под русский шрифт 8х8. Многие вещи хотел сделать, но не сделал из-за проблем с памятью.


в конце текста не отображался бы мусор
Специально делал, чтобы отображался. :) Люблю смотреть кодовые файлы как текстовые. Подумаю как сделать, чтобы мусора не было.


был бы выбор кодировок,
Тоже посмотрю можно ли. Если поместится - сделаю скоро. А если не поместится, то когда модульную структуру сделаю, тогда и это всё тоже.


и можно было бы смотреть тексты, где строки заканчиваются кодом #0A (такие тексты попадаются).
Хотел сделать, но текстов таких не нашел, поэтому не делал. Это не сложно.

zxrat
17.03.2008, 22:56
Я поддерживаю идею модульности. Но у меня еще предложение есть. Сделать что-то типа инстала, для командера. Т.е.: есть сам командер, есть много разных плагинов к нему на этом же диске. Запускаю инстал... говорю, что мне нужно что бы всё работало на 48/128/512/1024 машине. И из списка плагинов выбираю необходимые только мне. Это всё записывается в один файл и всё. Этот файл таскаю куда угодно...

Grand
19.03.2008, 04:23
Ну, вот к примеру, нужна утилита по удалению дублей из TRD/SCL коллекций ...Напиши что за утилита. Что делать должна, интерфейс. На писюке? Может сделаю.Я, конечно, не знаю идеи newart'а, но предположу, что утилита на iBM PC должна просматривать указанные ей (например, в каком-то каталоге) контейнерные файлы SCL, TRD и, может быть, других типов, строить базу данных - в каком контейнере что содержится (имя и тип ZX-файла, стартовый адрес, длину в байтах и секторах), - а потом искать одинаковые данные и печатать на экране (а может быть и на принтере) результат.


Про счетчик процентов. Как его сделать "правильным" я не сообразил. :) Можно сделать, чтобы в конце страницы он печатался как "100%". Но будет заметно что он скачкообразно увеличился.Наверное именно так всё равно будет лучше.
Мне приходилось решать эту проблему при написании текстового просмотрщика для TR-DOS Navigator'а (http://www.zx.pk.ru/showthread.php?t=2952) V0.70b. Ничего не придумалось лучше, кроме использования процедур калькулятора системы Spectrum BASIC. Это немного подтормозило вывод, но заметно только если сравнивать с предыдущими версиями по секундомеру. :) При вычислении, процедуры калькулятора сами округляют значения до ближайшего целого. Алгоритм у меня тоже иной, не такой как в TFC, или, скажем, в FAR'е: у меня счетчик показывает в процентах размер прокрученного текста, включая отображаемую страницу. Т.е., какова бы ни была длина текста, на счетчике никогда не может быть "0%".


Обнаружил, что TFC не работает с односторонними дисками. Наверное это и не предпологалось. Жаль. :( Такие диски у меня есть.

CPLx
19.03.2008, 09:32
Наверное именно так всё равно будет лучше.
Мне приходилось решать эту проблему при написании текстового просмотрщика для TR-DOS Navigator'а (http://www.zx.pk.ru/showthread.php?t=2952) V0.70b. Ничего не придумалось лучше, кроме использования процедур калькулятора системы Spectrum BASIC. Это немного подтормозило вывод, но заметно только если сравнивать с предыдущими версиями по секундомеру. :) При вычислении, процедуры калькулятора сами округляют значения до ближайшего целого. Алгоритм у меня тоже иной, не такой как в TFC, или, скажем, в FAR'е: у меня счетчик показывает в процентах размер прокрученного текста, включая отображаемую страницу. Т.е., какова бы ни была длина текста, на счетчике никогда не может быть "0%".
У меня собственные процедуры умножения и деления. Вывод из-за этого не подтормаживает (вроде бы), т.к. укладывается в 2 прерывания на Пентагоне. Там вычисляется номер сектора первой печатаемой строки. Потом он делится на количество секторов файла, и умножается на 100. Поэтому число может быть нулевым, но не может быть 100%.



Обнаружил, что TFC не работает с односторонними дисками. Наверное это и не предпологалось. Жаль. :( Такие диски у меня есть.
Да, только DS 80 tracks. Там еще ограничение на количество треков. По идее, в докторе нельзя попасть на 81-й цилиндр. Количество свободных секторов вычисляется исходя из того, что емкость диска 2560. Но если это нужно, я могу подумать как сделать поддержку односторонних дисков. Это не сложно. Я думал что таких в России даже не было никогда, поэтому не делал.

psndcj
20.03.2008, 22:50
а если умножать на 101?

CPLx
20.03.2008, 23:23
а если умножать на 101?
Зачем?

Формула такая:
Percent = StringSectorNumber/FileSizeInSectors*100%

получается процент от размера файла.

Grand
21.03.2008, 04:29
Но если это нужно, я могу подумать как сделать поддержку односторонних дисков. Это не сложно. Я думал что таких в России даже не было никогда, поэтому не делал.Такова уж специфика реала. Пользователь может воткнуть в дисковод абсолютно любой диск, или не воткнуть никакой. :) Диски 40 дор. и/или односторонние законны для TR-DOS, значит и системно-прикладное ПО должно их поддерживать. Но, если уж очень не хочется делать такую поддержку, все равно должна быть проверка на такие типы и выдаваться сообщение о невозможности работы с ними.
У меня такие диски появлялись когда на одной стороне дискеты переставали читаться сектора (например, из-за царапины) и я просто форматировал их как односторонние.


Кстати, ситуация No disk тоже обрабатывается не совсем корректно: вновь читается предыдущее устройство (а ведь в нем тоже уже может не быть диска), если же диска нигде не оказывается, то не снимается выбор с дисковода. Правильнее, очевидно, было бы снаять выбор с устройства и выйти на пустую файловую панель.


Пробовал я запускать <C>-файлы. Для простоты, кодовая "программа" содержала только команду RET, и завершила она свою работу сообщением Nonsence in BASIC системы ZX Spectrum. Видимо, где-то что-то не учитывается...
Кроме того, перед запуском <C>-файлов, надо бы запрашивать адреса: RAMtop, загрузки и запуска; так сделано в моём GRAND'S BOOT (http://www.zxboot.narod.ru/subdownload/commanders/GBOOT.zip).
Запуск <B>-файлов происходит нормально, даже с односторонних дискет. Однако, при загрузке игры CRIME SANTA CLAUS от FFC&Softstar (http://trd.speccy.cz/full_ver/S_CLAUS.ZIP) происходит сбой с "видеоэффектами" на экране. Думаю, причину я знаю наверняка. Когда работал над своим GRAND'S BOOT V2.2DS (http://trd.speccy.cz/system/GB22DS.ZIP), мне пришлось решать аналогичную проблему. Дело здесь именно в самой адаптации игры; может быть она единственная так некорректно сделана, а может быть попадутся еще, но предусмотреть такое в командере надо. Я готов поделиться информацией, но может CPLx'у будет интересно самому разобраться... :)

CPLx
21.03.2008, 09:20
Кстати, ситуация No disk тоже обрабатывается не совсем корректно: вновь читается предыдущее устройство (а ведь в нем тоже уже может не быть диска), если же диска нигде не оказывается, то не снимается выбор с дисковода. Правильнее, очевидно, было бы снаять выбор с устройства и выйти на пустую файловую панель.
Там можно BREAK нажать (при выборе дисковода), и попасть в файловую панель.
Сделано так: если при попытке выполнить какую-то операцию нет диска, то делается сообщение "нет диска" и переход на "выбор дисковода" (как при нажатии EDIT). По-моему так сделано в CONVER. Я оттуда этот эффект передрал. А надо как? Сообщение "нет диска" и возврат в файловую панель?



Пробовал я запускать <C>-файлы. Для простоты, кодовая "программа" содержала только команду RET, и завершила она свою работу сообщением Nonsence in BASIC системы ZX Spectrum. Видимо, где-то что-то не учитывается...
Кроме того, перед запуском <C>-файлов, надо бы запрашивать адреса: RAMtop, загрузки и запуска; так сделано в моём GRAND'S BOOT (http://www.zxboot.narod.ru/subdownload/commanders/GBOOT.zip).
<C>-файл запускается при CLEAR 65535 командой для TR-DOS: RANDOMIZE USR 15619:REM:RUN "FILENAME"CODE

То есть собственного загрузчика там нет. Всё грузит TR-DOS, а он запускает по адресу загрузки. Если делать свой загрузчик, то первый вопрос: где его разместить? :) А то ведь и прямо на него грузануть можно.



Запуск <B>-файлов происходит нормально, даже с односторонних дискет. Однако, при загрузке игры CRIME SANTA CLAUS от FFC&Softstar (http://trd.speccy.cz/full_ver/S_CLAUS.ZIP) происходит сбой с "видеоэффектами" на экране. Думаю, причину я знаю наверняка. Когда работал над своим GRAND'S BOOT V2.2DS (http://trd.speccy.cz/system/GB22DS.ZIP), мне пришлось решать аналогичную проблему. Дело здесь именно в самой адаптации игры; может быть она единственная так некорректно сделана, а может быть попадутся еще, но предусмотреть такое в командере надо. Я готов поделиться информацией, но может CPLx'у будет интересно самому разобраться... :)

Честно говоря, я вообще в этом слаб. :) Код запуска BASIC программ выдрал из Conver 4.50. Если Conver 4.50 имеет такой же глюк, значит выдрал правильно. :) (проверил: выдрал правильно :)). Если знаете причину, то, пожалуйста, напишите. А то я весь день убью на её поиски.

Grand
25.03.2008, 05:20
Там можно BREAK нажать (при выборе дисковода), и попасть в файловую панель.Вот оно что, - сказывается отсутствие инструкции. :)


А надо как? Сообщение "нет диска" и возврат в файловую панель?Я, конечно, не могу претендавать на истину в последней инстанции, :) но выход на пустую файловую панель мог бы быть полезен с целью вызова дискового доктора для восстановления позже вставленного поврежденного диска, либо форматтера - для форматирования дискеты. Важнее после ситуации "No disk" снимать выбор дисковода. Помнится, были обсуждения, как это сделать: http://www.zx.pk.ru/showthread.php?t=5884 и http://www.zx.pk.ru/showthread.php?t=5498



<C>-файл запускается при CLEAR 65535 командой для TR-DOS: RANDOMIZE USR 15619:REM:RUN "FILENAME"CODEЭто в корне не верно. Во первых, адрес RAMtop надо выставлять адрес загрузки минус один, а не равный 65535; ещё лучше, как я уже писал, запрашивать его у пользователя. Во вторых, кодовые файлы нельзя запускать командой TR-DOS RUN...CODE, так как она содержит грубую ошибку. И, в третьих, как я уже посмотрел, в TFC производится запуск команды TR-DOS через точку входа 15619 (с подменой адреса системной переменной CH_ADD (23645)), а это не лучший способ. Поэтому и не запускается игра CRIME SANTA CLAUS от FFC & Softstar (там неправильно организованы данные). Гораздо лучше, если в области BASIC-программы сгенерировать такую программу на BASIC и передать ей управление:
Для запуска <C>-файлов:

1 CLEAR VAL "00000" : RANDOMIZE USR VAL "15619" : REM : LOAD "filename"CODE 11111
2 RANDOMIZE USR VAL "22222"

где вместо 00000, 11111 и 22222 соответственно подставляются: адрес RAMtop, адрес загрузки и адрес запуска.


Для запуска <B>-файлов:

1 CLEAR VAL "65367" : RANDOMIZE USR VAL "15619" : REM : RUN "filename"


Если делать свой загрузчик, то первый вопрос: где его разместить? :) А то ведь и прямо на него грузануть можно.В описанной выше методике никакого кодового загрузчика нет - всё делает "настоящая" BASIC-программа. Важно только ее правильно сгенерировать и запустить. Кстати, помнится в стареньком буте от Николая Родионова, ничего не генерируется, а используется строчка из BASIC-загрузчика бута.
Если же хочется использовать кодовый загрузчик, то лучшее место для него в области 23464...23551 (#5BA8...#5BFF). Там он не конфликтует с переменными BASIC 128 и повреждение его невозможно, так как загружаемые системные кодовые программы не должны иметь такой низкий адрес загрузки.


Честно говоря, я вообще в этом слаб. :) ... Если знаете причину, то, пожалуйста, напишите. А то я весь день убью на её поиски.2 CPLx:Ну, помочь-то я всегда готов. ;)
Описанные выше методики мной использовались в GRAND'S BOOT V 2.1 и V2.2DS (http://www.zxboot.narod.ru/subdownload/commanders/GBOOT.zip). Если интересно, могу через некоторое время предоставить комментированные исходники. Кстати, исходники GB V2.2DS (http://opensourcezx.untergrund.net/c_soft-commander-grand_boot2.html) уже давно не секрет: они выложены на ZX Open Source (http://opensourcezx.untergrund.net/).

goodboy
27.03.2008, 00:19
Во первых, адрес RAMtop надо выставлять адрес загрузки минус один

меня всегда мучил вопрос ' а зачем -1' ??? а не адрес загрузки ??? стек ведь опускается от указанного адреса. и чем чреват запуск кода через RUN (то есть с адреса загрузки) если возврат в бейсик не планируется ?

CPLx
27.03.2008, 00:54
Важнее после ситуации "No disk" снимать выбор дисковода. Помнится, были обсуждения, как это сделать: http://www.zx.pk.ru/showthread.php?t=5884 и http://www.zx.pk.ru/showthread.php?t=5498
То есть надо глушить дисковод? А я специально убрал эту фичу, потому что думал что она во-первых не нужна, во-вторых Спектакалькулятор с ней подглючивал слегка. А так раньше дисковод вырубался почти после каждой операции с диском. Помню каталог читался, и сразу вырубался.

Про запуск программ позже посмотрю что там. Я ламер в ПЗУ и запускать бейсик программы из кодовых не умею. :)

Grand
27.03.2008, 05:52
меня всегда мучил вопрос ' а зачем -1' ??? а не адрес загрузки ???По адресу, заданному в команде CLEAR система Spectrum BASIC помещает маркёр "конец системной области", ниже будет размещен стек GOSUB, и еще ниже машинный стек Z80.


и чем чреват запуск кода через RUN (то есть с адреса загрузки) если возврат в бейсик не планируется ?Мы не знаем, какую программу захочет запустить пользователь, поэтому должны предусмотреть все варианты. :)


То есть надо глушить дисковод?Работающий без диска дисковод - совершенно ни к чему. Процедура снятия выбора с дисковода в Beta Disc Interface - одна из важных дисковых процедур.

Добавлено через 22 часа 46 минут

А так раньше дисковод вырубался почти после каждой операции с диском.Это нужно делать только в случае No disk. Если диск в дисководе - он сам остановится.

CPLx
30.03.2008, 18:27
Сделал некоторые изменения, предложенные Grand'ом.

- Написал документацию в MS Word.
- Изменил цвет курсора и файлового окна. Должно быть лучше видно на монохромном мониторе.
- Вьювер: счетчик процентов переключается в 100% при окончании текста.
- Вьювер: можно смотреть тексты со строками оканчивающимися на #0A.
- Сделана поддержка односторонних дисков. Коммандер может (???) запускаться с них (правда в Spectaculator и в EmuZWin не запускается), копировать на них/с них файлы, уплотнять и т.п. НЕ может: форматировать одну сторону, потреково копировать односторонние диски.
- При завершении некоторых дисковых операций происходит принудительное выключение дисковода.

Не сделано:
- Режим 8х8 во вьювере.
- Во вьювере в конце текста по прежнему отображается мусор.
- Во вьювере нельзя выбирать кодировки (есть только cp866).
- Не исправлено сообщение Nonsense in BASIC при старте кодового файла.
- Не менял процедуры старта файлов.

Почему не сделано: нет памяти. У меня осталось 86 байт. :) Посмотрю что можно сделать с запуском файлов, может и поместится (если убрать старую процедуру). А выбор кодировок почти нереально уместить.

CityAceE
31.03.2008, 02:08
CPLx, ты бы весь лог (изменения в версиях) и сами новые версии выкладывал в первом посте. Так будет проще искать!

Grand
01.04.2008, 02:51
- Изменил цвет курсора и файлового окна. Должно быть лучше видно на монохромном мониторе.Беда с этим курсором. Всё равно его плохо видно на ЧБ - приходится добавлять яркость.
Может быть выделить в первом секторе командера (подобно тому, как сделано разрешение на Pentagon 1024), специальный байт, куда бы пользователь заносил желаемый атрибут курсора?


Почему не сделано: нет памяти. У меня осталось 86 байт. :)Жаль, что не осталось памяти. Я тут подготовил еще пару "советов". :) Ни на чём не настаиваю - это только моё видение ситуации, и с этим можно не соглашаться, но в своих программах я это реализовывал.
выход из командера, на мой взгляд, надо производить не через нулевой адрес ПЗУ (рестарт), а через стандартную процедуру обработки ошибок системы ZX Spectrum, адрес которой на дне машинного стека ещё до запуска командера. Недостаток - если этот адрес был испорчен, то вместо возврата произойдёт неизвесто что; достоинство - если адрес не испорчен, возврат произойдет в ту среду, откуда загружался комадер: из BASIC 48 - в BASIC 48, из BASIC 128 - в BASIC 128 (при условии, конечно, если системные области командером не портятся). командер работает "беззвучно" - не хватает какой-нибудь звуковой процедуры, вызываемой при нажатии на клавиши.

Grand
02.04.2008, 03:13
При операциях копирования на Скорпионе может быть испорчена 8-я страница памяти, что приводит к неработоспособности как теневого монитора, так и запускаемых программ, использующие вызовы RST 8. Кроме того, если на Скорпионе используется MagOS, то не должна портится еще и 15-я страница.

Вторая проблема проявляется только при работе с дисководами 5,25" и только в версии командера 02. Пробовались "Эл-ка МС 5305" и "Эл-ка МС 5350". Попытаюсь описать, как это происходит. При просмотре картинок/текста, обычно если файл записан на второй половине диска, довольно часто при повторном вызове просмотрщика картинок/текста, показывается не то что должно (похоже дисковод не позиционирует правильно и сектора грузятся не от туда). Причем, ситуация может "чередоваться": при первом вызове просмотрщика показывается то что надо, при втором - какие-то случайные сектора, при третьем - опять всё правильно, при четвертом - те же сектора, не имеющие отношения к просматриваему файлу.
На дисководах 3,5" это не проявляется (пробовались тоже два разных дисковода на двух разных ZX-клонах - Himac HR42 48K и Scorpion ZS 256).
Может быть это связано со вставкой процедуры останова дисковода, а может быть диск ошибочно принимается за односторонний.
И еще. Наверно важнее было бы сделать выключение дисковода при копировании, когда выдаётся запрос на смену дисков, а то сейчас приходится дожидаться, когда он сам остановится.

CPLx
02.04.2008, 08:20
Беда с этим курсором. Всё равно его плохо видно на ЧБ - приходится добавлять яркость.
Может быть выделить в первом секторе командера (подобно тому, как сделано разрешение на Pentagon 1024), специальный байт, куда бы пользователь заносил желаемый атрибут курсора?
Можно сделать setup при старте коммандера, чтобы в нём выбирался цвет курсора, заодно и Pentagon 1024.


Жаль, что не осталось памяти. Я тут подготовил еще пару "советов". :) Ни на чём не настаиваю - это только моё видение ситуации, и с этим можно не соглашаться, но в своих программах я это реализовывал.
выход из командера, на мой взгляд, надо производить не через нулевой адрес ПЗУ (рестарт), а через стандартную процедуру обработки ошибок системы ZX Spectrum, адрес которой на дне машинного стека ещё до запуска командера. Недостаток - если этот адрес был испорчен, то вместо возврата произойдёт неизвесто что; достоинство - если адрес не испорчен, возврат произойдет в ту среду, откуда загружался комадер: из BASIC 48 - в BASIC 48, из BASIC 128 - в BASIC 128 (при условии, конечно, если системные области командером не портятся). командер работает "беззвучно" - не хватает какой-нибудь звуковой процедуры, вызываемой при нажатии на клавиши.
Про выход: у меня уничтожается стек BASIC. Переменные вроде не портятся.
На счет звука не знаю. Там будет подтормаживание при скроллировании файлов скорее всего. Тем более я не люблю звуки. :) Думаю можно сделать, должно поместиться. А сетапом вырубать, чтобы не раздражал.


При операциях копирования на Скорпионе может быть испорчена 8-я страница памяти, что приводит к неработоспособности как теневого монитора, так и запускаемых программ, использующие вызовы RST 8. Кроме того, если на Скорпионе используется MagOS, то не должна портится еще и 15-я страница.
А какие это страницы с номером 8 и 15? Значения в портах какие? Их надо не использовать?


Вторая проблема проявляется только при работе с дисководами 5,25" и только в версии командера 02. Пробовались "Эл-ка МС 5305" и "Эл-ка МС 5350". Попытаюсь описать, как это происходит. При просмотре картинок/текста, обычно если файл записан на второй половине диска, довольно часто при повторном вызове просмотрщика картинок/текста, показывается не то что должно (похоже дисковод не позиционирует правильно и сектора грузятся не от туда). Причем, ситуация может "чередоваться": при первом вызове просмотрщика показывается то что надо, при втором - какие-то случайные сектора, при третьем - опять всё правильно, при четвертом - те же сектора, не имеющие отношения к просматриваему файлу.
На дисководах 3,5" это не проявляется (пробовались тоже два разных дисковода на двух разных ZX-клонах - Himac HR42 48K и Scorpion ZS 256).
Может быть это связано со вставкой процедуры останова дисковода, а может быть диск ошибочно принимается за односторонний.
Это странный глюк, особенно, если зависит от дисковода. Если позиционирование неправильное, то вроде должно быть сообщение Sector not found (ВГ93 по идее должна выдать бит "массив чтения не найден"). Так что здесь дело может быть не в дисководе, а не в неправильной работе с памятью, например. Зависимость от типа компьютера есть при появлении глюка?
Хотя, если это только в версии 0.2, то либо от выключения дисковода, либо за односторонний принимает, что вряд ли. Проверка на односторонность происходит при загрузке каталога. При выполнении команды view as text такой проверки не производится. То есть вызов двух раз подряд view as text должен приводить к одинаковому результату.



И еще. Наверно важнее было бы сделать выключение дисковода при копировании, когда выдаётся запрос на смену дисков, а то сейчас приходится дожидаться, когда он сам остановится.
Сделаю.

alone
02.04.2008, 20:42
Лучший SetUp - в исходнике (условная компиляция и т.п.).

Grand
04.04.2008, 03:14
Можно сделать setup при старте коммандера, чтобы в нём выбирался цвет курсора, заодно и Pentagon 1024.Про всех пользователей сказать не берусь, но лично у меня не вызвало бы трудностей простая замена зарезервированного байта в первом секторе. Тем более, что сделать это можно средствами самого TFC. :)



На счет звука не знаю. ... Думаю можно сделать, должно поместиться. А сетапом вырубать, чтобы не раздражал.Конечно. Самый лучший вариант - это когда имеется возможность звук отключить. Однако, как я и писал: не настаиваю. :)
А в своих программах я обычно использую такую процедуру (она написана по мотивам аналогичной из игры ACADEMY):

SOUND PUSH AF
PUSH HL
PUSH DE
PUSH BC
LD DE,2565
LD HL,1000
XOR A
OUT (254),A ;$-13
XOR #10
EX AF,AF'
LD A,(HL)
INC HL
ADD A,E
LD B,A
DJNZ $-0
EX AF,AF'
DEC D
JR NZ,$-13
POP BC
POP DE
POP HL
POP AF
RET




А какие это страницы с номером 8 и 15? Значения в портах какие? Их надо не использовать?Для страницы 8: (#1FFD) = #10 и (#7FFD) = #10.
Для страницы 15: (#1FFD) = #10 и (#7FFD) = #17.

Однако, похоже, что системой MagOS пользуюсь я один. :) Поэтому не стойт ради этого терять целых 16К памяти. Лучше уж на Скорпионе не использовать только одну 8-ю страницу, и написать об этом в Руководстве, а пользователь пусть сам решает: отключать ему MagOS при работе с TFC или нет.



Так что здесь дело может быть не в дисководе, а не в неправильной работе с памятью, например. Зависимость от типа компьютера есть при появлении глюка?Я все-таки думаю, что проблема именно в дисководе: может быть он не успевает получить команду спозиционироваться? На МС5305 проявляется чаще, на МС5350 - реже. От типа компьютера не зависит.



Хотя, если это только в версии 0.2, то либо от выключения дисковода, либо за односторонний принимает, что вряд ли. Проверка на односторонность происходит при загрузке каталога.А если вернуть как было в версии 0.1? Там-то всё в порядке...



То есть вызов двух раз подряд view as text должен приводить к одинаковому результату.Сам очень поразился, что этого не происходит. :O Всё выглядит именно так, как я описл в предыдущем сообщении.



Лучший SetUp - в исходнике (условная компиляция и т.п.).А как тогда программу настраивать взависимости от клона, на котором она должна запускаться???


Вчера обратил внимание, что TFC не проверяет при чтении каталога TR-DOS-ли диск вставлен. Забавный получается результат, если вставить MS-DOS-диск 720K. Это конечно мелочь: я всего лишь тестировал TFC и подсовывал ему всё, что под руку попадалось, :) но пользователь может вставить диск не той системы по ошибке. TR-DOS, например, проверяет свои диски по значению #10 в байте +231 системного сектора (правда, там это работает, если сектор вставленного диска длиной меньше, либо равен 256 байтов). И еще: TR-DOS проверяет тип своего диска по байту +227 системного сектора: если бит 0 равен 0 - то 80 дорожек, если бит 3 равен 0 - то две стороны.

CPLx
05.04.2008, 09:44
Я все-таки думаю, что проблема именно в дисководе: может быть он не успевает получить команду спозиционироваться? На МС5305 проявляется чаще, на МС5350 - реже. От типа компьютера не зависит.

А если вернуть как было в версии 0.1? Там-то всё в порядке...
В этом посте я прикреплю версию 0.3, она точно такая же как 0.2, с той лишь разницей, что удалена процедура останова дисковода. Потестите её, будут ли такие же глюки. Если нет - значит причина в выключении дисковода, и тогда надо будет думать как это сделать без глюков.

Для выключения дисковода используется такая процедура:



LD A,#D8
LD DE,#2FC3 ;OUT (1F),A:RET
CALL DOS
CALL WAIT
LD A,%01100000
LD DE,#2FC3 ;OUT (1F),A:RET
CALL DOS
LD B,0
DJNZ $
LD A,#D8
CALL DOS
WAIT LD DE,#3FCA ;IN A,(FF): AND C0: JR Z,3FCA: RET M: OUTI: JR 3FCA
DOS PUSH DE
JP #3D2F


Как она работает - понятия не имею. :) Я её еще в 1997 написал, и почему она такая я не помню. Тогда она у меня работала без глюков.


Вчера обратил внимание, что TFC не проверяет при чтении каталога TR-DOS-ли диск вставлен. Забавный получается результат, если вставить MS-DOS-диск 720K. Это конечно мелочь: я всего лишь тестировал TFC и подсовывал ему всё, что под руку попадалось, :) но пользователь может вставить диск не той системы по ошибке. TR-DOS, например, проверяет свои диски по значению #10 в байте +231 системного сектора (правда, там это работает, если сектор вставленного диска длиной меньше, либо равен 256 байтов). И еще: TR-DOS проверяет тип своего диска по байту +227 системного сектора: если бит 0 равен 0 - то 80 дорожек, если бит 3 равен 0 - то две стороны.
Вот этого не предполагал. Но тут возникает вопрос: что делать, когда, например, есть каталог, но поврежден 9-й сектор? TR-DOS в таких случаях пишет "Disk error" и отказывается показывать существующий на диске каталог. Меня раньше это сильно парило, и приходилось смотреть этот каталог доктором. Поэтому никаких проверок там нет, и я думаю делать их не нужно. Просто считается что диск всегда TR-DOS. Это позволяет смотреть даже поврежденные TR-DOS диски, а не отказываться от этого сходу из-за потери одного байта.
А что там за эффект появляется? Какой-то мусор вместо списка файлов? :)

Grand
08.04.2008, 02:59
В этом посте я прикреплю версию 0.3, она точно такая же как 0.2, с той лишь разницей, что удалена процедура останова дисковода. Потестите её, будут ли такие же глюки.Глюка нет. Всё надёжно работает, как в версии 0.1. Значит виновата процедура останова дисковода. Как я уже сообщал, достаточно останавливать дисковод только в ситуации No disk; можно также и после запроса на смену дисков при копировании.


Для выключения дисковода используется такая процедура: ...Признаться, так толком и не понял, как она работает. :) Сначала прерывается контроллер, потом дается команда шаг назад без загрузки головки, потом опять прерывается... Всё это "не по науке".
Вообще, существует два эффективных способа останова дисковода: программный сброс микроконтроллера, и эмуляция индексных импульсов. В первом случае обнуляются все регистры микроконтроллера, и значения в них надо заносить заново. Второй способ - штатный, используемый авторами TR-DOS; я считаю его самым лучшим. Именно процедура, действующая по второму принципу, и представлена мной здесь: http://www.zx.pk.ru/showpost.php?p=96820&postcount=12



Вчера обратил внимание, что TFC не проверяет при чтении каталога TR-DOS-ли диск ...Вот этого не предполагал. Но тут возникает вопрос: что делать, когда, например, есть каталог, но поврежден 9-й сектор? ... А что там за эффект появляется? Какой-то мусор вместо списка файлов? :)Ну, как я и написал, мелочь это. Но можно было бы, например, проверять на диск TR-DOS только при чтении каталога, и после сообщения, что диск не TR-DOS, выходить на пустую панель. А в докторе ничего не проверять.
Эффект сейчас такой: данные из считанного сектора командер пытается интерпретировать как названия файлов TR-DOS, и иногда пишет "осмысленные" фразы: "MS-DOS 5". :)

CPLx
10.04.2008, 21:33
Grand, во-первых, с днем рождения! :)

Во-вторых, вопрос появился. Драйвер памяти у Scorpion256 и KAY256 одинаковый. То есть если я выключу 8-ю страницу, то она не будет задействована также и в KAY256. Это правильно? KAY256 похож в этом на Scorpion? (есть ли там "монитор" и т.п.) Если нет, то как отличить KAY256 от Scorpion256?

Grand
11.04.2008, 03:13
Про определение Скорпиона напишу немного позже.

А пока немного о другом. :)


Как теперь известно, TFC работает с версией TR-DOS 5.03. Делается ли при старте командера проверка на номер версии?
Такую проверку далать надо, поскольку, опять-таки, неизвестно на какой версии пользователь запустит командер.
Если версия не соответствует, то надо выдавать об этом сообщение, а потом - DI \ HALT.
В книге А.Ларченко и Н.Родионова "ZX Spectrum и TR-DOS для пользователей и программистов" предлагается способ определения версии, который я реализовал так:

;Определение версии TR-DOS
LD HL,19
LD C,L
CALL 15635
LD A,(23779)
;Если в аккумуляторе #BD, то V5.01,
;если - 7, то V5.03, иначе - неизвестная версия.
Возможно, кто-то может с этим не согласиться, но я не вижу препятствий для использования такого алгоритма.

CPLx
11.04.2008, 14:50
Проверки на версию TR-DOS нет.
Но теперь есть. :)
Версии 5.04х - принимает за 5.03?

Grand
13.04.2008, 00:56
С точки зрения архитектуры, Кай-256 - это Скорпион-256 без теневого монитора. :) Поэтому по наличию этого самого монитора и можно отличить Скорпион.
Надо сказать, что, для простоты, можно ничего не определять, а сделать так, как уже сделано в TFC для Pentagon 1024 - т.е., взависимости от значения какого-то зарезервированного байта в первом секторе командера, использовать или не использовать 8-ю страницу.

Авторы Скорпиона рекомендуют делать проверку так, - и я придерживаюсь этого мнения (А.Ларченко, "Краткое описание функций Профессионального Расширения Теневого сервис Монитора компьютера "Scorpion ZS 256 Turbo"", стр.15). Переустановить системную переменную (ERR_SP). Вызвать какую-либо функцию RST 8. Если управление перешло по адресу из (ERR_SP), то компьютер со стандартным ПЗУ, иначе - Скорпион
Ну, а какую функцию лучше вызвать? Можно "отключение сервис монитора". Но я это не рекомендую: того, кто хочет покопаться в программе это не остановит, а тому, кто хочет с этой программой нормально работать, - доставит неудобства. Лучше вызвать функцию "установка адреса рабочего буфера", которая с V3.0a возвращает код версии теневого монитора.

LD SP,(23613);Сохраняем прежний адрес процедуры
POP HL ;обработки ошибок на дне стека,
LD (L2+1),HL;и устанавливаем новый.
LD HL,L1 ;
PUSH HL ;
LD HL,23296 ;Функция "Установка адреса рабочего буфера",
LD C,9 ;не изменяет регистры DE и BC, а с V3.0a
RST 8 ;возвращает в D код версии (для V3.0a - код 68), в E, B
DEFB #81 ;и C - дату компиляции.
;Сюда переходит управление, если Скорпион.
. . .
JP L3
;Сюда переходит управление, если компьютер со стандартным ПЗУ.
L1 . . .
L3 LD SP,(23613);Восстанавливаем прежний адрес процедуры
POP HL ;обработки ошибок.
L2 LD HL,00000 ;
PUSH HL ;
. . .




Версии 5.04х - принимает за 5.03?Да. Так как по стандартным процедурам они соответствуют. Я, в своё время, изучал версию 5.04T; там даже есть сообщение, что она переделана из 5.03 (добавлено "турбо-форматирование").

CPLx
14.04.2008, 16:59
Сделал версию 0.4


- Поставил процедуру выключения дисковода от Grand (можно отключить в настройках).
- Дисковод должен выключаться при сообщении о смене диска во время копирования.
- Сделан звук (можно отключить в сетапе в первом секторе коммандера).
- Некоторые настройки (цвета, использование памяти и т.п.) вынесены в setup в первый сектор коммандера (описаны в Руководстве).
- В настройках можно запретить использование страниц 8 и 15 в SCORPION.

Цветовую схему вернул от версии 0.1. Можно менять в настройках цвет курсора, файлов, маркированных файлов, курсора на маркированном файле, запретить останавливать дисковод, включить звук (по умолчанию по-моему выключен). Файл выложил в первый пост ветки.

Со звуком, как и ожидалось, возникло торможение при скроллировании файлов. :)
По умолчанию страница 8 Скорпиона не используется. Можно выключить еще и страницу 15.

Добавлено через 55 секунд
Еще определение версии TR-DOS сделал. Не знаю насколько это полезно.

Добавлено через 2 часа 7 минут
Пока никто не скачал, удалил 0.4, исправил глюк, и опять выложил. :)

Grand
16.04.2008, 02:22
К сожалению, опять обнаружилась серьёзная проблема.
Не работает ни одна дисковая операция! Нет обращения к дисководу, и он, естественно, не крутится. Если выбрать перечтение каталога (клавиша "1"), то выдается NO DISK (для всех устройств, кроме E). Если в меню файловых операций выбрать просмотр текста (или другое, где требуется работа дисковода), - то зависание.
Тестировалось на Himac HR 42 и Scorpion ZS 256 - везде результат один. А вот на эмуляторах результат другой: в Real Spectrum при попытке перечтения каталога NO DISK также выдаётся, а операции в файловом меню работают; в R80 абсолютно всё работает, как будто проблемы нет. Проверить на других эмуляторах не могу, но понятно, что ситуация на эмуляторах точно не воспроизводится...

CPLx
16.04.2008, 08:13
Возможно причина опять в процедуре останова дисковода.

Вопросов два:

1. Сразу после загрузки коммандера (как только он загружается в память), происходит ли загрузка каталога?
2. Если отключить процедуру останова дисковода, глюки пропадают?

Процедура останова дисковода выключается в Setup'е. Первый сектор коммандера, байт со смещением 200 надо сделать нулём.

Grand
17.04.2008, 02:52
1. Сразу после загрузки коммандера (как только он загружается в память), происходит ли загрузка каталога?Каталог зогружается как ни в чем не бывало. А вот дальше дисковод не работает, как будто из него вытащили интерфейсный кабель.


2. Если отключить процедуру останова дисковода, глюки пропадают?Не пробовал еще; многие байты попробовал, а этот - нет. Сегодня попробую.

CPLx
17.04.2008, 09:49
Каталог зогружается как ни в чем не бывало. А вот дальше дисковод не работает, как будто из него вытащили интерфейсный кабель.
Ага, ну это после того как процедура выключения дисковода первый раз отработает, сразу после загрузки каталога, так всё и вырубается начисто.

Добавлено через 10 минут
По-моему её вообще удалить надо, от греха подальше.

Grand
17.04.2008, 12:57
Попробовал. Всё стало работать нормально. Таким образом, верно: "процедура останова дисковода" глушит его намертво. :-O


По-моему её вообще удалить надо, от греха подальше.Я уже не против. :)

CPLx
17.04.2008, 21:07
Я уже не против. :)

Есть шанс её оставить.
Я тут посмотрел исходники. Ваша процедура останова дисковода использует байт из ячейки 23830. Там по идее хранится копия системного регистра. Так вот, загрузчик коммандера затирает часть байта этой ячейки (делается команда: LD A,(23830): AND 3: LD (23830),A). Так что наверное здесь причина. Мой загрузчик оказался несовместимым с Вашей процедурой останова дисковода. :)

Изменил загрузчик. Теперь он не меняет ячейку 23830, используемую процедурой выключения дисковода. Версию 0.5 выложил в первый пост этой ветки.

Добавлено через 52 минуты
Еще вопрос появился по Вашей процедуре останова дисковода.
Код такой (я немного ужал по объему):



LD DE,12225
CALL DOS
LD A,(23830)
PUSH AF
XOR 1
LD DE,697
CALL DOS
POP AF
DOS PUSH DE
JP #3D2F


Мне не понятно, зачем использовать ячейку 23830. Например, у меня в коммандере она не меняется при смене дисковода (она вообще коммандером не меняется). Может это какие-то левые глюки за собой повлечь может?
И особенно мне не ясна команда XOR 1. Выполняет роль переключения дисковода с текущего на другой, потом обратно. В моём случае ячейка не будет указывать на текущий дисковод (в общем случае), поэтому иногда это будет работать, возможно, не так как задумывалось. Могут ли в связи с этим быть какие-то глюки?

Grand
18.04.2008, 03:15
Ваша процедура останова дисковода использует байт из ячейки 23830. Там по идее хранится копия системного регистра. Так вот, загрузчик коммандера затирает часть байта этой ячейки (делается команда: LD A,(23830): AND 3: LD (23830),A). Так что наверное здесь причина.Да, это и явилась причиной. Но в собственной программе можно использовать и собственную ячейку, где хранится копия системного регистра.
А системные переменные (системы Спектрум-BASIC и TR-DOS) портить всё же нежелательно: командер ведь предназначен ещё и для запуска других программ, которые должны будут работать в системе.


Еще вопрос появился по Вашей процедуре останова дисковода.Отвечу подробно в следующем своём посте.

Grand
21.04.2008, 02:55
Попробую подробно рассказать о методе снятия выбора дисковода эмуляцией индексных импульсов.

Как известно, микроконтроллер КР1818ВГ93 (и его "западные оригиналы"), завершив выполнение команды, снимает выбор дисковода после поступления определённого количества индексных импульсов. Однако, если дискеты нет, то и индексных импульсов не будет. Авторы Beta Disk Interface не стали добавлять аппаратное снятие выбора (очевидно, ради удешевления схемы), но предусмотрели программную эмуляцию индексных импульсов. Это делается с помощью переключения 3-го бита системного регистра. Про эту возможность написано не во всяком описании по программированию контроллера; обычно сказано, что этот бит отвечает за "загрузку головки". Если мы посмотрим на схему любого нашего клона Beta Disk Interface, то увидим, что соответствующий выход триггера (обычно TM9 или TM8), отвечающий за 3-й бит системного регистра, соединён еще и через диод или логический элемент И с 35-м выводом ВГ93; это и призвано обеспечить программную эмуляцию индексных импульсов.
Однако, мало сэмулировать индексные импульсы, надо еще и переключиться на "противоположный" дисковод. В ПЗУ TR-DOS V5.03, процедура снятия выбора дисковода находится с адреса 727. Однако там есть ошибка: по адресу 730 вместо команды OR 3 должно быть XOR 3; из-за этой ошибки не остановится дисковод B: в интерфейсе, где аппаратно реализовано два дисковода, или дисковод D:, - где реализовано четыре дисковода.

В процедуре, модифицированной мной:
{1} PUSH AF
{2} LD HL,12225;Для V5.01 адрес: 12151.
{3} CALL {12} ;Прерывания работы микроконтроллера.
{4} LD A,(23830);Копия системного регистра.
{5} XOR 1 ;Выбор "противоположного" дисковода и
{6} CALL {11} ;эмуляция его индексных импульсов.
{7} LD A,(23830);Выбор текущего дисковода и
{8} CALL {11} ;эмуляция его индексных импульсов.
{9} POP AF
{10} RET
{11} LD HL,697 ;Для V5.01 адрес: 683
{12} PUSH HL
{13} JP 15663команда XOR 1 в строке 5 гарантированно переключает дисковод на "противоположный", и это обеспечивает снятие выбора. "Упрощение" этого алгоритма я не рекомендую: возможно он перестанет выполнять свою функцию для каких-то типов дисководов. Но сейчас в TFC версии 5 останов [мойх] дисководов работает наконец-то нормально. :)

По поводу использования ячейки "копия системного регистра": адрес для этой самой копии системного регистра, конечно же, может быть и другим. Но значение должно быть действительно копией, поскольку оно отправляется непосредственно в порт #FF подпрограммой ПЗУ TR-DOS по адресу 697. После того, как отработает
предложенная мной процедура, в порте #FF окажется точно такое же значение, как и до её вызова (только дисковод будет остановлен).


P.S. Извиняюсь за десятичные адреса - я изучал TR-DOS по книге П.Федина "Полное описание и полный дизассемблер TR-DOS", а там все адреса десятичные. :)

CPLx
21.04.2008, 07:00
Ясно. Значит там еще поменять надо кое-что.

Я обнаружил пару глюков в докторе. Будет время - исправлю и выложу.

CPLx
22.04.2008, 11:02
Исправил процедуру снятия выбора дисковода, убрал глюки в докторе (один опасный глючок был). Выложил версию 0.6 в первый пост ветки.

Grand
05.05.2008, 02:28
Я тут на некоторое время исчезал... :)

Повнимательнее протестировал дисковые операции, и вот что могу сообщить.
В режиме TURBO дисковые операции не работают - выдаётся NO DISK; всё можно делать только в обычнном режиме.
Запись на 3,5"-дисковод по-видимому происходит нормально, а вот при записи на 5,25"-дисковод иногда происходять ошибки: первый сектор на некоторых дорожках перестаёт читаться.
В общем-то, такая картина для меня не нова: еще в конце 1990-х годов, когда стали появляться первые командеры с "turbosaver'ами", я получал аналогичные результаты. Еще тогда у меня сложилось мнение, что "turboloader'ы" вероятно могут иметь практическое применение, а вот "turbosaver'ы" - никогда. У меня установлен индикатор записи на дисковод, так вот: скорость записи на 5,25" такая, что даже во время перехода с дорожки на дорожку, он гаснуть не успевает. Надо разобраться с таймингом процедур записи, и сделать величины задержек такие как в ПЗУ TR-DOS.
Одним словом, я солидарен с теми, кто предлагает использовать только точку входа 15635: там такие проблемы никогда не возникают.

CPLx
05.05.2008, 10:51
- Увеличил время проверки наличия диска. Теоретически должно работать на 11 МГц.

- Поставил задержку после команды "шаг вперед". 5 halt'ов. Получается в районе 0.1 сек, что по моим расчетам составляет 50% длины трека и должно привести к пропуску одного оборота диска.

Grand
07.05.2008, 02:27
- Увеличил время проверки наличия диска. ...
- Поставил задержку ...Всё заработало. Пробовал операцию Track copy как с дисковода 3,5" на 5,25", так и наоборот (в т.ч. и в TURBO-режиме). Ошибок не обнаружено (использовалась моя собственная программа верификации дисков, написанная много лет назад специально для таких случаев :)).
Что ж, можно с уверенностью сказать, получилась неплохая утилита. У меня пока пожеланий больше нет. Возможно, в эксплуатации, обнарущатся какие-нибудь ошибки, - тогда вновь обсудим их в данной теме. :)

Spectre
13.07.2008, 18:00
Я извиняюсь, что поздно пишу, хочу несколько комментариев написать по этой ветке:

1. Дайте, пожалуйста, ветке осмысленное название. Коммандеров на спектруме немеряно, так назовите эту ветку именем своего коммандера.
2. Чтобы правильно выводить счетчик процентов во вьювере, вам надо считать не байты, а строки. Тогда у вас будет очень плавное изменение счетчика при скролле по строкам. При достижении конца файла, очень неплохо выставлять 100% принудательно.
3. Сделайте работу как через #3d13, так и через #3d2f. Отлавливать ошибки (пресловутый disk error) при работе через #3d13 не сложно, в какой-то газете я видел хорошее описание от RealSoft'а. Вроде это был Impulse.
4. Книжка Федина переведенная на шестнадцатеричную систему у меня есть (как-то сам попереводил все). Я хотел ее выложить, даже выходил на самого Федина с вопросом не желает ли он пофиксить мелкие найденные ошибки перед тем как я выложу эту книжку, но тот отказался.
5. Известных универсальных драйверов памяти есть как минимум 2. Один из них вы без проблем можете найти в комплекте Real Commander'а (исходник в zasm'е).
6. Модули - это плохая идея. Я не раз высказывался на эту тему, в том числе и на этом форуме. Не повторяйте чужие ошибки. :)
7. В 48К можно всунуть очень и очень много. Также, легко можно сделать версию которая будет запускаться из теневого ОЗУ и ПЗУ, для этого надо чтобы весь коммандер влазил в 16Кб, помните это.

Grand
17.07.2008, 22:08
У меня собственные процедуры умножения и деления. Вывод из-за этого не подтормаживает (вроде бы), т.к. укладывается в 2 прерывания на Пентагоне. Там вычисляется номер сектора первой печатаемой строки. Потом он делится на количество секторов файла, и умножается на 100. Поэтому число может быть нулевым, но не может быть 100%.
2. Чтобы правильно выводить счетчик процентов во вьювере, вам надо считать не байты, а строки.
... При достижении конца файла, очень неплохо выставлять 100% принудательно.Обычно количество строк заранее неизвестно; его можно узнать, произведя предварительное форматирование текста. "К счастью", длина файла в TR-DOS ограничена 255-ю секторами, но в 48K длинный файл "перелопачивать" придется долго.
В TR-DOS Navigator'е (http://www.zx.pk.ru/showthread.php?t=2952) ничего этого не делается. Текст разбивается на строки в процессе вывода, какими бы длинными они не были (хоть весь текст одна строка!). Считаются именно байты, и результат не плохой. Вот какая "процентная" формула там используется:
процентная_величина_прокрученного_текста=адрес_в_т ексте_на_котором_остановился_вывод/(длина_текста_в_байтах/100)

На ассемблере это выглядит так:
LD BC,адрес_в_тексте_на_котором_остановился_вывод
CALL 11563;значение из BC на стек калькулятора (СК)
LD BC,длина_текста_в_байтах
CALL 11563;значение из BC на СК
RST 40
DB #A4;значение 10 на СК
DB #A4;значение 10 на СК
DB 4;умножение
DB 5;деление
DB 5;деление
DB 56;конец
CALL 11733;значение с СК в A с округлением его
;до ближайшего целогоСчетчик показывает величину прокрученного текста, и принудительное значение "100%" никогда не выставляется.


4. Книжка Федина переведенная на шестнадцатеричную систему у меня есть (как-то сам попереводил все). Я хотел ее выложить, даже выходил на самого Федина с вопросом не желает ли он пофиксить мелкие найденные ошибки перед тем как я выложу эту книжку, но тот отказался.Можно было бы пофиксить эти ошибки самому, и опубликовать только эту информацию.


6. Модули - это плохая идея. Я не раз высказывался на эту тему, в том числе и на этом форуме.Если модули организованы как в Real Commander'е, то идея действительно плохая. А вот если сделать динамическую подгрузку оверлеев в зависимости от выполняемой функции, то идея хорошая. Недостаток - нужно держать в дисководе "системный" диск, но и он обходится, если оверлейный файл будет на RAM-диске (в 128K).

Spectre
19.07.2008, 00:39
Обычно количество строк заранее неизвестно; его можно узнать, произведя предварительное форматирование текста. "К счастью", длина файла в TR-DOS ограничена 255-ю секторами, но в 48K длинный файл "перелопачивать" придется долго.
В TR-DOS Navigator'е (http://www.zx.pk.ru/showthread.php?t=2952) ничего этого не делается. Текст разбивается на строки в процессе вывода, какими бы длинными они не были (хоть весь текст одна строка!). Считаются именно байты, и результат не плохой.

Я собственно нигде и не спорю, что считать по байтам можно, тем более что это самый простой способ. ;) Я просто утверждал, что единственный способ добиться плавности изменения счетчика - это считать именно строки, потому что скроллинг осуществляется именно по строкам (а не по байтам). Разбивка строк, разные разделители строк, скорость подсчета и прочее - все это решаемо. Например, посмотрите QC 3.11...


Вот какая "процентная" формула там используется:
процентная_величина_прокрученного_текста=адрес_в_т ексте_на_котором_остановился_вывод/(длина_текста_в_байтах/100)

На ассемблере это выглядит так:
LD BC,адрес_в_тексте_на_котором_остановился_вывод
CALL 11563;значение из BC на стек калькулятора (СК)
LD BC,длина_текста_в_байтах
CALL 11563;значение из BC на СК
RST 40
DB #A4;значение 10 на СК
DB #A4;значение 10 на СК
DB 4;умножение
DB 5;деление
DB 5;деление
DB 56;конец
CALL 11733;значение с СК в A с округлением его
;до ближайшего целогоСчетчик показывает величину прокрученного текста, и принудительное значение "100%" никогда не выставляется.

Я обычно использую собственную процедуру деления для этого расчета:


LD DE,55 ; текущая строка
PERCDIV LD BC,0 ; делитель (заранее высчитанный исходя из числа строк)
CALL DIVIS

[...]

DIVIS LD A,B
OR C
RET Z
LD A,#10
LD HL,0
DIVIS2 RL E,D,L,H
SBC HL,BC
JR NC,$+3
ADD HL,BC
CCF
DEC A
JR NZ,DIVIS2
RL E,D
RET



Можно было бы пофиксить эти ошибки самому, и опубликовать только эту информацию.

Если кому нужно та дока - напишите мне и я ее вышлю. Просто в таком (необработанном) виде не хочется выкладывать на всеобщее обозрение.


Если модули организованы как в Real Commander'е, то идея действительно плохая. А вот если сделать динамическую подгрузку оверлеев в зависимости от выполняемой функции, то идея хорошая. Недостаток - нужно держать в дисководе "системный" диск, но и он обходится, если оверлейный файл будет на RAM-диске (в 128K).

Проблема модулей (оверлеев, плагинов) на спектруме (не только касательно коммандеров) в том, что их пишет только автор программы и все. В том-же RC была изумительно документированная система работы с модулями, куча примеров, поддержка автора и тем не менее количество написанных модулей (сторонними авторами) совсем не впечатляет (несколько штук). За время, пока Pawel писал все эти доки, он возможно сам бы написал эти несколько модулей. :v2_clapp:

Grand
29.09.2008, 02:38
Я собственно нигде и не спорю, что считать по байтам можно...В действительности описанный мной способ выбран вот почему.
В первых версиях TRDN в просмотрщике текстов была сделана интересная возможность: "на ходу" переключаться в режим дампа и обратно. Мне захотелось это сохранить, а для этого значения в памяти должны оставаться неизменными, иначе при переключении надо будет всё перезагружать и переформатировать. Перед написанием своего просмотрщика я изучал аналоги, в том числе и QC 3.10 (3.11 тогда еще не было). Идеи в QC мне понравились, но захотелось опробовать своё, и чтобы это работало и в 48K. Думаю, всё получилось. :)



В том-же RC была изумительно документированная система работы с модулями, ... и тем не менее количество написанных модулей ... совсем не впечатляет ... . За время, пока Pawel писал все эти доки, он возможно сам бы написал эти несколько модулей.Там ситуация, если мне не изменяет память, была другой. Эта дока распространялась за деньги. (Может быть потом она стала открытой, но мне попалась версия RC, где было про это написано именно так. Описание про модули RC я не видел и поныне.) Как знать, прочитай я эту доку в те годы, может быть я сейчас занимался бы RC-модулями, а не TRDN? :) Но TRDN я теперь не брошу! :)

Pawel
02.10.2008, 09:45
Там ситуация, если мне не изменяет память, была другой. Эта дока распространялась за деньги. (Может быть потом она стала открытой, но мне попалась версия RC, где было про это написано именно так. Описание про модули RC я не видел и поныне.)

Неправда, документация по разработке модулей была вместе с самой первой версией (2.0). Причём документация была сразу вполне вменяемая, на её написание было потрачено очень много времени. А что касается денег, то было предложение купить полную версию командера включаюшего два дополнительных модуля, а уже через несколько версий они были включены в скачиваемый дистриб.

riskej
02.10.2008, 10:23
люди добрые, доработайте пожалуйста модуль RC - pt3play+.rcm, чтобы он мог играть vortex tracker файлы и, самое главное, turbo sound! спасите реальщиков! :)

в RC мне не хватает только этого.

Pawel
02.10.2008, 15:14
люди добрые, доработайте пожалуйста модуль RC - pt3play+.rcm, чтобы он мог играть vortex tracker файлы и, самое главное, turbo sound! спасите реальщиков! :)

Так ведь vortex tracker вроде как играется (использован универсальный плеер от Sergey Bulba). В комплекте RC есть достаточно подробно закомментированные исходники PT3Play, так что сделать на их основе плеер других форматов проблемы составить не должно.

Splinter
31.12.2008, 13:05
вортекс плеер только одночиповый играется, традиционный AY, так сказать. Турбо не играет.

alone
04.11.2010, 22:15
Авторы Скорпиона рекомендуют делать проверку так, - и я придерживаюсь этого мнения (А.Ларченко, "Краткое описание функций Профессионального Расширения Теневого сервис Монитора компьютера "Scorpion ZS 256 Turbo"", стр.15).
Когда-то на Народ.ру была выложена эта книга. У кого-нибудь осталась или мне сканировать?

Дмитрий
04.11.2010, 23:52
alone, я с полгода назад эту книгу скачивал с оффсайта сайта scorpion в MS WORD, так что думаю нет необходимости ее сканировать.

---------- Post added at 21:52 ---------- Previous post was at 21:42 ----------


Неправда, документация по разработке модулей была вместе с самой первой версией (2.0). Причём документация была сразу вполне вменяемая, на её написание было потрачено очень много времени.
эх... давно это было... помнится, когда я пропатчил RC1.8 до RC1.81+, Павлу предлагал сделать двухпанельный командер, но получил решительный отпор, мол: "зачем две панели? У спектрума нет винтов и кучи каталогов, как на ПЦ, где это оправдано :)"... Но от судьбы не уйдешь!

---------- Post added at 21:52 ---------- Previous post was at 21:52 ----------


Неправда, документация по разработке модулей была вместе с самой первой версией (2.0). Причём документация была сразу вполне вменяемая, на её написание было потрачено очень много времени.
эх... давно это было... помнится, когда я пропатчил RC1.8 до RC1.81+, Павлу предлагал сделать двухпанельный командер, но получил решительный отпор, мол: "зачем две панели? У спектрума нет винтов и кучи каталогов, как на ПЦ, где это оправдано :)"... Но от судьбы не уйдешь!