DonNews
#17
30 апреля 2002 |
|
Глюки! - о различных глюках ассемблера XAS'a. "железные" глюки: порта клавиатуры, kempston joystick'а, музыкального процессора, кэша на пентагоне, дисководов.
(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. Такие, вот, глюки!!!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября