nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 20 Apr 2024 08:55



This topic is locked, you cannot edit posts or make further replies.  [ 82 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next
ОС Collapse on Z80 
Author Message
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
barsik wrote:
Да, используя подпрограммы (там где для КР580 они не нужны) 6502 не много отстаёт и в 16-ти разрядной арифметике. А в Ваших расчётах увеличьте число тактов для 6502 вдвое (всегда сравнивают Z80 на 2 МГЦ с 6502 на 1 МГЦ).


1МГц если я все правильно понимаю это на момент выпуска август 1975. Если говорить про 6502 то это 1976 год и на 1976 год по даташиту, это мягко говоря не так:
Quote:
The external clock versions are geared for the multi processor system applications where maximum timing control is mandatory. All versions of the microprocessors are available in 1 MHz and 2 MHz ("A" suffix on product numbers) maximum operating frequencies.


Когда за 6502 взялся Commodore то появились и другие частоты, нашел только ДШ за 1980 год

Quote:
All versions of the microprocessors are available in 1 MHz, 2 MHz (“ A” suffix on product numbers), and 3 MHz (“ B” suffix on product numbers) maximum operating frequencies.


С 1985 года, 6502 уже 4МГц.

barsik wrote:
Да, используя подпрограммы (там где для КР580 они не нужны) 6502 не много отстаёт и в 16-ти разрядной арифметике.


А зачем использовать подпрограммы для сложения двух чисел? Не совсем понял.


29 Oct 2019 21:24
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
barsik wrote:
Проблема в что, что у меня где-то 1.5 месяца назад сначала сдохли все данные на винчестере, погубив не только первые программки на PL/M, мелкие пробные, редактор фонтов (~350 строк) и почти законченный текстов редактор ~1000 строк, но и, что грустно, наработки по Паскалю МТ+ (это не восстановить, писалось давно и уже забыто)....


Ситуация знакомая и довольно печальная. А не пробовали работать с симуляторами НЖМД, я правильно понимаю что разговор про IDE интерфейс?

По поводу стратегий редакторов. Мне приходилось писать экранный редактор для УКНЦ, очевидно что ассемблер PDP-11 в некоторой степени сам по себе ЯВУ и мне было гораздо проще чем Вам. Но в УКНЦ два процессора и второй реализует терминал. И в некоторый момент времени примерно, так же ка и Вы я понял что в тупую гонять туда сюда байты по памяти расточительно. Не думаю что мне одному такое пришло в голову, но вполне возможно увеличив объем данных привязывать строку к указателю создав что то похожее на TStringList. Отображение же информации из такого списка вести только в размер экранного окна.


29 Oct 2019 22:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
SAA wrote:
То что Вы утверждаете верно для программиста приложений пользователя в ОС которая не регламентирует использование ресурсов и монополизирует их. Это так же верно и для других архитектур хоть z80 хоть x86, системный софт которых будет использовать на кристальные регистры безалаберно. 256 байт ОЗУ в версии 6508 было, кстати, перенесено на кристалл, но дело как мы понимаем не в локализации 256 регистров, а в регламентировании их использования.

Никак не могу с этим согласиться:"безалаберно" или "в регламентировании их использования" - эти
слова лишь запутывают вопрос.

Суть очень проста: хоть под z80, хоть под x86, я сохраняю в стек все регистры - и они доступны для
моей задачи, причем ничто мне не мешает делать при необходимости системные вызовы - они работают
также корректно, сохраняя содержимое регистров при вызове. Завершая задачу, я восстанавливаю регистры
из стека и ничто не нарушено.

В 6502 - я тоже могу сохранить псевдорегистры хоть в стек, хоть в другую область памяти, но это не
меняет сути. Псевдорегистры остаются на своём месте, и если я запорю содержимое псевдорегистров,
которые использует ОС, системный вызов может привести к краху.

Это мы говорим: псевдорегистры, но это всего лишь страница памяти с быстрым доступом.
Если говорить о z80, то это аналогия "служебных ячеек монитора" - если я в них полезу, то вполне
могу испортить работу ОС. Но я не полезу - у меня есть набор регистров, как я написал выше.

А вот в случае 6502 мне и понадобится "регламентирование их использования" - именно поэтому
Zero Page полноценной заменой регистрам не является, как бы нам не хотелось.

_________________
iLavr


30 Oct 2019 12:46
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
Lavr wrote:
В 6502 - я тоже могу сохранить псевдорегистры хоть в стек, хоть в другую область памяти, но это не
меняет сути. Псевдорегистры остаются на своём месте, и если я запорю содержимое псевдорегистров,
которые использует ОС, системный вызов может привести к краху.


Лавр если бы использование было не безалаберно (а я подозреваю что оно именно такое в Apple II) то будет существовать определенное кол-во псевдорегистров которые пользователь всегда может использовать не нарушая работы ОС. С этим то зачем спорить? Есть у Вас ячейки с $80 по $8F к примеру и ОС гарантирует что они не используются. И в чем же тогда проблема? Их даже сохранять в стек не надо, потому что кроме Вашей задачи и ОС в системе больше никто не "живет".

Например ZeroPage для Apple-II вполне может выглядеть так:
Quote:
Apple II Zero Page Usage

Lo Nibble of Address


M = Used by Monitor; * used in early Apple IIe ROMs-- now free
A = Used by Applesoft BASIC
I = Used by Integer BASIC
3 = Used by DOS 3.3
~ = Used by ProDOS ($40-$4E is saved before and restored after use)
B = Used by ProDOS BASIC.SYSTEM (also uses all Applesoft locations)
- = Free; not used

--Bryan Dunphy, Michael J. Mahon, Rubywand


Кроме того, возьмем ситуацию когда выяснить состояние ZeroPage невозможно или нет доверия информации. При старте приложения сохранить используемую область псевдорегистров. Перехватить прерывание 6502 и сохранять/восстанавливать используемую приложением область псевдорегистров. Перед входом в процедуру ОС или монитора, восстанавливать значение псевдорегистров сохраненное при старте. Такова палата за безалаберность использования ZeroPage потеря до 60 тактов в прерывании и плата за вход в процедуру ОС. Но даже такая плата будет выигрышной для приложения за счет использования ZeroPage.
Если не ломать копья о ZeroPage, подозреваю, что каждый из нас останется при своем то остается абсолютный доступ к любой ячейки ОЗУ за 4 такта, чего все равно нет о Z80/8080.


Attachments:
Apple II ZeroPage.png
Apple II ZeroPage.png [ 37.5 KiB | Viewed 5199 times ]
30 Oct 2019 19:09
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
SAA wrote:
Лавр если бы использование было не безалаберно (а я подозреваю что оно именно такое в Apple II) то будет существовать определенное кол-во псевдорегистров которые пользователь всегда может использовать не нарушая работы ОС. С этим то зачем спорить?

Так я с этим и не спорю! :roll: Просто "если бы" - это сослагательное наклонение... :lol:
В z80, 8080 и х86 всё получается безо всяких "если бы", а в случае с 6502 - это УЖЕ откровенно не так. :wink:
Так что я ни с чем ни спорю, а говорю, что так оно УЖЕ давно и есть.
А кто там и что делал алаберно или безалаберно - это дела давно минувших дней... :D

Был у меня в сотовом телефоне мидлет простенького эмулятора 6502 безо всяких ОС, и редактор
с компилятором ассемблера мидлет сам поддерживал - так никаких проблем не было - реально Zero Page
ощущалась как регистры - ничто не лимитировало и не мешало.

А вот как я разохотился попрограммировать Apple I - так сразу и ощутил, что псевдорегистры - это вовсе
не полноценные регистры, что довольно-таки неудобно программисту.

_________________
iLavr


30 Oct 2019 19:38
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
Lavr wrote:
А кто там и что делал алаберно или безалаберно - это дела давно минувших дней... :D


Лавр, табличку по Apple II выше заценили? Все таки алаберно?! :)


30 Oct 2019 20:25
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
Lavr wrote:
А вот как я разохотился попрограммировать Apple I - так сразу и ощутил, что псевдорегистры - это вовсе
не полноценные регистры, что довольно-таки неудобно программисту.


Лавр, а с аппаратным Apple-I или любым другим 6502 не работали? Не возникало в проекте желания прикрутить ZeroPage базу? Спрашиваю потому что я то как раз про 256 регистров узнал уже после того как собрал макетку на 6502, и когда начал писать "монитор" и отладчик то конечно оценил ZeroPage сразу. Идея насчет смещения базы пришла гораздо позже когда уж развел PCB и заказал у китайцев. https://github.com/digitalinvitro/micro6502


30 Oct 2019 20:40
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Post .
SAA wrote:
barsik wrote:
всегда сравнивают Z80 на 2 МГЦ с 6502 на 1 МГЦ).
1МГц, если я всё правильно понимаю, это на момент выпуска август 1975... [позже] появились и другие частоты
Сравнивают Z80 на 2 МГЦ с 6502 на 1 МГЦ не потому, что первыми появились 8080 на 2 МГЦ и 6502 на 1 МГЦ. Хотя в первой сравнительной статье сравнивали именно так (и кстати, пришли к выводу, что 6502 не лучше, чем 8080).

