Важная информация

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 31

Тема: Попытка написания чего-то типа MSX-DOS на языке MSX-BASIC

  1. #1
    Member Аватар для John Warner
    Регистрация
    02.10.2017
    Адрес
    с. Усть-Камышта, Хакасия
    Сообщений
    40
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post Попытка написания чего-то типа MSX-DOS на языке MSX-BASIC

    Приветствую всех.

    Когда-то, в начале 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 лет назад я его так и не закончил), но сколько смогу - постараюсь сделать. Опять же, возможно, мои наработки пригодятся кому-либо.


    Такая вот загогулина.
    Сибиряк безгранично любит свою угрюмую природу; он черпает в ней силу. ©М.Б.Аксѣльродъ
    Моя машина - YAMAHA MSX2 YIS503III КУВТ2 full stock

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member Аватар для John Warner
    Регистрация
    02.10.2017
    Адрес
    с. Усть-Камышта, Хакасия
    Сообщений
    40
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А вот и я.
    Закончил перевод программы basicrom.exe, представляю переведённую программу!
    basicrom_rus.zip - скачать zip-архив, 102.4 килобайта.
    Последний раз редактировалось John Warner; 04.11.2017 в 19:39.
    Сибиряк безгранично любит свою угрюмую природу; он черпает в ней силу. ©М.Б.Аксѣльродъ
    Моя машина - YAMAHA MSX2 YIS503III КУВТ2 full stock

  4. #3
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,125
    Записей в дневнике
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    11 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Яндекс Диск?

  5. #4
    Member Аватар для John Warner
    Регистрация
    02.10.2017
    Адрес
    с. Усть-Камышта, Хакасия
    Сообщений
    40
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так точно!
    Последний раз редактировалось John Warner; 04.11.2017 в 19:39.
    Сибиряк безгранично любит свою угрюмую природу; он черпает в ней силу. ©М.Б.Аксѣльродъ
    Моя машина - YAMAHA MSX2 YIS503III КУВТ2 full stock

  6. #5
    Member
    Регистрация
    16.02.2015
    Адрес
    г. Владивосток
    Сообщений
    31
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как же мне повезло, что у меня были другие учителя информатики ;-)
    ЗЫ. Это называется хреносозидательство.

  7. #6
    Veteran Аватар для Wierzbowsky
    Регистрация
    08.07.2015
    Адрес
    г. Бохум, Германия
    Сообщений
    1,747
    Спасибо Благодарностей отдано 
    170
    Спасибо Благодарностей получено 
    610
    Поблагодарили
    304 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот уж совсем ни к чему обижать увлечённого человека. Мы тоже в те времена пытались много чего создать на бейсике. Но упёршись в ограничение по памяти, функционалу и производительности вынуждены были досконально изучить матчасть, а также язык ассемблера и начать писать всё на нём. Так что не надо наездов, коллега. Кто не пробует, тот не пьёт сакэ.
    Последний раз редактировалось Wierzbowsky; 10.11.2017 в 14:51.

  8. #7
    Member Аватар для John Warner
    Регистрация
    02.10.2017
    Адрес
    с. Усть-Камышта, Хакасия
    Сообщений
    40
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо за тёплые слова.
    Как я и писал выше - каждый сходит с ума по своему. Кто-то играет в танки, кто-то собирает РК-86, кто-то играет в игры на MSX-Turbo. Впрочем, даже возможный отрицательный результат - тоже результат.
    Вот думаю, как мне придумать подгрузку модулей. Приуныл я немного. Не придумывается простыми методами подгрузка модулей.
    Изучал сегодня интересный проект Maximite из Австралии. Там даже есть русская документация.
    Так вот, автор языка MMBasic, что сидит в той машинке, видимо, тоже задавался моим вопросом, и придумал команду CHAIN - она позволяет вызывать подпрограммы непосредственно с диска, выполнять их и возвращаться обратно в вызывавшую программу.
    Жаль, у нас нет такого.

    Камраду Baton`у: чрезвычайно рад за вас. Вижу, что у вас был отличный информатик, но отвратительные педагоги по социальному воспитанию и этике.
    У меня сейчас 10-летний парнишка уже бойко рисует картинки с помощью операторов, вот закрепит материал, и будем спрайты изучать.
    Сибиряк безгранично любит свою угрюмую природу; он черпает в ней силу. ©М.Б.Аксѣльродъ
    Моя машина - YAMAHA MSX2 YIS503III КУВТ2 full stock

  9. #8
    Member
    Регистрация
    16.02.2015
    Адрес
    г. Владивосток
    Сообщений
    31
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от John Warner Посмотреть сообщение
    Камраду Baton`у: чрезвычайно рад за вас. Вижу, что у вас был отличный информатик, но отвратительные педагоги по социальному воспитанию и этике.
    У меня сейчас 10-летний парнишка уже бойко рисует картинки с помощью операторов, вот закрепит материал, и будем спрайты изучать.
    Рад за вашего парнишку ;-)

    Но вот у меня, к сожалению (или к счастью?), 30 лет назад педагогов по этике в школе не было. Поэтому говорю прямо.
    Даже сейчас, когда прошло 25 лет с того момента, когда я что-то пытался программировать, мне хватило одного взгляда на ваше "творение" что бы понять, что вы, как это ноне говорится "вообще не в теме". Это видно начиная от постановки задачи и заканчивая кодом. Вы не учитель информатики (по образованию), вас им могли назначить из-за отсутствия оного.

    Но спасибо, что представили ваше творение на обозрение. Стали понятны некоторые ваши высказывания в иных ветках.
    И нет, я не против энтузиастов ;-)

    ЗЫ. Ниже простенький скриптик, который я, можно сказать, впервые "накодил" за последние 25 лет на языке, который видел в первый раз в жизни. Просто чтобы видно, что я не профи ни разу.

    /ip dhcp-server lease
    :local clientid [get [find address=$leaseActIP] host-name]
    :if ($clientid = "android-3c99815b83973bc5") do={
    /interface wireless access-list set [find comment="Kitchen1"] mac-address=$leaseActMAC
    remove [find address=$leaseActIP]
    log info "--- Kitchen1 detected!"
    }

    :if ([: pick $leaseActMAC 0 8] = "00:08:22") do={
    /interface wireless access-list set [find comment="Kitchen2"] mac-address=$leaseActMAC
    remove [find address=$leaseActIP]
    log info "--- Kitchen2 detected!"
    }
    Последний раз редактировалось Baton; 11.11.2017 в 07:09.

  10. #9
    Member Аватар для John Warner
    Регистрация
    02.10.2017
    Адрес
    с. Усть-Камышта, Хакасия
    Сообщений
    40
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Повторяю, рад за вас чрезвычайно.
    Сибиряк безгранично любит свою угрюмую природу; он черпает в ней силу. ©М.Б.Аксѣльродъ
    Моя машина - YAMAHA MSX2 YIS503III КУВТ2 full stock

  11. #10
    Member
    Регистрация
    08.12.2013
    Адрес
    с. Ходосеевка, Киевская обл., Украина
    Сообщений
    89
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделать код-ревью представленного куска кода. Очень сильно не всматривался, что сразу бросилось в глаза:

    ELSE A$=A$ --- в строке 180 лишнее, else в Бейсике совсем необязателен, можно без него

    230 FOR L=0 TO LEN(WR$) --- этот цикл тут не нужен, из-за того что мы очистим экран L раз он чище не будет, увы


    Запускать бейсик из бейсика - думаю возможно теоретически - загрузить другую бейсик программу в другую страницу озу, переключить страницы чтобы новая оказалась в нужном слоте небольшой подпрограммой на асме. возврат в вызывающую возможен тоже - но при этом количество ассемблера вырастает сильно, потому что надо сохранить всякие указатели на текущий токен бейсика и другие переменные из текущего глобального состояния интерпретатора (а уж если в это время были открыты файлы так вообще беда). то есть, технически это настолько сложно что возникает вопрос целесообразности

    Я бы посоветовал Вам, John Warner, перед тем как начинать сложные программы - набраться побольше знаний, попробовать все на более простых прожках А с ребенком - если заинтересуется - можно просто попробовать написать какую-то несложную игру со спрайтами. Первая программка которую я написал в 9 классе называлась SPACE PIRAT и там надо было сбивать корабль пришельцев стреляя со своего - они двигались друг напротив друга вертикально, одним управляет игрок. Помню, никак не мог додуматься как так сделать, чтобы когда ты выстрелил то пока летит твоя пуля остальное действо тоже продолжалось - у меня все останавливалось пока пуля не долетит. А все потому что знаний не хватало - об ON INTERVAL GOSUB еще не знал. Поэтому и важно сначала побольше знаний набирать, а там тогда и понятнее будет что и как правильнее сделать

Страница 1 из 4 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Отсканировал книжку по MSX-Basic
    от AlexBel в разделе MSX
    Ответов: 12
    Последнее: 08.11.2018, 04:32
  2. Эмуляция ATM-Turbo 2+ 0.91 с MSX-DOS
    от breeze в разделе Эмуляторы
    Ответов: 15
    Последнее: 11.06.2017, 17:51
  3. Ответов: 0
    Последнее: 24.04.2017, 16:24
  4. Ответов: 12
    Последнее: 24.06.2009, 12:33
  5. Ответов: 0
    Последнее: 08.05.2006, 13:56

Ваши права

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