PDA

Просмотр полной версии : В чем смысл раздельных областей программы и данных



CodeMaster
31.05.2010, 21:43
То же решил задать тупой вопрос в этом разделе ;-) Помню впервые это понятие встретил в руководстве по клону именно Спектрума, вот до сих пор мучит этот вопрос :-) Сам-то я в основном на БК работал, там всё ОЗУ кроме стека было сквозным и данные были в перемешку с кодом. Это зависит от архитектуры проца или машины в целом?

IanPo
31.05.2010, 21:58
В Спеке тоже можно все вперемешку.
Разделение кода и данных - просто хороший тон программирования.
Если речь про архитектуру, то Гугли это:
Архитектура фон Неймана
Гарвардская архитектура

Keeper
31.05.2010, 23:08
Имеется ввиду то, что данные не могут быть исполняемыми :) Например, в процах архитектуры x86 начиная с 286 в защищенном режиме попытка, скажем, перехода (JMP) в сегмент данных вызовет исключение...


Это зависит от архитектуры проца или машины в целом?

В основном от архитектуры проца. Z80, например, позволяет отделить опкоды от всего остального (хотя это и не совсем то о чем Вы спрашиваете), но в спектруме это не используется (разве что в видеопроцессоре ZX-NEXT :) ).


Архитектура фон Неймана
Гарвардская архитектура

Это не совсем то (или совсем не то :) ). Гарвардская архитектура требует отдельной шины для команд и отдельной шины для данных. В Фон Неймановской используется общая шина для команд и данных.

IanPo
31.05.2010, 23:18
Имеется ввиду то, что данные не могут быть исполняемыми
Z80 аполитичен, что данные, что код: что подсунут на адрес исполнения, то и исполняет.

Vadim
01.06.2010, 06:34
В чем смысл раздельных областей программы и данных

В современных процах - что бы в область данных не подсунули вредоносный код, которому потом передадут управление. В старых процах типа z80, 6502, 8086 процессор аппаратно не отличает коды и данные, ему по барабану что исполнять. В процессорах типа i8035 коды программ физически отделены от данных, есть два адресных пространства которые не пересекаются. Адрес 0 для кода это одно, для данных - другое. Т.е. что я хочу сказать, почти все современные компы построены по архитектуре фон-неймана, включая пентиумы все. Просто, как уже было сказано выше, разделять их можно логически для удобства, как правило хорошего тона. Кроме того процы начиная с 80286 стали позволять помечать определенные сегменты как сегменты данных, для исключения их выполнения (по ошибке). Это как бы некий такой уровень защиты. А где вы увидели о разделении данных и кода именно в ключе спектрума, не знаю. Скорее всего из наставлений Инфоркома или из перепечаток интервью с западными программистами. На Z80 можно делать как душа пожелает. Только вот аппаратно пометить сегмент данных или стека не удастся. В Z280 только такие средства появились.

CodeMaster
01.06.2010, 07:10
А где вы увидели о разделении данных и кода именно в ключе спектрума, не знаю.

Если найду эту книгу, скажу. Мне кааца, это было в разделе описАния комманд.

Keeper
01.06.2010, 09:06
Z80 аполитичен, что данные, что код: что подсунут на адрес исполнения, то и исполняет.


На Z80 можно делать как душа пожелает. Только вот аппаратно пометить сегмент данных или стека не удастся.

Повторюсь, у Z80 есть сигнал /M1 который позволяет аппаратно отделить опкоды от всего остального, т.е. Z80 фактически может адресовать 128Кб, по 64Кб опкодов и данных. Другой вопрос что это практически нигде не используется. Единственный спектрум в котором эта возможность используется это ZX-NEXT и то в видеопроцессоре, там сигнал /M1 видеопроцессора заведен на адресную линию ПЗУ и соответственно имеется два независимых адресных пространства.

CodeMaster
01.06.2010, 18:00
Повторюсь, у Z80 есть сигнал /M1 который позволяет аппаратно отделить опкоды от всего остального, т.е. Z80 фактически может адресовать 128Кб, по 64Кб опкодов и данных.

Скорее всего именно про это я и читал.

ZEK
01.06.2010, 18:09
овторюсь, у Z80 есть сигнал /M1 который позволяет аппаратно отделить опкоды от всего остального
А току от него, опкод читаем из области с кодами, аргументы из области данных???

Vadim
03.06.2010, 08:14
т.е. Z80 фактически может адресовать 128Кб, по 64Кб опкодов и данных.
Чушь. Полнейшая охинея!!!! Сигнал М1 что означает? Читать доки умеем? МАШИННЫЙ цикл. Что это? А? Выборка кода операции (КОП) и не более того! Следующие за машинным циклом циклы не стробируются М1!!!! Z80 сам по себе не может отличить коды команд от данных, память одна. 65536 ячеек адресного пространства. Отделяются они программистом, который заранее построит программу так, что бы проц не стал "выполнять" данные.

Что за детский сад? Откуда столько глупостей пишите? Я в шоке просто!!! Читайте книги по Z80, Спектруму и не пишите бреда!

Keeper
03.06.2010, 08:42
Чушь. Полнейшая охинея!!!! Сигнал М1 что означает? Читать доки умеем? МАШИННЫЙ цикл. Что это? А? Выборка кода операции (КОП) и не более того!


Следующие за машинным циклом циклы не стробируются М1!!!! Z80 сам по себе не может отличить коды команд от данных, память одна.

Взаимоисключающие параграфы? :v2_lol::v2_lol::v2_lol: Курим схему компьютера ZX-NEXT на досуге...

---------- Post added at 07:42 ---------- Previous post was at 07:35 ----------

Кстати, неплохой повод пофлемить, а зачем же тогда прилепили это недоразумение к Z80? Могли бы просто вывести какой нибудь сигнал /IAK например чтоб подтверждать прерывания :v2_laugh:

ZEK
03.06.2010, 09:46
стати, неплохой повод пофлемить, а зачем же тогда прилепили это недоразумение к Z80?
Смахивает на попытку развить тему сопроцессора

Vadim
03.06.2010, 11:57
Курим схему компьютера ZX-NEXT на досуге...

Я уже говорил выше. Читайте доки. Я знаю о сигналах Z80 уже лет так 15 наверное. Если использовать сигнал М1 для выборки из другой памяти, то дальнешие коды команды он получит из основного (не по М1) ОЗУ. И что будет? Бред будет. Сидите и смейтесь дальше.

---------- Post added at 13:37 ---------- Previous post was at 13:34 ----------


Взаимоисключающие параграфы?

Где? Как взаимоисключающие? КОП состоит из ОДНОГО байта. ОДНОГО. А вся команда может содержать до 4-х байт. КОП идет первым. Я не понимаю Keeper, сложно что ли было открыть книгу по Z80? Или как? Зачем вынуждаете меня писать прописные истины? Может ещё будем рассуждать сколько бит в байте?

P.S. Хотя для справедливости ради и что бы другие тут не стали выезжать и гнуть пальцы, скажу, что если первый байт окажется префиксом, то Z80 генерирует второй машинный цикл подтверждая его сигналом /M1. Дополнительный байты в команде сигналом M1 НЕ стробируются.

---------- Post added at 13:57 ---------- Previous post was at 13:37 ----------

P.S. http://trd.speccy.cz/book/Z80CPU.ZIP - курим главу 4.

Keeper
03.06.2010, 12:02
Где? Как взаимоисключающие?

Я так и не понял может Z80 отделить КОП (я это назвал опкод в своих постах) от всего остального или нет?


Я уже говорил выше. Читайте доки. Я знаю о сигналах Z80 уже лет так 15 наверное. Если использовать сигнал М1 для выборки из другой памяти, то дальнешие коды команды он получит из основного (не по М1) ОЗУ. И что будет? Бред будет. Сидите и смейтесь дальше.

Я уже говорил выше, Вам стОит посмотреть схему ZX-NEXTa, а не читать доки на Z80.

psb
03.06.2010, 12:11
короче, отделить-то можно, но смысла НЕТ.

например, LD A,(#1234).
1. читается код команды LD A,(...) c M1
2. читается мл. байт адреса БЕЗ М1 по следующему адресу
3. читается ст. байт адреса БЕЗ М1 по следующему адресу

итого, разделите память по М1 и жить станет очень весело:)

Vadim
03.06.2010, 12:13
Я так и не понял может Z80 отделить КОП (я это назвал опкод в своих постах) от всего остального или нет?

Z80 стробирует первый машинный цикл, читайте доки! Он называется M1. Команда состоит от одного до 4-х байт. Код команды всегда занимает один байт и от 1 до 3-х байт - параметры команды, префикс не считается командой, это как-бы псевдокоманда. Таким образом если у нас есть команда ld hl,1234h, то в памяти она выглядит как
hex:
21 - при считывании стробируется низким уровнем на выходе M1
34
12
Используется зачем - написано в доке. Для подтверждения прерывания совместно с iorq, для указания внешним схема что он приступил к выборке следующего КОП. По его спаду (переходу в 1), по сигналу /RFSH производится регенерация динамического ОЗУ. Более того, цикл чтения КОП более короткий нежели простые циклы чтения. И именно этот сигнал используется в Профи версии 5, что бы вставить после него такт ожидания в турборежиме, удлиняя его (выборку КОП) с 3-х тактов до 4-х.
По схеме ZX-Next скажу вот что, пока я ее не смотрел (не было у меня ее), найду скачаю - погляжу. Уверен, что ни каких 2-х разных 64К пространствах там нет. Скорее всего все совсем иначе. M1 используется для других целей (т.к. второй Z80 там используется в схеме видеоконтроллера).

Keeper
03.06.2010, 12:13
короче, отделить-то можно, но смысла НЕТ.

Вот не надо подсказывать ;) Речь ведь шла о возможности, а не о целесообразности :)

Vadim
03.06.2010, 12:14
короче, отделить-то можно, но смысла НЕТ.

Он хотел отделить всю команду, что бы можно было программу читать из одного банка памяти, а данные из другого. Т.к. называемая гарвардская архитектура. На Z80 это сделать Нельзя!

Keeper
03.06.2010, 12:20
Используется зачем - написано в доке. Для подтверждения прерывания совместно с iorq

И не только, читайте доки до конца, смотреть диаграммы Power-Down Acknowledge и Power-Down Release


По его спаду (переходу в 1), по сигналу /RFSH производится регенерация динамического ОЗУ.

Это что-то новое: /MREQ = 0, /RFSH = 0


Более того, цикл чтения КОП более короткий нежели простые циклы чтения. И именно этот сигнал используется в Профи версии 5, что бы вставить после него такт ожидания в турборежиме, удлиняя его (выборку КОП) с 3-х тактов до 4-х.

Наверное все-таки с 2 до 3...


По схеме ZX-Next скажу вот что, пока я ее не смотрел (не было у меня ее), найду скачаю - погляжу

Сейчас посмотрю, у меня где-то есть...

Keeper
03.06.2010, 12:22
Схема...

Keeper
03.06.2010, 12:24
Он хотел отделить всю команду

Вот это уже принципиально, где я писал про всю команду? Ссылку в студию!

Vadim
03.06.2010, 12:31
Это что-то новое: /MREQ = 0, /RFSH = 0

"По его спаду" - когда М1 перейдет из активного (0), в неактивное (1) состояние. См. диаграммы работы z80 ничего нового я не сказал, всё тоже самое только другими словами.

---------- Post added at 14:31 ---------- Previous post was at 14:27 ----------


Повторюсь, у Z80 есть сигнал /M1 который позволяет аппаратно отделить опкоды от всего остального, т.е. Z80 фактически может адресовать 128Кб, по 64Кб опкодов и данных.

Что это означает? Если мы разбираемся в схемотехнике и программировании, то нам становится ясно зачем сделаны эти выводы. Мы хотим поместить программу в одну память, а данные которые она обрабатывает в другую, которые между собой вообще никак не связаны. Получим 64К адресное пространство команд и 64К адресное пространство данных.
Я уже устал повторять, что на Z80 это _НЕ_ возможно. Ну указывает он при выборке команды сигналом m1 что КОП выбирает, и что? Зачем используется - уже написал выше. Если по этому сигналу переключать память и читать код из другой памяти, то выйдет чушь, что справедливо заметил ZEK, в посте номер 9.

Keeper
03.06.2010, 12:34
.
18248
18247

Vitamin
03.06.2010, 12:34
Я каэшн, дико извиняюсь, но, если я правильно понял, при выполнении следующего кода:


addr:
ld a,#10
ld bc,#1234


из кодового сегмента будет делаться выборка по адресам addr и addr+2, а из сегмента данных по адресам addr+1,addr+3,addr+4.

И в чем здесь сокровенный смысл?

Keeper
03.06.2010, 12:37
у Z80 есть сигнал /M1 который позволяет аппаратно отделить опкоды от всего остального

Да, я то слегка подустал, выделил жирным шрифтом... И там же я сделал ссылку на клон спекки где это используется...

Vadim
03.06.2010, 12:39
Для понимания как там работает zx-next ещё бы прошивку к ПЗУ тому. Ясно что первую команду он выберет из адреса 0, если команды однобайтные то A10 будет при выборке команд всегда в 0, а вот когда появляются параметры у команд, то A10=M1 станет равным 1, зачем это сделано я не понимаю пока.

Keeper
03.06.2010, 12:40
И в чем здесь сокровенный смысл?
.

Использование сигнала М1 тоже не являлось защитой. Причина, по которой сделано именно так в том, что на адресных линиях Z80 в видиопроцессоре ZX-Next формируются различные сигналы. Поэтому, занимать лишние адреса под память видеопроцессора было нельзя. Их и так не хватало. Но меньшее число адресов означает меньший объем адресуемой памяти, а это тоже ограничение (на объем ПЗУ).
Решение с M1 позволяло использовать память команд и данных отдельно. То есть Z80 в такой схеме может адресовать 64К команд плюс 64К данных. Как способ расширения адресуемой памяти в ZX Spectum это не годится. Но для видеопроцессора такое решение очень подходило.

---------------------------------------------------

Опять таки выделил жирным...

Vadim
03.06.2010, 12:41
И там же я сделал ссылку на клон спекки где это используется...
Там нет и намёка на 128К и 2 разных адресных пространства. Извините. Смотрю схему, думаю. Сделано хитро, но почему так? Из принципа? Для чего это? Что это даёт? схема стала проще? Быстрее? Гибче? Прошивку надо ещё глядеть что бы сделать выводы. Пока это просто экзотическое решение.

Keeper
03.06.2010, 12:43
Vadim, это цитата разработчика ZX-NEXT...

Vadim
03.06.2010, 12:47
Vadim, это цитата разработчика ZX-NEXT...

Вижу. Но я вижу и схему. Два по 64К не сделать. Вернее можно конечно подставлять 2 ПЗУ, хаотично переключаться между ними по М1. Но для создания компа в котором бы выполнялись программы и были бы данные это не подходит Конан и пишет об этом. Вообще мне непонятно зачем было принято такое решение о применении Z80 в таком ключе? Смотрю и не понимаю. Микроскопом гвозди забивать....

Keeper
03.06.2010, 12:52
Микроскопом гвозди забивать....

На то время, в принципе понятно, проще разводка, меньше микросхем, дешевле плата и как бонус защита от копирования (ПЗУ видеопроцессора)


Два по 64К не сделать.

Это да, "полноценных" (где заняты все байты) не получиться, ИМХО

Vadim
03.06.2010, 13:04
На то время, в принципе понятно, проще разводка, меньше микросхем, дешевле плата и как бонус защита от копирования (ПЗУ видеопроцессора)

