PDA

Просмотр полной версии : BUGS IN TRDOS



VELESOFT
12.03.2010, 01:50
See videos. First video sign use classic TRDOS rom and classic ZX roms:
http://velesoft.speccy.cz/other/trdos-error-return.gif :mad:

And this is same video with fixed TRDOS version:
http://velesoft.speccy.cz/other/trdos-correct-return.gif :v2_thumb:

This ZIP file contain different ZX roms and TR-DOS roms with fixed return to basic:
http://velesoft.speccy.cz/other/trdos_and_zx_roms_with_fixed_hl'.zip

1) - Fixed ZX rom refresh value of HL' register after return from machine code. This roms ignore bug in all trdos versions and RETURN will work always correct with all trdos roms.

2) - Fixed TR-DOS roms refresh HL' register before return to ZX rom/basic. Can be used with all ZX roms. (this way is best :v2_yahoo: )

VELESOFT
25.04.2010, 00:08
TR-DOS command LIST allocate block of zx ram for read sectors with directory. After end of LIST command must TR-DOS release allocated ram and return.

LIST command work correct only if is used in basic line: RANDOMIZE USR 15619:REM:LIST

but LIST from TR-DOS command line not release allocated memory before return. :v2_conf2: Each LIST from command line allocate next ram and if ramtop is low then can allocate all free zx memory and show OUT OF RAM message. RETURN command realease all allocated memory.

See video example of TR-DOS 5.03
http://velesoft.speccy.cz/other/trdos503-list-bug.gif

Czech version of TR-DOS 5.05(cz) use fixed code of command LIST. Allocated ram is always released at end of LIST command. :v2_thumb:
http://velesoft.speccy.cz/other/trdos505cz-list-bug.gif

Exist any other TR-DOS versions with fixed this bug ? :v2_conf3:

savelij
12.05.2010, 22:27
This ZIP file contain different ZX roms and TR-DOS roms with fixed return to basic:
http://velesoft.speccy.cz/other/trdos_and_zx_roms_with_fixed_hl'.zip

1) - Fixed ZX rom refresh value of HL' register after return from machine code. This roms ignore bug in all trdos versions and RETURN will work always correct with all trdos roms.

2) - Fixed TR-DOS roms refresh HL' register before return to ZX rom/basic. Can be used with all ZX roms. (this way is best :v2_yahoo: )

Еще один вариант того же патча:

ORG #1D0C
EXX
LD HL,#2758
EXX
DEC HL
LD A,#12
CP (HL)
RET NZ
DEC HL
JP #235

Достоинство: не требуется занимать дополнительные байты.

SoftFelix
19.05.2010, 11:12
TR-DOS command LIST allocate block of zx ram for read sectors with directory. After end of LIST command must TR-DOS release allocated ram and return.

LIST command work correct only if is used in basic line: RANDOMIZE USR 15619:REM:LIST

but LIST from TR-DOS command line not release allocated memory before return. Each LIST from command line allocate next ram and if ramtop is low then can allocate all free zx memory and show OUT OF RAM message. RETURN command realease all allocated memory.
А можно узнать, как и где фиксится этот баг применительно к 5.03?

VELESOFT
01.07.2010, 19:55
It's disass of Czech bug-fixed TR-DOS 5.05cz: :v2_yahoo:
http://portal.vakoveverky.net/modules/mydownloads/viewcat.php?cid=18
Disass is uncomplette but can help for fix bugs in new TR-DOS versions 6.xx
Author of disass: POKE

Alex Rider
22.01.2012, 15:12
Hi! Sorry for my english. Do you have any information about TR-DOS bug described here: http://zx.pk.ru/showthread.php?t=17886 ?
This bug is fixed in your TR-DOS version?
P.S. The problem: TR-DOS converts multi-byte keywords typed by characters in BASIC128 editor after REM to 1-byte tokens (and compresses a line), but does not change length bytes of BASIC line (then BASIC is corrupted). It is a good idea to change the first char of keyword to BASIC token and replace following bytes to spaces. The best idea - learn TR-DOS to execute BASIC lines without tokenization.

MEGAMONSTER
06.02.2012, 01:02
В описании к старенькому эмулятору UKV by Uglekov K , автор пишет:


Ошибка в TR-DOS, которую я нашел с помощью эмулятора

Сразу оговорюсь, что речь пойдет о версии TR-DOS 5.03; но найденная
ошибка присутствует и во всех ее модификациях, которые я видел, и в версии
5.01.

Как отмечалось выше, если моему эмулятору не указать положение точек
TEST и SEEK1, то при чтении/записи блока длиной больше 128 секторов зависание
гарантировано. Когда я стал разбираться, в чем же дело, то обнаружил следующее.
На входе в подпрограмму 3E44 (=SEEK1) в регистре B должна лежать константа
позиционирования (от 8 и до 0Bh); с ней делают OR 18h и кладут результат в
регистр команд контроллера (значения 18h-1Bh соответствуют команде SEEK без
проверки адресных маркеров на дорожке). При вызове 3E44 из 3EB5 (=TEST) регистр
B никак не определен, и может содержать, например, число секторов при вызове
3D13 с C=5 или 6. Если же число секторов больше 20h, то в регистр команд будет
направлен не код команды SEEK, а что-то иное.
Простая проверка на SPECTRUM'е показывает, что все происходит именно
таким образом. Вызывая 3D13 с BC=4005h несколько раз подряд (DE считаем
неизменным), можно наблюдать перемещение головок дисковода на один шаг к центру
диска перед позиционированием на начало читаемого блока, а при вызовах c
BC=6005h наблюдается один отдельный шаг в обратном направлении. Если учесть, что
40h OR 18h = 58h - код команды STEP IN, а 60h OR 18h = 78h - код команды STEP
OUT, то никаких сомнений сомнений уже быть не может: ЭТО ОШИБКА TR-DOS.
Сразу следует вопрос: а можно ли испортить диск, если задать число
секторов 0A0h-0BFh (чтобы получить команду записи сектора), или 0F0h-0FFh (чтобы
получить команду записи дорожки) ? Ответ - нет. Даже если контроллер
воспринимает числа 0B8h и 0F8h как законные команды (это я не проверял), то для
того, чтобы запись на диск началась, контроллер должен сначала получить первый
байт данных; для команды записи сектора этот байт должен поступить не позже
прохождения 8-го байта GAP перед записываемым сектором, для записи трека - в
течение прохождения 3 байт с момента подачи команды. Если первый байт данных не
получен в эти сроки, то операция сразу же завершается с ошибкой LOST DATA (бит
2 статусного регистра), и выставляется сигнал IRQ (как и положено при завершении
любой операции). В эмуляторе не предусмотрено выполнение задержек по данному
правилу, и сигнал IRQ не выставляется до тех пор, пока через регистр данных
контроллера не будет передан блок нужного размера.
Раз эта ошибка не может привести к порче диска, то закономерен вопрос:
а стоит ли на нее вообще обращать внимание? Если вас интересует повышение
скорости обмена с диском, то ответ - непременно! Все модификации TR-DOS на
базе версии 5.03 с приставочками "FAST","TURBO" и т.п. совершенно бессмысленны,
если при каждом обращении к функциям 5,6 подпрограммы 3D13 будет теряться время
либо на позиционирование (хорошо,если только на один шаг), либо на поиск
сектора.
Что можно предложить взамен? Вместо вызова 3E44 из 3EB2 вызываем
что-нибудь вроде 880h (если там свободно), а по адресу 880 помещаем

PUSH HL ; H сейчас содержит номер трека и еще понадобится
PUSH AF ; то же замечание
CALL 3E08h ; регистры HL и DE будут испорчены,но DE можно не сохранять
LD B,A ; наконец-то в B попадает значение константы позиционирования
POP AF
POP HL
JP 3E44h ; и никакой ошибки !


А ведь действительно, как сейчас помню, дергалась головка на дисководе туда-сюда не по делу...

psb
06.02.2012, 01:48
А ведь действительно, как сейчас помню, дергалась головка на дисководе туда-сюда не по делу...
подтверждаю.

SoftFelix
01.12.2012, 14:02
Еще один вариант того же патча:

ORG #1D0C
EXX
LD HL,#2758
EXX
DEC HL
LD A,#12
CP (HL)
RET NZ
DEC HL
JP #235

Достоинство: не требуется занимать дополнительные байты.

Хочу пропатчить TR-DOS в Скорпионовском ПРОФ-РОМ v4.01 (адаптация для КАЯ by Ewgeny7, убрана проверка на CRC). В тексте выше точно указан ORG #1D0C для патча? Вроде должен быть #1D0F?

SoftFelix
01.12.2012, 14:14
p.s. Всё правильно, ORG должен быть на #1D0C.

VELESOFT
11.05.2013, 20:59
Select drive in TR-DOS

I need select drive from basic, but if I select drive without FDD then trdos show error message ... TAPE LOADING ERROR.

example:
1) eject diskette from drive A
2) write in basic command RANDOMIZE USR 15619:REM:*"a:"

I test TR-DOS 5.03, 5.04T, 5.041, 6.09 and bug is same.
Only Czech version of TR-DOS 5.05 show correct message O.K.

Vadim
11.05.2013, 22:07
Only Czech version of TR-DOS 5.05 show correct message O.K.
В реале там ооочень неприятная ошибка есть. Если дискета не установлена, моргает лампочкой и пишет O.K. Хотя должен быть "No Disk". Про обработку из бейсика посмотрю, проверю, как будет время и исправлю в 5.041.

VELESOFT
11.05.2013, 23:20
Exist any other way for select drive from basic ? For example change tr-dos variables....

Vadim
12.05.2013, 07:35
For example change tr-dos variables....
Как вариант да. Но это неправильно. Должна работать прямая команда. Но нужно это только для бейсик-программ, которые работают с диском. Таковых почти нет.

VELESOFT
12.05.2013, 10:33
I need select drive without error message (must return only error code). In basic is this impossible, ok. I write small routine in assembler:


ld a, b ;A = drive number
ld c, 1 ;C = service number 1 = select drive
ei
call 3D13h ;call tr-dos service

