Не скоро я еще решусь на ремонт, но оно того стоило. Даже невозможность сходить в туалет, помыться, и жизнь в пылище и дерьмище не умалили финальный результат.
Думаю, фотки до-после все расскажут лучше:)
Думаю, фотки до-после все расскажут лучше:)
🌚1
Ремонт ремонтом, а Commodore никуда не делся.
С чего начинают все программисты? Конечно, с Hello, World программы, которая, внезапно, выводит на экран текст "Hello, World".
И сейчас я хочу написать две такие программы на Commodore 64. Одну на Basic, а вторую на ассемблере.
Basic версия проста, как и сам бейсик. Надо всего лишь написать одну строчку: 10 PRINT "HELLO, WORLD", ну, или 10 “HELLO, BASIC” в моем случае. А потом запустить этот код командой RUN
С чего начинают все программисты? Конечно, с 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" последнее значение будет равно нулю, чтобы программа могла понять, когда строка закончилась.
Первая строка указывает на место в памяти компьютера, куда будет помещен код. В данном случае это байт 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 и происходит смещение вправо по тексту.
И вот как-то так это можно изобразить.
Если значение равно нулю, то перемещаемся в лейбл "done" и командой rts (выход из программы) завершаем работу.
Если значение не равно нулю, то выводим на экран букву начиная с байта $0400 (или 1024 в десятичной) со смещением X (sta $0400,x). Именно с этого байта начинается экранная память Commodore.
После этого надо увеличить регистр X на 1 и вернуться в начало цикла (bne loop). За счет увеличения X и происходит смещение вправо по тексту.
И вот как-то так это можно изобразить.
А вообще это я к чему.
Надо учить ассемблер. Да, это не просто, но результат превосходит все ожидания. Приведу пример.
Я написал программу, которая в бейсике заняла всего одну строчку, а в ассемблере 21-у.
Эта программа просто заполняет экран кружочками. И сейчас я покажу, что вышло.
Надо учить ассемблер. Да, это не просто, но результат превосходит все ожидания. Приведу пример.
Я написал программу, которая в бейсике заняла всего одну строчку, а в ассемблере 21-у.
Эта программа просто заполняет экран кружочками. И сейчас я покажу, что вышло.
This media is not supported in your browser
VIEW IN TELEGRAM
Вот это бейсик...
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
https://dtf.ru/u/34713-aleksandr-logachev/1917240-commodore-64-issledovanie-dolin-pamyati
Немного вымученная статья про Commodore. Даже рад, что ее закончил наконец.
Немного вымученная статья про Commodore. Даже рад, что ее закончил наконец.
DTF
Commodore 64, или как я перестал бояться и полюбил оперативную память — Александр Логачев на DTF
Не так давно я приобрел Commodore 64. Он довольно долго стоял и пылился, ждал своего часа. И вот наконец-то я подключил к нему старенький ламповый монитор и купил аудиокассеты.