Просмотр полной версии : Basic 48 с подсветкой синтаксиса
SaintTurnip
30.04.2018, 20:41
---
в то же время легко упустить, что PLOT и CIRCLE являются частью IF.
Можно все операторы в строке после THEN переносить на новые строки с отступом 2 пробела от IF.
s_kosorev
01.05.2018, 18:48
Ждем контекстную подсказку
Oleg N. Cher
01.05.2018, 19:43
А потом фолдинг и пошаговый отладчик :v2_dizzy_facepalm:
null_device
02.05.2018, 15:06
А есть функция перемещения по тексту строки вверх-вниз?
Интересная идея.
Не планируется ли добавить команды Delete и Renumber?
eugeniusz, Вы видели "The GOSH WONDERFUL ZX Spectrum ROM"?
так, а варум циферки не задействованы?
в то же время легко упустить, что PLOT и CIRCLE являются частью IF
Может блок IF выделять отдельным цветом от начала и до конца?
Или шрифтом. Курсив или BOLD...
чтобы делать отступы, красить всю строку итд мне надо где-то сохранить флаг состояния
и вот где его сохранить, я пока не нашел (скажем прямо, пока и не искал)
Можно попробовать:
- неиспользуемые биты системной переменной TV_FLAG;
- неиспользуемые биты системной переменной FLAGS2;
- неиспользуемые биты системной переменной FLAGX (???, т.к. используется для INPUT);
- системная переменная NOT_USED;
- системная переменная NMIADD.
только увидел тему. очень круто! респект!
по сабжу: не понял, в чем улучшение переноса двоеточия на новую строку. имхо читабельность как раз снизилась, глаз не ищет продолжения, добежав до конца строки и не найдя там двоеточия.
iceoflame
03.05.2018, 18:31
Каки образом будет реализовано? Модификация бейсик ПЗУ?
iceoflame
04.05.2018, 08:48
iceoflame, да, это стандартная 16к фирмварь с правками.
Там процедуры не двигались по адресам? Потому как некоторые игрушки не любят когда в фирмварь лезут, бо они там юзают некоторые процедурки.
ZX_NOVOSIB
04.05.2018, 08:59
iceoflame, если бы кто припомнил список самых капризных на этот счёт игрушек, то можно было бы их протестить, и всё сразу бы стало ясно.
iceoflame
04.05.2018, 10:16
ZX_NOVOSIB, Ну во первых там где то идет кусочек ПЗУ свободный, туда еще обычно русский шрифт шили, некоторые игрухи которые выставляют ИМ2 от балды, туда попадает вектор прирывания, и игрухи типа саботер 2 и другие которые не работают на ПЗУ с русским шрифтом -- будут вешаться. Пример компа Робик. Большая часть загрузчиков, использует 1366 (чтение с ленты) на прямую, или делает копию и изменяет его. Некоторые используют даже конченный скролинг из ПЗУ. Ну это совсем старые игрухи до 86 года.
iceoflame
04.05.2018, 15:15
Потесть на saboteur 2 должно загрузится проиграть первую ноту на бипере и повиснуть.
iceoflame
04.05.2018, 15:28
iceoflame, по какой причине? адрес и фрагментацию процедуры изменить несложно.
ИМ2, векторы по умолчанию, один из них попадает на эту область, и улетает не потому адресу.
кстати, а если стандартный шрифт изменить - трдос будет работать?
Будет, контроллер отлавливает попытку перехода в ту область, и что там находится ему глубоко по одному месту.
ZX_NOVOSIB
04.05.2018, 15:30
Потесть на saboteur 2 должно загрузится проиграть первую ноту на бипере и повиснуть.
Нормально работает. Нужны ещё игры для теста.
iceoflame
04.05.2018, 15:31
Но моментик, почему не хорошо менять шрифт, некоторые делают косой шрифт, копируя обычный, смещая его на 1 пиксель и накладывая на себя же. обычно в 30-50% загрузчиков так шрифт получают. Прикинь как поломается если его перерисовать.
CodeMaster
04.05.2018, 15:43
Добавил в шапку текущую версия для загрузки.
В шапку бы добавить и скриншот текущей версии.
кусочек ПЗУ свободныйНе подскажите конкретно адрес свободной и относительно безопасной области ПЗУ и ее длину?
Но моментик, почему не хорошо менять шрифт, некоторые делают косой шрифт, копируя обычный, смещая его на 1 пиксель и накладывая на себя же. обычно в 30-50% загрузчиков так шрифт получают. Прикинь как поломается если его перерисовать.
я кстати впервые это понял с прошивкой OpenSE,
оказывается в zynaps и flyingShark шрифты на основе ПЗУшного
Spectramine
04.05.2018, 16:22
я кстати впервые это понял с прошивкой OpenSE,
оказывается в zynaps и flyingShark шрифты на основе ПЗУшного
Плюс куча хакерских загрузчиков делает шрифты из ПЗУшного.
ZX_NOVOSIB
04.05.2018, 16:53
http://zxpress.ru/book_articles.php?id=476 - здесь кой какой список игр, чувствительных к содержимому пзу. Это то что надо?
Spectramine
04.05.2018, 17:02
Не подскажите конкретно адрес свободной и относительно безопасной области ПЗУ и ее длину?
А что там подсказывать, смотрите, где в оригинальном ПЗУ 48К область, забитая #FF - это свободная область. #386E-#3CFF. Только оставьте по адресам #3xFF-#3x00 байты #FF, дабы игрушки с векторами IM2 в ПЗУ работали.
оставьте по адресам #3xFF-#3x00 байты #FF
weiv, т.е.
38FF и 3900;
39FF и 3A00;
3AFF и 3B00
и т.д.?
Spectramine
04.05.2018, 20:06
weiv, т.е.
38FF и 3900;
39FF и 3A00;
3AFF и 3B00
и т.д.?
Да.
Плюс куча хакерских загрузчиков делает шрифты из ПЗУшного.
мне кажется BG свой шрифт подсмотрел в AstroMarineCorps/ThunderBirds
iceoflame
04.05.2018, 23:33
мне кажется BG свой шрифт подсмотрел в AstroMarineCorps/ThunderBirds
Ну блин, LD b, a; RRL A; OR A, B; нижние 4 байта (все восемь болд получится), если я правильно мнемоники помню. БГ, там где в рамке, вообще замещал кусок псевдографики, там рисованный шрифт, а вот в загрузчиках типа Таргет Ренегейт (наклонный шрифт, достаточно популярный), или акшен форсе (2я высота, через строчная), все на основе ПЗУшевского.
Я блин со шрифтами на Віра 48 насмотрелся, там какой-то идиот помимо русского шрифта, еще жирный запихнул на место стандартного.
iceoflame
05.05.2018, 16:45
Самый лучший кроплатформер дизасемблер IDA
- - - Добавлено - - -
http://blogs.kpi.kharkov.ua/v2/asm/wp-content/uploads/sites/20/2015/12/ida.final_.pdf такой вот документик по ней есть
Andrew771
06.05.2018, 15:55
Товарищи, нет ли под винду, линукс или макос такого дизассемблера, чтобы был в курсе про вызовы ПЗУ и специфику ZX Spectrum?
Я пользовался дизасмом, встроенным в эмулятор EmuZWin, удобный.
Misha Pertsovsky
07.05.2018, 03:30
Шикарная идея для чтения программ с большим потенциалом. Спасибо!
В то же время возможны проблемы с раскраской текста прямо в PRINT
Для примера вот накалякал от балды снапшот :-)
https://files.fm/u/rsqyy2yp
shurik-ua
08.05.2018, 04:29
Товарищи, нет ли под винду, линукс или макос такого дизассемблера, чтобы был в курсе про вызовы ПЗУ и специфику ZX Spectrum?
на форуме есть же полный дизасм ПЗУ - откоментирован и переведён даже.
Misha Pertsovsky
08.05.2018, 09:35
...между прочим, если отображать номер строки не цифрами, а A-Za-z0-9 разных цветов INK и PAPER, то хватит всего двух знакомест, что сэкономит экран для кода и радикально улучшит читаемость исходника.
Вообще не отображать, кроме строк куда идет переход. Но, боюсь, это уже не влезет в ПЗУ..
- - - Добавлено - - -
2) Можно проверять, если цветовой код внутри кавычек (т.е. это текст), то не подавлять его.
В режиме редактирования в кавычках высвечивать реальные цвета, а в режиме просмотра в кавычках писать код цвета. Имхо, это будет универсальным решением, иначе будет непонятно откуда взялись эти цвета на экране (при работе программы), а это удобный способ расцветить вывод. (мы исходим из того, что это ПЗУ стоит постоянно -- если же его переключать с обычным, то вопрос снят сам собой).
а зачем двоеточия с двух сторон от THEN в операторе IF?
ZX_NOVOSIB
08.05.2018, 11:25
Нужна утилита, которая бы оптимизировала бейсик. Т.е. утилита, которая бы в программе все нули заменяла на NOT PI, все двух-трёхзначные числа на что-то типа CODE "o" (вместо o любой символ или токен). Все прочие числа обрамляла бы в VAL "число".
1=SGN PI
2=PI-SGN PI
3=PI
4=PI+SGN PI
5=?
6=PI+PI
36=PI^PI ну и т.д., в том числе можно юзать синусы, косинусы и т.п. корни.
Но утилите нужно указывать диапазоны строк, где будет произведена оптимизация, потому что не во всех строках нужна такая оптимизация, ибо она крадёт скорость у и без того тормознутого во всю голову бейсика.
такие утилиты есть (только я названия сходу невспомню).
вот пример такой оптимизации
http://www.worldofspectrum.org/infoseekid.cgi?id=0015662
https://c.radikal.ru/c32/1805/dd/f39c2c5ab8bc.png (https://radikal.ru)
ZX_NOVOSIB, а можно подробнее раскрыть смысл такой оптимизации?
ZX_NOVOSIB
08.05.2018, 12:40
Гаррий, Легко:
Существенный недостаток ZX Spectrum — относительно малый
объем свободной памяти (около 40 килобайт). А тут еще интерпре-
татор Бейсика «транжирит» память: под запись любого числа ин-
терпретатор отводит 6 ячеек памяти независимо от размера числа.
Под каждый символ отводится 8 ячеек памяти.
** Более подробно о подключении альтернативных шрифтов см. [1].
Даже если это просто единица или ноль. Вот и приходится про-
граммистам, работающим на Бейсике, изощряться, чтобы втис-
нуться в узкие рамки памяти Speccy.
Прежде всего надо расширить область памяти, отведенную для
работы бейсик-программы. Границы, в которых может размещать-
ся программа с переменными, определяются компьютером, но мо-
гут быть изменены. Старший адрес памяти, разрешенный к ис-
пользованию интерпретатором Бейсика, хранится в системной пе-
ременной RAMTOP (23730/31). Стандартно он равен 65367. Но
если программа не вмещается, его можно увеличить до предела —
до 65535*. Для этого нет необходимости записывать новое значе-
ние RAMTOP с помощью РОКЕ. Изменить RAMTOP можно с по-
мощью специально предназначенного для этого оператора CLEAR с
параметром 65535. Правда, CLEAR к тому же очистит все перемен-
ные, массивы, выполнит операторы CLS и RESTORE, вообще подгото-
вит программу к новому пуску.
Если и после перемещения RAMTOP не хватает памяти, при-
дется применять более изощренные методы.
Приведем несколько самых распространенных способов ,сжатия
бейсик-программ. Хотя в этой области нет предела для фантазии.
Во-первых, надо свести к минимуму длину имен всех числовых
переменных. Если их меньше, чем букв в алфавите, то все сделать
однобуквенными.
Памятуя, что числовые константы занимают много места, не
помешает самые часто используемые из них заменить на перемен-
ные. Надо только единожды в начале программы присвоить им
требуемые значения.
Целые числовые константы выгоднее записывать как символь-
ные и помещать их «под» функцию VAL. К примеру, операторы
LET а=5 и LET a=VAL "5" тождественны, однако второй оператор
занимает в памяти на две ячейки меньше (но, следует учесть,
работает медленнее).
Для сокращения объема памяти, занимаемого программой, бы-
вает полезно вместо числовых массивов использовать символьные.
Ведь под каждый элемент числового массива, независимо от того,
что в нем хранится, отводится по пять ячеек памяти, в то время, как
под элемент символьного массива отводится лишь одна ячейка.
Преобразовать же символьную константу в число можно с по-
мощью той же VAL.
И, напоследок, парочку «хитростей». Например, вместо нуля,
который, как и любое число, занимает в памяти 5 байт, можно
записать просто BIN, либо NOT PI. Число «пи» отлично от нуля, и это
главное, а логический оператор NOT, по определению, превращает
его в ноль. Внешне получилось длиннее и мудреней, но в памяти,
тем не менее, такая запись займет лишь две ячейки. Вывернув-
шись, можно «смоделировать» и единицу. Например, записав
NOT BIN либо SNG PI.
вместо нуля, который, как и любое число, занимает в памяти 5 байт, можно записать просто BIN
Цитируя, думайте!
65215
ZX_NOVOSIB
08.05.2018, 13:15
Цитируя, думайте!
Книгу писали: Болдачев А.В., Ларченко А.А., под редакцией Родионова. И все эти заслуженные мужи всё-таки допустили ляп с BIN'ом. BIN естественно не годится, NOT PI рулит.
Для монотонности. Эти двоеточия можно вообще убрать, но так код выглядит целостным.
Имхо, увлеклись двоеточиями и их форматированием. У них есть смысл в исходном синтаксисе. Теперь он утрачен. Но это лишь одно мое субьективное мнение ) Зато все остальное очень круто получилось.
Spectramine
08.05.2018, 16:21
В загрузчике все эти NOT PI может и оправданы.
А в программе не проще определить переменную и использовать?
"10 LET Z=0" сколько займет, 15 байт? Если приделать к какой-нибудь строке, то еще меньше, 10 байт. Зато остальной код читаемый и без ненужных вычислений.
Причем, BORDER NOT PI выполняется почти в два раза медленнее, чем BORDER 0, что визуализировано на этом скриншоте:
https://s17.postimg.cc/pscsw4q2j/border.png (https://postimg.cc/image/pscsw4q2j/)
eugeniusz, если сделать вариант Вашей программы для загрузки в ОЗУ?
Да, это займет место в ОЗУ, но зато можно будет сделать отступы для блоков FOR-NEXT и IF-THEN.
Добавить команды редактирования.
Пользователи реалов смогут легко воспользоваться сервисом редактирования, предоставляемым Вашей программой.
Типа как в ZXED Spectrum Toolkit:
A ALTER - searches for and then replaces a string of
characters. You specify both the original
and the new string, and the range of line
numbers where the changes are to be
made. See also VERIFY below.
B BYTES - tells you how much free memory space is
available for your program/variables.
C COPY - duplicates lines of your program. You
specify the range of lines to be copied
and where they are to be placed.
D DELETE - deletes a block of lines from your
program. You specify the range of lines
to be deleted.
F FIND - finds a string of characters. All lines
containing the specified string are listed
to the screen.
H HELP - gives a menu of the options available
along with a brief description of the
Function.
L LINE - returns the address of a specified line. This
address is the first character of the line.
M MOVE - as for COPY, except that the original lines
are DELETED thus effectively moving
lines from one part of your program to
another.
P APPEND - appends a specified string to lines.
R RENUMBER - renumbers the line numbers of your
program, including GOTO and GOSUB
references. Will also amend the references
for LIST, LLIST, RESTORE, RUN and
SAVE ... LINE.
You specify the start and end line
numbers, the new base line number and
the increment step.
S SEQUENCE - gives AUTO LINE NUMBERS, which is
very useful for entering long programs.
You specify the starting line number and
the increment.
V VERIFY - when ON, will list all lines containing the
string replaced by ALTER. When OFF,
no listing is produced, just the total
number of changes made in confirmation
of successful amendments or otherwise.
Переделать, наверно, можно ПЗУ-128. Такие переделки уже были - Basic-128 заменялся на коммандер.
Можно было бы оставить дизайн меню, пункты указать:
128 TR-DOS
48 TR-DOS
48 BASIC
48 BASIC+
Остальное место использовать как электронный диск.
При выборе 48 BASIC+ в ОЗУ копируется программа, расширенного редактора и подключается ПЗУ BASIC 48.
При простом выборе пунктов TR-DOS, происходит переход в ДОС, при, например, нажатой клавише SYMBOL SHIFT из ПЗУ в ОЗУ загружается и запускается какой-нибудь бут (типа односекторного) или лучше с возможностью выбора диска.
Alex Rider
09.05.2018, 16:20
просто не понимаю, как например перехватывать LIST
1. Дизасмить код Laser Basic, смотреть как сделано там. Я баловался таким году в 1999.
2. Попробовать найти тред про это же самое здесь. Я натыкался случайно и совсем даже не помню по каким ключевым словам искать.
Идея проста. В ОЗУ перекидывается MAIN_LOOP и код нескольких операторов, которые возвращаются не по ret, а прямым переходом в MAIN_LOOP. Патчатся адреса, и вуаля - интерпретатор в ОЗУ. Дальше в нем можно менять что угодно. ПЗУ остается фирмовым. Но отжирается место в ОЗУ. ИМХО, в пределах 3-5 килобайт.
добавлю хочуху из bogobasic—
3. Добавлено три новых команды в бейсик:
! - вызов TR-DOS (эквивалентно RANDOMIZE USR 15616).
@ - исполнение команды TR-DOS из Бейсика (эквивалентно RANDOMIZE USR 15619:REMНапример, можно в бейсике быстро набрать "@ CAT" - будет каталог. Или "@ RUN "ZEUS" - будет, соответственно, запущена программа ZEUS.
добавлю хочуху из bogobasic—
3. Добавлено три новых команды в бейсик:
! - вызов TR-DOS (эквивалентно RANDOMIZE USR 15616).
@ - исполнение команды TR-DOS из Бейсика (эквивалентно RANDOMIZE USR 15619:REMНапример, можно в бейсике быстро набрать "@ CAT" - будет каталог. Или "@ RUN "ZEUS" - будет, соответственно, запущена программа ZEUS.
Уже есть такое :)
http://zx-pk.ru/threads/12660-iso-rom-128-with-tr-dos-5-05(cz).html?highlight=
у меня все это не складывается)
немо иде в этот прекрасный мир не вписывается
aquillov
18.01.2021, 23:46
"10 LET Z=0" сколько займет, 15 байт? Если приделать к какой-нибудь строке, то еще меньше, 10 байт. Зато остальной код читаемый и без ненужных вычислений.
10 LET Z=NOT PI
* Простите за некропостинг, но не смог удержаться :-)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot