ZX Spectrum
Game

Hex Loader

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

Автор:

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


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

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

Язык

  • Русский
  • English

Управление

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

Игроков

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

1 2 3 4 5 6 7 8

Освоение машинного кода на Вашем Spectrum часть 1 из 8 – от ZX Computing октября / Nov’82

Тони Бейкер, автор книги “Освоение машины код на ZX81”

превращает ее внимание на Spectrum с этой статьей, первым в серии предназначены для вас через машинный код от самых его истоков до своих конечных выводах.

Внутри Spectrum является небольшой черный ящик мистически упоминается как “Z80A”. На самом деле Z80A является лишь частью всего компьютера, который фактически выполняет любую мышление. К Иначе говоря, Z80A является компьютер. ПЗУ не Компьютер – ROM содержит только компьютерную программу.

Z80A говорит на языке, который мы называем машинный код. Это не говорить BASIC. При запуске базовой программы, что на самом деле происходит то, что Z80A работает программа в ПЗУ который рассказывает его посмотреть на то, что записано в памяти и принять соответствующие меры.

Машинный код имеет переменные, как в основной, но они

не совсем, как гибкий. Регистры называются А, В, С, D, E, H, и L, и они могут хранить только целые числа от 0 до 255.

Легче работать в шестнадцатеричной так что я буду делать, что от начать – 00 средства 0 и FF означает 255. В общем двух символов (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е или F) записывается рядом друг с другом означает шестнадцать раз первую цифру, плюс вторая цифра – ведущий нули, следовательно, по желанию – Однако не тратьте свое время преобразования вещи обратно десятичную все время – вам не нужно, чтобы. 5А, очевидно, больше, чем 3E, потому что 5 больше, чем 3. Таким же образом D7 является большее количество, чем АА.

Это не нужно сначала изменить цифры в десятичной

– Лучше, чтобы получить своего рода “чувство” для размера число в шестнадцатеричном, фактически не зная, что это такое. После все, что все, что мы делаем в десятичной не так ли? Бьюсь об заклад, вы не можете представьте себе кучу (ровно) семьдесят три копейки.

Поэтому переменная в машинный код может содержать любое количество

между 00 и FF. Переменная машинный код называется РЕГИСТРАЦИЯ. Там нет ошибок ловушки в машинный код, а так если вы пытаетесь сложить два числа, сумма которых составляет более FF Вы получите неправильный ответ (на самом деле это будет 100 (HEX) меньше, чем реальный ответ) – последние две цифры будут быть единственными, которые считают. Взгляните на это мало сегмент машинный код:

LD, 9А – Это как LET заявлении. Регистрация в настоящее время проводит

число 9А.

ADD A, 88 – в машинный код можно сделать только одно на

Время – вы не можете, например,. говорят LD, 9А + 88, как вы могли в BASIC. Какое значение имеет зарегистрируйтесь и получите содержать? Ответ 22. Попробуйте сделать добавив в шестнадцатеричном: плюс 8 равна 2 перенос 1; 9 Пий 8 плюс перенос также 2 переноски 1; это перенос «теряется».

Регистры могут быть также использованы в пар. Единственные комбинации

разрешено являются BC, DE, и HL. Если B содержит 61 и C содержит A7 то говорят, что до нашей эры, содержит 61A7. Это четыре цифры шестнадцатеричное число. Ее размер составляет интуитивно просто немного больше, чем 6000, и намного меньше, чем 7000. Точно так же, если HL содержит 1234 мы говорим, что H содержит 12 и L содержит 34.

Как мы на самом деле используем машинный код?

Когда ZX83 выходит, мы надеемся, будет мало

Кнопки, отмеченные инструкции машинного кода. До которые происходит, мы, к сожалению, придется сделать некоторые перевод. Каждый инструкция машинный код имеет ряд – своего рода показатель. Инструкция номер один является LD BC, – что-то вроде LET Заявление в BASIC. Все потребности Z80A является список номеров. Всякий раз, когда он сталкивается с номером 01 он знает, что это имеет для осуществлять операции LD BC; это также, конечно, ожидает четырехзначный номер рядом, чтобы он знал, что для загрузки н.э. с. Это индекс называется HEX КОД.

Слова, которые мы используем для инструкций иногда называют

ОП-коды (коды операций). Для каждого кода операции есть HEXcode, и для каждого HEXcode есть Opcode.

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

