GPU

From PSXDEV
Jump to: navigation, search

GPU (Graphics Processor Unit) рисует двухмерные примитивы в видеопамяти и выводит картинку на TV.

Дополнительно GPU занимается мастерингом видеосигнала (например управляет Color Burst), хотя непосредственно генерацию видеосигнала производит отдельная микросхема-ЦАП, на базе цифровых выходных сигналов RGB, идущих с GPU.

Управление GPU со стороны CPU осуществляется всего двумя IO-портами GP0 и GP1, а также DMA, для передачи дисплейных списков (display lists, DL).

GPU построен по такой же технологии, что и CPU (standard cells + custom blocks) :

300px 300px


  • Старые версии материнок (PU-7 и старые PU-8) использовали 2 чипа GPU : 160pin CXD8514Q (IC203) и 64pin CXD2923AR (IC207). Одна из них занималась рисованием примитивов (более крупная 160-контактная), а вторая очевидно выводом картинки из видеопамяти на ТВ (64-контактная). Мануалов у нас нет, поэтому узнать точнее можно только по фотографиям материнской платы (отследить дорожки).
  • Все остальные версии использовали 208pin версии GPU, индекс остался прежним - IC203.
PCB PU-7 / older PU-8 newer PU-8 PU-18 PU-20 PU-22 PU-23 PM-41 PM-41(2)
IC203 100px 100px 100px ??? 100px 100px 100px 100px
CXD 8514Q/2923AR 8561Q 8561BQ ??? 8561CQ 8561CQ 8561CQ ???


Contents

Аппаратный интерфейс (старый GPU 160-pin)

Cтарый GPU состоящий из двух чипов (CXD 8514Q/2923AR) работает следующим образом:

  • Интерфейс между GPU и CPU не претерпел изменений в последующих версиях.
  • Большая микросхема CXD 8514Q (160 контактов) занимается отрисовкой примитивов в специальную двух-портовую DRAM. Соответственно она также содержит DRAM Refresh логику. Картина немного усложняется тем, что VRAM поделена на два банка (2 микросхемы).
  • Маленькая микросхема CXD 2923AR (64 контакта) занимается выборкой пикселей из VRAM и представляет собой RGB DAC. Однако выборка пикселей (установка адреса, режим цветности 15/24 bpp) происходит под управлением большой микросхемы. Для этого 2923AR имеет 4 специальных управляющих входа, функция которых пока неизвестна.
  • Выходные значения RGB с CXD 2923AR, а также сигналы Subcarrier и Colorburst SYNC генерируемые CXD 8514Q подаются на RGB Encoder IC501, после чего видеосигнал уходит потребителю.

Аппаратный интерфейс (новый GPU 208-pin)

Картинка из сервисного мануала SCPH-9000 :

1024px

GPU соединяется с тремя узлами : с CPU (IC103), с видеопамятью SG-RAM (IC201) и с ЦАП.

Нужно отметить что в старых версиях ЦАП был реализован в виде двух микросхем (IC202 - Video DAC и IC501 - RGB Encoder), которые в последствии были объединены в одну (IC502).

Также видеопамять была объединена с GPU, но только в самых последних ревизиях PSOne (PM-41(2)), что удивительно количество контактов микросхемы осталось прежним - 208.

Тайминги

Особенность видеопамяти

ЦАП

Программная модель

Программирование GPU осуществляется с помощью библиотеки PsyQ: libgpu.

На самом деле эта библиотека является базовой для взаимодействия с GPU, в состав PsyQ также входит более продвинутая библиотека libgs, которую используют приложения. Но мы сконцентрируемся на базовом интерфейсе.

Базовыми структурами являются Display Environment (DISPENV) и Draw Environment (DRAWENV)

typedef struct {
	RECT	clip;		/* clip area */
	short	ofs[2];		/* drawing offset */
	RECT	tw;		/* texture window */
	u_short tpage;		/* texture page */	
	u_char	dtd;		/* dither flag (0:off, 1:on) */
	u_char	dfe;		/* flag to draw on display area (0:off 1:on) */
	u_char	isbg;		/* enable to auto-clear */
	u_char	r0, g0, b0;	/* initital background color */
	DR_ENV	dr_env;		/* reserved */
} DRAWENV;
 
typedef struct {
	RECT	disp;		/* display area */
	RECT	screen;		/* display start point */
	u_char	isinter;	/* interlace 0: off 1: on */
	u_char	isrgb24;	/* RGB24 bit mode */
	u_char	pad0, pad1;	/* reserved */
} DISPENV;

Взаимодействие между CPU и GPU происходит через два порта: GP0 (Data) и GP1 (Status). При этом CPU может отправлять данные в GP0 как напрямую, так и с помощью DMA.