User Tag List

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

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,713
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    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

    Регистрация
    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

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

    Oleg N. Cher(29.11.2021)

  4. #3

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,713
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  5. #4

    Регистрация
    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

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

    Oleg N. Cher(29.11.2021)

  6. #5

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,713
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

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

  7. #6

    Регистрация
    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

  8. #7

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    609
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    175
    Поблагодарили
    135 сообщений
    Mentioned
    10 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, т.к. прога всегда сама инициализировала стек и плевать ей было на то, что там кто насохранял до неё.

  9. #8

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,713
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    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 плохо выходить, и стек вызывающей проги юзать плохо, и выходить прямо в монитор плохо, потому что всё сбросится. Я запутался

  10. #9

    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    600
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    123 сообщений
    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

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

    Oleg N. Cher(29.11.2021)

  11. #10

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

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    Не сбивай людей с толку
    Монитор 11М вообще ставит стек на 44000. В своей 7 странице. А пользовательский стек он ставит, как и принято, на 1000.
    Инфа из телеграм-канала "БК0010/11М World":
    Раз
    Два
    Блог проекта "The Goonies для БК11М"
    БК-0011М, БК-0011М-01, SMK-512, AZ

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

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

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

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

Похожие темы

  1. Эмулятор БК-0010-01, БК-0011 и БК-0011М
    от Doronetty в разделе Эмуляторы отечественных компьютеров
    Ответов: 245
    Последнее: 20.12.2025, 13:35
  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

Ваши права

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