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

User Tag List

Показано с 1 по 6 из 6

Тема: Работа с графикой EGA (320x200x16) ATM-Turbo 2+

  1. #1
    Activist Аватар для mbojenov
    Регистрация
    25.10.2007
    Адрес
    Москва
    Сообщений
    392
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Работа с графикой EGA (320x200x16) ATM-Turbo 2+

    Итак. Попробуем разобраться.
    Исходные:
    Эмулятор Unreal Speccy. CP/M, Turbo Pascal 3.0.
    На написание графической библиотеки не претендую, для начала нужно чтобы компьютер корректно входил в графический режим 320x200x16, очищал экран и выходил обратно в консоль.

    Pascal:
    Минимальный стартовый адрес: 20E2 (я ставлю 8000), максимальный конечный адрес D942 (у меня BFFF), компилится в COM-файл.
    Procedure SetVidMode;
    begin
    inline($3e/$7A/$01/$7ff7/$ed/$79/$3e/$7E/$01/$fff7/$ed/$79/$3e/$a8/$01/$fd77/$ed/$79);
    end;

    Procedure ClrScrRt;
    begin
    inline($f5/$e5/$c5/$d5/$af/$21/$00/$40/$11/$01/$40/$01/$ff/$1a/$77/$00/$ed/$b0/$d1/$c1/$e1/$f1);
    end;

    Procedure CloseVidMode;
    begin
    inline($3e/$7b/$01/$7ff7/$ed/$79/$3e/$7c/$01/$fff7/$ed/$79/$3e/$ae/$01/$fd77/$ed/$79);
    end;

    Begin
    SetVidMode;
    ClrScrRt;
    CloseVidMode;
    End.

    Для реализации процедур используется машинный код.

    подробнее:
    переключение в режим EGA с 5 и 1 страницей памяти...
    7f1d 3e7a ld a,7ah
    7f1f 01f77f ld bc,7ff7h
    7f22 ed79 out (c),a
    7f24 3e7e ld a,7eh
    7f26 01f7ff ld bc,0fff7h
    7f29 ed79 out (c),a
    7f2b 3ea8 ld a,0a8h
    7f2d 0177fd ld bc,0fd77h
    7f30 ed79 out (c),a

    очистка экрана:
    7f33 f5 push af
    7f34 e5 push hl
    7f35 c5 push bc
    7f36 d5 push de
    7f37 af xor a
    7f38 210040 ld hl,4000h
    7f3b 110140 ld de,4001h
    7f3e 01ff1a ld bc,3fffh
    7f41 77 ld (hl),a
    7f42 00 nop
    7f43 edb0 ldir
    7f38 210040 ld hl,c000h
    7f3b 110140 ld de,c001h
    7f3e 01ff1a ld bc,3fffh
    7f41 77 ld (hl),a
    7f42 00 nop
    7f43 edb0 ldir
    7f45 d1 pop de
    7f46 c1 pop bc
    7f47 e1 pop hl
    7f48 f1 pop af

    Выход в терминал:

    7f4a 3e7b ld a,7bh
    7f4c 01f77f ld bc,7ff7h
    7f4f ed79 out (c),a
    7f51 3e7c ld a,7ch
    7f53 01f7ff ld bc,0fff7h
    7f56 ed79 out (c),a
    7f58 3eae ld a,0aeh
    7f5a 0177fd ld bc,0fd77h
    7f5d ed79 out (c),a

    при пошаговом исполнении в отладчике все проходит нормально.
    При стандартном запуске программа зависает на этапе очистки экрана, в районе команды ldir.
    экран остается неочищенным, а процессор продолжает гулять по просторам четвертой страницы.

    Вопрос такой: почему так происходит и как это исправить...
    ZX Evolution

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

  3. #2
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mbojenov Посмотреть сообщение
    7f38 210040 ld hl,4000h
    7f3b 110140 ld de,4001h
    7f3e 01ff1a ld bc,3fffh
    7f41 77 ld (hl),a
    7f42 00 nop
    7f43 edb0 ldir
    судя по адресам ldir затирает весь код с $7F1D до $7F42 а потом сам себя...
    то есть процедуры для очистки лежат не там где надо

    а ты говорил что
    программу располагаю начиная с адреса #8000.
    - - - Добавлено - - -

    Цитата Сообщение от mbojenov Посмотреть сообщение
    при пошаговом исполнении в отладчике все проходит нормально.
    ну чтоб дошагать до того момента когда ldir затрет 16К
    нужно пошагать достаточно долго

    поставь breakpoint после ldir-а
    и сам увидишь что произошло
    Последний раз редактировалось NEO SPECTRUMAN; 28.08.2020 в 23:05.

  4. #3
    Activist Аватар для mbojenov
    Регистрация
    25.10.2007
    Адрес
    Москва
    Сообщений
    392
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все загружается как я заявил, и мне совершенно не лень жать кнопку F7 до победного конца ))

    https://ibb.co/rt2gRpd

    По прежнему прошу помощи в решении этого ребуса...
    Последний раз редактировалось mbojenov; 29.08.2020 в 18:47.
    ZX Evolution

  5. #4
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,550
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    271
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    178 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mbojenov Посмотреть сообщение
    Работа с графикой EGA
    Цитата Сообщение от mbojenov Посмотреть сообщение
    переключение в режим EGA
    сколько можно людям морочить головы, кроме разрешения и цветов, в тех режимах ничего нет общего с EGA, а в работе - вовсе ничего общего
    Прихожу без разрешения, сею смерть и разрушение...

  6. #5
    Activist Аватар для mbojenov
    Регистрация
    25.10.2007
    Адрес
    Москва
    Сообщений
    392
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Lethargeek, Ваши аргументы безоговорочно принимаются.

    Тем не менее хочется разобраться в причине такой работы программы.
    ZX Evolution

  7. #6
    Activist Аватар для mbojenov
    Регистрация
    25.10.2007
    Адрес
    Москва
    Сообщений
    392
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разобрался. Во время выполнения процедуры очистки экрана ЦП решает выполнить некое прерывание из которого уже не возвращается. Я в начале процедуры запретил прерывания командой DI, а в конце разрешил их командой EI.
    И все заработало.

    Спасибо CHRV и Максагору за наводку, где копать.
    ZX Evolution

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

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

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

Похожие темы

  1. Ответов: 9
    Последнее: 15.06.2020, 02:02
  2. Ответов: 33
    Последнее: 24.12.2019, 10:17
  3. Приобрету ATM-turbo 2+
    от Максагор в разделе Барахолка (архив)
    Ответов: 9
    Последнее: 30.05.2012, 21:18
  4. Работа NemoBus устройств в TURBO режиме
    от Black_Cat в разделе Внешние накопители
    Ответов: 4
    Последнее: 06.07.2011, 08:33

Ваши права

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