ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 06 мар 2021, 16:55

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 49 сообщений ]  На страницу Пред. 1 2 3 4 След.
Автор Сообщение
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 13 окт 2012, 06:20 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
CIRCLE и PAINT взгляну, но судя по тому, как они рисуют (визуально), реализованы они хорошо.
Небольшое дополнение про LIST и USR. В том посте я не упомянул DEFUSR. Связка DEFUSR + USR (если нужно вызывать каждый раз разные подпрограммы) работает примерно в 2,5 раза быстрее POKE+POKE+USR, но LIST, как ни странно, все же быстрее. И даже если только один раз использовать DEFUSR и вызывать все время одну процедуру, то последовательность LISTов быстрее последовательности USR примерно в 2 раза. С другой стороны, из USR проще вернуть результат в переменную, стоящую в левой части. Хотя штатной поддержки нет, но можно сохранить нужное значение в вещественном аккумуляторе (24Dh-250h). А вобще для передачи аргументов машиннокодовым процедурам и возврата значений можно использовать технику, предложенную (для векторовского бейсика, но разница в основном только в адресах процедур) Филипповым http://sensi.org/~svo/scalar/media/w/Vector_User.djvu страницы 41-43.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 13 окт 2012, 14:23 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Для львовистов (или как правильно?) наверно это привычно, а для меня удивительно - PAINT жужжит, из-за постоянных out 0C2h с 0 и 0FFh (неаккуратно сделали). Меняя форму и размеры заливаемой фигуры можно влиять на высоту и длительность жужжания.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 14 окт 2012, 09:50 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщения: 1405
Откуда: Украина
Цитата:
Для львовистов (или как правильно?) наверно это привычно, а для меня удивительно - PAINT жужжит, из-за постоянных out 0C2h с 0 и 0FFh (неаккуратно сделали). Меняя форму и размеры заливаемой фигуры можно влиять на высоту и длительность жужжания.
Я подозреваю, что переключение через 0 и 0xFF было реализована еще тогда, когда порт 0xC2 не отвечал за вывод звука и прочие эффекты, только за подключение VRAM. Иначе такую небрежность со стороны разработчиков трудно объяснить (гусары, ни слова про раздолбайство). :D

Кстати, еще вопрос, был ли ПК-01 с пищалкой изначально.

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 15 окт 2012, 00:06 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщения: 227
Цитата:
С другой стороны, из USR проще вернуть результат в переменную, стоящую в левой части. Хотя штатной поддержки нет, но можно сохранить нужное значение в вещественном аккумуляторе (24Dh-250h)
есть varptr(), можно писать сразу в нужные переменные
Цитата:
Для львовистов (или как правильно?) наверно это привычно, а для меня удивительно - PAINT жужжит, из-за постоянных out 0C2h с 0 и 0FFh (неаккуратно сделали). Меняя форму и размеры заливаемой фигуры можно влиять на высоту и длительность жужжания.
не только он, ещё locate (и ещё ряд команд)


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 15 окт 2012, 09:42 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Цитата:
есть varptr(), можно писать сразу в нужные переменные
Цитата:
А вобще для передачи аргументов машиннокодовым процедурам и возврата значений можно использовать технику, предложенную (для векторовского бейсика, но разница в основном только в адресах процедур) Филипповым http://sensi.org/~svo/scalar/media/w/Vector_User.djvu страницы 41-43.
Принципиальное преимущество USR перед LIST - его можно использовать сразу в выражениях, типа A=B+USR(0)*С. Если это не нужно, то, конечно, можно использовать хоть USR, хоть LIST "с параметрами" (как в ссылке на материал Филиппова, что я привел), передавая в качестве параметров переменные, в которые машиннокодовая процедура запишет результат, найдя адреса по именам (использовав машиннокодовый аналог varptr). А можно даже не передавать имена переменных в качестве параметров, а просто заранее определиться, какие переменные будут использоваться для возврата результатов.
Можно совместить "поведение как функции" USR и "вызов с непосредственно заданного адреса" LIST, задавая в качестве аргумента USR адрес вызываемой подпрограммы. Тогда DEFUSR должен указывать на "диспетчер USR", в котором будет воспринят адрес из скобок и осуществлен переход по этому адресу.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 15 окт 2012, 10:09 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Цитата:
не только он, ещё locate (и ещё ряд команд)
Скорее всего щелкающие/жужжащие операторы еще есть, но конкретно в locate выводят FDh и FFh в порт C2h, т.е. звуковой 0й бит не трогают. Может надо какое-то специфическое сочетание параметров?
Еще могут быть щелчки при переходах от операторов, в которых переключение ВОЗУ по FD/FF к операторам с 00/02.
Меня несколько удивляет использование разных вариантов (FD/FF, 00/02, 00/FF) в разных случаях.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 15 окт 2012, 14:47 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщения: 1405
Откуда: Украина
Цитата:
Еще могут быть щелчки при переходах от операторов, в которых переключение ВОЗУ по FD/FF к операторам с 00/02.
Меня несколько удивляет использование разных вариантов (FD/FF, 00/02, 00/FF) в разных случаях.
Раскопки на форуме позволили найти интересную реплику sadfsdfsdaf по этому поводу:
Цитата:
с принтером ещё была проблема. всё по той же причине - переключения видео-ОЗУ 2-мя способами, на него уходили лишние сигналы стробирования, в результате чего печатался мусор в ходе работы LOCATE/PAINT

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 17 окт 2012, 15:28 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Небольшой сборник баянов.
Пара общеальтаирских особенностей:
1. Если в качестве аргумента VAL сначала записано нормальное число, а потом ерунда, то результатом преобразования будет только "нормальное число". Например VAL("12#$%^&*") даст 12.

2. Т.к. стек для FOR/NEXT и GOSUB/RETURN общий, то их "перекрещивание" приводит к ошибкам.
Например
10 FOR I=1 TO 1
20 GOSUB 100
30 STOP
100 NEXT
110 RETURN
выдаст ?NF (NEXT без FOR) в строке 100

а если так
10 GOSUB 100
20 NEXT
30 STOP
100 FOR I=1 TO 1
110 RETURN
то, выдаст ?NF (NEXT без FOR) в строке 20, т.е. RETURN "сбросит" цикл, начатый в строке 100.

3. Львовский баян. Палитра 7, задаваемая с использованием процедуры 0DE3Ch (в т.ч. оператором COLOR) совпадает с палитрой 0.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 17 окт 2012, 16:49 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Пара дополнений про VAL
1. Пробелы в аргументе пропускаются, поэтому A=VAL("1 2 3") присвоит A=123.
2. Сразу я что-то не сообразил, а ведь игнорирование "ерунды" после содержательной части дает возможность иметь различающиеся "содержательные" и отображаемые числа, аналогично подмене номеров строк в GOTO/GOSUB (http://lvovpc.ho.ua/forum/viewtopic.php ... 9&start=26). Пример приложил.


Вложения:
VAL225.ZIP [166 байт]
167 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 18 окт 2012, 22:47 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщения: 227
Цитата:
Еще могут быть щелчки при переходах от операторов, в которых переключение ВОЗУ по FD/FF к операторам с 00/02.
Думаю, это оно и было, т.к. в основном коде используется 00/02.
Услышать легко, например, запустить заводскую игру "Ракета" (на Бейсике), там этот эффект даже "музыкальным фоном" выступает :-)
Цитата:
3. Львовский баян. Палитра 7, задаваемая с использованием процедуры 0DE3Ch (в т.ч. оператором COLOR) совпадает с палитрой 0.
Не факт, в доке так прямо и сказано - палитры 7 нету :-)
Цитата:
<палитра> - номер палитры. Параметр должен принимать значения в диапазоне от 0 до 6.
Цитата:
2. Т.к. стек для FOR/NEXT и GOSUB/RETURN общий, то их "перекрещивание" приводит к ошибкам.
А вот это скорее "фича", код самого бейсика я не смотрел, но такое поведение оговаривалось в документации. А, например, в трансляторах форта вообще обычно специально проверяют флаг на вершине стека управления, чтобы не смешивать элементы управляющих структур (хотя можно! М.Гассаненко в своё время предлагал для этого случая обобщить доступ к этому стеку и предоставить в виде открытой спецификации (у него ряд статей был, типа такой: "Открытый интерпретатор: переносимость манипуляций на стеке возвратов")).
Цитата:
Можно совместить "поведение как функции" USR и "вызов с непосредственно заданного адреса" LIST, задавая в качестве аргумента USR адрес вызываемой подпрограммы. Тогда DEFUSR должен указывать на "диспетчер USR", в котором будет воспринят адрес из скобок и осуществлен переход по этому адресу.
ну, если такая пьянка пошла, то можно таблицу токенов расширить, она настраиваемая и этим пользовались.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 19 окт 2012, 05:55 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Цитата:
Цитата:
3. Львовский баян. Палитра 7, задаваемая с использованием процедуры 0DE3Ch (в т.ч. оператором COLOR) совпадает с палитрой 0.
Не факт, в доке так прямо и сказано - палитры 7 нету :-)
Цитата:
<палитра> - номер палитры. Параметр должен принимать значения в диапазоне от 0 до 6.
Ну я доку (про 0-6) почитал, посмотрел, что палитру 7 задать можно и она совпадает с 0, подумал, что про это наверняка в каких-нибудь "секретах ПК-01" писали и поэтому повторение этого факта в своем исполнении обозвал баяном.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 19 окт 2012, 16:04 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Уже несколько раз писал про USR, но не фиксировал, что аргумент из скобок записывается в вещественный аккумулятор 24Dh-250h.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 21 окт 2012, 09:48 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Встретил странное утверждение в описании языка "БЕЙСИК" (цитирую по BasicBook.pdf):
"Индексная переменная обозначается записью, состоящей из идентификатора массива и следующего за ним в круглых скобках списка индексов. Число индексов не должно превышать два и в списке они разделяются запятой.", т.е. якобы допустимы максимум двумерные массивы.
Максимальное число индексов массива в львовском варианте бейсика равно 13, если взять минимальное количество элементов (2) по каждой размерности, что соответствует объявлению
DIM A[$](1,1,1,1,1,1,1,1,1,1,1,1,1)
Массив при этом (за вычетом небольшой преамбулы) будет занимать 2^13*4=32768 байт. Массив с 14 индексами бейсик не даст объявить, а если бы и дал, то для его размещения не хватило бы памяти.


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 22 окт 2012, 17:06 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщения: 1405
Откуда: Украина
Никаких откровений не сообщу, просто поделюсь наблюдением, которое вынес, просматривая стандартную документацию. Так вот, операторы DEF USR, CIRCLE и PAINT вынесены в отдельное приложение "Дополнительные операторы Бейсика". Можно предположить, что они были добавлены в интерпретатор в последнюю очередь. Любопытно, что в разделе "2.3 Графика" руководства программиста оператор PAINT описан как отдельная процедура в ПЗУ ("2.3.7 Закраска замкнутой фигуры ( PAINT )."), что подразумевает автономность от интерпретатора, тогда как CIRCLE вообще нигде не упоминается, скорее всего он слишком крепко завязан на Бейсике. Интересно, насколько трудно было бы вызвать CIRCLE из программы в кодах? Или выставление необходимых системных переменных и перемещение кода в ОЗУ напрочь лишало такую затею смысла?

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться к началу
 Заголовок сообщения: Re: Стандартный Basic 2.0
СообщениеДобавлено: 22 окт 2012, 20:49 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Цитата:
Интересно, насколько трудно было бы вызвать CIRCLE из программы в кодах?
Приложил самый простой вариант - рисование круга, но можно рисовать и дугу и эллипс.


Вложения:
CIRC.ZIP [536 байт]
148 скачиваний
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 49 сообщений ]  На страницу Пред. 1 2 3 4 След.

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00


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

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


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

Найти:
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB