ZX Spectrum
Game

REM DELETE

Popular Computing Weekly (Великобритания),

Автор:

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


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

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

Язык

  • Русский
  • English

Управление

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

Игроков

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

Своевременное замечание

        Джон Инглсон объясняет, как программировать с помощью

      REM заявления, не влияя на время работы.

REM заявление является, пожалуй, наиболее полезное устройство

для упрощения написания программ. Это может быть использовано для коротко документации в рамках программы, может быть, только документация, что многие программисты используют. Имена, даты, описания, переменные, подпрограммы и функции перечислены в начале программы некоторые из вещей, которые сделать жизнь проще, когда призвал изменить или настроить Программа написана некоторое время назад (или даже вчера).   Маркировка блоков кода, подпрограммы, списки данных и т.д., с краткими пояснениями также бесценным инструментом в что делает их использование и логическая структура очевидно, давая писатель четкие ориентиры, из которых можно работать. Высоко- Освещение количество комментариев с пустыми строками РЗМ, пожалуй, гораздо пренебречь устройство, которое используется для сохранения зрительное напряжение в длинные списки программ.

  Тем не менее, использование этих методов имеет выгодном щества. Пределы памяти может препятствовать использованию подробное документация. Там может просто не быть достаточно места, чтобы написать или запустить программу, несмотря на, или, скорее, из-за, обильная полезные замечания. Листинг программы могут легко состоят из 25 за РЗМ заявлений цент. Если программа является относительно большим – Говорят более 30К – то, что может составить много неиспользованный байты на “время выполнения”.

  Там, где ограничения размера памяти не являются ограничительными, размером с часто используемой программы в то время как сохранение и загрузка может оказаться утомительным. Еще одна жалоба, что может именоваться против либеральной использования РЗМ отчетности является то, что из Скорость выполнения программы. В то время как в операционной системе “Игнорирует” REM заявления, он по-прежнему занимает конечное время к сделать это. В Spectrum, каждый раз, когда подпрограмма или Функция называется, переводчик начинается в начале не программы и поисков через до соответствующего кода найден. Таким образом, REM заявления, особенно те, в начиная (это, как правило, является громоздким), которые “проигнорировали” много раз во время выполнения, значительно замедляя Скорость, с которой программа работает.

  Использование спектра (машину не известен своей молнией быстрая скорость на производстве подвижных графику в Basic), это было бы явно будет преимущество делать без каких-либо РЗМ. Тем не менее, это почти немыслимо, чтобы писать любые программы без них.

  Как разрешить эту дилемму? Мы могли бы написать программу, в том числе все наши РЗМ, а затем, когда программа отлажена и работает с нашими требованиями, просто удалите все РЗМ, набрав в номера строк, а затем ENTER (Хранение копий полной программе с РЗМ для Будущее ссылка). Это не может показаться вероятным решением, пока он попытался на практике. Numb пальцы, усталые глаза, и строки, которые исчезают без следа, являются одними из подводные камни.

  Но разве это не один из тех скучных рутинных заданий мы держим говорят, являются идеальными задачи для компьютера? Ну, здесь это программа короткая машинный код, что позволит Вам написать столько РЗМ, как вы хотите, а затем, когда ваша программа завершена – ударить их одним махом. (Опять же – не забудьте сохранить полную копию, РЗМ и все, для возможности Будущее ссылки, модификация и настройка.)   Во-первых, давайте рассмотрим, как основная линия проводится в память (смотри рисунок 1). Адрес начала Первый номер строки хранится в ПЗУ Spectrum по адресу 23635 и 23636. Это переменная PROG система. Подо- лы, адрес последнего байта Базовая программа + 1 сохраняется по адресу 23627 и 23628 (система переменной VARS).

Обе пары байт хранятся в виде Младший байт – Старший байт.

     АДРЕС (HEX)

       |        | RAM ДАННЫХ (HEX)        v v      5C4B F2 VARS- + очки программировать конец + 1      5C4C 5C | (переменные область)  + +  | 5C53 CB PROG + очки на начало программы  | 5C54 5C |  | + + СПИСОК  | +>5CCB 00}  | 5CCC 0A} Номер строки 10  | 5CCD 0B}  | 5CCE 00} No. байт линии  | 5CCF F1 LET  | 5CD0 61  | 5CD1 3D =  | 5CD2 31 1  | 5CD3 0Е CHR $ 14 *  | 5CD4 00}  | 5CD5 00}  | 5CD6 01} Количество 1 декабря  | 5CD7 00}  | 5CD8 00}  | 5CD9 0D ENTER – новую линию  | 5CDA 00}  | 5CDB 14} Номер строки 20  | 5CDC 05}  | 5CDD 00} No. байт линии  | 5CDE EA REM  |} Остальные программы  | 5CF1 0D Последнее ENTER (конец программы)  |  + ->5CF2 80 Начало переменных области

 Диаграмма 1

   показывает, как программа проводится в Spectrum BASIC.

 * CHR $ 14 означает количество следующую в 5 формате байт.

  Первые два байта строки удерживайте номер строки – высокая

