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

User Tag List

Страница 1 из 7 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 63

Тема: Режим совместимости БК-0011М с БК-0010

  1. #1
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,237
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Режим совместимости БК-0011М с БК-0010

    Подскажите, плз, как правильно инициализировать БК-0011М, чтобы он работал подобно БК-0010?

    Нужно:

    1. Пользовательская программа с 01000 по 037777
    2. Экран с 040000

    Мой текущий инициализатор выглядит вот так, но похоже, что он кривой (глючит):

    Код:
    void Init (void)
    {
      asm("\
            CMPB @$0177717, $0200   \n\
            BEQ  L0010              \n\
            MOV  $0152112, @$030    \n\
            EMT  0                  \n\
            MOV  $5, R0             \n\
            EMT  012  // Scr 40000  \n\
            CLR  R0                 \n\
            EMT  056  // Buf 0 r/w  \n\
            MOV  $0140000, @$4      \n\
    L0010:"
      );
    } // Init
    Глюк похож на криво сработавшее прерывание - работа программы завершается аварийно. А вот если Init не вызывать, то в режиме БК-0011 программа отрабатывает нормально. Да, прога не юзает EMT, кроме тех, что в Init.

    В режиме БК-0010 прога тоже работает правильно.

    Test.zip

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

  3. #2
    Member
    Регистрация
    18.01.2021
    Адрес
    п. Новый Ургал
    Сообщений
    145
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если прога не юзает ЕМТ, то проще включить страницу экрана и установить стек:

    mov #16000,@#177716
    mov #1000,sp

    Но если хотя бы клавишу нажать надо, то еще надо переписывать векторы прерываний 60, 274, 4 на себя, иначе они вызовут монитор 11М.
    Блог проекта "The Goonies для БК11М"
    БК-0011М, БК-0011М-01, SMK-512, AZ

  4. Этот пользователь поблагодарил grf за это полезное сообщение:

    Oleg N. Cher (29.11.2021)

  5. #3
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,237
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А можно чуть подробнее про переустановку векторов? Кстати, а зачем устанавливать стек? Разве прога не может работать со стеком, который есть на момент её вызова? Так, к тому же, в монитор выходить проще (просто RST PC в конце программы).

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

  6. #4
    Member
    Регистрация
    18.01.2021
    Адрес
    п. Новый Ургал
    Сообщений
    145
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    А можно чуть подробнее про переустановку векторов?
    Векторы прерываний от клавиатуры, по СТОП и от таймера на 11М ведут в монитор 11М, а на БК0010 - в монитор БК0010. Монитор 11М находится с адреса 140000, а десяточный - с адреса 100000. Так что если векторы не переустановить, то при нажатии клавиши вызовется кусок монитора 11М, который может переключить страницы, экран, прописать какие-нибудь системные переменные и т.д. К чему это приведет - не знаю, не пользовался монитором 11М )) Но явно программа не получит код клавиши в системных переменных БК0010, потому как они не совпадают у 10 и 11М


    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Кстати, а зачем устанавливать стек? Разве прога не может работать со стеком, который есть на момент её вызова? Так, к тому же, в монитор выходить проще (просто RST PC в конце программы).
    Может конечно, но при старте 11М вроде бы устанавливает стек на 2000, а БК0010 - на 1000

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Меня как бы не ломает, если они чего-то там вызовут, если оно не сломает работу кода. А клавиши опрашивать будет нужно. Но я об этом пока ничего не знаю. Думал делать опрос через системные переменные.
    Проще код клавиши тогда в регистре 177662 смотреть или просто переписать прерывание на себя, где помещать код из этого регистра в свою переменную.
    Блог проекта "The Goonies для БК11М"
    БК-0011М, БК-0011М-01, SMK-512, AZ

  7. Этот пользователь поблагодарил grf за это полезное сообщение:

    Oleg N. Cher (29.11.2021)

  8. #5
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,237
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение
    Может конечно, но при старте 11М вроде бы устанавливает стек на 2000, а БК0010 - на 1000
    Уууу, теперь я понимаю почему под 11М прога работает столь нестабильно. Получается, что нет возможности загрузить прогу размером в пару Кб штатными средствами с адреса 01000, раз стек идёт с 02000. Т.е. можно, но ещё до запуска прога будет испорчена тем, что стек установлен в её тело. Что с этим можно сделать? Нужно делать загрузчик, который переустановит стек ниже, а потом загрузит прогу?

    Есть ли вообще смысл придерживаться идеи, чтобы одна прога работала и на БК-0010, и на БК-0011М? Или лучше сразу сделать две версии?

    Ткните в маны, где освещена именно эта тема страниц и векторов 11М. "Руководство системного программиста 11М" уже читал, но оно слишком непонятное для новичка.

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

    Есть ли смысл выходить из проги обратно в монитор 11М? Или для БК-шников, как и для спектрумистов, характерно выходить из игр по Reset?

  9. #6
    Member
    Регистрация
    18.01.2021
    Адрес
    п. Новый Ургал
    Сообщений
    145
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Уууу, теперь я понимаю почему под 11М прога работает столь нестабильно. Получается, что нет возможности загрузить прогу размером в пару Кб штатными средствами с адреса 01000, раз стек идёт с 02000. Т.е. можно, но ещё до запуска прога будет испорчена тем, что стек установлен в её тело. Что с этим можно сделать? Нужно делать загрузчик, который переустановит стек ниже, а потом загрузит прогу?
    Ну если прога в пару Кб, то можно ее и с 2000 загрузить

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Есть ли вообще смысл придерживаться идеи, чтобы одна прога работала и на БК-0010, и на БК-0011М? Или лучше сразу сделать две версии?
    На 11М из голого монитора никто программы не грузит, все грузят из какой-либо ДОС - Andos, MKDos, CsiDOS. А там везде есть возможность запуска программ от 10-ки. Так что, если прога написана под 10, то она итак будет работать на 11М ))

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Ткните в маны, где освещена именно эта тема страниц и векторов 11М. "Руководство системного программиста 11М" уже читал, но оно слишком непонятное для новичка.
    Там и есть:
    Векторы
    Страницы

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Есть ли смысл выходить из проги обратно в монитор 11М? Или для БК-шников, как и для спектрумистов, характерно выходить из игр по Reset?
    Есть конечно, чтобы вернуться в оболочку запуска. Только тогда уж не прямо в монитор 11М надо (все сбросится), а туда откуда вызвали.
    Последний раз редактировалось grf; 29.11.2021 в 14:56.
    Блог проекта "The Goonies для БК11М"
    БК-0011М, БК-0011М-01, SMK-512, AZ

  10. #7
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    546
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    106 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Получается, что нет возможности загрузить прогу размером в пару Кб штатными средствами с адреса 01000
    Есть. Надо перед загрузкой теми же штатными средствами не забыть установить стек как нужно.
    в мониторе набираем R6/ (появится старое значение) 1000<Ввод> и затем загружаем прогу.
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Есть ли вообще смысл придерживаться идеи, чтобы одна прога работала и на БК-0010, и на БК-0011М?
    Чтобы прога работала и на БК10 и на БК11(М), она должна быть полностью автономной, не пользоваться вызовами из ПЗУ, либо определять тип машины и пользоваться при необходимости вызовами именно того типа машины, на которой запущена. И должна полностью все векторы обрабатывать сама. Как правило, так сделано в играх, где нужно быстродействие.
    Если пытаться писать универсальную прогу, но непременно пользоваться системными вызовами (в том числе и векторами клавиатуры), то в конце концов так и получится две версии в одном.
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Есть ли смысл выходить из проги обратно в монитор 11М?
    Это считалось правилом хорошего тона. Но выход в монитор делался не по rts pc из стека, а просто jmp @#100000 на БК10, или jmp @#140000 на БК11, т.к. прога всегда сама инициализировала стек и плевать ей было на то, что там кто насохранял до неё.

  11. #8
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,237
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение
    Ну если прога в пару Кб, то можно ее и с 2000 загрузить
    Вообще да, но я так сказал наобум - а вообще для моей задумки, боюсь, и 16 Кб не хватит...

    Цитата Сообщение от grf Посмотреть сообщение
    На 11М из голого монитора никто программы не грузит, все грузят из какой-либо ДОС - Andos, MKDos, CsiDOS. А там везде есть возможность запуска программ от 10-ки. Так что, если прога написана под 10, то она итак будет работать на 11М ))
    Я запускаю прогу в эмуле GID-BK командой BK.exe /B myprog.bin
    Что делает эмуль. Он (в режиме 11М) загружает Бейсик, вводит команду MON, выходит в монитор, а там набирает команду L и загружает образ ленты в формате bin, и сам его запускает. Таким способом, насколько я понимаю, загружать прогу с 01000 не получится. А нам нужен максимальный объём памяти, который будет работать и в 0010, и в 0011М.

    Цитата Сообщение от grf Посмотреть сообщение
    Есть конечно, чтобы вернуться в оболочку запуска. Только тогда уж не прямо в монитор 11М надо (все сбросится), а туда откуда вызвали.
    Т.е. по RST PC, пользуясь адресом на стеке?

    Цитата Сообщение от grf Посмотреть сообщение
    Чтобы прога работала и на БК10 и на БК11(М), она должна быть полностью автономной, не пользоваться вызовами из ПЗУ, либо определять тип машины и пользоваться при необходимости вызовами именно того типа машины, на которой запущена.
    Так и собираюсь поступить.

    Кстати, есть ли возможность программно определить - у нас БК-0011 или БК-0011М?

    С другой стороны, мне посоветовали забить на БК-0011 вообще.

    Цитата Сообщение от grf Посмотреть сообщение
    Это считалось правилом хорошего тона. Но выход в монитор делался не по rts pc из стека, а просто jmp @#100000 на БК10, или jmp @#140000 на БК11, т.к. прога всегда сама инициализировала стек и плевать ей было на то, что там кто насохранял до неё.
    Ну тогда цитирую Вас: "Только тогда уж не прямо в монитор 11М надо (все сбросится), а туда откуда вызвали."

    То есть, если сделать jmp @#100000 на БК10, или jmp @#140000 на БК11 (а что надо сделать на БК11М?), то всё сбросится.

    Получается, что и по RST PC плохо выходить, и стек вызывающей проги юзать плохо, и выходить прямо в монитор плохо, потому что всё сбросится. Я запутался

  12. #9
    Master Аватар для Sandro
    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    590
    Спасибо Благодарностей отдано 
    27
    Спасибо Благодарностей получено 
    212
    Поблагодарили
    115 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от grf Посмотреть сообщение
    Может конечно, но при старте 11М вроде бы устанавливает стек на 2000, а БК0010 - на 1000
    Не сбивай людей с толку
    Монитор 11М вообще ставит стек на 44000. В своей 7 странице. А пользовательский стек он ставит, как и принято, на 1000. Грузить пользовательскую программу можно любой длины вплоть до адреса 140000. См. мою адаптацию УКНЦшного порта Desolate на БК. Она занимает адреса до 125450. Когда я отлаживался, то грузил именно как .bin в Монитор. Командой L.

    Тут грабля в другом: сразу после старта машины назначение страниц одно (5000->177716), а если, например, вернуться из Бейсика, то другое. И это надо отслеживать особо, поскольку регистр переключения страниц прочитать нельзя.

    Да, Desolate как раз вообще не пользуется Монитором, всё своё. И первая же команда -- MTPS #340, чтобы не возиться с прерываниями, этой игре они не нужны.

    А так, нужно поставить вектора 4, 60, 274, если нужен таймер -- то ещё и 100. Это всё.

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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    То есть, если сделать jmp @#100000 на БК10, или jmp @#140000 на БК11 (а что надо сделать на БК11М?), то всё сбросится.
    На 11М тоже 140000. Но если в машине стоит СМК, то у него другой адрес старта. Поэтому совсем правильно так:

    Код:
    mov @#177716, r0
    clrb r0
    jmp @r0
    Кстати, именно поэтому проверять на тип машины командой CMPB @#177717, #200 неправильно. На машине с СМК это может, в зависимости от режима, привести к идентификации машины как БК-0011М.

    Более правильно попробовать записать в @#177662. На БК-0010 это trap to 4, на 11М -- управление экраном и таймером. Но это тоже ненадежно. Я бы, наверное, проверял через переключение страниц памяти. Если переключаются -- то это 11М.

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Получается, что и по RST PC плохо выходить, и стек вызывающей проги юзать плохо, и выходить прямо в монитор плохо, потому что всё сбросится. Я запутался
    Если ты полез сам рулить машиной (не через EMT), то Монитор больше не знает её состояние. Поэтому попытка выхода в него может закончится чем угодно. В этом случае надо сбрасывать таким куском когда, который я привёл.

    А если ты законопослушный гражданин, стек и прерывания не переставляешь, работаешь с машиной только через EMT, то RTS PC

  13. Этот пользователь поблагодарил Sandro за это полезное сообщение:

    Oleg N. Cher (29.11.2021)

  14. #10
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,237
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если кто-то желает мне помочь кодом, то добро пожаловать.
    Резюмируем задачу. Чтобы пользоваться EMT'ами - нам нужно точно знать какая у нас машинка.

    Итак, нужен код для:

    1. Инициализации (установка экрана в 040000 на БК-0011/11М, запрет векторов, установка нужных страниц. На БК-0010 ничего не делать). Кстати, если при запрещённых векторах можно каким-то образом опрашивать клаву, то это отлично.

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

    3. Адреса 01000..037777 освободим для пользовательской программы, держа в уме её рабочесть на всех моделях БК.

    4. Выход в вызывающую среду. Стек трогать не будем, пусть остаётся ниже 01000 там, где его установила вызывающая прога. Если мы что-то повредили, из-за чего монитор будет некорректно работать, восстановить.

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

    5. Ну и надёжный способ определения какая у нас модель БК. Если на 11 (без М) можно забить, то давайте забьём. Я вообще узнал про столь кардинальные различия между 11 и 11М с большим удивлением - раньше думал, что они совместимы.

    С векторами, насколько я понял, можно организовать фоновый буферизованный опрос клавы? Я ещё думаю, понадобится ли он мне, но, скорее всего, нет. Так что если можно без векторов, обойдёмся без них.

    Чтобы с чего-то начать, наводящий вопрос: что делает mov #16000,@#177716 ?

    Кстати, решение этой задачки в коде позволит нам иметь заготовку для программирования под БК-0010, 0011 и 11М на Си (GCC) и Обероне. Всё, что нам удастся сделать, будет выложено на гитхабе для общего доступа.

Страница 1 из 7 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Эмулятор БК-0010-01, БК-0011 и БК-0011М
    от Doronetty в разделе Эмуляторы отечественных компьютеров
    Ответов: 191
    Последнее: 11.05.2024, 09:15
  2. Отличия БК-0011М от БК-0010(01)?
    от nzeemin в разделе БК-0010/0011
    Ответов: 22
    Последнее: 30.03.2021, 18:47
  3. Ответов: 0
    Последнее: 24.01.2010, 21:46
  4. О совместимости клонов с играми
    от ILoveSpeccy в разделе Несортированное железо
    Ответов: 1
    Последнее: 13.03.2008, 18:26

Ваши права

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