Войти
ФлеймФорумЖелезо

8-битный "компьютер мечты" (4 стр)

Страницы: 13 4 5 618 Следующая »
#45
(Правка: 16:04) 15:55, 7 мар. 2019

Зачем такие извращения, всё таки, не понятно.  Переключать банки памяти можно обычным  IORQ+ADDR (спектрум так и делает), графикой пусть отдельный чип занимается (вопрос в  фичах этого чипа).

зы.
Если какому-то внешнему устройству (DMA, например) нужно тормознуть Z80 - не нужно никакими прерываниями извращаться, есть штатный ~BUSRQ,  подтверждаемый со стороны процессора сигналом ~BUSACK.  Собственно,  дисковые контроллеры в том же спектруме, так и синхронизируются с CPU


#46
(Правка: 16:21) 16:19, 7 мар. 2019

Кстати, - как обычно,  идею уже давно сделали до нас - http://blog.retroleum.co.uk/electronics-articles/ez80p/

Bitmap chunky mode: 640×480, 320×480, 640×240, 320×240 in 16 or 256 colours
Tile map mode    : 640×480, 320×480, 640×240, 320×240 in 256 colours
Text mode: Resolutions as above, 16 colour character+attribute mapping.
Sprites          : 256 colours, 16 pixels wide/ any height, 128 sprite registers, 40 per scan line
Video Output: VGA 60Hz
#47
(Правка: 18:20) 16:38, 7 мар. 2019

Сейчас актуальнее память продумать.
Мною предлагается, выше, максимально простое:
Для OS - 32Кб-ПЗУ+32Кб-ОЗУ для чтения и 64Кб-ОЗУ для записи.
Для пользователя - 64Кб-ОЗУ для чтения и 64Кб-ОЗУ для записи с защитой кода.

+---------------------------------+      +---------------------------------+
|            Режим OS             |      |       Режим пользователя        |
+----------------+----------------+      +----------------+----------------+
|     Чтение     |     Запись     |      |     Чтение     |     Запись     |
+----------------+----------------+ FFFF +----------------+----------------+
|      Стек      |      Стек      |      |      Стек      |      Стек      |
+----------------+----------------+ FE00 +----------------+----------------+
|                |                |      |                |                |
|                |                |      |                |                |
|     Банк A     |     Банк A     |      |     Банк A     |     Банк D     |
|                |                |      |                |                |
|                |                |      |                |                |
+----------------+----------------+ 8000 +----------------+----------------+
|                |                |      |                |                |
|                |                |      |                |                |
|     Банк B     |     Банк C     |      |     Банк C     |     Банк C     |
|                |                |      |                |                |
|                |                |      |                |                |
+----------------+----------------+ 0000 +----------------+----------------+
Где:
Банки «A…D» - четыре регистра переключения сегментов общего линейного адресного пространства 256*32Кб = 8Мб всей памяти.
Так, пользователь может Банки C и D настроить на графику и получить буфер 0000…FDFF (65024 байта) для записи - полностью покрывает графику 320x200 и остаётся 1024 байта на ячейки палитры…

В зависимости от того, откуда процессор читает инструкции по M1 фиксируется бит A15.
Если A15 в нуле, то это «Режим OS» с Банками A-B-C.
Если A15 в единице, то «Режим пользователя» с Банками A-C-D.

Можно ещё и проверить, читаются ли инструкции из зоны Стека «FE00…FFFF» и предусмотреть для этого ещё один режим прямого доступа…

+---------------------------------+      +---------------------------------+
|       Расширенный режим         |      |       Укороченный режим (7F……00)|
+----------------+----------------+      +--------+-------+----------------+
|     Чтение     |     Запись     |      | Чтение |  M1   |     Запись     |
+----------------+----------------+ FFFF +--------+-------+----------------+
| Операции/Стек  |      Стек      |      |  Стек  | Код   |      Стек      |
+----------------+----------------+ FE00 +--------+-------+----------------+
|                |                |      |        |       |                |
|                |                |      |        |       |                |
|     Банк A     |     Банк A     |      | Банк D |Банк A |     Банк D     |
|                |                |      |        |       |                |
|                |                |      |        |       |                |
+----------------+----------------+ 8000 +--------+-------+----------------+
|                |                |      |                |                |
|                |                |      |                |                |
|     Банк B     |     Банк C     |      |     Банк C     |     Банк C     |
|                |                |      |                |                |
|                |                |      |                |                |
+----------------+----------------+ 0000 +----------------+----------------+
Здесь «Укороченный режим» - режим однобайтовых инструкций.
Например, если префикс - «7F» (mov a,a), то инструкции читаются из «Банка A», а запись/чтение данных происходит с «Банком D» до операции «00 nop». Тем самым, можно иметь прямой доступ ко всем данным без назойливых манипуляций со страницами памяти.

#48
18:18, 7 мар. 2019

0iStalker

Слушай, а можешь из любопытства проверить - действительно ли этот ~M1 не вырабатывается когда идёт считываение immediate-данных из инструкций? А то вдруг.
Фактически если бы оно работало как надо это просто называется "процессор гарвардской архитектуры с совмещенными шинами данных и кода". И это реально полезно может быть для одновременного исполнения 64Кб кода который без каких либо ухищрений работает с 64Кб данных. Без каких то memory controllers даже, просто как гарвардская архитектура.
Если у тебя тулзы позволяют это увидеть было бы интересно.
А то если оно только на опкоды работает, то пригодно весьма ограниченно. Хотя всякие микродрайвы и TR-DOS-ы этим пользовались для детекта необходимости подмены ПЗУ на теневое.

#49
18:30, 7 мар. 2019

=A=L=X=
> Слушай, а можешь из любопытства проверить - действительно ли этот ~M1 не
> вырабатывается когда идёт считываение immediate-данных из инструкций? А то
> вдруг.

M1  Machine Cycle 1 - Машинный цикл 1 Трёхстабильный выход. Активный уровень - низкий. /M1 указывает, что в текущей машинном цикле происходит чтение кода операции из памяти. При считывании кода операции вида CB, ED, DD, FD вырабатывается ещё один цикл M1 для считывания второго байта кода операции, т.е. сигнал /M1 активизируется дважды. /M1 также активизируется вместе с сигналом /IORQ в цикле подтверждения прерывания.
Тeм самым, можно сказать, что только код префикса/инструкции требует M1.
С другой стороны, можно безгранично расширять CB/ED/DD/FD через перехват. Но лично я об этом не размышлял.
#50
(Правка: 18:34) 18:32, 7 мар. 2019

0iStalker
> сделали до нас - http://blog.retroleum.co.uk/electronics-articles/ez80p/

А я помню eZ80 :) забавная зверушка.
Вообще реально она где то нараскоряку между 8, 16 и 24 битами находится и в такой забавнейшей раскоряке, что даже было бы любопытно под такое написать какой нибудь асм. xD
Я бы даже не исключал такой процессор из рассмотрения под САБЖ, потому что полноценное АЛУ в нём реально 8-битное.
Но видеоконтроллер выглядит как то слишком навороченно для 8-битки. Не знаю, меня противоречия гложут, с одной стороны хочется чтобы было круто, с другой когда слишком круто, то обесценивается 8-битность. :D
Но опять же - у каждого мечта может быть своя.

#51
(Правка: 19:05) 19:03, 7 мар. 2019

=A=L=X=
> действительно ли этот ~M1 не вырабатывается когда идёт считываение
> immediate-данных из инструкций? А то вдруг.

Похоже, таки, нет

Изображение


по опкодам, вроде, так выходит, на фрагменте

ld (hl),$02
dec hl
cp h
jrnz $FA
#52
19:15, 7 мар. 2019

Делo в том, что не нужно путать назначение вывода M1.
Сигнал сообщает о выборке очередной инструкции, а не нахождении в поле инструкции.
Если бы M1 активировалось на период чтения полной инструкции, нельзя было бы отделить инструкции друг от друга вообще.

#53
19:55, 7 мар. 2019

0iStalker

Мда, жалко. Поискал немного в документации от самих Zilog...

Alikberov
> нельзя было бы отделить инструкции друг от друга вообще

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

#54
(Правка: 11 мар. 2019, 21:37) 21:29, 7 мар. 2019

Eсли делать «8-битный компьютер мечты» в XXI, обязательно ли пользоваться готовым железом?
Сейчас вполне можно эмулировать любую архитектуру с любым железом…
К сожалению, в сфере RISC у меня очень скудный опыт. Потому x80 у меня - CISC…
Но сейчас я risc'ну набросать RISC…

Допустим, все операции в нём сделать однобайтовые.

+ Вариант #1
+ Вариант #2

#55
(Правка: 11:23) 11:22, 14 мар. 2019

Данный процессор способен выполнить пока 140 инструкций:
00 - HALT
01…99 - Десятичное значение, помещаемое в регистр активного приёмника
0A - ADD (пока единственная операция АЛУ)
A1…A9 - Выбор ячейки регистра A
B1…B9 - Выбор ячейки регистра B
C1…C9 - Выбор ячейки регистра C
AA…AC - Выбор пары A,A / A,B / A,C
BA…BC - Выбор пары B,A / B,B / B,C
CA…CC - Выбор пары C,A / C,B / C,C
AD - Поместить значения выбранной пары в регистр адреса для доступа к памяти
BE - Прочитать память по адресу в активный регистр
BF - Записать значение активного регистра в память

Например:

0000 BA ; Выбор пары B,A
0001 B9 ; Выбор регистра B9
0002 64 ; Загрузить десятичное 64 (0x40) в регистр B9
0003 CB ; Выбор пары C,B
0004 C8 ; Выбор регистра C8
0005 30 ; Загрузить десятичное 30 (0x1E) в регистр C8
0006 AD ; Поместить в указатель адреса значения C8 и B9: Addr = (C8 << 8) | B9
0007 A1 ; Выбор регистра A1
0008 AB ; Выбор пары AB
0009 BE ; Прочитать память и сохранить данные: A1 = [Addr] или A1 = [0x1E40]
000A 00 ; Останов
Система команд, как и говорил выше, интуитивно понятная, где машинный код команды и является мнемоническим обозначением.

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

+ LogSim Исходники

#56
11:32, 14 мар. 2019

Alikberov
> Данный процессор способен выполнить пока 140 инструкций:

Это всё отлично,... но под готовый процессор уже есть готовый ассемблер и даже Си компилятор.  Вряд ли кто-то будет писать в маш. кодах, в 21 веке. Глубоко копаете, тащем-то.

#57
11:44, 14 мар. 2019

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

#58
(Правка: 12:11) 12:06, 14 мар. 2019

0iStalker
> растеризатор должен получать данные своевременно, причём, нужно понять какие из
> спрайтов понадобятся в этой строке

Да, так и есть, таблица спрайтов сканируется перед началом каждого сканлайна, определяются первые N (где N - мощность спрайтового железа per scanline) спрайтов (остальные отбрасываются), извлекаются изображения из таблицы тайлов для нужных их строк, размещаются в регистры-защёлки - к каждой прилагается еще вроде бы счётчик пикселей до него и начинается в цикле.
Фактически на каждый пиксель двумерного тайлового движка проводится анализ до N строчек пикселей из спрайтов.
В своё время это было намного дешевле, чем оперировать многобитным битмапом и подход рулил в 8/16-битную эпоху игровых автоматов и консолей.
Чтобы такое провернуть нередко таблица спрайтов располагалась в специальной зоне ОЗУ видеочипа которая полностью блокировалась на период VDraw. Т.е. даже в HBlank она была занята на определение активных спрайтов в последующей строке.
А вот в GBA можно было включить режим "свободного HBlank", когда можно было успеть поменять характеристики спрайтов по наступлению прерывания HBlank, но это уменьшало количество возможных спрайтов per scanline.
Но сейчас единственный хардварный спрайт - курсор мыши на экране.

#59
18:12, 14 мар. 2019

Alikberov

Насчёт процессора, я тоже думал,... но только в плане апгрейда того же 6502 или Z80, придумывать с нуля, ещё раз, то что придумали многократно, не особо интересно.

Страницы: 13 4 5 618 Следующая »
ФлеймФорумЖелезо