12

Изучение программирования

Как сейчас человеку научиться программировать?

Самое простое это записаться на курсы, благо рекламы всяких разных курсов от «Python с трудоустройством» до «С++ за месяц» полно на любом сайте.
Можно смотреть обучающие ролики на Ютубе.
Можно читать обучающие статьи.
Можно задавать вопросы на форумах и читать Stack Overflow.
Можно скачать самоучители и учиться по ним.
Можно делать все это вместе взятое, так наверное даже будет эффективнее.

А как научиться программировать 12-и летнему подростку в начале 90-х в богом забытом моногороде, когда папа инженер по ДВС, мама медик, в школе даже компьютерного класса с монстрами типа БК-0010 нет, а интернетом не пахнет еще лет 10?

Лежал я тут недавно на диване, плевал в потолок и мой взгляд остановился на книжной полке, где у самой стенки составлены тоненькие брошюрки с пожелтевшими от времени корешками.
«А что это там такое черненькое белеет?» - подумал я, решив разобрать эту макулатуру и выбросить ненужное.

Первое, что попало в руки — вот такие книжечки:

Когда и откуда они у меня появились я уже не помню. Может купил на барахолке, а может выменял у кого.

И тут, как здесь принято говорить, воспоминание разблокировано.
На дворе 1992 или 1993 год и в подарок на день рождения я получаю бытовой компьютер ZX Spectrum.
Компьютеры продавались даже без упаковки. Просто тебе из-за прилавка вручали сам компьютер, блок питания, джойстик, инструкцию, шнурок для подключения к телевизору и аудиокассету с каким-то начальным набором игр.

Кассета мне попалась с сюрпризом. Кроме обычных пулялок-бродилок и прочих тетрисов в наборе оказалась игра Peep Show.
Что такое Peep Show мы тогда не знали, но картинка на заставке во время загрузки игры как-то не двусмысленно намекала, на что-то интересное:

Смысл игры оказался в следующем: Есть шесть дверей. За каждой дверью голая женщина. Чтобы открыть дверь нужно решать какие-то головоломки и ребусы.

И то ли головоломки оказались сложными, то ли терпения не хватало, но попробовав несколько раз открыть дверь я решил: ТАК!

Картинки с голыми женщинами не из воздуха берутся. Они загружаются с аудиокассеты вместе с игрой. Значит они хранятся в оперативной памяти. Как их от туда достать?
Что вообще такое оперативная память? Читаем книжечку:

Итак, понятно. Память это набор ячеек, каждая из которых имеет свой адрес. Адресация начинается с адреса 0 и заканчивается адресом 65535. Видеопамять находится в том же адресном пространстве, начинается с адреса 16384 и заканчивается адресом 22528. Схема вывода изображения на экран просто побитово читает эту область памяти и преобразует в видеосигнал (спасибо подшивкам журнала «Радио» в городской библиотеке). Игра с магнитофона загружается в память начиная с адреса 32768.
Для вывода картинки на экран нужно просто найти ее начальный адрес в оперативной памяти и скопировать в видеопамять столько байт, сколько она занимает.

Следующий вопрос: как копировать байты?
Во встроенном Бейсике есть команды PEEK и POKE. Первая получает байт по заданному адресу, а вторая записывает заданное значение в память по заданному адресу.

Это все хорошо, но когда я обычным образом загружаю игру командой LOAD““ игра просто запускается и не дает мне писать какие-либо команды. Кроме того, в оперативной памяти кроме самой игры еще где-то должна располагаться моя программа копирования изображений голых женщин. Значит надо управлять памятью и загрузкой.
Какими-то комбинациями команд LOAD DATA и LOAD CODE пропускаю загрузку первоначального загрузчика, а загружаю только основные файлы игры уже по определенному мной адресу.

Код игры загружен в память, но как теперь искать адреса, по которым лежат голые женщины? Самое простое решение это начиная с адреса 32768 последовательно в циклах копировать в видеопамять блоки по 6144 байта. Рано или поздно среди цветной мешанины на экране появятся фрагменты изображений.
Сказано — сделано. Но оказалось, что интерпретатор Бейсика работает ну ОООчень медленно. Первое копирование цветной мешанины происходило построчно, как в плохой анимации к какому-то дешевому фильму про хакеров.
Как же так? Ведь сама игра выводит изображения моментально, значит должен быть способ делать это быстрее.
И действительно, в книжке написано:

Можно в машинных кодах, а можно на ассемблере. Что это такое, где эти штуки найти, а самое главное, как поместить в память и запустить на выполнение? В сотый раз перечитываю книжку. Ага! Вот оно! Глава 26 использование машинных кодов.

Т.е. получается, что команда ассемблера это просто число, которое можно поместить в память командой POKE по нужному адресу. Затем в следующий байт поместить ее операнд, затем следующую команду и так далее.
Смотрю, какие команды мне доступны:

Прикидываю алгоритм и последовательность команд, в тетрадке составляю табличку с адресами, командами и их опкодами. Получается последовательность чисел. Вбиваю эти числа в память компьютера.
Пусть и не с первого раза и даже не в тот же день, но программа начинает делать свою работу. И делать ее почти моментально В какой-то момент на экране начинают появляться то нога, то рука, то еще кое-что. Зная, с какого адреса я начинаю копировать фрагмент и прикидывая расположение начала картинки на экране сдвигаю адрес начала блока, размер блока и в итоге нахожу адреса всех шести картинок.

Программа для копирования и адреса картинок записаны в тетрадку, теперь осталось только выгрузить картинки на аудиокассету без всяких бесячих головоломок.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества