Инструменты пользователя

Инструменты сайта


msx:learning_msx_machine_code:learning_msx_machine_code

Изучение машинного кода MSX (Learning MSX machine code)

Данная статья является переводом материала Blog : Learning MSX machine code

Некоторые части оригинального материала опущены или заменены.

FIXME

Всем привет!

Вы нашли мой эту статью, это здорово! Он называется «Изучение машинного кода 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 основных преимущества:

  1. Скорость
    Машинный код намного быстрее, чем MSX BASIC, который сначала должен быть «переведен» в машинный код, прежде чем он может быть выполнен. Вы не можете написать быструю графическую игру на MSX BASIC. Для этого вам действительно нужен (некоторый) машинный код.
  2. Управляемость
    Всё, что может предложить компьютер, можно получить с помощью машинного кода. В языках программирования высокого уровня нет всех тех возможностей, которые есть в машинном коде. Машинный код даёт вам полный контроль.

А что сейчас?

На данный момент я настоящий новичок в машинном коде. Я собрал много информации (веб–сайты, документы, книги, …), я довольно много читал об этом и даже пробовал кое–что. Это очень маленький шаг в мире машинного кода. Итак, как этот материал может помочь кому–то изучить машинный код MSX? У этого материала две цели:

  1. Для меня это способ документировать процесс моего обучения, чтобы я мог хранить всю эту информацию на будущее.
  2. FIXME (For the reader it hopefully provides information to start creating MSX machine code with a slightly less steep learning curve. You can it learn together with me.)
    Надеюсь, что читатель представляет информацию для начала создания машинного кода MSX с немного менее крутой кривой обучения. Вы можете научиться этому вместе со мной.

Не ждите быстрых результатов с самого начала. Этот материал (пока) не посвящен созданию полнофункциональной графической экшн–игры с классной музыкой и звуковыми эффектами. Нет, это больше о том, чтобы заставить компьютер пищать, выводя на экран один символ. Речь идет о понимании основ. Но я могу сказать вам, что даже просто услышать звуковой сигнал, созданный машинным кодом, созданным вручную, может быть очень приятным… ;-)

FIXME

Ссылки

msx/learning_msx_machine_code/learning_msx_machine_code.txt · Последние изменения: 2021-05-11 13:13 — GreyWolf