C9 RET

Здесь C9 является HEXcode которой компьютер поймет. RET это наш способ написания. RET означает ВОЗВРАЩЕНИЕ; либо “Возвращение на BASIC “, как мы будем использовать в самое ближайшее время, или” Возвращение из Подпрограмма “, который я должна охватывать в следующей статье.

Каждый машинный код программы вы пишете, должно заканчиваться RET

Инструкция.

Смысл ЕГР

USR является функцией в BASIC – это очень похоже на кресте

между заявлении GOSUB и определенной пользователем (числовой) функция. Это очень похоже на функцию в виде: USR Х имеет то же самое “форму”, как SIN X или INT X, и может быть используется в одних и тех же обстоятельствах. Но если SIN X равна высота синусоидальной волны в положении X, и если Х равен INT X со всеми его десятичных знаков изгнан, что число делает USR X нам дает? ОТВЕТ: USR X дает нам значение до н.э.

зарегистрируйтесь. Программа машинный код выполняется каждый раз USR является б, а число или переменная или что после слова USR должны быть адрес начала программы, написанной на машинный код. Например, рассмотрим этот машинный код Программа:

010000 LD BC, 0000

C9 RET

Если X был адрес “01” в выше, то, что

число будет USR X даст? RET, помните, означает возвращение к Основной, и так до н.э. заканчивается как ноль. В этом случае USR X будет дают нам нулевое значение, так PRINT USR X будет напечатать 0, и Пусть у = USR X будет назначить Y с нуля, и так далее.

Наша следующая проблема в том, как мы получаем машинный код в

Компьютер, в первую очередь? Единственный способ сделать это является с BASIC программа. Взгляните на программы на рис.1. Это называется HEXLD, и я объясню, что он делает и как это работает.

– Рис.1 HEXLD – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

  10 DEF FN к (х) = CODE “01234567890000000:;<=>00000000000000000000000000:;?<=>” (КОД $ (х) -47) -48

  20 LET $ = “”   30 ВХОД х   40 ЕСЛИ $ = “”, затем введите $   50 POKE х, 16 * FN K (1) + FN K (2)   55 PRINT $ (К 2); “”;   60 Пусть $ = (до 3) в $   70 LET х = х + 1   80 GO TO 40

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Первая строка является пользовательская функция, которая превращает

строка символов в ряду. Его действие состоит в свою очередь “0” в 0, “не 1” в 1, и так далее до тех пор, “9”, который становится 9. В Добавление “” становится десяти, “B”, становится одиннадцать, и так далее до на “F”, которая становится пятнадцать. Маленькие буквы также взяты во внимание и поэтому “A” также становится десять, и так далее до “Е”, которая дает пятнадцать, как если бы это был капитал. Остальная часть программы ваш HEX погрузчик.

Чтобы использовать тип программы RUN, то вход (в десятичной системе) адрес.

Входной 24576 здесь (ни по какой другой причине, чем тот факт, что в шестигранной 24576 записывается как 6000). Теперь все, что вам нужно набрать в Ваш машинный код. Введите в “010000”, а затем “C9”. К остановить тип программы За новой строки – это вызовет Теперь код ошибки 3. У вас есть программа машинного кода. Тип PRINT USR 24576, чтобы увидеть, если он дает нуль, как следует. Если вас хочу видеть, что вы делаете изменения линии 40, чтобы прочитать, если $ “” Затем введите $: напечатать $