байт, а затем младший байт (обратное тому, что мы бы как правило, ожидают). Следующие два байта содержат длину линия (как и следовало ожидать – Младший байт, старший байт). После что фактическая код линии, заканчивая 13 (код для ВВОД). Затем идет следующий номер строки, и так далее.

  Вкратце, процедура работы по проверке первую часть Код в ряде линии, чтобы увидеть, если это REM (код 234). Если это не он переходит к следующему номеру строки – если это так, то Оставшаяся часть кода (от следующего номера строки в конец программа) перемещается вниз памяти, более-написании REM Заявление будет удалена. Конечный маркер программы (Системная переменная VARS) затем переехал на новое место в конец пересмотренной программы, которые будут перемещены вниз. Количество байтов удалены затем сохраняется в конце принтера Буфер (за неимением менее навязчивой месте). Общая необходим в конце процедуры.

  Этот процесс повторяется до конца программы не является обнаружено, и в этот момент подпрограмму, которая состоялась в Spectrum ROM, называется. Эта процедура “приводит в порядок” по рекультивации избыточные байт – оставленные между концом пересмотрен Программа и конец исходной (отголоски хвоста конец исходного кода, что было неоднократно переписан вниз памяти). Эта подпрограмма в ПЗУ также вызывает другой – Указатели, которые сбрасывает все системные poitners пострадавших от изменения. Код может быть использован, как есть, чтобы удалить РЗМ после номера строк, а также номера строк с пробелами следующее.

  Отдельный алгоритм нужен, если последняя строка REM, потому что, если BC загружается с нуля, то до н.э. будет декремент таджи 65535 на следующем цикле LDIR. Как н.э счетчик для LDIR то мы в конечном итоге движущихся 65536 байт вместо нет. На самом деле, мы движемся общее количество байтов в линии из-за VARS отстаивать логику Подпрограмма MOVE, установив тем самым VARS и STBYT (общая из удалены байт) правильно, прежде чем вернуться из Программа машинный код.

  Если программа машинный код хранится в REM заявлении, или критическое заявление REM должен храниться в программе, то линия может быть “защищены”, вставляя обратный характер (CHR $ 20 – CAPS SHIFT 4) сразу после номер строки и до РЗМ (не забудьте удалить обратная перед использованием машинного кода, как положение Код перейдет в памяти).

  Регистры не должны быть спасены рутины, как про- грамм вряд ли будет использоваться в качестве подпрограммы другого Программа. Модификации могут быть сделаны, чтобы удалить РЗМ, что происходит в конце строк программы.

  Советы – вся линия программы должны быть проверены двоеточие, то REM (не забудьте исключить байт, что хранения данных, которое может возникнуть в комбинации кода двоеточие, а затем REM). При удалении толстой кишки REM, Новый алгоритм нужно будет разработана для установки Вар.   NB. Линии программы будет рассматриваться как пустой и удален, если

номер строки с последующим пробелом.

[Данная сборка Листинг также приведены в статье.

  Хотя машина код на TZX, которая идет с   Этот текст, я скопировал список, а из-за   поучительных комментариев. ]

Память Адрес

 | Hex код  | | Монтажник Источник Line  | | | Этикетки  | | | | Работа  | | | | | Операнд Комментарии  v v v v v v v               0010; Это подпрограмма               0020; Удалить РЗМ и Blank               0030; линии в BASIC               0040; объявления. Код               0050; является перемещаемым в               0060; Память               0070; (О) Джон Д. Ingleson               0080; 17/01/84               0090; 5C53 0100 PROG EQU 23635 Начало программы 5C4B 0110 VARS EQU 23627 Конец программы 19E8 0120 RCLM2 EQU 19E8H Регулярное в ПЗУ 58Fe 0130 STBYT EQU 23550 Сохранить номер местоположение               0140;               0150; ***               0160; 7F81 0170 ORG 32625 Откуда не критично               0180; 7F71 210000 0190 START LD HL, 00 Нулевая No.bytes удален 7F74 22FE5B 0200 LD (STBYT), HL               0210; 7F77 2A53BC 0220 LD HL, (PROG) HL имеет расположение               0230; Начало программы 7F7A E5 0240 NEWLN PUSH HL 7F7B ED5B4B5C 0250 LD DE, (VARS) 7F7F A7 0260 И Конец программы?

  • 7F80 ED52 0270 SBC HL, DE 7F82 306D 0280 JR NC, RSTOR Да – Перейти к RSTOR               0290; 7F84 E1 0300 POP HL 7F85 23 0310 INC HL Пропустить над линией N: 7F86 23 0320 INC HL               0330; 7F87 E5 0340 PUSH HL Addr.of Кол-во байт 7F88 D1 0350 POP DE в DE               0360; 7F89 4E 0370 LD C, (HL) BC провести No. байт 7F8A 23 0380 INC HL в линии (за исключением 7F8B 46 0390 LD B, (HL) No. байт 2 линия)               0400; 7F8C 23 0410 INC HL Посмотрите на следующий байт 7F8D 7E 0420 LD (HL) Код в для проверки               0430; 7F8E FEEA 0440 CP 234 Разве REM? – 7F90 280D 0450 JR Z, DEL Да – Тогда удалить               0460; 7F92 FE20 0470 CP 32 Space (Пустая строка)?
  • 7F94 2809 0480 JR Z, DEL Да – Тогда удалить               0490; 7F96 D5 0500 PUSH DE Ни – Тогда не добавить 7F97 E1 0510 POP HL Addr. из Количество               0520; байты в соответствии с 7F98 A7 0530 И фактическая Количество байт 7F99 ED4A 0540 ADC HL, BC в соответствии + 2, чтобы получить               0550; расположение 7F98 23 0560 INC HL Следующая строка будет 7F9C 23 0570 INC HL проверил               0580; 7F9D 18D8 0590 JR NEWLN Начать снова               0600;               0610; ***               0620; УДАЛЕНИЕ ROUTINE 7F9F E5 0630 DEL PUSH HL Сохранить текущее положение 7FA0 A7 0640 И на РЗМ Подарить Addr 7FA1 ED4A 0650 ADC HL, BC + byt4es в соответствии = 7FA3 E5 0660 PUSH HL следующей строке (Сохраните его)               0670; (Источник для LDIR) 7FA4 ED5B485C 0680 LD DE, (VARS) 7FA8 EB 0690 EX HL, DE VARS – Источник = Кол-во 7FA9 A7 0700 И байты двигаться по 7FAA ED52 0710 SBC HL, DE LDIR оп)               0720; 7FAC AF 0730 XOR Проверка на номер байт 7FAD B4 0740 OR H, чтобы быть перемещены = 0 7FAE B5 0750 или L Если так, то REM 7FAF 2834 0760 JR Z, LREM находится в последней строке:               0770; Новый алгоритм нужен 7FB1 E5 0780 PUSH HL No.bytes переехать в 7FB2 C1 0790 POP BC BC               0800; 7FB3 E1 0810 POP HL Источник в HL
    7FB4 D1 0820 POP DE Addr.of REM обратно в
    7FB5 1B 0830 Декабрь DE DE … перейти обратно в течение
    7FB6 1B 0840 Декабрь DE Addr.of No. байты в
    7FB7 1B 0850 Декабрь DE линия и линия No. к
    7FB8 1B 0860 Декабрь DE Назначение в DE

                  0870; 7FB9 D5 0880 MOVE PUSH DE MOVE РЕГЛАМЕНТНОЕ 7FBA D5 0890 PUSH DE Dest.on укладывают в два раза 7FBB E5 0900 PUSH HL & Источник               0910; 7FBC EDB0 0920 LDIR перезаписи REM с               0930; Остальные программы 7FBE E1 0940 POP HL … Источник 7FBF D1 0950 POP DE … Направление 7FC0 A7 0960 и источник – Dest. = Нет.

  • 7FC1 ED52 0970 SBC HL, DE байтов удалены. Сохранить 7FC3 E5 0980 PUSH HL для расчета VARS               0990; 7FC4 11FE5B 1000 LD DE, STBYT Добавить No. вновь 7FC7 ED4BFE5B 1010 LD BC, (STBYT) удаленные байт (HL) в 7FCB A7 1020 И старый общей сложности удален 7FCC ED4A 1030 ADC HL, BC байты, чтобы получить новый 7FCE EB 1040 EX DE, HL общая …
  • 7FCF 73 1050 LD (HL), E-магазин обратно в STBYT               1060; 7FD0 23 1070 INC HL 7FD1 72 1080 LD (HL), D               1090; 7DF2 E1 1100 POP HL VARS минус недавно 7FD3 ED5B4B5C 1110 LD DE, (VARS) удален байт = новый 7FD7 EB 1120 EX DE, стоимость HL из VARS 7FD8 A7 1130 И 7FD9 ED52 1140 SBC HL, DE               1150; 7FDB 114BBC 1160 LD DE, VARS
    7FDE EB 1170 EX DE, HL
    7FDF 73 1180 LD (HL), E Новое значение обратно в
    7FE0 23 1190 INC HL VARS
    7FE1 72 1200 LD (HL), D
    7FE2 E1 1210 POP HL Dest. = Начало первого

    7FE3 1895 1220 JR NEWLN линия перемещается, вернуться               1230; начинают проверять снова               1240; ***               1250; ПОСЛЕДНИЙ REM РЕГЛАМЕНТНОЕ 7FE5 E1 1260 LREM POP HL … Источник 7FE6 D1 1270 POP DE Addr. РЗМ               1280; 7FE7 1B 1290 Декабрь DE Перейти на линии N: 7FE8 1B 1300 Декабрь DE & No. байт линии 7FE9 1B 1310 Декабрь DE 7FEA 1B 1320 Декабрь DE               1330; 7FEB 03 1340 INC BC Bytes в соответствии + 4 7FEC 03 1350 INC BC = No. байты двигаться 7FED 03 1360 INC н.э.

  • 7FEE 03 1370 INC н.э.

              1380; 7FEF 18C8 1390 JR MOVE Перейти к MOVE               1400;               1410; ***               1420; ВОССТАНОВЛЕНИЕ ROUTINE 7FF1 ED4BFE5B 1430 RSTOR LD BC, (STBYT) Исключен байты в до н.э.

7FF5 D1 1440 POP DE Восстановить стек 7FF6 C5 1450 PUSH BC Сохранить для печати общая 7FF7 2A4B5C 1460 LD HL, (VARS) Начало RECLM2 на VARS 7FF8 CDE819 1470 ПРИЗЫВ RCLM2 подпрограммы в ПЗУ 7FFD C1 1480 POP BC PRINT USR для общей 7FFE C9 1490 END RET Кол-во удалены байт               1500;               1510; ***               1520;               1530 КОНЕЦ END 7FFE RSTOR 7FF1 LREM 7FE5 MOVE 7FB9 DEL 7F9F NEWLN 7F7A СТАРТ 7F71 STBYT 5BFE RCLM2 19E8 VARS 5C4B

PROG 5C53

Введите эту программу и сохранить его. Затем запустите его для загрузки

машинный код в памяти, если правильно. Затем запустите машину Код по – PRINT USR 32625, который будет печатать число байты удалены и когда BASIC программа перечислил РЗМ а пустые строки будут рассматриваться, были удалены.

[Программа, которая была замечена вот на TZX как

  “REMDelete”. ]

Чтобы сохранить код для использования просто-
 SAVE “REMDELETE” КОД NNNN, 142

    где NNNN является любой подходящий адрес, с которого запускать

Ваша машина код.

[Внимательный читатель уже заметил, что это   неправильно. Вы не можете сохранить код с адреса, где он имеет   не тыкали в. Вместо этого, если вы не изменились   Основная программа тыкать по другому адресу, вам   должны всегда сохранять “remdelete” КОД 32625.142 – и это   именно то, что уже было сделано для “remdelete”   КОД файл присутствует на TZX.

  Следующие строки _are_ правильно. Заметим, однако, что   подпрограмма перемещаемым, что означает, что “NNNN” делает   не должен быть таким же, как адрес, по которому код   был сохранен. Можно, таким образом, загружать код с   TZX по другому адресу, чем 32625. Это, в свою очередь,   приводит к тому, что эта процедура подходит для 48К   Спектры а также для 16K них. ]

Тогда, чтобы использовать код –

CLEAR, NNNN-1

LOAD “” CODE NNNN

И, чтобы выполнить код –
PRINT USR NNNN

– Который будет печатать число байтов РЗМ удаленных.

Запустите REM DELETE и играйте. Эта программа для разработки на BASIC, опубликованная в Великобритании в 1984 году компанией Popular Computing Weekly, которую написал John D. Ingleson.

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

Subscribe
Уведомлять об
guest
0 Comments
Inline Feedbacks
View all comments
 

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

  

Справка[X]

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

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

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

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

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

Помощь

Размер

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

Диск

Кликни в окно эмулятора, чтобы управлять!
<<<<
Close
0
Would love your thoughts, please comment.x
()
x