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. 


                     Такие, вот, глюки!!!




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обо всем по немногу - O глюках в системных программах: Jemeni Commander, ZX-Word. О работе с STS-BBS'кой.
Глюки - O глюках в программах UFO v2.10, ZX-WORD v2.5m,PCD v6.01, MS-PACK 01.96, STS v4.3, Conver Commander v4.50, C-DOS , Beta Commander v5.2
Музыкальная шкатулка - О глюках музыкальных редакторов: PT2. Конкурс на лучшую мелодию.

В этот день...   17 ноября