Просмотр полной версии : Почему BBC Basic так тормозит?
Результаты (https://zx-pk.ru/threads/32413-mandelbrot-v-ascii-art.html?p=1129117&viewfull=1#post1129117) просто невероятно тормозные. Как такое может быть?! Может кто что-нибудь подскажет, поможет нашим друзьям из Туманного Альбиона? Они там всё ж работают и с УКНЦ... Прикрепляю образ загрузочного диска для УКНЦ. После загрузки выходим из вильнюс-бейсика SYSTEM, затем запускаем RUN BBC и затем LOAD"MNDLB.ASC" и RUN.
У меня пока есть предположение, что возможно бибисишный бейсик как-то переключается в пошаговый режим, но знаю как это проверить.
76044
Или просто тормозная реализация.
Когда писал статью про компьютер Jupiter Ace наткнулся (https://regmedia.co.uk/2012/04/12/t8m_12.jpg) (картинку нужно увеличить, чтобы прочитать цифры) на сравнительный анализ бейсиков для разных компьютеров из которого следует что BBC Basic не такой уж и тормознутый.
Сам по себе язык не может быть тормознутым или быстрым. Тормознутой или быстрой может быть его конкретная реализация.
OrionExt
01.09.2021, 21:25
меня радует litwr тестирую бейсики, он видимо серьезно относиться к этому?) только вот он забывает упануть какая там система плавающая запятая? вот даже уже не смешно.
все тут так. куда не ступнуть :(
Lethargeek
01.09.2021, 21:31
а вдруг там вообще эмулятор 6502 внутре крутится? :v2_dizzy_biggrin2:
А со стандартным DEC'овским Бейсиком сравнивали? Если что, по слухам, вильнюсский Бейсик компилирующий - когда ему говоришь RUN, он сначала компилирует, а затем исполняет, быстро. А DEC-овский - классический интерпретатор, на Э-60, помнится, было порядка 100 операторов в секунду. А то, может быть, вы хотите от интерпретатора Скорости, как от скомпилированной программы?
Когда писал статью про компьютер Jupiter Ace наткнулся (https://regmedia.co.uk/2012/04/12/t8m_12.jpg) (картинку нужно увеличить, чтобы прочитать цифры) на сравнительный анализ бейсиков для разных компьютеров из которого следует что BBC Basic не такой уж и тормознутый.
Это известный факт, что BBC Basic на BBC Micro/Master быстрый. Он позволяет оптимально использовать целые. Хотя в целом его скорость больше обязана частоте процессора, чем качеству кода. Этот бейсик фирменно перенесли на Z80, 32016, ARM, x86 и возможно на какие-то ещё процы. Порт для PDP-11 немного левый, им занимается один энтузиаст. Сил не хватает, он ещё тригонометрию не сделал, сомневаюсь, что встроенный ассемблер работает.
По моим представлениям, просто из-за качества кода в 300 раз медленнее быть не может. Вильнюсский бейсик на БК, если сравнивать с бибисишным, все равно чуть медленнее, несмотря на полукомпиляцию. Поэтому загадка торможения пока остаётся...
- - - Добавлено - - -
меня радует litwr тестирую бейсики, он видимо серьезно относиться к этому?) только вот он забывает упануть какая там система плавающая запятая? вот даже уже не смешно.
все тут так. куда не ступнуть :(
Нужно разобраться почему так медленно, речь совсем не о том, что быстрее. Не понятно, как так получается.
Что касается формата fp, то разницы большой быть не должно. Это несложно и проверить. Вот программка
10 C=0 : T=1 : Q=0.5
20 C=C+1 : Q=Q/2 : S=T+Q : IF S<>T THEN 20
30 PRINT "MANTISSA BITS: ";C
40 REM TRAP 70
50 C=0 : T=2
60 C=C+1 : Q=T : T=T*2 : IF Q<>T THEN 60
70 PRINT "MAX EXPONENT: +";C
80 REM TRAP 110
90 C=0 : T=0.5
100 C=C+1 : T=T/2 : IF T<>0 THEN 100
110 PRINT "MIN EXPONENT: -";C
120 END
На вильнюсском бейсике для УКНЦ почему-то по-умолчанию используют формат 3+1 (на БК ПЗУ Бейсике - 7+1), на BBC Basic всё как всегда 4+1 (4 байта на мантиссу и 1 на порядок). Это может дать разницу максимум на треть, а не в 300 раз...
Lethargeek
03.09.2021, 00:26
Этот бейсик фирменно перенесли на Z80, 32016, ARM, x86 и возможно на какие-то ещё процы. Порт для PDP-11 немного левый, им занимается один энтузиаст. Сил не хватает, он ещё тригонометрию не сделал, сомневаюсь, что встроенный ассемблер работает.
а порты для перечисленных - с ассемблерами?
а BBC Basic всё как всегда 4+1 (4 байта на мантиссу и 1 на порядок)
Т.е. предположительно порт на PDP оперирует данными по-спектрумовски - исключительно байтами? И наверное ещё и для вычислений использует всего один регистр в качестве аккумулятора, да ещё и только мл. байт его, после каждой операции очищая ст. байт. Тогда не удивительно, что он будет жутко тормознутый, если функции умножения деления плавающих чисел вычислять 8ми битными алгоритмами.
К дистрибутиву Basic PDP-11 шли разные библиотеки, под разные арифметические опции , по сему "формат 3=1" - есть стандартное представление для чисел с плавающей запятой одинарной точности на PDP-11. Ещё вроде как была опция генерации с двойной точностью, но я с ней не разбирался.
BBC Basic PDP11 можно оптимизировать для УКНЦ, сейчас не используются команды умножения и деления, и текущие реализации не самые быстрые (особенно деление).
Чёт мне не понятен смысл всех гаданий и предположений. Исходники есть - кому интересно - можно залезть и посмотреть
BlaireCas
03.09.2021, 15:19
Результаты просто невероятно тормозные.
Запустил на реальной УКНЦ. И .. немного подождал :v2_dizzy_sleep2:. 12876.3 секунды (ну хоть УКНЦ прогрел). Фрактал рисуется верно.
Заодно можно сказать что эмулятор UNKCBTL по таймингам в данном примере довольно точен (имхо +/-3% это уже могут сами укнц плавать по частотам) и достаточно тестировать на нем.
Открыл код васика.. а черт его знает почему оно тормозит. Операции умножения и деления там реализованы циклическими сдвигами/сложениями.
Деление вроде как 48 раз крутит эти операции. Вроде вот кусок кода если верно понимаю:
; Division - <number> / <number>
; ==============================
; On entry, r2/r3/r4 = RHS value
; sp=>retaddr, r2/r4/r3 = LHS value
;
.fnDivide
jsr pc,EnsureFloat
beq errDivideZero ; RHS=0, num/0 = divide by zero
jsr pc,SwapStack
.fnDivideSwap
jsr pc,EnsureFloat
beq fnMultiplyZero ; LHS=0, 0/num = 0
;
; r2/r3/r4=LHS value
; sp=> RHS value
;
; to divide,
; exp=expL-expR
; man=manL/manR
; then renormalise
;
sub 2(sp),r2 ; Subtract exponents
add #&81,r2 ; Exponent biased from &80
; ; Exponent is tested after normalisation as
; ; exponent may get inc/dec'd back into range
; ; by normalisation
jsr pc,fnFloatPrepare ; Stack exponent, get sign of result, add '1' to mantissas
mov r5,-(sp) ; Save program pointer
mov r1,-(sp) ; Save sign of result
mov #48,r5 ; r5=48, number of bits to divide
clr r2
; could speed this up by doing 32+8 bits and pre-rotating values
;
; we now have
; r1:r0=running total, starts at LHS dividend
; r2:r3:r4=initially LHS mantissa, result rotated into
; r5 =48, number of bits to add/multiply
; sp=>sign, saved r5, retaddr, exponent, r4, r3 = RHS value
;
br fnDivideStart ; Jump into division loop
.fnDivideFloatLp
rol r2
rol r1 ; Rotate carry bit into r3:r4 result
rol r0
.fnDivide34
clc ; Rotate dividend
rol r4
rol r3
bcs fnDivideSubtract
.fnDivideStart
sub 8(sp),r4 ; Trial subtract total=total-RHS divisor
sbc r3
sub 10(sp),r3
bcc fnDivideNoRestore
add 8(sp),r4 ; Add RHS back to restore total
adc r3
add 10(sp),r3
clc
br fnDivideCount
.fnDivideSubtract
sub 8(sp),r4 ; Trial subtract total=total-RHS divisor
sbc r3
sub 10(sp),r3
.fnDivideNoRestore
sec
.fnDivideCount
dec r5
bne fnDivideFloatLp ; Loop for all bits
;
; Answer is now in r0:r1:r2
; Transfer to r3:r4:xx
; Then normalise
;
; Need to get
; r3:r4:r1=mantissa
; r2 =exponent
; (sp) =return address
; r0 =<sign of result><operator>
;
mov r0,r3
mov r1,r4
.fnDivideFinish
mov (sp)+,r0 ; Get sign of result
mov (sp)+,r5 ; Restore program pointer
mov (sp)+,r1 ; r1=return address
mov r1,4(sp) ; Store further up stack
mov r2,r1 ; r1=rounding bits
mov (sp)+,r2 ; r2=exponent of result
tst (sp)+ ; Drop part of RHS from stack
bis #&80,r0 ; Set <not compare>
jmp fnFloatNormaliseDiv; Jump to normalise and insert sign bit
Попробовал простейшую программку типа хелловорлд - вообщем такое впечатление что в этот бейсик специально встроили задержку на выполнение каждой строки. То-есть все эти деления/умножения вовсе не причем. Банально пустой цикл крутит с тормозами по 0.5сек выполнения строки.
Как-будто интерпретатор для получения каждого символа в строке кода натужно кучу функций выполняет. Именно такое впечатление создалось, может и правда какой жуткий вызов функции RT-11 на каждый символ делает ибо строки с REM - тоже тормозят.
Вообщем надо код копать (а он большой).
UPD: кажется нашел в чем дело - на каждый чих этот васик делает EMT 224(10) (типа проверяет на нажатие ESC или УПР-Ц или еще чего), надо попробовать его от этого непотребства отучить
BlaireCas
03.09.2021, 17:22
Отучил BBC васик от нехорошего вызова EMT на каждый чих.
Стало 231.2сек что видимо уже куда ни шло. Реальная УКНЦ.
https://i.imgur.com/5Ie2e2S.jpg
Дальше можно видимо поковыряться и остальное тоже так-сказать "улучшить" в вызовах RT-11, но большого смысла не вижу (у нас и так уберскоростной бейсик есть).
Тормоза отключились добавлением в RT11IO файле такого
...
; Check for Escape state
; ======================
.IO_Escape
; +Blaire:
rts pc
; +Blaire: lets check if can use without this
tstb SV_ESCFLG ; Check local Escape flag
bmi errEscape ; Background Escape pending
...
А также закомментировал в файле Execute на всяк.пож. вызов этой процедуры.
...
; Execute program code
; =====================
; R5=BASIC program pointer
; R4/R3=32-bit accumulator
; R2=value type/exponent
; R1/R0=working
;
.Execute
;jsr pc,IO_Escape ; Check Escape state
.ExecLineNext
movb (r5)+,r0 ; Step past space
...
Процедура судя по комментам чекает нажатия кнопок (вообщем ttyin какой-то ждет) и соответственно тормозит весь интерпретатор.
BBC.SAV скомпиленный с данными изменениями:
76053
BBC Basic PDP11 можно оптимизировать для УКНЦ, сейчас не используются команды умножения и деления, и текущие реализации не самые быстрые (особенно деление).
Автор что-то по этому поводу разъяснял. Типа что аппаратные умножения и деления хороши только для небольших мантисс, а для больших растут какие-то издержки. Возможно, что идея сделать бейсик более портабельным также как-то учитывалась.
- - - Добавлено - - -
Отучил BBC васик от нехорошего вызова EMT на каждый чих.
Стало 231.2сек что видимо уже куда ни шло. Реальная УКНЦ.
Реально круто! На UKNCBTL - 226.92c - почти в точности как на железе - респект автору эмулятора, его бы ещё в Linux...
Прежде чем сообщать автору, который и попросил меня потестировать бейсик, надо разобраться с некоторыми вопросами.
1) сверхтормознутость этого EMT 224(10) - это особенность RT-11 вообще или только порта RT-11 для УКНЦ? Может кто запустит оба бейсика на ДВК или ещё какой PDP-11? Прикрепляю архив с обоими бейсиками: исходным, тормозящим (BBC.SAV) и исправленным (BBC1.SAV).
2) не пострадала ли функциональность бейсика после правки? Может ли он сейчас отлавливать нажатия критических клавиш?
76056
76054
Вильнюсский бейсик теперь только примерно раза в 4 быстрее - это уже объяснимо полукомпиляцией и недостаточной оптимизаций порта бибисишного бейсика для пдп.
Извиняюсь, сначала не тот архив прикрепил - исправлено.
порта RT-11 для УКНЦ
Никакого специального портирования RT-11 на УКНЦ не требуется.
Прогнал тест на эмуляторе RT-11. Исходный тормознутый работает под этим эмулятором также как и на УКНЦ тормознуто. А исправленный работает очень хорошо. Он даже обогнал вильнюсский бейсик для ДВК. BBC Basic работал 1.8 c, а ДВК бейсик - около 3 с - не знаю как под ДВК использовать таймер, поэтому использовал секундомер. Таким образом мой первый вопрос отпадает.
Странно, что под эмулятором BBC Basic почти в 2 раза быстрее, а на УКНЦ в 6 раз медленнее - новая загадка.
BlaireCas
04.09.2021, 01:18
не пострадала ли функциональность бейсика после правки?
Ясное дело что пострадала. Автор ведь не случайно поставил в обработке каждой строки вызов обработки ESC-последовательностей.
Могу предположить что от моего изменения кода пропала остановка выполняющейся программы по ESC, а также после еще каких-либо кнопок которые генерят ESC-последовательности. А может и еще чего навернулось связанное с этим.
Что такое EMT 340(8) - оно-же .TTINR - это поместить код нажатой кнопки в R0 и установить флаг С если кнопка не нажата. Вроде как это "быстро" действует. Тем не менее фиг его знает насколько быстро. Я не разбирал потроха RT-11 для УКНЦ.
И если запустить этот васик в rt11.exe (кажется эмулятор Patron'a) который вообще под windows и работать должен с бешеной скоростью - задержка там очень большая тоже есть. То-есть возможно в опросе клавиатуры участвует таймер.
Имхо надо просто автору сказать что мол "тормозит из-за вот этого". (показать в моем посте код для Execute). Он вызывает EMT 340(8) аж два раза.
Посоветовать для УКНЦ (а он кстати чекает машину уж не знаю верно-ли) не делать постоянные вызовы .TTINR когда это не требуется. Тогда правда неясно как из бесконечного цикла выходить (ахах - reset-ом)...
Для УКНЦ можно конечно какие-нибудь специфические регистры заюзать, но это не RT-11 way уже будет.
Странно, что под эмулятором BBC Basic почти в 2 раза быстрее, а на УКНЦ в 6 раз медленнее - новая загадка.
Ну это как-раз и не странно. Сравнивать эмулятор просто системы RT-11 с эмулятором реального железа это скажем-так - неправильно. (типа соленое круглее чем красное получится).
Посоветовать для УКНЦ (а он кстати чекает машину уж не знаю верно-ли) не делать постоянные вызовы .TTINR когда это не требуется. Тогда правда неясно как из бесконечного цикла выходить (ахах - reset-ом)...
Что мешает поставить счётчик и проверять ввод, скажем, только каждую сотую строку исполняемой программы?
а порты для перечисленных - с ассемблерами?
Вроде для Z80, ARM, x86 и даже ARM-64 и х86-64 ассемблеры есть. Кстати, есть ещё порты для 6809, 68000, 65816 и 6309, но как там с ассемблерами не знаю. Встроенные ассемблер - очень хорошая вещь для компилятора, но для интерпретатора это скорее спорное подспорье. Потому что приходится постоянно хранить в памяти как исходник, так и код. Кроме того, ассемблер интерпретатор должен компилировать, а это если код большой, это может вызвать неожиданную задержку.
Добавлю ещё, что есть вариации BBC Basic с праздничным названием Бренди - эти вариации ассемблера не поддерживают принципиально.
- - - Добавлено - - -
Имхо надо просто автору сказать что мол "тормозит из-за вот этого". (показать в моем посте код для Execute). Он вызывает EMT 340(8) аж два раза.
Запостил - https://stardot.org.uk/forums/viewtopic.php?p=333283#p333283
EDIT. И, конечно, очень Вам благодарен.
Ну это как-раз и не странно. Сравнивать эмулятор просто системы RT-11 с эмулятором реального железа это скажем-так - неправильно. (типа соленое круглее чем красное получится).
Мы не системы сравниваем фактически, а как бы разные варианты PDP-11. Как известно тайминги у разных моделей могут различаться очень сильно. Поэтому возникает предположение, что на каких-то моделях PDP11 бибисишный бэйсик может быть реально быстрее вильнюсского...
- - - Добавлено - - -
Никакого специального портирования RT-11 на УКНЦ не требуется.
Попробовал запустить на УКНЦ вильнюсский бейсик с ДВК - запустился, но любая попытка обратиться к файловой системе бейсик ломает. Естественно предположить, что RT-11 для УКНЦ как-то не совсем стандартно работает с дисками. И это при том, что в эмуляторе RT11 бейсик с ДВК работает отлично.
Естественно предположить, что RT-11 для УКНЦ
Или взять стандартный дистрибутив RT-11, добавить драйвер MZ и убедиться, что больше ничего для запуска RT-11 на УК-НЦ не требуется
- - - Добавлено - - -
Вот тут (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr) я именно это и сделал. Скопировал файлы с дистрибутива RT-11 5.7, добавил MZ.SYS, HD.SYS и программу ClkOn (она подсказывает RT-11, что есть таймер и что он 50 Гц) и вауля - я ПОРТИРОВАЛ RT-11 на эмулятор Патрона, эмулятор УК-НЦ от Никиты и на реальный УК-НЦ. Какой я молодетс!
Попробовал запустить на УКНЦ вильнюсский бейсик с ДВК - запустился, но любая попытка обратиться к файловой системе бейсик ломает.
Ну и что бы добить (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/uknc.jpg)
Или взять стандартный дистрибутив RT-11, добавить драйвер MZ и убедиться, что больше ничего для запуска RT-11 на УК-НЦ не требуется
- - - Добавлено - - -
Вот тут (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr) я именно это и сделал. Скопировал файлы с дистрибутива RT-11 5.7, добавил MZ.SYS, HD.SYS и программу ClkOn (она подсказывает RT-11, что есть таймер и что он 50 Гц) и вауля - я ПОРТИРОВАЛ RT-11 на эмулятор Патрона, эмулятор УК-НЦ от Никиты и на реальный УК-НЦ. Какой я молодетс!
Благодарю Вас за интересные результаты. Но Вы лишь доказали, что типовой RT11SJ для УКНЦ совсем нетиповой в общем смысле. Теперь об оценке Вашей работы. К сожалению, есть явные промахи:
1) вы не портировали на эмулятор Патрона, а лишь модифицировали его конфигурацию - нельзя на эмулятор RT11 портировать эмулятор RT11, если выражаться правильно;
2) вы даже НЕ ПЫТАЛИСЬ портировать на БК - самый популярный PDP-11 компьютер; :(
3) вильнюсский бейсик для УКНЦ перестал работать на собранной Вами системе - дисковые команды не работают;
4) таймер бибисишного бейсика стал выдавать некоректные данные, на исходных RT11 для УКНЦ и эмуляторе Патрона всё работало точно.
Итак, отлично ставить "молодцу" нельзя, можно только поставить хорошо с минусом, минус за гонор. :)
вильнюсский бейсик для УКНЦ перестал работать на собранной Вами системе - дисковые команды не работают;
Ну и что бы добить
Это именно на ней
Благодоря диску от Hunta, удалось прогнать мандельброт на УКНЦ с вильнисским бейсиком с ДВК. Сюрприза не случилось, как и в исходной системе имеем отношение 6:1 - скорости вариантов для ДВК и УКНЦ ожидаемо не различаются.
Но Вы лишь доказали, что типовой RT11SJ для УКНЦ совсем нетиповой в общем смысле.
Это не типовой RT11SJ. Это не понятно какой RT11SJ. В случае RT11SJ без вмешательства "специалистов" - всё работает.
таймер бибисишного бейсика стал выдавать некоректные данные
Учитывая, то была взята RT11 из дистрибутива - она сгенерирована на 60 Гц. Результаты и будут некорректны.
- - - Добавлено - - -
эмулятор RT11
Это не эмулятор RT-11. Это эмулятор ДВК Патрона с зашитой конфигурацией (вроде не поменять, наверняка не скажу) и с зашитым диском RT-11 (а вот это поменять можно).
- - - Добавлено - - -
вы даже НЕ ПЫТАЛИСЬ портировать на БК
А зачем? Речь шла о том, что нетронутая RT-11 вполне себе идёт на УК-НЦ и всякие слова о портировании RT-11 на УК-НЦ (как, впрочем, и на ДВК) - это громкие слова и ничего более. И в моем сообщении ПОРТИРОВАНИЕ - это был САРКАЗМ, для особо не понимающих.
- - - Добавлено - - -
Естественно предположить, что RT-11 для УКНЦ как-то не совсем стандартно работает с дисками
И это заявление - полная чушь. Попался хреновый вариант (доделанный умельцами) RT11 - это не проблемы ни RT ни УЦ-НЦ
Это именно на ней
Вот картинка с крашем УКНЦ-бейсика на вашей системе.
76079
- - - Добавлено - - -
Это не типовой RT11SJ. Это не понятно какой RT11SJ. В случае RT11SJ без вмешательства "специалистов" - всё работает.
Диск взят с UKNCBTL. Предполагаю, что автор использовал типичный диск с вильнюсским бейсиком.
Учитывая, то была взята RT11 из дистрибутива - она сгенерирована на 60 Гц. Результаты и будут некорректны.
Неужели BBC Basic не определяет частоту? Даже мой пи-затвор определяет, а англичане люди аккуратные и дотошные. Скорее там ваш драйвер таймера всё перепутал.
Это не эмулятор RT-11. Это эмулятор ДВК Патрона с зашитой конфигурацией (вроде не поменять, наверняка не скажу) и с зашитым диском RT-11 (а вот это поменять можно).
В этом весь Hunta - он знает название лучше самого автора! Авторское название - Эмулятор RT-11 для консоли Windows.
А зачем? Речь шла о том, что нетронутая RT-11 вполне себе идёт на УК-НЦ и всякие слова о портировании RT-11 на УК-НЦ (как, впрочем, и на ДВК) - это громкие слова и ничего более. И в моем сообщении ПОРТИРОВАНИЕ - это был САРКАЗМ, для особо не понимающих.
Как видите, в Вашем недопортировании возникли нестыковки.
И это заявление - полная чушь. Попался хреновый вариант (доделанный умельцами) RT11 - это не проблемы ни RT ни УЦ-НЦ
Однако, это типовой диск из комплекта для УКНЦ.
Какая досада, (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/uknc2.jpg)
у Хунты опять работает (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/uknc3.jpg)
- - - Добавлено - - -
Диск взят с UKNCBTL. Предполагаю, что автор использовал типичный диск с вильнюсским бейсиком.
Понятия не имею, что это за диск и откуда он взят. Нетронутая RT11 - и всё работает
Неужели BBC Basic не определяет частоту?
Понятия не имею
Скорее там ваш драйвер таймера всё перепутал.
Да да - драйвер - он такой драйвер. Вот его текст
.TITLE CLKON
.IDENT /KXX.01/
.MCALL .EXIT
$SYPTR =: <^o54>
CONFIG =: <^o300>
CLK50$ =: <^o40>
CLOCK$ =: <^o100000>
START:
MOV @#$SYPTR, R5 ;Get the pointer to the base of the RMON
BIS #CLOCK$!CLK50$, CONFIG(R5)
.EXIT
.END START
Кто где чего путает?
Авторское название - Эмулятор RT-11 для консоли Windows.
И это не делает его эмулятором именно RT-11
Как видите, в Вашем недопортировании возникли нестыковки.
Где?
Однако, это типовой диск из комплекта для УКНЦ.
И? Ещё раз - за поделки не известно кого - не отвечаю
Какая досада, (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/uknc2.jpg)
у Хунты опять работает (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/uknc3.jpg)
Это бейсик ДВК или УКНЦ - по картинке мне непонятно. Я запускал бейсик с диска UKNCBTL (MZ1: ) - висит. У вильнюсских дисковых бейсиков вроде есть серьёзная проблема LOAD не позволяет использовать имя диска вообще.
- - - Добавлено - - -
И? Ещё раз - за поделки не известно кого - не отвечаю
Понятно, что не отвечаете. Но людям это не мешает такие варианты RT11 на УКНЦ широко использовать. А таймер заработал неправильно. Кто виноват Hunta или автор-англичанин пока не знаю.
- - - Добавлено - - -
Да да - драйвер - он такой драйвер. Вот его текст
Теряете форму. Драйвер прописывает 50 Гц, а Вы утверждаете, что система сгенерирована на 60 - понятно в такой муре бедному BBC Basic не сориентироваться.
Это бейсик ДВК или УКНЦ
Если что, вот вильнюсский Бейсик. На ДВК работает молча. Точно не помню, но, вроде-бы, именно он на ДВК с КГД работал с графикой.
Попробовал запустить на УКНЦ вильнюсский бейсик с ДВК - запустился, но любая попытка обратиться к файловой системе бейсик ломает.
Какой "не работал" - тот и проверял
У вильнюсских дисковых бейсиков вроде есть серьёзная проблема LOAD не позволяет использовать имя диска вообще.
И причём здесь RT?
Кто виноват Hunta
Текст "драйвера" я привёл
Драйвер прописывает 50 Гц, а Вы утверждаете, что система сгенерирована на 60
Система сгенерирована и по умолчанию будет использовать счётчик 60 Гц. Но какой счётчик использовать - определяет бит CLK50$. Сброшен - 60 Гц, установлен - 50 Гц. Так что переключить это легко.
понятно в такой муре бедному BBC Basic не сориентироваться.
Мура пока от вас идёт
- - - Добавлено - - -
Драйвер
Для особо одарённых - это НЕ драйвер
- - - Добавлено - - -
Не истины ради, а троллинга для - "Портирование" RT11 v5.7 на "эмулятор RT11" Патрона (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/RT1157onRT11Emulator.jpg) ака предконфигурённый эмулятор ДВК Патрона
Я запускал бейсик с диска UKNCBTL (MZ1: ) - висит. У вильнюсских дисковых бейсиков вроде есть серьёзная проблема LOAD не позволяет использовать имя диска вообще.
Откуда взялось такое мнение, что вильнюсский Бейсик не позволяет использовать имя диска? Даёте команду FILES "MZ1:" и просматриваете содержимое диска MZ1:. Никаких проблем.
Загрузился с MZ1:, в других приводах дисков нет. Никаких проблем, команда FILES показывает содержимое каталога.
Откуда взялось такое мнение, что вильнюсский Бейсик не позволяет использовать имя диска?
Не откуда, а от кого.
Откуда взялось такое мнение, что вильнюсский Бейсик не позволяет использовать имя диска? Даёте команду FILES "MZ1:" и просматриваете содержимое диска MZ1:. Никаких проблем.
Загрузился с MZ1:, в других приводах дисков нет. Никаких проблем, команда FILES показывает содержимое каталога.
Вообще-то писал конкретно про команду LOAD. У меня, например, LOAD"MZ0:FILE.ASC" не работает. А команда FILES у меня работает, но про неё не писал. Хотя у FILES параметр должен принимать и маску, например, "*.SAV" - покажи все sav-файлы - это похоже недоделали.
- - - Добавлено - - -
Может кто ещё подскажет, как улучшить работу BBC Basic, чтобы и быстр был и ESC чекал? Есть ли в RT11 возможность создать свой обработчик таймерного прерывания? Это был бы лучший способ. Если нет, то возможно придется использовать счетчик и запускать вызов проверки на, скажем, каждый сотый раз.
Какой "не работал" - тот и проверял
Похоже Hunta опять всё перепутал. Ну сколько можно муру разводить?! Объясняю для Вас опять поподробнее - пострайтесь хоть сейчас не путать.
1) Загружаем стандартный диск с вильнюсским бейсиком для УКНЦ на УКНЦ - Hunta не любит этот диск, но он стандартный и ему придётся потерпеть. Пробуем поработать здесь с вильнюсским бейсиком для ДВК - облом - команда FILES крашит.
2) Загружаем Hunta-диск на УКНЦ. Пробуем поработать здесь с вильнюсским бейсиком для УКНЦ - опять облом - команда FILES опять крашит.
Сплошной с Hunta облом. :(
Система сгенерирована и по умолчанию будет использовать счётчик 60 Гц. Но какой счётчик использовать - определяет бит CLK50$. Сброшен - 60 Гц, установлен - 50 Гц. Так что переключить это легко.
Это всё понятно и неинтересно. А BBC Basic тайминги дает неправильные под Вашей системой, а раньше давал правильные.
Решил проверит Вашу сборку с π-затвором, который тщательно апробирован на более дюжины разных PDP-11 систем. К своему большому удивлению обнаружил, что ваша сборка как и стандартная дают правильные тайминги. Поэтому нужно смотреть в коды бибисишного бейсика, есть ли там проверка на 50/60 Гц. Однако, естественно предположить, что качественная система должна изначально генерироваться на 50 Гц, а не патчится всякими сомнительными костылями, пусть даже и не драйверами. Хотя программа, которая модифицируют систему, влияет на использование аппаратуры таймера - это почти драйвер.
Не истины ради, а троллинга для - "Портирование" RT11 v5.7 на "эмулятор RT11" Патрона (http://www.KpXX.Ru/УК-НЦ/Софт/SystemDisks/RT-11 v05.07 Distr/RT1157onRT11Emulator.jpg) ака предконфигурённый эмулятор ДВК Патрона
Ну и зачем это? Там и так всё правильно работало.
Вообще-то писал конкретно про команду LOAD. У меня, например, LOAD"MZ0:FILE.ASC" не работает. А команда FILES у меня работает, но про неё не писал. Хотя у FILES параметр должен принимать и маску, например, "*.SAV" - покажи все sav-файлы - это похоже недоделали.
Маску в FILES не сделали. А вот в команде LOAD нашли ошибку - имя файла с именем устройства не должно превышать шесть символов. Команда LOAD "MZ0:FF" загрузит файл нормально.
Надоело. Дальше ТС пусть ублажает себя сам.
BlaireCas
06.09.2021, 07:13
Покопался на сайте автора и обнаружил интересную вещь.
Исходники бейсика для PDP - на ассемблере. Компилятор там свой собственный используется. Как-то поначалу не придал этому значения. Ну мало-ли мол пишут люди компилятор для асм-а, я и сам когда-то писал. Возможно все кто связывался с ассемблером хотели свой компилятор "с ништяками" и некоторые даже писали или улучшали имеющийся.
Но .. тут вообщем этот компилятор, которым собираем бейсик, написан на .. этом-же бейсике! Прям на нем. В .exe-шник для винды как я понимаю встроен транслятор бейсика который выполняет программу бейсиковую которая собирает компилятор ассемблера которым компилируем бейсик которым собира.... так, стоп.
Вообщем вот это поворот :v2_dizzy_roll:
возможно придется использовать счетчик и запускать вызов проверки на, скажем, каждый сотый раз
Одно из сообщений данной темы. Очень несложно делается например проверять "на каждую 256-ю строку". Пробовал - работает и ESC и тормоза можно сказать не добавляются на реальной УКНЦ.
Почему не стал делать - а нужно что-ли? Бейсик ведь недоделан. Там нет скажем SIN(x) или записи плавучки с отрицательной экспонентой типа 2E-5. Вообщем бейсик-то недопортирован изначально.
Ну и если уж на то пошло - надо бы и проверку на УКНЦ переделать и вообще обработку IO.
Ибо на некоторых версиях RT-11 (на версиях с набором самопала как Хунта говорит) - этот бейсик вообще виснет при получении каких-то кодов (скажем при нажатии backspace у меня).
Сейчас там проверка на УКНЦ сделана так:
cmp @#&CA20,#&8080 (более привычное восьмиричн. cmp @#145040, #100200)
Что это вообще? Что, так можно проверять что это УКНЦ? Имхо ерунда какая-то. Никто не знает как нормальным образом проверить что перед нами действительно УКНЦ?
Что это вообще? Что, так можно проверять что это УКНЦ?
Судя по адресу - он лезет куда то в RMON. Но учитывая, что RMON может быть разных размеров, да и памяти, строго говоря, может быть и не 56 кб, а меньше.. Вот так и получаются "легендарные" программы и системы
Ну и если уж на то пошло - надо бы и проверку на УКНЦ переделать и вообще обработку IO.
Ибо на некоторых версиях RT-11 (на версиях с набором самопала как Хунта говорит) - этот бейсик вообще виснет при получении каких-то кодов (скажем при нажатии backspace у меня).
Виснет на УКНЦ потому, что использует команды терминала VT-100. На УКНЦ обрабатываются только коды <Esc>[r, <Esc>[2h и <Esc>[2l. Причем обработка сделана так, что если после <Esc>[ не пришел символ 2, то далее тупо ожидается r. Потому нажимаем маленькую букву r, экран очистится и далее всё отвиснет.
Странно сделан перевод на новую строку, обычно это <CR><LF>, а тут наоборот <LF><CR>, но это работает. При нажатии Backspace подаются коды <Esc>[D<Space><Esc>[D. А чтобы не зависеть от типа терминала надо подавать <010><Space><010>.
Вообщем вот это поворот
В принципе - ничего не обычного. Если язык достаточно мощный, на нём вполне можно написать компилятор :) В том числе - для него самого :) У меня вон валяются исходники компилятора Modula-2, написанного на Modula-2 :) Кстати, это ещё и неплохой проверочный тест для компилятора :)
А вот новости. Автор разоблачил правки от BlaireCas - оказывается в документации ясно прописано, что есть команда *ESC OFF, которая вопрос решает.
Покопался на сайте автора и обнаружил интересную вещь.
Исходники бейсика для PDP - на ассемблере. Компилятор там свой собственный используется. Как-то поначалу не придал этому значения. Ну мало-ли мол пишут люди компилятор для асм-а, я и сам когда-то писал. Возможно все кто связывался с ассемблером хотели свой компилятор "с ништяками" и некоторые даже писали или улучшали имеющийся.
Но .. тут вообщем этот компилятор, которым собираем бейсик, написан на .. этом-же бейсике! Прям на нем. В .exe-шник для винды как я понимаю встроен транслятор бейсика который выполняет программу бейсиковую которая собирает компилятор ассемблера которым компилируем бейсик которым собира.... так, стоп.
Вообщем вот это поворот :v2_dizzy_roll:
BBC Basic для истории мировых ИТ - это крутейшая вещь. Именно на нем был разработан самый массовый процессор современности ARM. Поэтому энтузиасты продолжают его использовать и на современных компиках. Современный BBC Basic естественно заметно расширен. Разных вариантов этого бейсика наделали столько, что уже вроде никто и не знает точных статусов этих вариантов.
Одно из сообщений данной темы. Очень несложно делается например проверять "на каждую 256-ю строку". Пробовал - работает и ESC и тормоза можно сказать не добавляются на реальной УКНЦ.
Почему не стал делать - а нужно что-ли? Бейсик ведь недоделан. Там нет скажем SIN(x) или записи плавучки с отрицательной экспонентой типа 2E-5. Вообщем бейсик-то недопортирован изначально.
Его недоделанное состояние для PDP-11 объясняется тем, что поддержка этой платформы изначально вообще отсутствовола. Изначально были только TUBE-карты с акселлерированным 6502, с Z80, c 32016, 80186, и ARM. Были ещё какие-то малотиражки от третьих фирм с 6809 и возможно (не уверен) с 68000 - ни одной такой карты вроде до сегодняшнего дня не дошло. Карту с поддержкой базовой архитектуры PDP-11 (скорее даже без EIS) сделали уже только после 2010 на базе FPGA. Насколько мне известно, таких карт было сделано менее 50 и понятно что народ использовал скорее другие процы. Только в 2020 в проект карт на базе Raspberry Pi с софтверной эмуляцией процессоров добавили PDP-11. Понятно, что число юзеров скорее в районе 1-2 человек. Тем не менее удивительно, что PDP-11 поддерживается лучше, чем 68000. Что-то не срoслось у Acorn и Motorola.
Ну и если уж на то пошло - надо бы и проверку на УКНЦ переделать и вообще обработку IO.
Ибо на некоторых версиях RT-11 (на версиях с набором самопала как Хунта говорит) - этот бейсик вообще виснет при получении каких-то кодов (скажем при нажатии backspace у меня).
Сейчас там проверка на УКНЦ сделана так:
cmp @#&CA20,#&8080 (более привычное восьмиричн. cmp @#145040, #100200)
Что это вообще? Что, так можно проверять что это УКНЦ? Имхо ерунда какая-то. Никто не знает как нормальным образом проверить что перед нами действительно УКНЦ?
Спросил об этом CMP автора - странный там адрес. У меня тоже этот бейсик иногда виснет. :( Самое неприятное, что не смог запустить знаменитый ClockSp (http://mdfs.net/Software/BBCBasic/Testing/) - а автор его как-то запустил https://www.youtube.com/watch?v=6wKWdPNwVWw - результат там интересный ВМ2@8MHz = 6502@0.6MHz. А некоторые товарищи, включая Хунту, недовольны данными по π-затвору (https://litwr2.github.io/pi-spigot-benchmark/pi-spigot-benchmark.html) :( Стыдно должно быть таким товарищам. IBM раздавила DEC в 1975, а виноват автор простой программки. :(
EDIT. Поправил ссылку на видео.
Виснет на УКНЦ потому, что использует команды терминала VT-100. На УКНЦ обрабатываются только коды <Esc>[r, <Esc>[2h и <Esc>[2l. Причем обработка сделана так, что если после <Esc>[ не пришел символ 2, то далее тупо ожидается r. Потому нажимаем маленькую букву r, экран очистится и далее всё отвиснет.
Странно сделан перевод на новую строку, обычно это <CR><LF>, а тут наоборот <LF><CR>, но это работает. При нажатии Backspace подаются коды <Esc>[D<Space><Esc>[D. А чтобы не зависеть от типа терминала надо подавать <010><Space><010>.
Не все так просто. Иногда r не помогает. Пробовал патчить ClockSp, но ничего не получилось - виснет в самых неожиданных ситуациях. :(
- - - Добавлено - - -
Судя по адресу - он лезет куда то в RMON. Но учитывая, что RMON может быть разных размеров, да и памяти, строго говоря, может быть и не 56 кб, а меньше.. Вот так и получаются "легендарные" программы и системы
А Хунта ещё тут - помимо того ваша система ломает работу с таймером, она ещё и даёт юзеру существенно меньше памяти, чем штатная. Штатная позволяет высчитать 7268 знаков числа π, а ваша только 6812. Зря трудились.
BlaireCas
07.09.2021, 09:09
Виснет на УКНЦ потому, что использует команды терминала VT-100.
Просто на обычной УКНЦ бейсик у меня не определял машину как УКНЦ. (автор видимо практиковался на какой-то определенной сборке RT-11 и проверка на УКНЦ не прокатила на той что у меня запускается на железной машинке). Выбросил из кода эту проверку и стал работать backspace.
Самое неприятное, что не смог запустить знаменитый ClockSp
Запускается. Правда на моей УКНЦ с моей RT-11 оно по причинам выше не те символы выдавало в терминал и вообщем кривило вывод. После хака вот что вышло на реальной технике.
https://i.imgur.com/bLCEqIb.png
Среднее 0.95Mhz.
Это якобы доказательство что 8-ми битка с 32кб памяти лучше что-ли? Ну подумаешь циклы быстрее крутит (неудивительно).
Автор разоблачил правки от BlaireCas
Кстати раз переписываетесь с ним - можно спросить мол почему он использует вот такую конструкцию для перехода по таблице? (ADR это его ассемблер вроде превращает в MOV pc,dst и ADD #label-$,dst, навроде вычисление реального адреса в перемещаемом коде)
.CommandTable
EQUW cmdAUTO-$
EQUW cmdDELETE-$
...
adr CommandTable,r1 ; Point to command address table
add r0,r1 ; Index into command table
add (r1),r1 ; Calculate routine address
jmp (r1) ; Jump to command routine, (r5)=>current char
не проще и быстрее будет такое? (если ему не надо сохранять регистр R1 на адресе перехода)
.CommandTable
EQUW cmdAUTO
EQUW cmdDELETE
...
JMP @CommandTable(R0)
не проще и быстрее будет такое?
Проще и быстрее, но это неперемещаемый код, а тот - перемещаемый. Может автору была как раз важна перемещаемость, даже в ущерб производительности.
Просто на обычной УКНЦ бейсик у меня не определял машину как УКНЦ. (автор видимо практиковался на какой-то определенной сборке RT-11 и проверка на УКНЦ не прокатила на той что у меня запускается на железной машинке). Выбросил из кода эту проверку и стал работать backspace.
А что конкретно посоветуете прописать в код, чтобы на УКНЦ все работало? Мне вообще непонятно, зачем автор проверяет, что это именно УКНЦ. Вроде УКНЦ - это вполне типовая PDP-11 машинка, что он такого особого от УКНЦ хочет?
Запускается. Правда на моей УКНЦ с моей RT-11 оно по причинам выше не те символы выдавало в терминал и вообщем кривило вывод. После хака вот что вышло на реальной технике.
https://i.imgur.com/bLCEqIb.png
Среднее 0.95Mhz.
Благодарю Вас. Реально интересно, сам минут 20 пробовал запустить, но никак.
Это якобы доказательство что 8-ми битка с 32кб памяти лучше что-ли? Ну подумаешь циклы быстрее крутит (неудивительно).
Циклы же не пустые. Памяти может быть много на втором процессоре. И получается, что копеечный 6502 из 1975 в почти 9 раз быстрее ВМ2 - Хунте и некоторым такое не в корм. Бейсик наверное можно разогнать... Кстати, по результатам такого теста в Acorn поняли, что 32016 - это тормоз, его обгонял 6502 на 4 МГц. Поэтому там начали делать ARM.
Кстати раз переписываетесь с ним - можно спросить мол почему он использует вот такую конструкцию для перехода по таблице? (ADR это его ассемблер вроде превращает в MOV pc,dst и ADD #label-$,dst, навроде вычисление реального адреса в перемещаемом коде)
Написал, но он человек занятый и на бейсик у него сейчас совсем мало времени.
Хунте и некоторым такое не в корм
Как ТС корёжит то ;) Аж кюшать не может :)
Как ТС корёжит то ;)
Вы бы так перед автором бейсика повыступали. На вычислении числа пи 6502 только в 3 раза быстрее ВМ2 без EIS на той же частоте, так что Вам бы в 3 раза уместнее было бы бейсик ругать.
Мне вообще непонятно, зачем автор проверяет, что это именно УКНЦ. Вроде УКНЦ - это вполне типовая PDP-11 машинка, что он такого особого от УКНЦ хочет?
У классических PDP-11 видеоконтроллера не предусмотрено. Есть регистры терминала по адресам 0177560-0177566. Обычно в качестве регистров терминала выступал последовательный порт. А к этому порту уже присоединялась различная аппаратура. Это мог быть и древний телетайп, и терминал VT-52, VT-100, у нас в СССР 15ИЭ-00-013. Терминалы для управления изображением на экране используют управляющие коды и Esc-последовательности. У VT-52 и VT-100 они разные, хотя VT-100 может эмулировать VT-52. В УКНЦ реализована поддержка совместимости с 15ИЭ-00-013 и VT-52. Но данные терминалы не поддерживали цвет, потому в УКНЦ свои Esc-последовательности переключения цвета символов.
не проще и быстрее будет такое? (если ему не надо сохранять регистр R1 на адресе перехода)
.CommandTable
EQUW cmdAUTO
EQUW cmdDELETE
...
JMP @CommandTable(R0)
А на два кто умножать будет? А если в R0 нужно сохранить исходное значение?
Но игнорирование индексно-косвенной адресации действительно выглядит странно. И вообще, самый компактный код для перехода по таблице давно известен. Вот он:
asl r0
add r0, pc
.word label0, label1, label2, ...
Вы бы так перед автором бейсика повыступали. На вычислении числа пи 6502 только в 3 раза быстрее ВМ2 без EIS на той же частоте, так что Вам бы в 3 раза уместнее было бы бейсик ругать
Продолжай продолжай, попкорна ещё много :)
- - - Добавлено - - -
Вот он:
Не пройдёт. После добавления R0*2 (там же индекс, да?) к PC новый PC будет указывать на слово, где хранится адрес-указатель на код, а не сам код.
BlaireCas
08.09.2021, 22:43
А на два кто умножать будет?
Я просто пропустил в приведенном куске это умножение. В коде разумеется оно есть.
Вот такой там код (был, я уже поменял на одну комманду заместо кучи, работает вроде). add r0,r0 комментировал не я, это уже кто-то другой видимо тестировал что быстрее :) сложение или сдвиг
.ExecByteCommand
;add r0,r0 ; Offset into command table
asl r0 ; Offset into command table
;+Blaire why not just use @tbl(Rx)? also I've changed CommandTable from ADR-$ to ADR
; and do we need to set R1? maybe no
JMP @CommandTable(R0)
;adr CommandTable,r1 ; Point to command address table
;add r0,r1 ; Index into command table
;add (r1),r1 ; Calculate routine address
;jmp (r1) ; Jump to command routine, (r5)=>current char
;+Blaire
Еще хотел поменять там формат чисел с плав.запятой.
Вместо того что там в бейсике 1(или два)байт экспоненты + 4байта мантиссы на тот который у pdp-11 должен быть с одинарной точностью (два слова) 1бит знака + 8бит экспонента + 23бит мантисса (+1 скрытый бит мантиссы ибо нормализованы) и использовать fmul, fdiv, fadd, fsub которые в УКНЦ все-же сделаны пусть и программно.
Но .. лень появилась внезапно :)
Не пройдёт. После добавления R0*2 (там же индекс, да?) к PC новый PC будет указывать на слово, где хранится адрес-указатель на код, а не сам код.
Тьфу блин. Только с работы приехал, башка не варит уже. Естественно br label0 И т.д.
Естественно br label0
Тут тоже не всё так однозначно - если до br labelX слишком далеко, то...
Поправка - если от br labelX до labelX слишком далеко
У классических PDP-11 видеоконтроллера не предусмотрено. Есть регистры терминала по адресам 0177560-0177566. Обычно в качестве регистров терминала выступал последовательный порт. А к этому порту уже присоединялась различная аппаратура. Это мог быть и древний телетайп, и терминал VT-52, VT-100, у нас в СССР 15ИЭ-00-013. Терминалы для управления изображением на экране используют управляющие коды и Esc-последовательности. У VT-52 и VT-100 они разные, хотя VT-100 может эмулировать VT-52. В УКНЦ реализована поддержка совместимости с 15ИЭ-00-013 и VT-52. Но данные терминалы не поддерживали цвет, потому в УКНЦ свои Esc-последовательности переключения цвета символов.
Благодарю Вас. Получается как бы у УКНЦ особенный, нестандартный терминал. Интересно, а как с этим было на Электронике-85? Там же вроде тоже не было терминала. И разве нельзя для абстрактного PDP-11 написать драйвер терминала УКНЦ?
Однако, главный вопрос - может ли программа как-то определить, что перед ней именно УКНЦ? Похоже у автора есть только один вариант - делать условную компиляцию и отдельный порт для УКНЦ и, возможно, БК-0011М. Подозреваю, что между БК и УКНЦ тут есть некоторая разница.
- - - Добавлено - - -
Я просто пропустил в приведенном куске это умножение. В коде разумеется оно есть.
Еще хотел поменять там формат чисел с плав.запятой.
Вместо того что там в бейсике 1(или два)байт экспоненты + 4байта мантиссы на тот который у pdp-11 должен быть с одинарной точностью (два слова) 1бит знака + 8бит экспонента + 23бит мантисса (+1 скрытый бит мантиссы ибо нормализованы) и использовать fmul, fdiv, fadd, fsub которые в УКНЦ все-же сделаны пусть и программно.
Но .. лень появилась внезапно :)
С такими пOдсказками автор отправит нас в далекое сибирское болото. :) А насчет формата FP - это хорошо, что лень пришла - труда много, а толку было бы мало. Однако, почти уверен, что бейсик можно в несколько раз разогнать. По моим представлениям УКНЦ на хорошем коде должен дать 1.5-2 МГц на ClockSp.
EDIT. Ещё меня смущает, что стандартная RT11 от Хунты пошла на УКНЦ - или она всё-таки не совсем стандартная? Или стандартная RT11 может приспособится к нестандартности УКНЦ? Пожалуйста, помогите разобраться.
Ещё меня смущает, что стандартная RT11 от Хунты пошла на УКНЦ
или она всё-таки не совсем стандартная?
(много попкорна) Мноооого тараканов :)
А ещё - стандартная (или всё таки нестандартная? ;) ) RSX-11M-Plus идёт на 1801ВМ3 и плюёт на мнение "экспертов" ;)
Ещё меня смущает, что стандартная RT11 от Хунты пошла на УКНЦ - или она всё-таки не совсем стандартная? Или стандартная RT11 может приспособится к нестандартности УКНЦ? Пожалуйста, помогите разобраться.Вообще-то, УКНЦ - это (почти) обычная LSI-11/03 с сильно нестандартным набором периферии. (Почти) - это потому, что FIS у нее не микропрограммный, как у настоящей LSI-11, а реализован "теневой" программой. В остальном, ЦП УКНЦ точно соответствует LSI-11/03. Ну, еще шустрее вдвое, еще там есть ошибка, которая в нормальной работе не проявляется. Соответственно, и RT-11 на ней идет молча, как и на любой 11/03. Если, конечно, обеспечить нестандартную периферию соответствующими драйверами.
А вот периферия у УКНЦ ни разу не стандартная. Кое-что поддержано драйверами и, соответственно, может работать в RT-11, а кое-что многие программы (специфически УКНЦовые) пользуют напрямую и, соответственно, работоспособны только на УКНЦ. Как тот же вильнюсский Бейсик в версии для УКНЦ. Вроде-бы, он напрямую лезет к графическим ресурсам УКНЦ, хотя точно я не уверен.
А вот периферия у УКНЦ ни разу не стандартная. Кое-что поддержано драйверами и, соответственно, может работать в RT-11
Класс :)
Получается как бы у УКНЦ особенный, нестандартный терминал.
Терминал в УКНЦ эмулируется в ПЗУ периферийного процессора (да-да, у УКНЦ целых два процессора). У него вполне нормальные стандартные адреса 0177560-0177566 с поддержкой прерываний по векторам 060 и 064. Всё это стандартно для PDP-11. Небольшая нестандартность заключается в том, что обычно последовательный порт работает со скоростью 9600 бод (не бит/сек), потому скорость вывода информации упирается в этот предел (но больше и не надо). А в УКНЦ на этих адресах сидит высокоскоростной параллельный порт обмена между ЦП и ПП, так что скорость вывода определяется скоростью обработки информации в программе в ПП. У УКНЦ это повыше 9600 бод, в некоторых играх чувствуется.
Теперь по поводу нестандартности терминала. Нестандартен не терминал, а его система команд. В УКНЦ терминал эмулирует 15-ИЭ-00-013, в котором есть своя система команд плюс эмуляция системы команд VT-52. VT-52 в УКНЦ эмулируется не совсем точно, но терпимо. Также видеоконтроллер в УКНЦ цветной, поэтому есть Esc-последовательности для изменения цвета символа, фона, программирования клавиш К1-К5, вывод векторной графики, ну и другое...
Интересно, а как с этим было на Электронике-85? Там же вроде тоже не было терминала.
Да, там терминал в RT-11 эмулировался драйвером PI.SYS. Электроника-85 (DEC PRO-350) формально к семейству PDP-11 не относятся, не смотря на ту же систему команд процессора.
И разве нельзя для абстрактного PDP-11 написать драйвер терминала УКНЦ?
Как я уже сказал, в УКНЦ регистры терминала стандартные 0177560-0177566. Управляющие коды и Esc-последовательности поддерживаются от VT-52. Чего ещё надо? Драйвер только обслуживает вывод на адрес 0177566 и приём кодов с клавиатуры с адреса 0177562 (хотя адреса терминала можно менять при генерации новой системы, а также изменить в области связи RMON). А все эти управляющие коды и Esc-последовательности выводит именно программа, она формирует строку и даёт задание драйверу для вывода этой строки. Так что никакой драйвер для УКНЦ писать не надо.
Хотя есть одно большое НО. Стандартная RT-11 поддерживает вывод только семибитных символов, старший бит обрезается. Так что на УКНЦ, используя стандартную RT-11, не вывести псевдографику, а также некоторые Esc-последовательности. Здесь уже только вывод непосредственно в регистр 0177566, минуя вызов RT-11.
Похоже у автора есть только один вариант - делать условную компиляцию и отдельный порт для УКНЦ и, возможно, БК-0011М. Подозреваю, что между БК и УКНЦ тут есть некоторая разница.
Это точно. Зачем занимать лишнюю память для подпрограммы определения модели компьютера.
И да, между БК и УКНЦ не то что некоторая разница, а довольно большая разница. Вот на БК нет регистров терминала и для БК-0011М есть свой клон RT-11, который пойдёт только на БК-0011М. Стандартная RT-11 на БК не пойдёт.
- - - Добавлено - - -
Как тот же вильнюсский Бейсик в версии для УКНЦ. Вроде-бы, он напрямую лезет к графическим ресурсам УКНЦ, хотя точно я не уверен.
Вильнюсский Бейсик для вывода графики использует специальные Esc-последовательности, он даже в ПП не лезет. Единственно он переназначает вектор HALT для обработки нажатий клавиши СТОП.
Электроника-85 (DEC PRO-350) формально к семейству PDP-11 не относятся
Тем не менее, сама DEC относит его в семейству PDP-11
Тем не менее, сама DEC относит его в семейству PDP-11
И RSX-11 там штатная ОС.
- - - Добавлено - - -
Это точно. Зачем занимать лишнюю память для подпрограммы определения модели компьютера.
Там всё ещё хуже, автор определяет не модель компьютера, а ОС! Типа ОС загрузит программу, а программа начинает шпионить - что тут за ОС меня подняла? Если бы не было этого примера, то не поверил бы, что такое возможно. Типа загрузили программу под Linux, а она проверяет не ДОС ли это. Для автора УКНЦ - это особая ОС, отличная от DOS11, RSX11, RSTS или RT11.
Тем не менее, сама DEC относит его в семейству PDP-11
И RSX-11 там штатная ОС.
Ну не PDP-11, а PDP-11 compatible. Штатная ОС там P/OS, построенная на RSX-11M Plus.
Это что-то типа того, что RT-11 адаптировали на БК-0011М под именем ОС БК-11. Программы от RT-11 там тоже идут, если используют вызовы ОС.
- - - Добавлено - - -
Там всё ещё хуже, автор определяет не модель компьютера, а ОС! Типа ОС загрузит программу, а программа начинает шпионить - что тут за ОС меня подняла? Если бы не было этого примера, то не поверил бы, что такое возможно. Типа загрузили программу под Linux, а она проверяет не ДОС ли это. Для автора УКНЦ - это особая ОС, отличная от DOS11, RSX11, RSTS или RT11.
А как это при вызове можно определить операционную систему? У разных ОС разный формат исполнимых файлов, да и формат вызовов также разный. В DOS-овской программе конечно можно определить, что она вызвана из Windows, но это уже в Windows есть новые вызовы. Так же в RSX-11 есть эмулятор RTEM.
Вильнюсский Бейсик для вывода графики использует специальные Esc-последовательности, он даже в ПП не лезет. Единственно он переназначает вектор HALT для обработки нажатий клавиши СТОП.УКНЦ у меня, конечно, была. Но, чуть раньше, у меня появился ДВК-шник с винчестером, так, что, включив УКНЦ, я часок-другой поиграл, выключил ее и положил на дальнюю полку, на много лет, а потом и вообще подарил Максу. Поэтому, я понятия не имею, как там сделан Бейсик и остальные программы. Аппаратно - да, кое-что мы тогда делали для УКНЦ по заказам клиентов, недавно с Максом сделали для нее AZ, но вникать в ее софты я так и не собрался.
КлассА что? Ладно, контроллер диска там вообще самопал - ничего общего с DEC-овскими. А тот же порт принтера? Там же вообще адский ад - КР580ВВ55 стоит, и что? Сочинили драйвер и принтеры весело печатали...
Получается как бы у УКНЦ особенный, нестандартный терминал.Как сказать? Это у писюка средства отображения встроены в компьютер. А во времена RT-11 всё было гораздо суровее. Стандартным был консольный порт - обычно, 177560-177566. В секции вывода (177564-66) он обеспечивал доставку выводимых данных пользователю, и он же, в секции ввода (177560-62) передавал системе коды нажатых клавиш. Всё! А терминалы могли быть самыми разнообразными - от простого телетайпа со скоростью 110 бод, печатающего на рулонной бумаге, до навороченных VT240 или даже VT640. И операционке безразлично, какой там терминал, она может работать с любым. С этой точки зрения, терминал УКНЦ вполне стандартный.
Но есть некоторое количество программ, которые привязаны к какому-либо типу терминала. Это, в основном, экранные редакторы и символьные игрушки. Тут у УКНЦ есть некоторая совместимость с DEC'овским терминалом VT52. Да, неполная, тем не менее...
Ну не PDP-11, а PDP-11 compatible.
Увы, DEC не согласна
Из PDP-11 Architecture Handbook, страница 17
The professional 300 series are full-fledged of the PDP-11 family. The microprocessor chip used in the Professional 325 and 350 is the F-11, the same chip used in the LSI-11/23 and the PDP-11/23 PLUS. ... As a PDP-11 family member, ...
Так же, по поводу битовой графики
страница 257
However, certain applications place memory, or devices that act like memory, on the UNIBUS. Examples ... :
- Shared (multi-ported) UNIBUS memory
- Certain graphics devices (bit-mapped graphics ...)
- Bus windows (DA11-F)
In these cases, address presented on the UNIBUS may actually be intended for the memory on the UNIBUS. It would be undesirable for the UNIBUS Map to pick up such an address and translate it to a main memory address...
Так же (по поводу страницы в/в)
Devices in the I/O page ignore the nine high order address bits BDAL <21:13> and instead decode BBS7 L along with the thirteen low-order address bits
И наконец (в плане стандарта архитектуры - я, конечно, мог пропустить - и тогда - страницу в студию, но) - ни слова про 177560-177566
- - - Добавлено - - -
А как это при вызове можно определить операционную систему?
Ну, технически это возможно - если речь идёт о какой-нибудь подпрограмме, а не о всей программе в целом. Но, имхо, попахивает извращённым садо-мазо.
А как это при вызове можно определить операционную систему? У разных ОС разный формат исполнимых файлов, да и формат вызовов также разный. В DOS-овской программе конечно можно определить, что она вызвана из Windows, но это уже в Windows есть новые вызовы. Так же в RSX-11 есть эмулятор RTEM.
Ну а вы постaвьтe в центp мирa BBC Basic - для некоторых людeй близких Айкорну это нормaльно и вcё cтaнет нopмaльным. Поставил же Коперник солнце куда захотел, а чем другие хуже?
- - - Добавлено - - -
Как сказать? Это у писюка средства отображения встроены в компьютер. А во времена RT-11 всё было гораздо суровее. Стандартным был консольный порт - обычно, 177560-177566. В секции вывода (177564-66) он обеспечивал доставку выводимых данных пользователю, и он же, в секции ввода (177560-62) передавал системе коды нажатых клавиш. Всё! А терминалы могли быть самыми разнообразными - от простого телетайпа со скоростью 110 бод, печатающего на рулонной бумаге, до навороченных VT240 или даже VT640. И операционке безразлично, какой там терминал, она может работать с любым. С этой точки зрения, терминал УКНЦ вполне стандартный.
Но есть некоторое количество программ, которые привязаны к какому-либо типу терминала. Это, в основном, экранные редакторы и символьные игрушки. Тут у УКНЦ есть некоторая совместимость с DEC'овским терминалом VT52. Да, неполная, тем не менее...
Тут мы уже обсуждали, что были и персональные PDP-11 без сериальных терминалов. Но меня интересует чисто практический вопрос, связанный с реализацией ВВС бейсика. Признаюсь, я не понимаю логику егo aвтора. Мне пpедставляeтся, что бейсик должен поддерживать какой-то тип терминала и как расширение имeть опции для переключения на какие-то дополнительные терминалы. В документации об этом должно быть прописано и всё. У УКНЦ стандартный как бы терминал нестандартный, а только похожий на VT52. Таким образом, BBC Basic для поддержки УКНЦ должен иметь специальную опцию. С этим все согласны? С другой стороны, для УКНЦ возможно были эмуляторы стандартных терминалов. Но есть ли они реально?
Lethargeek
12.09.2021, 22:20
Ну не PDP-11, а PDP-11 compatible
в гибнущей клевещут, что даже не особенно compatible из-за сильной разницы по железу, и софт без переделок не заработает
для УКНЦ возможно были эмуляторы стандартных терминалов. Но есть ли они реально?Есть эмулятор VT200, загружается в память ПП и там работает. Насколько точный этот эмулятор - не знаю, но то, что он работает не через U(S)ART, а через байтовый порт межпроцессорной связи (ЦП-ПП), означает, что скоростные характеристики отличаются точно. Впрочем, для нормального терминала это должно быть фиолетово. Еще знаю, что под этим эмулятором работает нечто, подобное писюшному Командиру Нортону...
А что? Ладно, контроллер диска там вообще самопал - ничего общего с DEC-овскими. А тот же порт принтера? Там же вообще адский ад - КР580ВВ55 стоит, и что? Сочинили драйвер и принтеры весело печатали...
Ну как сказать, у LSI-11/23 (уж самое DEC ;) ) параллельный порт был именно на Intel 8255 :)
Чего не ведаю, на сколько он с УКНЦ портом сходны... Но, по крайней мере понятно, чем создатели УКНЦ вдохновлялись ;)
Но, по крайней мере понятно, чем создатели УКНЦ вдохновлялисьВообще-то, 8255 - исключительно удобный параллельный порт - 3х8 раздельных регистра, не требует управления пайкой/джамперами, имеет развитый функционал управления передачей и приемом... И схемное окружение для него минимально - на МПИ достаточно адресного селектора и двухбитового регистра адреса. Я, помнится, с удовольствием клепал на них параллельные интерфейсы спец. оборудования (самопального) для Э-60. Но вот создатели УКНЦ подключили этот 8255 через *опу!.. Так, что вряд ли они смотрели на 11/23!
Есть эмулятор VT200, загружается в память ПП и там работает. Насколько точный этот эмулятор - не знаю, но то, что он работает не через U(S)ART, а через байтовый порт межпроцессорной связи (ЦП-ПП), означает, что скоростные характеристики отличаются точно. Впрочем, для нормального терминала это должно быть фиолетово. Еще знаю, что под этим эмулятором работает нечто, подобное писюшному Командиру Нортону...
Интересно, надо сообщить об этом автору. О Нортоне. В БК при загрузке RT11 сразу получаем своего Нортона (IC), вроде неплохо сделано - это вы про него?
Интересно, надо сообщить об этом автору. О Нортоне. В БК при загрузке RT11 сразу получаем своего Нортона (IC), вроде неплохо сделано - это вы про него?
Это программа эмуляции VT-200 и файловый менеджер RC, кстати довольно крутой. Находится здесь (https://archive.pdp-11.org.ru/ukdwk_archive/ukncbtlwebcomplekt/ados_uknc_vt200/).
- - - Добавлено - - -
Но вот создатели УКНЦ подключили этот 8255 через *опу!.. Так, что вряд ли они смотрели на 11/23! А что разработчики сделали не так? Хотелось бы узнать поподробнее.
А что разработчики сделали не так? Хотелось бы узнать поподробнее.Они отдали на него в качестве адреса биты А1-А0. То есть регимтры В и D 8255 доступны только по нечетным адресам. Или не D, а CTL? Блин, уже забыл названия регистров 8255. Причем доступ должен быть словным, с байтовым там что-то накуролесили, не вникал. В общем, руки рвать за такое. Причем каких-либо выгод от этого я не заметил - не считать же за выгоду экономию двух слов адресного пространства в странице ввода-вывода?
Они отдали на него в качестве адреса биты А1-А0. То есть регимтры В и D 8255 доступны только по нечетным адресам. Или не D, а CTL? Блин, уже забыл названия регистров 8255. Причем доступ должен быть словным, с байтовым там что-то накуролесили, не вникал. В общем, руки рвать за такое. Причем каких-либо выгод от этого я не заметил - не считать же за выгоду экономию двух слов адресного пространства в странице ввода-вывода?
Да, есть такое. В документации об этом прямо сказано, что доступ осуществляется словно, в том числе по нечётным адресам. Для 1801ВМ2 в этом проблем нет, TRAP4 по нечётному адресу не схватишь. А байтовый доступ нормальный только по чётным адресам, при нечётном адресе используется старший байт, а его для 8255 нет.
А еще "проблема" DCT-11 (T-11) и его совковой послойной копии кр1807вм1 где каждой операции записи предшествует операция чтения по тому же адресу что не позволяет использовать большинство переферических микросхем as is. всегда мудрить надо
А еще "проблема" DCT-11 (T-11) и его совковой послойной копии кр1807вм1 где каждой операции записи предшествует операция чтения по тому же адресу что не позволяет использовать большинство переферических микросхем as is. всегда мудрить надо
У 1801ВМ2 есть такая же проблема при использовании байтовых команд, т.е. при записи в приемник в командах MOVB, CLRB, MFPS, перед этим происходит чтение приемника. Эта особенность даже используется в системном ПЗУ УКНЦ при записи в регистр октета 0177024. Записали командой MOV - записалось и изображение и фон, записали командой MOVB - изображение наложилось на старый фон. А у T-11 и нашей советской копии 1807ВМ1 ещё не было реализовано TRAP4, вроде как.
Это программа эмуляции VT-200 и файловый менеджер RC, кстати довольно крутой. Находится здесь (https://archive.pdp-11.org.ru/ukdwk_archive/ukncbtlwebcomplekt/ados_uknc_vt200/).
Благодарю Вас. Это получается для БК и УКНЦ Нортоны делали независимо?!
- - - Добавлено - - -
А еще "проблема" DCT-11 (T-11) и его совковой послойной копии кр1807вм1 где каждой операции записи предшествует операция чтения по тому же адресу что не позволяет использовать большинство переферических микросхем as is. всегда мудрить надо
Вроде многие древние процессоры имели подобные проблемы, например, мотороловские 68000. Всякие скрытые чтения и записи по ходу исполнения инструкций использовали даже в хаках для 6502.
После фиксации бага, не позволявшего мерять время на J11 и некоторых других процах, бенчмарк CLOCKSP прогнали на PDP 11/93 @18МHz под RSX/RTEM. Вот результаты
PDP11 BBC BASIC IV Version 0.36 (RT11)
(C) Copyright J.G.Harston 1989-2020
>*ESC OFF
>LOAD "clock.bas"
>RUN
BBC BASIC CPU Timing Program
Real REPEAT loop 5.00MHz
Integer REPEAT loop 3.73MHz
Real FOR loop 7.52MHz
Integer FOR loop 2.47MHz
Trig/Log test <none>
String manipulation 5.19MHz
Procedure call 5.75MHz
GOSUB call 3.04MHz
Combined Average 4.67MHz
Compared to a 2.00MHz BBC B
Получается, что лучший фирменный процессор был лишь примерно вдвое быстрее ВМ2 в УНКЦ на той же частоте. А если бы ВМ2 подключали оптимально, то разница была бы совсем небольшой.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot