ZX Spectrum
Game

Value of Tables, The

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

Автор:

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


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

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

Язык

  • Русский
  • English

Управление

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

Игроков

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

Значение Столы

        Пит Кук, автор Тау Кита и академии,

      позволяет нам в некоторых из его машинного кода секретов.

Одним из наиболее эффективных методов в машинный код является

поиск в таблице. В базовой таблицы поиска примерно соответствуют с одной двумерными массивами проведения таблицы данных, для Пример:  10 DIM A (20)  20 при п = 1 TO 20  30 ПРОЧТИТЕ а (п)  40 СЛЕДУЮЩИЙ н  50 ДАННЫЕ<что вы хотите>   В машине код поиски встречаются гораздо чаще, как они дать способ оценки сложных функций без написания массы сложного кода. Два хороших примеров использования справочные таблицы, которые приходят на ум, столы грех и ЭКРАН АДРЕСА.

 Экран Адреса

Одним из самых больших препятствий для графического программирования на

Спектр является ужасным расположение файла отображения. Кто-нибудь смотреть SCREEN $ нагрузку будет видели, что на дисплее линии хранятся в непоследовательных моды и большой Много времени и усилий требуется, чтобы написать быстро и эф циент рутина выработать адрес экрана любого линии.    Гораздо более простой способ заключается в создании поиск экрана адреса в памяти. Я обычно использую короткую основную программу сделать это. (Листинг 1).

   В качестве дополнительной проверки, что программа работает Программа работает линию:  95 POKE адрес, 255 заполняет первый байт каждой строки экрана, как Программа вычисляет его адрес.

   Когда программа закончит типа GO TO 130, чтобы сохранить Таблица. [Основная программа находится на TZX как «лабиринт стола”; это не авто-запуска, потому что (как РЗМ указывают) это не содержать четкое указание, которое должно быть обеспечено Рука. Полученный код, сохраняются на 65024, или шестигранной # FE00, следует за ним, как “ytable”. Обратите внимание, что эта таблица делает разлива более в UDGs, а значит, и строчит над нормальным Основные стеки; CLEAR, поэтому не только мудрым с это одно, а строго необходимо.]    Я обычно хранить таблицу, как это, как высоко в памяти как возможно, но если ваш ассемблер хранится на высоком адресу затем измените значение базы в безопасное под ним (Лучше всего использовать кратное 256 по причинам, описанным позднее).

   Попав эту таблицу в экране адресации памяти сейчас становится намного легче. Чтобы получить байт адреса экране мы только нужен короткий сегмент кода, как один в (листинг 2).    На самом деле мы можем сделать еще лучше, чем это путем обеспечения Таблица начинается с кратной 256 байт. В этом случае младший байт адреса таблицы всегда равен 0 (Листинг 3). [Я добавил все предложения по сборке в конце этого файла, потому что комментарии являются весьма просветляющим. Обе версии GETADD находятся на TZX также. Обе процедуры являются сами перемещаемый, но они оба ожидают ytable, был загружен на # FE00, или 65024.]    Хотя это выглядит тех пор, пока первый вариант там несколько улучшений. Сначала пару регистров DE является не используется. Во-вторых большинство инструкций являются один байт Инструкции, которые действуют намного быстрее и занимают меньше пространство на Z80.

   Наконец вот 2 простых примеров использования в Ytable поиск. Во-первых, необычный очистить экран (это не коснется атрибуты) (листинг 4), а второй является обычным для пиксель прокрутки окна вверх (листинг 5).

   [Они тоже находятся на TZX, и это тоже, как ожидают, ytable присутствовать на # FE00 уже. Листинг 4 называется “FancyCLS”. Это не перемещаемый, потому что он содержит абсолютный призыв к его внутренней GETADD. Это может, однако, быть с пользой называется от Basic.

   Листинг 5 “PixScroll”. Его тестовый код (см листинг ниже) может быть вызван из Basic, но не переместимый; Сама процедура является, но не может быть вызвана из Basic. Как перечисление указывает, вы, вероятно, только хочу использовать Заключительная часть ней в готовой программе в любом случае.]    Красота таблиц поиска адресов экран что, с таблицей в памяти, графические процедуры стали гораздо более простым и десятки процедур в долгий Программа может использовать ту же таблицу.

   [В конце TZX, после “PixScroll”, вы найдете все монтажные списки, сохраненные из Hisoft Devpac 4.1. Я не знаю, они могут быть загружены в любой другой версии из Devpac, не говоря уже о других сборщиков, но это стоит попробовать в любом случае.

                              Ричард Бос, ноябрь 2012 года]

                         В листинге 2  10 ORG # C000  20 ЛОР # C000  30 YTABLE EQU # FE00; Независимо поиска является  37;  40;  50; Получить байт адреса  60; вход B = Line  70; C = Колонка  80; Выход HL = адрес  90; 100 GETADD LD L, B 110 LD H, 0 120 ДОБАВИТЬ HL, HL; 2 байта в каждом значении стола 130 LD DE, YTABLE; База стола 140 ДОБАВИТЬ HL, DE; С смещение в таблице 150 LD, (HL); Поднимите младший байт 160 ДОБАВИТЬ, C; Добавить на колонке смещение 170 LD E, A; В младшем байте DE 180 INC HL; Точка HL для старшего байта 190 LD D, (HL); Поднимите его 200 EX DE, HL; Трансфер в HL 210 RET; Done

220;

                         В листинге 3  10 ORG # C000  20 ЛОР # C000  30 YTABLE EQU # FE00; Независимо поиска является  40;  50; Получить байт адреса (Улучшенная версия = YTABLE на границе страницы)  60; вход B = Line  70; C = Колонка  80; Выход HL = адрес  90; 100 GETADD LD L, B, B = Screen Line 110 SLA L; 2 байта на значение (+ ручной) 120 LD, YTABLE / # 100 130; Это старший байт начального адреса таблицы 140 АЦП, 0; Добавить любой перенос по сдвигу 150 LD H, A; Форма таблицы смещение в HL 160 LD, (HL); Поднимите младший байт 170 ДОБАВИТЬ, C; Добавить на колонке смещение 180 INC L; Теперь только L нуждается вкл 190 LD H, (HL); Поднимите его 200 LD L, A; Положите низкий в L так HL = адрес 210 RET; Done

220;

                         Листинг 4  10 ORG # C000  20 ЛОР # C000  30 YTABLE EQU # FE00; Независимо поиска является  40;  50; Пример 1.  60;  70; Использование GETADD для необычного Clear Screen  80; (Атрибуты не коснулся)  90; 100 FANCY LD B, 192; Кол-во строк экрана 110 LD C, 0 120; 130 F_LOOP PUSH BC; Сохранить счетчик 131 декабря B; Как DJNZ петли только Б = 1 140 ЗВОНОК GETADD; HL = адрес строки 170 LD BC, 31; Один меньше не из байт / линии 180; 32 байт в каждой строке 190 LD E, L 200 LD D, H; Копировать HL в DE 210 INC DE; DE является местом для LDIR 220 LD (HL), 0; Clear самый левый байт 230 LDIR; И скопировать в другое 32 240 POP BC; Получить счетчик строк назад 250; 260 HALT; небольшая задержка. 270 DJNZ F_LOOP; Loop до готовности 280 RET 290; 300 GETADD LD L, B 310 SLA L 320 LD, YTABLE / # 100 330 АЦП, 0 340 LD H, 350 LD, (HL) 360 ДОБАВИТЬ, C 370 INC L 380 LD H, (HL) 390 LD L, 410 RET

420;

                         В листинге 5   10 ORG # C000   20 ЛОР # C000   30 YTABLE EQU # FE00; Независимо поиска является   40;   50; Эти линии образуют   60; короткий тест для   70; рутина.   80;   90 LD BC, # 0208  100 LD DE, # 1010  110 ЗВОНОК PIXSCR  120 RET  130;  140; Pixel Выделите окно  150; вверх …  160;  170; запись B = ystart  180; C = XStart  190; D = Глубина  200; E = Ширина  210;  220; Все параметры в  230; позиции символов  240;  250; Выход, BC, HL, IX  260; все коррумпированы  270;  280; DE сохраняется  290;  300 PIXSCR EQU $  310 LD A, B; Тест начать у  320 CP 24; для нижней части экрана  330 RET NC; и прервать, если слишком большой  340 ДОБАВИТЬ A, D; также проверить базу окне  350 CP 24  360 RET NC; и прервать, если слишком большой  370;  380 LD A, C; аналогично тест х начало  390 CP 32; экран 32 символов в ширину  400 RET NC; прервать, если слишком большой  410 ДОБАВИТЬ, E, а также проверить правую руку  420 CP 32; край окна  430 RET NC  440; все вышеперечисленные тесты мог  450; вырезать в отделкой  460; программа, где вы уверены,  470; о том, что размер окна  480; всегда законно.  490;  500;  510 LD L, B; подобрать старт у  520 LD H, 0; в HL  530 ДОБАВИТЬ HL, HL; раз его 8  540 ДОБАВИТЬ HL, HL; преобразовать в пиксельной поз  550 ДОБАВИТЬ HL, HL;  560;  570 ДОБАВИТЬ HL, HL; и дважды это  580; индекс в ytable  590 EX DE, HL; перейти на DE, как не ADD IX, HL  600;  610 LD IX, YTABLE  620 ДОБАВИТЬ IX, DE; Пойнт IX в  630; правильное место в ytable  640 EX DE, HL; получить DE назад  650;  660 LD A, D, теперь преобразовать характер  670 ДОБАВИТЬ,; глубина в ряде  680 ДОБАВИТЬ,; пиксельных линий  690 ДОБАВИТЬ,  700 декабря; мы движемся на один меньше, чем это  710 LD B, A; поставить этот счетчик в B  720  730;  не 740, сейчас на B = Нет пикселя  750; линии, чтобы перейти  760; C = X начать поз из  770; окно  780; Е = ширина  790; окно  800; IX указывает на  810; Положение в  820; Ytable  830;  840; петля ниже движется каждый пиксель линии до 1  850 PIXSC1 PUSH BC; сохранить эти регистры  860 PUSH DE; как они были повреждены  870; этот цикл  880 LD B, E, получить ширину в B для внутреннего цикла  890 LD A, C; получить позицию байта  900 ДОБАВИТЬ, (IX); из начала этого  910 LD E, A; пиксель линия  920 LD D, (IX + 1); DE рег пара  930 LD A, C, и адрес байта  Добавить 940, (IX + 2); от начала линии ниже  950 LD L, A; в HL реестре  960 LD H, (IX + 3); пара  970;  980 PIXSC2 ЛДИ; копия (HL) в (DE)  990 DJNZ PIXSC2; на ширину окна 1000; 1010 INC IX; шаг указатель 1020 INC IX; следующая строка 1030 POP DE 1040 POP BC; восстановление обе рег-ые 1050 DJNZ PIXSC1; обратно двигаться следующую строку 1060; 1070 LD A, C; это адрес байта 1080 ДОБАВИТЬ, (IX); нижний левый угол 1090 LD L, A; окна 1100 LD H, (IX + 1); в HL 1110 LD B, E; ширина до Б снова 1120 PIXSC3 LD (HL), 0; заполнить нижнюю строку 1130 INC L; с нулевым годов 1140 DJNZ PIXSC3

1150 RET; отделкой …

Игра Value of Tables, The запускается прямо на сайте. Эта утилита для программинга на ASM, изданная в Великобритании в 1987 году творческой группой ZX Computing, которую написал Pete Cooke.

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

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