PDA

Просмотр полной версии : BASIC на Корвете



Arix
02.12.2018, 19:54
1. Я пытаюсь сохранить программу на диск, а дискета оказалась битой, или дисковод глючит. Появляется сообщение BDOS ERROR... и - либо вылет из Бейсика в ОС, либо надо нажимать УПР+Ц с тем же результатом. Всё несохраненное - корвету, то есть, коту под хвост. Действительно с этим полная безнадёга? Или есть способ выхода из этой ситуации без потерь? Ведь можно было бы сменить дискету или дисковод и сделать новую попытку. Сейчас я поставил два Тика, такой проблемы нет. Пока не было ни одного BDOS ERROR'a и пролета во встроенный Бейсик при загрузке системы, если только я сам это не провоцировал. А до этого были Электроники 5311 и 5313, эти ошибки случались частенько.

2. Программа нарисовала некую картинку. Как теперь от этой картинки избавиться? В других Бейсиках, когда программа отработала, картинка сама исчезает, или исчезает при выходе из программы. А тут она продолжает висеть. Мешает просмотру листинга и редактированию программы.

ivagor
02.12.2018, 20:07
Программа нарисовала некую картинку. Как теперь от этой картинки избавиться?
PCLS

Arix
03.12.2018, 11:23
Да, картинка стирается, но экран становится светло-серым. И почему оператор COLOR вообще ни на что не влияет? Ввожу любые значения цветов, и ничего не меняется. На Суре оператор нормально работает.

Обнаружил, что для изменения цвета надо ввести PCLS. Но меняется только цвет фона (вторая цифра), на цвет символов это не влияет.

ivagor
03.12.2018, 12:13
Обнаружил, что для изменения цвета надо ввести PCLS. Но меняется только цвет фона (вторая цифра), на цвет символов это не влияет.
Второй параметр COLOR (цвет фона) вступит в действие после PCLS, а первый сказывается сразу, но не на цвете символов, а на цвете рисуемых графических объектов.

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


первый сказывается сразу, но не на цвете символов, а на цвете рисуемых графических объектов
Наверно четче и корректнее будет написать, что первый параметр COLOR подействует на следующие графические операторы.

Arix
03.12.2018, 15:05
Встречаю в программах:
REM и :REM.
В чём разница?
В обоих случаях операторы стоят в начале строки, например, 100 :REM.

Есть ли полное руководство по данному Бейсику? То, что я находил, это нарезки из книги "Знакомьтесь, персональная ЭВМ Корвет". Там, я так понимаю, далеко не всё.

svofski
03.12.2018, 15:45
Двоеточие -- разделитель операторов в одной строке. Похоже на то, что кто-то эстетствовал.

Arix
03.12.2018, 16:17
Двоеточие -- разделитель операторов в одной строке.
Это я знаю. А тут оператор первый и единственный в строке.
Я загрузил в Корвет программы с Суры, и там эти двоеточия сами появились перед REM'ами. Но не везде. Я их поудалял, так как побоялся, что это вызовет синтаксическую ошибку. Ведь двоеточия ставятся, если в строке несколько операторов. В книге про Корвет, в конце есть несколько довольно больших программ. Смотрю, там тоже двоеточия перед REM'ами. И опять же, в одних программах они есть, в других нет. Значит, это нормально, ошибки не будет.

ivagor
03.12.2018, 18:46
Поменять цвет символов в пзушном бейсике 2.0 можно так:


10 FOR I=8 TO 15
20 POKE &HFAFB,I+(цвет от 0 до 15)*16
30 POKE &HF771+I,I+(цвет от 0 до 15)*16
40 NEXT

Может есть штатный способ с помощью оператора или функции бейсика, но я его не знаю/не помню.

bars_z
04.12.2018, 12:22
Может есть штатный способ с помощью оператора или функции бейсика, но я его не знаю/не помню.

В Бейсике Корвета есть оператор LUT, который в качестве аргумента принимает целочисленный массив с указанием начального индекса. Массив должен содержать (начиная с указанного индекса) последовательность из 16 физических цветов, определяющих все 16 логических.

Например, если требуется задать один цвет текста для всех графических слоев, то можно сделать это так:



10 LET QL = 5 :REM Цвет текста
20 DIM P%[15] :REM Целочисленный массив из 16 элементов
30 FOR I=0 TO 7
40 P%[I] = I :REM Цвета графики не меняем
45 P%[I+8] = QL :REM Задаем цвет для всех АЦЗУ-шных цветов
50 NEXT
60 LUT P%[0] :REM применяем палитру, начиная с нулевого индекса массива


Вообще, весьма удобный оператор: можно задать в одном массиве все необходимые программе цветовые схемы и переключать их одной короткой командой в любой момент. Или делать всякие эффекты с затуханиями/мерцаниями, один раз рассчитав всю последовательность смены палитры, не занимаясь пересчетами и программированием порта LUT вручную.

ivagor
04.12.2018, 12:56
У оператора LUT есть недостаток (или наоборот достоинство, кому как). После синтаксической ошибки (например, случайно набрали что-то в строке и нажали ввод) цвета вернутся к исходным, а в моем варианте они изменятся "навсегда".

svofski
04.12.2018, 14:18
У оператора LUT есть недостаток (или наоборот достоинство, кому как).
Я смутно вспоминаю, как мы вредничали LUT-ом, делая наверное черный на черном. Хорошо, что спастись из такой ситуации было нетрудно.

bars_z
05.12.2018, 03:15
У оператора LUT есть недостаток (или наоборот достоинство, кому как). После синтаксической ошибки (например, случайно набрали что-то в строке и нажали ввод) цвета вернутся к исходным, а в моем варианте они изменятся "навсегда".

Это наоборот достоинство же )

Serebriakov
20.12.2018, 00:13
Как известно, в Корвете есть две половинки символов знакогенератора:

67389

Символы из первой половинки вывести в бейсике очень легко:
PRINT CHR$(код от 32 до 255)

Вопрос: можно ли как-то из бейсика переключиться на вторую половину знакогенератора? Может есть какие-нибудь управляющие символы или может возможно записать через POKE бит по какому-нибудь хитрому адресу для переключения?

Из стандартных управляющих символов мне известны:


PRINT CHR$(27);"3" - включение режима "32 cимвола в строке" - широкие символы
PRINT CHR$(27);"2" - включение режима "64 cимвола в строке" - стандартный режим
PRINT CHR$(27);"6" - инвертирование строки
PRINT CHR$(27);"7" - обратное инвертирование строки

ivagor
20.12.2018, 20:48
В Бейсике 2.0 есть штатные средства:
PRINTCHR$(27);"0" - основной знакогенератор
PRINTCHR$(27);"1" - альтернативный знакогенератор

В Бейсике 1.1 можно использовать POKE (в 2.0 они тоже сработают)
POKE&HFB3A,PEEK(&HFB3A)AND251 - основной знакогенератор
POKE&HFB3A,PEEK(&HFB3A)OR4 - альтернативный знакогенератор

Serebriakov
20.12.2018, 22:11
Круто! Большое спасибо! Давно хотел сделать тест знакогенератора на бейсике, но не знал как переключать знакогенератор.

Тогда еще вопрос. Заметил, что PRINT CHR$(код) не умеет выводить символы ниже 32. Нашел другой способ их вывода - писать через POKE напрямую в память АЦЗУ код символа.
Например: POKE &HFC00,2 - выведет смайлик c кодом 2 в верхний левый угол.
Адреса методом тыка нашел следующие: от &HFC00 (64512) - верхний левый угол экрана до &HFFFF (65535) - правый нижний.

Может быть существует какой-нибудь штатный способ их отрисовки (символов ниже 32)?


В Бейсике 2.0 есть штатные средства:
PRINTCHR$(27);"0" - основной знакогенератор
PRINTCHR$(27);"1" - альтернативный знакогенератор
Ни в дисковом, ни в пзу-шном Бейсике 2.0 такой способ почему-то не заработал.


В Бейсике 1.1 можно использовать POKE (в 2.0 они тоже сработают)
POKE&HFB3A,PEEK(&HFB3A)AND251 - основной знакогенератор
POKE&HFB3A,PEEK(&HFB3A)OR4 - альтернативный знакогенератор
Этим способом получилось. Очень интересно, как вы его нашли? Как нашли адрес в памяти и почему к нему применяются именно эти логические операции? Они накладывают какую-то определенную битовую маску? Действительно очень интересно.

ivagor
21.12.2018, 16:53
Ни в дисковом, ни в пзу-шном Бейсике 2.0 такой способ почему-то не заработал.
Могу только привести скриншоты из emu
67398673996740067401


Этим способом получилось. Очень интересно, как вы его нашли?
Есть техническая информация, например здесь (http://emuverse.ru/wiki/%D0%9A%D0%BE%D1%80%D0%B2%D0%B5%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D 0%BA%D0%B0%D1%8F_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0 %B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F). В данном случае нужно смотреть регистр VIREG, а конкретный бит можно понять по маске FONT1.

Arix
24.10.2019, 22:12
Как в графическом режиме вывести текст в нужном месте экрана? Не через LOCATE. То есть, не в определенном знакоместе, а привязать его к определенной точке экрана. Через LOCATE получается слишком дискретно, по высоте с шагом в 16 точек, а мне нужно 12. У Корвета слишком мало строк, всего 16, в то время, как у Суры - 24.На Суре я писал что-то вроде PRESET (120,50):PRINT"текст", и текст начинался от точки 120,50. Здесь это не проходит, текст всё равно выводится от левого края и по высоте с шагом 16 точек.
Короче, я делаю игру "Морской бой", вернее, адаптирую c Q-Basic (в котором я написал её ещё в 90-х). Два игровых поля - корабли противника и свои, между полями нужно написать цифры 1-9, 0, как на картинке:
70422
B Q-Basic'e клетки имеют размер 16х16 точек, на Суре - 8х8. А на Корвете приходится делать их 16х12, чтобы они были квадратными. А шаг текста по высоте 16 точек, цифры "убегают" вниз. Вроде, можно написать PRINT AT(координаты), но я не помню синтаксиса. В книге про Корвет я такого не нашёл.

marinovsoft
25.10.2019, 11:01
Писать свою процедуру вывода строк без использования АЦЗУ.

AlexS58
05.11.2019, 01:01
Ни в дисковом, ни в пзу-шном Бейсике 2.0 такой способ почему-то не заработал.
В "железе" должен работать. Не во всех эмулях работает. В SPCKorvet (Андроид) работает, в korvet-v09 работает, в VirtualKorvet не работает. В других не проверял.

Arix
14.12.2019, 19:14
Писать свою процедуру вывода строк без использования АЦЗУ.
Я решил легко выйти из положения. Просто нарисовать цифры операторами LINE. Пусть они будут квадратными или как на почтовом индексе. А потом я обнаружил оператор DRAW. Вместо нескольких LINE можно использовать один DRAW. Но Бейсик ругается: Ошибка синтаксиса. Я пишу правильно, как в книжке про Корвет. Даже буква в букву из примера, например, DRAW"E30R340F30",7. Ну что ему опять не нравится???

ivagor
14.12.2019, 19:44
В пзушных корветовских бейсиках оператора draw нет. Дисковые сейчас посмотреть не могу.

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

В дисковом (по крайней мере в в.2) DRAW есть

Arix
14.12.2019, 19:52
У меня дисковый версии 2.


Бейсик КОРВЕТ в.2.0
Москва
МикроДОС 1988

Это у меня, вроде как, самый новый Бейсик из имеющихся, 25472 байта.
Есть ещё 25832 и 25984 байта, там в конце файла строка с версией повторяется несколько раз. Но и в середине файлы BASIC.COM различаются. Надо будет их проверить.

ivagor
14.12.2019, 20:18
Как-то так

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


25472 байта
Скриншот именно из него.


самый новый Бейсик
Какой самый новый я не знаю, но есть 1991 года

Arix
14.12.2019, 22:22
Ни в какую! Набрал как у вас. Ошибка синтаксиса. В эмуляторе то же самое.
Скиньте мне пожалуйста свой BASIC.COM.

ivagor
15.12.2019, 06:10
Оказывается есть варианты бейсика такого размера, и с DRAW и без него. Похоже при разговоре о версиях стоит добавлять CRC

Arix
23.12.2019, 12:17
А с DRAW можно нарисовать и кругленькие циферки. Что я и сделал.

Arix
06.01.2020, 16:52
Возможно ли в Бейсике (не обязательно корветовском) получить код нажимаемой клавиши - не символа, а физической клавиши? Допустим, мне надо, чтобы выполнялось действие при нажатии определенной клавиши независимо от регистра и языка. Приходится лепить громоздкую конструкцию:

2040 IF X$="А" OR X$="а" OR X$="A" OR X$="a" THEN X=0:GOTO 2065
2042 IF X$="Б" OR X$="б" OR X$="B" OR X$="b" THEN X=1:GOTO 2065
и т.д.

То есть, перечислять четыре символа. А хотелось бы сократить до одного пункта, ведь физически это одна клавиша. Была мысль сделать защиту от промахов, чтобы всё срабатывало правильно, если пользователь по ошибке нажимает соседние клавиши, например, Ь или Ю вместо Б (используются только буквы от А до К, Ь и Ю - явная ошибка). Так надо будет перечислить 12 символов вместо трёх клавиш. Сделал, так Бейсик выдавал ошибку синтаксиса. Я решил, что слишком много OR, вернул как было. Потом оказалось, что я пропустил один OR. Но в такой длинной строке и не разглядел этого. )

ivagor
06.01.2020, 18:40
Можно читать прямо из портов клавиатуры. Например клавишу с латинской A можно проверить так
PEEK(&HF801)AND2
Не поручусь, что во всех бейсиках используется конфигурация с клавиатурой по адресам F800-F9FF, но скорее всего это именно так.

svofski
06.01.2020, 23:07
2042 IF X$="Б" OR X$="б" OR X$="B" OR X$="b" THEN X=1:GOTO 2065
А у этого бейсика есть INSTR() ?

IF INSTR("БбBb", X$)>0 THEN X=1:GOTO 2065

Arix
07.01.2020, 00:03
А у этого бейсика есть INSTR() ?
Есть! И на Корвете, и в BASICA.COM. Думаю, и в Q-Basic должно быть. Спасибо!
Ещё немного оптимизирую код.

ivagor
07.01.2020, 09:17
ведь физически это одна клавиша
две клавиши

TomaTLAB
07.01.2020, 09:36
Думаю, и в Q-Basic должно быть. Бггг... ну нашли с чем сравнить, еще бы VB вспомнили. Или PDS

Arix
07.01.2020, 11:13
Просто я делаю игру "Морской бой" в разных Бейсиках. Когда-то, ещё в 90-х, сделал её в Q-Basic. На работе был 386-й, работа была - дежурство, делать было особо нечего. Вот и игрался. Потом адаптировал её для своей "Суры", теперь, вот, для Корвета, для Basic в PC-DOS. Скоро её выложу где-нибудь во всех вариантах.
71183

Я читал такую байку. В одной школе в компьютерном классе стояли "Корветы". А в соседнем кабинете - Макинтоши. Учащиеся изучали информатику на Корветах, к Макам их не пускали. А им, конечно же, очень хотелось. Ну, и они придумали способ. На Корветах в Бейсике запускали бесконечный цикл, типа 10 GOTO 10. И они перегревались и выходили из строя. В итоге рабочих Корветов не осталось, а информатику изучать-то надо. Пришлось пересадить всех за Макинтоши.
Так вот, реально ли таким способом вывести Корвет из строя? Я всё же думаю, что это байка. Бесконечные циклы в Бейсике встречаются часто. У нас в школе были УКНЦ, мы тоже, чтобы "зафиксировать" картинку, нарисованную в Бейсике, писали в конце программы 1000 GOTO 1000. Мне товарищ говорил, что так нельзя делать, машинка мучается. Надо через INKEY. Так INKEY тоже вводит машину в бесконечный цикл, пока что-нибудь не нажмёшь!

TomaTLAB
07.01.2020, 11:40
Так INKEY тоже вводит машину в бесконечный цикл, пока что-нибудь не нажмёшь!Ты издеваешся?! Как Васик работает в курсе?
Или пограммист?!

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

извините, господа, "был напуган"

Arix
07.01.2020, 12:59
Что тебя так напугало? Если я не прав, можно сказать спокойно и вежливо, мол, ты заблуждаешься. И спокойно объяснить, в чём я заблуждаюсь, и как оно на самом деле.
Зачем так резко? В оффлайне тоже общаешься в таком стиле?

10 IF INKEY$="" THEN 10

Ничего не нажато - возврат на строку 10 и так непрерывно. Нажато - пошли дальше. Разве не так?

ivagor
08.01.2020, 08:26
две клавиши
Пардон, на реале все же одна, т.е. мое предложение тоже соответствует условиям задачи

Arix
08.01.2020, 14:38
А я ломал голову! :) Как это две? Замыкается же одна пара контактов. Да, в эмуляторе из-за другой раскладки РС-шной клавиатуры будут две клавиши. Но я-то работаю на реале.
Кстати, на счет "не реала". Что-то мой "Морской бой" не хочет работать ни в одном эмуляторе. Хотел увидеть его в цвете и настроить цвета. Ибо в книге про Корвет я так и не нашёл, какой номер какому конкретному цвету соответствует. На ч/б мониторе всё хорошо, а в цвете может получиться что-то вырвиглазное.
Эмуляторы winbeta9newyear и kdbg - при запуске пустой черный экран, выйти невозможно ни из программы, ни из Бейсика. Приходится ресетить эмулятор. Простейшая программка, выводящая цветные прямоугольники, работает. b2m, emu, VirtualKorvet - текст выводится нормально, а графики нет. Даже программа с одной строкой и оператором LINE ничего не выводит. В ПЗУ-шных Бейсиках графика выводится.
На реале, естественно, всё работает нормально.

ivagor
08.01.2020, 14:57
Про цвета можно почитать например здесь (http://emu80.org/dev/dev_k.html):

; При записи в LUT биты D0...D3 задают номер одной из 16
; строк таблицы, а D4...D7 - содержимое этой строки.
; D3 соответствует АЦЗУ, D2 - слою ГЗУ #2, D1 - слою #1,
; D0 - слою #0; D7 задает интенсивность (яркость),
; D6 - наличие красного цвета, D5 - зеленого цвета, D4 -
; синего цвета.
Про несовпадение работы реала и эмулятора это, конечно, к авторам эмуляторов, но без конкретных примеров они вряд ли что-то смогут исправить/доработать.

ivagor
11.01.2020, 08:56
b2m, emu, VirtualKorvet - текст выводится нормально, а графики нет. Даже программа с одной строкой и оператором LINE ничего не выводит.
Emu (b2m), дисковый бейсик

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

Или так

Arix
12.01.2020, 00:30
Оффтоп-сообщения откусил в профильную тему онлайн-эмулятора: https://zx-pk.ru/threads/26877-online-emulator-(js-html).html?p=1041899&viewfull=1#post1041899
---Serebriakov

Итак, с онлайн-эмулятором получилось. Нет графики. Но! Во всех эмуляторах она появляется на мгновение в момент перезагрузки.


Emu (b2m), дисковый бейсик
Ваш пример работает. А мой - нет. Текст есть, графики нет, хоть тресни.
Такая же фигня: при нажатии Reset в эмуляторе картинка на мгновение появляется.

Нашёл! Виноват оператор SCREEN 2. Я так понимаю, на Корвете он лишний, ведь здесь графический и текстовый режимы работают одновременно. Я уже это подозревал, удалял этот оператор, но ничего не менялось, однако в момент перезагрузки картинка мелькала. Дальше я обнаружил, что если загрузить программу, сразу удалить SCREEN 2, и только потом её запускать, картинка есть. Но если хоть раз запустить программу со SCREEN 2, картинки не будет до перезагрузки. Потом оказалось, что достаточно дать команду SCREEN 0, и картинка появится.
Всё! Моя программа нормально заработала во всех эмуляторах.
Однако же, реалу этот SCREEN 2 как-то по барабану.

ivagor
13.01.2020, 08:16
Однако же, реалу этот SCREEN 2 как-то по барабану.
Это не ошибка эмуляции, дело в разном количестве видеопамяти, поддерживаемой в эмуляторах (как правило 3x64 Кб) и на большинстве реалов (3x16 Кб). В конфиге emu можно закомментировать (поставить минус в начале строки) две строки
- portC[0-1]=vid.page
- portC[6-7]=mmgraph.page
и screen перестанет влиять на отображаемую (и используемую для рисования) страницу, как и на большинстве реалов.

shapipovo
16.05.2020, 16:01
Есть у кого нибудь полное описание BASIC?

Serebriakov
16.05.2020, 16:09
Есть у кого нибудь полное описание BASIC?
Более-менее полное описание есть в книге "Знакомьтесь: персональная ЭВМ Корвет":
https://yadi.sk/d/Ho6Rh8Ri2c0s4
Если нужно шастать по системным портам Корвета, адреса есть здесь (http://emuverse.ru/wiki/%D0%9A%D0%BE%D1%80%D0%B2%D0%B5%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D 0%BA%D0%B0%D1%8F_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0 %B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F).
Ну и читайте эту тему с начала - много полезных команд.

Sancho45
22.05.2020, 10:18
Кто подскажет, как в бейсике можно передать управление шестнадцатеричному коду ?

ivagor
22.05.2020, 10:57
Если речь про вызов кодовой подпрограммы с указанием ее адреса в шестнадцатеричном виде, то примерно так
10 DEF USR0=&H8000
20 A=USR0(0)

Sancho45
22.05.2020, 11:40
Работает. Проверил, как корвет 96кб пзу поддерживает)...

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

если есть интерес, могу отписаться, что да как...

Serebriakov
24.05.2020, 21:36
если есть интерес, могу отписаться, что да как...
Интересно, пилите, Шура, пилите ;)

Arix
08.08.2024, 21:44
Лежали у меня четыре кассеты для Корвета. Я думаю, о них тут все в курсе. Лежали себе и лежали. Красивые! Благодаря проснувшейся у меня ностальгии по тёплому аналоговому звуку, появилась возможность не только любоваться этими кассетами (точнее, их обложками), но и дать их послушать Корвету. Я загружал программы и тут же сохранял их на дискету. Но вот, незадача. Когда я стал их запускать, выяснилось, что ни в одной программе не работает управление курсорными стрелками. Либо никакой реакции на эти клавиши, либо печатаются кракозябры. А так же программы в машинных кодах не запускаются по команде LOAD"CAS:...",B,R. Загружаются, а дальше или ничего не происходит, или происходит выход в СР/М.
Но при этом в ПЗУ-шном Бейсике всё прекрасно работает, программы в кодах нормально запускаются. В ПЗУ у меня Бейсик 1,1. Дисковый - 2,0. На кассетах написано: "Язык программ - Бейсик вер. 1,1. Может ли дело быть в этом? Я думал, здесь есть обратная совместимость. Нашёл дисковый Бейсик 1.0, надо будет проверить на нём.

Попробовал Бейсик 1,0 с диска - тоже не работает. Так в чём дело??