А потому что ограничивающим быстродействие бытового компьютера фактором является не предельно возможный такт CPU, а быстродействие динамических ОЗУ. И тут 6502 и аппаратно проигрывает 8080, а тем более Z80, т.к у них цикл доступа к памяти, считая пропорционально длительности маш.такта, - в 2.5 раза больше. 6502 делает доступ к ОЗУ всего за половину периода машинного такта, что и позволило разработчикам 8-ми разрядных ЭВМ существенно упростить синхронизацию с видеосхемой, причём без использования WAIT (что было недоступно конструкторами применявшим в западных бытовых ЭВМ процессор Z80). При 6502 видео часть обращается к ОЗУ во время второй, неиспользуемой процессором, половины периода маш.такта.

И кстати, именно поэтому разработчики бытовых ЭВМ и игровых консолей предпочитали 6502, а вовсе не за его мифические преимущества как процессора. Даже самые скоростные машины имеющие Z80 на такте 4 МГЦ (например Amstrad CPC) уступали по скорости 6502 на такте 2 МГЦ (в BBC-micro) из-за циклов WAIT у Z80. А сравнивая в своих машинах работу 6502 и Z80 владельцы Commodore-64 и Apple-II видели, что там Z80 работает более, чем вдвое медленнее, чем 6502 и делали нелепые выводы о якобы огромном преимуществе 6502. Так первоначально и родился этот ложный миф, который активно пропагандировало заметно более многочисленное сообщество фанатов 6502.

В 70-тые годы при разработке первых промышленных 8-ми разрядок использовали Z80 на такте 1.77...2 МГЦ и 6502 на такте 1 МГЦ, т.к доступная тогда динамическая память 2107 (565РУ1) и 4116 (565РУ3) не позволяла большее. После появления более скоростных 4164 процессор Z80 стали использовать на такте 3.5...4 МГЦ, а 6502 до 2 МГЦ. Да и то мало, - скоростной 6502 применён лишь в BBC-micro (2 МГЦ), в Nintendo (1.79МГЦ) и в Atari (1.77 МГЦ), а все остальные 8-ми разрядки на 6502 так и остались на такте 1 МГЦ. Максимально возможная частота RAS-CAS бюджетных динамических ОЗУ первой половины 80-тых (да и остальной TTL элементной базы) составила 4 МГЦ. Потому от 5 МГЦ процессора 65C02 для массовых машин на 6502 проку не было (хотя они и нашли ограниченное применение в акселераторах Apple-II в основном на такте 3.5 МГЦ).

Даже в Apple-IIgs, выпущенном в конце 1986 года, процессор 65C816 тактируется тактом всего лишь 2.8 МГЦ. А если бы 6502 имел период обмена с памятью хотя бы равным периоду маш.такта (что правда лишило бы его удобства сопряжения с видеочастью), то его клок можно было бы также, как и для Z80 поднять вдвое.
SAA wrote:
С 1985 года, 6502 уже 4МГц
Это уже 65C02. Тогда же появился Z80H 8 МГЦ (который у меня надёжно работал на 12 МГЦ). 6502 на 2 МГЦ появился лишь в конце 70-тых. Например, судя по этой рекламе в конце 1977 года он ещё не продавался, а Z80 на 4 МГЦ и 8080 на 3.15 МГЦ уже были.
SAA wrote:
barsik wrote:
Да, используя подпрограммы... 6502 не много отстаёт и в 16-ти разрядной арифметике
А зачем использовать подпрограммы для сложения двух чисел?
Потому что у программистов обычно принято, если фрагмент программы встречается в ней дважды или более, оформлять его в виде подпрограммы. Но и в виде линейного участка 16-ти разрядное сложение/вычитание не быстрее. Если сканируется таблица (например токенов Бейсика или Паскаля), то заносим шаг по таблице в DE и делаем ADD HL,DE, это одна команда и перезагружать регистры не надо.


Last edited by barsik on 30 Oct 2019 22:37, edited 1 time in total.



30 Oct 2019 21:48
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
barsik wrote:
SAA wrote:
С 1985 года, 6502 уже 4МГц
Это уже 65C02.


Нет я имею ввиду именно 6502С

