![]() |
В чем смысл раздельных областей программы и данных
То же решил задать тупой вопрос в этом разделе ;-) Помню впервые это понятие встретил в руководстве по клону именно Спектрума, вот до сих пор мучит этот вопрос :-) Сам-то я в основном на БК работал, там всё ОЗУ кроме стека было сквозным и данные были в перемешку с кодом. Это зависит от архитектуры проца или машины в целом?
|
В Спеке тоже можно все вперемешку.
Разделение кода и данных - просто хороший тон программирования. Если речь про архитектуру, то Гугли это: Архитектура фон Неймана Гарвардская архитектура |
Имеется ввиду то, что данные не могут быть исполняемыми :) Например, в процах архитектуры x86 начиная с 286 в защищенном режиме попытка, скажем, перехода (JMP) в сегмент данных вызовет исключение...
Quote:
Quote:
|
Quote:
|
Quote:
|
Quote:
|
Quote:
Quote:
|
Quote:
|
Quote:
|
Quote:
Что за детский сад? Откуда столько глупостей пишите? Я в шоке просто!!! Читайте книги по Z80, Спектруму и не пишите бреда! |
Quote:
Quote:
---------- Post added at 07:42 ---------- Previous post was at 07:35 ---------- Кстати, неплохой повод пофлемить, а зачем же тогда прилепили это недоразумение к Z80? Могли бы просто вывести какой нибудь сигнал /IAK например чтоб подтверждать прерывания :v2_laugh: |
Quote:
|
Quote:
---------- Post added at 13:37 ---------- Previous post was at 13:34 ---------- Quote:
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. |
Quote:
Quote:
|
короче, отделить-то можно, но смысла НЕТ.
например, LD A,(#1234). 1. читается код команды LD A,(...) c M1 2. читается мл. байт адреса БЕЗ М1 по следующему адресу 3. читается ст. байт адреса БЕЗ М1 по следующему адресу итого, разделите память по М1 и жить станет очень весело:) |
Quote:
hex: 21 - при считывании стробируется низким уровнем на выходе M1 34 12 Используется зачем - написано в доке. Для подтверждения прерывания совместно с iorq, для указания внешним схема что он приступил к выборке следующего КОП. По его спаду (переходу в 1), по сигналу /RFSH производится регенерация динамического ОЗУ. Более того, цикл чтения КОП более короткий нежели простые циклы чтения. И именно этот сигнал используется в Профи версии 5, что бы вставить после него такт ожидания в турборежиме, удлиняя его (выборку КОП) с 3-х тактов до 4-х. По схеме ZX-Next скажу вот что, пока я ее не смотрел (не было у меня ее), найду скачаю - погляжу. Уверен, что ни каких 2-х разных 64К пространствах там нет. Скорее всего все совсем иначе. M1 используется для других целей (т.к. второй Z80 там используется в схеме видеоконтроллера). |
Quote:
|
Quote:
|
Quote:
Quote:
Quote:
Quote:
|
1 Attachment(s)
Схема...
|
Quote:
|
Quote:
---------- Post added at 14:31 ---------- Previous post was at 14:27 ---------- Quote:
Я уже устал повторять, что на Z80 это _НЕ_ возможно. Ну указывает он при выборке команды сигналом m1 что КОП выбирает, и что? Зачем используется - уже написал выше. Если по этому сигналу переключать память и читать код из другой памяти, то выйдет чушь, что справедливо заметил ZEK, в посте номер 9. |
2 Attachment(s)
|
Я каэшн, дико извиняюсь, но, если я правильно понял, при выполнении следующего кода:
Code:
addr:И в чем здесь сокровенный смысл? |
Quote:
|
Для понимания как там работает zx-next ещё бы прошивку к ПЗУ тому. Ясно что первую команду он выберет из адреса 0, если команды однобайтные то A10 будет при выборке команд всегда в 0, а вот когда появляются параметры у команд, то A10=M1 станет равным 1, зачем это сделано я не понимаю пока.
|
Quote:
Quote:
Опять таки выделил жирным... |
Quote:
|
Vadim, это цитата разработчика ZX-NEXT...
|
Quote:
|
Quote:
Quote:
|
Quote:
А как защита ПЗУ не годится. Выпаиваем и считываем. ПЗУ на профи не было защитой, а являлось элементом "конечного автомата" который мы могли программировать, а точнее плавно менять параметры сигналов INT и синхронизации и ещё кое-чего. |
Quote:
http://zx.pk.ru/showthread.php?t=7577 Если осилите эти два топика, думаю, вопросов станет меньше, или же наоборот, больше но в любом случае будет полезно... |
ну, реально, конечно, разделить на 2 памяти по 64к можно, если нагородить огород:) поставив плисину и загнав в нее логику с длинами команд - это более чем реально, но монструозно. и М1, кстати, здесь вполне сгодится. наверное;)
|
Ясно ясно. Conan описывает метод взлома плавающих битов. Я бы так делать не стал сразу. Раз программа - стал бы дизассемблировать, хотя бы те куски которые читаются стабильно. Плавающих битов быть много не должно и 1000 раз считывать было бы не нужно. А вообще теперь ясно зачем всё это делалось. Но вот ведь как вышло. ZX-Next самый малочисленный клон из-за защиты от копирования.
---------- Post added at 15:49 ---------- Previous post was at 15:35 ---------- Quote:
|
Quote:
|
Quote:
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 ---------- Quote:
Как сократить кол-во микросхем? В те годы ни циклонов ни альтер не было. Заказать БИС на БМК стоило слишком дорого. А Z80 продавались по 30 рублей. То есть, как десяток обычных микросхем. В ZX-NEXT в минимальной конфигурации 36 микросхем + еще один Z80. Итого на 15 рублей (тех денег) дороже "Ленинград 1", но: видеосигналы идеальные, потры (включая #FF) корректные, инт на месте, никаких вейтов, возможности расширения большие (4/5 слотов), настраивать (подбирать кондючки резючки) не надо. И всего то потому, что второй Z80 с программой заменил кучку мелкой неизменяемой логики. |
Conan, теперь многое ясно, но всё же. Микросхемы были не так дёшевы, помнится набор плата+детали в том же 89-м году для ленинграда-1 стоил 500-650р. Дешевле не было просто. В 1990-м около 800-900р. Микросхем в магазинах в нашем городе вообще не было, купить их было нереально. А реализация видеоконтроллера на счетчиках+прошивка ПЗУ более легкая и не менее правильная. Писать прошивку для zx-next чрезвычайно трудоёмкое занятие. На западе бы такими вещами думаю не стал бы заниматься. В плане защиты, думаю это была самая сильная защита из аппаратных на то время.
|
Quote:
Quote:
У реализации решения ПЗУ+счетчики есть свои плюсы и есть минусы. Впервые это решение появилось в "Красногорске" (не самом популярном клоне), а затем Михаил Яцык использовал его в "Профи". Леонид Ермаков (мой напарник по разработке ZX-NEXT) был знаком с Яцыком и оценивал его разработки весьма высоко. Но для ZX-NEXT решение ПЗУ+счетчики не подходило потому, что требовалось помимо видеосигналов и INT-а формировать еще адреса видеовыборки из ОЗУ (для перекючения между видеорежимо спека и CGA), изменять (уменьшать) период регенерации (что бы надежно работало), формировать медленные сигналы (FLASH). На ПЗУ+счетчики этого было не реализовать, пришлось бы устанавливать множетство микросхем дополнительно. И разумеется, защитить хотелось (хотя бы на первое время). С тем же "Профи" вышла нехорошая история, когда две фирмы потом его не поделили, а некоторым покупателям в случае проблем отказывали в поддержке (потому, что купил плату не их). Что касается "на западе так бы не делали", так на западе в то время и фирменные ZX-ы уже прекратили выпускать. А если говорить про "плавающие" ячейки, так Intel по той же технологии ПЗУ выпускать стал, на 8 лет позже, чем они заработали в ZX-NEXT. ---------- Post added at 17:03 ---------- Previous post was at 16:35 ---------- Quote:
между имеющимеся командами можно еще команд наставить (в одном линейном адресном пространстве команд две разные программы, в зависимости от того с какого места стартовать) и данные под инструкциями прятать другие. Но программировать в такой среде - жуть. |
Quote:
Quote:
Quote:
1)Схема очень и очень сложная, это очень сложный конечный автомат, как клубок из которого торчат ниточки и дернув за каждую получаем некий результат который ещё и зависит от того что перед этим дергали. Академически это интересно, а вот практически... Сложно проектировать и создавать, ладно вы делали вдвоем, а если это компания где много сотрудников которые приходят и уходят, никто не поймет толком что и как. Т.е. разработка должна быть понятна и ясна, документирована. А тут сложная головоломка. При том, как я понимаю, возможности Z80 в ней практически исчерпаны, можно было взять и любой другой проц, важны состояния проца, режимы и кол-во выводов. Чем их больше - тем проще, не нужно использовать iorq m1 и прочее (как бы) не по делу. На западе все же сделали бы заказную мс. Да, я знаю что у нас это было нереально. Quote:
---------- 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 ---------- Quote:
|
| All times are GMT +4. The time now is 23:52. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.