Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн июн 16, 2025 19:37

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 97 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7
Автор Сообщение
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Вс июн 08, 2025 14:59 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 590
Откуда: Москва
Благодарил (а): 60 раз.
Поблагодарили: 28 раз.
Конечно, скорость работы самого Бейсика очень низкая. В этом смысле интересна частота процессора 3KHz, т.к. на этой частоте на глаз выполняется примерно одна простая (let, poke) команда Бейсика в секунду. А это означает, что на простую команду тратится примерно 3K тактов. Аналогичная команда на Форте или Си займет тактов 8. А print "string" может занимать пару сотен тактов, но даже это капля в море в сравнении с 3K тактов. На частоте 763Hz красно-зеленый helloworld выполняется 3:35, а mario за 3:45. Если убрать предварительную очистку экрана, то получится 180 и 190 секунд соответственно.
А если эти же примеры дословно перевести на Си и скомпилировать
Код:
...
int r,g;

inline void test () {
   r = 57350; g = 57351;
   *(int*)57346 = 88; *(int*)57345 = 120;
   *(int*)57353 = 30224;
   *(int*)57347 = 16; *(int*)57348 = 16;
   *(int*)r =  1984; *(int*)g = 63551;
   *(int*)r =  4088; *(int*)g = 61447;
   *(int*)r =   416; *(int*)g = 61887;
   *(int*)r =  3000; *(int*)g = 60351;
   *(int*)r =  2524; *(int*)g = 59871;
   *(int*)r =  1920; *(int*)g = 59271;
   *(int*)r =  2032; *(int*)g = 65535;
   *(int*)r =   512; *(int*)g = 61503;
   *(int*)r =   576; *(int*)g = 57351;
   *(int*)r =   960; *(int*)g = 49155;
   *(int*)r = 14316; *(int*)g = 62031;
   *(int*)r = 16380; *(int*)g = 63519;
   *(int*)r = 16380; *(int*)g = 61455;
   *(int*)r =  3696; *(int*)g = 61839;
   *(int*)r =     0; *(int*)g = 58311;
   *(int*)r =     0; *(int*)g = 50115;
   *(int*)57347 = 252; *(int*)57348 = 8;
}

void main () {
   setup();
   while (1) {
      *(int*)PALETTE = 0b0000000000000100;
      cls();
      test();
   }
}
, то за вычетом очистки экрана время отрисовки на частоте 763Hz составит 3 секунды и меньше 1 секунды соответственно, т.е. Бейсик медленнее Си в 60 раз в первом случае и примерно в 200 во втором.

upd. Сделал быструю заливку, о которой писал постом ниже. На частоте 763Hz скомпилированный код (попеременная очистка экрана и рисование Марио) выполняется 100 раз в минуту. Т.е. 0.6 секунд на cls+Марио против 190 секунд в интерпретаторе. А значит разница не в 200 раз, а в 300 с лишним.


Последний раз редактировалось Total Vacuum Ср июн 11, 2025 13:25, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Вс июн 08, 2025 15:22 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 590
Откуда: Москва
Благодарил (а): 60 раз.
Поблагодарили: 28 раз.
Что касается заливки экрана, то у меня еще есть ферзь в рукаве, просто пока не доделал :) В текущем исполнении для заливки экрана 256x192 кусками по 16 пикселов нужно 256*192/16=3072 записи в регистр 0xE007. В идеальном варианте, если предварительно записать по адресу 0 число 0xE007, то 3072 фрагмента кода 0 0 @ ! дадут 3072*4=12288 тактов. Т.е. не может быть и речи о том, чтобы даже в самом быстром варианте очистить экран за разумное время на сверхнизких частотах. А сейчас очистка сделана через цикл, поэтому она примерно в 2 раза медленнее в сравнении с быстрым вариантом.
Но я завел регистр FILL, будет достаточно записать в него нужное количество пикселов, после чего модуль VGA сам зальет цветом нужную область экрана. Тогда даже на частоте 763Hz будет летать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Вс июн 08, 2025 16:12 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 590
Откуда: Москва
Благодарил (а): 60 раз.
Поблагодарили: 28 раз.
Total Vacuum писал(а):
P.S. Кто-нибудь знает, у какого серийного компьютера в природе самая низкая частота процессора? Мне пока нагуглился 1MHz в C64, но наверняка где-то должны быть и более низкие частоты.
Если верить этой статье https://en.wikipedia.org/wiki/Microprocessor_chronology, то самая низкая частота процессора 200KHz.
Если поискать по строке "MHz" в калькуляторном тесте с ферзями https://www.hpmuseum.org/cgi-bin/articles.cgi?read=700, то там минимальное значение 0.36MHz.
Наверняка есть более медленные процессоры, которые не попали в таблицы. И понятно, что если на входе поставить "кварц" на 10Гц, процессор может работать и на такой частоте. Но, вероятнее всего, на заре компьютеростроения ставили максимально возможную для процессора частоту (а иногда даже превышали ее, как, например, в Вектор-06Ц).
Поэтому будем считать, что самые медленные процессоры работали на частоте 200KHz.
А чтобы играть в более-менее нормальные игры, скорее всего, нужен был процессор с частотой ну хотя бы 1MHz. Взять тот же C64, который не был популярен у нас в стране. Там 1МГц и много игр наштамповано. А все прочие компьютеры/игровые консоли из тех, что более-менее на слуху, имеют более высокую частоту.
Поэтому если на частоте 100/200KHz заведется какая-нибудь приличная игра и/или Бейсик будет выглядеть достойно, победа будет безоговорочной :)

Кстати, по поводу Бейсика или Форта. Т.к. архитектура Гарвардская, сегмент кода для чтения/записи командами @/! недоступен, а значит невозможна и трансляция в нативный код процессора интерпретатором Бейсика/Форта. Это в текущем исполнении, если не вводить какие-то хитрые команды для работы с сегментом кода. Поэтому не стоит ожидать, что скорость работы кода в интерпретаторе сравняется со скомпилированным на стороне. Тем не менее, простор для оптимизации скорости работы текущей версии Бейсика огромный.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Вс июн 08, 2025 19:49 
Не в сети

Зарегистрирован: Ср фев 06, 2008 16:29
Сообщения: 17
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.
Цитата:
P.S. Кто-нибудь знает, у какого серийного компьютера в природе самая низкая частота процессора? Мне пока нагуглился 1MHz в C64, но наверняка где-то должны быть и более низкие частоты.

Встречал в какой-то книжке упоминание что в серии К145 был эмулятор Электроники 60. Там результирующая частота получалась катастрофически низкая, сотни Гц, емнип. Сейчас поиск выдает: https://kiloom.ru/spravochnik-radiodetalej/microsxema/k145ik1810.html и https://kiloom.ru/spravochnik-radiodetalej/microsxema/k145ik1809.html - частота 70-200 кГц.
https://forum.ixbt.com/topic.cgi?id=64:3394:4925#4925 - а тут обсуждение куда это собирались применять.



За это сообщение автора 4myke поблагодарил: Total Vacuum
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Вс июн 08, 2025 22:40 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 590
Откуда: Москва
Благодарил (а): 60 раз.
Поблагодарили: 28 раз.
Да, спасибо :) Я тоже где-то недавно встречал упоминание про 145 серию. Ага, вот тут: https://habr.com/en/articles/467501/
Пишут, что в советских программируемых калькуляторах Б3-34 и МК-52 стояла микросхема К145ИК1302 и работала на частоте 75-100кГц. Т.е. да, частота 70кГц где-то даже использовалась, но вот сделать на таком процессоре игровой компьютер, наверное, было бы проблематично, т.к. АЛУ было однобитное. Наверное, программируемые калькуляторы - это потолок применения для таких процессоров. Ну может еще что-нибудь типа "волк ловит яйца". Надо, кстати, будет разузнать, какой процессор был в "волк ловит яйца". :)

А Электронику-60, кстати, незаслуженно обошли вниманием :) Она достойна упоминания в этой теме хотя бы потому, что именно на ней Алексей Пажитнов сделал первую версию Тетриса. А у нас как-никак тема про ретро-компьютеры с уклоном в игровую тематику. :) Если верить википедии https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0-60, первая версия процессора М1 состояла из нескольких микросхем 581 серии. И пишут, что производительность была 250тыс. оп./c, а значит тактовая была явно выше 250кГц.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Вс июн 08, 2025 23:08 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 590
Откуда: Москва
Благодарил (а): 60 раз.
Поблагодарили: 28 раз.
Да, забыл :) Если у кого есть Spartan-3E Starter Kit, VGA-монитор (еле нашел такой) и PS/2-клавиатура (тоже достаточно раритетная вещь, как оказалось), то можно вживую пощупать Бейсик: http://totalvacuum.ru/UB/basic.bit
За основу взята грамматика из Tiny BASIC (https://en.wikipedia.org/wiki/Tiny_BASIC), пока реализованы операторы:
print выражение
print "строка"
if выражение операция-сравнения выражение оператор
goto метка
let переменная = выражение
gosub метка
return
end
Плюс добавлены оператор poke адрес значение и функция peek адрес. И еще at x y, чтобы двигать "курсор".
Редактор понимает команды clear, list и run. А кроме того имитируется сохранение/загрузка текущей программы по командам save/load: пока код программы сохраняется/читается в/из массива tape (это как регистр М в калькуляторе, только гигантский :) ), но потом можно будет сделать, например, запись на SD-карту.
Процессор стартует на частоте 1.5MHz, но можно поменять прямо на лету. Например, чтобы поставить 50MHz/512=100kHz, надо ввести 2 строки, нажимая после каждой <enter>
Код:
poke 32767 511
run
А дальше либо загружаем "с кассеты" командой load сохраненную ранее программу, либо clear и вводим новую.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Ср июн 11, 2025 12:21 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 590
Откуда: Москва
Благодарил (а): 60 раз.
Поблагодарили: 28 раз.
А примерно так выглядит тот же самый Бейсик, но уже на борту Tang Nano 9K.
Изображение
ссылка на изображение
Периферия, понятное дело, здесь совсем другая. Сейчас прикручены только GPIO, TIMER и UART с базовыми адресами 0x8000, 0x9000 и 0xA000 соответственно. Делителя частоты по адресу 0x7FFF нет, работает на фиксированной 20MHz, оператора at тоже нет, а ввод/вывод через терминал. Для иллюстрации добавлены led и delay, хотя вполне можно было обойтись poke/peek через регистры периферии. "На кассету" "зашита" дефолтная однократно пробегающая по светодиодам волна, но можно поменять на тест с ферзями (закомментировать одну и раскомментировать другую строку под char tape [1024] = в файле FIRMWARE\BASIC\basic.c) или любой другой свой тест, пересобирается через rebuild.bat.
:) Пока сырое, но пусть будет:
http://totalvacuum.ru/UB/tbasic.zip


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 97 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB