Всё там просто



Очень простое объяснение на вопрос «Как кодить под спек» от VBI

Вот память, по ней ходит проц. Берёт байт, смотрит, что за байт. Что-то выполняет, либо добирает недостающее и выполняет. Вот эти байты нужно ЗАКОДИТЬ.

А у проца есть несколько ячеек памяти, чтобы помнить, что делать, регистры называются. Вот в них данные командами подгружаются.Ну и есть байты операций над данными в этих регистрах. А дальше — свабодаааа...

Про регистры. Это переменные, просто переменных только небольшое количество. Например, ну 8 штук. Есть одна переменная (регистр) которая говорит с какого места памяти брать байт (команду) на выполнение – называется Program Counter, PC. Меняется процом или командой перехода. Есть рег аккумулятора А, который участвует в очень большом количестве вычислений, т.е. под него много команд заточили. Один его минус — он 8бит. И есть такой набор, состоящий из 2 пар регистров, которые можно юзать по отдельности, а можно сразу парой, что даёт нам 16 бит. И еще PC — 16 бит. Вот из-за него мы можем перемещаться по памяти, которая зациклена от 0 до 65535, т.е. максимальное значение +1 даёт нам врап на 0. Колечко такое.

Ещё чтобы понимать чо делать в процессе вычислений придумали флаги. Флаги — это биты, которые устанавливаются / сбрасываются из-за каких-то действий проца (выполнения команд). Они у нас в 8 битах всего и пристыкованы к аккомулятору, что даёт нам пару — AF — аккумулятор и флаг, 16 бит пара.

Команды выгребаются процом из места на которое указывает РС, что-то там декодится процом и выполняется, в результате получаем изменение в памяти. Либо в памяти проца, либо в памяти ОЗУ. Есть ещё у нас внешность. Типа чото кому-то передать надо. ЖЕЛЕЗО ОБЩАЕЦА. Этим у нас заняты ПОРТЫ. Что-то туда можно запхать, что-то прочитать. И чото поменяется, в зависимости от того, кто этот порт обслуживает. Например, есть порт FE, если туда запхать 0 — у нас у спека бордюр чего-то почернеет. Это уже архитектура обвязки железа.
Ну а дальше начинаются уже детали. Другими словами, по регистрам, у нас все регистры являются регистровыми парами и все по 16 бит — это шина адреса. Так как у нас память кольцом и ограничена 16ю битами РС, то мы можем расположить наши байты в этих пределах. Это и будет адрес в памяти, где будет размещён результат «компиляции».

Теперь конкретно по памяти давай глянем. У спека есть следующая разбивка: при включении проца, РС у него сброшен, адрес 0. В результате всё начинает выполняться с этого адреса, там у нас РОМ, зашитые подпрограммы, бейсики и т.д. С адреса #4000 (16384) у нас начинается экран. Любые данные с 4000 будут выглядеть точками на экране. Включенный бит — точка, выключенный — нет точки. 1 байт — 8 точек, 8 бит. Потом, с #5800, у нас идёт область атрибутов, специально для клешинга. Там своя разбивка — один байт разделён на 3 блока — 0-7 цвет точке, 0-7 цвет фона, мигание и яркость. Занимает это всё #300 байт, 768. Дальше пошли системные переменные и область незанятая. В спеке ты можешь всю эту память — от 4000 и до FFFF использовать как память кода/данных, потому спек был 48к, хотя реально он 64к :)

А дальше — сюда


Все вопросы задавать автору :D

3 комментария

avatar
Жги, дядя Вова, жги!
avatar
вкратце — это сумбурное изложение — копипаста из чата с aturbidflow, о том как работает спек по сути своей :)
  • VBI
  • +5
avatar
Просто супер!
А можно так про программинг под TS-Conf? Типо «Hello world» под разные фичи. Для совсем неофитов.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.