Echo #03
31 марта 1997

Книга - Тайники ZX-Spectrum: Ошибки в Системе.

<b>Книга</b> - Тайники ZX-Spectrum: Ошибки в Системе.
   Глава 9.

   О Ш И Б К И   В
   С И С Т Е М Е


   Авторы операционной системы и интерпре-
татора  Бейсика  в  ZX-SPECTRUM  выполнили
превосходную работу, но не смогли уберечь-
ся от нескольких ошибок.


   9. 1 Ошибка деления

   Под адресом #3200 помещено значение #E1
вместо  #DA. В результате, иногда теряется
последний  бит,  что  приводит к ошибочным
округлениям. Последствия ошибки демонстри-
рует программа:

   10 LET A=A/B
   20 IF A THEN GO TO 10
   30 PRINT "получен нуль "

   Запуская  ее  со  значениями A=1 и B=3,
через  секунду  получим  печать:  "получен
нуль".  Запуская  ее заново, со значениями
A=1  и  B=2, зацикливаемся, т. к. SPECTRUM
считает, что 2 -128=2 -128/2.


   9. 2 Ошибка "-65536"

   Авторы допустили неточность в представ-
лении этого числа. Один раз оно хранится в
представлении  с плавающей запятой, в дру-
гой - как целое число в коде дополнения до
2.  Последствия неоднозначности появляются
, к  примеру,  при  выполнении  директивы:
PRINT  -65536.  На  экране  появится число
-1.


   9. 3 Ошибка CHR# 8

   Этот  управляющий символ должен переме-
щать  курсор  на одну позицию влево или на
конец  предыдущей  строки.  Именно  так  и
происходит в строках 1... 123, но с начала
первой строки на конец 0-ой строки перейти
невозможно.  К  любопытным  эффектам ведет
себя просьба сдвинуть курсор влево от поля
(0. 0).


   9. 4 Ошибка CHR# 9

   Этот   символ  должен  сдвигать  курсор
вправо на одну позицию. Здесь, однако, до-
пущена  серьезная  ошибка: все необходимые
расчеты выполняются, однако, авторы забыли
модифицировать системные переменные.


   9. 5 Ошибка "PRESS ANY KEY..."

   В  некоторых  ситуациях SPECTRUM преры-
вает  работу  и ждет толчка нажатием любой
клавиши пользователем. Ошибка ведет к  то-
му,  что компьютер не реагирует на клавиши
<CS> и <SS>, хотя на обе сразу реагирует.

   9. 6 Ошибка указателя бегущей строки

   Допустим,  что последняя строка в прог-
рамме имеет номер 1000. При нажатии 1001 и
<ENTER>,  а  затем  <CS/1>, в нижнюю часть
экрана  будет  сканирована строка 1000, но
вместе  с указателем бегущей строки, кото-
рый  перед  записью строки необходимо уда-
лять.

   9. 7 Ошибка DELETE

   При  удалении  содержимого нижней части
экрана  с  помощью  <CS/1>, в нижнюю часть
экрана сканируется текущая строка програм-
мы  и  невозможен  возврат  к контрольному
размеру  этой области. Требуется вновь на-
жать <ENTER>.


   9. 8 Ошибка ведущих пробелов

   Некоторые ключевые слова во время выво-
да на экран не всегда отделяются пробелами
от  предшествующих:  попробуйте, например,
выполнять
   PRINT CHR# 255; CHR# 13; CHR# 255 .


   9. 9 Ошибка режима K

   После  нажатия  клавиши в режиме K и ее
удержании  в этом положении, клавиша начи-
нает  размножаться.  Курсор  меняется на L
или  C,  но  все время печатается символ в
режиме K.


   9. 10 Ошибка SCRFEEN#

   В  ячейке  #2570  должно  находится #C9
вместо  #C3. В результате программа вместо
ожидаемого числа 12 выведет 22:

   10 PRINT "1234567890"
   20  LET  A#=SCRFEEN#(0.  0) +SCREEN#(0.
1)
   30 PRINT A#

   Еще  более удивительную печать получим,
если в конце строки 20 допишем +SCREEN#(0.
2)  +SCREEN#(0. 4). Переменная примет зна-
чение  "55". Эту ошибку легко обойти,  до-
бавляя к A# значение SCREEN#(0. 1) по оче-
реди, а не одним выражением.


   9. 11 Ошибка STR#

   Работая  с  числами  -1  < X < 1, но не
равными  0,  можно "налететь" на необычную
"прожорливость"  команды  STR#. Попробуйте
выполнить следующие директивы:

   PRINT "FLF"+"BUM CUK"+STR# . 001
   PRINT 7+VAL STR# . 001

   В  обоих случаях на экране будет только
. 001, вина лежит на SPECTRUM.

   9. 12 Ошибка CLOSE

   Попытка  отключения  потока  4... 15 от
канала  до его подключения ведет к непред-
виденным   эффектам  с  рестартом  системы
включительно.  А  все  потому, что в ROM в
таблице, содержащей данные о каналах с ад-
ресом  #1716  забыли  разместить указатель
конца таблицы.


   9. 13 Ошибка RET

   Одна  из  труднейших в локализации оши-
