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

Блеск и нищета 8/16-битных консолей и ПК (23 стр)

Страницы: 122 23 24 2547 Следующая »
#330
(Правка: 15:32) 15:32, 28 июня 2018

Хаус
> какие книжки пересказываешь?

Ой да кучу разных и далеко не только книг.
Мой пост выше, например, прямо даёт ссылки на книгу откуда взят материал для него и спрессован в обзорную статью.
По компьютерам документация никогда и не пряталась - смотри да читай. Даже во времена последних версий DOS-а грязными пальцами лезть в порты ввода-вывода было само собой разумеющимся делом.
А еще лет 20 назад, в студенчестве, накачивая где то эмуляторов консолей я увидел с ними вместе документацию от создателей - им однозначно приходилось разбираться даже в закрытых платформах чтобы воссоздать и они тоже нет-нет, да публикуют накопанное в виде материалов.
Например берешь и пишешь в гуле "Sega Mega Drive memory map" - и вперёд, материалов миллион даже по закрытым вещам. Хотя иногда поискать приходится.

Так то я копаю по верхушкам, составляю обзорные статьи. Ну кроме случая реактивного введения в программирование игр на портативной консоли Nintendo Game Boy Advance - тут я перевёл, скомпилировал и переработал несколько источников, которые, впрочем, там указаны.


#331
19:49, 28 июня 2018

=A=L=X=

запости ещё как ты делал блиттинг на Delphi в стиле NES.

#332
9:43, 3 июля 2018
Изображение

Как то угрожающе звучит...

#333
10:48, 3 июля 2018

=A=L=X=

это что, у них был гайд по асму - вот это было угрожающе

#334
(Правка: 13:18) 12:57, 15 июля 2018

Дошли таки руки скомпилировать знания про IBM-704 в нечто типа статьи. По идее в данной теме это оффтоп и возможно даже он ляжет в основание цикла "легенды", но не факт, поэтому пока тут.

Архитектура IBM-704

IBM-704 - компьютер-легенда. С ним связано сразу несколько прорывов в области IT.
Во первых - это был первый компьютер с аппаратной поддержкой плавающей точки в широкой продаже.
Под "широкой продажей" тут понимается "больше 100 штук", т.к. мы всё-таки говорим о "больших ЭВМ", физически занимавших этаж здания и представленных на рынке в 1954 году.
Основным радиотехническим элементом машины была электронная лампа, а память была основана на магнитных сердечниках - поэтому мы так же говорим о дотранзисторной эпохе.

Во вторых - на этой машине был разработан язык программирования Fortran - чему способствовала её "научная архитектура".
Ну и в третьих - на этой машине был разработан язык программирования Lisp и архитектура IBM-704 даже оставила в нём навечно один характерный отпечаток, о чём я повторю википедию много ниже.

Машинное слово IBM-704 было 36-битным. 8-битными байтами здесь даже еще не пахло.
В базовой комплектации в машине было 8192 ячеек 36-битной памяти, но максимально под шину адреса было отведено 15 бит, то есть максимально можно было адресовать 32768 ячеек 36-битной памяти, что эквивалентно 147456 байтам. Адресное пространство было не просто единым для кода и данных, но сама архитектура настаивала на самомодифицирующемся коде, под что были специальные инструкции и специальные форматы данных (что и оставило отпечаток на лиспе).

Регистры:
AC - аккумулятор (36 бит)
MQ - вспомогательный регистр множитель/делитель (multiplier-quotinent) (36 бит)
ILC - счётчик инструкций (instruction location counter) (15 бит)
IR1, IR2, IR4 - индексные регистры (15 бит), названия их как видно сформированы как значения числа из трёх соответствующих бит, и это так и есть, это упрощало их комбинацию в инструкциях
Выделялись так же флаги PF и QF, а нулевой бит аккумулятора AC[0] обозначается часто как флаг знака SF.
Надо заметить, что битовое представление отрицательных целых чисел тут было то ли в прямом то ли в обратном коде, но не в дополнении до двух, то есть бит знака и число позволяли описывать как +0 так и -0, что иногда требовалось учитывать в коде, т.к. +0 считался числом большим, чем -0 при сравнениях. Вещественные числа тоже как понятно были 36-битные и проходили через те же регистры, что и целочисленные - формат данного подразумевался из инструкций.

Почти все инструкции (как понятно всегда 36-битные) содержали 15 бит "адресного поля" (ADDR), что позволяло в каждой из них сослаться на одну из ячеек памяти. Поэтому архитектура инструкций была "регистр-память", как и в много более позднем 8-битном семействе Motorola/MOS почти каждая инструкция в качестве аргумента брала ячейку памяти. Для косвенных адресаций применялся следующий принцип - 3 бита в каждой инструкции отводились под "маску индексов" - если один индексных битов в инструкции был зажжён, то из поля ADDR вычиталось содержимое соответствующего индексного регистра для формирования адреса ячейки. Более того, если были указаны сразу несколько индексных бит, то вычитаемое формировалось как логический OR соответствующих индексных регистров, что позволяло адресовать многомерные массивы размеры измерений которых были кратны степеням двойки.
Ряд инструкций (ровно 6 штук) содержал так же 15 бит "поля декремента" (DECR), что это и зачем это - я расскажу ниже, но главное - что был ряд инструкций позволяющий независимо сохранять и загружать поля ADDR и DECR в/из памяти. Это прежде всего нужно было для модификации кода этих самых шести индексных инструкций. В этих индексных инструкциях я и увидел ту "мякотку" и "архаизм" который и захотелось поднять эту архитектуру на свет.

Инструкций довольно много, машину никак нельзя назвать аскетичной - отыгрались инженеры вовсю.

Далее я закатываю под спойлер кратчайшие описания основного блока инструкций IBM-704:

Обозначения:
M - ячейка памяти задаваемая в инструкции в поле ADDR
N - число от 0 до 256 так же хранимое в ADDR для сдвиговых инструкций

+ ОСНОВНОЙ БЛОК ИНСТРУКЦИЙ

#335
(Правка: 13:19) 12:57, 15 июля 2018
+ ОСНОВНОЙ БЛОК ИНСТРУКЦИЙ - продолжение

Забавны такие моменты, как например то, что загрузка аккумулятора из памяти называется CLEAR AND ADD, то есть аккумулятор очищается, а потом к получившемуся нулю прибавляется ячейка памяти - вместо LOAD пишется именно так. Скорее всего потому что это было именно то, что происходило под капотом.
Такие инструкции как STD M или STA M как раз позволяют, например, сохранить в биты ADDR или DECR ячейки памяти такие же биты из аккумулятора - эти и другие инструкции позволяют относится к 36-битным ячейкам памяти как к запакованным структурам из двух полей ADDR и DECR, чьи размеры позволяют адресовать любую ячейку памяти.
Именно это и делал язык Lisp появившийся на этой платформе и поэтому его реализация списков функции соответствующие head/tail называются CAR/CDR.
На самом деле это аббревиатуры от "Contents of the Address part of Register и "Contents of the Decrement part of Register", то есть как раз поля ADDR/DECR. Надо заметить что под "register", то есть регистром в этой архаичной уже терминологии имелись ввиду ячейки памяти.
Как видно инструкций довольно много и большинство из них "по делу". Однако самую мякотку, как я уже говорил, составляют "индексные инструкции", о чём чуть позже...

(продолжение следует)

#336
(Правка: 16 июля 2018, 6:43) 12:58, 15 июля 2018

Итак, индексные инструкции представлены двумя группами. Первая про пересылку данных с индесными регистрами:

LXA M, I  ; I = M.ADDR, загружает в индексный регистр I адресную часть из 
    ; ячейки памяти M (Load indeX from Address)
LXD M, I  ; I = M.DECR, загружает в индексный регистр I декрементную часть 
    ; из ячейки памяти M (Load indeX from Decrement)
SXD M, I  ; M.DECR = I, загружает в декрементную часть ячейки памяти M 
    ; индексный регистр I (Store indeX to Decrement)
PAX 0, I  ; I = AC.ADDR (Place Address in indeX)
PDX 0, I  ; I = AC.DECR (Place Decrement in indeX)
PXD 0, I  ; AC = 0, AC.DECR = I (Place indeX in Decrement)
    ; Остальные компоненты регистров или адреса остаются неизменными кроме 
    ; инструкции PXD. Инструкции PAX, PDX, PXD игнорируют 
    ; адресную часть своей команды.

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

TIX M, I, D  ; Если I > D, то уменьшаем I на D и переходим на M, иначе переходим 
    ; на следующую инструкцию (Transfer on IndeX)
TNX M, I, D  ; Если I > D, то уменьшаем I на D и переходим на следующую 
    ; инструкцию, иначе переходим на M (Transfer on No indeX)
TXH M, I, D  ; Если I > D, то переходим на M (Transfer on indeX High)
TXL M, I, D  ; Если I <= D, то переходим на M (Transfer on indeX Low or equal)
TXI M, I, D  ; Увеличиваем I на D и переходим на M (Transfer with indeX Increased)