На то время это было не лучшим решением, а на мой взгляд худшим. Смотрим схему профи, хоть 3.x -5.x. На плате видеоконтроллер занимает не больше места, если и больше то процентов на 10. При этом не использует дорогой на то время Z80.
А как защита ПЗУ не годится. Выпаиваем и считываем. ПЗУ на профи не было защитой, а являлось элементом "конечного автомата" который мы могли программировать, а точнее плавно менять параметры сигналов INT и синхронизации и ещё кое-чего.

Keeper
03.06.2010, 13:14
На то время это было не лучшим решением...

http://zx.pk.ru/showthread.php?t=112
http://zx.pk.ru/showthread.php?t=7577

Если осилите эти два топика, думаю, вопросов станет меньше, или же наоборот, больше но в любом случае будет полезно...

psb
03.06.2010, 13:30
ну, реально, конечно, разделить на 2 памяти по 64к можно, если нагородить огород:) поставив плисину и загнав в нее логику с длинами команд - это более чем реально, но монструозно. и М1, кстати, здесь вполне сгодится. наверное;)

Vadim
03.06.2010, 13:49
Ясно ясно. Conan описывает метод взлома плавающих битов. Я бы так делать не стал сразу. Раз программа - стал бы дизассемблировать, хотя бы те куски которые читаются стабильно. Плавающих битов быть много не должно и 1000 раз считывать было бы не нужно. А вообще теперь ясно зачем всё это делалось. Но вот ведь как вышло. ZX-Next самый малочисленный клон из-за защиты от копирования.

---------- Post added at 15:49 ---------- Previous post was at 15:35 ----------


На то время, в принципе понятно, проще разводка, меньше микросхем, дешевле плата и как бонус защита от копирования (ПЗУ видеопроцессора)

Прочитав половину первого топика могу сказать, что выбор такой схемы был по нескольким причинам, но главная это защита от копирования (о которой я раньше не знал, т.к. инфы о zx-next особо не было) и уж потом уменьшение деталей на плате. Если бы я знал о том, что в ZX-Next была защита от копирования ПЗУ видеоконтроллера, то и вопросов бы не возникло;-) В топике писали что типа её не взломать. Взломать можно. Распечатав листинг программы и много думая, отладчик не поможет, отлаживать придется в голове, придется и циклы расписать. О чем там Чунин Роман и говорит частенько. Читаем доки по Z80 и в путь. Работа сложная но не невыполнимая. Можно взломать это ПЗУ и сделать модификацию без плавающих битов. Это реально.

Keeper
03.06.2010, 14:09
Можно взломать это ПЗУ и сделать модификацию без плавающих битов. Это реально.

Взломать можно все, это вопрос времени и актуальности. Т.к. у меня нет ни плат ни эмулятора, то и смысла заниматься этим нет, результат проверить негде. Если БК все же пришлет набор плат, то тогда и продолжу начатые ранее ковыряния, тем более имеющаяся прошивка видео-контроллера позволяет проверить работоспособность компьютера.

Conan
03.06.2010, 14:47
Я каэшн, дико извиняюсь, но, если я правильно понял, при выполнении следующего кода:


addr:
ld a,#10
ld bc,#1234
из кодового сегмента будет делаться выборка по адресам addr и addr+2, а из сегмента данных по адресам addr+1,addr+3,addr+4.

И в чем здесь сокровенный смысл?
К примеру, требуется выполнить вот такой код:
LD A, (BC)
LD HL, (nn)
LD I, A
JP (HL)
используя только три разряда (A0-A2) шины адреса Z80.

В любом случае для него потребуется (байт):
1 + 1
3 + 2
2
1
Итого: 10 байт памяти. Из них 7 байт кодов операций (команд) и 3 байта данных. То есть в общем пространстве комманд-данных адресовать его тремя разрядами (A0-A2) шины адреса Z80 невозможно.

Теперь разделим пространство команд и данных на две части (сигналом M1). Получим адресумемые 8 байт для команд и 8 байт для данных. Размещаем необходимые данные для команды:
LD A, (BC)
"под": JP (HL)
(BC указывает на адрес в сегменте данных, по которому в сегменте кода находится: JP (HL))

а для команды:
LD HL, (nn)
"под": LD A, (BC) и (первым байтом) LD HL, (nn)
(nn указывает на адрес в сегменте данных, по которому в сегменте кода находится: LD A, (BC))

В итоге получили возможность исполнять этот код, используя всего три разряда адреса шины адреса.

Разумеется, остались незанятыми (из 16 байт) 3 байта в сегменте команд (между LD HL, (nn) и LD I, A) и после JP (HL) и 5 байт в сегменте данных. Но для чего их использовать всегда находилось ;).

---------- Post added at 14:47 ---------- Previous post was at 14:20 ----------


Вообще мне непонятно зачем было принято такое решение о применении Z80 в таком ключе? Смотрю и не понимаю.Объясняю. В начале 90-х какой клон спека был самым популярным? Ага. "Ленинград 1". Почему? У него же инт кривой, вейты, адресация портов неправильная, системной шины нет, видеосигналы непойми какие. Одно недоразумение. Что же получается, люди были дураками? Ан нет. Дело в том, что в "Ленинграде 1" используется всего 41 (сорок одна) микросхема. При цене в среднем 3 рубля за корпус, получалось 123 рубля. Зарплата молодого инженера. И это самое дешевое. А если собирать "Москву 48", то это уже 68 корпусов. Да еще приходилось кондючки подбирать, что бы заработало.

Как сократить кол-во микросхем? В те годы ни циклонов ни альтер не было. Заказать БИС на БМК стоило слишком дорого. А Z80 продавались по 30 рублей. То есть, как десяток обычных микросхем.

В ZX-NEXT в минимальной конфигурации 36 микросхем + еще один Z80. Итого на 15 рублей (тех денег) дороже "Ленинград 1", но:
видеосигналы идеальные,
потры (включая #FF) корректные, инт на месте,
никаких вейтов,
возможности расширения большие (4/5 слотов),
настраивать (подбирать кондючки резючки) не надо.

И всего то потому, что второй Z80 с программой заменил кучку мелкой неизменяемой логики.

Vadim
03.06.2010, 15:42
Conan, теперь многое ясно, но всё же. Микросхемы были не так дёшевы, помнится набор плата+детали в том же 89-м году для ленинграда-1 стоил 500-650р. Дешевле не было просто. В 1990-м около 800-900р. Микросхем в магазинах в нашем городе вообще не было, купить их было нереально. А реализация видеоконтроллера на счетчиках+прошивка ПЗУ более легкая и не менее правильная. Писать прошивку для zx-next чрезвычайно трудоёмкое занятие. На западе бы такими вещами думаю не стал бы заниматься. В плане защиты, думаю это была самая сильная защита из аппаратных на то время.

Conan
03.06.2010, 17:03
Микросхемы были не так дёшевы, помнится набор плата+детали в том же 89-м году для ленинграда-1 стоил 500-650р. Дешевле не было просто. В 1990-м около 800-900р. Микросхем в магазинах в нашем городе вообще не было, купить их было нереально.В наборы входили процессоры, ПЗУ, платы, мелочевка. На форуме уже обсуждали их стоимость, поищите. В вашем городе может так дорого продавали наборы, потому, что не было радиорынка. Хотя даже на Тушинском радионынке в Москве наборы продавали дороже, чем можно было купить по отдельности. Потому, что набор покупаешь у одного человека, а за рассыпухой еще побегать надо. Хотя цены колебались, в зависимости от доступности, наглости продавца, инфляции и т.д. В Питере было относительно стабильно и дешево, потому, что там радиорынок (в Автово) работал. А в Москве до весны 1991 радиорынка по сути не было. Гоняли радиолюбителей милицией. Попробуй при этом купи подешевле. Хватали абы что и по любой цене. Вот и колебались цены но самые низкие были именно летом 1991 года. Тогда мелочевка упала до 2-3-х рублей за корпус (ЛА, ЛЕ, ЛЛ и т.д.). А до этого стоили и по 5 рублей и по 10 (за редкие позиции типа КР580ВА86).


А реализация видеоконтроллера на счетчиках+прошивка ПЗУ более легкая и не менее правильная. Писать прошивку для zx-next чрезвычайно трудоёмкое занятие. На западе бы такими вещами думаю не стал бы заниматься. В плане защиты, думаю это была самая сильная защита из аппаратных на то время.
До сих пор нерасколотая ;). Хотя кто только не брался и КОЕ и JTN и т.д. Что касается трудоемкости, это правда, примерно как сборка головоломки. Зато интересно.
У реализации решения ПЗУ+счетчики есть свои плюсы и есть минусы. Впервые это решение появилось в "Красногорске" (не самом популярном клоне), а затем Михаил Яцык использовал его в "Профи". Леонид Ермаков (мой напарник по разработке ZX-NEXT) был знаком с Яцыком и оценивал его разработки весьма высоко. Но для ZX-NEXT решение ПЗУ+счетчики не подходило потому, что требовалось помимо видеосигналов и INT-а формировать еще адреса видеовыборки из ОЗУ (для перекючения между видеорежимо спека и CGA), изменять (уменьшать) период регенерации (что бы надежно работало), формировать медленные сигналы (FLASH). На ПЗУ+счетчики этого было не реализовать, пришлось бы устанавливать множетство микросхем дополнительно. И разумеется, защитить хотелось (хотя бы на первое время). С тем же "Профи" вышла нехорошая история, когда две фирмы потом его не поделили, а некоторым покупателям в случае проблем отказывали в поддержке (потому, что купил плату не их).
Что касается "на западе так бы не делали", так на западе в то время и фирменные ZX-ы уже прекратили выпускать. А если говорить про "плавающие" ячейки, так Intel по той же технологии ПЗУ выпускать стал, на 8 лет позже, чем они заработали в ZX-NEXT.

---------- Post added at 17:03 ---------- Previous post was at 16:35 ----------


ну, реально, конечно, разделить на 2 памяти по 64к можно, если нагородить огород:) поставив плисину и загнав в нее логику с длинами команд - это более чем реально, но монструозно. и М1, кстати, здесь вполне сгодится. наверное;)А кстати курьезная штука получилась бы. С обычным спеком совместимая но с дополнительными фичами:
между имеющимеся командами можно еще команд наставить (в одном линейном адресном пространстве команд две разные программы, в зависимости от того с какого места стартовать) и данные под инструкциями прятать другие. Но программировать в такой среде - жуть.

Vadim
04.06.2010, 07:03
С тем же "Профи" вышла нехорошая история, когда две фирмы потом его не поделили, а некоторым покупателям в случае проблем отказывали в поддержке (потому, что купил плату не их).

