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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Возврат в Бэйсик

  1. #1
    Activist Аватар для Doktor
    Регистрация
    07.06.2010
    Адрес
    Зиген, Германия
    Сообщений
    223
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Возврат в Бэйсик

    Разбираюсь с вызовом подпрограмм в кодах из Бэйсика по RND USR xxxx. То, что для успешного возвращения нельзя портить регистр IY, общеизвестно. Нашёл в литературе ещё такое:

    „Особенным примером для программ Спектрум с 16К монитором является ситуация, когда при вычислении с плавающей запятой используются H и L регистры для сохранения адреса возврата. Поэтому, если эти регистры испорчены, то возвращение в Бейсик невозможно.“

    „В микро-ЭВМ "СПЕКТР" пользователь может без каких-либо ограничений использовать альтернативный набор регистров, кроме регистров H' и L', в которых сохраняется адрес возврата к Бейсику.“

    Кто знает точно?

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    поломанный IY плохо совмещается с IM1
    HL' надо восстанавливать при работе бейсика

    ваш КО
    С уважением,
    Jerri / Red Triangle.

  4. #3
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1. Не трогайте IY
    2. Не трогайте HL' (альтернативный HL) - или по крайней мере восстанавливайте если используете.
    3. BC на выходе хранит значение, которое возвращается функцией USR.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  5. #4
    Activist Аватар для Doktor
    Регистрация
    07.06.2010
    Адрес
    Зиген, Германия
    Сообщений
    223
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Т.е. всё-таки альтернативный H´L´ . И если в подпрограмме не используются команды переключения регистров, то о сохранении регистров можно не заботиться? (разумеется, за исключением IY).

  6. #5
    Master Аватар для GM BIT
    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В начале программы пишите

    LD (QUIT+1),SP

    Потом ваша программа


    И на выходе пишите:
    QUIT LD SP,0
    LD IY,23610
    IM 1
    LD HL,10072
    EXX
    EI
    RET

    И все будет нормально

  7. #6
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не надо делать все сразу! Тем более, не понимая откуда какие проблемы возникают. Итак, по порядку:
    1. LD (QUIT+1),SP: QUIT LD SP,0
    Не надо писать программы, в которых SP на выходе не равен SP на входе!!! Если есть разбаланс стека, это серьезный баг, иногда очень трудноуловимый! Оставьте SP в покое - если он у вас в программе портится, путь лучше выход в из нее в BASIC (скорее всего, печальный) это покажет после очередного изменения программы, приведшего к разбалансу стека.
    2. Если в программе есть DI, на выходе в BASIC должен быть EI, иначе остаемся без кнопок в BASIC'е. Зачем принудительно включать прерывания, если их не выключали?
    3. Не понятно зачем при каждом выходе устанавливать IM1. Если Вы его меняли, то сами знаете, когда надо его вернуть обратно. Если нет - либо больше некому его менять, либо тот, кто поменял, знает зачем это сделал, когда надо вернуть обратно, и расстроится, если вы сами принудительно это сделаете когда оно не ожидает такой подставы. Кстати, IM 1 правильно возвращать так: DI: LD A,#3F: LD I,A: IM 1: EI.
    4. LD IY,23610 - эта инструкция стоит в ПЗУ сразу после возврата из подпрограммы пользователя. На выходе этого делать не надо. Ограничение на использование IY состоит в том, что в обработчике прерывания IM 1 есть инструкция INC (IY + 40), увеличивающая старший байт переменной FRAMES. И, если Вы не запретили прерывания, переписав IY, то при переполнении младших байт FRAMES у Вас в программе что-то увеличится без вашей на то воли. Регистр IY можно использовать свободно только если прерывания запрещены или если установлен режим IM 2, но стандартная процедура обработки прерываний не зовется когда в IY Ваше значение.
    5. А вот по поводу 10072 в HL' - это правда, без этого значения там хужает калькулятору, который "досчитывает" функцию USR после возврата из Вашей подпрограммы. Это значение точно портится, если вы зовете подпрограммы, реализующие команды Бэйсика DRAW, CIRCLE, ну, или портите его сами.

  8. #7
    Activist Аватар для Doktor
    Регистрация
    07.06.2010
    Адрес
    Зиген, Германия
    Сообщений
    223
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всем спасибо.
    Я вобщем-то хотел только выяснить, какую пару нельзя портить, HL или H´L´.

  9. #8
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Doktor Посмотреть сообщение
    Всем спасибо.
    Я вобщем-то хотел только выяснить, какую пару нельзя портить, HL или H´L´.
    Альтернативную HL
    С уважением,
    Jerri / Red Triangle.

  10. #9
    R.I.P. Аватар для VNN_KCS
    Регистрация
    11.10.2007
    Адрес
    Донецкая обл. г.Енакиево
    Сообщений
    2,316
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Doktor Посмотреть сообщение
    H´L´.
    А это как? Только одну половину регистра? Что, так можно?
    Последний раз редактировалось VNN_KCS; 05.04.2011 в 19:11.

  11. #10
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Важно, что бы при выходе в Basic в альтернативной паре HL' было значение 10072 (2758h). Сохранять его не обязательно, оно всегда одно и то же на входе в подпрограмму, вызываемую из функции USR. HL' = H'L' - апостроф(ы) указывает(ют), что регистры H и L находятся в наборе, альтернативном тому, что установлен при выполнении RET в Basic.


    Цитата Сообщение от VNN_KCS Посмотреть сообщение
    А это как? Только одну половину регистра? Что, так можно?
    Формально можно.
    EXX
    LD H,n
    EXX
    L' не испортится.
    Но это уже словоблудие. Надо, чтобы в паре (то есть, в обоих регистрах) было так важное Бэйсику значение.

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

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

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

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

Похожие темы

  1. Корректный возврат в Basic
    от AndTorp в разделе Программирование
    Ответов: 2
    Последнее: 26.04.2009, 14:19
  2. Есть ли такой редактор бэйсик прог -
    от fan в разделе Зарубежные компьютеры
    Ответов: 6
    Последнее: 11.06.2007, 00:49

Ваши права

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