LINUX.ORG.RU
ФорумTalks

Многопоточность на ZX Spectrum

 , ,


0

4

В продолжение темы про извращения на вычислительных устройствах, которые провоцировало глобальное безкомпьютерье на необъятных просторах СССР.

тема собственно вот Интерпретатор языка для МК-61

А это история как извращенец(ТС) немного подрос - заколебал всех своим калькулятором МК-61 и разброссаными книжками и журналами про самосборные компы типа ЮТ-89, схемы которого и код прошивки ПЗУ печатались в Приложении к Юному технику.

И примерно в 14 лет у меня появился клон ZX Spectrum 48.

Это была наколеночносборная, кривоватая коробка с потёками клея, жаль что фоток не сделал тогда... :(

К моему счастью, у папы было несколько сотрудников, которые увлекались «непадецки» такого рода фигнёй как паять всякие микросхемы на платы и подрубать к ним кассетные магнитофоны, а потом клацаться в игры. Цветные! У меня даже джойстик был!

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

И тут понеслась новая спираль извращений над вычислительной техникой.

Я уже знал, что есть компы с графическими операционными системами типа Виндовс и Мак ОС. И я даже где-то слышал что там можно запускать несколько процессов параллельно.

Извращался я над этой коробкой много и страшно. Практическуи сразу начал писать на ассемблере... потому как встроенный бейсик тормознутая фигня.

Практически самой первой программой на ассемблере была запись и воспроизведение звука через порт по которому передавались игры на/с магнитофона. Звук был однобитный - потому жутко свистящий и скрежещащий но наговариваемые слова вполне можно было различить и при достаточной треннеровке даже узнавать по голосу. записывалось конечно очень мало, несколько секунд с частотой дискретизации 10000 Гц

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

Писал потом игры всякоразные к счастью не всё на ассемблере (нашёл КОМПИЛЯТОР! бейсика) и ещё всякой фигни... Но всё таки, я всё продолжал хотеть «Настоящий компьютер». Потому стал заниматься разработкой многопоточной операционки. И кое что у меня даже получилось.

Вплоть до того, что я запускал 3 программы: одна играла музыку, воторая гоняла по экрану точку, которая отпрыгивала от занятых пикселей и от краёв экрана, а третьей была сама среда программирования бейсик встроенная в ZX. Забавно было наблюдать, как точка отпрыгивала от набираемого мной текста на бейсике.

На бескомпьютерье и лист бумаги - IDE.

Ответ на: комментарий от Serg_HIS

Настоящий хак это был ldir, который перемещал сразу блок памяти из указанной области в указанную, указанное количество байт.
Учись, студент! ;)

Студент тут вы, поскольку ldir был внутри z80 обычным циклом, а потому был очень медленный и зависел (срыв покровов) от длины копируемого блока.

«Repeats LDI (LD (DE),(HL), then increments DE, HL, and decrements BC) until BC=0. Note that if BC=0 before this instruction is called, it will loop around until BC=0 again.»

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

поскольку ldir был внутри z80 обычным циклом

Ну вы прямо КО

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

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

И конечно зависело от количества копируемых байт

Ну да, чукча не читатель, чукча писатель:
«зависел (срыв покровов) от длины копируемого блока.»

но делалось это в несколкьо раз быстрее чем если написать программу из цикла с отдельными командами по взятию байта и засовыванию в другое место.

Всегда можно написать цикл медленнее, чем ldir. Только зачем его писать медленнее, если можно сделать быстрее?
Задумайтесь, почему ldir применялся крайне редко, когда скорость была менее важна, чем размер кода в байтах.

andreyu ★★★★★
()
Ответ на: комментарий от Serg_HIS

А что ждать, сам же уже принял участие в виде КО в обсуждении той технологии... Или не понял ещё?

Да я понял, что вы балабол, который мало смыслит в том, о чем тут втирает.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Всегда можно написать цикл медленнее, чем ldir. Только зачем его писать медленнее, если можно сделать быстрее?

Покажи как быстрее?

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Покажи как быстрее?

А потом вы создадите очередную тему «как я писал циклы быстрее ldir»?
Докажите, что вы не балабол, почитайте список инструкций z80 и сделайте цикл быстрее.
Даю вам маячок - поставьте перед собой реальную задачу, а не просто «скопировать блок памяти».

andreyu ★★★★★
()
Ответ на: комментарий от lenin386

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

imul ★★★★★
()
Ответ на: комментарий от lenin386

и ты уже соврал

тут ты почти прав.

но не соврал, а забыл.

Я для экспериментов использовал всего треть экрана (к тому же у4 спектрума была фишка рисоавть именно по 1/3 экрана, горизонтальными полосами. вот я и работал только с одной такой полосой и командой ldir.

Тут все такое говно льют, как дети малые.

Им рассказывают про эксперименты (притом про удачные), а они будто я им парю бизнес версию.

Выдохни :)

Serg_HIS
() автор топика
Ответ на: комментарий от andreyu

Докажите, что вы не балабол, почитайте список инструкций z80 и сделайте цикл быстрее.

Сам придумал задание, сам и исполняй. Меня чего к своим фантазиям приплетать.

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Да тут таких невнимательных полно!

imul ★★★★★
()
Ответ на: комментарий от Serg_HIS

Профессор, ldir перемещает 1 (один) байт за 21 такт, а push заполняет два байта за 11. Ldir используют только ламеры, либо когда ваще лень. её даже компиляторы ЯВУ не генерируют.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 2)
Ответ на: комментарий от lenin386

Средняя длина команды у z80 - примерно 15 тактов

вообще то нет.

При программировани средняя скорость команды вычисляется по частоте исполнения в программе.

типа команда сикла 20 а внутри куча команд (штук 20 по 6 тактов) то будет так (20+20*6)/21 = ~7;

А не по табличным данным в стиле (4 (самая быстрая)+22(самая долгая к примеру))/2 = 13

Serg_HIS
() автор топика
Ответ на: комментарий от CaptainFarrell

Пригодился опыт?

Если вопрос касательно, того работал ли я хоть раз на какой нибудь конторе где для производтсва продукта за который мне платят, то пригодилось от силы 3% и то ничего плохого не стало бы, если бы я не применял свой опыт алгоритмиста, а делал как все, в тупую и бестолково не оптимизируя ни по гибкости, ни по скорости, ни по объёму, и даже по качеству.

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

Сейчас работаю над своим проектом.

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

В прерывание укладывалось абсолютно ровное число тактов.

Понял. В этом смысле ты прав.

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

push заполняет два байта за 11

А напиши как мне обвязку вокруг этого пуша для моделирования работы ldir.

Вот и посчитаем такты.

К тому же ldir таки работает за 16 тактов 1 байт.

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

не вроде именно в цикле таки 21

ну да всёравно.

обвязка вокруг пуша (там ведь и поп должен ещё быть, да ;) )

И переброску адреса стека для пуша и попа каждый раз делать, да?

Serg_HIS
() автор топика
Ответ на: комментарий от andreyu

Млять, какую палитру в спектруме вы подменяли?

действительно может не правильно выразился.

Я не подменял палитру а расширял её.

за счёт чередования картинок я получал даже в 2х цветном варианте уже не 2 оттенка (есть точка или нет), а 3 оттенка.

1. нет точки в обеиз буферах

2. есть точка в одном буфере

3. есть точка в обеих буфферах

Притом если использовать ещё разные цвета для знакомест, то ПАЛИТРУ видимых цветов можно было существенно расширить, комбинирую разные атрибуты в разных буфферах экрана.

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

За 21. 16 тактов у неё тогда, когда дошла до конца.

Да я нашёл доку, рефрешнул свою память.

Дык где реализация, более эффективно заменяющая ldir?

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

Я подскажу если что.

Есть 2 гиковские реализации очистки экрана (забивание нолями или чем угодно по желанию).

Одна с помошью ldir

Другая с помошью push. Ну вот именно эта штука и работает почти в 4 раза быстрее, чем с помощью ldir.

Думаю ты спутал именно этот прикол с перемещением блоков памяти.

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

хотя наверное чуть быстрее чем в 2 раза.

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Сама по себе задача сэмулировать LDIR - это задача, которую выдумал ты, и решать её никто не будет. ОК, Пусть будет задача скопировать NNN байт из места XXXX в место YYYY. На Z80 такие вещи принято решать минимум вот так :

LD SP, (YYYY+NNN)

LOOP:
LD HL, (XXXX+NNN); 20
push hl; 11

LD, hl, (XXXX+NNN-2); 20 
push hl; 11

и так далее

Вот такие цепочки, да. Встречались килобайтные участки такого кода. Можно комбинировать с операторами цикла. Но и задача пересылки блоков памяти тоже так себе задача. Так на Спектрумах не работают. Например, задача заливки, которая решалась просто с помощью блоков PUSH-ей. Задача вывода спрайтов, которая с LDIR просто не решается. Такие дела. А копировать туда-сюда охренные блоки - зачем. Ведь за прерывание весь экран скопировать тупо невозможно.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 3)
Ответ на: комментарий от lenin386

Сама по себе задача сэмулировать LDIR - это задача, которую выдумал ты, и решать её никто не будет.

Враньё - это не я зацепил этот вопрос.

А ты и тот местный любител слово палитра.

И я считаю великой тупизной занимать кодом программы размеров в несколько раз больше по объёму чем копируемый участок. который сам занимает несколько килобайт. И в данном случае их 2(два) участка.

При всего около 25000 байт свободной оперативы.

Просто сказал бы, что ты протупил или забыл, что таким методом просто очитску памяти делали и закрыли бы тему.

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

к тому же для моих целей с лихвой хватало и скорости ldir.

Притом если уж писать многопоточную операционку, то уж точно памяти побольше не помешает.

Serg_HIS
() автор топика
Ответ на: комментарий от lenin386

к тому же выигрышь, всего 25% производительности.

а столько потерь.

Serg_HIS
() автор топика
Ответ на: Афтар, пиши исчо!!! от mandala

Афтар, пиши исчо!!!

Продолжить свою историю извращений на ZX48?

Serg_HIS
() автор топика
Ответ на: комментарий от pacify

Я тогда не сильно парился с количеством записи.

(я мог в последствии в принципе потом даже докрутить и компрессию)

Взял тупо всё по 10

10 КГц

10 КБ

тоесть получается - 10000 байт * 8 бит в байте = 80000 отсчётов

80000 отсчётов делим на 10000 Гц дискретизации - 8 секунд.

я просто хотел проверить получится или нет.

То что можно было узнать мелодию и голос для меня было мегапобедой.

Притом первая прога на ассемблере (не написанная конечно) а именно запущенная.

Тренировался на бумажке писать проги задолго до появления этой чудо коробки.

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Сам придумал задание, сам и исполняй.

Ну точно чукча не читатель:

Покажи как быстрее?

Меня чего к своим фантазиям приплетать.

Фантазия - это ваши потуги в этом форуме. Что там с пояснением про палитры в спектруме?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Ну я вижу, что ты чукча...

читать написанное лично тебе таки не осилил...

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Враньё - это не я зацепил этот вопрос.

Историю не обмануть - Многопоточность на ZX Spectrum (комментарий)

А ты и тот местный любител слово палитра.

Про палитру вы заикнулись, а вас мордой ткнули.

И я считаю великой тупизной занимать кодом программы размеров в несколько раз больше по объёму чем копируемый участок. который сам занимает несколько килобайт. И в данном случае их 2(два) участка.

Держите нас в курсе.

При всего около 25000 байт свободной оперативы.

48K - ~6K = ~42K. А если это спек128, то памяти (пусть и страничной) еще больше.

Просто сказал бы, что ты протупил или забыл, что таким методом просто очитску памяти делали и закрыли бы тему.

Еще раз, ldir использовали в крайних случаях. Называть ldir «Настоящий хак это был ldir» могут только такие диванные специалисты, как вы.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

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

Это вам не к лору :)

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Видать вы сами ничего в своей жизни интересного не сделали

Плохо у вас со зрением.

и вас торбят достижения других притом в школьном возрасте.

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

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Что именно не понятно из того что я описывал по своим достижениям?

И да, где ваши достижения?

То что троллить (притом паршиво и толсто) вы любите я заметил.

По существу вопросы где?

По теме так сказать.

Serg_HIS
() автор топика
Ответ на: комментарий от Behem0th

В нынешнем состоянии без описания реализации и примеров скучновато читать:-(

Под веществами? ;)

Если интересно могу описать реализацию.

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

А я реально это сделал.

ну конечно были нюансы, но как то никому не интересно что ли...

Вопросов нет - нет и ответов.

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

Что именно не понятно из того что я описывал по своим достижениям?

Да собственно все понятно. Только достижений как таковых и нет.

И да, где ваши достижения?

Если речь о спектруме, то ищите по 'WE' Group.

То что троллить (притом паршиво и толсто) вы любите я заметил.

Я не троллил, а макнул вас мордой, что бы вы не вводили в заблуждение случайных читателей.

По существу вопросы где?

Если про палитры на спектруме вам добавить нечего, то у меня к вам вопросов больше нет.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

что бы вы не вводили в заблуждение случайных читателей

очень толсто и без фактов.

Если про палитры на спектруме вам добавить нечего

ты всё таки невнимательный и слишком ленивый

тема была про многопоточность.

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

Если речь о спектруме, то ищите по 'WE' Group.

пускай будет о спектруме.

но ты настолько пафосный и толстый, что у меня нет желания искать.

Serg_HIS
() автор топика
Ответ на: комментарий от andreyu

Забавно что гуглу тоже, судя по всему впадлу искать твои фантазии, по скудному вбросу набора букофф.

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

На втором курсе, в техникуме, я доказал учителю, что её программа по поиску минимума-максимума ошибочна, она мне не поверила. Она думала, что в бейсике зарегистрированы «объекты» (в кавычках, т.к. тогда еще объектов не было) min & max. В конце я написал в блок-схемах программу угадывающую задуманное число, уже не помню подробностей и исходник не сохранился. В итоге у меня по информатике 4.

Не знаю какие были компьютеры, помню только деревянные коробки :-)

andregin
()
Ответ на: комментарий от andregin

Не совсем понял о чём всё это написанное?

Я например могу воспроизвести, чем и занимался весь тред, всё, что я делал со спектрумом с детальным описанием всего. Если будут вопросы конечно.

А ты о чём?

Serg_HIS
() автор топика
Ответ на: комментарий от Serg_HIS

очень толсто и без фактов.

Все факты есть в этом топике.

ты всё таки невнимательный и слишком ленивый

Воспользуюсь вашей фразой «очень толсто и без фактов».

тема была про многопоточность.

Но вы же в ней начали сказку про палитры в спектруме.

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

Я знаю, а вы нет. Ну пустили вы пузыри в лужу, зачем дальше их пускать?

но ты настолько пафосный и толстый, что у меня нет желания искать.

То покажи, то не нужно. Забавное вы чудо.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.