But if diskette in selected drive not exist then tr-dos show error message "Retry,Abort,Ignore"... with possibility return to basic after press "A" :-(

Can anyone write correct routine for me ?

Alex Rider
12.05.2013, 13:25
You can change the current drive by POKEing its number (0-3) to 23833, but access to a drive without a disk leads to "R Tape loading error". Do you search a way to check presence a disk in the selected drive without error, with returned error code only?

VELESOFT
12.05.2013, 14:18
You can change the current drive by POKEing its number (0-3) to 23833, but access to a drive without a disk leads to "R Tape loading error". Do you search a way to check presence a disk in the selected drive without error, with returned error code only?

Yes

Sanyok
16.05.2013, 14:44
Я использовал вот эту процедурку, работает вполне нормально, вызывается вместо #3D13.
http://zxdn.narod.ru/coding/adv7trer.txt

MetalliC
31.05.2015, 00:18
сорри за некропостинг, но хотелось бы знать - кто-то разбирался как вообще реальная ВГ93 может работать при наличии этого бага в TR-DOS (http://zx-pk.ru/showpost.php?p=463500&postcount=7) ?

в частности случай если допустим выполнить подряд два штуки CAT ?
дело в том, что в таком случае вместо комманды позиционирования $18 в ВГшку шлётся комманда "принудительного прерывания", обычно $DC или DF.
буржуйские доки на WD17xx говорят, что если установлен бит i3, то выполняется немедленное прерывание, и взводится INTRQ, при этом чтением регистра статуса или записью другой комманды он нифига не сбрасывается, и будет взведенным вечно, пока не прийдет спец комманда D0. естественно в тр-досе никаких D0 не шлется, так как это вообще должен был быть SEEK на 0ю дорожку.

короче или ВГ93 работает как-то иначе, и не требует сброса этого "флага", или я нифига не понимаю... :confused:

EvgenRU
18.05.2017, 00:00
Дабы не плодить новые темы, напишу здесь.

Столкнулся с проблемой при работе с RAM диском. Почти всё идет, но...

TR-DOS 5.04T с рамдиском под профи
Некоторые программы ступорятся при чтении сектора в #2F1B на инструкции HALT.
Ладно, не беда, это значит где-то нет EI, поправил этот момент, но, это привело к другой проблеме, которая так же присутствует в 6.11E и 6.11Q
Ступор начинается в #3FE5, конкретно вот этот цикл зацикливается

x3FE5 IN A,(#FF) ;поступил какой-нибудь сигнал?
AND #C0
JR Z,x3FE5 ;если нет, то ждем его
RET M ;если это INTRQ, то возврат
x3FEC INI ;чтение байта
JR x3FE5 ;повтор

Чтобы у вас была возможность проверить - выложу 2 игры, которые не идут с рам диска, может кто-то сможет подсказать что там в них такое используется и как поправить тырдос...

SoftFelix
18.05.2017, 00:13
Некоторые программы ступорятся при чтении сектора в #2F1B на инструкции HALT.
А не из-за процессора ли это? В CMOS'ах как-то по другому, вроде, флаги выставляются при прерываниях, поэтому и пришлось добавлять EI.

goodboy
18.05.2017, 00:25
выложу 2 игры, которые не идут с рам диска, может кто-то сможет подсказать что там в них такое используется
они вообще незапускаются. образ битый?

EvgenRU
18.05.2017, 00:38
Извиняюсь, перезалил. На реале они идут только если это диск А. Рам диск у меня тоже А, с ним такая вот беда получается...
PS: процессор тут ни при чем, на анриле такая же фигня.

goodboy
18.05.2017, 00:48
стоп, а разве (TR-DOS 5.04T с рамдиском под профи) умеет эмулировать прямые обращения к ВГшке ?
(вроде только сделан перехват функций #3d13)
или я отстал от жизни ?

EvgenRU
18.05.2017, 00:53
Так получается там прямые обращения идут? Если так, то куда подсмотреть, чтобы это дело реализовать в этом трдосе? В 6.11Q этого тоже получается нет раз не работает?

PS: я так понимаю там проблема в команде GO TO ?

UPD: удалось локализовать проблему, короче эти 2 игры, и аналогичные, которые не грузятся, для чтения сектора вызывают (через что-то, хз пока что что, может GOTO) подпрограмму чтения сектора по адресу #2F1B, которая читает сектор напрямую с контроллера минуя RAM DISK и вызывая #3FE5, чтобы это исправить, нужно допилить вызов #3FE5, чтобы проверялся рамдиск и выполнялись соответствующие действия для рамдиска.
Как-то так....

UPD2: попробовал код #2F1B заменить на вызов #3F2 или #1E3D, в E у нас номер сектора текущей дорожки видимо, в HL адрес куда грузить, но #1E3D нужен еще номер дорожки, пробовал брать его из #5CF5, но что-то ничего не выходит...
Короче полный DI&HALT, но, я всё еще не оставил попыток это исправить, вроде с виду не должно быть очень сложно.

UPD3: проверил загрузку игры DARKMAN, в ней
через #1FF3 в порт #FF шлется #2C
через #2A53 в порт #7F шлется #5D
через #2FC3 в порт #1F шлется #18 (установка номера дорожки)
затем вызывается #2F1B, для чтения #2C секторов
видимо придется перехватывать эти точки входа и сохранять значения портов перед вызовом #2F1B

UPD_FINAL: короче, перехватил я эти подпрограммы вывода в порты, сделал обработку команд контроллера и допилил #2F1B и всё заработало! Короче это не баг, а эмуляция контроллера для RAM диска получилась! :) Важно помнить, что в регистры #5F, #3f и регистр данных шлется не номер дорожки, а номер цилиндра, так что нужно умножать цилиндр на 2 и прибавлять номер стороны из регистра состояний, как-то так, если будут вопросы - пишите в ПМ.