бок.  Проявляется  иногда  при  возврате в
ZX-Бейсик из программы в машинном коде,  в
вызываемой через USR K. Забыто перед возв-
ратом  в интерпретатор восстановление пары
регистров  H'L'. Если их использовала ваша
программа  и  модифицировала, то что прои-
зойдет  при возврате в ZX-Бейсик дело слу-
чая.  Обычно  наступает зависание системы,
но не всегда.


   9. 14 Ошибка NMI

   Это  одна из серьезных ошибок. Переклю-
чение  одного бита по адресу #006D вызвало
то,  что SPECTRUM не в состоянии принимать
обслуживающими программами немаскированных
прерываний  от процедуры пользователя. Та-
кие  прерывания либо могут игнорироваться,
либо рестартовать систему переходом по ад-
ресу  0.  Это делает невозможным контроли-
руемый  рестарт системы после ее сбоя, так
же  и  реализацию других возможностей ком-
пьютера.  Устранение  этой  ошибки требует
нелегких и дорогостоящих доработок.


   9. 15 Ошибка PAUSE

   Проблема с инструкцией PAUSE заключает-
ся  в  том, что она не всегда выполняется.
Ошибка в процедуре, обслуживающей дублиро-
ванные  клавиши,  приводит к тому, что при
нажатии какой-либо клавиши, непосредствен-
но перед выполнением инструкции PAUSE, она
игнорируется. Пример:

   10  PRINT "отпусти клавишу, когда услы-
шишь звук"
   20 FOR I=1 то 500; NEXT I
   30 BEEP 1, 10
   40 PAUSE 0
   50 PRINT "конец"

   Поведение программы даже не намекает на
существование в ней строки 40.

   9. 16 Ошибка CLS

   При   значениях   системной  переменной
DF_SZ < Z трудно воспринять результат этой
команды  за  очистку  экрана. Для DF_SZ =1
это  можно  считать несущественным, но при
DF_SZ = 0 это уже трагедия.

   Надеемся,  что приведенный перечень ис-
черпывает  "неожиданности", при программи-
ровании на ZX-SPECTRUM.

;----------------------------------------;

┌                                        ┐

                 Заява

   Прашу лiчыць мяне камунiстам калi я не
дажыву  да наступнага нумару. А калi дажы-
ву, тады не личыць.

                         Галоуны рэдактар.

└                                        ┘

   А  вообще,  в  следующем  номере  будет
опубликована  следующая  книга  из этой же
серии: 'ZX-SPECTRUM изнутри'.

   Адчуваю, што не дажыву...



Другие статьи номера:

Введение - Об управлении интерфейсом газеты.

Ассемблер - одна интересная штучка с ассемблером.

Крышу снесло - DI:HALT не всегда вызывает зависание...Santa Claus.

Начнем развлекаться - Основные события 1996 года. Словарь программиста.

Собственное мнение - IMP рассказывает о развитие российской ZX-демосцены.

Чего слышно за бугром - Что сейчас делают всем известные Западные производители ПО на Спекки?..

Час оттяга - Записки Терминатора Т-1000.

Мелкие новости - Что происходит со Спекки в Белоруссии?..

Анкета - Анкетирование продолжается...

Фантастика - Фантастическая повесть "Лед и пламя" (продолжение).

Прикольчик - Прикольчик'с Новополоцка?. Какие же письма поступают к нам в лабораторию.

Описание - Описание-проходилка игры BLINKY'S SCARRY SCHOOL.

Презентация - REALSOFT представляет стратегическую игру Technodrom.

Оттяг - Оттягиваться можно по разному. Задачник - "задачки" математические.

Программистам - О дополнительных функциях TR-DOS 5.04.

Программистам - О формате музыкальных модулей Sound Tracker Pro и исходник проигрывателя.

HARDWARE - Переключатель режимов работы Profi/Pentagon.

Маленькие хитрости-2 - Как перекинуть целый экран в один INT.

Маленькие хитрости-2 - О корректной обработке Retry/Abort/Ignore в TR-DOS.

Интересное письмо - Письма читателей, содержащие разные вещи: - Если вы записали дискеты на глючном дисководе;

Презентация-2 - Описание программы TEXT PRINT v1.2.

Юмор - Рассказ про Штирлица.

Юмор - Штирлиц: Слоны идут на север.

Книга - Тайники ZX-Spectrum: оглавление.

Книга - Тайники ZX-Spectrum: Клавиатура.

Книга - Тайники ZX-Spectrum: Редактор.

Книга - Тайники ZX-Spectrum: ZX-Бейсик.

Книга - Тайники ZX-Spectrum: Компьютерная арифметика.

Книга - Тайники ZX-Spectrum: Использование Памяти.

Книга - Тайники ZX-Spectrum: Системные переменные Бейсика.

Книга - Тайники ZX-Spectrum: Каналы и Потоки.

Книга - Тайники ZX-Spectrum: Системные Процедуры.

Книга - Тайники ZX-Spectrum: Ошибки в Системе.

Реклама - Реклама и объявления ...

Послесловие - О том, что не вошло в этот номер.


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

Похожие статьи:
Реклама - Условия распространения для пользователей
Pro-обзор - demoscene: обзор демок.
Triller - продолжение новеллы Зазеркалье от Евгения Соболева.
От редакции - О регулярности выхода газеты.
Вступление - От авторов.

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