(бухай): программируй
148 subscribers
465 photos
96 videos
3 files
65 links
Мысли, дегустация и код
Download Telegram
Ну и конечно я наконец-то поставил аутентичный квадратный монитор. Правда сейчас он подключён к моему основному компу, и это выглядит, мягко говоря, странно. Но в планах подключить его к Коммодору, и наслаждаться не смазанной и не растянутой картинкой
4
😁3🙈1
Не скоро я еще решусь на ремонт, но оно того стоило. Даже невозможность сходить в туалет, помыться, и жизнь в пылище и дерьмище не умалили финальный результат.
Думаю, фотки до-после все расскажут лучше:)
🌚1
2
1
👏2
Ремонт ремонтом, а Commodore никуда не делся.
С чего начинают все программисты? Конечно, с Hello, World программы, которая, внезапно, выводит на экран текст "Hello, World".
И сейчас я хочу написать две такие программы на Commodore 64. Одну на Basic, а вторую на ассемблере.
Basic версия проста, как и сам бейсик. Надо всего лишь написать одну строчку: 10 PRINT "HELLO, WORLD", ну, или 10 “HELLO, BASIC” в моем случае. А потом запустить этот код командой RUN
А вот с ассемблером все посложнее.
Вот полный код программы:
Теперь надо разобраться, что же здесь происходит.
Первая строка указывает на место в памяти компьютера, куда будет помещен код. В данном случае это байт 1000 в шестнадцатеричной или 4096 в десятичной.

В процессоре Commodore есть три регистра: A, X и Y, в которые можно помещать восьмибитные значения (от 0 до 255 в десятичной) или считывать их. Первым делом надо очистить регистр X командой ldx #0 (решетка указывает, что мы помещаем в регистр число, а не указатель на другой байт).

Потом мы вводим основной цикл программы "loop", который будет считывать текст и помещать его на экран. Значения этот цикл будет брать из другого лейбла "text". В лейбле "text" последнее значение будет равно нулю, чтобы программа могла понять, когда строка закончилась.
Итак, мы помещаем в регистр A значение из "text" со смещением X (по одной букве) (lda text,x). Потом сравниваем полученное значение с нулем (beq done).
Если значение равно нулю, то перемещаемся в лейбл "done" и командой rts (выход из программы) завершаем работу.
Если значение не равно нулю, то выводим на экран букву начиная с байта $0400 (или 1024 в десятичной) со смещением X (sta $0400,x). Именно с этого байта начинается экранная память Commodore.

После этого надо увеличить регистр X на 1 и вернуться в начало цикла (bne loop). За счет увеличения X и происходит смещение вправо по тексту.

И вот как-то так это можно изобразить.
Потом надо загрузить эту программу в компьютер и набрать SYS 4096 (начало в памяти, которое было указано в первой строке). И текст появится на экране.
Сам не понял, что понаписал...
А вообще это я к чему.

Надо учить ассемблер. Да, это не просто, но результат превосходит все ожидания. Приведу пример.

Я написал программу, которая в бейсике заняла всего одну строчку, а в ассемблере 21-у.
Эта программа просто заполняет экран кружочками. И сейчас я покажу, что вышло.
This media is not supported in your browser
VIEW IN TELEGRAM
А вот это ассемблер. Чуточку быстрее=)
И это я не говорю о том, что программа на бейсике весит 28 байт, а на ассемблере - 27, а работает в сотни раз быстрее⌨️
1
This media is not supported in your browser
VIEW IN TELEGRAM
2😁1