Быстро пробежавшись поиском по форуму и заодно решив вспомнить программирование, изваял такой этюд. (Если не подходит по теме, перенесите.)
Интерпретатор языка Brainfuck на Бейсике.
Скрытый текст
10 DIM p$(1,255)
15 DIM c(255)
20 LET p$(1)="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.e"
30 LET j=1: LET i=1
40 IF p$(1,i)=">" THEN LET j=j+1
50 IF p$(1,i)="<" THEN LET j=j-1
60 IF p$(1,i)="+" THEN LET c(j)=c(j)+1
70 IF p$(1,i)="-" THEN LET c(j)=c(j)-1
80 IF p$(1,i)="." THEN PRINT CHR$ c(j);
90 IF p$(1,i)="," THEN INPUT x$: LET c(j)= CODE x$
100 IF p$(1,i)<>"[" THEN GO TO 110
101 IF c(j)=0 THEN IF p$(1,i)<>"]" THEN LET i=i+1: GO TO 101
102 IF p$(1,i)="]" THEN LET i=i+1: GO TO 200
110 IF p$(1,i)<>"]" THEN GO TO 200
111 IF c(j)<>0 THEN IF p$(1,i)<>"[" THEN LET i=i-1: GO TO 111
200 IF p$(1,i)<>"e" THEN LET i=i+1: GO TO 40
[свернуть]
Можно в полной мере насладиться отсутствием проверок входящих данных, границ диапазонов, громоздкостью конструкций и прочими прелестями *****кода начинающего программиста.
Из-за отсутствия наличия поддержки вложенных циклов работают только простейшие программы.
Кроме изначальной Hello World! еще работает преобразование строчных букв в верхний регистр
",----------[----------------------.,----------]".(В конце поставить букву e как окончание кода).
Последний раз редактировалось Outcast; 23.02.2020 в 21:59.
Маленькая Библиотечка
Leningrad 2012
Scorpion ZS 256 Turbo+ - Nemo IDE - Nemo FDC - S.M.U.C - ZXMC - В процессе сборки.
Про LDIR
Имеем такой код:
в HL - Начало буфера с от такой картинкой,Код:;----------------------------------- push hl ld de,16384 ld bc,6144 ldir pop hl ;-----------------------------------
и МЫ ее с максимально возможной скоростью (?) переносим в экран.
Я правильно понимаю, что во фрейм не уложиЦЦа ну никак??
в аттаЧе сам тест, начатЬ заново - кнопка <5>, кнопки 1-4 жать не надо
И да ,сам то вопрос - это максимум, что можно на стандартном Спектруме?
Последний раз редактировалось zebest; 03.04.2020 в 21:35.
Profi v3.2 -=- Speccy2010,r2
ну так этот тест как раз "по-другомуу", для DMA.
на 10 сек включаю DMA, скорость заметно вырастает, красная полоска на бордюре - как раз процент "утилизации".
Забавная штука.
ps - эм. а малой кровью нельзя ли сделать, чтобы правая часть не портилась?))
Для теста - то - " и таааааак сойдееет..." (с), но как то неаккуратненько, доктор (с)
upd: а, нее, все, третья реинкарнация мне уже нравиЦЦа.
Заменил видео.
Синий бордюр - обычный режим, Красный бордюр - с включенным ДМА
Upd2: Ыыыыыыыыыыы..
ZEsarUX_win-8.2 ( и ранее) - оказуеЦЦа поддерживает DMA!
Кнопки 1 и 4 - работают более правильно, хоть и не идеально, а 2 и 3 - чет тормозят.
Но это уже Аве Цезаря надо спрашивать.
Так что можете заценить работу ДМА в эмуле.
И да, в Следующем есть то жи ДМА, но то жи свой собственный, "непохожий на других"![]()
Последний раз редактировалось zebest; 04.04.2020 в 14:12.
Profi v3.2 -=- Speccy2010,r2
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
I did answer to your private message here, but now I did notice the zx-pk.ru site writes something about your inbox being full, so I'm not sure if the answer was delivered, let me know... (I hope it was, because I don't have copy of it, and it was quite long answer ...).
Systems using original Zilog DMA chip (or similar interface, like zxnDMA) are a bit more difficult to set up than `ldir`, especially the first-time init, but they can be configured to do 2+2 T-state transfers, so 4T per byte beats easily even ZX pop+push trick for memory transfer (or unrolled `ldi` block) for any transfer longer than 20-30 bytes. (and once you know the state of DMA chip, you can shorten the init sequence a lot, for second+ transfer)
(too lazy to provide example, but my DMA tests for Zilog DMA and zxnDMA are public: https://github.com/MrKWatkins/ZXSpectrumNextTests
(look for Tests/Misc/ for two Zilog DMA tests, and Tests/Base/DMA/ for zxnDMA (ZX Next) test).
zebest(04.04.2020)
Спасибо, твои рассказы про различные DMA (железные - Z8410, Z84C10, и не очень - zxnDMA) - мне очень понравились. Для общего развития . У меня же еще одна реинкарнацийя, отличная от всех вышепоименованных :-)
Off
Соль в том, что к той реинкарнации, с которой имейю дело я - совершенно нет никакой документации. Ноль, нет , даже так - 0/0.[свернуть]Off
За три года автор так и не удосужился хоть что-то описать, есть две с половиной программы, хорошо что в исходникахТак же написанные три года назад. Все. Любитесь как хотите. Желающих похоже не нашлось. на тот же Следующий вон тоже пара-тройка программ есть, но там видимо хоть ман-ы есть.
Вобщем у меня как всегда, что бы не делал - получается фигня на бордюре)
С бордюром при ДМА все гораздо веселее. Напоминаю, в стандартном Спеки условная минимальнайя "точка" 12 тактов, или 24 pix, в лучшем случае, как делаю я, или 16 тактов (32 pix), как делал Великий VNN.
Тут интереснее, вывод в порт ровно 4 такта, итого 8 pix, что в 3 раза интереснее. Результат - выше.
Это в режиме zx48, в режиме Пятногона потом поэксперементирую
Файл не прилагаю, ибо в том эмуле от Тцезаря если mem=>mem хоть как то работает, то mem=> I/O не работает почти никак, отлаживать невозможно подделки).
[свернуть]
Последний раз редактировалось zebest; 09.04.2020 в 22:09.
Profi v3.2 -=- Speccy2010,r2
А я всё сижу в печали, так как обделён программиздскими навыками.
Всё думу думаю, как бы совокупить компрессор и плавные переходы (скролл из-за краёв экрана).
Конечно можно забить на всё, сделать банальное слайдшоу, как это было в Myst. Но это некрасивое уродство. Спек должен превосходить Макинтоша/ДОСа.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)