PDA

Просмотр полной версии : Написание программ для БК0010



jerri
24.11.2009, 17:17
А кто писал игры\системный софт для БК0010

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

mbojenov
25.11.2009, 12:58
цитирую бкашного программера из ATLANTIS (PRS):
"вопрос, кст, дурацкий. никто не задумывался над синхронизацией скорости. какой проц, так и бегало. и причем тут вообще обновление экрана тоже не пойму. видимо чел далек от структуры БК."

Лично от меня - этот человек на форуме зарегиться не может, поэтому уточни вопрос, я его переспрошу.

nzeemin
25.11.2009, 13:45
А кто писал игры\системный софт для БК0010

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

Насколько я знаю, там есть таймер, не зависящий от скорости процессора -- порты 177706, 177710, 177712.
См. например http://pdp-11.ru/mybk/textbk/FL11M.TXT
Но для меня остаётся загадкой как можно узнать о начале/завершении обновления экрана -- подозреваю что никак.

---------- Post added at 14:45 ---------- Previous post was at 14:43 ----------


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

ibnteo
25.11.2009, 13:48
Насколько я помню, в 0010 таймера не было, был лишь в 0011М, и экраны переключать можно было лишь в 0011М. Поэтому в играх было видно перерисовывание спрайтов. В последних программах для 11М графика уже была плавная, за счет нескольких видео буферов.

Задержки по времени делали через пустые циклы.

---------- Post added at 13:48 ---------- Previous post was at 13:48 ----------

Насколько я помню, в 0010 таймера не было, был лишь в 0011М, и экраны переключать можно было лишь в 0011М. Поэтому в играх было видно перерисовывание спрайтов. В последних программах для 11М графика уже была плавная, за счет нескольких видео буферов.

Задержки по времени делали через пустые циклы.

mbojenov
25.11.2009, 14:15
nzeemin, обидеть jerri я не хотел, если что, приношу свои извинения.

nzeemin
25.11.2009, 14:25
Насколько я помню, в 0010 таймера не было, был лишь в 0011М, и экраны переключать можно было лишь в 0011М. Поэтому в играх было видно перерисовывание спрайтов. В последних программах для 11М графика уже была плавная, за счет нескольких видео буферов.

Можно ли где-то увидеть список новшеств в БК-0011М по сравнению с БК-0010(01), именно на глубоко техническом уровне, таком как функционирование портов?

jerri
25.11.2009, 14:27
цитирую бкашного программера из ATLANTIS (PRS):
"вопрос, кст, дурацкий. никто не задумывался над синхронизацией скорости. какой проц, так и бегало. и причем тут вообще обновление экрана тоже не пойму. видимо чел далек от структуры БК."

Лично от меня - этот человек на форуме зарегиться не может, поэтому уточни вопрос, я его переспрошу.
Естественно далек, все общение с БК ограничивалось играми в компьютерном клубе, хотя первая игрушка моя была именно на БК на бейсике написанная. ;)

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

на Спеке в есть комманда HALT и маскируемое прерывание выполняемое с одной и той же частотой 50 раз в секунду

есть ли на БК0010 идентичные способы определения во времени? или у там нельзя определить что луч сейчас пошел на новый круг?

Alex_K
25.11.2009, 14:46
Насколько я помню, в 0010 таймера не было, был лишь в 0011М.
Был в 0010 таймер. Этот таймер вообще-то входит в состав процессора 1801ВМ1, остаточный рудимент после его переделки из микроконтроллера 1801ВЕ1.

nzeemin
25.11.2009, 14:51
Насколько я помню, в 0010 таймера не было, был лишь в 0011М
Вот тут статейка: http://bk0010.moy.su/publ/20-1-0-25 -- из которой можно предположить что таймер в БК-0010(01) был, но не был документирован, соответственно им и не пользовались. Может кто-либо подтведить/опровергнуть?

---------- Post added at 15:51 ---------- Previous post was at 15:48 ----------


Был в 0010 таймер. Этот таймер вообще-то входит в состав процессора 1801ВМ1, остаточный рудимент после его переделки из микроконтроллера 1801ВЕ1.
Тогда по всей вероятности, таймер должен работать с разной частотой в БК-0010 и БК-0011 -- из-за разной частоты процессора (3 и 4 МГц)?

jerri
25.11.2009, 14:59
вобщем и целом понятно :( все делалось на глазок

b2m
25.11.2009, 15:25
на Спеке в есть комманда HALT и маскируемое прерывание выполняемое с одной и той же частотой 50 раз в секунду
На БК-0011м тоже есть такое прерывание (по адресу 0100), маскируется определённым битом в порту 0177662. Только вот команда HALT делает кое-что другое, а аналогичная команда называется WAIT.

mbojenov
25.11.2009, 16:10
Вот его ответ:

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

jerri
25.11.2009, 16:45
видимо действительно написание программ для БК настолько радикально отличается

да экран является просто куском памяти
да графика на экран наносится путем арифметических операций
вопрос был в чем:
как на БК решали проблему изменения скорости при изменении количества подвижных обьектов(стабилизация скорости в играх)

из того что посмотрел и из того что почерпнул из различных описаний
понимаю что НИКАК... работает и ладно :( ппц

b2m
25.11.2009, 18:12
На десятке - только при помощи таймера (который был недокументирован), к тому же там есть такое понятие, как "сломанный таймер". Что это означает не знаю даже я, хотя в моём эмуляторе тесты пишут, что "таймер - сломан". А что же означало "не сломанный таймер"?

Raydac
25.11.2009, 18:28
была игра для Бк-0010, называлась King Valley вроде как от Shishkin Software и она юзала таймер для проигрывания музона, но из трех виденных мною бках она работала на одной только, пришлось писать утилиту которая заменяла адрес с которым пытается работать прога как с таймерным на вроде 177716 и в процессе игры шел шум и скрежет но она начинала играть, как мне сказали на некоторых бкашках таймер был, на некоторых не был.. так что для эмулей можно в качестве теста юзать кинг валлей игруху

b2m
25.11.2009, 19:36
На моём работает, с музыкой и скрежетом :)

Raydac
25.11.2009, 19:38
На моём работает, с музыкой и скрежетом :)
значит у тебя таймер нормальный, там музон не чисто играл.. когда на 177716 переводишь то просто скрежет

nzeemin
04.12.2009, 18:23
как там были организованы прерывания\освежение экрана?
интересует как обычно синхронизировались игры для получения стабильной скорости?

Подразобрался немного. Таймер 50 Гц там есть, даёт прерывания по вектору 100, маскируется битом 14 порта 177662. Не знаю только как в точности оно расположено по времени относительно кадра. Весь кадр -- 312 строк, по 64 мкс на строку, итого 20 мс = 50 Гц.

Кроме того есть программируемый таймер на портах 177706, 177710, 177712. Наступление события проверяется чтением портов, прерывания нет.

nzeemin
04.12.2009, 21:07
Тогда по всей вероятности, таймер должен работать с разной частотой в БК-0010 и БК-0011 -- из-за разной частоты процессора (3 и 4 МГц)?

Похоже, я нашёл этому подтверждение.

Цитата из Донского:


Г. Работа с таймером

Подробное описние таймера (счетчика времени) БК с интересными
примерами приводится в [6] и [12]. Здесь лишь приведем простейший
пример работы с ним и порекомендуем читателю поэкспериментировать, так
как в БК разных заводов таймер может работать по-разному. Посмотрите,
что получится, если вместо &O160 записать 0, &O20, &O60, &O120 и как
зависит период Т от начального значения S0 (рис.10):

10 POKE &O177706,32767% 'установка длительности периода S0
20 POKE &O177712,&O160 'запуск таймера
30 ? AT(0,0)PEEK(&O177710) 'смотрим, как он работает
40 GOTO 30
Рис.10. Иллюстрация работы таймера.
Таймер работает независимо от работы программы. Содержимое счетчика
времени определяется как результат функции PEEK(&O177710) и
периодически уменьшается от S0 до 0 (рис.10).
В приведенном примере при S0=32767 период счетчика Т=89,657 с [6].

Считаем.
89,657 сек / 32767 = 2,7362 мс на тик таймера, с учётом делителей на 16 и 4 получаем 2736,2 / 16 / 4 = 42,75 мкс на наименьший тик таймера.
Частота процессора 3 МГц, это 0,333 мкс на такт, умножаем на 128, получаем 42,67 мкс -- довольно близко, можем считать что сходится.

Теперь смотрим тут: http://pdp-11.ru/mybk/textbk/FL11M.TXT


5. СИСТЕМНЫЙ ТАЙМЕР

ТАЙМЕР СОСТОИТ:
A. генератор с периодом 32 мкс (т.к. тактовая частота процессора
В. делители на 4 и 16 БК-11 и БК-11М составляет 4 MHz, а
C. реверсивный счетчик (177710) не 5 MHz, kak написано в литературе)
D. регистр установки (177706)
E. регистр команд и состояний (177712)

* ДЛЯ СПРАВКИ: тактовая частота, поступающая на процессор, делится на
128. , а потом поступает на таймер

jerri
04.12.2009, 21:11
Подразобрался немного. Таймер 50 Гц там есть, даёт прерывания по вектору 100, маскируется битом 14 порта 177662. Не знаю только как в точности оно расположено по времени относительно кадра. Весь кадр -- 312 строк, по 64 мкс на строку, итого 20 мс = 50 Гц.

Кроме того есть программируемый таймер на портах 177706, 177710, 177712. Наступление события проверяется чтением портов, прерывания нет.

это здорово, но надо смотреть
используется ли обращение к биту 14 порта 177662
в играх :v2_conf3::v2_conf2:

чтото я этого в играх не видел :(

Alex_K
04.12.2009, 21:20
Подразобрался немного. Таймер 50 Гц там есть, даёт прерывания по вектору 100, маскируется битом 14 порта 177662.
Но это только в БК-0011, в БК-0010(есть в БК-0011) это прерывание от вывода ПРТ разъемов "МПИ" и "УП".

SKcorp.
04.12.2009, 22:11
В БК0010-01 таймер был недокументирован. В Армянских БК-шках он вообще не работал.

В БК0011М было прерывание по таймеру.

Manwe
06.03.2019, 19:35
У меня есть подпрограмма синхронизации экрана с таймером БК-0010. Закончу игру - выложу исходники. Сможете взять оттуда.

68354

68355

Manwe
07.03.2019, 12:15
Генератор случайных чисел спрашивали. Вот, например. Простой, короткий, быстрый, с хорошим разбросом.
Использование таймера закомментировано (символами "точка с запятой"), но кому надо - может раскомментировать. Единственное, между запуском таймера и началом работы генератора вставьте какую-то пользовательскую активность типа нажатия клавиш в меню и т.п., чтобы при каждом запуске получалось действительно случайно.

Первая картинка - код, вторая результат вывода на экран 16536 случайных слов:

68360 68361



; Random generator for BK-0010 (c) Manwe/SandS 2019
; Compile this source with PDPy11: https://github.com/imachug/PDPy11

; TIMER=177712 ; timer port address

; MOV #123,@#TIMER-4 ; timer initial value
; MOV #1,@#TIMER ; stop and init timer
; MOV #20,@#TIMER ; start timer

MOV #20000,R0 ; generate 20000 random numbers
MOV #40000,R3 ; screen address
1: CALL RND
MOV R1,(R3)+ ; put random number on the screen
SOB R0,1
HALT

RND: MOV RND1,R1
MOV RND2,R2
ROR R1
ROL R2
SWAB R2
; ADD @#TIMER-2,R2
XOR R2,R1
MOV R1,RND1
MOV R2,RND2
RET

RND1: .WORD 173451
RND2: .WORD 54102

.END
Ну и, понятное дело, если в вашей программе много свободных регистров, то надобность в ячейках памяти RND1 и RND2 отпадает, всё можно хранить в регистрах R1 и R2. Такая процедура будет работать раза в два быстрее. Или в три.

MM
08.03.2019, 17:10
есть подпрограмма синхронизации экрана с таймером БК-0010
Через 177664 ?
( В БК0010 нет штатного прерывания по 100 вектору ).

hobot
08.03.2019, 19:54
В Армянских БК-шках он вообще не работал.
у меня такая - но игрушки все работали нормально, фотка платы тут (http://pic.pdp-11.ru/images/platabk.jpg),
машинка кстати живая тока клавиатура дребезг ужасен

Manwe
09.03.2019, 09:53
Через 177664 ? ( В БК0010 нет штатного прерывания по 100 вектору ).первый раз вручную, затем через 177664.

- - - Добавлено - - -


у меня такая - но игрушки все работали нормальноKing’s Valley должна глючить, по крайней мере музыка. Она на таймер завязана.

hobot
09.03.2019, 15:47
King’s Valley должна глючить, по крайней мере музыка.
что такое было, очень смутно помню, ПКМ на кассетах я эту игру не скопировал себе...

S_V_B
09.03.2019, 18:54
Как будет выглядеть самый красивый PUSHA;POPA...
Несколько я уже видел... не впечатлили...

Manwe
10.03.2019, 00:15
Как будет выглядеть самый красивый PUSHA;POPA...
Несколько я уже видел... не впечатлили...Первое предложение, которое пришло в голову:

PUSHA: MOV R0,-(SP)
ADD #100,PUSHA
DEC #5
BPL PUSHA

POPA: MOV (SP)+,R5
DEC POPA
DEC #5
BPL POPA

Занимает больше, чем 5 push’ей или 5 pop’ов подряд. Так что практического смысла не имеет.
А также эти процедуры одноразовые. Так как самомодифицируются. Стало быть, надо их выправлять перед началом.

gid
10.03.2019, 09:35
Стало быть, надо их выправлять перед началом.
А кто мешает? Добавляем модификаторы:


PUSHA: MOV #5,PUCN$
MOV (PC)+,(PC)
.WORD 10046
PUMD$: MOV R0,-(SP)
ADD #100,PUMD$
DEC (PC)+
PUCN$: .WORD 5
BPL PUMD$

POPA: MOV #5,POCN$
MOV (PC)+,(PC)
.WORD 12605
POMD$: MOV (SP)+,R5
DEC POMD$
DEC (PC)+
POCN$: .WORD 5
BPL POMD$

Получаем ещё более бесполезного монстра.
С моей точки зрения, ничего лучше, чем метод подсмотренный в ПЗУ БОС БК11М не придумать.

;вызов так: JSR R5,PUSHA, сохраняем все регистры
;но через R5 нельзя передать параметр функции, чтобы было можно, есть более сложный метод
PUSHA: MOV R4,-(SP)
MOV R3,-(SP)
MOV R2,-(SP)
MOV R1,-(SP)
MOV R0,-(SP)
;MOV R5,-(SP) ;это - чтобы и в R5 можно было
;MOV 14(SP),R5 ;передавать параметры
;CALL @(SP)+
CALL (R5)
MOV (SP)+,R0
MOV (SP)+,R1
MOV (SP)+,R2
MOV (SP)+,R3
MOV (SP)+,R4
MOV (SP)+,R5
RETURN

;пример использования
SUBR: JSR R5,PUSHA ;сохраняем все регистры выполняем функцию
...
...
RETURN ;выход и восстановление всех регистров

Manwe
10.03.2019, 09:47
Очевидно, практического смысла это не имеет. Только из любви к искусству :) Быстрее и короче написать пять раз MOV Rn,-(SP). А если такая процедура есть в ПЗУ, то ещё быстрее и короче обратиться к ней.

S_V_B
10.03.2019, 09:58
Я в другой теме как-то затупил... спрашивал, оказалось, что тот монстр был PUSHA...POPA.. но весьма навороченный и и порожденный ЯВУ.
Но натолкнуло на мысль, что можно сделать процедуру для этого...

- - - Добавлено - - -

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

Hunta
10.03.2019, 13:46
Давно всё уже изобретено DEC и помещено в SYSLIB


CALL $SAVAL
;;
$SAVAL::
MOV R4,-(SP) ;Save R4
MOV R3,-(SP) ;Save R3
MOV R2,-(SP) ;Save R2
MOV R1,-(SP) ;Save R1
MOV R0,-(SP) ;Save R0
MOV 12(SP),-(SP) ;Get the return address
MOV R5,14(SP) ;Save R5
CALL @(SP)+ ;Call the caller
MOV (SP)+,R0 ;Restore R0
MOV (SP)+,R1 ;and R1
MOV (SP)+,R2 ;and R2
MOV (SP)+,R3 ;and R3
MOV (SP)+,R4 ;and R4
MOV (SP)+,R5 ;and R5
RETURN

Hunta
10.03.2019, 14:49
из одной паставки
Из одной пАставки для этой п/п не требуется - мало того, что она практически во всех SYSLIB-ах, так ещё и ОЧЕНЬ древняя, не удивлюсь, если и в DOS/BATCH-11 найдётся.

sysmac.zip
Нужна именно SYSLIB.OBJ или SYSLIB.OLB - она там в оттранслированном виде. SYSMAC здесь не причём - некоторые, как обычно, не в теме

S_V_B
10.03.2019, 16:54
Исходники имеются? Все что я видел про RT11 сплошные макросы.., что не очень интересно особенно в приложении к БК10

Hunta
10.03.2019, 20:03
Исходники имеются?
Как минимум для RT-11 5.04 и 5.07 гуляют по сети дистры с исходниками. А с макросами советую сдружиться, потому как в чём то более менее серьёзном - серьёзно экономят время, а если правильные создать - то и понимание логики работы программы

Manwe
04.06.2019, 13:25
Народ спрашивал программу печати числа в 10-ой системе счисления.
Этой теме посвящена одна глава (http://demoscene.ru/info/article.php3?03411) из книги «Хакеры» – очень вдохновляющая, советую прочитать!
Я попытался воссоздать эту программу:



; Decimal by Manwe
; input: R0 - number to print
; output: R1 - pointer to text string

DECIM: MOV #NUMBER,R1 ; pointer to output text string
CLRB -(R1) ; end of text marker
MOV #10.,R4
1: MOV #-1.,R5
2: INC R5 ; counter of 10s
SUB R4,R0
BHIS 2 ; branch if higher or same
ADD #72,R0 ; #10. + '0' ASCII code
MOVB R0,-(R1) ; store R0 to text string
MOV R5,R0 ; let's count next how many 10s in number of 10s
BNE 1
RET ; returns text string pointer in R1

.BLKB 6
NUMBER:

Смысл программы, конечно, не в скорости, а в минимальном размере.

Хакерская эстетика программирования

Так произошло и с программой печати десятичных чисел. Это была подпрограмма, иногда использовавшаяся в других программах. Она позволяла транслировать двоичные числа, которыми оперировал компьютер, в обычные десятичные цифры. По словам Сандерса, эта проблема являлась «своего рода павлиньим хвостом в программировании, и если вы могли написать рабочую программу печати десятичных чисел, то вы знали о компьютере достаточно, чтобы расправить хвост и называть себя, в некотором роде, программистом. А если вы были в состоянии написать действительно хорошую процедуру, то вы могли бы попробовать называть себя хакером». Проблема превратилась в нечто большее, чем просто состязание, окончательный бамминг (bumming на хакерском жаргоне - выкидывание "лишних" команд) процедуры печати десятичных чисел превратился для хакеров в своеобразные поиски Святого Грааля.

В течение нескольких месяцев было изготовлено множество версий процедуры печати десятичных чисел. Если программист был непроходимо глуп или был полным идиотом и совершенным «лузером», то подпрограмма конверсии отняла бы у него около сотни команд. Но любой хакер, стоивший своего имени, мог уместить ее в меньший объем. В конечном счете, попеременно убирая инструкции то в одном, то в другом месте, процедуру уменьшили до примерно пятидесяти инструкций.

После этого дела приняли серьезный оборот. Хакеры тратили многие часы, пытаясь найти путь, как можно было бы сделать все то же самое, но при помощи меньшего количества кода. Это стало больше чем соревнованием - это стало настоящим крестовым походом. Сколько бы сил не было потрачено, никто не был в состоянии преодолеть барьер из пятидесяти команд. Возник вопрос: а можно ли вообще сделать ее меньше? И есть ли предел, ниже которого бамнуть программу просто нельзя?

Среди многих, кто пытался решить эту головоломку, был парень по фамилии Дженсен, высокий и тихий хакер из Мэйна. Он обычно тихо сидел в Клудж Комнате (Kluge Room - пристанище хакеров в Массачусетском Технологическом Институте конца 50-ых и начала 60-ых годов) и покрывал своими каракулями распечатки с таким же невозмутимым спокойствием, как живущий в лесной глуши человек неспешно обстругивает ножом деревяшку, сидя на завалинке перед своим домом. Дженсен всегда пытался найти способ как сжать свои программы в объеме и увеличить их скорость. Его код, на первый взгляд, представлял собой беспорядочную последовательность логических и арифметических команд, часто вызывающих производство различных расчетов в разных частях одного и того же 18-битного слова (компьютер TX-0 использовал 18-разрядные слова). Если коротко, то его стиль программирования состоял из удивительных вещей и волшебных трюков.

До Дженсена существовала некоторая устоявшаяся точка зрения, что единственным логическим алгоритмом для процедуры печати десятичных чисел является последовательное вычитание, при котором использовались таблицы степеней числа 10 так, чтобы результирующее число попадало в соответствующие столбцы цифр. Дженсен как-то догадался, что таблица со степенями десятки была не нужна. Он придумал алгоритм, который позволял конвертировать числа обратным образом, а при помощи хитрого программного фокуса печатать их в нужном порядке. Кроме того, было дано сложное математическое доказательство всего этого, которое становилось понятным только после того, как хакеры увидели программу Дженсена, пришпиленную к доске объявлений, из которой было видно, что ему удалось преодолеть лимит длины программы для печати десятичных чисел. В ней было сорок шесть команд. Все присутствовавшие, с отпавшими челюстями уставились на код. Марж Сандерс потом припоминала, что хакеры, впервые за много дней, вели себя необычно тихо.

«Мы поняли, что дошли до логического конца»,- сказал позднее Боб Сандерс, - «Это была Нирвана».



Автор: Стивен Леви
Перевод: Андрей Лукин

S_V_B
04.06.2019, 14:16
Смысл программы, конечно, не в скорости, а в минимальном размере.
Плохо жить без DIV :)


MOV #6,R0
MOV #<DecStr+6>,R1
1$:
CLR R2
DIV #10.,R2
INC R3
MOVB R3,-(R1)
MOV R2,R3
SOB R0,1$

konst_st
04.06.2019, 14:35
Народ спрашивал программу печати числа в 10-ой системе счисления.
Деление на 10 и печать остатка от деления - это же классика.
Только деление сделано вычитанием.

- - - Добавлено - - -


Плохо жить без DIV
Вот-вот :)

Hunta
04.06.2019, 14:45
Вот так правильней ;)




;
; Input: R3
;
MOV #6,R0
MOV #<DecStr+6>,R1
1$:
CLR R2
DIV #10.,R2
; INC R3
ADD #'0, R3
MOVB R3,-(R1)
MOV R2,R3
SOB R0,1$

S_V_B
04.06.2019, 14:50
Вот так правильней
согласен

Hunta
04.06.2019, 14:56
А теперь классика:


;+
;
; CVBTOD
; Converts the binary value passed in R0 to a string of
; ascii characters which is the decimal equivalent and
; places them in the buffer pointed to by R1
;
; CALL:
; R0 = 16-bit number
; R1 -> conversion buffer
;
; RETURNS:
; R0 = 0
; R1 -> byte following last digit in converted number
;
;-

CVBTOD: MOV R0,-(SP) ;SAVE THE NUMBER PASSED TO US
CLR R0 ;SET FOR CRUDE DIVIDE BY 10.
10$: INC R0 ;BUMP QUOTIENT
SUB #10.,(SP) ;REDUCE NUMBER BY 10.
BHIS 10$ ;IF SIGN DIDN'T CHANGE...
ADD #10.+60,(SP) ;MAKE REMAINDER PRINTABLE
DEC R0 ;REDUCE QUOTIENT
BEQ 20$ ;IF ZERO, TIME TO PRINT
CALL CVBTOD ;OTHERWISE, RECURSE !
20$: MOVB (SP)+,(R1)+ ;STORE A CONVERTED DIGIT
RETURN ;UNWIND THE RECURSION





TEST MACRO V05.06R Tuesday 04-Jun-19 Page 1


11
12 000000 .PSECT A1
13 ; Decimal by Manwe
14 ; input: R0 - number to print
15 ; output: R1 - pointer to text string
16
17 000000 012701 000046' DECIM: MOV #NUMBER,R1 ; pointer to output text string
18 000004 105041 CLRB -(R1) ; end of text marker
19 000006 012704 000012 MOV #10.,R4
20 000012 012705 177777 10$: MOV #-1.,R5
21 000016 005205 20$: INC R5 ; counter of 10s
22 000020 160400 SUB R4,R0
23 000022 103375 BHIS 20$ ; branch if higher or same
24 000024 062700 000072 ADD #72,R0 ; #10. + '0' ASCII code
25 000030 110041 MOVB R0,-(R1) ; store R0 to text string
26 000032 010500 MOV R5,R0 ; let's count next how many 10s in number of 10s
27 000034 001366 BNE 10$
28 000036 000207 RETURN ; returns text string pointer in R1
29
30 000040 .BLKB 6
31 000046 NUMBER:
32
33 000000 .PSECT A2
34 000000 010046 CVBTOD: MOV R0,-(SP) ;SAVE THE NUMBER PASSED TO US
35 000002 005000 CLR R0 ;SET FOR CRUDE DIVIDE BY 10.
36 000004 005200 10$: INC R0 ;BUMP QUOTIENT
37 000006 162716 000012 SUB #10.,(SP) ;REDUCE NUMBER BY 10.
38 000012 103374 BHIS 10$ ;IF SIGN DIDN'T CHANGE...
39 000014 062716 000072 ADD #10.+60,(SP) ;MAKE REMAINDER PRINTABLE
40 000020 005300 DEC R0 ;REDUCE QUOTIENT
41 000022 001402 BEQ 20$ ;IF ZERO, TIME TO PRINT
42 000024 004767 177750 CALL CVBTOD ;OTHERWISE, RECURSE !
43 000030 112621 20$: MOVB (SP)+,(R1)+ ;STORE A CONVERTED DIGIT
44 000032 000207 RETURN


Со счётом 40:34 победил автор из DEC (и это я ещё не засчитал буфер и не возможность разместить в ПЗУ)

- - - Добавлено - - -

Как видно, в DEC знали про этот подход или у них был свой Дженсен ;)

nzeemin
05.06.2019, 11:34
Для комплекта ещё - вариант из Stop the Express для MS-0515.
Но на самом деле тут в конце приписан ещё лишний нолик, потому что выводятся заработанные очки.
Точку входа Z34420 можно использовать для печати 3-значного числа.


; Подпрограмма: Печать 5-значного десятичного числа; R3=число
Z34400: MOV #023420, R2 ; 10000.
Z34404: CALL Z34454 ;
Z34410: MOV #001750, R2 ; 1000.
Z34414: CALL Z34454 ;
Z34420: MOV #000144, R2 ; 100.
Z34424: CALL Z34454 ;
Z34430: MOV #000012, R2 ; 10.
Z34434: CALL Z34454 ;
Z34440: ADD #000060, R3 ; '0'
Z34444: MOVB R3, (R1)+ ;
Z34446: MOVB #000060, (R1)+ ;
Z34452: RETURN ;
Z34454: MOV #000060, R0 ; '0'
Z34460: SUB R2, R3 ;
Z34462: BLO Z34470 ;
Z34464: INC R0 ;
Z34466: BR Z34460 ;
Z34470: ADD R2, R3 ;
Z34472: MOVB R0, (R1)+ ; копируем в экран план
Z34474: RETURN

Manwe
05.06.2019, 15:56
Плохо жить без DIV :)Кто запустил УКНЦшников в тему БК-0010?!!
:)


Со счётом 40:34 победил автор из DEC (и это я ещё не засчитал буфер и не возможность разместить в ПЗУ)А в чём "невозможность" размещения в ПЗУ? Буфер текстовой строки - это любое место в ОЗУ.
И зачем было считать за часть программы занесение адреса текстового буфера в R1, если в другой программе он не считается?
Ещё они не заносят в текстовый буфер символ конца строки (0). Если из моей программы убрать и это, она станет на одно слово короче DECовской. Тогда получится 13:14 в мою пользу!
:)


; Decimal by Manwe
; input: R0 - number to print
; R1 - pointer to text buffer + 6
; output: R1 - pointer to the text to print

DECIM: CLRB -(R1) ; end of text marker
MOV #10.,R4
1: MOV #-1.,R5
2: INC R5 ; counter of 10s
SUB R4,R0
BHIS 2 ; branch if higher or same
ADD #72,R0 ; #10. + '0' ASCII code
MOVB R0,-(R1) ; store R0 to text string
MOV R5,R0 ; let's count next how many 10s in number of 10s
BNE 1
RET ; returns text string pointer in R1

Так-то идея с рекурсией прикольная, респект. Но с практической точки зрения там много операций со стеком, что сказывается на производительности. Этот алгоритм и без того тормозной, так ещё и усугублять постоянными обращениями к (SP)... Наверное, целью было сэкономить регистры любой ценой.


Как видно, в DEC знали про этот подход или у них был свой Дженсен ;)Естественно, "в DEC был свой Дженсен" - несколько хакеров из MIT перешли на работу в DEC. Собственно, они повлияли на само становление архитектуры PDP-1.

Manwe
05.06.2019, 18:13
Для комплекта ещё - вариант из Stop the Express для MS-0515.Вариант из Stop the Express занимает 31 слово (в десятичной системе счисления).
Я делал быстрый (без CALLов) вариант со степенями 10. Из полезного: не печатает лидирующие нули, добавляет в конец символ конца строки.
Размер 25 слов:


; Fast DECIMAL by Manwe
; input: R0 - number
; R1 - pointer to output text string

DECIM: MOV #TEN,R5 ; table address
1: CMP (R5)+,R0 ; skip leading zeros
BHI 1 ; branch if higher, for 16-bit not signed
MOV -(R5),R3
BEQ 4 ; if less then 10

2: MOV #57,R4 ; 0 symbol in ASCII codepage - 1
3: INC R4 ; count digits
SUB R3,R0
BHIS 3 ; branch if higher or same, for 16-bit not signed
MOVB R4,(R1)+ ; print R4

ADD (R5)+,R0
MOV (R5),R3
BNE 2

4: ADD #60,R0 ; 0 symbol in ASCII codepage
MOVB R0,(R1)+ ; print R0
CLRB (R1) ; write end marker of the text string
RET

TEN: .WORD 10000.,1000.,100.,10.,0

Manwe
05.09.2019, 09:30
Не нашёл более подходящей темы, спрошу здесь.
При обращении к адресу @#167776 БК-0011М вылетает на середине команды. По адресам 160000-177777 находится область регистров внешних устройств и конкретно по адресу 167776 в данный момент ничего не подключено (обычно бывает подключён контроллер СМК и в этой ячейке памяти записана версия контроллера).
Действительно ли БК должна прерываться по 4-ому вектору при обращении к адресу 167776?
Касается ли это только БК-0011М, или также БК-0010?
Известны ли какие-то ещё устройства, использующие порт 167776?
Заранее спасибо.

Hunta
05.09.2019, 11:58
Действительно ли БК должна прерываться по 4-ому вектору при обращении к адресу 167776?
При обращении по несуществующему адресу будет прерывание по вектору 4. И не важно, куда указывает адрес

svinka
05.09.2019, 12:27
При обращении по несуществующему адресу
Адрес существует всегда! но по нему могут не отвечать. Или никто не живет или разговаривать не хотят. А могут только читать а писать нет!



По адресам 160000-177777 находится область регистров внешних устройств
Для БК страница ввода-вывода определена в документации 177600-177776 и называется областью системных регистров. В этом одно из несоответствий архитектуре PDP-11


1. Конфигурация без расширенной памяти.

0 ------------------------------
! Область стека и системных !
! переменных !
1000 ------------------------------
! ОЗУ пользователя !
40000 ------------------------------
! ОЗУ экрана !
100000 ------------------------------
! Системное ПЗУ !
120000 ------------------------------
! Сменное (съемное) !
! ПЗУ (Фокал) !
140000 ------------------------------
! Сменное ПЗУ !
160000 ------------------------------
! Сменное системное ПЗУ !
177600 ------------------------------
! Область системных !
! регистров !
177777 ------------------------------

2. Конфигурация с расширенной памятью.

0 ------------------------------
! Область стека и системных !
! переменных !
1000 ------------------------------
! ОЗУ пользователя !
40000 ------------------------------
! ОЗУ пользователя или !
! экрана !
70000 ------------------------------
! ОЗУ экрана !
100000 ------------------------------
! Системное ПЗУ (монитор и !
! драйверы) !
120000 ------------------------------
! ПЗУ-интерпретатор Фокала !
140000 ------------------------------
! ПЗУ резервное !
160000 ------------------------------
! ПЗУ. тесты !
177600 ------------------------------
! Область системных !
! регистров !
177777 ------------------------------

Hunta
05.09.2019, 13:21
Адрес существует всегда!
Адрес, при обращении по которому в течении 15 мкс не прилетел BRPLY L


В этом одно из несоответствий архитектуре PDP-11
Ну, строго говоря, в архитектуре PDP-11 нигде не постулируется, что в старших 8 кб адресного пространства располагается страница в/в или что там обязательно только регистры внешних устройств. Более точный вариант для PDP - сигнал BBS7 L, хотя и это - не постулат. Но если требуется работа ОС от DEC без необходимости модификации - это до некоторой степени предполагается. Хотя более точный вариант (но тоже не постулат) - по адресам 177560-177566 - регистры адаптера подключения консольного терминала плюс по некоторым адреса (не обязательно на странице в/в) ПЗУ с по крайне мере начальным загрузчиком (или ввод его тем или иным способом) плюс по некоторым адресам (не обязательно на странице в/в) регистров устройства, откуда пойдёт начальная загрузка некоей системы. Но это не обязательно, особенно в варианте с прошитым в ПЗУ софтом.

svinka
05.09.2019, 14:39
в архитектуре PDP-11 нигде не постулируется, что в старших 8 кб адресного пространства располагается страница в/в
Постулируется
177560-177566 ОБЯЗАТЕЛЬНО
Карта распределения памяти и диспетчер памяти определяются стандартом

Кстати DECPro Digital не обзывал PDP-11 совместимым компьютером

Так что наша википедия врет на странице pdp-11 про
Электроника 85
Электроника БК-0010 и БК-0011М
Электроника МК-85
Электроника МК-90

Союз-Неон ПК-11/16 не совместимый но программно-аппаратно эмулирует pdp-11 с 16-ти разрядным адресом

про немигу и мс0515 не знаю

Hunta
05.09.2019, 15:23
Постулируется
Ссылку на документ

svinka
05.09.2019, 15:31
Ссылку на документ


PDP-11 Architecture Handbook

http://home.kpn.nl/a.dikker1/museum/rspdparch.html

Manwe
05.09.2019, 15:41
Спасибо за ответы!
Я смотрел схему адресного пространства из книги Зальцмана, и по ней у меня сложилось впечатление, что с адреса 160000 может быть и ПЗУ, и регистры внешних устройств: http://gid.pdp-11.ru/books/00015-01.32.01.html#_ref_p111

Hunta
05.09.2019, 17:51
http://home.kpn.nl/a.dikker1/museum/rspdparch.html
За попытку отмазки - прокатит, за ссылку на документ - нет


Кстати DECPro Digital не обзывал PDP-11 совместимым компьютером
Из 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...

страница E-7

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


что с адреса 160000 может быть и ПЗУ, и регистры внешних устройств
Может и то и другое. Например, по адресам 173000-173776 и 165000-165776 часто можно найти ПЗУ тестирования и загрузчиков

ivagor
20.10.2019, 12:33
Проба пера для PDP-11 - распаковщик LZSA1 (https://gitlab.com/ivagor/lzsa8080/tree/master/PDP11). Наверняка можно сократить, но, надеюсь, и этот вариант приемлемый.

nzeemin
20.10.2019, 13:54
ivagor, спасибо!
А есть у вас запаковщик на C/C++ для этого алгоритма? // а, сорри, увидел - https://github.com/emmanuel-marty/lzsa

Тут в параллельной ветке по УКНЦ иногда поднимается вопрос упаковки/распаковки.
На данный момент мы имеем три алгоритма - RLE, LZSS, LZ4 - все три с упаковщиком на C/C++ и распаковщиком на PDP-11.
См. тут - https://github.com/nzeemin/ukncbtl-utils/tree/master/Sav2Cartridge

По вашему коду могу только сказать что вот такую конструкцию

mov src, dst
bic #177400, dst
можно сократить до

clr dst
bisb src, dst

ivagor
20.10.2019, 15:26
По поводу сравнения с sav2cartridge. RLE и LZ4 точно уступают LZSA1 по степени сжатия, LZ4 потенциально еще чуть уступает и по скорости распаковки, но насчет своего конкретного распаковщика по этому вопросу пока не уверен. LZSS скорее всего сжимает сильнее, но тут надо проверять, насколько именно.
За подсказку спасибо, еще подумаю и заменю на доработанный вариант.

- - - Добавлено - - -

Еще раз взглянул и понял, что bic #177400 в данном случае совсем не нужен, но на будущее вариант clr\ bisb пригодится.

Hunta
21.10.2019, 12:20
.NLIST
.INCLUDE /DSMAC.MAC/
.INCLUDE /MYMAC.MAC/
.LIST

MODULE NAME=<TEST>, REL=<SH>, VER=<01>, LIBR=<LZSA1UnPack>, COMM=<LZSA1 UnPacker>

EXPORT QUALIFIED ULZSA1

PROCEDURE ULZSA1
BEGIN
LET Counter+1 :B= #0

LOOP

LET R0 := #0
LET R0 :B= R0 SET.BY (R1)+

LET R5 := R0
LET R0 := R0 OFF.BY #^C<160>

IF RESULT IS NE THEN ; if literal

LET R0 := R0 R.SHIFT 4

IF R0 EQ #7 THEN
CALL RIDLNG
ON.ERROR LEAVE LOOP
END

LET Counter+0 :B= R0

THRU R3 := Counter
LET (R2)+ :B= (R1)+
END

END

LET Offset+0 :B= (R1)+
LET Offset+1 :B= #377

LET R0 :B= R5

IF RESULT IS MI THEN ; LongOffset
LET Offset+1 :B= (R1)+
END

LET R0 := R0 OFF.BY #^C<17> + #3

IF R0 EQ #18. THEN
CALL RIDLNG
ON.ERROR LEAVE LOOP
END

LET Counter+0 :B= R0

LET R4 := R1

LET R1 := Offset + R2

THRU R3 := Counter
LET (R2)+ :B= (R1)+
END

LET R1 := R4

END

RETURN

END ULZSA1

PROCEDURE RIDLNG
BEGIN

CLR R4
LET R4 :B= R4 SET.BY (R1)+

LET R0 := R0 + R4

IF RESULT IS CS THEN

LET Counter+1 :B= R0
LET R0 :B= (R1)+

IFB Counter+1 EQ #0 THEN

LET Counter+0 :B= R0
LET Counter+1 :B= (R1)+

LET CARRY := OFF

IFB Counter+1 EQ #0 THEN
LET CARRY := ON
END

END
END

RETURN
END RIDLNG

Counter: .BLKW 0
Offset: .BLKW 0

END TEST
.END


Возможно ошибся с выходом из RIDLNG... Но пока на одно слово меньше :)

- - - Добавлено - - -

Пардон, забыл одну команду, что бы сделать полноценный библиотечный модуль :)

ivagor
21.10.2019, 15:12
Но пока на одно слово меньше
По сравнению с вариантом уже без bic #177400,r0? Т.е. получилось 152 байта?

Hunta
21.10.2019, 15:33
По сравнению с вариантом уже без bic #177400,r0
Нет, с bic #177400 - исходный вариант не трогал. По идее, после оптимизации исходного - мой на одно два слова будет длиннее.
Но я пока не думал над оптимизацией...

HardWareMan
13.04.2020, 10:02
Я был настолько доволен программой, что решил поделиться ей на форуме zx-pk.ru (ничего не подозревая о местных традициях критиковать без аргументов). Реакция сообщества была примерно такой: “надо было просто посмотреть, как сделали в DEC, это же классика”.
Плач Ярославны тут. (https://habr.com/ru/post/496914/)

Lethargeek
13.04.2020, 19:30
Плач Ярославны тут.

Размер этой подпрограммы – 22 слова (не считая данных)
kek, теперь понятно, как у быкарей "памяти хватает на всё" (не считая данных))))

Manwe
13.04.2020, 21:50
Вот когда сумеете сократить размер менее 14-ти слов, тогда и поговорим :)

