Работа с графикой 320x200x16 ATM-Turbo 2+

atmturbo.nedopc.com - all about ATM Turbo (hardware, software ..)

Postby mbojenov » 30 Aug 2020, 18:03

Здравствуйте, уважаемые форумчане и гуру. Прошу помочь!
Исходные:
Эмулятор 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 страницей памяти...
3e7a ld a,7ah
01f77f ld bc,7ff7h
ed79 out (c),a
3e7e ld a,7eh
01f7ff ld bc,0fff7h
ed79 out (c),a
3ea8 ld a,0a8h
0177fd ld bc,0fd77h
ed79 out (c),a

очистка экрана:
f5 push af
e5 push hl
c5 push bc
d5 push de
af xor a
210040 ld hl,4000h
110140 ld de,4001h
01ff1a ld bc,3fffh
77 ld (hl),a
00 nop
edb0 ldir
210040 ld hl,c000h
110140 ld de,c001h
01ff1a ld bc,3fffh
77 ld (hl),a
00 nop
edb0 ldir
d1 pop de
c1 pop bc
e1 pop hl
f1 pop af

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

3e7b ld a,7bh
01f77f ld bc,7ff7h
ed79 out (c),a
3e7c ld a,7ch
01f7ff ld bc,0fff7h
ed79 out (c),a
3eae ld a,0aeh
0177fd ld bc,0fd77h
ed79 out (c),a

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

Вопрос такой: почему так происходит и как это исправить...
mbojenov
 
Posts: 4
Joined: 30 Aug 2020, 10:49
Group: Registered users

Postby CHRV » 31 Aug 2020, 13:28

В каком режиме прерывания IM
Многое есть здесь: www.nedopc.com
User avatar
CHRV
Желесяка
 
Posts: 945
Joined: 15 Apr 2007, 22:52
Group: Registered users

Postby mbojenov » 31 Aug 2020, 20:33

отладчик unreal speccy во время исполнения программы показывает im2
mbojenov
 
Posts: 4
Joined: 30 Aug 2020, 10:49
Group: Registered users

Postby mbojenov » 03 Sep 2020, 11:03

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

Спасибо CHRV и Максиму Тимонину за наводку, где копать.
mbojenov
 
Posts: 4
Joined: 30 Aug 2020, 10:49
Group: Registered users


Return to ATM turbo - софт и железо

Who is online

Users browsing this forum: No registered users and 3 guests

cron