Приветствую всех.
Когда-то, в начале 90-х, изучал я и потом преподавал MSX BASIC версии 2.1 в средней школе.
Я тогда начал, но так и не закончил написание подобия ДОСа, но на Бейсике.
Много позже, мою идею одобрили в MSX-клубе, просили закончить, но при пожаре дома у меня сгорели все мои Ямахи и документация к ним, включая тотально все мои записи по этому вопросу.
Я долго горевал, но жить как-то надо - и вот, занялся я написанием заново.
Возможно, моя работа будет кому-то интересна, и мне помогут потом скомпилить это в полноценный исполняемый файл.
Сейчас у меня написан тестовый модуль набора текста, представляю его тут:
Код:
10 'BASIC Text Loader
20 CLS: COLOR 15,4,4: SCREEN 0,,0,1,0: WIDTH 80: COLOR=(4,0,0,4):SET SCREEN 'Screen mode set
30 'Logo
40 PRINT"BASIC Text Loader Module"
50 PRINT"================================================"
60 PRINT CHR$(13)' Carr. return
70 'input
80 PRINT"BASIC:>";
90 WR$="" 'Clear
100 A$=INKEY$ 'character entering
110 IF A$=CHR$(27) THEN GOTO 280 'Getaway if ESC pressed
120 Q=LEN(A$):IF Q=0 THEN 130 ELSE GOSUB 160 'Check if character were entered
130 PRINT A$; 'Print the character
140 GOSUB 210 'To CMDs Module
150 IF A$=CHR$(13) THEN PRINT CHR$(13):GOTO 80 ELSE GOTO 100 'If Enter pressed then carr. return
160 'Capital Chars Transformer Start
170 IF A$=CHR$(13) THEN RETURN 'If Enter pressed then carr. return
180 IF ASC(A$)=>65 AND ASC(A$)=<90 THEN A=ASC(A$)+32:A$=CHR$(A) ELSE A$=A$ 'If char little then ok else make it little
190 RETURN 'Zuruck
200 'Capital Chars Transformer End
210 'Commands Module Start
220 WR$=WR$+A$ 'Word checking
230 FOR L=0 TO LEN(WR$) 'Exit cmd check cycle
240 IF WR$="cls"+CHR$(13) OR WR$="clear"+CHR$(13) THEN WR$="": CLS 'Clearing screen
250 IF WR$="exit"+CHR$(13) OR WR$="quit"+CHR$(13) THEN WR$="": GOTO 280 'Getting away if_then
260 NEXT L:RETURN 'Zuruck
270 'Commands Module End
280 'BASIC Wassup Module Start
290 PRINT CHR$(13)' Carr. return
300 PRINT"Exit to BASIC"
310 KEY 2,"exit"+CHR$(13)' Testing feature
320 END 'Fin
330 'BASIC Wassup Module End
Модуль умеет:
1) Набирать текст, сканируя побуквенно. Это важно для некоторых вещей - например, реакции на клавиши.
2) Выход из программы осуществляется по командам "exit", "quit" и по нажатию ESC.
3) В показанном коде, из остальных команд, сейчас работает лишь команда "cls", она же "clear". Это команда очистки экрана.
4) Остальное пока только проектируется.
А теперь немного рассуждений и ответов на вопросы, которые я сам себе задавал:
Вопрос: Шошо, DOS? А как называется?
Ответ: Пусть называется MSX JW DOS.
Вопрос: Зачем оно надо, если есть куча DOS`ов?
Ответы:
1) Напишу - вспомню детство и юность.
2) Графоманство и зависть (ответ для тех, кого мои ответы не устроят).
3) Ну не всё пьянствовать же, и не в тупые игры играть, типа WOT и прочего выноса мозга.
Выберите вариант по вкусу
Вопрос: Зачем врукопашную на Басике писать модуль изготовления маленьких букаф из больших, если в MSX-машине подвида КУВТ2 есть встроенная фича для этого?
Ответ: Помимо ученической машины КУВТ2, каковой я располагаю, есть ещё и 805-е, всякие там ДЭУшки и прочие представители семейства, набор адресов в оперативной памяти для хранения переменных и их тип может несколько различаться - отсюда проистекает, что, следуя ДОСовскому принципу "всё своё ношу с собой", пишем этот модуль сами. Правда, моя реализация зависит от BIOSа, и с этим надо что-то делать - об этом я подумаю отдельно, тем более, модули на то и модули, что их можно переписать когда захочешь.
К тому же, я ещё русские букафки не перепаивал - но перепаяю обязательно.
Вопрос: Как будет осуществляться настройка и инициализация?
Ответ: Текстовым ini-файлом. Пока не реализовано. Но после реализации станет возможным задать тип машины - и, таким мухтаром, решим проблему перепаивания букаф, например, и распределения памяти. Файл назовём, ну например, init.bat.
Пока это все вопросы и ответы, остальных у меня пока не возникло.
А теперь, рассуждения.
Ну, допустим, модуль обработки команд мною уже писался и работал - там нет ничего сложного. А вот сделать хитрушку типа, выражаясь современным форточным языком, dll-ки, или подгружаемые оверлеи - это я пока не придумал как.
А ведь они нужны, однако.
И, видимо, придётся как-то, по-взрослому, устанавливать пространство имён для модулей - иначе есть риск запутаться самому.
Кстати, замечено, что на эмуляторе программка знатно подтупливает, чего на реальном железе не наблюдалось.
В связи с этим я думаю, что надо бы размещать программку в другой области памяти, дабы Бейсиковая память оставалась свободной, надо этот момент обдумать, как реализовать: ведь софтина будет потом перекукожена в COM-файл, и она должна уметь работать именно так.
Сейчас же я думаю о том, как придумать загрузку исполняемых файлов в оперативку и их исполнение, а также запуск оверлеев (OBJ) с автоматической проверкой на предмет предварительной сборки их. То есть, учитывая раздолбайство MSX-софта с неявным объявлением типа файла через указание расширений имени - надо предварительно как-то устанавливать типы файлов - и без всяких там PE-заголовка, DOS-заглушки или MYME-type.
Шо делать!? Пока не ясно...
ЗЫ Кстати, вот что.
Испытал программку конвертацией в ROM и запуском на эмуляторе - пашет, да ещё и как.
Конвертил прожкой basicrom.exe, попутно перевёл её на русский, но не всю: мне надо как-то аккуратно раскукожить текстовые вставки из самого экзешника, ибо ресурсы-то я сделал, не могу пока лишь в экзешник влезть, но и это я сделаю.
Где-то прожка у мну для этого была.
Нарою, переведу - поделюсь переведённым basicrom.exe
Сейчас программка выглядит так:
ЗЗЫ Команды попытаюсь вообще реализовывать иначе, чем сейчас - хочу поюзать не Бейсиковые команды в основе, а те "верёвочки", за которые дёргают сам Бейсик и его кореш MSX-DOS. ИЗ этого выходит, что моя программа будет, увы и ах, аппаратно зависимой - то есть, BIOS-зависимой, КУВТ-ориентированной.
Но это пока только обдумывается. Не кидайтесь в меня флоппиками, я Бейсик и вообще MSX, равно как и вообще погромирование забыл давно и прочно, поэтому - как могу, так и пытаюсь писать.
HTML, PHP и CSS c жабой не в счёт.
Как говорится, не стреляйте в (тапира, он хрюкает как умеет) тапёра, он играет как умеет
Но дельным советам буду рад.
Не обещаю вообще, что выйдет закончить проект (20 лет назад я его так и не закончил), но сколько смогу - постараюсь сделать. Опять же, возможно, мои наработки пригодятся кому-либо.
Такая вот загогулина.