nzeemin
23.04.2020, 19:42
Проба пера для PDP-11 - распаковщик LZSA1 (https://gitlab.com/ivagor/lzsa8080/tree/master/PDP11). Наверняка можно сократить, но, надеюсь, и этот вариант приемлемый.

ivagor, можете взглянуть что может быть не так?
Пробую применить ваш распаковщик LZSA1 для картриджа УКНЦ.

В некоторый момент распаковщик вычисляет не ту длину для копирования.
Исходные данные до запаковки - HWYENC.SAV начиная с адреса 512. = 0x200;
запакованный поток (проверен штатным LZSA1-распаковщиком на валидность) - HWYENC.BIN, тоже начиная с адреса 512. = 0x200;
проблема возникает со значением по адресу 30157(octal) = 0x306F, туда должно попасть значение 0x8A, а получается 0xFD, ну и дальше конечно уже все данные распакованы неверно.

Во вложении архив с этими файлами, плюс стейт-файл к эмулятору UKNCBTL, отладчик стоит перед вычислением длины и копированием как раз этого фрагмента.
Там же LST-файл от компилятора чтобы понимать что где.

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

ivagor
23.04.2020, 20:16
nzeemin, Вы сжимали с опциями
-f1 -r
? (про опции написано в lzsa1.asm)
Попробовал распаковать самим lzsa и полученный файл (48244 байта) длиннее HWYENC.SAV. И меня очень смущает куча нулей в HWYENC.BIN, такого не должно быть.

- - - Добавлено - - -

Пардон, пропустил

HWYENC.BIN, тоже начиная с адреса 512. = 0x200

ivagor
23.04.2020, 22:20
nzeemin, спасибо за багрепорт! Ошибку нашел, исправил, но не проверил на Вашем файле, извините, может уже завтра, но надеюсь будет работать правильно.

nzeemin
23.04.2020, 23:03
nzeemin, спасибо за багрепорт! Ошибку нашел, исправил, но не проверил на Вашем файле, извините, может уже завтра, но надеюсь будет работать правильно.

Да, в этот раз получилось. Спасибо за исправление!

ivagor
24.04.2020, 06:14
Выложил в репозиторий (https://gitlab.com/ivagor/lzsa8080/-/tree/master/PDP11) исправленные распаковщики LZSA1 и LZSA2.

Manwe
24.04.2020, 18:24
Потестировал LZSA2 на своей программе ST0play. Размеры:

Было: 11244
Стало: 5746
Для сравнения BKpack: 6006

LZSA1 тоже работает.


Для распаковки предлагаю дописывать в начало:

.LINK 32000

BEGIN: MOV #32000+(packed-BEGIN),r1
MOV #1000,r2
MOV r2,-(SP)
Здесь 1000 - куда распаковывать программу, 32000 - адрес упакованной программы. Понятно, что распакованный файл не должен выходить за адрес 32000.
Сразу после такого начала идёт процедура распаковки. По RET она переходит на адрес 1000, потому что он был заранее положен в стек.

nzeemin
26.04.2020, 19:27
Если суммировать по алгоритмам сжатия для БК/УКНЦ, то у нас сейчас есть:

1. LZSS: запаковщик в Sav2Cart, распаковщик там же (из LZSAV.MAC by Ostapenko Alexey) в 66. байт.

2. LZ4: запаковщик в Sav2Cart (подглючивает иногда, надо исправлять), распаковщик там же, by Alexander Troosh, в 76. байт.

3. LZSA1: запаковщик https://github.com/emmanuel-marty/lzsa, распаковщик тут https://gitlab.com/ivagor/lzsa8080/ by Ivan Gorodetsky, 156. байт.

4. LZSA2: запаковщик https://github.com/emmanuel-marty/lzsa, распаковщик тут https://gitlab.com/ivagor/lzsa8080/ by Ivan Gorodetsky, 296. байт.

5. bkpack - исходники кажется были у gid? распаковщик сколько занимает?

6. P16UNP.MAC в 364. байта и PL.PAS из кода для ПК 11/16 - см. https://github.com/troosh/pk11-16/tree/master/Soft/BIOS

Manwe
26.04.2020, 20:44
На БК 0011м под CSI-DOS есть ещё неплохой Crunch. Он иногда плотней bkpack'а, иногда нет.

gid
27.04.2020, 10:05
Размер распаковщика bkpack: короткий - 128 байт, длинный - 146. байт, но ему ещё нужно около килобайта временного места для распаковки таблиц, которые используются для распаковки массива данных,.

ivagor
27.04.2020, 19:04
Посмотрел на размеры распаковщиков, устыдился и немного оптимизировал LZSA1 (https://gitlab.com/ivagor/lzsa8080/-/tree/master/PDP11/LZSA1) (теперь 144 байта).

Manwe
27.04.2020, 21:17
Посмотрел на размеры распаковщиков, устыдился и немного оптимизировал LZSA1 (https://gitlab.com/ivagor/lzsa8080/-/tree/master/PDP11/LZSA1) (теперь 144 байта).Круто! А LZSA2 возможно ужать?

ivagor
27.04.2020, 21:33
А LZSA2 возможно ужать?
6 байт можно очевидно отыграть внеся Counter, Offset и SavedOffset в тело программы. Скорее всего фикс бага со счетчиком можно сделать поприличнее. А дальше надо смотреть, вспоминать алгоритмы распаковки. Наверняка LZSA2 для PDP-11 можно еще заметно сократить, а может и LZSA1 тоже.

nzeemin
28.04.2020, 01:44
6 байт можно очевидно отыграть внеся Counter, Offset и SavedOffset в тело программы. Скорее всего фикс бага со счетчиком можно сделать поприличнее. А дальше надо смотреть, вспоминать алгоритмы распаковки. Наверняка LZSA2 для PDP-11 можно еще заметно сократить, а может и LZSA1 тоже.

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

ivagor
28.04.2020, 07:23
Я проверяю в emu в конфиге BK-0010 на паре файлов. Пропуск ошибки со счетчиком вызван тем, что файлы сравнительно небольшие (до 15 Кб) и там такой проблемы не возникло, что, конечно, моя недоработка.
Последние оптимизации LZSA1 не только позволили уменьшить размер, но и совершенно точно немного ускорили распаковщик. В emu эмуляция скорости BK не очень точная (а в каком эмуляторе она точная?), поэтому конкретные цифры не буду приводить.
Перечисленные оптимизации LZSA2 тоже приведут к некоторому ускорению при уменьшении размера.

Manwe
28.04.2020, 16:31
Разница в несколько слов не так важна, интереснее что при этом с перфомансом происходит.Для 4-килобайтных демок значение имеет каждый байт, даже в ущерб скорости.

ivagor
28.04.2020, 17:43
Сократил распаковщик LZSA2 (https://gitlab.com/ivagor/lzsa8080/-/tree/master/PDP11/LZSA2) до 266 байт и ускорил. Перешел на "тестовую платформу" DVK и добавил третий тестовый файл, побольше размером.

ivagor
29.04.2020, 11:12
Еще раз глянул LZSA2 и все же одну дополнительную очистку счетчика вернул, т.е. по итогам предыдущей и этой правки результирующий выигрыш -26 байт и итоговый размер 270 байт.

ivagor
29.04.2020, 17:36
Нашел файл, который при распаковке задетектит проблему со счетчиком в LZSA2, если вдруг по прошествии времени я забудусь и снова захочу соптимизировать лишнего. Добавил его в тестовый набор.
А распаковщик LZSA1 (https://gitlab.com/ivagor/lzsa8080/-/tree/master/PDP11/LZSA1) радикально переделал. Убрал весь самомодифицирующийся код, сократил до 124 байт и заметно ускорил. Рискну даже привести цифры, в моих тестах ускорение составило от 10 до 20%.

Manwe
17.05.2020, 15:28
Обновление кросс-ассемблера PDPy11 (https://github.com/imachug/PDPy11):
Полностью переписан плагин подсветки кода для Sublime Text 3 – теперь код раскрашен более логично и аккуратно.
В процесс компиляции из Sublime Text добавлен автоматический запуск эмулятора (по умолчанию закомментирован).

S_V_B
17.05.2020, 17:11
Обновление кросс-ассемблера PDPy11:
Будет поддержка ВМ2 и RT-11?


Sublime Text 3
Очень приятный редактор.. но сложен в настройке и (надеюсь пока) для УКНЦ.

Manwe
18.05.2020, 15:43
Будет поддержка ВМ2 и RT-11?Уже давно есть.


Очень приятный редактор.. но сложен в настройке и (надеюсь пока) для УКНЦ.Записал видео по установке и настройке PDPy11:


https://youtu.be/-LX8MnUs1sk

S_V_B
18.05.2020, 17:59
Будет поддержка ВМ2 и RT-11?
Уже давно есть.
У меня только "привет мир" запустился :(
С более сложными прожэктами будут проблемы.
+ для RT-11 неплохо бы макросов хотя бы самых необходимых добавить с EMTами тяжко.

hobot
18.05.2020, 21:35
Manwe,
S_V_B, зачем весь этот огород, когда есть шикарная возможность
https://zx-pk.ru/threads/24755-emulyator-rt-11.html

т.о. редактируйте\набивайте исходник где удобней вам (мне блокнота хватает для моих поделок) и батником на скорости хоста нативными средстави всё собирается ?

Manwe
18.05.2020, 21:38
У меня только "привет мир" запустился :(
С более сложными прожэктами будут проблемы.
+ для RT-11 неплохо бы макросов хотя бы самых необходимых добавить с EMTами тяжко.Когда-нибудь я доберусь до программирования для УКНЦ и тогда буду решать эту проблему. С другой стороны, программы буду делать совместимыми с магнитофонной загрузкой, так что вряд ли меня затронут особенности RT-11.

hobot
18.05.2020, 21:42
с магнитофонной загрузкой, так что вряд ли меня затронут особенности RT-11.
рука моя потянулась к лицу ! грустно это, Манвэ - по другому не скажешь. Печаль.

S_V_B
19.05.2020, 06:58
Manwe,
S_V_B, зачем весь этот огород, когда есть шикарная возможность
Если было бы все так просто никто бы не искал альтернатив.
Одни короткие метки и константы чего стоят. Редактор Sublime это приятное дополнение, главное же компилятор.

Manwe
19.05.2020, 11:06
рука моя потянулась к лицу ! грустно это, Манвэ - по другому не скажешь. Печаль.а в чём печаль, если игра или демка запускается на любой системе или даже без системы?

- - - Добавлено - - -


батником на скорости хоста нативными средстави всё собираетсяНативные средства не предоставляют возможностей, которые есть у PDPy11. Например, PDPy11 понимает арифметические выражения любой сложности в исходнике, длинные имена меток и констант, алиасы команд (PUSH, POP) и многое другое, что позволяет писать более понятный код.

Hunta
19.05.2020, 12:58
главное же компилятор.

для RT-11 неплохо бы макросов хотя бы самых необходимых добавить

Когда-нибудь я доберусь до программирования для УКНЦ и тогда буду решать эту проблему.

программы буду делать совместимыми с магнитофонной загрузкой, так что вряд ли меня затронут особенности RT-11.

Ничего он пока не стоит.

- - - Добавлено - - -

Основной плюс MACRO-11 - это условная компиляции и макросы. Что то мне подсказывает, что и простейшая моя программа, например - восстановленный текст SPEED не пройдёт в нём компиляцию. А ещё возникает вопрос - а к результату компиляции подцепить стандартные OBJ можно? Или этот компилятор - вещь в себе?

Manwe
19.05.2020, 13:36
Основной плюс MACRO-11 - это условная компиляцияЯ думал о том, чтобы добавить условную компиляцию в PDPy11 – собирать разные исполняемые файлы под БК 0010 и БК 0011, а также под разные операционные системы. Потом понял, что это тотальное зло и с тех пор определяю модель компьютера и операционную систему в самой программе. Чтобы был единый исполняемый файл, который работает везде. Так намного удобней для конечного пользователя.


А ещё возникает вопрос - а к результату компиляции подцепить стандартные OBJ можно? Или этот компилятор - вещь в себе?OBJ нельзя, но если есть его исходники, можно компилировать многофайловый проект с экспортом меток.

Вопрос к hobot, S_V_B, Hunta: если добавятся макросы и obj – вы перейдёте на связку PDPy11 + Sublime Text?

Hunta
19.05.2020, 14:02
если добавятся макросы и obj
Кроме того, что на PDP-11 ассемблер в большим количеством возможностей, у него, особенно в случае RSX, и линкер с большим количеством возможностей, в частности - с поддержкой оверлеев двух типов (это есть и в RT, но не так гибко). Я не думаю, что это (скоро) появится PDPy11 + Sublime Text. Кстати, мне вполне хватает подсветки синтаксиса для .MAC файлов в FAR-е.

Условная компиляция мне - НУЖНА, если её не будет - даже задумываться не буду.

Пример кода - условной компиляции тут нет, только макросы, но вот в макросах её овердохрена (и она вовсе не для поддержки компиляции под разные ОС).



.NLIST
.INCLUDE /KXX:DSMAC.MAC/
.INCLUDE /KXX:MYMAC.MAC/
.INCLUDE /KXX:ASCII.MAC/
.INCLUDE /KXX:HWDF.MAC/

.INCLUDE /MACRO.MAC/
.LIST

MODULE NAME=<SPEED>, REL=<SP>, VER=<02>, COMM=<SPEED program>

FROM SYSMAC IMPORT .EXIT

BLK.SZ =: 16000.

$CODE

PROCEDURE START
BEGIN
LET TCURR := #0

LET TMAX := #4

LET R5 := @#V.TR10

LET @#V.TR10 := #CHKEIS
LET R0 := R0 / R0

LET @#V.TR10 := R5

MTPS #PR4

LET SV100 := @#V.LTC,
LET SV102 := @#V.LTC+2

$SSHOW #MSPEED

$GOTO PREP
END START

PROCEDURE PREP
BEGIN

LET R0 := TCURR + R0

LET R1 := R0

LET R0 := R0 + #CMDTBL
LET @#TCMD := (R0)

LET R1 := R1 + #CPTBLE
LET R1 := (R1)

LET R2 := #3000

LET L02106 := R2
LET L02104 := R2

LET L02106 := L02106 + #BLK.SZ*2

REPEAT

LET (R2)+ := TCMD

UNTIL L02106 EQ R2

LET (R2) := CRET

LET R2 := #100.
LET R3 := #0

$SSHOW

CALL DELAY

LET @#V.LTC+2 := #0
LET @#V.LTC := #TICTAK

MTPS #PR0

;WAIT

$GOTO TEST
END PREP

PROCEDURE TEST
BEGIN
LOOP
CALL @L02104
LET R3 := R3 + #1
END
END TEST

PROCEDURE TICTAK
BEGIN
LET R2 := R2 - #1
IF RESULT IS NE

ENTRY TEMPTY

RTI
END

$GOTO SHOW
END TICTAK

PROCEDURE SHOW
BEGIN
LET R0 := TOP

LET @#V.LTC := #TEMPTY

IF #<3000/3+BLK.SZ> LOS R0 THEN

LET R3 := R3 + #1

END

LET R3 := R3 L.SHIFT 3

CALL CALC

$SSHOW #CSPEED

$SSHOW #BUF

CALL DELAY

LET TCURR := TCURR + #1

IF TCURR NE TMAX GOTO PREP

MTPS #200

LET @#V.LTC := SV100
LET @#V.LTC+2 := SV102

.EXIT
END SHOW

PROCEDURE CHKEIS
BEGIN
LET TMAX := #2
RTI
END CHKEIS

PROCEDURE DELAY
BEGIN
LET R0 := #-4000

REPEAT
LET R0 := R0 + #1
UNTIL RESULT IS EQ

RETURN
END DELAY

;
; R3 count multiply 8
;
PROCEDURE CALC
BEGIN
LET R0 := #BUF

THRU R4 := #EBUF-BUF

LET (R0)+ :B= #SPACE

END

LET R1 := #10.

LOOP

LOOP
LET R5 := R3

IF RESULT IS EQ GOTO L01450

CALL L01452
IF R2 EQ #0 LEAVE LOOP

LET -(R0) :B= R2
LET (R0) :B= (R0) SET.BY #'0

END

IF R3 EQ #0 LEAVE LOOP

LET -(R0) :B= R2
LET (R0) :B= (R0) SET.BY #'0

END

L01450:
RETURN
END CALC

PROCEDURE L01452
BEGIN
LET R3 := #0
LET R2 := #0

IF R5 NE #0 THEN

LET R3 := NOT R3

REPEAT

LET R5 := R5 L.ROTATE

UNTIL RESULT IS CS

REPEAT
ROL R2

IF R2 HIS R1 THEN

LET R2 := R2 - R1

END

ROL R3
ASL R5

UNTIL RESULT IS EQ

LET R3 := NOT R3

END

RETURN
END L01452

PROCEDURE SSHOW
BEGIN
LOOP
LET R0 :B= (R1)+

IF RESULT IS EQ THEN
RETURN
END

REPEAT
UNTILB @TVCSR MI #0

LET @TVBUF :B= R0
END
END SSHOW

$IDATA

; $PDATA

TVCSR: .WORD TPS
TVBUF: .WORD TPB

; $ASCII

MSPEED:
.ASCIZ <LF><CR><RUS>/test bystrodejstwiq /<LAT>

ADDRR:
.ASCIZ <LF><CR><LF><RUS>/komanda sloveniq registr-registr/<LAT>
ADDRM:
.ASCIZ <CR><LF><LF><RUS>/komanda sloveniq registr-pamqtx/<LAT>
MULRR:
.ASCIZ <LF><CR><LF><RUS>/komanda umnoveniq registr-registr/<LAT>
DIVRR:
.ASCIZ <LF><CR><LF><RUS>/komanda deleniq registr-registr/<LAT>

CSPEED:
.ASCIZ <CR><LF><RUS>\bystrodejstwie (tys.op./sek) \<LAT>
.EVEN

; $IDATA

BUF: .BYTE 0, 0, 0, 0, 0, 0, 0, 0
EBUF:
.BYTE 0
.EVEN

CPTBLE:
.WORD ADDRR
.WORD ADDRM
.WORD MULRR
.WORD DIVRR

L02104: .WORD 0

L02106: .WORD 0

TCURR: .WORD 0

TMAX: .WORD 2

TCMD: .WORD 0

SV100: .WORD 0
SV102: .WORD 0

CRET: RETURN

CMDTBL:
LET R1 := R1 + R0

LET R1 := R1 + @R0

LET R0 := R0 * R0

LET R2 := R2 / R0

END SPEED

.END START


- - - Добавлено - - -


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

Manwe
19.05.2020, 14:45
Кстати, мне вполне хватает подсветки синтаксиса для .MAC файлов в FAR-еМне в середине 90-ых вполне хватало отладчика – писал программы прямо в памяти БК. Никакой подсветки синтаксиса. Зато не надо ждать пока скомпилируется.
В XXI веке «мы стали более лучше одеваться» и грех отказываться от достижений современности. Вряд ли FAR подсвечивает синтаксические ошибки в процессе написания и вряд ли автоматически переходит на строку с ошибкой по указанию компилятора. Ну и эти ужасные 6-буквенные имена из Macro-11 – бррр...

S_V_B
19.05.2020, 15:05
Вопрос к hobot, S_V_B, Hunta: если добавятся макросы и obj
Я не адепт MACRO-11 скорее наоборот. Мне хватит основных макросов для работы с файлами (или хотя бы гибкой возможности их создавать из ЕМТов).
Инклюдов вполне хватит поскольку все исходники велосипедов рожаю в муках сам, есть конечно интересные штуки в SYSLIB, но если использовать RT-11 только как средство загрузки сохранения той же игрушки - можно и обойтись своими вело-грабляими :)
Больше всего убивают метки типа "АБЫРВАЛГ", в большом проектах не хватит воображения описать все сущности.
Главное чтобы компилил рабочий SAV (желательно с секциями, а не абсолютный).

- - - Добавлено - - -

Олдскульные системщики конечно люто воспротивятся такому подходу, но это их проблемы. Для написания демок и игрушек тем более для УКНЦ (имхо) MACRO-11 в чистом виде абсолютно непригоден. Для драйверов и прочих терминальных свистулек, да ради бога :)

Hunta
19.05.2020, 15:09
подсвечивает синтаксические ошибки в процессе написания и вряд ли автоматически переходит на строку с ошибкой по указанию компилятора
А синтаксис и внутренности макросов учитываются? А если ошибка будет на команде, которую сгенерировал макрос - куда он перейдёт автоматически - команды в тексте не будет. А если забыть написать END, будет ахеренное количество ошибок, причём первая будет на макросе MODULE - он сам найдёт пропущенный END? А если вместо #LABEL, я ошибусь и напишу LABEL - он это поймёт?

А подсветка неправильно написанных команд PDP-11 мне не особо нужна - я их больше 35 лет помню.

В общем, я пока плюсов не вижу. Особенно учитывая отсутствие условной компиляции.


эти ужасные 6-буквенные имена из Macro-11
Ничего в них ужасного - время такое было. В ассемблере VAX-а (где ресурсов поболее) сделали уже более длинные и не только символы RADIX

- - - Добавлено - - -


не хватит воображения
Да да, у современных программистов с этим напряжёнка

S_V_B
19.05.2020, 15:18
Ничего в них ужасного - время такое было.

Да да, у современных программистов с этим напряжёнка
Если бы мы были "современными" то сороду бы не жрали эти кактусы :)
Hunta в своем амплуа- мегакульный-седобородый гуру который из вредности в 21м веке считает на логарифмической линейке :)
Для драйвера в 3блока короткие метки может и приемлемы, да и что в драйвере "воображать" тупо следуй вороху пожелтевшей документации - получишь результат:)

Manwe
19.05.2020, 15:21
Больше всего убивают метки типа "АБЫРВАЛГ"Такую метку нельзя – слишком длинная, на 2 символа больше максимально допустимого! ;)


Главное чтобы компилил рабочий SAV (желательно с секциями, а не абсолютный).Абсолютный. На БК в ОС БК-11 другой и не нужен, вроде. Или нужен?

Олдскульные системщики конечно люто воспротивятся такому подходу, но это их проблемы. Для написания демок и игрушек тем более для УКНЦ (имхо) MACRO-11 в чистом виде абсолютно непригоден. Для драйверов и прочих терминальных свистулек, да ради бога :)Я так понимаю, олдскульные системные программисты и не ищут инструментов, которые ускорят их работу (даже если такие появятся). Сила привычки выше, слишком накладно переучиваться.

Hunta
19.05.2020, 15:26
да и что в драйвере "воображать" тупо следуй вороху пожелтевшей документации - получишь результат
Сколько драйверов написал?


не ищут инструментов, которые ускорят их работу
Приведённая выше программа оттранслируется? Если я добавлю в неё вызовы п/п из SYSLIB и из пары моих библиотек - собрать смогу? Когда ответы на эти вопросы будут - да - тогда и поговорим

- - - Добавлено - - -


Абсолютный. На БК в ОС БК-11 другой и не нужен, вроде. Или нужен?
Ну вот приговор и понятен.

S_V_B
19.05.2020, 15:27
На БК в ОС БК-11 другой и не нужен
Дело не в нужности-ненужности, а в удобстве, дабы располагать данные в тексте где они осмысленны и не заботиться о переносе их в другое место.

Hunta
19.05.2020, 15:28
считает на логарифмической линейке
И успешно программирует на C# и JS.
И да - каждые пять минут не кричу - "А напишите ща меня мою хотелку". Так же успешно сам могу что угодно написать.
Завтра инет накроется - сколько ты сам сможешь написать, без гугла и группы "поддержки"?


Дело не в нужности-ненужности

не нужен

S_V_B
19.05.2020, 15:33
Сколько драйверов написал?
Ну вот - это уже пацанский разговор :)
Для RT-11 - НОЛЬ и не собираюсь (как ты говоришь- "не интересует") :)