– Рис.2 список HEXLD3 – – – – – – – – – – – – – – – – – – – – – – –

  10 PRINT “СПИСОК”;

  20 GO SUB 8000   30 RANDOMIZE USR 65055   40 СТОП  100 PRINT “WRITE”;  110 GO SUB 8000  120 ВХОД $: PRINT;  130 RANDOMIZE USR 65152  140 PRINT $  150 GO TO 120  200 PRINT “INSERT”;  210 GO SUB 8000  220 ВХОД $: PRINT;  230 RANDOMIZE USR 65109  240 PRINT $  250 GO TO 220  300 GO SUB 320  310 СТОП  320 PRINT “DELETE”;  330 GO SUB 8000  340 PRINT “К”;  350 GO SUB 9000  360 RANDOMIZE USR 65235  370 ВОЗВРАТ  400 SAVE “HEXLD3” ЛИНИЯ 460  410 SAVE “HEXLD3 MC” КОД 65016.353  420 SAVE “” КОД FN р (65016), FN р (65024) -fn р (65016) +1  430 ПРОВЕРКА “”  440 ПРОВЕРКА “” CODE  450 ПРОВЕРКА “” CODE: СТОП  460 ГРАНИЦЫ 0: INK 7: PAPER 0: FLASH 0: BRIGHT 0  470 CLEAR, 65015  480 LOAD “” CODE: LOAD “” CODE: СТОП  500 PRINT “НАЧАТЬ”;  510 GO SUB 8000  520 RANDOMIZE USR 65264  530 СТОП  600 PRINT “заменить”;  610 GO SUB 330  620 GO TO 220  700 PRINT “RUN”;  710 GO SUB 8000  720 RANDOMIZE USR FN р (65018)  730 СТОП  800 PRINT “КОПИЯ”;: GO SUB 8000  810 PRINT “”;: GO SUB 9000  820 PRINT “К”;  830 INPUT “АДРЕС”; $  840 PRINT “АДРЕС”; $  850 POKE 65022,16 * FN к ($ 3) + FN к ($ 4)  860 POKE 65023,16 * FN к ($, 1) + FN к ($, 2)  870 RANDOMIZE USR 65275 8000 INPUT “АДРЕС”; $ 8010 PRINT “АДРЕС”; $ 8020 POKE 65018,16 * FN к ($ 3) + FN к ($ 4) 8030 POKE 65019,16 * FN к ($, 1) + FN к ($, 2) 8040 ВОЗВРАЩЕНИЕ 9000 INPUT “АДРЕС”; $ 9010 PRINT “АДРЕС”; $ 9020 POKE 65020,16 * FN к ($ 3) + FN к ($ 4) 9030 POKE 65021,16 * FN к ($, 1) + FN к ($, 2) 9040 ВОЗВРАЩЕНИЕ 9050 DEF FN к (х $, у) = CODE “01234567890000000:;<=>00000000000000000000000000:;?<=>” (КОД х $ (у) -47) -48 9060 DEF FN ч (х $) = 4096 * FN к (х $, 1) + 256 * FN к (х $, 2) + 16 * FN к (х $, 3) + FN к (х $, 4) 9070 DEF FN к $ (х, у) = “0123456789ABCDEF” (INT (х / 16 ^ у) -16 * INT (х / 16 ^ (у + 1)) + 1) 9080 DEF FN ч $ (х) = FN K $ (х, 3) + FN к $ (х, 2) + FN K $ (х, 1) + FN к $ (х, 0) 9090 DEF FN р (х) = PEEK х + 256 * PEEK (х + 1)

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

– Фиг.3 код HEXLD3 – – – – – – – – – – – – – – – – – – – – – – – –

FE02: F5<< [Эта линия была пропустили в журнале. JG.]

FE03: E6 FE59: 4E FEAF: 40 FF05: 44
FE04: F0 FE5A: 23 FEB0: 38 FF06: 4D
FE05: 1F FE5B: 46 FEB1: 04 FF07: 03
FE06: 1F FE5C: C8 FEB2: E6 FF08: 2A
FE07: 1F FE5D: 28 FEB3: DF FF09: FE
FE08: 1F FE5E: CB FEB4: D6 FF0A: FD
FE09: C6 FE5F: 19 FEB5: 07 FF0B: EB
FE0A: 30 FE60: 20 FEB6: D6 FF0C: A7
FE0B: FE FE61: 02 FEB7: 30 FF0D: ED
FE0C: 3A FE62: CF FEB8: 82 FF0E: 52
FE0D: 38 FE63: 14 FEB9: D1 FF0F: 19
FE0E: 02 FE64: C5 FEBA: 12 FF10: 38
FE0F: C6 Fe65: 2A FEBB: 13 FF11: 04
FE10: 07 FE66: 00 FEBC: ED FF12: ED
FE11: D7 FE67: FE FEBD: 53 FF13: B0
FE12: F1 FE68: ED FEBE: FA FF14: CF
FE13: E6 FE69: 5В FEBF: FD FF15: 08
FE14: 0F FE6A: FA FEC0: E5 FF16: 09
FE15: C6 FE6B: FD FEC1: 2A FF17: 2B
FE16: 30 FE6C: A7 FEC2: 00 FF18: EB
FE17: FE FE6D: ED FEC3: FE FF19: 09
FE18: 3A FE6E: 52 FEC4: ED FF1A: 2B
FE19: 38 FE6F: 23 FEC5: 52 FF1B: EB
FE1A: 02 FE70: 44 FEC6: E1 FF1C: ED
FE1B: C6 FE71: 4D FEC7: 30 FF1D: B8
FE1C: 07 FE72: E1 FEC8: 04 FF1E: CF
FE1D: D7 FE73: ED FEC9: ED FF1F: 08
FE1E: C9 FE74: 5В FECA: 53 FF20: CD
FE1F: 2A FE75: 00 FECB: 00 FF21: 02
FE20: 00 FE76: FE FECC: FE FF22: FE
FE21: FE FE77: 19 FECD: 0B FF23: 3E
FE22: 22 FE78: 22 FECE: 78 FF24: 20

