https://dtf.ru/u/34713-aleksandr-logachev/1890249-system-shock-dve-igry-po-cene-odnoy-vpechatleniya-ot-prohozhdeniya-pervoy-glavy
Опробовал ремейк System Shock, да не только
Опробовал ремейк System Shock, да не только
DTF
System Shock. Две игры по цене одной. Впечатления от прохождения первой главы — Александр Логачев на DTF
Чтобы получить полный спектр эмоций и не заниматься сравнением по памяти, я решил играть в них по очереди: этаж за этажом. Итак, представляю System Shock: Enhanced Edition и System Shock (2023).
Media is too big
VIEW IN TELEGRAM
И кассеты заработали !!
Теперь можно писать что-то хотя бы на бейсике и не переживать из-за потери кода. Конечно, идеальный вариант – найти адаптер для sd-карты или дисковод для дискет. Но второе стоит от 8 тысяч, в первое - дохрена, и заказать можно только из штатов или европы (либо найти местных кулибиных, но пока не интересовался).
Теперь можно писать что-то хотя бы на бейсике и не переживать из-за потери кода. Конечно, идеальный вариант – найти адаптер для sd-карты или дисковод для дискет. Но второе стоит от 8 тысяч, в первое - дохрена, и заказать можно только из штатов или европы (либо найти местных кулибиных, но пока не интересовался).
👍1👏1
Commodore 64 конечно волшебная вещь, если программировать на ассемблере. Бэйсик, хоть и позволяет многое, но обрабатывает все гораздо медленнее и имеет кучу ограничений.
Например, здесь я попытался сделать более-менее быструю графику. Основной игровой экран в левом верхнем углу. Да, это экран с огромным разрешением 80×64 пикселей!
Но работает же:)
Например, здесь я попытался сделать более-менее быструю графику. Основной игровой экран в левом верхнем углу. Да, это экран с огромным разрешением 80×64 пикселей!
Но работает же:)
👍1
Не скоро я еще решусь на ремонт, но оно того стоило. Даже невозможность сходить в туалет, помыться, и жизнь в пылище и дерьмище не умалили финальный результат.
Думаю, фотки до-после все расскажут лучше:)
Думаю, фотки до-после все расскажут лучше:)
🌚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-у.
Эта программа просто заполняет экран кружочками. И сейчас я покажу, что вышло.