- - - Добавлено - - -


И да - каждые пять минут не кричу - "А напишите ща меня мою хотелку". Так же успешно сам могу что угодно написать.
Только все твои хотелки какие-то странные и скучные:)

"А напишите ща меня мою хотелку"
И все дружно кинулись писать ха-ха-ха.. ты в первых рядах...
Вот поэтому все так скучно и убого (за 30 лет никто не сделал - значит не нужно, тоже аргумент) Ж)

Hunta
19.05.2020, 15:35
НОЛЬ и не собираюсь
Тогда не тебе и говорить

да и что в драйвере "воображать" тупо следуй вороху пожелтевшей документации - получишь результат
Да и читать ты доку не умеешь, судя по постоянным вопросам в теме

- - - Добавлено - - -


Только все твои хотелки какие-то странные и скучные
Твои тоже


И все дружно кинулись писать ха-ха-ха..
А с какого перепуга ты решил, что все бросятся? У каждого свои интересы и на чужие - чихать

S_V_B
19.05.2020, 15:44
Твои тоже
Поинтересней твоих бесконеxных-километровых-выкладок непонятно для кого :)
Напиши что-нибудь внятное с графикой и звуком... тогда посмотрим чей длинней :)
А то велика радость 4CFки, что там хранить-то будешь??? Символьные тетрисы :)

Hunta
19.05.2020, 15:52
Напиши что-нибудь внятное с графикой и звуком
Плата на подходе. Как будет у меня - тогда и займусь.


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


Поинтересней твоих бесконеxных-километровых-выкладок непонятно для кого
Да ты никак их читаешь? Вот - один нашёлся - для кого.

Manwe
19.05.2020, 15:54
А синтаксис и внутренности макросов учитываются? А если ошибка будет на команде, которую сгенерировал макрос - куда он перейдёт автоматически - команды в тексте не будет. А если забыть написать END, будет ахеренное количество ошибок, причём первая будет на макросе MODULE - он сам найдёт пропущенный END? А если вместо #LABEL, я ошибусь и напишу LABEL - он это поймёт?При ошибке компиляции Sublime не меняет контекст, то есть не перескакивает на ошибку автоматически (и это правильно с позиции UX). Внизу экрана пишется в каком файле, в какой строке, какая ошибка. Но можно не читать, а просто нажать F4. Тогда текст проматывается на ошибку (как показано в видео). Если ошибка в include-файле, то он открывается в новом табе и уже там курсор устанавливается на место ошибки. Описание ошибки также даётся подсказкой в тексте программы.


А подсветка неправильно написанных команд PDP-11 мне не особо нужна - я их больше 35 лет помню.Проверка синтаксиса на лету полезна для другого: например, когда ты пишешь арифметическое выражение с кучей скобок.


В общем, я пока плюсов не вижу. Особенно учитывая отсутствие условной компиляции.А если появится, забросишь FAR и Macro-11? Перейдёшь на Sublime Text + PDPy11?

Hunta
19.05.2020, 16:02
А если появится, забросишь FAR и Macro-11?
Если будет ВСЁ, что мне нужно - по крайне мере - попробую.

А если появится, забросишь FAR и Macro-11?
А эти две программы (Sublime Text + PDPy11) уже умеют работать в RT и в RSX?

- - - Добавлено - - -


в какой строке, какая ошибка.


А если ошибка будет на команде, которую сгенерировал макрос - куда он перейдёт ... - команды c ошибкой в тексте не будет.

А с этим как?

И кстати, вдогонку. Помимо макроса и условной компиляции, в MACRO-11 есть ещё куча директив, в частности, по управлению - что будет в листинге. Это позволяет получать, например, такое:




SPEED - SPEED program MACRO V05.06R Monday 18-May-20 Page 11


3
4 000000 MODULE NAME=<SPEED>, REL=<SP>, VER=<01>, COMM=<SPEED program>
000000 .PSECT $CODE$, I, RO
000000 .PSECT $ASCII, D, RO
000000 .PSECT $PDATA, D, RO
000000 .PSECT $IDATA, D, RW
000000 .PSECT .99997, D, RW
000000 .PSECT .99998, D, RW
000000 .PSECT .99999, D, RW
.SAVE
000000 .PSECT .99998, D, RW
000000 .RESTORE
5
6 000000 FROM SYSMAC IMPORT .EXIT
;
; импорт из модуля <SYSMAC>
;
.MCALL .EXIT
7
8 001750 BLK.SZ =: 1000.
9
10 000000 $CODE
000000 .PSECT $CODE$, I, RO
11
12 000000 PROCEDURE START
000000 .PSECT $CODE$, I, RO
000000 START:
13 000000 BEGIN
000000 .PSECT $CODE$, I, RO
14 000000 LET TCURR := #0
000000 005067 000354' CLR TCURR
15
16 000004 LET TMAX := #4
000004 012767 000004 000356' MOV #4, TMAX
17
18 000012 LET R5 := @#V.TR10
000012 013705 000010 MOV @#V.TR10, R5
19
20 000016 LET @#V.TR10 := #CHKEIS
000016 012737 000336' 000010 MOV #CHKEIS, @#V.TR10
21 000024 LET R0 := R0 / R0
000024 071000 DIV R0, R0
22
23 000026 LET @#V.TR10 := R5
000026 010537 000010 MOV R5, @#V.TR10
24
25 000032 106427 000200 MTPS #PR4
26
27 000036 LET SV100 := @#V.LTC,
000036 013767 000100 000362' MOV @#V.LTC, SV100
28 000044 LET SV102 := @#V.LTC+2
000044 013767 000102 000364' MOV @#V.LTC+2, SV102
29
30 000052 $SSHOW #MSPEED
000052 012701 000004' MOV #MSPEED, R1
31
32 000062 $GOTO PREP
SPEED - SPEED program MACRO V05.06R Monday 18-May-20 Page 11-1


33 000062 END START
34
35 000062 PROCEDURE PREP
000062 .PSECT $CODE$, I, RO
000062 PREP:
36 000062 BEGIN
000062 .PSECT $CODE$, I, RO
37
38 000062 LET R0 := TCURR + R0
000062 016700 000354' MOV TCURR, R0
000066 060000 ADD R0, R0
39
40 000070 LET R1 := R0
000070 010001 MOV R0, R1
41
42 000072 LET R0 := R0 + #CMDTBL
000072 062700 000370' ADD #CMDTBL, R0
43 000076 LET @#TCMD := (R0)
000076 011037 000360' MOV (R0), @#TCMD
44
45 000102 LET R1 := R1 + #CPTBLE
000102 062701 000340' ADD #CPTBLE, R1
46 000106 LET R1 := (R1)
000106 011101 MOV (R1), R1
47
48 000110 LET R2 := #3000
000110 012702 003000 MOV #3000, R2
49
50 000114 LET L02106 := R2
000114 010267 000352' MOV R2, L02106
51 000120 LET L02104 := R2
000120 010267 000350' MOV R2, L02104
52
53 000124 LET L02106 := L02106 + #BLK.SZ*2
000124 062767 003720 000352' ADD #BLK.SZ*2, L02106
54
55 000132 REPEAT
000132 1001$:
56
57 000132 LET (R2)+ := TCMD
000132 016722 000360' MOV TCMD, (R2)+
58
59 000136 UNTIL L02106 EQ R2
000136 026702 000352' CMP L02106, R2
000142 001373 BNE 1001$
000144 1002$:
60
61 000144 LET (R2) := CRET
000144 016712 000366' MOV CRET, (R2)
62
63 000150 LET R2 := #100.
000150 012702 000144 MOV #100., R2
64 000154 LET R3 := #0
000154 005003 CLR R3
65
66 000156 $SSHOW
67
(дальше вырезано)


А такое будет доступно. А редактор в варианте листинга, когда вызов макроса в листинг не выводится, а сгенерённые команды - да - куда будет переходить на ошибку?

Manwe
19.05.2020, 16:31
А эти две программы (Sublime Text + PDPy11) уже умеют работать в RT и в RSX?Sublime Text работает в Linux, MacOS, Windows. PDPy11 – в любой системе, где есть Python 2 или 3. В общем, спектр систем шире, чем у FAR.

- - - Добавлено - - -


А с этим как?Так макросов пока нет в PDPy11. Если появятся, то принципиальных отличий от обычных инклюдов не будет.

- - - Добавлено - - -


А такое будет доступно? А редактор в варианте листинга, когда вызов макроса в листинг не выводится, а сгенерённые команды - да - куда будет переходить на ошибку?Была идея выводить в файл .lst не только адреса и метки, но и мнемоники ассемблера. Это можно добавить. Управляться будет директивой в тексте программы.
Если что-то не выводится в листинг – для PDPy11 это не проблема. Он ошибки не в листингах ищет, а в файлах .mac

Hunta
19.05.2020, 17:01
Sublime Text работает в Linux, MacOS, Windows.
Ещё раз. Они в RT-11 и RSX-11 работают? (вопрос риторический). Потому как я часто сижу в целевой системе. Ошибки в системных программах в эмуляторе часто не отладишь. И мелкие (а часто и средние) ошибки мне быстрее поправить там, благо есть программа, которая по идеям опередила примерно на год (скорее больше) первую версию Norton Commander, так что (к сожалению, пока только) в RSX у меня даже аналог FAR-а есть.


В общем, спектр систем шире
Для меня это фиолетово. То есть ни плюс ни минус.


принципиальных отличий от обычных инклюдов не будет.
Макросы в MACRO-11 - это далеко не инклюды.


Если что-то не выводится в листинг – для PDPy11 это не проблема. Он ошибки не в листингах ищет, а в файлах .mac
Ещё раз. Как будет обрабатываться и находится ошибка, возникающая в коде, который генерирует макрос. Его в .mac файле - не будет, так что у меня это мизерный сценарий. Основной - RSX.

Как подведение итогов. Судя по тому, что я успел почитать - тем, кто пользуется этой связки и макросы и условная компиляция достаточно слабо нужны. Значит, их включение (в полном объёме!) - под вопросом. Я их использую БОЛЕЕ ЧЕМ АКТИВНО. Не говоря уже о других возможностях MACRO-11+(LINK-11 | TKB). Так что - сильно сомнительно, что я когда нибудь на эту пару перейду - плюсов даже в перспективе не видно.

- - - Добавлено - - -

Ну и ещё вдогонку - в RSX свой формат выполняемых файлов. Я смогу сразу получить его, ибо абсолютный формат (да и то сильно условно) мне (по крайне мере пока) нужен только для одного - загнать в синтезируемое ОЗУ для тестирования синтезированного разного в FPGA.

- - - Добавлено - - -


Проверка синтаксиса на лету полезна для другого: например, когда ты пишешь арифметическое выражение с кучей скобок.
И кстати о птичках - FAR это отлично делает (кстати, как сами команды PDP), так что..

Manwe
19.05.2020, 19:00
Ещё раз. Они в RT-11 и RSX-11 работают? (вопрос риторический). Потому как я часто сижу в целевой системе. Ошибки в системных программах в эмуляторе часто не отладишь. И мелкие (а часто и средние) ошибки мне быстрее поправить тамПонятно, значит это было сказано без практического смысла, а лишь с целью выплеснуть негатив в пространство:

Ничего он пока не стоит. Основной плюс MACRO-11 - это условная компиляции и макросы. Что то мне подсказывает, что и простейшая моя программа, например - восстановленный текст SPEED не пройдёт в нём компиляцию. А ещё возникает вопрос - а к результату компиляции подцепить стандартные OBJ можно? Или этот компилятор - вещь в себе?
Кстати, риторические вопросы в беседе – признак пассивной агрессии.

Hunta
19.05.2020, 20:07
практического смысла и ценности в данной поделки для меня сейчас ноль.


с целью выплеснуть негатив в пространство:
Там его не на что ещё выплёскивать. Если она для вас удобна - используйте, кто запрещает.


Кстати, риторические вопросы в беседе – признак пассивной агрессии.
Меньше книжек надо читать психологов - ни хрена они в работе мозга они не понимают. Так что и эта ваша мысль - мимо.

Manwe
19.05.2020, 21:56
Сейчас взял исходник своей демки «Fractal Blur», дописал в начале директиву make_sav, нажатием Ctrl+B скомпилировал под RT-11. Проверил в ОС БК-11 4.1 – работает. Выходит, с PDPy11 можно легко и просто писать демки и игры для RT-11.

Только вот хотел спросить у знатоков RT-11: как принято выделять память под экран? Нужно ли вообще это делать? Вопрос касается и БК, и УКНЦ.

nzeemin
19.05.2020, 23:34
Сейчас взял исходник своей демки «Fractal Blur», дописал в начале директиву make_sav, нажатием Ctrl+B скомпилировал под RT-11. Проверил в ОС БК-11 4.1 – работает. Выходит, с PDPy11 можно легко и просто писать демки и игры для RT-11.
Если не линковать с другими объектными модулями и библиотеками, если не использовать оверлеи.
А, например, системная библиотека (обращения к RT-11) используется довольно часто.
Но это конечно от назначения программы зависит, небольшие игрушки/демки можно писать и без обращений к системе и без оверлеев.


Только вот хотел спросить у знатоков RT-11: как принято выделять память под экран? Нужно ли вообще это делать? Вопрос касается и БК, и УКНЦ.
На УКНЦ нет смысла выделять память под экран, под него имеются три плана памяти, в сумме 96 КБ, на ЦП доступны два плана из трёх через регистры, на ПП доступно всё.

hobot
19.05.2020, 23:39
Вопрос к hobot, S_V_B, Hunta: если добавятся макросы и obj – вы перейдёте на связку PDPy11 + Sublime Text?
я не профессионал как SVB Хунта или Вы ! Моё хобби настальгическое паскальство+макро11 в нативной среде.
6 символов наше всё !!! ) 6.3 имена файлов, а RT-11 любимая ОСЬ!!!
Под Windows я паскалю в среде Дельфи , если приспичит.
Под MS DOS в турбопаскале...
Но RT-11 и OMSI Pascal + MACRO11 = это лучшее из всего перечисленного по многим причинам - для меня.

Никакие кросс средства лично меня не интересуют вообще.
Исходники набиваю в Нысе или блокноте.





а в чём печаль, если игра или демка запускается на любой системе или даже без системы?
я не могу заставить вас увидеть это моими глазами. Но!!! Отказ от поддержки RT-11 и перенос проектов на магн.ленту я не поддержу ни в коем случае.
Это не моё. Это мимо меня однозначно.

Manwe
20.05.2020, 09:01
Никакие кросс средства лично меня не интересуют вообще. Исходники набиваю в Нысе или блокноте.Блокнот – это уже кросс-средство :)


я не могу заставить вас увидеть это моими глазами. Но!!! Отказ от поддержки RT-11 и перенос проектов на магн.ленту я не поддержу ни в коем случае.Где же Вы увидели «отказ»? Я пишу в исходнике:
make_sav
make_bin
make_wav
м получаю после компиляции 3 файла: для RT-11, для MKDOS, ANDOS и Монитора в эмуляторе, для загрузки с магнитофона на реальном железе. Никакого «отказа», все случаи покрыты.

S_V_B
20.05.2020, 09:03
небольшие игрушки/демки можно писать и без обращений к системе и без оверлеев.
Да можно и большие. Тем более "УКНЦ - вещь в себе" и RT-11 не сильно уперлась.
Без чего из SYSLIB нельзя обойтись при написании игры любого размера?

Manwe
20.05.2020, 09:04
небольшие игрушки/демки можно писать и без обращений к системе и без оверлеев.Ну да, у меня пока так. Оверлеи могут понадобиться разве то для игры Zork с 150 kb текстов.


На УКНЦ нет смысла выделять память под экран, под него имеются три плана памяти, в сумме 96 КБ, на ЦП доступны два плана из трёх через регистры, на ПП доступно всё.Вопрос не совсем про это. Если я хочу, чтобы после выхода программа корректно вернулась в RT-11, и ничего не прибила во время работы – как выделять память? Вдруг система хранит что-то в тех самых 96 kb, которые я хочу использовать под экран?

S_V_B
20.05.2020, 09:10
Если я хочу, чтобы после выхода программа корректно вернулась в RT-11, и ничего не прибила во время работы – как выделять память? Вдруг система хранит что-то в тех самых 96 kb, которые я хочу использовать под экран?
Экран это отдельное адресное пространство с регистровым (не прямым доступом) ничего ты не испортишь.

nzeemin
20.05.2020, 12:42
Вопрос не совсем про это. Если я хочу, чтобы после выхода программа корректно вернулась в RT-11, и ничего не прибила во время работы – как выделять память? Вдруг система хранит что-то в тех самых 96 kb, которые я хочу использовать под экран?

Система там ничего не хранит, это просто экран.
Перед выходом хорошо бы восстановить стандартный режим экрана и цвета, очистить экран - display list вернётся в дефолтное состояние.
Делается это передачей из ЦП в ПП последовательности ESC-символов.

S_V_B
20.05.2020, 14:23
Мануал по SYSLIB:
http://www.bitsavers.org/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PD6LA-TC_RT-11_System_Macro_Library_Manual_Aug91.pdf
Обрати внимание на описание EMT (т.е. все можно сделать с помощью их).

Самый простой и нужный EMT 350 (макрос .EXIT) - выход из программы пользователя :)

Manwe
20.05.2020, 16:06
Система там ничего не хранит, это просто экран. Перед выходом хорошо бы восстановить стандартный режим экрана и цвета, очистить экран - display list вернётся в дефолтное состояние. Делается это передачей из ЦП в ПП последовательности ESC-символов.Понял, спасибо

- - - Добавлено - - -


Мануал по SYSLIB:
http://www.bitsavers.org/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PD6LA-TC_RT-11_System_Macro_Library_Manual_Aug91.pdf
Обрати внимание на описание EMT (т.е. все можно сделать с помощью их). Самый простой и нужный EMT 350 (макрос .EXIT) - выход из программы пользователя :)Спасибо. Есть описание SYSLIB на русском даже: http://gid.pdp-11.ru/books/00008-01.33.01-1.html

Правда, из него у меня сложилось впечатление, что обычная (не резидентная) программа пользователя не обязана просить у системы выделить ей свободную память. Вместо этого можно просто в заголовке .sav-файла указать верхний адрес памяти, который превышает реальный размер программы. И в этом дополнительном месте делать что угодно (например, генерировать таблицы, хранить промежуточные результаты и т.п.)

S_V_B
20.05.2020, 16:43
Ничего не нужно выделять (ну конечно создавай массивы переменные и др.. ), главное чтобы твоя программа на момент запуска влезла в память (все что нужно уже загружено до тебя) в противном случае тебе сообщат.
Хуже дела с ПП там как раз все динамически происходит (выделять-освобождать) и поэтому все твои процедуры должны быть перемещаемыми.
Но к RT-11 это не относится.
В заголовке конечно много интересного (сильно не копал) например битовые карты распределения памяти, но по моему это относится к более старшим версиям (многозадачным и прочим наворотам) в SJ нужно нет не знаю. Короче нужно разбираться. Что будет достаточно для наших гейм-демомэйкерским потребностям на том и остановиться.

Manwe
20.05.2020, 17:03
Битовая карта нужна, без неё ОС БК-11 не запускает программу.
Идея в том, что я не хочу хранить в конце программы кучу нулей (речь идёт о десятке килобайт), которые потом займу под всякие буферы и переменные. А функций выделения памяти в программных запросах RT-11 (https://archive.org/details/h42_DEC_RT-11_System_Reference_Manual/page/n267/mode/2up) не обнаружено. Поэтому хочу просто указать побольше конечный адрес в заголовке .sav-файла. Смотрел игры под ОС БК-11 («Кот рыболов» и тому подобное) – в них верхний адрес памяти слегка превышает реальную длину программы. Видимо, так и нужно делать. Странно, что в явном виде это не описано в формате .sav-файлов (а следовало бы описать, ведь там два способа указания размера программы: битовой картой по блокам 512 байт каждый и 16-битным числом).

S_V_B
20.05.2020, 17:10
Возможно - пока не попробуешь не узнаешь ;)
Наверняка можно узнать верхний адрес рантайм при запуске. Пока не озадачивался написанием 40b демо :)

Manwe
20.05.2020, 20:25
Возможно - пока не попробуешь не узнаешь ;)
Наверняка можно узнать верхний адрес рантайм при запуске. Пока не озадачивался написанием 40b демо :)По идее, ещё на этапе загрузки sav-файла система должна написать «ваша программа не умещается в память». По крайней мере, все данные для такого вывода у системы есть.

hobot
20.05.2020, 20:39
Manwe, корректно вернуться? )))
.EXIT


Проверил в ОС БК-11 4.1 – работает.
теперь регистры видео переправить и будет УК-НЦ вариант.

Немного не по теме, но вот научный совет таких спецов как участники беседы + AFZ + возможно кто то ещё примкнул бы
и мог бы повыдёргивать оставшиеся игрушки с ИТО игропакетов !!! Внимание - рыцарь не ломанный (без вечной жизни как в пакете)
уже есть, далее - существ. два варианта Арканоид с вечными попытками и без.
Что бы играть в них с любого девайса, а не только с дискет. с AZ контр. УК-НЦ например.

- - - Добавлено - - -


По идее, ещё на этапе загрузки sav-файла система должна написать «ваша программа не умещается в память». По крайней мере, все данные для такого вывода у системы есть. так и есть. RT-11 всегда на твоей стороне ;-) Маленькая и шустрая, с 5-ой версии это просто сказка, а не ОСЬ )))

Manwe
20.05.2020, 21:18
Может, на УКНЦ она и шустрая. А на БК 0011 грузится долго :(

hobot
20.05.2020, 22:00
Может, на УКНЦ она и шустрая. А на БК 0011 грузится долго
да не особо долго, но в целом конечно медленно, улучшить ситуацию можно только победой над
заведомо "узкими" местами. Я в своё время и не мучал свою БК0010-01, а просто пересел на УК-НЦ,
теперь, когда Никита перетащил с БК Лоде Руннер, --- УК-НЦ самый норм. выбор для домашнего PDP11
под управлением RT-11, все "левые"(АНДОС и проч. + марсианка) ОСИ для БК для меня ересь и предательство, так же как и порты ДОС игрушек никакого "огонька" для меня не жгут )))

Но это я вот такой. Бывают и другие мнения.

- - - Добавлено - - -


А на БК 0011 грузится долго

7 секунд в эмуляторе с дискеты - а на реале никогда не юзал.

S_V_B
21.05.2020, 06:13
так же как и порты ДОС игрушек никакого "огонька" для меня не жгут )))
Не знаю даже как тебе сказать, чтобы не травмировать, Lode Runner - тоже порт (вышедший почти на всех платформах в том числе и DOS в 1984г) :)

hobot
21.05.2020, 19:47
Не знаю даже как тебе сказать, чтобы не травмировать
Ты меня травмируешь совершенно по другому поводу, а именно , что версия Лоде Руннера, о которой идёт речь = это был эксклюзив для БК.
Благодаря Никите, теперь есть трилогия для УК-НЦ под ОС RT-11 ;-)
И закон Лоде Руннера (https://www.old-games.ru/forum/threads/amiga.22102/page-62#post-1610451) мне хорошо известен, благодарю.

S_V_B
21.05.2020, 20:10
что версия Лоде Руннера, о которой идёт речь = это был эксклюзив для БК.
Любой порт - эксклюзив (с учетом особенностей машины). Я к тому что ты не против "эксклюзивных портов". :)

hobot
21.05.2020, 21:36
Любой порт - эксклюзив (с учетом особенностей машины). Я к тому что ты не против "эксклюзивных портов". :)
по первому пункту не согласен, по второму не согласен частично.
Игра от Маркова не порт! Это именно версия была только на БК (если ошибаюсь дайте ссылку) до тех пор пока не вмешался Никита и эту ситуацию не улучшил, а тот вариант , который ты подразумеваешь, на БК его вовсе нет, а на УК-НЦ входит в игропакет 1990 года от ИТО Москва "Игрушка-1".

Пример эксклюзивного (в моём понимании \ терминологии) порта вот = Лабиринты Маркова, спрайтики изменены, вариант от Зеленоградцев для КЦГД
https://forum.maxiol.com/index.php?showtopic=4786# - там надо листать вниз будут фотки с заставкой игры...поиграть можно только на живой или в эмуляторе Титуса.

Manwe
23.05.2020, 12:15
Провёл эксперимент: указал в заголовке sav-файла последний адрес программы 20000. Хотя, сама программа занимает адреса с 1000 по 2000. Запустилось без проблем. Видимо, это и есть способ выделить дополнительные 16000 байт памяти под временные данные программы.


7 секунд в эмуляторе с дискеты - а на реале никогда не юзал.ОС БК-11 в эмуляторе БК грузится у меня 26 секунд до появления приглашения ввода даты. Если сразу нажать Ввод и ждать пока загрузится оболочка типа Norton Commander – 38 секунд.

hobot
23.05.2020, 16:40
ОС БК-11 в эмуляторе БК грузится у меня 26 секунд до появления приглашения ввода даты. Если сразу нажать Ввод и ждать пока загрузится оболочка типа Norton Commander – 38 секунд.
все оболочки под RT-11 типа Нортон, на самом деле фигня и только мешаются, и тормозят работу...
,а время загрузки сильно зависит от стартового файла
к тому же я не пользуюсь эмулятором gid

Maxvel
23.05.2020, 17:03
ОС БК-11 в эмуляторе БК грузится у меня 26 секунд до появления приглашения ввода даты. Если сразу нажать Ввод и ждать пока загрузится оболочка типа Norton Commander – 38 секунд.

Manwe оно и на реальной машине с реальным дисководом грузится где то за 40 секунд.

S_V_B
29.05.2020, 11:03
Пробую перетащить свой проект написанный под MACRO-11 на pdpy11 с заменой макросов не ЕМТы - сразу столкнулся с мелкими проблемами:
1. не понимает досовскую кодировку даже в комментах - валится с сообщением неизвестный чарсет, насколько я понял.
поправка: не понимает русские комменты.
поправка: На другом компе не ругается на комменты..


File "C:\Users\Stepan\AppData\Local\Programs\Python\Pyth on37-32\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_t able)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 1431: character maps to <undefined>
2. не понимает RETURN только RET
3. не понимает #^B1111000011010000 (вроде бы был разговор про двоичную запись)
4. не понимает <> скобки в выражениях #<2+2>
5. В инклюдах не видит переменные объявленные ниже. (компилирует в один проход?)
копаю дальше..

Простую программку скомпилировал и даже запустил.

Пробовал собрать игрушку (много инклюдов), после всех правок и надругательств (по перестановке местами инклюдов):
"Fatal Python error: Cannot recover from stack overflow."

В коде много структур такого типа:

SINFO:
.WORD INFO0, INFO1, INFO2, INFO3, INFO4, INFO5, INFO6, INFO7, INFO8, INFO9
.WORD INFO10, INFO11, INFO12, INFO13, INFO14, INFO15, INFO16, INFO17, INFO18, INFO19
.WORD INFO20, INFO21, INFO22, INFO23, INFO24, INFO25, INFO26, INFO27, INFO28, INFO29
.WORD INFO30, INFO31, INFO32, INFO33, INFO34, INFO35, INFO36, INFO37, INFO38, INFO39
.WORD INFO40, INFO41, INFO42, INFO43, INFO44, INFO45, INFO46, INFO47, INFO48, INFO49
.WORD INFO50, INFO51, INFO52, INFO53, INFO54, INFO55, INFO56, INFO57, INFO58, INFO59
.WORD INFO60, INFO61, INFO62, INFO63, INFO64, INFO65, INFO66, INFO67, INFO68, INFO69
.WORD INFO70, INFO71, INFO72, INFO73, INFO74, INFO75, INFO76, INFO77, INFO78, INFO79
.WORD INFO80, INFO81, INFO82, INFO83, INFO84, INFO85, INFO86, INFO87, INFO88, INFO89
.WORD INFO90

INFO0:
.BYTE 0, 0, 0, 0
.BYTE 1
.BYTE 45., 148., 104., 0, 0, 0
.BYTE 0
Может из-за этого ему стек бомбануло..
В принципе все эти метки нафиг не нужны просто в одном из проходов нужно адресами массивы заполнить, а в коде на них ссылок нет.
.EXTERN ALL - пытается все метки из инклюдов в "уме" удержать?

Manwe
30.05.2020, 21:42
1. не понимает досовскую кодировку даже в комментах - валится с сообщением неизвестный чарсет, насколько я понял.
поправка: не понимает русские комменты.
поправка: На другом компе не ругается на комменты..Да, есть такой косяк. Сохраняй в UTF-8. Русскоязычные текстовые строки (.ASCII, .ASCIZ) работают только при сохранении в кодировке KOI8-R и запуске компилятора на Python 2. Будем исправлять. Пока, к сожалению, так.


2. не понимает RETURN только RETХорошо, добавим.


3. не понимает #^B1111000011010000 (вроде бы был разговор про двоичную запись)#0bчисло.


4. не понимает <> скобки в выражениях #<2+2>Вроде как в математике используются круглые скобки :)


5. В инклюдах не видит переменные объявленные ниже. (компилирует в один проход?)
копаю дальше...
.EXTERN ALL - пытается все метки из инклюдов в "уме" удержать?Не очень понял ситуацию.
Ты в основной программе (назовём её main.mac) пишешь .include ”file.mac” и ниже этого объявляешь переменные типа Screen=40000 ?
Если да, и ты хочешь чтобы переменная Screen виделась внутри файла file.mac – пиши .extern all в файле main.mac (или .extern Screen).

hobot
30.05.2020, 22:31
Вроде как в математике используются круглые скобки
издевательство!
как вы демы на ассемблере пишите ???
у языка есть синтаксис - либо вы поддерживаете его - либо меняйте название !!!


#0bчисло.
warum? (https://youtu.be/xs7Ka2fExKU)

S_V_B
31.05.2020, 06:48
Вроде как в математике используются круглые скобки
Я это к тому, что есть куча исходников под MACRO-11 в которых нужно будет делать много мелких правок.
Если писать с нуля то без разницы конечно.


Не очень понял ситуацию.
Да все просто - если переменная объявлена ниже инклюда то в нем она не видна.
И если у тебя много инклюдов то и вставлять их нужно в порядке объявления переменных (меток) в них, что не очень удобно.


"Fatal Python error: Cannot recover from stack overflow."
В итоге когда исправил все синтаксические косяки - завалился стек при компиляции.. возможную причину я указал.

Manwe
31.05.2020, 09:27
у языка есть синтаксис - либо вы поддерживаете его - либо меняйте название !!!Не знал, что на БК были ассемблеры с поддержкой арифметики в угловых скобках. Всегда писали #Metka+2, а не #<Metka+2>. Но если действительно есть такой стандарт, можно добавить в PDPy11.

- - - Добавлено - - -


Да все просто - если переменная объявлена ниже инклюда то в нем она не видна.Всё равно непонятно. Давай на примере:
у тебя есть main.mac и в нём .include ”file1.mac” и .include ”file2.mac” (именно в таком порядке)
Ты объявил переменную в file2.mac, а хочешь использовать её в file1.mac
Но она не видится.
Так?


В итоге когда исправил все синтаксические косяки - завалился стек при компиляции.. возможную причину я указал.Python 3?
А у тебя там точно не получилось рекурсивных инклюдов?

S_V_B
31.05.2020, 10:42
Но она не видится.
Так?
Так.

Python 3?
А у тебя там точно не получилось рекурсивных инклюдов?
Python 3.
Рекурсивных инклюдов нет, инклюды только в main, в MAKRO11 все работает.

Hunta
31.05.2020, 11:35
Не знал, что на БК были ассемблеры с поддержкой арифметики в угловых скобках.
А это не на БК (на ней свет клином не сошёлся), это стандарт языка ассемблера MACRO-11


Всегда писали #Metka+2, а не #<Metka+2>
Не догадываешься, почему?


Я тебе больше скажу - у него (ассемблера MACRO-11) ещё и приоритета операций нет.

И ^B - это, по сути, указание операции, а не указание основания - ^C, например - это вычисление комплементарного (до 1) значения.

Ты доку по MACRO-11 не пробовал читать?

Manwe
31.05.2020, 11:57
Не догадываешься, почему?Если речь про арифметику с метками, то в PDPy11 в случае неоднозначного толкования нужно писать признак метки - двоеточие. Например, JMP 2:+2 означает переход на 2 байта после локальной метки 2:


Я тебе больше скажу - у него (ассемблера MACRO-11) ещё и приоритета операций нет.Сочувствую ему. В XXI веке нет смысла писать арифметические выражения без приоритетов. Человека без 30-летнего бэкграунда Macro-11 это обескураживает.


И ^B - это, по сути, указание операции, а не указание основания - ^C, например - это вычисление комплементарного (до 1) значения.У нас инверсия числа делается префиксом ~ как в других современных языках. Ну и запись двоичных и 16-ричных чисел тоже по стандартам современных языков.


А это не на БК (на ней свет клином не сошёлся), это стандарт языка ассемблера MACRO-11Как мы уже выяснили, ты всё равно с Macro-11 никуда не уйдёшь. Наш кроссассемблер задумывался для домашних компьютеров, а не для поддержки софта от DEC. В первую очередь PDPy11 для БК 0010 и 0011М. Во втору очередь - для УКНЦ. В третью - для Союз-Неона.


Ты доку по MACRO-11 не пробовал читать?Чтобы что? Чтобы сделать точный клон Macro-11, которым всё равно не станут пользоваться фанаты олдскульного софта от DEC?

gid
31.05.2020, 12:14
#0bчисло.
Сделайте поддержку обоих синтаксисов: 0b и ^b, это не трудно

Вроде как в математике используются круглые скобки
как с круглыми скобками собираетесь разрешать конфликт определения адресаций и арифметических выражений?
(a-b)/2(R1) вот такое как распарсить? А <a-b>/2(R1) (или <<a-b>/2>(R1) - более наглядно) - обычная индексная адресация. Правда не стоит копировать MACRO-11 и всё таки сделать скобки не декоративными, а реально определяющими приоритет операций.
Да и (R1) - это получается арифметическое выражение в скобках, относительная адресация 67, где R1 - имя метки, а не регистр. Или нужно делать сильно навороченный парсер с исключениями, который в результате превратится в монстра и всё равно не все исключения будет ловить.

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


Ты объявил переменную в file2.mac, а хочешь использовать её в file1.mac
Но она не видится.
Вот для этого нужно сделать первичный проход со сбором всех меток, синтаксический разбор операндов и определение адресаций в командах, а потом уже вторичный проход, где будут вычисляться арифметические выражения и подставляться значения меток в ветвления. Я как раз хочу сделать такую штуку в своём BKTurbo, но кажется проще переписать его с нуля, чем изменить.


Чтобы что? Чтобы сделать точный клон Macro-11, которым всё равно не станут пользоваться фанаты олдскульного софта от DEC?
Не, чтобы можно было скомпилировать макровский исходник хотя бы с чуть меньшими усилиями. Добавить макровский синтаксис задания систем счисления чисел, способ записи строк в .ascii - это необходимый минимум.

Hunta
31.05.2020, 12:29
то в PDPy11
Вообще, то разговор идёт про MACRO-11


Чтобы сделать точный клон Macro-11, которым всё равно не станут пользоваться фанаты олдскульного софта от DEC?
А что, уже есть чем пользоваться? Тебе S_V_B уже привёл пример - написанный сейчас исходник не компилируется у тебя.


Не, чтобы можно было скомпилировать макровский исходник хотя бы с чуть меньшими усилиями. Добавить макровский синтаксис задания систем счисления чисел, способ записи строк в .ascii - это необходимый минимум.
Человек делает кросс-ассемблер под себя. Пусть делает. А раз он (кросс-ассебмлер) не сможет обрабатывать старые исходники - он так и останется - только для него. Видимо он (человек) решил, что то, что удобно для него - будет удобно для всех. Пусть и остаётся со своим заблуждением


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

С моей точки зрения, чего действительно не хватает - это среды для написания исходника и без компиляции вообще. То есть пишешь исходник, а в фоне создаётся obj файл. Ну, если точнее - создаётся некая структура, из которой можно сделать obj файл тупым сохранением. И естественно - с полной поддержкой возможностей MACRO-11.

- - - Добавлено - - -


Добавить макровский синтаксис задания систем счисления чисел, способ записи строк в .ascii - это необходимый минимум.
Макросы и условная компиляция.

Manwe
31.05.2020, 12:54
Вообще, то разговор идёт про MACRO-11Вообще-то, нет.


Человек делает кросс-ассемблер под себя. Пусть делает. А раз он (кросс-ассебмлер) не сможет обрабатывать старые исходники - он так и останется - только для него. Видимо он (человек) решил, что то, что удобно для него - будет удобно для всех. Пусть и остаётся со своим заблуждениемКросс-ассемблер делается для БК-сообщества. Большая часть этих демок (http://www.pouet.net/prodlist.php?platform%5B0%5D=BK-0010%2F11M&order=release) написана на PDPy11. Люди его используют. Пожелания всегда приветствуются от тех, кто хочет попробовать PDPy11. Баг-репорт от S_V_B уже принят в работу.


Макросы и условная компиляция.Это нужно только тебе, а ты не станешь пользоваться PDPy11. Так что условная компиляция пока подождёт.

- - - Добавлено - - -


Сделайте поддержку обоих синтаксисов: 0b и ^b, это не трудноСогласен.


(a-b)/2(R1) вот такое как распарсить?Пока что приходится писать a/2-b/2(R1).


Правда не стоит копировать MACRO-11 и всё таки сделать скобки не декоративными, а реально определяющими приоритет операций.
Да и (R1) - это получается арифметическое выражение в скобкахПодумаем. Наблюдение из практики: сложные арифметические выражения чаще встречаются не в коде, а в задании констант. Там никаких регистров в скобках не бывает, поэтому до сих пор не сталкивался с ощущением путаницы.

Hunta
31.05.2020, 13:08
Это нужно только тебе, а ты не станешь пользоваться PDPy11. Так что условная компиляция пока подождёт.
Мне нужны макросы и условная компиляция. Они в PDPy11 есть? Нет. С какого тогда я должен его использовать?

Вообще-то, нет.

hobot
31.05.2020, 15:52
Не знал, что на БК были ассемблеры
что значит были? ) и почему во множественном числе???
Круглые скобки используются при адресации MOV (R2)+, -(SP)
<> - ДЛЯ выражений и ASCIIкодов


Ты объявил переменную в file2.mac, а хочешь использовать её в file1.mac
Но она не видится.
Так?
не могло программирование так деградировать, не верю )))

- - - Добавлено - - -


Чтобы сделать точный клон Macro-11, которым всё равно не станут пользоваться фанаты олдскульного софта от DEC?
наконец-то ! ты сам признал, что тратишь время на никому не нужный проект, поверь куча людей больше бы оценило оконный интерпритатор Вильнюс-Бейсика с УК-НЦ ROM или из исходников под\для Windows. Нативный Macro-11 не нужно клонировать, с ним (при желании) нужно просто работать в своё удовольствие, все средства для этого уже написаны, всё остальное ересь, дегенератство и упадничество. Дисциплины среди программистов никакой не стало ! Разбаловали вас.

Hunta
31.05.2020, 16:52
не могло программирование так деградировать, не верю )))
Причём здесь программирование? Оно каким было, таким и осталось. Деградировали люди.

S_V_B
31.05.2020, 17:14
не могло программирование так деградировать, не верю )))


наконец-то ! ты сам признал, что тратишь время на никому не нужный проект,
Зря вы так ей Богу.. человек хоть что-то делает, а вы сразу какашками кидаетесь :)
Вот ты Хобот много написал чтобы так говорить... остались еденицы которые могут хоть что-то сделать, а с такой поддержкой.. любое желание писать пропадает :(
Удобство разработки не значит лень, а значит сокращение затрат по времени и нервам.
То что мне необходимо я написал и если заработает то значит не только для себя Manwe делал.
Если gid сделает, будет еще лучше - всегда нужна альтернатива, а не дремучее ретроградство :)

Manwe
31.05.2020, 17:35
наконец-то ! ты сам признал, что тратишь время на никому не нужный проектЭтот проект не нужен только Hunta. А тем, кто реально программирует на БК, он нужен – я приводил список сколько всего люди сделали с помощью PDPy11.


поверь куча людей больше бы оценило оконный интерпритатор Вильнюс-Бейсика с УК-НЦ ROMЭта тема форума посвящена БК. Программирование для УКНЦ обсуждают в других ветках, и я там никому не предлагаю использовать PDPy11.



что значит были? ) и почему во множественном числе???
Круглые скобки используются при адресации MOV (R2)+, -(SP)
<> - ДЛЯ выражений и ASCIIкодовНа БК не так. Для ASCII используется слэш или кавычки.


Нативный Macro-11 не нужно клонировать, с ним (при желании) нужно просто работать в своё удовольствие, все средства для этого уже написаны, всё остальное ересь, дегенератство и упадничество. Дисциплины среди программистов никакой не стало ! Разбаловали вас.Ну и много наработали в Макро-11 для БК за последние годы? Хочется сравнить результаты с тем, что получено с помощью PDPy11.

S_V_B
31.05.2020, 17:41
Эта тема форума посвящена БК.
Извините это наверное за мной "группа поддержки" подтянулась :)

- - - Добавлено - - -

Я давно заметил что здесь все встречают почему-то в штыки :(

hobot
31.05.2020, 17:43
а вы сразу какашками кидаетесь
да ни в коем разе, просто ты так воспринял!
мне слишком нравится какие демки выжимает из БК Манвэ - это раз!
во вторых - у Манвэ так просто ничего не отобьёшь, я же просто своим мнением поделился т Манвэ думается воспринял это правильно.


а не дремучее ретроградство

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

в шапке главной объявлять всё глобальное в главном модуле - с каких пор это стало дремучим ретроградством )))

А про скобочки - назвался груздем = соблюдай синтаксис, а то что килобайты исходников с нормального Макро-11 переделывать под новодел???



будет еще лучше - всегда нужна альтернатива,
ага! именно вот такая #0^B ))) Ура! Как альтернативно !!! Переделывай\вставляй нолики во все МАКРО-11 исходники, альтернатива пришла!!!

Вот ты Хобот много написал чтобы так говорить
не слишком много, кое что есть даже опубликовано и в архиве...я не пишу на низком уровне :wink:
я паскалю+макро-11 - это Хобби для RT-11, под окошками дельфя, под досом турбопас )))
тебе чего прямых ссылок надо или прямой отчёт с исходниками по каждой программе ???

Manwe
31.05.2020, 17:46
Мне нужны макросы и условная компиляция. Они в PDPy11 есть? Нет. С какого тогда я должен его использовать?У меня хорошая память. А у Интернета ещё лучше. Ты говорил, что тебе нужен ассемблер для запуска на целевой системе RSX-11. Наш кроссассемблер никогда не планировался для запуска на БК, ДВК, УКНЦ, Электронике-60. Поэтому ты не будешь им пользоваться никогда. Вот твоя цитата с подтверждением:

Ещё раз. Они в RT-11 и RSX-11 работают? (вопрос риторический). Потому как я часто сижу в целевой системе. Ошибки в системных программах в эмуляторе часто не отладишь. И мелкие (а часто и средние) ошибки мне быстрее поправить там

S_V_B
31.05.2020, 17:47
ага! именно вот такая #0^B ))) Ура! Как альтернативно !!!
Сказали же что добавят.

Пожелания всегда приветствуются от тех, кто хочет попробовать PDPy11. Баг-репорт от S_V_B уже принят в работу.

Не, чтобы можно было скомпилировать макровский исходник хотя бы с чуть меньшими усилиями. Добавить макровский синтаксис задания систем счисления чисел, способ записи строк в .ascii - это необходимый минимум.

Manwe
31.05.2020, 17:49
Я давно заметил что здесь все встречают почему-то в штыки :(Увы, слава об этом форуме идёт впереди него. Слава о принятых здесь манерах. К сожалению.

hobot
31.05.2020, 18:00
Слава о принятых здесь манерах.
да причём тут манеры)))
эх, ребята, жаль, что именно вы так всё воспринимаете...
просто я никак не ожидал, что автор демо с японским зонтом не знает синтаксис МАКРО-11,
а SVB любую критику воспринимает крайне резко - вот это уже манера.

Вы притягиваете какой-то левак и называете нативное программирование нех.словами и говорите о манерах - это странно немного ИМХО?
Именно в нативной среде весь кайф, а иначе в чём???

S_V_B
31.05.2020, 18:03
а SVB любую критику воспринимает крайне резко - вот это уже манера.
Кроме критики должны быть разумные-конструктивные предложения :(


Именно в нативной среде весь кайф, а иначе в чём???
Напиши несколько тысяч строк в нативе.. потом сам начнешь нехорошими словами говорить :)

hobot
31.05.2020, 18:03
На БК не так. Для ASCII используется слэш или кавычки.
да хоть апострофы, вот для КОДОВ (!!!) только <>.

S_V_B
31.05.2020, 18:07
да хоть апострофы, вот для КОДОВ (!!!) только <>.
Хобот ты же зарекался спорить о программировании на низком уровне :)
Ну вот никакого конструктива от тебя нет.
Тебе эта тема должна быть глубоко фиолетова.

hobot
31.05.2020, 18:14
Кроме критики должны быть разымные-конструктивные предложения
если бы ты читал , а не огрызался, ты бы заметил, что я уже устал писать, что всё для удобной разработки уже написано, читай выше и похожих обсуждениях мои посты, ради смеха не пиши ответ , просто зайди на главную морду архива погляди правый фрэйм )


Напиши несколько тысяч строк в нативе.. потом сам начнешь нехорошими словами говорить
ты ошибешься! я то как раз от натива кайфую ) а сейчас у меня есть простой блокнот (хотя при умелом использовании НЫС
ничем не хуже!)

- - - Добавлено - - -

S_V_B, и мои посты - не надо воспринимать никак иначе кроме как дружеское общение на форуме, где все люди
заняты интересным, отдыхают, работают, консультируются, спорят (не без этого) - !!!

- - - Добавлено - - -


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

S_V_B
31.05.2020, 18:16
ты ошибешься! я то как раз от натива кайфую ) а сейчас у меня есть простой блокнот (хотя при умелом использовании НЫС
ничем не хуже!)
Вот когда напишешь что-нибудь объемное весь кайф уйдет :(


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

hobot
31.05.2020, 18:26
Вот когда напишешь что-нибудь объемное весь кайф уйдет
нда...понятно...как со стеной...

поверь я в нативе пишу с 89 года примерно и что то до сих пор по кайфу )))


Ты только и твердишь об этом
о чём я только и твержу? моя твоя глухонемой?
SVB пришли мне твой сорт, что там у вас "северян цены как в Москве" и может я начну понимать почему ты баг-репорты воспринимаешь как срачь,
а попытку показать, что всё пишется нормально в любом удобном тебе редакторе и при этом компилится нативными средствами - нужна альтернатива???

Hunta
31.05.2020, 18:35
У меня хорошая память. А у Интернета ещё лучше.
Вот у него сейчас и спросим


