ZX Spectrum
Game

Multitasking

Your Computer (Великобритания),

Автор:

Жанр: Программирование: BASIC


Доступные версии

 Неофициальное издание
Играть!

Язык

  • Русский
  • English

Управление

  • Клавиатура(?)

Игроков

  • Один
  • Описание
  • Описание (авт.пер.)
  • Информация

Многозадачность

                    Спектр прерывания

                  Легкий многозадачность с

             После Ричарда Тейлора и каждый

Один из самых продвинутых особенностей Amstrad микро это его способность обрабатывать прерывания непосредственно от Basic. В другие машины, такие как Spectrum, прерывания инструмент доступны только на машине-кода программиста. Amstrad Основные релизы власть прерываний на все в простой но всеобъемлющим образом.

  Хотя прерывания спектра могут быть использованы весьма легко – по крайней мере, на машине 48К – от машинного кода, Основные программист не осталось в холоде с не команды для поддержки прерываниям программирование. Представленный здесь это программа, которая исправляет этот недостаток путем оснащение Spectrum Basic с рядом прерывания COM- MandS, а также On Error и на команды брейк нашли в Microsoft Basic. Из-за проблем, связанных с доступа прерывания, даже из машинного кода, на 16К Машина, он будет работать только на большей модели.

  Код машина находится выше RAMTOP, занимая addres- SES 63866 в 65367. [Следует загружен] с:         CLEAR, 63000: LOAD “” CODE   10 новых Основные команды, предоставляемые программой может быть Доступ введя их в в РЗМ отчетности. Там в Предел одной команды в РЗМ и, как обычно, REM заявление должен быть последним в строке. Для того, чтобы компьютер удовольствие РЗМ в этой новой моды надо инициализировать машинный код с помощью RANDOMIZE USR 63866, как первый линия вашей программе. Впоследствии, РЗМ будет рассматриваться в Новый способ без дальнейшего необходимости USR звонков. Полный Список команды выглядит следующим образом: ПОСЛЕ On Error GoTo КАЖДЫЙ на перерыв СТОП ОТКЛЮЧИТЬ на перерыв GOSUB РАЗРЕШЕНИЕ игнорировать режим BREAK DROP РЕЗЮМЕ

Теперь я буду иметь дело с каждой из команд в отдельности.

Простейший команда игнорировать режим BREAK. Как можно было бы ожидать, это Команда заставляет программу игнорировать ключ перерыв и По- образом мешает вам нарушая в него. В качестве примера, введите в следующем короткой программы, но только, если есть Ничего важного в памяти.

        10 RANDOMIZE USR 63866         20 REM игнорировать режим BREAK         30 GO TO 30   Вытащив пробку является единственным выходом из этой программы. Команда в строке 20 набирается буква за буквой, в немного более трудоемким, чем ввод с клавиатуры одного, но, конечно гораздо удобнее. Вы можете ввести в верхнем или нижнем так, но в верхнем регистре, как правило, выглядят немного аккуратнее. Если Первый символ РЗМ является звездочка, то остальным строка игнорируется. Таким образом, вы все еще в состоянии добавить Комментарии к программе.

  Следующая команда, на перерыв СТОП, восстанавливает нормальность в ключ перерыв:         10 RANDOMIZE USR 63866         20 REM * Нажмите ”, чтобы выйти из этого         30 REM игнорировать режим BREAK         40 ЕСЛИ INKEY $ = “” THEN REM на перерыв СТОП         50 GO TO 40   Последний из трех команд, связанных с опе ние ключа распада является на перерыв GOSUB. Это гораздо более мощная команда, чем два предыдущих; что позволяет полнокровная подпрограмма будет вызываться при нажатии перерыв. Для того, чтобы указать, какие строки должны быть вскочил на это Команда должна сопровождаться действительным номером строки. У тебя есть два варианта по этому поводу, вы можете либо положить ряд в прямо или имя переменной. То, что вы не позволили сделать, это есть математическое выражение, поэтому что-то вроде 10 + 1000 является недействительным, но 1010 в порядке.

  Compexity подпрограммы сломить волю очевидно зависит от области применения он используется для. Во многих случаи это будет просто состоять из команды RUN, чтобы перезагрузить Программа полностью при нажатии перерыв. В любом случае, работа рутины, полностью зависит от вас. Перерыв Подпрограмма написано в точности так же, как и нормальная подпрограмма, прекращается с командой RETURN.

  В целях предотвращения подпрограммы перерыв гнездования себя по нажатию пользователем перерыв во время рутины брейк-обработки это на самом деле работает, ключ игнорируется в то время как в обычной Идет, как будто вы использовали игнорировать режим BREAK.