Да, я в курсе. Читал в доках по профи, Sayman искал разработчиков, тоже кое что узнал, да и на форуме тут была инфа.



Что касается "на западе так бы не делали",


До сих пор нерасколотая .

Я это понимаю, защита сделана хорошо, в ваших требованиях к разработке и фактах понятно что это было оптимальным решением (про CGA до недавнего времени не знал или забыл что был такой режим (сейчас только вспомнил, что в ZX-Форум была инфа тогда что есть видеорежим, но не был поддержан программно). Конечно на счетчиках+массив данных это не реализовать, я все понимаю, а своим высказыванием я хотел сказать вот что
1)Схема очень и очень сложная, это очень сложный конечный автомат, как клубок из которого торчат ниточки и дернув за каждую получаем некий результат который ещё и зависит от того что перед этим дергали. Академически это интересно, а вот практически... Сложно проектировать и создавать, ладно вы делали вдвоем, а если это компания где много сотрудников которые приходят и уходят, никто не поймет толком что и как. Т.е. разработка должна быть понятна и ясна, документирована. А тут сложная головоломка. При том, как я понимаю, возможности Z80 в ней практически исчерпаны, можно было взять и любой другой проц, важны состояния проца, режимы и кол-во выводов. Чем их больше - тем проще, не нужно использовать iorq m1 и прочее (как бы) не по делу. На западе все же сделали бы заказную мс. Да, я знаю что у нас это было нереально.


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

Я такие методы использовал. И видел как используют другие. Бывает очень выручает.

---------- Post added at 08:59 ---------- Previous post was at 08:49 ----------

2) Можно было бы сделать аналогичный функционал с т.з. пользователя (но без защиты от копирования) на другой элементной базе и в другом виде. Этот вариант уникальный, интересный, но развития практически не имеет. Захотим сделать что-то ещё от схемы придется отказаться. Те задачи и требования которые Вы тогда перед собой поставили - выполнили на пять с плюсом. Но это очень трудоёмко.

Ещё я хотел вот что сказать, наши кооперативщики ("Дисплей" которые делали Колоры) 700р и больше в месяц получали. Как же так Вы отдавали им по 1р за ПЗУ? Готовый комп они продавали за тысячу и выше. Нельзя было отдавать свои разработки. Ну не получилось со слотом, сами бы попробовали. Сделать свой бизнес. Найти деньги, занять, не знаю, ну не отдавать же ноу-хау дельцам.

---------- Post added at 08:59 ---------- Previous post was at 08:59 ----------

2) Можно было бы сделать аналогичный функционал с т.з. пользователя (но без защиты от копирования) на другой элементной базе и в другом виде. Этот вариант уникальный, интересный, но развития практически не имеет. Захотим сделать что-то ещё от схемы придется отказаться. Те задачи и требования которые Вы тогда перед собой поставили - выполнили на пять с плюсом. Но это очень трудоёмко.

Ещё я хотел вот что сказать, наши кооперативщики ("Дисплей" которые делали Колоры) 700р и больше в месяц получали. Как же так Вы отдавали им по 1р за ПЗУ? Готовый комп они продавали за тысячу и выше. Нельзя было отдавать свои разработки. Ну не получилось со слотом, сами бы попробовали. Сделать свой бизнес. Найти деньги, занять, не знаю, ну не отдавать же ноу-хау дельцам.

---------- Post added at 09:03 ---------- Previous post was at 08:59 ----------


В вашем городе может так дорого продавали наборы, потому, что не было радиорынка.

У нас и не продавали, продавали в Челябинске на радиорынке (и то я узнал о этом уже году в 1992-1993). Кому было надо ездили туда и покупали, а у нас Спектрумы стоили выше тысячи рублей. В магазине видел комп (похожий корпусом на Атари-130) с монитором цветным за 4000р. Баснословная сумма.

CodeMaster
04.06.2010, 09:17
Можно было бы сделать аналогичный функционал с т.з. пользователя (но без защиты от копирования) на другой элементной базе и в другом виде. Этот вариант уникальный, интересный, но развития практически не имеет.

А он интересен не ради развития, а ради истории.

Vadim
04.06.2010, 10:37
А он интересен не ради развития, а ради истории.

Сейчас конечно да. Мы говорили о том времени, когда стояла задача создания своего спектрума. Сейчас все клоны - для истории или как удобный в плане использования (современная элементая база, высокая надежность, меньшие габариты, новые примочки и т.п.) ретрокомп. А не альтернатива современным игровым консолям и ПЦ. Разница уже слишком велика.

CodeMaster
04.06.2010, 10:40
Мы говорили о том времени, когда стояла задача создания своего спектрума.

В таком случае, ни один закрытый проект на массовом рынке не имеет развития (в нашей стране по крайней мере). Да, Apple выжила, но это скорее исключение.

Conan
04.06.2010, 13:36
Я это понимаю, защита сделана хорошо
Защита строилась исходя из реалий того времени. Поясню. В те годы кол-во сильных программистов занимавшихся спеком было несоизмеримо больше нынешнего. Взламывали практически все. Вопрос времени: день, месяц или год. Дальше все шло в свободном доступе, и это все понимали. Поэтому то, что по прошествии 15-ти лет несколько попыток сломать защиту не завершились ничем, это не совсем показатель ее "хорошести". Видимо нынешним "взломщикам" не слишком то и хотелось. Попробовали, увидели, что непросто и отложили.


Схема очень и очень сложная, это очень сложный конечный автомат, как клубок из которого торчат ниточки и дернув за каждую получаем некий результат который ещё и зависит от того что перед этим дергали. Академически это интересно, а вот практически...Не соглашусь. Схема довольно простая, а вот логика работы непростая, потому, что аппаратно-програмные связки. Насколько важно что внутри? Ровно настолько, насколько важно, например, что внутри 1515ХМ1 216. Есть чип, впаял работает. Если хорошо работает, вообще замечательно. А то, что из него только выводы торчат, а что внутри не видно, это не мешает практическому использованию.


Сложно проектировать и создавать, ладно вы делали вдвоем, а если это компания где много сотрудников которые приходят и уходят, никто не поймет толком что и как. Т.е. разработка должна быть понятна и ясна, документирована.Документа ии у напарника были три или четыре папки, очень подробные, с комментариями, большинство карандашем, вдоль распечаток. Иначе бы сами не разобрались через месяц, что делали.
Проблема заключалась в другом. Разработка в активной фазе на два года растянулась. Потому, что не было ни денег ни оборудования, да и кушать в это время (вот незадача то ;)) что-то было надо. Родители пенсионеры, мы студенты и безработные, годы довольно тяжелые (начало 90-х). Вот и приходилось то PC XT сломанную занимать, ремонтировать, PCAD осваивать, то осциллогаф покупать, то искать деньги на заказ плат, то мониторы чинить, и так далее. Кредитов в те годы никто не давал. Тем более на такие разработки. Так что только своими силами. А что это значит с случае проекта? Ага. Значит сроками не управляем.


При том, как я понимаю, возможности Z80 в ней практически исчерпаны, можно было взять и любой другой процВозможности Z80 это по факту исполняемый код, а любой другой процессор был или дороже или менее доступен или требовал усложнения схемы. Для справки: в те годы на рынке из соизмеримого были КР580ИК80 или однокрислалки. И то и другое было только хуже, эти варинты прорабатывались. Все остальное или дефицит или сильно дороже.


На западе все же сделали бы заказную мс. Да, я знаю что у нас это было нереально.Мы живем и работаем в России ;). И речь о спеке. На западе в те годы уже Amiga и PC правили бал. Заказная микросхема имеет свои недостатки, ибо жесткая логика в ней (как правило). Хотя, делается быстро.


Можно было бы сделать аналогичный функционал с т.з. пользователя (но без защиты от копирования) на другой элементной базе и в другом виде. Этот вариант уникальный, интересный, но развития практически не имеет. Захотим сделать что-то ещё от схемы придется отказаться.Ошибка. Поясню. Код, формирующий все управляющие сигналы сам по себе не сложен. Грубо говоря 200 байт. Модифицируется легко (если нет защиты). Что это дает? А вот посмотрите, чем современные клоны богаты: возможность подключения к VGA, и корректное отображение на LCD мониторах всяких эффектов, развертки "Пентагон" или фирма, или еще какие. А ведь все это достагалось изменением нескольких байт в том самом коде. И управлять этими "волшебными превращениями" можно на ходу (передавая комманды второму Z80). Мы даже по началу делали пробные прошивки, где подгоняли положение экрана по высоте (в зависимости от телевизора или монитора). Про аппаратные скролы тоже где то уже рассказывал. В общем схему менять как раз было не надо. Надо было дорабатывать прошивку. В этом и был интерес (в отличие от других реализаций тех лет, где все это было забито в железную логику элементов на плате).


Ещё я хотел вот что сказать, наши кооперативщики ("Дисплей" которые делали Колоры) 700р и больше в месяц получали. Как же так Вы отдавали им по 1р за ПЗУ? Готовый комп они продавали за тысячу и выше. Нельзя было отдавать свои разработки. Ну не получилось со слотом, сами бы попробовали. Сделать свой бизнес. Найти деньги, занять, не знаю, ну не отдавать же ноу-хау дельцам.Есть несколько подходов к окупаемости разработки. Можно заложить всю стоимость разработки в базовый конструктив (в некопируемую ПЗУ, или какую другую защиту). При этом минимальный набор (например, аналог "Ленинград 1") будет стоить очень дорого, соответственно, не будет массовым.
А можно продавать базу по себестоимости, а прибыль получать разрабатывая к ней разные платы расширения, периферию и т.д.

Мы выбрали вторую стратегию. Но было слишком поздно. "Слот" тут не виноват, рынок уже изменился к середине 90-х. Спектрум перестал быть самым массовым народным копмьютером. С запада (и востока) пришли игровые телеприставки и дешевые PC.

e2e4
13.06.2010, 01:02
Уж извините, если уже упоминалось, читать все страницы темы лень. Отвечая на вопрос темы:
В основном, конечно, разницы принципиальной нет, за исключением того, что вообще-то почти всегда (если не всегда) можно логически отделить данные от исполняемого кода (если только не юзать самомодифицирующийся код). Тогда, появляется возможность определить исполняемый код в а) ПЗУ б) EEPROM в) Flash и т.п. Т.е. смысл в том, что исполняемый код модифицировать не требуется, и его можно разместить в более емкой/дешевой/быстрой/неудобной по доступу (выбирать самостоятельно) памяти. А вот данные уж будь добр либо в DRAM либо в SRAM.
Собственно так все нормальные своременные микроконтроллеры и строятся (память программ обычно внутри, flash, программируется с помощью специальных танцев с бубном, иногда даже требует отличного от VDD напряжения программирования) + 1...4 Кб обычной ОЗУ (тоже внутренней). Бывает еще память двойного доступа (в зависимости от состояния определенных регистров, работает как память программ или как память данных, но все-таки она - ОЗУ, т.е если там программа, то надобно ее туда скопировать после RESET'а, компилятор обычно сам об этом заботится), но это уже экзотика.

Кстати есть еще адресное пространство ввода-вывода, которое отличается тем, что проц обычно не имеет столь развитых средств работы с ним и ограничивается командамит in,out, и то бывает весьма урезанными - без косвенной адресации. Бывает, что это тоже отдельная шина.

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

Хотя наверное, если память программ и данных разделены, есть возможность одновременно делать выборку следующей команды из памяти программ и читать/писать данные в память данных при исполнении текущей команды. Т.е. получаем ускорение за счет "двойного" обращения к памяти.

Еще раз извиняюсь за очевидные вещи.

Vadim
15.06.2010, 07:34
фон-Неймонавская архитектура была бы наверное идеальной.

Что опровергают все современные компьютерные системы где оочень легко программа из-за ошибок сделанных при ее написании затирает или саму себя или свои области данных и повисает.

psb
15.06.2010, 08:29
оочень легко программа из-за ошибок сделанных при ее написании затирает или саму себя или свои области данных и повисает.
а зависит ли это от типа архитектуры? везде и всегда одинаково возможны глючные программы.

Vadim
15.06.2010, 09:25
В гарвардской архитектуре, по крайней мере, программа не может испортить саму себя. Из той памяти где лежит код программы проц ее считывает сам, программа туда не имеет доступа.

ZEK
15.06.2010, 09:26
Oberon Java .NET на любой платформе если не юзать необязательные указатели (в Java их по моему до сих пор нет, хотя могу и обмануть) гарантирует что приложение себя никогда не положит. На 4GL языках можно делать операционку где все процессы не будут аппаратно изолированы и будут нормально жить, при этом затраты на переключение потоков (а мож и несколько порядков) меньше чем в том же линухе. Пример очень интересный Active Oberon где каждый экземпляр класса может быть отдельным потоком

e2e4
15.06.2010, 18:12
По поводу самомодифицирующегося кода (я упомянул выше про ограниченные команды i/o): был процессор (DSP), в котором у команд in/out простой до неприличия синтаксис: cmd addr, где addr - 16-бит int. Все. Ни тебе косвенной адресации, ничего. Только константный адрес, который ессесно был следующим словом после кода самой команды в памяти программ.
Конечно, разработчики предполагали, что на шине ввода/вывода будет ряд устройств со своими регистрами по определенным адресам, и все будет ок. Хрен! Вот понадобилось нам туда подключить а) устройства со мноооожеством регистров (больше сотни) б) ОЗУ (да, извращение, но что делать) в) EEPROM и т.п. Скорость обращения к данному пространству не очень важна, но блин. Для обращения к памяти в 64к, повешенной на i/o надо ровно 64к памяти программ (типа in 0x0000; in 0x0001 и т.д.).
Архитектура гарвардская. Флэш можно перепрограммировать теоретически без программатора следующим образом: загружаем в бут-память (2к слов) нечто через SPI (SPI соединяем в первом приближении с SCI). Переключаем флэш-память программ на бут (все 64к памяти программ недоступны для исполнения, исполняются только 2к бут-памяти). Появляются команды модифицирования массива flash- памяти программ. Модифицируем память программ в части адресов команд in/out (там флэш-массив модифицируется только блоками по 256 слов, а стирается/очищается еще более крупными вроде бы). Акробатический трюк - обратное переключение с сохранением всех регистров.... Вообщем крутизна.
И тут вспоминаем про то, что в данном процессоре маленькая часть ОЗУ (256 слов) умеет быть как памятью данных, так и памятью программ (но одновременно - только одним типом). Видимо, разработчики процессора тоже о чем-то думали. Дальше - просто - в эту память в режиме данных копируем функцию чтения порта. Потом меняем определенное слово, соотв. адресу порта. Потом - переключаем ее на работу как память программ и CALL our_magic_io_fn. Медленно, конечно, но работоспособно.

А больше и не припомню случаев, когда был реально нужен самомодифицирующийся код. Может быть кто-то что-то напишет на эту тему? Спектрум вроде распологал к тому, чтобы программировать виртуозно, да и программисты тогда были не сплошь академические и "правильные" (как я :) ).
Для справки: описываемый проц - TMS320LF2407A (ну вся семейка TMS320xF24XX) фирмы Texas Instruments. Очень своеобразный проц, возможно это связано с тем, что само ядро (TMS320) - разработки начала 90-х если не 80-х. Одна система прерываний чего стоит! Однако по стабильности и надежности - не припомню более надежного. За более чем 7 лет работы с ним - ни одного случая зависания/сброса/сбоя/ошибки вычислений по вине железа (а работал он в очень жестких условиях по ЭМИ, да и по питанию тоже иногда). Вот что значит отлаженное ядро. Да и errata всего-то странички 2-3, причем в начещественных вещах.