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: Ошибки в Системе.

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

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


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

Похожие статьи:
Обзор - обзор свежих релизов: Lord of Chaos, F-19 Stealth Fighter, Carrier Command, The Simpsons, Gauntlet 3, The Addams Family, Wild West Seymour, Sly Spy, Paris To Dakar, Duck Out, Johangir Khan World Championchip Squash, The Amazing Adventures of Robin Hood.
Этюды - Процедура поиска текстовых файлов.
Лит.Страничка - Красный Винни (глава 7,8).
Философия - Предлоложение о самом главном: Крысиный рай.
Adventures - поезка на велосипедах.

В этот день...   11 января