FE23: ФК FE79: 00 FECF: B1 FF25: D7

FE24: FD FE7A: FE FED0: 20 FF26: 78
FE25: 54 FE7B: EB FED1: CA FF27: CD
FE26: 5D FE7C: ED FED2: C9 FF28: 02
FE27: 2A FE7D: B8 FED3: 2A FF29: FE
FE28: FA FE7E: 00 FED4: 00 FF2A: 3E
FE29: FD FE7F: 00 FED5: FE FF2B: 20
FE2A: A7 FE80: 2A FED6: ED FF2C: 47

Fe2B: ED FE81: 4B FED7: 5В FF2D: D7 FE2C: 52 FE82: 5C FED8: ФК FF2E: 79 FE2D: 19 FE83: 23 FED9: FD FF2F: CD FE2E: D0 FE84: 4E FEDA: D5 FF30: 02 FE2F: 7С FE85: 23 FEDB: A7 FF31: FE

FE30: CD FE86: 46 ДРСК: ED FF32: 78
FE31: 02 FE87: CB FEDD: 52 FF33: D7
FE32: FE FE88: 28 FEDE: 44 FF34: 7A
FE33: 7D FE89: CB FEDF: 4D FF35: CD
FE34: CD FE8A: 19 FEE0: 03 FF36: 02
FE35: 02 FE8B: 28 плата1: E1 FF37: FE
FE36: FE FE8C: D5 FEE2: 23 FF38: 78
FE37: 3E FE8D: ED FEE3: ED FF39: D7
FE38: 20 FE8E: 5В FEE4: 5В FF3A: 7Б
FE39: D7 FE8F: FA FEE5: FA FF3B: CD
FE3A: 7E FE90: FD FEE6: FD FF3C: 02
Fe3B: CD FE91: 7А FEE7: ED FF3D: FE
Fe3C: 02 FE92: CD FEE8: B0 FF3E: 78
FE3D: FE FE93: 02 Стоимость9: 1B FF3F: D7
FE3E: 3E FE94: FE FEEA: 1B FF40: 7С
FE3F: 20 FE95: 7Б FEEB: ED FF41: CD
FE40: D7 FE96: CD ДЭК: 53 FF42: 02
FE41: 7E FE97: 02 FEED: 00 FF43: FE
FE42: FE FE98: FE FEEE: FE FF44: 78
FE43: 20 FE99: 3E FEEF: C9 FF45: D7
FE44: 38 FE9A: 20 FEF0: 2A FF46: 7D
FE45: 05 FE9B: D7 FEF1: FA FF47: CD
FE46: FE FE9C: 23 FeF2: FD FF48: 02
FE47: A5 FE9D: 7E FeF3: 22 FF49: FE
FE48: 30 FE9E: FE FEF4: F8 FF4A: 3E
FE49: 01 FE9F: 40 FEF5: FD FF4B: 0D
FE4A: D7 FEA0: 38 FEF6: 2B FF4C: D7
FE4B: 3E FEA1: 04 FEF7: 22 FF4D: E1
FE4C: 0D FEA2: E6 FEF8: 00 FF4E: 7С
FE4D: D7 FEA3: DF FEF9: FE FF4F: CD
FE4E: 23 FEA4: D6 FEFA: C9 FF50: 02
FE4F: 22 FEA5: 07 FEFB: ED FF51: FE
FE50: FA FEA6: 87 FEFC: 5В FF52: 7D
FE51: FD FEA7: 87 ДВФО: FA FF53: CD
FE52: 18 FEA8: 87 Fefe: FD FF54: 02
FE53: D6 FEA9: 87 FEFF: 2A FF55: FE
Fe54: 00 FEAA: D5 FF00: ФК FF56: CF
FE55: 2A FEAB: 57 FF01: FD FF57: 14
Fe56: 4B FEAC: 23 FF02: A7

Ре57: 5C FEAD: 7E FF03: ED FE58: 23 FEAE: FE FF04: 52

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Для продвинутых программистов …

На рисунках 2 и 3 дают программу редактирования машинный код под названием

HEXLD3. Вы можете загрузить его в компьютер с помощью HEXLD как выше. Его целью является, чтобы позволить вам построить и редактировать другие программы в машинный код. Чтобы избежать путаницы с шестигранной приведены в рис.3 называется “Программа объект” – машина Код вы будете использовать его для редактирования, называется «субъекта Программа “. Вы не должны пытаться использовать HEXLD3 редактировать Сама.

Если вы используете машину 16K вместо машины 48К вы

должны вычесть 32 768 с каждого адреса, используемого в BASIC, и Вы должны изменить каждый адрес, упомянутый в машинный код который начинается с F в соответствующий адрес начала с 7.

Особенности программы заключаются в следующем:

– Фиг.4 – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

Расположение переменных и машинного кода рутины HEXLD3.

16K 48K

— — 7DF8 FDF8 НАЧАТЬ Очки для первого байта предметной программы. 7DFA FDFA АДРЕС) 7DFC FDFC ADD2) Параметры, используемые HEXLD3.

7DFE FDFE ADD3) 7E00 FE00 предельных точек на первый байт после настоящей программы. 7E02 FE02 HPRINT Подпрограмма печатать содержимое регистра                      в шестнадцатеричном.

Сюжетная программа 7E1F FE1F HLIST Список в шестнадцатеричном виде. 7E55 FE55 INSERT вставки дополнительных байт в предметной программе. 7E80 FE80 WRITE Заменяет сюжетную программу с новым кодом.

  • 7ED3 FED3 DELETE Удаляет байт из темы программы.
  • 7EF0 FEF0 BEGINMC Наборы НАЧАТЬ и ограничить готовы к созданию нового                      Сюжетная программа.
  • 7EFB FEFB HCOPY Заменяет сюжетную программу с скопированных байтов от                      в другом месте.
  • 7F20 FF20 BREAKP Перерыв рутину точку.
  • 7F58 FF58 Следующая запасной байт – пользовательские графические может начать здесь.

Я прошу прощения, если не хватает места, чтобы перечислить машинный код для HEXLD3

в полном объеме. Вы можете, как перевести его для себя в качестве упражнения, если вы достаточно мазохистские.

RUN Список машинный код в шестнадцатеричной из любого шестигранной адресу.

RUN 100 Оставить свой машинный код, что и в HEXLD выше.

RUN 200 Вставка байт машинного кода между существующими байт. RUN 300 Удалить байт машинного кода, заделывая разрыв, который они                 заняты.

RUN 400 сохраняет первое основных, то программа объект, то                 Сюжетная программа, затем проверяет все три. RUN 500 Изначально присваивает переменные, используемые этой программой. RUN 500 сусла                 использовать, только если вы создаете новую программу с нуля. RUN 600 Эквивалент удалить следуют INSERT по тому же адресу.

RUN 700 RUN машинный код с любого адреса.

RUN 800 Копирование блоки машинного кода с одного адреса на другой. FN H (строка) Изменяет шестигранные в десятичное; например. FN H (“002A”) = 42. FN H $ Изменения десятичной в шестнадцатеричном; например. FN H $ (42) = “002A”. (Количество) [так в оригинале. JG.] FN P (адрес) Эквивалент PEEK (адрес) + 256 * PEEK (адрес + 1)

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

– Другой прекрасный продукт расшифрованы: Джим Grimwood (jimg@globalnet.co.uk), Weardale, Англия –

?

Можете начать играть в Hex Loader онлайн. Среда разработки на ASM, которую подарил миру Toni Baker, была издана творческой группой ZX Computing в 1982 году в Великобритании.

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

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