(c) 2оо2 Disabler/DPL
О глюках и не только...
Хаюшки, люди! Сегодня вам будет поведано о различных глюках
XAS'a, а так-же о "железных" глюках.
` Глюки XAS'а
С самой первой версии, которая у меня появилась, а это была
версия 3. XXX,и до последней - 9.10 присутствует один интересный
глюк: если набрать следующее:
ORG #6000
LAB1 SUB A
NOP
LAB2 SUB A; <- коментарий обязателен
NOP
LAB3 NOP
NOP
А потом ассемблируем, заходим в STS, жмём SS+5 и смотрим
меточки... Вот тут он и выскакивает!!!
#6000 LAB1 SUB A
#6001 NOP
#6002 LAB2 SUB A
#6003 NOP
#6004 NOP
#6005 LAB3 NOP
Таким образом получается, что XAS считает, что первая команда
SUB имеет длинну один байт, а вторая команда SUB имеет длинну
два байта. Вместе с тем вторая команда (как и первая) имеет
длинну один байт и как следствие этого смещается таблица меток.
----> ГЛЮК!!!
Едем далее. Еще один глюк XAS'а заключается в том, что при
загрузке его текста в страницу памяти в которой находился какой-
либо мусор, если при этом размер текста заканчивается на конце
сектора возникает глюк: XAS неправильно ставит маркер конца
текста и пытается преобразовать "мусор" в свой текст и в лучшем
случае сбрасывается.
----> ГЛЮК!!!
Ну а теперь о "железных" глюках:
` Глюк порта клавиатуры:
При чтении из порта клавиатуры (#fe) седьмой и пятый биты
должны быть равными единице. В пентагоне это так, а вот в
некоторых самоделках из порта читаются нули. Из-за этого не
работают PT2.1 и Digital Studio.
` Глюк kempston joystick'а:
При правильном подключении старшие три бита равны нулю. В
пентагоне они, чаще всего равны единице. Кстати, тестировать kj
нужно по младшим пяти битам. Если они все равны нулю,то он есть.
При этом kj опрашиватся по маске #1f. Раскладка порта такая:
┌─────┬──────────┐
│ bit │ function │
├─────┼──────────┤
│ 0 │ right │
│ 1 │ left │
│ 2 │ down │
│ 3 │ up │
│ 4 │ fire │
│ 5 │ cancel* │
│ 6 │ ---- │
│ 7 │ ---- │
└─────┴──────────┘
* Данная функция что-то типа правой кнопки мыши. Но я видел
её реализацию ТОЛЬКО на "таганрогах"!!!
` Глюк муз. процессора:
Возникает при проверке на тип процессора, т. е. AY или YM.
Проверка осуществляется при помощи чтения из несуществующего
порта м. п. Если из порта прочитано #ff, то мы имеем YM, если не
#ff - AY. Так вот, есть тормозные схемы на которых это несовсем
так. Обычно проверка выглядит так:
ld bc,#fffd
ld a,#10
out (c),a
in a,(c)
cpl
jr z,ym
ay ...
ret
ym ...
ret
Но как ни странно она не работает. Тормозная схема подключения
м.п. не успевает переключится с записи на чтение в результате из
порта читается "мусор". Что бы все работало необходимо немного
изменить тест:
...
out (c),a
nop; <---
in a,(c)
...
Кстати,это происходит из-за того,что регистры с номером больше
#0f являются встроеноой памятью м. п.,которой ровно 1kb,а доступ
к ней осуществляется через сигналы: a8, не a9, bc2.
` Глюк кэша на пентагоне:
Если включен кэш и происходит запись в порт с адресом меньше
#4000 (16384),то происходит одновременная запись в порт и в кэш.
Этот глюк возникает из-за отсутствия сигнала MREQ, т. е. он не
участвует в дешифрации кэша...
` Глюк дисководов 3.5":
На дисководах 3.5" индексный сигнал или всегда находится в
высоком состоянии, или приходит с задержкой, т.е. сначала
раскручивается диск, а потом, через некоторое время идут
индексные импульсы. Происходит это из-за того, что датчик не
оптический, а магнитный.
` Два глюка дисководов 5.25" (5313):
Иногда дисковод без диска выдает сигнал готовности к работе и
некоторые командеры до посинения пытаются прочитать его. Второй
глюк: если возникает ситуация: дана команда позиционирования, а
потом, сразу, команда записи сектора и этот сектор находится
сразу под головкой дисковода - сектор убивается! Можно избежать
двумя способами: 1.После позиционирования выполмить команду
процессора "halt"; 2.Форматировать диск с LagTrack<>0.
Такие, вот, глюки!!!