PC-01 Lviv
http://pc01.lviv.ua/forum/

Стандартный Basic 2.0
http://pc01.lviv.ua/forum/viewtopic.php?f=22&t=189
Page 1 of 4

Author:  liberation [ 21 Dec 2011, 17:10 ]
Post subject:  Стандартный Basic 2.0

Пусть и в "железячной" теме, но приведу любопытное воспоминание о баге Бэйсика ПК-01 "Львов":
Quote:
Еще помню свою первую персоналку ПК-01 "Львов". Родной для зверька язык - Бейсик (в ПЗУ вшит интерпретатор). Я, впрочем, предпочитал коды процессора, но поначалу пару прог на Бейсике решил для разминки написать. Моё знакомство с Бейсиком закончилось после такого эпизода.

О, сколько я рвал на себе волосы над отладкой абсолютно правильной программы (как с моей точки зрения, так и по всем разумным правилам), когда я ясно пишу в одной строке присваивание COUNT=0, а через три строки этот COUNT сам по себе оказывается абсолютно другим. Оказалось: тот говноблядский интерпретатор считал значащими только первые две буквы идентификатора. Но, что самое интересное, "в целях совместимости" допускал идентификаторы любой длины. В итоге переменные COUNT и CODE он считал одной и той же переменной!
Источник

Люди-человеки, было такое?

upd.
03/09/2012: Тема вынесена из "Недостатки и недоработки ПК-01 "Львов".

Связанные темы "Расширенный Basic для ПК-01 "Львов", "Оператор SLOAD".

Author:  Kucher [ 21 Dec 2011, 20:12 ]
Post subject: 

А нечего было выделываться! :lol:

Author:  a99 [ 21 Dec 2011, 23:29 ]
Post subject: 

Quote:
Люди-человеки, было такое?
Image

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

Author:  Kucher [ 22 Dec 2011, 00:25 ]
Post subject: 

Можно лишь предположить, что разработчики пожертвовали точной идентификацией переменной ради быстродействия интерпретатора?

Author:  liberation [ 22 Dec 2011, 01:57 ]
Post subject: 

Quote:
Можно лишь предположить, что разработчики пожертвовали точной идентификацией переменной ради быстродействия интерпретатора?
Что-то в этом есть. Два символа как раз составляют 16-разрядное слово, максимум для ЦП "Львова". Возможно, что так удалось организовать быстрый поиск по списку переменных. Несомненно, это было смелым рационализаторским предложением.

Author:  Kucher [ 22 Dec 2011, 02:30 ]
Post subject: 

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

Author:  liberation [ 22 Dec 2011, 14:33 ]
Post subject: 

Для полноты картины еще одна классическая ошибка Бэйсика ПК-01 "Львов":
Image
Зачем и что это - науке неизвестно.

Author:  sadfsdfsdaf [ 23 Dec 2011, 20:15 ]
Post subject: 

Quote:
Люди-человеки, было такое?
такое было в подавляющем большинстве бейсиков (2 бувы на идентификатор), причём это было документировано. тут как раз неожиданностей нет.
По поводу LIST 50--70 эта штука меня в своё время немало позабавила, а секрет скорее всего прост - это дамп произвольного участка памяти как бейсик-программы, где-то там неотлавливаемое переполнение происходит (могли и как числа с плавающей точкой параметры взять с командной строки). Ну, а коды больше 0x7F декодируются как токены (программа в токенизированном виде хранится в памяти). Корвет позволял вместо операторов вводить русские буквы (там КОИ8 использовался), потом эти "магические буквы" становились операторами. А Львову это было не нужно, у него горячие клавиши были...

Author:  a99 [ 23 Dec 2011, 22:54 ]
Post subject: 

Quote:
Числовая переменная обозначается в БЕЙСИКе ПК-01 идентификатором, который состоит из одной или двух латинских букв или латинской буквы и последующей цифры, например: X, P1, RD, A2.
RTFM, однако. Вот ведь...

Author:  ivagor [ 25 Aug 2012, 15:50 ]
Post subject:  Re:

Quote:
Для полноты картины еще одна классическая ошибка Бэйсика ПК-01 "Львов":
Image
Зачем и что это - науке неизвестно.
Интересный прикол. LISTномер_строки-любая_нечисловая_белиберда в итоге запускает выполнение с адреса равного номер_строки.
Выбранный в примере номер 50 интересен тем, что команда все же отработает как LIST (и распечатает "строки" с адресов 058Bh и F5CFh), т.к. перейдет на адрес 0032h. Соответственно есть несколько номеров строк (адресов перехода), при которых эта конструкция будет работать как LIST (причем есть варианты с другими адресами печатаемых строк).
Интересно, есть примеры программ с использованием этой штуки для неявного запуска процедур в кодах (например рестарт будет LIST63488-нечисловая_белиберда)?
Менее интересный вариант LISTномер_строки:что_угодно игнорирует все что после двоеточия и работает аналогично LISTномер_строки, но это касается не только LIST.

Author:  b2m [ 25 Aug 2012, 15:59 ]
Post subject:  Re: Re:

Quote:
Интересный прикол. LISTномер_строки-любая_нечисловая_белиберда в итоге запускает выполнение с адреса равного номер_строки.
Блин, откуда ты эти приколы берёшь? Связь с космосом? :)

Author:  NeoSpectruman [ 25 Aug 2012, 16:05 ]
Post subject:  Re: Re:

Quote:
Интересный прикол.
Повод окончательно забить на бейсик.

Author:  ivagor [ 25 Aug 2012, 17:04 ]
Post subject:  Re: Недостатки и недоработки ПК-01 "Львов"

К сожалению обработка LIST в ПЗУ, поэтому загружаемой программой исправить не получится. Тем не менее в век эмуляторов это вряд ли кого-то смутит, поэтому я рискнул пропатчить ПЗУ. На первый взгляд при этом ничего не поломалось.

Attachments:
BasicListPatch.zip [12.43 KiB]
Downloaded 382 times

Author:  liberation [ 25 Aug 2012, 23:14 ]
Post subject:  Re: Re:

Quote:
Интересно, есть примеры программ с использованием этой штуки для неявного запуска процедур в кодах (например рестарт будет LIST63488-нечисловая_белиберда)?
Вы маг и чародей, профессор! :shock:
Ничего подобного я припомнить не могу. Бэйсик ПК-01 вообще довольно загадочная вещь. Мы как-то уже поднимали вопрос его генезиса в вопросах к Вл. Пуйде, но первоисточник все-таки твердо не установили. Если будет желание, почитайте озвученные соображения. К сожалению, пока нет ответов на наши вопросы к Юр. Опырю, который непосредственно доводил до ума Бэйсик ПК-01... Все-таки надеюсь, мы преодолеем эту трудность.

Еще у нас есть тема, где обсуждался расширенный вариант Бэйсика, на котором были написаны некоторые игрушки для ПК-01. Довольно аппетитная штучка, кстати, была.

Author:  sadfsdfsdaf [ 26 Aug 2012, 01:29 ]
Post subject:  Re: Re:

Quote:
Менее интересный вариант LISTномер_строки:что_угодно игнорирует все что после двоеточия и работает аналогично LISTномер_строки, но это касается не только LIST.
это касается всех "операторо-команд", которые можно записать в код, но после выполнения которых происходит останов выполнения программы и горячий рестарт интерпретатора. (p.s. в других диалектах бейсика частенько эти команды ничем не отличались от встроенных операторов, а вот в ПК-01 - так).

Page 1 of 4 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/