2013-06-15 2 views
4

Я знаю, что это невероятно неопределенный вопрос, и это может быть не очень хорошим вопросом для программистов, поскольку это действительно связанная с аппаратным обеспечением вещь, но я предполагаю, что сборка/машинный код вступает в игру, которая будет подходящей для этого сайта.Как машина определяет, что отображается на экране (6502)?

Так что мне интересно; Представьте себе процессор 6502. Он имеет несколько регистров, набор инструкций и доступ к определенному объему памяти. Тогда представьте, что у вас есть ЖК-экран с произвольным разрешением. Как определяется, что показано на этом экране? Как определяется, какие пиксели, в какой позиции задан какой цвет? Всегда ли отображается экран, например, пиксель со значением в аккумуляторе 6502 и с положением x, хранящимся в регистре x, и y-позиция, сохраненная в y? Или это интерпретируется по-разному на каждой машине?

Кто-то написал эмулятор JavaScript 6502, и устройство отображает пиксель со своим значением в некоторой позиции памяти, начиная с 200 долларов. Так, например:

LDA #$08 
STA $200 

будет отображать розоватый пиксель в положении x: 0, y: 0.

LDA #$01 
STA $205 

отображает белый пиксель в положении x: 5, y: 0.

Если вы посмотрите на NES, однако, у него есть выделенный PPU, который отображает определенные пиксели с определенным значением в определенной области на экране.

Так как это работает? По-разному интерпретируется ли она каждой машиной (например, Apple II, C64, NES) или существует какая-то последовательность того, как она интерпретируется?

На самом деле, что произойдет, если программа, скомпилированная для Apple II, была каким-то образом выполнена на C64? Машина должна быть в состоянии прочитать инструкции, не так ли?

+0

Это не вопрос программирования, и даже если это не относится к ассемблеру или 6502. –

+0

Да, я уже говорил, что я не знал, был ли это подходящий вопрос или нет, поэтому я все равно спросил, Я думал, что многие программисты на этом сайте, вероятно, будут иметь некоторые аппаратные знания на стороне. Я буду помнить, что не буду задавать подобные вопросы в будущем. – ZimZim

+0

Я уверен, что у многих программистов на этом сайте * есть * есть много знаний об оборудовании, но это все о программировании; ваш вопрос по своей сути является аппаратно-ориентированным, поскольку преобразование структур памяти в строки развертки на дисплее представляет собой аппаратно-аппаратную задачу, относящуюся к системе (что не означает, что вопрос не интересен или действителен, только что он здесь не принадлежит). –

ответ

4

Как отображается графика, зависит от машины, поэтому therte не имеет определенного ответа. Например, на C64 графическое оборудование было отображено в обычное адресное пространство, поэтому вам пришлось писать в определенную часть памяти, чтобы печатать символы на экране. Если вы хотите отображать графику, вам пришлось переключать режим, записывая в регистры аппаратного обеспечения дисплея, а также отображаемую память может меняться. Из-за этого нормально доступная память C64 была ниже, чем 64 КБ. Вы могли бы отключить отображение памяти, и, таким образом, получить доступ к полной памяти ниже графической памяти, поэтому она превратилась в машину без дисплея.

Однако на ПК у вас было, например, VGA, EGA, Hercules и т. Д., Которые были записаны путем доступа к определенному порту и отправки команд через эти порты. Совершенно иной подход. Но это решение системного дизайна и не зависит от процессора.

На самом деле, что произойдет, если программа, скомпилированная для Apple II, была каким-то образом выполнена на C64? Машина должна быть в состоянии прочитать инструкции, не так ли?

Ну, ответ довольно ясный. Скорее всего, это сработает, потому что даже если набор команд может быть одним и тем же (я не знаю, какой процессор имел яблоки), детали оборудования будут отличаться.

+1

Пример C64 подтвердил мое подозрение. Благодарю. – ZimZim

2