Quote:
The 6502A was a 1.5 MHz chip featured in Asteroids Deluxe.
The 6502B was a version of the 6502 capable of running at a maximum speed of 2 MHz instead of 1. The B was used in the Apple III, BBC Micro and, clocked at 1.79 MHz, early Atari 8-bit computers
The “official” 6502C was a version of the original 6502 able to run at up to 4 MHz.
The Sally, also referred to the 6502C, was a customized 6502 chip used in later Atari 8-bit computers. It has a HALT signal on pin 35 and a second R/W on pin 36 (these pin are not connected (N/C) on a standard 6502s). Pulling HALT low latches the clock, pausing the processor. This was used to sync the CPU with the video circuitry.


barsik wrote:
Тогда же появился Z80H 8 МГЦ (который у меня надёжно работал на 12 МГЦ). 6502 на 2 МГЦ появился лишь в конце 70-тых. Например, судя по этой рекламе в конце 1977 года он ещё не продавался, а Z80 на 4 МГЦ и 8080 на 3.15 МГЦ уже были.


Я честно говоря не понимаю зачем мы тут упираемся в частоты, понятно что оригинальный 6502 разогнать было проблематично (мне удалось разогнать до 1,5МГц), но разгоняться 65С02 ничего не мешало. Только зачем нам это? Судя по даташиту http://archive.6502.org/datasheets/mos_ ... y_1976.pdf 6502B тоже уже был.
Факта того что выигрыш по тактам есть не отнимешь. Скажу так если у меня в ПЛИС что то будет работать по обоим срезам тактового сигнала на частоте A, то если убрать это "коневодство" и работать как положено по одному срезу скажем по восходящему фронту то частота будет не 2*A, а больше например 2,5*A. В конце концов упремся в современную версию 65C02 которая 14МГц. Бил Менш готов выпустить и ГГц версию :) если уж на то пошло.


30 Oct 2019 22:37
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Post 
Quote:
трудно поделить ячейки Zero Page между системой и прикладным ПО
В случае, если 6502 в программе пользователя что-то активно считает и ему нужно много псевдо-регистров из Zero Page, то можно перед началом работы все 256 ячеек или их часть перекинуть в обычное ОЗУ (выше $200), а по окончании или перед вызовом функций ПЗУ или DOS восстановить. Но это явно дольше, чем 4 пары PUSH-POP-ов.
SAA wrote:
Факта того, что выигрыш по тактам есть не отнимешь
Смотря как считать? Если один к одному, то естественно. Но считать-то надо один к двум. 6502 делает операции по обоим фронтам (по сути он DX2, как бы у него есть удвоитель входного клока), а 8080/Z80 работают только по переднему фронту.
SAA wrote:
Скажу так. Если... работать как положено по одному срезу, скажем по восходящему фронту, то частота будет не 2*A, а больше, например 2,5*A
Почему?
SAA wrote:
не понимаю зачем мы тут упираемся в частоты... разгоняться 65С02 ничего не мешает
Так и развитые версии Z80 работают на 33 МГЦ. Но речь о архитектуре, не о реализации.
SAA wrote:
Бил Менш готов выпустить и ГГц версию, если уж на то пошло.
Сомневаюсь. Ему 75 лет и 8-ми разрядки с середины 80-тых его уже не волнуют. И если сделать самый слабый микропроцессор 4004 с тактом 1 ГГЦ он тоже будет довольно быстрым, но захочет ли кто-то для него программировать?

Технология уже более 20-ти лет, как это позволяет, почему никто не производит 8-ми разрядки с тактом 1 ГГЦ? В последние 25 лет у 8-ми разрядных процессоров оставалась только ниша контроллеров, но и из неё их уже выбросили, т.к в промышленности использут 8-ми разрядные не микропроцессоры, а микроконтроллеры. До сих пор производят только 8-ми разрядные микроконтроллеры. Процессоры уже вряд-ли.

6502 was originally written in a time when the majority of developers were writing assembly directly, rather than in these new-fangled high-level programming languages. So, it was designed to be written by humans. More modern assembly languages are meant to written by compilers, so let’s leave it to them. Plus, 6502 is fun. Nobody ever called x86 fun.


31 Oct 2019 00:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
SAA wrote:
Лавр, табличку по Apple II выше заценили? Все таки алаберно?! :)

Я даже очень удивлён был, по какой причине я её должен заценить?... :o
Apple II я не программировал ни разу, ни в каком виде, поэтому голословно ничего сказать не могу.
Ситуация, о которой я пишу, наблюдалась мной под эмуляцией Apple I и под Денди, под Денди - всё ещё
более неприятно и запутанно.
Особенно, если собственной программой из резидента надо "всплыть". В играх, возможно, тоже всё сделано
"алаберно", но никто никакой полезной информации о структуре Z.P. вполне естественно не предоставлял.

_________________
iLavr


31 Oct 2019 01:28
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
Post Re:
barsik wrote:
Quote:
трудно поделить ячейки Zero Page между системой и прикладным ПО
В случае, если 6502 в программе пользователя что-то активно считает и ему нужно много псевдо-регистров из Zero Page, то можно перед началом работы все 256 ячеек или их часть перекинуть в обычное ОЗУ (выше $200), а по окончании или перед вызовом функций ПЗУ или DOS восстановить. Но это явно дольше, чем 4 пары PUSH-POP-ов.


Тут ситуация такая что если включены прерывания и ОС использует ZeroPage, необходимо в этом случае либо четко знать какие ячейки гарантировано не используются, либо знать что обработчик прерывания не использует ZeroPage. Еще вариант писать обработчик так что бы он сохранял используемые псевдорегистры. Сохранять всю страничку конечно бессмысленно, проще и быстрей поменять ее базу, но для этого придется аппаратно модернизировать платформу.

barsik wrote:
SAA wrote:
Факта того, что выигрыш по тактам есть не отнимешь
Смотря как считать? Если один к одному, то естественно. Но считать-то надо один к двум. 6502 делает операции по обоим фронтам (по сути он DX2, как бы у него есть удвоитель входного клока), а 8080/Z80 работают только по переднему фронту.


Тогда предложу такую аналогию берем два по такт-но совместимых ядра Z80 и C65, оба ядра закладываем в ПЛИС. Получаем примерно одинаковую частность в районе 90-100 МГц если очень постараемся, но.... C65 при этом остается со своими 2-3 тактами на инструкцию, а Z80 с 4-тактным машинным циклом. C65 может адресовать по половинке адреса в ZeroPage, Z80 не может. Из этой половинки растут ноги быстрой косвенно-индексной адресации.

barsik wrote:
SAA wrote:
Скажу так. Если... работать как положено по одному срезу, скажем по восходящему фронту, то частота будет не 2*A, а больше, например 2,5*A
Почему?


Давно дело было, но вроде как у Синтезатора проблемы с разводкой клока видимо не может уследить за фазой, вероятно возможно возникновение латчей в таких случаях, которые синтезатор не сможет опознать, в общем синтез рекомендуют делать для одного среза сигнала, точнее даже для конкретного среза восходящего. Я уже 10 лет с такими экспериментами завязал :) по молодости пытался убедить синтезатор в том что я "умней", но потом забросил это занятие :)

barsik wrote:
SAA wrote:
не понимаю зачем мы тут упираемся в частоты... разгоняться 65С02 ничего не мешает
Так и развитые версии Z80 работают на 33 МГЦ. Но речь о архитектуре, не о реализации.


А как объяснить 13 тактов на команду LD A, [nn] у Z80? Та же команда у 6502 lda $ABS_ADDR это 4 такта, косвенная-индексная lda ($ZP), y - это 5 тактов. Даже перемножив на два получим выигрыш в тактах против обычной загрузки из памяти. Возьмем индиректную загрузку в регистр у z80 это 7 тактов, у 6502 - 2 такта. Тут в три раза превосходство уже не отнесешь на работу по обоим фронтам.

barsik wrote:
SAA wrote:
Бил Менш готов выпустить и ГГц версию, если уж на то пошло.
Сомневаюсь. Ему 75 лет и 8-ми разрядки с середины 80-тых его уже не волнуют. И если сделать самый слабый микропроцессор 4004 с тактом 1 ГГЦ он тоже будет довольно быстрым, но захочет ли кто-то для него программировать?


Бил конечно прихвастнул и без конвейеризации выше 200МГц это все не убежит, но в чем то он прав, при желании загнать на 1ГГц можно. А 8-разядки его волную судя по этому вот на странице WDC https://www.westerndesigncenter.com/wdc/Mensch_Computer.cfm :)

barsik wrote:
Технология уже более 20-ти лет, как это позволяет, почему никто не производит 8-ми разрядки с тактом 1 ГГЦ? В последние 25 лет у 8-ми разрядных процессоров оставалась только ниша контроллеров, но и из неё их уже выбросили, т.к в промышленности использут 8-ми разрядные не микропроцессоры, а микроконтроллеры. До сих пор производят только 8-ми разрядные микроконтроллеры. Процессоры уже вряд-ли.


6502 с 64К на борту и есть такой контроллер :) есть же контроллеры W65C256S. Почему не делают - потому что будут подрезать чью то нишу, в том числе и свою же (ну это не про WDC). Скажем китайцы выпускают свою собственную версию AVR 40MHz - потому что им наплевать что они вторгаются на территорию 16-биток и 32-биток. Тот же TI прям за одно место держит msp430 давая ему максимум до 24-25МГц, потому что дальше идут другие msp - msp432. Как их то тогда позиционировать? Потом разогнанные 32-битки начнут наступать на горло дорогим DSP, как тогда DSP позиционировать? Поэтому все медленно но верно потихоньку лезут вверх и уже у 8-биток 40МГц барьер, а у 16-биток иногда и 70МГц, 32-битки уходят за 100МГц.
С другой стороны у нас любителей уже есть доступ к технологии ПЛИС и какой смысл смотреть на "тормозной" 8-битынй силикон, когда можно уйти за 100МГц с любимым 8-битным ядром? Только потребление ПЛИС нас и держит, но и оно потихоньку поддается.


31 Oct 2019 02:28
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
Lavr wrote:
SAA wrote:
Лавр, табличку по Apple II выше заценили? Все таки алаберно?! :)

Я даже очень удивлён был, по какой причине я её должен заценить?... :o
Apple II я не программировал ни разу, ни в каком виде, поэтому голословно ничего сказать не могу.


Пардон! У меня сложилось такое ощущение, что в этой ветке Вы писали об опыте программирования под Apple II. Виноват.


31 Oct 2019 02:32
Profile
Senior

Joined: 12 Jul 2016 21:30
Posts: 136
barsik wrote:
SAA wrote:
А зачем использовать подпрограммы для сложения двух чисел?
Потому что у программистов обычно принято, если фрагмент программы встречается в ней дважды или более, оформлять его в виде подпрограммы.

Это если программист старается достичь меньшего объема кода. Если ставится задача увеличения скорости кода, то даже тело циклов - раскручивают (unroll); Но давайте эту версию проверим. Допустим что сложение оформляется через вызов процедуры. Затраты на вызов в 6502 - 6 тактов, у Z80 - 17. Возврат в 6502 - 6 тактов, у Z80 - 10 тактов. Выигрыш в линейном коде (код писал выше), выигрыш в вызове и возврате. Это с учетом даже /2 по тактам.
barsik wrote:
Но и в виде линейного участка 16-ти разрядное сложение/вычитание не быстрее. Если сканируется таблица (например токенов Бейсика или Паскаля), то заносим шаг по таблице в DE и делаем ADD HL,DE, это одна команда и перезагружать регистры не надо.

Для этого случай Z80 подходит лучше. Только вот вопрос что с этим смещением делать дальше? У 6502 таких указателей 128, и доступ по указателю в 6502 заведомо быстрей, особенно если внутри записи о токене нужно позиционироваться по индексу. 6502 сможет это сделать за счет Y регистра и я думаю выиграет в этом относительно Z80.
Code:
ldy #offset_p1   ; 2
lda (ZP), Y        ; 5

А что будет делать Z80?
P.S. И я бы так токены не искал, затратно по времени. Так и так литера токена попадает в аккумулятор, взять CRC8 по всей длине токена и выбрать из готовой таблицы то что необходимо по расчитаному CRC адресу. Само собой имена токенов ограничивается во избежании повторения CRC.


31 Oct 2019 04:12
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Post 
Вот ещё один "камешек брошенный в огород 6502":

Очень может быть, что именно несовместимость разных машин с 6502 по "зэропажэ" исключила появление для 6502 единой общей для всех машин на этом CPU операционной системы и даже использование DOS одной машины с 6502 - на другой машине с 6502, но с другим ROM-BIOS. И тем самым это исключило создание единой платформы для корректных программ, как это вышло для машин на 8080/Z80, где системное и корректное прикладное ПО для ОС CP/M годится для любой CP/M-машины (имеющей достаточный объём ОЗУ требуемый для конкретной программы). Если саму DOS для 6502 ещё можно как-то переписать под конкретную машину на 6502, чтобы исключить конфликты, то с прикладными программами это не сделаешь.


Last edited by barsik on 01 Nov 2019 17:16, edited 1 time in total.



31 Oct 2019 08:50
Profile
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 82 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.