AlexS58
13.08.2024, 14:15
В ПЗУ у меня Бейсик 1,1. Дисковый - 2,0
Бейсик 1.1 на ОПТС 1.1? Возможно, дисковый 2.0 не очень совместим с ОПТС 1.1...
Ой... А LOAD"CAS:...",B,R (собственно LOAD"CAS) в дисковом работает?

Загружаются, а дальше или ничего не происходит, или происходит выход в СР/М.
Ага-а.. Значит работает. Может в ПЗУ-шном и дисковом конфигурации памяти разные?

Проверил, действительно разные.. ОПТС 2.0:
Бейсик 2.0 (ПЗУ):
команда: PRINT HEX$(PEEK(&HF703))
результат: 40
(BASIC EQU 40H ; ПЗУ 24к, ОЗУ с 6000 по F7FF, область УВВ с F800 по FFFF)
Бейсик 2.0 (CP/M-80 v.2.2, BIOS v.2.1):
команда: PRINT HEX$(PEEK(&HF703))
результат: 1C
(ODOSA EQU 1CH ; Конфигурация для ОС CP/M: озу с 0 по F7FF, область УВВ с F800 по FFFF)

Arix
14.09.2024, 12:06
Может в ПЗУ-шном и дисковом конфигурации памяти разные?
Вот, я так и подумал.
81287
Сам Бейсик - одинаково. А вот, устройства ввода-вывода - по разному. Видимо, в этих программах используется прямое обращение к ним. Теоретически, можно изменить адреса, но нужно знать, на какие. И как же дисковый Бейсик работает без ГЗУ?

Прикрепленное изображение получается очень мелким, продублировал на ibb:

https://i.ibb.co/LvvJvdt/image.png (https://imgbb.com/)

AlexS58
16.09.2024, 22:25
Прикрепленное изображение
Первая табличка отчасти верна, это конфигурация ODOSA (1CH) - тут лучше посмотреть распределение памяти CP/M-80 или МикроДОС, там подробнее расписано.
Вторая табличка верна НО не та... Это конфигурация BASG (60H), а из копии системного регистра (по адресу F703H) читается значение 40H, т.е. это конфигурация BASIC.
Кстати, пробовал напрямую прочитать из системного регистра (FA7FH) - фонарь - читается FFH, видимо он W/O.
И, кстати, конфигурации ODOSA (1CH) и BASIC (40H) очень похожи.
Наверное, просто по мере необходимости в программах переключаются конфигурации памяти - это по-поводу использования графики (или электронного диска).


ни в одной программе не работает управление курсорными стрелками. Либо никакой реакции на эти клавиши, либо печатаются кракозябры.
Это в Бейсик-программах? И в ПЗУ-шном и в дисковом одинаково?
Смотрел только одну SORM. В строке
1002 POKE &HF730,0
выключается NumLock (описание этой ячейки - F730H - неоднозначно и противоречиво), и дальше
1004 UP$=CHR$(&H19)
1005 DOWN$=CHR$(&H1A)
1006 LFT$=CHR$(&H8)
1007 RGHT$=CHR$(&H18)
блииииииин... все это нужно выяснять методом проб и ошибок (научного тыка)

LeoN65816
17.09.2024, 13:27
Кстати, пробовал напрямую прочитать из системного регистра (FA7FH) - фонарь - читается FFH, видимо он W/O.
По схеме он Write Only, D22 ТМ9.

Arix
01.10.2024, 21:48
Это в Бейсик-программах? И в ПЗУ-шном и в дисковом одинаково?
Нет. В ПЗУ-шном нормально.
Вот, засада-то! Имея дисководы, я вынужден грузиться с магнитофона! Надо как-то адаптировать эти программы. Где бы найти подробную информацию, какие ячейки памяти за что отвечают. Программы сохранены на дискете, надо теперь пересохранить их в виде текста и перенести в Windows. Я могу их тут выложить.

AlexS58
06.10.2024, 18:16
Где бы найти подробную информацию, какие ячейки памяти за что отвечают.
Вот из книжки по МикроДОС 2.6
https://i.ibb.co/K796pWb/01.jpg (https://ibb.co/d6QBwDj)

https://i.ibb.co/cY4z40r/02.jpg (https://ibb.co/mNfQfkc)

https://i.ibb.co/yXThC8t/03.jpg (https://ibb.co/nb23yD9)

https://i.ibb.co/SQ0tbNS/04.jpg (https://ibb.co/yh56t02)

https://i.ibb.co/f0J47bL/05.jpg (https://ibb.co/12c8x3j)

https://i.ibb.co/tYWVCGh/06.jpg (https://ibb.co/KV3TyPG)

https://i.ibb.co/dbD70MM/07.jpg (https://ibb.co/ZHxN6XX)

https://i.ibb.co/t4DmckY/08.jpg (https://ibb.co/xD6CGPz)

https://i.ibb.co/x5Qqh3h/09.jpg (https://ibb.co/w61hyYy)

https://i.ibb.co/M5cq6SJ/10.jpg (https://ibb.co/yB6LSPx)
На 267-й странице конфигурация ODOSA (1CH), на 268-й - BASIC (40H)

Программы сохранены на дискете, надо теперь пересохранить их в виде текста и перенести в Windows. Я могу их тут выложить.
В Emu80 из дискового Бейсика командой LLIST, включив захват вывода на принтер.

Заметил, что в дисковом Бейсике значения функциональных клавиш (последовательности) в МикроДОС и CP/M разные. Отсюда вывод: затык с клавишами управления курсором из-за среды, в которой "крутится" Бейсик. Возможно, Ваша CP/M поковыряна уже или... ч*** его батьку знает... ПЗУ-шный Бейсик копирует таблицы системной страницы в адрес F600 из образа в ПЗУ. А в операционках эти таблицы включены в сами образы систем на дискетах и, естессно, загружаются с осью. Кстати, эти таблицы можно подправить с помощью программы "CP/M-80 Дисковый редактор v2.2 (C) Вадим Александров" (DE2.COM)

Arix
06.10.2024, 22:04
Вот эти программы: https://disk.yandex.ru/d/1h1BpDZ0sRONMQ
С расширением ТХТ - программы сохранены в текстовом формате, можно просматривать в Блокноте и т.п. Только надо, чтобы текстовый редактор поддерживал кодировку KOI8R.


Заметил, что в дисковом Бейсике значения функциональных клавиш (последовательности) в МикроДОС и CP/M разные.
У меня они вообще в дисковом Бейсике выдают команды СР/М, а не Бейсика.

AlexS58
07.10.2024, 19:50
У меня они вообще в дисковом Бейсике выдают команды СР/М, а не Бейсика.
Я ж об этом и написал, что таблицы последовательностей загружаются вместе с ОС. Т.е. они часть образа ОС на дискете..
И таблицы эти в МикроДОС соотвествуют Бейсиковским, а в CP/M - свои.
Да впринципе, "слизать" эти таблицы из ПЗУ-шного Бейсика и вкорячить в образ ОС - не проблема.

Если есть возможность, сделайте KDI-образ своей дискеты с CP/M и выложите, посмотрю.

Это мои извраты :)
81375

С клавиатурой разобрался, способов править эти таблицы много. Но так, чтобы сразу и без извратов заработали клавиши стрелок - очень просто. Я эту дискету "собирал" давно и уже и подзабыл что там и для чего. Там есть прожка FDOP.COM, скопируйте на свою дискету. В ней нужно выбрать пункт "СТАНДАРТ МИКРОДОС". Дальше бейсик и т.д.


Надо как-то адаптировать эти программы.
А что.. вариант! Подумаю...

Заработало!!! Экпериментировал с программой SORM, нужно добавить строки (делают то же, что и FDOP.COM, теперь можно без него):

20 GOSUB 60000
60000 REM FDOP FIX
60010 FOR I=0 TO 83
60020 READ FDOP
60030 POKE &HF6A0+I, FDOP
60040 NEXT I
60050 RETURN
60500 DATA 11, 0, 255, 255, 255, 255
60501 DATA 23, 0, 255, 255, 255, 255
60502 DATA 26, 0, 255, 255, 255, 255
60503 DATA 21, 0, 255, 255, 255, 255
60504 DATA 8, 0, 255, 255, 255, 255
60505 DATA 16, 0, 255, 255, 255, 255
60506 DATA 24, 0, 255, 255, 255, 255
60507 DATA 12, 0, 255, 255, 255, 255
60508 DATA 25, 0, 255, 255, 255, 255
60509 DATA 4, 0, 255, 255, 255, 255
60510 DATA 30, 0, 255, 255, 255, 255
60511 DATA 29, 0, 255, 255, 255, 255
60512 DATA 28, 0, 255, 255, 255, 255
60513 DATA 31, 0, 255, 255, 255, 255

AlexS58
10.10.2024, 18:57
И таблицы эти в МикроДОС соотвествуют Бейсиковским
Пардон, тут ошибся: в самом образе МикроДОС этих таблиц нету, видимо с целью экономии, по-видимому просто копируются из ПЗУ..
Да и все пляски с бубном оказались лишними, - есть готовые утилиты FDOP.COM и FKEY.COM.

Arix
10.10.2024, 22:15
AlexS58, спасибо! Теперь программы с этих кассет заработали как надо, я с ними поигрался. А как пользоваться программой FKEY.COM? Она требует файл, я пытался подкинуть ей FKEY.EDT с вашей дискеты, она пишет "invalid file format". Как его тогда самому создать? В программе ведь есть функция сохранения настроек. И что-то у меня не получается запрограммировать клавиши в самом Бейсике. Например, хочу повесить RUN на F5. Как только не пробовал!
KEY 5 RUN
KEY 5 "RUN"
KEY 5,RUN
KEY 5,"RUN" (на Суре так)

В описании нигде не нашёл синтаксиса этой команды.

Arix
12.10.2024, 17:08
Если запускать Бейсик из-под Микродоса, эти программы нормально работают. Вон в чём дело! Однако, почему-то из-под Микродоса не получается запустить Бейсик с диска В. Я перехожу на диск В, пишу "BASIC", начинает шуршать диск В, потом зачем-то идёт обращение к диску А, и выдаётся сообщение: "неверная команда или имя файла". При второй попытке экран становится более светлым, и всё зависает.

AlexS58
13.10.2024, 10:30
А как пользоваться программой FKEY.COM? Она требует файл, я пытался подкинуть ей FKEY.EDT
FKEY.EDT - ее служебный, наверное. Нужны файлы с расширением KEY. На дискете есть BAS.KEY и CPM.KEY. Запуск FKEY.COM без параметров выдаст краткую справку по параметрам.
Ой, у меня в CPM.KEY - не стандартные функ. клавиши CP/M.
FKEY BAS - загрузка таблицы функциональных клавиш Бейсика и дополнительных клавиш.
FKEY BAS /E - редактирование файла BAS.KEY
Параметр /S описан как save on system disk, наверное из файла запишет в образ CP/M на дискете и при последующих загрузках системы клавиши будут уже заданы. (не в МикроДОС - в самом образе на дискете таблиц не обнаружил)
Если указать несуществующий файл без параметров, - ругнется, если с параметром /E - создаст его и можно задать свои последовательности.
С помощью этой утилиты легко быстро переопределять функциональные и дополнительные клавиши из готовых KEY-файлов но жутко неудобно их редактировать.

KEY 5 RUN
В Корветовском Бейсике такой команды нету, можно таким же способом как в моей подпрограмме, только адрес таблицы функ. клавиш начинается с &HF600 и по 16 байт на клавишу. Напомню, что дополнительные (стрелки) - с адреса &HF6A0 - по 6 байт.


почему-то из-под Миродоса не получается запустить Бейсик с диска В
Диск В с CP/M? Хотя проверил, - и каталог читается командой D и Бейсик запускается и в Бейсике FILES каталог читает..

AlexS58
13.10.2024, 12:42
Можно и так:

Запускаем DE2:

https://i.ibb.co/Ns6Sq6M/2024-10-13-11-33-01.png (https://ibb.co/rmGshGV)

Открываем 5-й блок (клавиша TAB - переключение между HEX и KOI8) и правим вручную:

https://i.ibb.co/mHdnfyh/2024-10-13-11-35-56.png (https://ibb.co/RCtXR6Q)

https://i.ibb.co/WtdZsLN/2024-10-13-11-37-27.png (https://ibb.co/fvKfQsV)

А можно и так: скопировать 244 байта (обе таблицы) из образа в образ; или выборочно: первые 160 байт - функциональные, дальше 84 байта - дополнительные.
(Файл rom1.bin из эмулятора Emu80):

https://i.ibb.co/hKPJdNL/2024-10-13-11-44-53.png (https://ibb.co/wK9FQqB)

https://i.ibb.co/rxGpnWZ/2024-10-13-11-45-09.png (https://ibb.co/48ZSBQj)
Каждая последовательность ограничивается байтом 00h!!!

Arix
14.10.2024, 18:55
Диск В с CP/M? Хотя проверил, - и каталог читается командой D и Бейсик запускается и в Бейсике FILES каталог читает..
В Микродосе. Похоже, несовместимость. Бейсик, который работает в СР/М, не работает в Микродосе и наоборот так же. Да и сам Микродос 2,6 какой-то глюкавый. Например, хочу переименовать файл, ввожу: "5 BASIC.COM BASIK.COM". Не ругается, возвращает в командную строку, но ничего не делает. Даже обращения к диску не происходит. Надо попробовать Микродос 3,1 записать. Зато в нём есть функции копирования с магнитофона на диск и обратно. Надо будет пропробовать. А то на этих кассетах есть программы "в кодах", копировать их из-под Бейсика - адреса не указаны.

AlexS58
18.10.2024, 21:04
хочу переименовать файл, ввожу: "5 BASIC.COM BASIK.COM".
https://i.ibb.co/2FCgs8D/2024-10-18-20-31-44.png (https://ibb.co/S6MRdQh)

https://i.ibb.co/yQLcCzv/2024-10-18-20-34-54.png (https://ibb.co/wzDFqnG)

Как-то так... НО!!! на этой дискете имена файлов не оригинальные!!! Некоторые я переименовывал для себя - для удобства:
Мое: - Стандарт:
DEL.COM - ERAQ.COM
DIR.COM - HDIR.COM
REN.COM - RENA.COM

Похоже, несовместимость. Бейсик, который работает в СР/М, не работает в Микродосе и наоборот так же
Странно... Не замечал, - вроде все гладко..

Надо попробовать Микродос 3,1 записать.
А вот отсюда поподробнее...
---------------------------------------------------------------------------------------------------------------------------------------------------
А как Вам такое?..
https://i.ibb.co/HG4tvQj/2024-10-18-21-42-49.png (https://ibb.co/44t8yxH)

https://i.ibb.co/hfBDQx7/2024-10-18-21-48-27.png (https://ibb.co/gVSzqbj)

https://i.ibb.co/tsNPy9f/2024-10-18-21-55-40.png (https://ibb.co/R0M4Lqn)

https://i.ibb.co/w64Gxk3/2024-10-18-22-14-06.png (https://ibb.co/h8VQt6h)

Arix
25.10.2024, 22:51
Как-то так...
А у меня Микродос НИИСЧЕТМАШ 30.04.87. На REN он ругается. А на 5 не ругается, но и ничего не делает. Старое и новое имя я менял местами и так и эдак.

Из руководства (со всеми опечатками):

5 [V:]И1.Т1 И2.Т2 - переименовать файл с именем И1.Т1 на диске V:
или на текущем диске, если V: не указано. айлу
присваивается новое имя И2.Т2.

Вообще ни одна цифровая команда не работает.

Скачал Микродосы 3,1 со Старого ДОСа, смотрю системные дорожки, а там вообще 1983-й год. И вот, есть 2,6 -КОРВЕТ ПК8020
НИИСЧЕТМАШ 30.06.88. Судя по всему, тот же, что на ваших скринах. Завтра попробую записать его.

Записал МикроДОС 2,6. Корвет с него не грузится. WTF?? Диск записывается правильно, я снял образ с записанной дискеты и сравнил с оригиналом - файлы одинаковы. https://disk.yandex.ru/d/tkbYkd642B1Mhw
AlexS58, вы не могли бы выложить образ своего диска с Микродосом? Который у вас на скрине: НИИСЧЕТМАШ 30.06.88.
То, что вы до этого выкладывали, это СР/М.

Ну ничего себе! Эмулятор с этого диска грузится!
Дисковод исправен, дискета хорошая.

