Данная статья является переводом материала Blog : Learning MSX machine code
Некоторые части оригинального материала опущены или заменены.
Всем привет!
Вы нашли мой эту статью, это здорово! Он называется «Изучение машинного кода MSX», и именно в этом и состоит её цель: научиться писать программы на машинном коде для компьютера MSX.
Что ж… это хороший вопрос. Лучшая причина: просто для удовольствия. Вы не заработаете денег, изучив это, вы не получите с этим работу. Вы должны делать это, потому что вам это нравится, в качестве хобби. Для меня, человека, которому почти 50 лет, компьютеры MSX — это ностальгия. Я получил компьютер MSX 1 в восьмидесятых, когда мне было около 12 лет, и он мне очень понравился. Не только для игр, но и для написания собственных программ. Я изучил MSX BASIC, читая компьютерные руководства, компьютерные книги и журналы. Это был мой первый язык программирования, и через некоторое время я достаточно хорошо овладел им, чтобы создавать (простые) программы, такие как текстовое приключение(квест), простая игра с графикой или редактор спрайтов.
Когда я стал старше, я потерял интерес к компьютеру MSX. Я купил другой, более быстрый компьютер и продолжал увлекаться программированием как хобби, изучая новые языки, такие как Pascal, Actionscript, Javascript и Python. В какой–то момент продал свой старый MSX 1. Так уж обстоят дела, но, тем не менее, MSX по–прежнему для меня особенный. Когда я вижу в продаже старый компьютер MSX, мне всегда интересно, и я хочу его купить. То же самое и с книгами по MSX, журналами, играми и прочим. Я не покупаю его, потому что знаю, что на самом деле не собираюсь его использовать. К счастью, сейчас есть эмуляторы, и время от времени я играю в некоторые из моих любимых старых игр для MSX, например, Kings Valley или Boulderdash.
Так почему я хочу вернуться к теме программирования на MSX и особенно программированию машинного кода? Просто потому, что это было для меня слишком трудным, когда мне было 12–13 лет. Я прочитал книгу и несколько статей о машинном коде, но не смог понять это. Я немного напортачил с изменением видеопамяти моего MSX с помощью команды VPOKE
в MSX BASIC, которая дала некоторые забавные графические эффекты, но я не мог понять, как это на самом деле работает. В то время не было Интернета, чтобы получить информацию или задать вопросы на форуме, поэтому я придерживался MSX BASIC. В настоящее время доступно много информации, и я хочу посмотреть, смогу ли я научиться этому. Просто для развлечения
Как я уже говорил, машинный код — не самая простая вещь для изучения. Машинный код сам по себе на самом деле довольно прост и понятен, но для выполнения задач вам понадобится много коротких инструкций, а также немало технических знаний компьютера. Например, возьмем простую задачу, такую как отображение текста на экране. В MSX BASIC это можно сделать, просто введя простую команду и нажав Ввод ⏎:
print "Hello world!
Но с машинным языком (который используется для создания машинного кода) это будет выглядеть примерно так:
; bios call to print a character on screen CHPUT: equ 0x00a2 ; the address of our program org 0xD000 start: ld hl, message mainLoop: ld a, (hl) cp 0 ret z call CHPUT inc hl jr mainLoop message: db "Hello world!",0 ; use the label "start" as the entry point end start
После написания этой программы в редакторе вам необходимо перевести (собрать) её в машинный код, затем перенести на свой компьютер или эмулятор, загрузить и выполнить. Это в конечном итоге даёт тот же результат:
001.bin
Открыть в WebMSX
А что будет, если в вашей программе будет ошибка? Если вы ошиблись в MSX BASIC, вы получите сообщение об ошибке. Просто выясните, что пошло не так, устраните проблему и попробуйте еще раз:
Но если в вашей программе машинного кода есть ошибка, не так очевидно, что пошло не так. Ваш компьютер может просто выйти из строя. Удачи с этим
Таким образом, изучение машинного кода требует больших усилий. Зачем вообще его изучать? Думаю, есть 2 основных преимущества:
На данный момент я настоящий новичок в машинном коде. Я собрал много информации (веб–сайты, документы, книги, …), я довольно много читал об этом и даже пробовал кое–что. Это очень маленький шаг в мире машинного кода. Итак, как этот материал может помочь кому–то изучить машинный код MSX? У этого материала две цели:
Не ждите быстрых результатов с самого начала. Этот материал (пока) не посвящен созданию полнофункциональной графической экшн–игры с классной музыкой и звуковыми эффектами. Нет, это больше о том, чтобы заставить компьютер пищать, выводя на экран один символ. Речь идет о понимании основ. Но я могу сказать вам, что даже просто услышать звуковой сигнал, созданный машинным кодом, созданным вручную, может быть очень приятным…