В дополнение к процессору машина обычно также включает в себя еще один чип для обработки дисплея. Графический процессор. каждая машина может иметь другой графический процессор с разным разрешением и глубиной цвета. Так что все зависит от GPU. Сам 6502 не имеет никакого представления о дисплее.

5

Сам процессор непосредственно не занимается отображением вещей. Использование дисплея (если оно имеется) зависит от других аппаратных компонентов, которые могут различаться между различными машинами. Как вы говорите, у NES есть PPU, у C64 есть VIC, и у эмулятора может быть что-то еще.

Да, если процессор одинаковый, инструкции будут одинаковыми, но такие вещи, как формат исполняемого файла, аппаратная периферия, макет памяти и любые службы OS/ROM, будут отличаться, поэтому программа, вероятно, не будет работать.

4

Это очень специфичный для системы. Видеокарта или графическая система или то, что вы хотите вызвать, требует некоторого количества бит или набора бит в некоторой памяти и превращает это в сигналы для видео. Интерфейсы к дисплеям - это стандартные, телевизионные входы, vga, dvi, hdmi и т. Д., Есть популярные и клоны популярных видеокарт и т. Д., Которые доставят вас из памяти на эти видеосигналы, но вам все равно нужно выяснить, что вы есть и программа для него.

Размер изображения, X по Y пикселам, количество цветов, количество пикселей на цвет, если они программируются, - это то, что кто-то должен программировать и/или использовать значения по умолчанию, если они есть, и так далее. Эмулятор, который вы используете, может эмулировать популярную видеосистему 6502, но это не обязательно связано с самим 6502.Было около 6502 систем с интегрированными с видео или поддержкой чипами, но он действительно отделен от самого процессора 6502, процессор выполняет инструкции и выводит вас на интерфейс памяти, память и любые другие периферийные устройства не являются частью основного процессора, но ... периферийные устройства ...

Поэтому вам нужно изучить конкретную систему, этот симулятор, C64 и т. д. и изучить каждый отдельно, чтобы понять его видеосистему, контрольные регистры, как видеопамять отображается в адресное пространство процессоров и т. д.

+0

Также в случае симулятора симулятор берет бит из видеопамяти или имитируемой видеосистемы, а затем создает пиксели для системы, выполняющей симуляцию, например, вашу видеокамеру или видеокамеру, а затем на основе этой видеокарты системы сигналы создаются для монитора. –

2

Естественно, это может сильно различаться между различными аппаратными средствами, но общий способ отображения данных на каком-либо экране состоит в том, что есть чип, который читает из определенной области памяти и отображает его на экран. Чтобы изменить то, что показано, вы просто записываете в область памяти, а чип отображает новые данные в следующем цикле отображения.

Я знаком с 8-битным Ataris, где область памяти, используемая для отображения, различается в зависимости от графического режима и доступного бара, поэтому есть указатель на начало экрана, хранящегося где-то на нулевой странице.

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

1

Начните заниматься серфингом здесь: http://en.wikipedia.org/wiki/Framebuffer, затем перейдите сюда: http://en.wikipedia.org/wiki/Graphics_processing_unit.

У каждой машины есть видеоподсистема, а роль ЦП обычно заключается в том, чтобы запрограммировать эту подсистему на отображение того, что программа хочет отобразить. В очень простых системах CPU обычно создает матричное представление изображения, которое будет отображаться на экране. Затем графическая подсистема сканирует эту память и корректирует пиксели на экране до значений, которые она видит в этой матрице. Это не позволяет ЦП делать больше полезной работы, пока это происходит. В современных системах (OpenGL и т. Д.) Процессор просто передает команды на графическую карту через PCIe и позволяет выполнять большую часть самой работы. Запуск кода C64 на какой-либо другой машине (с одним и тем же процессором) все равно будет работать с инструкциями 6502, но программа ожидала бы определенного выхода с периферийных устройств, чего бы не произошло, и что-то замерзнет, ​​как только CPU начнет программировать одну из этих подсистем, не существует (как c64's VIC).

 Смежные вопросы

  • Нет связанных вопросов^_^