Хотел записать Микродосы 3.1, а они в формате FDD. Winimage их не открывает. Фиг знает, чем их писать. Хотел пересохранить в KDI через Steinblume, он сохраняет только в исходном формате. Обложили со всех сторон!

AlexS58
26.10.2024, 22:30
Как бы нас модер не попер из темы за офф-топ...


Судя по всему, тот же, что на ваших скринах...
вы не могли бы выложить образ своего диска с Микродосом? Который у вас на скрине: НИИСЧЕТМАШ 30.06.88.
Могу но то-ли интуиция, то-ли внутренний голос шепчут, что у Вас он не загрузится.. 81464
Ок, перевыложу оригинальный архив с четырьмя образами МикроДОС (скачивал откуда-то отсюда :) ) 81463
К огроменному сожалению у меня нету Корвета, приходится довольствоться эмулями.. да еще и под Линуксом.. Так что, у меня ситуация еще печальнее чем у Вас. Далеко не все работает (корректно) в эмулях..
НО... Есть и плюсы:- выбор вариантов Корвета - версии ОПТС, объем ГЗУ..
Кстати, в этом (версии ОПТС) могут быть проблемы с незапуском МикроДОС. Опишите конфигурацию своего Корвета.


Микродос НИИСЧЕТМАШ 30.04.87. На REN он ругается.
В МикроДОС нету команды REN (я же писал об этом под скринами,- это я для себя переименовывал стандартные утилиты), как в CP/M, так и в МикроДОС есть резидентные и транзитные (загружаемые с системного диска) утилиты. Причем в разных системах есть существенные отличия в именах этих утилит (команд). Например,: в CP/M "DIR" (с параметрами или без), в МикроДОС "D" (с параметрами или без)...
Для переименования файлов в МикроДОС есть транзитная (дисковая) утилита RENA.COM.

Ок, грею сканер.....
https://i.ibb.co/n7dFV7n/01.jpg (https://ibb.co/y6vrM6Y)
https://i.ibb.co/gjs2bSQ/02.jpg (https://ibb.co/SsqjDtH)
https://i.ibb.co/8zvH3QT/03.jpg (https://ibb.co/M8wmTJW)
https://i.ibb.co/S7w2W6X/04.jpg (https://ibb.co/dJ4S1f0)
https://i.ibb.co/4YZm8Kx/05.jpg (https://ibb.co/k9gH45F)
https://i.ibb.co/bPSsKhb/06.jpg (https://ibb.co/37DpCXR)
https://i.ibb.co/Chzn4HZ/07.jpg (https://ibb.co/72XGB15)
https://i.ibb.co/6HbPG68/08.jpg (https://ibb.co/7nVWB7Q)
https://i.ibb.co/kqLhh48/09.jpg (https://ibb.co/dkNQQP2)
https://i.ibb.co/hdJX7jg/10.jpg (https://ibb.co/ykchf1N)
https://i.ibb.co/XCvTtqV/11.jpg (https://ibb.co/x7RQ6N3)
https://i.ibb.co/FJPk9y9/12.jpg (https://ibb.co/92MmJ1J)
https://i.ibb.co/hV7c3Th/13.jpg (https://ibb.co/1TvMF4h)
https://i.ibb.co/ss3hph1/14.jpg (https://ibb.co/HGg0L0P)
https://i.ibb.co/SN3MnN4/15.jpg (https://ibb.co/qBrcsB3)
https://i.ibb.co/6wFPQqJ/16.jpg (https://ibb.co/kBX8ZP6)
https://i.ibb.co/7NkswG0/17.jpg (https://ibb.co/rfdDCZX)
https://i.ibb.co/MZcw20J/18.jpg (https://ibb.co/9cbK85d)
https://i.ibb.co/87NQQ1b/19.jpg (https://ibb.co/tJQ11Vz)
Кстати, в Бейсике (дисковом) у команды FILES (у LFILES аналогично) есть неприятная особенность:
FILES - работает,
FILES "A:" - ругается,
FILES "A:*.*" - работает.

AlexS58
27.10.2024, 00:41
То, что вы до этого выкладывали, это СР/М.
Верно.
Еще: 81465
Загрузитесь и сразу:
BASIC SORM
клавиши - стрелки будут работать "из коробки" :)

Arix
27.10.2024, 18:21
Могу но то-ли интуиция, то-ли внутренний голос шепчут, что у Вас он не загрузится..
Точно, не загрузится. Системные дорожки одинаковые. У меня ОПТС 1.1, а в эмуляторе 2.0. Неужели это так критично? Вот, засада-то! Не ОПТС, а УПС! :)
Да, а в книжке я вычитал, что команды 2 - 9 резервные и не работают. А эта книжка вообще есть в электронном виде?
Может, и с Бейсиками глюки из-за ОПТС?
Вот, есть программа BPR.BAS. Запускаю, рисует картинку. Потом, при нажатии любой клавиши: "Ошибка синтаксиса в строке 100". Загружаю её заново,

100 LAB$=INKEY$:IF LAB$="" THEN 100

После запуска получается

100 LAB$=INKEY$:IF LAB$=" щ 100

И ещё с двумя программами было так. Программы сами себя портят? Как такое может быть? Вроде, раньше они нормально работали. Я с ними ничего не делал. Сегодня запустил эту ВРR - три раза нормально запустилась, потом опять строка 100 пошла. Это вообще какой-то полтергейст! Программа то работает, то не работает, то глючит, то нет.

В Бейсике 1988 из-под СР/М она нормально работает. У меня подозрение на перегрев, раз сразу после включения компьютера программа работала. Погонял его ещё минут 20, в 1988-м программа нормально работает. Кстати, в Микродосе контрастность изображения хуже, чем в СР/М.

AlexS58
27.10.2024, 20:39
У меня ОПТС 1.1, а в эмуляторе 2.0. Неужели это так критично?
Наверное.. В архиве с четырьмя образами МикроДОС три файла mdos1_*.kdi и один mdos2_*.kdi. Если память не глючит, то там, откуда скачивал (с этого же форума, с ветки по Корветам) упоминалось, что с единичкой - под ОПТС 1.1, с двойкой - под ОПТС 2.0.

Да, а в книжке я вычитал, что команды 2 - 9 резервные и не работают
С моих сканов? Вот, "не долистал":
https://i.ibb.co/yPmycMR/1.jpg (https://ibb.co/F3kwLfW)
https://i.ibb.co/tYFv2Zh/2.jpg (https://ibb.co/c2VZ8bv)

А эта книжка вообще есть в электронном виде?
Увы :( Вроде кто-то обещал оцифровать и выложить всю документацию.. Но Вы же видели мои сканы, наверное это очень трудоемко..

Программы сами себя портят? Как такое может быть?
На реальном или в эмулях? В Emu80 под Linux Mint столкнулся с пробремой, что разрушаются образы *.kdi

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


Вот, есть программа BPR.BAS. Запускаю, рисует картинку. Потом, при нажатии любой клавиши: "Ошибка синтаксиса в строке 100". Загружаю её заново,
Как, на (в) чем, откуда??

Arix
27.10.2024, 21:09
Вот, "не долистал":
На странице 67: "2,3,4,5,6,7,8,9 - не вызывают никаких действий".


На реальном или в эмулях?
На реальном. Дисководы исправны, дискеты хорошие, ведь программы нормально загружаются.


Как, на (в) чем, откуда??
На реале, в Бейсике Микродос 1985. Из-под Микродоса. В 1988-м Бейсике из-под СР/М всё нормально.

AlexS58
27.10.2024, 21:23
На реальном. Дисководы исправны, дискеты хорошие, ведь программы нормально загружаются.

На реале, в Бейсике Микродос 1985. Из-под Микродоса. В 1988-м Бейсике из-под СР/М всё нормально.
Странно. Выходит, что МикроДОС глючный?.. Или Бейсик? Может, в программах есть POKE куда нельзя :) Хотя, если "под СР/М всё нормально.".. Системы-то только частично совместимы на уровне БДОС (у МикроДОС функций больше да и совпадающие могут неодинаково работать - нужно курить мануалы).

