====== Изучение машинного кода MSX (Learning MSX machine code) ====== Данная статья является переводом материала [[https://learningmsxmachinecode.blogspot.com|Blog : Learning MSX machine code]] Некоторые части оригинального материала опущены или заменены. FIXME Всем привет! Вы нашли мой эту статью, это здорово! Он называется "Изучение машинного кода MSX", и именно в этом и состоит её цель: научиться писать программы на машинном коде для компьютера MSX. ====== Так почему же кто–то хочет этому научиться? ====== Что ж… это хороший вопрос. Лучшая причина: просто для удовольствия. Вы не заработаете денег, изучив это, вы не получите с этим работу. Вы должны делать это, потому что вам это нравится, в качестве хобби. Для меня, человека, которому почти 50 лет, компьютеры MSX — это ностальгия. Я получил компьютер [[msx:msx_1|]] в восьмидесятых, когда мне было около 12 лет, и он мне очень понравился. Не только для игр, но и для написания собственных программ. Я изучил [[msx:basic:|]], читая компьютерные руководства, компьютерные книги и журналы. Это был мой первый язык программирования, и через некоторое время я достаточно хорошо овладел им, чтобы создавать (простые) программы, такие как текстовое приключение(квест), простая игра с графикой или редактор спрайтов. Когда я стал старше, я потерял интерес к компьютеру MSX. Я купил другой, более быстрый компьютер и продолжал увлекаться программированием как хобби, изучая новые языки, такие как [[pascal-programming_language:pascal-programming_language|Pascal]], Actionscript, Javascript и [[python:python|Python]]. В какой–то момент продал свой старый [[msx:msx_1|]]. Так уж обстоят дела, но, тем не менее, MSX по–прежнему для меня особенный. Когда я вижу в продаже старый компьютер MSX, мне всегда интересно, и я хочу его купить. То же самое и с книгами по MSX, журналами, играми и прочим. Я не покупаю его, потому что знаю, что на самом деле не собираюсь его использовать. К счастью, сейчас есть эмуляторы, и время от времени я играю в некоторые из моих любимых старых игр для MSX, например, Kings Valley или Boulderdash. Так почему я хочу вернуться к теме программирования на MSX и особенно программированию машинного кода? Просто потому, что это было для меня слишком трудным, когда мне было 12–13 лет. Я прочитал книгу и несколько статей о машинном коде, но не смог понять это. Я немного напортачил с изменением видеопамяти моего MSX с помощью команды ''[[msx:basic_dialogue_programming_language:011#vpoke|VPOKE]]'' в [[msx:basic:|]], которая дала некоторые забавные графические эффекты, но я не мог понять, как это на самом деле работает. В то время не было Интернета, чтобы получить информацию или задать вопросы на форуме, поэтому я придерживался [[msx:basic:|]]. В настоящее время доступно много информации, и я хочу посмотреть, смогу ли я научиться этому. Просто для развлечения ;-) ===== Кривая обучения ===== Как я уже говорил, машинный код — не самая простая вещь для изучения. Машинный код сам по себе на самом деле довольно прост и понятен, но для выполнения задач вам понадобится много коротких инструкций, а также немало технических знаний компьютера. Например, возьмем простую задачу, такую ​​как отображение текста на экране. В [[msx:basic:|]] это можно сделать, просто введя простую команду и нажав 'Ввод '⏎: print "Hello world! {{helloworldmsx1.png|}} /* {{image_001.png|}} */ Но с машинным языком (который используется для создания машинного кода) это будет выглядеть примерно так: ; 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 После написания этой программы в редакторе вам необходимо перевести (собрать) её в машинный код, затем перенести на свой компьютер или эмулятор, загрузить и выполнить. Это в конечном итоге даёт тот же результат: \\ {{:msx:learning_msx_machine_code:001.bin|}} \\ [[+tab|wmsx>?DISK_FILES=/_media/msx/learning_msx_machine_code/001.bin&BASIC_BRUN=001.bin|Открыть в WebMSX]] /* \\ {{HelloWorldMSX1Asm.png|}}*/ /* {{image_002.png|}} */ А что будет, если в вашей программе будет ошибка? Если вы ошиблись в [[msx:basic:|]], вы получите сообщение об ошибке. Просто выясните, что пошло не так, устраните проблему и попробуйте еще раз: \\ {{syntaxerrormsx1.png|}} /* {{image_003.png|}} */ Но если в вашей программе машинного кода есть ошибка, не так очевидно, что пошло не так. Ваш компьютер может просто выйти из строя. Удачи с этим ;-) Таким образом, изучение машинного кода требует больших усилий. Зачем вообще его изучать? Думаю, есть 2 основных преимущества: - Скорость \\ Машинный код намного быстрее, чем [[msx:basic:|]], который сначала должен быть «переведен» в машинный код, прежде чем он может быть выполнен. Вы не можете написать быструю графическую игру на [[msx:basic:|]]. Для этого вам действительно нужен (некоторый) машинный код. - Управляемость \\ Всё, что может предложить компьютер, можно получить с помощью машинного кода. В языках программирования высокого уровня нет всех тех возможностей, которые есть в машинном коде. Машинный код даёт вам полный контроль. ===== А что сейчас? ===== На данный момент я настоящий новичок в машинном коде. Я собрал много информации (веб–сайты, документы, книги, …), я довольно много читал об этом и даже пробовал кое–что. Это очень маленький шаг в мире машинного кода. Итак, как этот материал может помочь кому–то изучить машинный код MSX? У этого материала две цели: - Для меня это способ документировать процесс моего обучения, чтобы я мог хранить всю эту информацию на будущее. - 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 ====== Ссылки ====== [[msxorg>forum/msx-talk/development/blog-about-learning-machine-code-for-the-msx|Blog about learning machine code for the MSX ]] {{tag>MSX assembler}}