Основной плюс MACRO-11 - это условная компиляции и макросы. Что то мне подсказывает, что и простейшая моя программа, например - восстановленный текст SPEED не пройдёт в нём компиляцию. А ещё возникает вопрос - а к результату компиляции подцепить стандартные OBJ можно? Или этот компилятор - вещь в себе?


Я думал о том, чтобы добавить условную компиляцию в PDPy11 – собирать разные исполняемые файлы под БК 0010 и БК 0011, а также под разные операционные системы. Потом понял, что это тотальное зло


Приведённая выше программа оттранслируется? Если я добавлю в неё вызовы п/п из SYSLIB и из пары моих библиотек - собрать смогу? Когда ответы на эти вопросы будут - да - тогда и поговорим


Если будет ВСЁ, что мне нужно - по крайне мере - попробую.


Так макросов пока нет в PDPy11.


Как подведение итогов. Судя по тому, что я успел почитать - тем, кто пользуется этой связки и макросы и условная компиляция достаточно слабо нужны. Значит, их включение (в полном объёме!) - под вопросом. Я их использую БОЛЕЕ ЧЕМ АКТИВНО. Не говоря уже о других возможностях MACRO-11+(LINK-11 | TKB). Так что - сильно сомнительно, что я когда нибудь на эту пару перейду - плюсов даже в перспективе не видно.


Макросы и условная компиляция.


Кросс-ассемблер делается для БК-сообщества.


Это нужно только тебе, а ты не станешь пользоваться PDPy11. Так что условная компиляция пока подождёт.


А тем, кто реально программирует на БК, он нужен


Наш кроссассемблер никогда не планировался для запуска на БК, ДВК, УКНЦ, Электронике-60. Поэтому ты не будешь им пользоваться никогда. Вот твоя цитата с подтверждением:


я часто
Часто - это всегда?


в целевой системе
Целевая система у меня только RSX?

Ключевой момент:
Кросс-ассемблер делается для БК-сообщества.

И как повторное подведение итогов.

При текущем раскладе дел - я не буду даже пробовать PDPy11 - потому что даже простейшие мои программы он не оттранслирует - независимо от того - под какой целевой комп (БК-УКНЦ-ДВК) они будут написаны.

А учитывая

Кросс-ассемблер делается для БК-сообщества.
я не вижу смысла в переходе в принципе.

Конечно, в будущем возможно всё - и смена парадигмы в голове автора, но весь мой жизненный опыт подсказывает - ждать этого не стоит

S_V_B
31.05.2020, 18:46
о чём я только и твержу? моя твоя глухонемой?
SVB пришли мне твой сорт, что там у вас "северян цены как в Москве" и может я начну понимать почему ты баг-репорты воспринимаешь как срачь,
а попытку показать, что всё пишется нормально в любом удобном тебе редакторе и при этом компилится нативными средствами - нужна альтернатива???
У меня такое чувство, что ты всегда под чем-то :) Ты дано должен был понять, что люди здесь обсуждают тему как раз противоположную твоим убеждениям. И если обсуждают - значит им так нужно. Продлжай писать свои микро-вставки на Макро.. и не навязывай свое имхо.

- - - Добавлено - - -

Если скомпиллит мой исходник мне будет более чем достаточно.

hobot
31.05.2020, 19:10
> Потом понял, что это тотальное зло (это о нативе в целом!!!)
не постите вот такое никто вам слова не скажет, ольтирнативщёки )))

S_V_B
31.05.2020, 19:23
ольтирнативщёки )))
Вот скажи - ты хочешь чтобы для УКНЦ или БК было написано (в реальные сроки) что-то новое?
Или склоняешь людей (у которых есть работа, семья, теща, дача и куча других проблем) писать тысячи строк кода в "тетрадке в клеточку"?
Якобы по твоему мнению - это настоящий "кайф".
И при этом оскорбляешь их ленивыми, новомодными, туповато-деградировавшим недопрограммистами.
Тебе "такси или шашечки"..
Говорят же тебе люди которые "чуть-чуть" в этом понимают -- неудобно, ты опять про свое.

Manwe
31.05.2020, 19:43
Вы притягиваете какой-то левак и называете нативное программирование нех.словамиЯ не называл нативное программирование нехорошими словами. Для меня нативное программирование на БК 0010 - отладчик OS126000, я писал код сразу в памяти, тут же отлаживал, исправлял и сохранял на диск. Нативней только машинные коды.
Сейчас я притягиваю "левак" в виде достижений человечества за последние 30 лет. Надо сказать, что и в старые времена на Экситоне создавали софт для БК, притягивая левак - более мощные машины. Ничего страшного в этом не вижу.

- - - Добавлено - - -


Напиши несколько тысяч строк в нативе.. потом сам начнешь нехорошими словами говорить :)Автор "Принца Персии" для БК 0011 сейчас пишет нативно в эмуляторе. Но он только подправляет старый код. Написать такой объём кода с нуля в эмуляторе (а тем более на реальной БК с дребезгом клавиш) ни у кого нервов не хватит.

Hunta
31.05.2020, 19:53
и при этом компилится нативными средствами
Только потому, что нативные средства поддерживают ВСЕ возможности, которые мне нужны и поддерживают компиляцию СТАРЫХ ИСХОДНИКОВ, переписывать которые у меня нет никакого желания, особенно учитывая, что эти исходники - модули из операционной системы и системного софта. И если начинать их править под те возможности, которые предлагают на данном этапе своего развития альтернативные средства - загребёшься исправлять.

Будут альтернативы, которые МЕНЯ устроят - буду их использовать.

Как в своё время произошло с пакетом макросов DSMAC - да, пришлось привыкать и запоминать, зато скорость написания и понимания написанного возросло на порядок. Да и восстановление исходников сразу в текст, который использует эти макросы - позволяет на тот же порядок ускорить понимание логики работы кода. И вот альтернативы этим МАКРОСАМ для написания на MACRO-11 - я НЕ ВИЖУ.

TheGWBV
31.05.2020, 21:02
Вопрос к гуру: - "Сколько памяти под программу пользователя остаётся после загрузки ОС БК?"

hobot
31.05.2020, 21:26
Вопрос к гуру: - "Сколько памяти под программу пользователя остаётся после загрузки ОС БК?"

Очень здравствуйте!
Сразу после загрузки системы наберите команду SH ME
- драйвера не обяз. можно выгрузить, своп можно перенастроить...

TheGWBV
31.05.2020, 21:47
Очень здравствуйте!
Сразу после загрузки системы наберите команду SH ME
- драйвера не обяз. можно выгрузить, своп можно перенастроить...
Это ответ на вопрос: Как узнать сколько памяти осталось?
Но был задан иной вопрос :)

MM
01.06.2020, 05:24
Вопрос к гуру: - "Сколько памяти под программу пользователя остаётся после загрузки ОС БК?"

Для БК11М RT-11 SJ V5.02 из комплекта поставки 1990 г. ( I вариант ), и если повычищать с системного диска все "левые" дрова - в районе 32 Кбайт ( до ~~100000 ) адреса примерно. Но надо обратить внимание на SWAP.SYS и обстоятельства работы с ним ( ознакомиться с КД на ОС, примерно 1 толстая книжица ). Кратко - до 060000 адреса точно ( ~24 Кбайт ), дальше надо пошагово разобраться с типами системных вызовов ОС - что бы SWAP точно не пересекался с областью ввода-вывода программы пользователя - это очень кратко и поверхностно.
Т.е. программа пользователя свыше ~24 Кбайт должна сама позаботиться о себе - например, иметь собственные оверлеи ( блоки данных ), подгружаемые с диска ( если нужна 100% совместимость с Э-60/ДВК-2 ), или жонглировать страницами ОЗУ БКшки, или комбинированный вариант с ЭД/VM.SYS ( для 1801ВМ3 на ДВК ).

Т.е. ( кратко ) - сделать на БК11М программу длиной 40 Кбайт 1 шт. куском ( прямой последовательной адресации ) не выйдет, нужны подгружаемые части.

hobot
01.06.2020, 17:48
Но надо обратить внимание на SWAP.SYS и обстоятельства работы с ним
можно отменить, вот расположение в памяти монитора RMON как раз надо учитывать.
SE USR SWAP - будет свопить на дискету NOSWAP - будет работать с памятью (если ошибаюсь, пусть системщики уточнят).

https://pic.maxiol.com/thumbs2/1591022567.787615436.20200601143840211cr.gif (https://pic.maxiol.com/?v=1591022567.787615436.20200601143840211cr.gif&dp=2)
BKBTL в конфигурации БК11М+дисковод

- - - Добавлено - - -


притягивая левак - более мощные машины.
ДВК не левак, а неотъемлемая часть КУВТ86 как и школьная БКашенька! )


https://youtu.be/9BRqecDaYOc

http://pk-info.ru/infopk/dvk/aspcorp1.html

SuperMax
05.06.2020, 19:23
можно отменить, вот расположение в памяти монитора RMON как раз надо учитывать.
SE USR SWAP - будет свопить на дискету NOSWAP - будет работать с памятью (если ошибаюсь, пусть системщики уточнят).

как я помню была возможность свопить в оперативку на БК11/11М

hobot
05.06.2020, 22:41
SuperMax, я не спец по ОС БК, поскольку живую с дисководом машинку никогда не видел даже, кроме фоток и видео в сети.
У меня был классика БК0010-01 с кассетами и УК-НЦ. Я знаю, что это опция RT-11.

Manwe
06.12.2020, 18:08
Написал статью про то как запрограммировать управление от джойстика (а параллельно и от клавиатуры):
https://manwe.pdp-11.ru/?/programming/joystick

https://manwe.pdp-11.ru/articles/programming/mouse-joystick-elektronika.jpg

jerri
06.12.2020, 18:57
Написал статью про то как запрограммировать управление от джойстика (а параллельно и от клавиатуры):
https://manwe.pdp-11.ru/?/programming/joystick

А почему на нажатие кнопок на клавиатуре стоит приоритет?

Manwe
06.12.2020, 19:05
А почему на нажатие кнопок на клавиатуре стоит приоритет?По опыту игры на Nintendo 3DS и Switch заметил, что лучше нажимать отдельные клавиши управления для «влево, вправо, вверх, вниз», нежели пытаться придерживаться этих направлений джойстиком (аналоговым стиком). То есть если нужно двигаться строго вправо, то лучше кнопкой «вправо» на клавиатуре, чем джойстиком, который норовит соскочить на «вправо вниз» и «вправо вверх».

ivagor
18.02.2021, 17:02
Результатами работы новейших упаковщиков ZX0 и ZX1 теперь можно пользоваться и на pdp11 (1 (https://gitlab.com/ivagor/dezx0), 2 (https://gitlab.com/ivagor/dezx1)). Особенно приятно то, что мощные упаковщики сочетаются с компактными и сравнительно быстрыми распаковщиками. Если расположить на одной шкале еще и lzsa1/2, то:
быстрая распаковка LZSA1 - (LZSA2) - ZX1 - ZX0 сильное сжатие
К сожалению текущий вариант распаковщика LZSA2 для PDP11 никуда не годится, он непристойно большой, а по скорости его обогнал ZX1 и почти догнал ZX0, но в принципе его можно оптимизировать. А вот с остальными все довольно неплохо, особенно удался распаковщик ZX0 (забавно, что его версии для 8080 и pdp11 получились почти одинаковые по размеру: 101 и 102 байта соответственно).

Manwe
12.03.2021, 15:25
Результатами работы новейших упаковщиков ZX0 и ZX1 теперь можно пользоваться и на pdp11Круто! А где скачать сами упаковщики? Под Windows или под Мак.

ivagor
12.03.2021, 16:05
Там есть ссылки на github автора упаковщиков (Einar Saukas). Для mac нет, под win есть.

litwr
15.03.2021, 19:52
Это ответ на вопрос: Как узнать сколько памяти осталось?
Но был задан иной вопрос :)

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

Raydac
16.03.2021, 00:50
Там есть ссылки на github автора упаковщиков (Einar Saukas). Для mac нет, под win есть.
клевая штука, поменял у себя паковку картинок в тест пзу на него, на несколько килов лучше жмет чем медноноговский

ivagor
05.04.2021, 19:06
Einar Saukas сделал на основе ZX0/1 упаковщик ZX2 для маленьких файлов, а я сделал распаковщик для PDP11 (https://github.com/ivagorRetrocomp/DeZX/tree/main/ZX2/PDP11). Стоит пару слов сказать про опции.
Опция -y для реализации на PDP11 (в отличие от 8 биток) бесполезна и я не стал ее поддерживать.
Опция -z для большинства упакованных файлов прибавляет +1 байт, но зато распаковщик pdp11 с ней на 4 байта короче, поэтому
оба варианта распаковщиков рассчитаны на использование -z.
Опция -x сокращает распаковщик на 6 байт, но упакованный файл может получится (не всегда) чуть больше, поэтому в каждом конкретном случае надо смотреть на общую длину связки распаковщик+упакованный файл.
Опцию -b (распаковка в обратном направлении) для PDP11 на данный момент не реализовал.
В итоге 2 варианта распаковщиков: 80 байт (-z) и 74 байта (-x -z).

S_V_B
17.04.2021, 19:20
Прикольная картинка от RDC:

MOV #40000,R0
CLR R1
MOV #400,R3
3: MOV #40,R4
2: MOV #20,R5
1: ADD R1,R2
ROR (R0)
ADD #100,R1
SOB R5,1
TST (R0)+
SOB R4,2
SUB #77600,R1
SOB R3,3
Лучше в нулевой палитре :)
https://pic.maxiol.com/thumbs2/1618892146.1388899422.20210420101459.png (https://pic.maxiol.com/?v=1618892146.1388899422.20210420101459.png&dp=2)

Manwe
20.04.2021, 12:08
Прикольная картинка от RDCГде нарыл? ;)

S_V_B
20.04.2021, 12:46
Где нарыл?
Искал для Неона что-нибудь.. там до кучи валялась

SuperMax
13.06.2021, 11:05
И как повторное подведение итогов.
При текущем раскладе дел - я не буду даже пробовать PDPy11 - потому что даже простейшие мои программы он не оттранслирует - независимо от того - под какой целевой комп (БК-УКНЦ-ДВК) они будут написаны.


напишу о своем опыте - я честно попытался

1. тк он написан на питоне - получаем приколы от питона, а именно он (питон) требует свою кодировку
иначе говоря ему KOI8 не подсунуть (или надо разбираться как)
UTF-8 на винде 7-ке он тоже есть не захотел, пришлось конвертировать в 1251

2. макросы не знает, те стандартный код в MACRO11 не понимает

3. cравнил генерацию моего старого кода климата
тут 293 differences.
75599
сходу вижу расхождение в адресах - дальше не копал.

Резюме:
1. необходимо реализовать полноценную поддержку макросов
2. необходим стандартный вывод - те объектный файл, листинг итп
(можно делать и бинарник сразу тоже - спрашивая пользователя что именно он хочет получить)
3. провести полноценное тестирование компилятора
те собрать легаси код с макросами и сравнить его с референсом
на данный момент, увы, использовать я бы не стал - листинга нет и даже баги(и свои и компилятора) не отловить быстро
как вариант замены листинга - онлайн компиляция как мираже, но с выводом кодов слева, это и удобно и все сразу ясно
особенно если писать какой-то хитрый код

upd: первый баг не подтвердился, точнее тут виноват не PDPy11 а asm.com который подавился длинной меткой

Hunta
13.06.2021, 12:35
1. необходимо реализовать полноценную поддержку макросов
Не только. Есть ещё условная компиляция и некоторое количество наворотов вокруг неё.


2. необходим стандартный вывод - те объектный файл, листинг итп
Потому что полно кода, который уже в (стандартном) obj формате плюс всякие линкеры для сборки


как вариант замены листинга - онлайн компиляция как мираже
Не вариант

Manwe
13.06.2021, 22:13
upd: первый баг не подтвердился, точнее тут виноват не PDPy11 а asm.com который подавился длинной меткойвторой баг тоже не подтвердился: я скомпилировал без проблем, адреса совпадают с теми, что ты называл и с теми, что написаны в исходниках. Программа запускается и работает.

P.S. по умолчанию PDPy11 компилирует с адреса 100, если не указано иное директивой .LINK