Arix
27.10.2024, 22:39
Если бы эта ошибка была всегда. А то, через раз. И это меня сильно пугает. Микродос - не Windows, Бейсик - не современная среда программирования на гигабайты, чему там глючить в 10 кб кода? Оно может или работать или не работать, либо всегда в одинаковых условиях выдавать один и тот же косяк. Я подозреваю аппаратные проблемы. Завтра включу его и, пока он холодный, позапускаю эти программы.

AlexS58
28.10.2024, 19:30
Если бы эта ошибка была всегда. А то, через раз. И это меня сильно пугает. Микродос - не Windows, Бейсик - не современная среда программирования на гигабайты, чему там глючить в 10 кб кода? Оно может или работать или не работать, либо всегда в одинаковых условиях выдавать один и тот же косяк. Я подозреваю аппаратные проблемы. Завтра включу его и, пока он холодный, позапускаю эти программы.
Тогда как же

В 1988-м Бейсике из-под СР/М всё нормально.

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


У меня ОПТС 1.1, а в эмуляторе 2.0. В некоторых эмулях можно "собрать" конфигурацию похожую на Ваш реал и попробовать погонять софт в эмуле..

Arix
30.10.2024, 23:00
Тогда как же
Это обнадёживает. Запускал разные игрушки, в т.ч., из-под этого Микродоса, надолго оставлял комп включенным, всё нормально.
Я записал Микродос из образа mdos1_870430.kdi. В этой программе так же вылезает синтаксическая ошибка в строке 100. Пока эксперименты прекращаю, т.к. уезжаю в командировку.

AlexS58
03.11.2024, 22:07
Наткнулся:

Микродос датированый 1990-01-05

Он есть в \OS\DOS_LAYOUTS\microdos
mdos2_900105_START.kdi.idb
mdos2_900105_ROM1.kdi.idb
mdos2_900105_ROM2.kdi.idb

он сам по себе забавен, он работает и на ОПТС1 и на ОПТС2
и нашел: 81509 (4 дискеты)
Бейсик в нем такой же как на дискетах mdos2_880630_1.kdi и CPM-80_000.kdi
https://i.ibb.co/C7tnZjG/2024-11-03-20-30-03.png (https://ibb.co/BZPgxhM)
https://i.ibb.co/Fgjjt5N/2024-11-03-20-30-23.png (https://ibb.co/KF33H2R)
https://i.ibb.co/ZLf6LkT/2024-11-03-20-31-10.png (https://ibb.co/r7QG71y)
https://i.ibb.co/NY6qhqY/2024-11-03-20-31-23.png (https://ibb.co/w6NqHq6)

AlexS58
09.04.2025, 01:38
Тогда еще вопрос. Заметил, что PRINT CHR$(код) не умеет выводить символы ниже 32. Нашел другой способ их вывода - писать через POKE напрямую в память АЦЗУ код символа.
Например: POKE &HFC00,2 - выведет смайлик c кодом 2 в верхний левый угол.
Адреса методом тыка нашел следующие: от &HFC00 (64512) - верхний левый угол экрана до &HFFFF (65535) - правый нижний.

Может быть существует какой-нибудь штатный способ их отрисовки (символов ниже 32)?
PRINT CHR$(&H10);CHR$(2)

УПРАВЛЯЮЩИЕ ДЕЙСТВИЕ
СИМВОЛЫ:


01H,X,Y => Перемещение курсора в позицию с номером строки
(x-20h) и номером столбца (y-20h)
04H => Стирание символов от позиции курсора до конца
экрана
07H => Выдача звукового сигнала
08H => Возврат курсора на одну позицию назад
0АH => Перемещение курсора в начало следующей строки
(с роллингом)
0BH => Удаление строки, на которой находится курсор
(оставшиеся до конца экрана строки сдвигаются
вниз, последняя строка пропадает)
0CH => Перемещение курсора в первую позицию первой
строки экрана
0DH => Перемещение курсора в первую позицию текущей
строки
10H,X => Символ x выводится на экран и не считается
управляющим символом
15H => Стирание символов от позиции курсора до конца
строки
18H => Перемещение курсора вправо
19H => Перемещение курсора вверх
1AH => Перемещение курсора вниз
1CH => Вставка пробела на место курсора (остаток
строки сдвигается вправо, последний символ
строки пропадает)
1DH => Удаление символа из позиции курсора (остаток
строки сдвигается влево, в последнюю позицию
строки заносится пробел)
1EH => Вставка пустой строки на место курсора
(оставшиеся до конца экрана строки сдвигаются
вверх, на место последней строки заносится
пустая строка)
1FH => Очистка всего экрана

УПРАВЛЯЮЩИЕ ДЕЙСТВИЕ
ПОСЛЕДОВА-
ТЕЛЬНОСТИ:

1BH,'0' => Включение основного набора символов
знакогенератора
1BH,'1' => Включение дополнительного набора символов
знакогенератора
1BH,'2' => Включение нормальной ширины символов
1BH,'3' => Включение удвоенной ширины символов
1BH,'6' => Включение режима инверсного отображения
символов
1BH,'7' => Выключение режима
инверсного отображения символов
1BH,':' => Разрешение отображения курсора
1BH,';' => Запрет отображения курсора
1BH,'<' => Включение режима автоматического перехода к
новой строке экрана по достижению конца
текущей строки
1BH,'=' => Выключение режима автоматического перехода к
новой строке экрана по достижению конца
текущей строки (переход к новой строке
выполняется только по управляющим символам)
1BH,'@' => Вставка пробела на место курсора (остаток
строки сдвигается вправо, последний символ
строки пропадает)
1BH,'A' => Перемещение курсора вверх
1BH,'B' => Перемещение курсора вниз
1BH,'C' => Перемещение курсора вправо
1BH,'D' => Перемещение курсора влево
1BH,'E' => Очистка всего экрана
1BH,'F' => Перемещение курсора в начало следующей строки,
а из последней строки экрана в первую
1BH,'G' => Перемещение курсора в начало текущей строки
1BH,'H' => Перемещение курсора в первую позицию первой
строки экрана
1BH,'J' => Стирание символов от позиции курсора до конца
экрана
1BH,'K' => Стирание символов от позиции курсора до конца
строки
1BH,'L' => Вставка пустой строки на место курсора
(оставшиеся до конца экрана строки сдвигаются
вниз, последняя строка пропадает)
1BH,'M' => Удаление строки, на которой находится курсор
(оставшиеся до конца экрана строки сдвигаются
вверх, на место последней строки экрана
заносится пустая строка)
1BH,'P' => Удаление символа из позиции курсора (остаток
строки сдвигается влево, в последнюю позицию
строки заносится пробел)
1BH,'Y',X,Y => Перемещение курсора в позицию с номером строки
(x-20h) и номером столбца (y-20h)

Я к чему это вспомнил.. В нескольких темах периодически возникали вопросы по некоторым режимам. В основном поразрулили...
А обращали внимание на интерфейс Proffer Commander?
Очень интересно реализован. Главный экран - панельки - псевдографика в альтернативной кодировке (альтернативный знакогенератор), зато отображение справки по F1 корректно, просмотр того же файла справки (PROFFER.HLP) по F3 тоже корректно.
Текст в цвете, и это не графика (а может и ошибаюсь) - шибко шустро работает. С LUT хорошо заморочились...

Набросал пару тестов, переключающих режимы 32 или 64 символа. Сразу после загрузки системы запускать поочередно.
82174

AlexS58
09.04.2025, 13:25
Сообщение от ivagor:

В Бейсике 1.1 можно использовать POKE (в 2.0 они тоже сработают)
POKE&HFB3A,PEEK(&HFB3A)AND251 - основной знакогенератор
POKE&HFB3A,PEEK(&HFB3A)OR4 - альтернативный знакогенератор

Этим способом получилось. Очень интересно, как вы его нашли? Как нашли адрес в памяти и почему к нему применяются именно эти логические операции? Они накладывают какую-то определенную битовую маску? Действительно очень интересно.
В документации ч*рт ногу сломит... Даташиты писать не умели..

; Системный регистр вместе с регистром цвета и
; цветовой таблицей (см. ниже) располагается в стра-
; нице, начальное смещение которой определяется па-
; раметром RGBASE, способным принимать одно из 4
; значений:

RGBASE1 EQU 3A00H ; в TRS80 и ROMB2
RGBASE2 EQU 0FA00H ; в ROMB1, ODOSA, NDOS и BASIC
RGBASE3 EQU 0FF00H ; в DOSA и DOSG1
RGBASE4 EQU 0BF00H ; в BASG

SYSREG EQU 7FH ; Относительный адрес
; системного регистраОк, понятно, - регистры


; Адреса остальных регистров, представляющих собой
; порты периферийных БИС, сведены в одну страницу,
; начальный адрес которой PBASE может принимать одно
; из 3 значений:

PBASE1 EQU 3B00H ; в TRS80 и ROMB2
PBASE2 EQU 0FB00H ; в ROMB1, ODOSA, NDOS и BASIC
PBASE3 EQU 0FE00H ; в DOSA и DOSG1Тоже понятно, - порты


; КОНТРОЛЛЕР ОТОБРАЖЕНИЯ АЛФАВИТНО-ЦИФРОВОЙ ИНФОРМАЦИИ
.................................................. ...
VIBASE1 EQU 3C00H ; Начальный адрес АЦЗУ в конфигурациях
; TRS80 и ROMB2
VIBASE2 EQU 0FC00H ; Начальный адрес АЦЗУ в конфигурациях
; ROMB1, ODOSA, NDOS и BASICТоже понятно..

А это как понимать???

VIREG EQU 3AH ; Относительный адрес регистра управления
; отображением
VISTS EQU 38H ; Относительный адрес регистра состояния
; атрибута видеоинверсииПочему описаны как регистры? Они же в 0FB00H.


; Константы для работы с регистрами

ATRMSK EQU 8 ; Маска атрибута видеоинверсии
VBLMSK EQU 2 ; Маска кадрового гасящего импульса

FONT1 EQU 4 ; Выбор альтернативного набора
; символов в знакогенераторе
LARGE EQU 8 ; Режим отображения расширенных
; символов (32 символа в строке)
ATRSET EQU 10H ; Установка бита атрибута
ATRRES EQU 20H ; Сброс бита атрибута
ATRFRE EQU 30H ; Сохранение состояния атрибута
; и условие чтения атрибутаСвалили в кучу...


; Константы для работы с регистрами

ATRMSK EQU 8 ; Маска атрибута видеоинверсии
VBLMSK EQU 2 ; Маска кадрового гасящего импульса
ATRSET EQU 10H ; Установка бита атрибута
ATRRES EQU 20H ; Сброс бита атрибута
ATRFRE EQU 30H ; Сохранение состояния атрибута
; и условие чтения атрибута
Это биты VISTS EQU 38H


FONT1 EQU 4 ; Выбор альтернативного набора
; символов в знакогенераторе
LARGE EQU 8 ; Режим отображения расширенных
; символов (32 символа в строке)А это биты VIREG EQU 3AH

Дальше

; КОНТРОЛЛЕР ОТОБРАЖЕНИЯ ГРАФИЧЕСКОЙ ИНФОРМАЦИИ
..................................
PAGREG EQU VIREG ; Адрес регистра выбора страниц

VPAGE0 EQU 00000000B ; Выбор 0 страницы отображения
VPAGE1 EQU 00000001B ; Выбор 1 страницы отображения
VPAGE2 EQU 00000010B ; Выбор 2 страницы отображения
VPAGE3 EQU 00000011B ; Выбор 3 страницы отображения

RWPAG0 EQU 00000000B ; Выбор 0 страницы чтения/записи
RWPAG1 EQU 01000000B ; Выбор 1 страницы чтения/записи
RWPAG2 EQU 10000000B ; Выбор 2 страницы чтения/записи
RWPAG3 EQU 11000000B ; Выбор 3 страницы чтения/записиО, АЦЗУ и ГЗУ конфигурится одним портом (PAGREG EQU VIREG)


LUT EQU 0FBH ; Адрес таблицы присвоения цветов
; (относительный)

; При записи в LUT биты D0...D3 задают номер одной из 16
; строк таблицы, а D4...D7 - содержимое этой строки.
; D3 соответствует АЦЗУ, D2 - слою ГЗУ #2, D1 - слою #1,
; D0 - слою #0; D7 задает интенсивность (яркость),
; D6 - наличие красного цвета, D5 - зеленого цвета, D4 -
; синего цвета.С этим разобрались.. более-менее.

LeoN65816
10.04.2025, 05:56
В документации ч*рт ногу сломит... Даташиты писать не умели..

Всё там правильно и доходчиво расписано.
Базовый адрес портов PBASE (зависит от выбранной конфигурации) плюс относительный адрес конкретного порта (смещение) и даёт абсолютный адрес порта (FB00H + 3AH = FB3AH).
Также и с регистрами: RGBASE (FA00H) + SYSREG (7FH) = FA7FH.

AlexS58
10.04.2025, 11:54
Также и с регистрами: RGBASE (FA00H) + SYSREG (7FH) = FA7FH.
Тут вопросов нет.


Базовый адрес портов PBASE (зависит от выбранной конфигурации) плюс относительный адрес конкретного порта (смещение) и даёт абсолютный адрес порта (FB00H + 3AH = FB3AH).
Ну и как сложить базовый адрес и смещение - тоже не высшая математика :)


VIREG EQU 3AH ; Относительный адрес регистра управления
; отображением
А вот тут вопрос: Почему написано что это регистр, а не порт???

bars_z
10.04.2025, 22:27
Потому что VIREG -- это регистр управления отображением и он доступен через порт C PIA1. Вы можете получить побитовый доступ к регистру VIREG и через порт PIMC1 (3Bh) того же адаптера PIA1. Порт -- это канал связи с внешним устройством и в данном случае это параллельный интерфейс, к выходу порта C которого, в частности, подключен регистр управления отображением. как-то так.

yevrowl
13.10.2025, 01:28
Существуют ли компиляторы исходного кода на встроенном Бейсике?

AlexS58
14.10.2025, 20:52
Существуют ли компиляторы исходного кода на встроенном Бейсике?
Конечно. Попадались на глаза в образах дискет (.KDI). Только не знаю, совместим ли "исходный код" интерпретируемого Васика с компилером...
Много лет назад, в прошлом веке (в реаліях сьогодення - в минулому житті) в школе информатика была на Корветах. Мне повезло, - препод меня допускал к РМП ПК8020, - т.е. учительский, с дисководами и принтером. Ученические (РМУ) ПК8010 - без дисководов. Ну, азы работы с дисковыми системами.. CP/M-80, МикроДОС, сетевые еще какие-то были.. В курсе информатики изучали только Бейсик. Вот уже много лет спустя набрел на этот форум... Нашел кучу образов дискет для Корвета (мно из чего и у нас в классе было). Что меня поразило - обилие языков программирования: от Ассемблеров до Экспресс Паскаля!!!

yevrowl
15.10.2025, 22:52
Как поменять цвет шрифта и экрана?

82954

AlexS58
16.10.2025, 10:08
Как поменять цвет шрифта и экрана?
Вывод картинки на экран осуществляется накладыванием содержимого АЦЗУ (алфавитно-цифрового запоминающего устройства) с помощью знакогенератора и содержимого ГЗУ (графического запоминающего устройства).
АЦЗУ монохромное, имеет только атрибут инверсии символов.
Оператор COLOR устанавливает цвета по-умолчанию для графических операторов: первый параметр - цвет переднего плана (для PSET, LINE, CIRCLE, ....), второй параметр - цвет фона (устанавливатся по PCLS - очистить графический экран).

Как поменять цвет шрифта
Без "финтов ушами"? :) Никак. Можно, правда, играясь с таблицей LUT.