Когда оконечный ВОЗВРАТ достигается, оригинальный статус из обращения перерыва восстанавливается. Можно переопределить Работа ключа разрыва изнутри перерыва манипулятора себя, хотя ее влияние не будет инициализирован пока процедура перерыв, пока не закончится. В следующем кратком пример вызовет обработчик прерывания только на линии 1000 нажата первый перерыв время.

        10 RANDOMIZE USR 63866         20 REM на перерыв GOSUB 1000         30 GO TO 30       1000 PRINT “Вы нажали перерыв”       1010 REM на перерыв СТОП       1020 ЕСЛИ INKEY $ = “” THEN GO TO 1020:            REM * Подождите, если пользователь по-прежнему pessing перерыв       1030 ВОЗВРАЩЕНИЕ   Когда вы пишете обработчик брейк важно не использовать любые переменные, используемые в основной программе, как изменение их может расстроить программу, когда она вернулась в. Это не действительно хорошая идея, чтобы напечатать на экране либо, как ваш печать мощь коррумпированной макет программа собственного Выход или даже, в некоторых обстоятельствах, привести к прекращению с ошибкой.

  Если ваша программа является меню-ориентированным, то это хорошая идея прекратить процедуру разрыва с переходом к части программа, которая выводит меню. Если пользователь выбирает неправильно Опция в меню, то нажатие перерыв сразу будет вернуть управление меню без вреда.

  Отключение ключа перерыв не может полностью защитить Программа также есть другие места, где вы можете быть в состоянии остановить его, а именно, когда компьютер спрашивает “свиток?”, во время любой принтер / кассета / Microdrive доступ, или набрав СТОП в ответ на входной строке. Тем не менее, вы можете перехватить эти возможности путем обнаружения отчетов об ошибках, они вызывают с помощью команды On Error GoTo н, где п Номер строки.

  Эта команда позволяет вам ловушку какой-либо ошибки, происходит в программе. При обнаружении ошибки компьютер делает GO TO для данной линии – не SUB GO, хотя Компьютер не помню, где произошла ошибка. Ошибка процедура обработки должны быть в состоянии грамотно справиться любой ошибка, которая может произойти в программе. Вместе с перерыва Подпрограммы, процедуры ошибках могут только состоять из RUN Команда перезапустить программу, если появится сообщение об ошибке.   Некоторые Основы автоматически перечислять линию, на которой об ошибке произошло, чтобы дать вам возможность его изменения, если, Действительно, это где ошибка заключается. Использование ошибку на Команда можно добавить эту возможность, чтобы ZX Basic. Это Необходимо знать линию, при которой ошибка была обнаружена.

Для того, чтобы это сделать, нужно вставить команду DEF FN в первой строке программы вместе с вызовом USR:         10 DEF FN v () = USR 63872: RANDOMIZE USR 63866   Внутри обработчика ошибок, FN v (8) возвращает строку в которая произошла ошибка. Процедура самостоятельной перечисление как следующим образом; Вы могли бы найти его очень экономить время отладки помощь:         10 DEF FN v () = USR 63972: RANDOMIZE USR 63866         20 REM On Error GoTo 9990            <Отдых программы>      9990 PRINT “Ошибка”; CHR $ FN v (10); “в строке”;            FN v (8); “:”; v FN (9)       9991 PRINT       9992 СПИСОК FN v (8)   FN v (9) возвращает заявление количество ошибочно Команда и CHR $ FN v (10) возвращает код буквенно-цифровой для ошибка.

  Команда Введение может быть использован при необходимости в конце подпрограмма обработки ошибок, чтобы продолжать выполнение про- грамм с заявлением, где была обнаружена ошибка. Если Вы следуете резюме по ряду линии, то выполнение продолжается от этой линии, а не с точки ошибки. Ты должны всегда прекратить обработчики ошибок с резюме, если Вы намерены повторно ввести программу, никогда не используйте пойти. К предотвратить обработчики ошибок стать вложены, любые ошибки обнаружены в подпрограмме обработки ошибок сама, как сообщается в обычная манера. Следующая программа повторяет навсегда – не или, по крайней мере, пока вы не ответите нет, чтобы “прокрутить?” быстрое. Это иллюстрирует опасность возобновления с точки Ошибка, фактически не исправляя причину ошибку в.

        10 DEF FN v () = USR 63972: RANDOMIZE USR 63866         20 REM On Error GoTo 1000         30 LET A = B: REM * Что б?

      1000 PRINT “Ах, боже мой, там было об ошибке”       1010 REM РЕЗЮМЕ   Использование проверить или загрузить команд из программы часто вызывает проблемы, если есть ошибка лента, так как вам остаются в режиме командной раз ошибка сообщалось.