Как раз эти шесть инструкций имеют в своём 36-битном коде поле DECR, которое в командах обозначено как D. Предполагалось, что с помощью этих команд будут организовываться циклы по ячейкам памяти - обход массивов. Несмотря на то, что было еще более десятка условных переходов в зависимости от самых разных флагов, но в дополнение к ним были сделаны еще эти, ныне выглядящие довольно архаично, инструкции.

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

#337
16:25, 15 июля 2018

Формат самой плавучки расскажи, а?

#338
17:06, 15 июля 2018

FordPerfect

Весьма стандарто, насколько я помню, всмысле 8 бит на экспоненту которая записана положительным целым числом из которого надо вычесть 128 для получения значения настоящей экспоненты, остальные биты - мантисса, так же предполагается что нормализованная поэтому первый единичный всегда бит заменен знаком бита. У мегя просто свет отключили пишу со смарта как помню. В любом случае 36 ьит точнее современного float.

#339
(Правка: 7:27) 6:43, 16 июля 2018

Дописал про IBM-704.
P.S.
И еще глянул краем глаза на доки по IBM-701 - это вообще первый ламповый компьютер фирмы IBM. Архитектура и система команд действительно очень похожа на 704, по большей части просто отсутствует вещественная арифметика, индексация и всё с ними связанное - в результате там только 32 инструкции, в то время как в IBM-704 их 87. Но всё остальное крайне похоже - 36-битное слово, регистры AC и MQ и т.п.

#340
(Правка: 14:08) 12:37, 16 июля 2018

На забавные факты наткнулся:
IBM в 1964 году анонсировала долгоиграющую древнюю линейку мейнфреймов System/360.
ЭВМ стали тоже легендарные, они, например, ввели и начали закреплять 8-битный байт. Причём до System/360 во всех документациях к компьютерам почти всегда писали "компьютерные" числа в 8-ричной системе исчисления и именно в System/360 документация содержала только 16-ричные коды и к моменту появления микропроцессоров и микрокомпьютеров они практически выжили 8-ричную систему в связи опять таки с удобством того как они ложилось на байты.
Так вот IBM пришлось вложить в разработку System/360... $5 млрд в ценах тех лет, что по сегодняшнему курсу с учётом инфляции составляет все $30 млрд и фактически это делало этот проект вторым по стоимости НТР-проектом 60-ых годов после полёта на Луну!
Более того, архитектура System/360 прошла последовательное развитие с сохранением обратной совместимости и жива до сих пор и ныне в линейке серверов IBM zSeries! 54 года обратной совместимости!
Архитектура, впрочем, довольно зрелая, так что неудивительно - 16 32-битных равноправных регистров общего назначения и 24-битная шина адреса в System/360 поступили в продажу еще в 1964 году!

#341
17:29, 16 июля 2018

=A=L=X=
System/360 похоже первой ввела концепцию Instruction Set Architecture.
А ещё z/Architecture умеет в quad-precision.

#342
18:32, 16 июля 2018

FordPerfect
> System/360 похоже первой ввела концепцию Instruction Set Architecture.

Ну тут смысл в том наверное только лишь, что за $5 млрд. инженеры придумали архитектуру широкого спектра под все случаи жизни - модульная архитектура позволяла апгредить как периферию так и процессорные блоки сохраняя программную совместимость между решениями весьма разных ценовых сегментов. В результате получился твердотельный принцип обратной совместимости и отделение концепции набора инструкций от конкретной машины - сразу всё проектировалось на вырост.
Видимо в 1964-ом году это было еще в новинку, и, как я понял, взять даже две архитектуры IBM вроде бы одной серии 700 которые я упоминал выше - IBM-701 и IBM-704, вторая не только расширяла первую, но и выкидывала какие то показавшиеся уже ненужными команды - то есть намеренно или нет, но несмотря на одно семейство не было обратной совместимости. Просто машины были крайне похожи, но каждая обладала своими блекджеками.

#343
22:57, 16 июля 2018

=A=L=X=
> Весьма стандарто, насколько я помню

+ Показать

( http://www.quadibloc.com/comp/cp0201.htm )
Ведущий бит вроде явный.
Но это только формат, семантика тоже интересна.

Ты откуда инфу брал конкретно по IBM-704?

#344
(Правка: 4:24) 3:53, 17 июля 2018

FordPerfect
В англовики одна из первых ссылок после статьи на скан официальной документации от изготовителя: http://bitsavers.org/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf

Страницы: 122 23 24 2547 Следующая »
ФлеймФорумЖелезо