Если программа будет использоваться другими, чем люди его Автор, то необходимо напечатать инструкции по Экран, что делать в случае возникновения ошибки ленты для повторного войти в программу. Это работает, но это вряд ли состояние Искусство в пользовательском friendiness.

  Команда ON ERROR предоставляет полезную решение этой Проблема, позволяя обработчик ошибок, чтобы назвать, если лента обнаружена ошибка, которая может предложить пользователю, чтобы попробовать еще раз. Есть много случаев, в программе, где это полезно, чтобы использовать команду On Error, в первую очередь при проверке Срок действия пользовательского ввода. Вместо того, переживающих сложный проверка процедуры она гораздо проще предположить, что это право, но создать подпрограмму ошибке качестве подстраховки то время как вход обрабатывается так что любые ошибки, вызванные недействительные данные могут быть решены с помощью цикла обратно на вход Заявление спросить пользователя для входа снова.

Основная функция программы, конечно, чтобы обеспечить

обработка прерываний. Это реализовано в виде Команды: ПОСЛЕ, КАЖДЫЙ, отключение, включение и DROP.

Схема вещей, в основном это: есть Таймер доступны состоянии счета со скоростью 50 единиц в секунду – Рамки Скорость. Использование команды после того, как можно установить таймер на Конкретное значение. Сразу, таймер начинает отсчет к нулю. Ваша программа может счастливо продолжать, не имея беспокоиться о таймере дальше. Когда счетчик достигнет нуля, поток вашей основной программы временно направлены в определенной подпрограммы, так же, как если SUB GO был было волшебно вставляется в правильном положении в про- грамм.

  Подпрограмма не прекращается по команде вернуться, но по обычно безобидные ПРОДОЛЖИТЬ. Синтаксис AFTER Команда ПОСЛЕ х, GOSUB у. GOSUB должен быть набран из в полном объеме. Надо, я боюсь, чтобы ввести в казалось бы излишним запятая перед бита GOSUB.

  Способность к программе, чтобы быть свободно прерван в этот способ часто слабо назвать многозадачность или параллельно обработка.

  Вот простой пример – это список для компьютеризированной яйца Таймер.

        10 RANDOMIZE USR 63866         20 REM ПОСЛЕ 9000, GOSUB 1000         30 PRINT “Начало кипения яйцо. Я буду только            освежить мой уме “.

        40 LET = INT (RND * 1000)         50 LET B = INT (RND * 1000)         60 PRINT; “+”; б; “=”; + б         70 при с = 1 до 100: Вперед с         80 POKE 23692.255: REM * Разрешить автоматическую прокрутку         90 GO TO 40       1000 PRINT “Яйцо сделано”       1010 СТОП   Line 20 комплектов до времени задержки 9000 1 / 50ths из Второй – три минуты. Линии 30 до 90 раз тратить время на делать что-то совершенно не связанных с яйцами: добавление номера вместе. Линии 1000 и 1010 являются подпрограмма называется, когда три минуты до.

  Команда ПОСЛЕ является «единого выстрела” команду в том, что подпрограмма вызывается только один раз, после чего таймер становится неактивным. В большинстве случаев вы хотите бы определенная процедура будет называться через регулярные промежутки времени. Ты может сделать это с помощью команды ПОСЛЕ если вы повторно инициализировать Таймер с после по крайней начале подпрограммы. Однако когда-либо, лучше всего использовать команду КАЖДЫЙ. КАЖДЫЙ используется точно таким же образом, как и команды после этого.

Когда “прерывания по” – подпрограмма называется, когда таймер доходит до нуля – достигается, таймер автоматически вновь вооружены до его исходного значения, готовы к в следующий раз. Эта программа будет постоянно обновлять время в верхнем левом углу экрана, даже в то время как другая Программа работает:         10 RANDOMIZE USR 63866         20 LET мин = 0: ПУСТЬ сек = 0         30 REM КАЖДЫЙ 50, GOSUB 9900         40 LET = 0         50 PRINT AT 21,0;: А = а + 1         60 GO TO 50       9900 LET сек = сек + 1       9910 ЕСЛИ сек>59 то пусть мин = мин + 1: ПУСТЬ сек = 0       9920 PRINT AT 0,0; (“0” и мин<10); мин; ":";            ("0" и сек<10); сек       9930 ПРОДОЛЖИТЬ   Время задержки в после или каждой команды может быть до 65535 единиц, около 21 минут 51 секунд. Если вам нужно более длительные задержки, чем это почему-то вы могли бы использовать Следующий метод. Например задержка в один час может быть произведено путем создания службы прерываний рутина - или ISR, если вам нравится сокращений - называется каждый 10 минут. В начале программы вы бы инициаторов Lise переменная -, говорят - к нулю. Каждый раз, когда ISR является называется значение в увеличивается и, когда она достигает шесть, час прошел. Имейте в виду, однако, что Часы Spectrum является не очень точным, и вы могли закончить с довольно резким ошибки с таким большим опозданием.

  До сих пор я говорил о “таймер” в особой смысле.

Есть, на самом деле, восемь таймеров. Все восемь полностью независимы друг от друга во всех отношениях. Вы можете направить Информация для конкретных таймеров в НА КАЖДЫЙ или после команды нажав другой номер после времени задержки; например,         ПОСЛЕ 100,7, GOSUB 9000 использует таймер 7.

  Таймеры пронумерованы от 0 до 7. Если вы пропустите таймер номер из, как в предыдущих примерах, то по умолчанию в Таймер 0.

  Отключить команда позволяет – не положить не предназначен – вам приостановить действие одного или всех таймеров. ОТКЛ используется на собственные отключает все восемь таймеров в то время как ОТКЛ последовал ряд отключает только эту конкретную таймер.

Обратное команда ВКЛ, который используется в аналогичный мода для повторного включения таймера ранее инвалидов.

        10 RANDOMIZE USR 63866         20 REM ПОСЛЕ 100, GOSUB 1000         30 REM ОТКЛ 0         40 GO TO 40       1000 PRINT “Время до!”       1010 СТОП ничего не делает вас удалить ЗАПРЕТИТЬ заявление на линия 30 или положить в команды разрешения на линии 35. Вы бы обычно используют отключить / включить команды для защиты уверен части программы от прерывания, возможно, потому, что часть манипулирует переменные, используемые в ISR (ов) и может оставить переменные во временных состояний, которые могут расстроить ISR (ы).

  Последняя команда связана с прерываний DROP. В Аналогичный способ нормальных GO СУБ, прежде ISR называется текущие линии и сведений номера хранятся далеко на стек, так что нормальное выполнение программы может продолжаться довольно счастью, когда ISR закончена. В некоторых обстоятельствах, Однако, вы не можете когда-либо вернуться из ISR.

Например, в игре вы можете пожелать, чтобы установить лимит времени завершить определенную задачу, например 10 секунд. Вы можете использовать ПОСЛЕ 500, GOSUB 8000 таким образом, чтобы, когда придет время до перехода к Линия 8000 будет. Очевидно, что вы не хотели бы, чтобы вернуться из ISR, чтобы продолжить эту конкретную часть игра.

  Чтобы сохранить оставив стопку в несбалансированном состоянии вы будет использовать команду DROP. Эта команда просто делает Компьютер взять верхний элемент своего стека и бросить его в его электронная помойка. В приложении, как этот, вы можете разоружить таймер с ПОСЛЕ 0, GOSUB х, как только задача была завершена, в противном случае вы могли бы найти ком- пьютер вызова ISR на довольно неподходящее время.

  Когда таймер обратного отсчета, компьютер запоминает что определенная линия будет называться путем размещения линейку Число на еще один стек. Когда о себе выполняется закончен он смотрит на номер он памятны запомнившего и вызывает соответствующую ISR. Потому что ISR звонки не обрабатываются, пока текущий заявление не будет завершена, ВХОД, пауза, загружать, сохранять, объединять и ЗВУК может держать вещи до. Компьютер, будучи дотошным зверь по природе, осторожно полностью накапливается все номера ЗРМС это должно вызвать в рамках подготовки к такой момент, когда он способен обрабатывать им.

  не В конце концов компьютер будет работать из комнаты и не больше беспокоит, чтобы сохранить линии. Сумма комнате в Компьютер имеет для хранения стека определяется как объем памяти у вас оставить свободным между RAMTOP и началом Программа на 63866. хорошее соотношение RAMTOP является 63000, который оставляет место для всех, кроме самых сложных приложений ции.

  Использование пользовательской функции введены под ON Ошибка команды, это possble допросить любого из таймеры и найти их текущий статус. Используйте FN V (X), где х является таймер вы хотите посмотреть, пронумерованных от 0 до 7.

        10 DEF FN v () = USR 63872: RANDOMIZE USR 63866         20 REM ПОСЛЕ 1000,5, GOSUB 1000         30 PRINT AT 0,0; FN v (5); “”         40 GO TO 30       1000 СТОП Эта программа отображает время, оставшееся на таймере 5 как это погружается в сторону нуля. Функция возвращает ноль, если таймер либо неактивны или отключен.

  В отличие от ошибок и сломать подпрограмм-обработчиков, которые считаются лучшей будет гнездо как многих уровнях, как вам нравится, хотя на практике в Число уровней определяется количеством свободной памяти доступно выше RAMTOP для стека.

  Одна вещь, чтобы избежать, чтобы определить команду КАЖДЫЙ с Временной интервал меньше, чем время, необходимое для выполнения связано ISR. Процедура будет “прервать себя” в таких обстоятельство, как следующего прерывания будет иметь место до ISR обрабатывать предыдущее прерывание является Отделка издание В конце концов компьютер забиваются с огромная стопка возвратных линиях, которые она никогда не получает круглый с помощью. Если такая ситуация является возможность в вашей программе, то отключить право таймера в начале от ISR и включить его снова в самом конце.

  При написании ISRS, как с поломкой и ошибках обработчиков, его Важно помнить, что процедура не должна делать что-нибудь, чтобы чрезмерно расстроен основной программы путем изменения значение одной из переменных оно с использованием, например.

Компьютер следит за тобой немного за счет автоматического сохранения печатные и сюжетные позиции на старте ISR и их восстановление на этих ценностей, когда ISR прекращается.

Печать и сюжетные положения, следовательно, “местный” в ISR.

При печати и обратить изнутри ISR, то компьютер автоматически убирать любой ущерб, который вы, возможно, проделанную Изменяя положение печати / участок.

Есть несколько точек интереса для интерфейса 1

пользователи. Во-первых, вы не должны использовать открытую # и близко # команды в сочетании с этой программой. Точнее, программы, использующие средства прерываний; В случае ошибки и На перерыв и т.д. не имеют значения. Во-вторых, любой другой Microdrive / Интерфейс 1 команды должны быть немедленно следуют         RANDOMIZE USR 63866: POKE 23728,0 Последовательности.

  REM заявления введенные в качестве прямых команд рассматриваются обычным способом, и может, следовательно, не содержат какой-либо новый команды. ПРОДОЛЖИТЬ утверждение не может быть использован в Обычный способ, как, когда ошибка на самом деле сообщил (в со- контраст, чтобы обработчик ошибок называют), то все новое стеки очищаются и таймеры все вынуждены неактивным.

ПРОДОЛЖИТЬ не будет, то, возобновить программу, фактически не

очистка или изменения чего-либо.

Запустите Multitasking и играйте. Приложения для разработки программ на бейсике, изданное в Великобритании в 1984 году компанией Your Computer, которое разработал Richard Taylor.

Не запускается или глючит игра, или не можете пройти? Спросите в комментариях.

avatar
  Subscribe  
Уведомлять об
 

Сохранённые игры[X]

  

Справка[X]

Помощь уже в пути!

Не забывайте периодически сохранять игровой прогресс на сервере (клавишей F8), чтобы уверенно продвигаться вперёд!

Если вы гость на сайте, то прогресс будет сохранён только в памяти браузера и потеряется при закрытии. Чтобы этого не произошло - просто войдите в свой профиль.

Для загрузки сохранённой игры жмите F3 или откройте меню "Диск" кнопкой на правой панели.

Если игра не запускается, или у вас есть вопросы по игре - задайте их ниже.

Помощь

Размер

  • x1 [256x192]
  • x2 [512x384]
  • x3 [768x576]
  • Полный

Диск

Кликни в окно эмулятора, чтобы управлять!
<<<<
Close