Arrow(X0 + 365, Y0 + 185, 0, 1); {5}
SetColor(BRDCol);
Rectangle(0, 0, GetMaxX, GetMaxY);
end; {BildWin}
{-------------------}
procedure BildContext;
const
TxtCol: Word = LightBlue;
begin
SetColor(BRDCol); {Устанавливаем цвет границы и рисуем ее}
Rectangle(XC, YC, GetMaxX - X0, YC + 300);
SetTextJustify(1, 1);
SetColor(TxtCol + 1); {Заголовок}
OutTextXY(GetMaxX - (GetMaxX - X0 - XC) div 2 - X0, YC + 20, 'Обозначения ' +
'на схеме:');
CArrow := BArrow; {Стрелки} SetColor(ARBCol); SetFillStyle(1, Blue); Arrow(XC + 50, YC + 50, 40, 2); FloodFill(XC + 40, YC + 50, ARBCol); CArrow := SArrow; SetColor(ARSCol); Arrow(XC + 50, YC + 80, 40, 2); SetColor(LightGreen); Arrow(XC + 50, YC + 80, 0, 2); SetColor(MemCol); SetLineStyle(1, 0, 0); Line(XC + 10, YC + 110, XC + 34, YC + 110); Line(XC + 10, YC + 126, XC + 34, YC + 126); Line(XC + 14, YC + 106, XC + 14, YC + 128); Line(XC + 30, YC + 106, XC + 30, YC + 128); SetColor(CPUCol); Line(XC + 12, YC + 150, XC + 30, YC + 150); SetLineStyle(0, 0, 0); SetColor(TxtCol); SetTextJustify(0, 1); {Значения} OutTextXY(XC + 60, YC + 50, ' - Передача данных'); OutTextXY(XC + 60, YC + 80, ' - Сигнал управления'); OutTextXY(XC + 60, YC + 120, ' - Ячейка памяти'); OutTextXY(XC + 60, YC + 150, ' - Данной линией'); OutTextXY(XC + 60, YC + 160, ' обведены части'); OutTextXY(XC + 60, YC + 170, ' входящие в состав'); OutTextXY(XC + 60, YC + 180, ' процессора (ЦПУ)'); OutTextXY(XC + 20, YC + 200, '█ - содержимое файла'); OutTextXY(XC + 20, YC + 210, '1 - адрес первого операнда'); OutTextXY(XC + 20, YC + 220, '2 - адрес второго операнда'); OutTextXY(XC + 20, YC + 230, '3 - адрес результата'); SetTextJustify(0, 0) end; {Context} {-------------------} procedure BildFuncKey; const StrFK: array [1..4] of string[11] = ('Помощь F1', 'Назад <-', 'Вперед ->', 'Выход Esc'); FkbCol: Word = Green; TxtCol: Word = LightCyan; begin SetColor(BRDCol); Rectangle(XS, YS, GetMaxX - XS, GetMaxY - XS); SetTextJustify(1, 1); SetFillStyle(1, DarkGray); for I := 1 to 4 do begin SetColor(FkbCol); {Установка цвета границы клавиш} Bar((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7, (GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23); Rectangle((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7, (GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23); SetColor(Black); {Установка цвета текста клавиш} OutTextXY((GetMaxX - XS * 2) div 5 * I + 2, YS + 15 - 2, StrFK[I]); SetColor(TxtCol); OutTextXY((GetMaxX - XS * 2) div 5 * I, YS + 15, StrFK[I]) end; SetTextJustify(0, 0); {Сахраняем картинки} FuncKeyWindow[1].Get(XS, YS, GetMaxX - XS, GetMaxY - XS); SetFillStyle(1, GetBkColor); Bar((GetMaxX - XS * 2) div 5 * 3 - Length(StrFK[I]) * 4, YS + 7, (GetMaxX - XS * 2) div 5 * 3 + Length(StrFK[I]) * 4, YS + 23); |
FuncKeyWindow[3].Get(XS, YS, GetMaxX - XS, GetMaxY - XS); FuncKeyWindow[1].Put(XS, YS); Bar((GetMaxX - XS * 2) div 5 * 2 - Length(StrFK[I]) * 4, YS + 7, (GetMaxX - XS * 2) div 5 * 2 + Length(StrFK[I]) * 4, YS + 23); FuncKeyWindow[2].Get(XS, YS, GetMaxX - XS, GetMaxY - XS) end; {FuncKey} {-------------------} {+----------------------------------------------+} { } { Процедуры вывода текстовой информации на экран } { } {+----------------------------------------------+} procedure Page_1; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); ClearViewPort; SetColor(Blue); OutTextXY(GetMaxX - X - 25, 100, '1'); SetColor(TxtCol); MyText(0, 8, 'До начала работы программы, она находится на ВЗУ, ' + 'в виде файла программы'); MyText(0, 16, '(*.exe или *.com).'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_1} {-------------------} procedure Page_2; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); ClearViewPort; SetColor(Blue); OutTextXY(GetMaxX - X - 25, 100, '2'); SetColor(TxtCol); MyText(0, 8, 'После того как ЭВМ получила команду на запуск ' + 'программы, содержимое'); MyText(0, 16, 'этого файла помещается в ячейку ОЗУ, начиная с ' + 'ячейки с некоторым'); MyText(0, 24, 'стартовым адресом.'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_2} {-------------------} procedure Page_3; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); ClearViewPort; SetColor(Blue); OutTextXY(GetMaxX - X - 25, 100, '3'); SetColor(TxtCol); MyText(0, 8, 'Содержимое ячейки со стартовым адресом программы ' + ' (первая машинная команда)'); MyText(0, 16, 'пересылается в УУ. УУ расшифровывает первую машинную ' + 'команду и выробатывает'); MyText(0, 24, 'соответствующие ей сигналы управления для всех систем управления.'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_3} {-------------------} procedure Page_4_1; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); ClearViewPort; |
SetColor(Blue); OutTextXY(GetMaxX - X - 25, 100, '4'); SetColor(TxtCol); MyText(0, 8, 'Например: если первой машинной командой оказалась ' + 'трех адресной командой'); MyText(0, 16, 'сложения двух чисел, произойдут следующие действия:'); MyText(0, 24, '- УУ посылает первый и второй адреса в ОЗУ'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_1} {-------------------} procedure Page_4_2; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); SetColor(TxtCol); MyText(0, 32, '- ОЗУ пересылает содержимое ячеек с этими адресами в АЛУ,'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_2} {-------------------} procedure Page_4_3; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); SetColor(TxtCol); MyText(0, 40, '- УУ отправляет сигнал управления (КОП) в АЛУ,'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_3} {-------------------} procedure Page_4_4; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); SetColor(TxtCol); MyText(0, 48, '- АЛУ выполняет эту операцию (сложение) над двумя ' + 'операндами и возвращает'); MyText(0, 56, ' результат в ОЗУ.'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_4} {-------------------} procedure Page_4_5; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); SetColor(TxtCol); MyText(0, 64, '- УУ собщает ОЗУ третий адрес (адрес результата),'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_5} {-------------------} procedure Page_4_6; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); SetColor(TxtCol); MyText(0, 72, '- ОЗУ помещает полученный результат в ячейку памяти.'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_6} {-------------------} procedure Page_4_7; begin SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); SetColor(TxtCol); MyText(0, 80, 'На этом выполнение первой машинной команды ' + 'заканчивается, происходит'); |
MyText(0, 88, 'переход к следующей по порядку машинной команде. ' + 'Содержимое ячейки ОЗУ с'); MyText(0, 96, 'адресом, следующим за стартовым, пересылается в УУ ' + 'и все повторяется.'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_6} {-------------------} {+------------------+} { } { Процедуры анимации } { } {+------------------+} procedure Move_1; begin BLink(150, 285, 'kurs.exe'); end; {Move_1} {-------------------} procedure Move_2; begin SetColor(Green); Animation(150, 285, -125, 2, ' █ █', True) end; {Move_2} {-------------------} procedure Move_3; begin SetColor(GetBkColor); SetColor(Green); Animation(100, 168, -70, 1, ' 1 2 +', True) end; {Move_3} {-------------------} procedure Move_4_1; begin SetColor(GetBkColor); OutTextXY(30, 176, ' 1 2'); SetColor(Green); Animation(47, 198, 63, 1, ' 1 2', False); SetColor(GetBkColor); OutTextXY(150, 168, ' █ █'); SetColor(Green); OutTextXY(150, 168, ' a b') end; {Move_4_1} {-------------------} procedure Move_4_2; begin SetColor(Green); Animation(150, 160, -95, 2, ' a b', True) end; {Move_4_2} {-------------------} procedure Move_4_3; begin setcolor(getbkcolor); OutTextXY(30, 176, ' +'); SetColor(Green); Animation(52, 160, -94, 2, '+', False) end; {Move_4_3} {-------------------} procedure Move_4_4; |
begin SetColor(Green); Animation(52, 66, 115, 1, '+', True); OutTextXY(183, 73, '=c') end; {Move_4_4} {-------------------} procedure Move_4_5; begin SetColor(GetBkColor); SetColor(Green); Animation(47, 198, 63, 1, '3', False); end; {Move_4_1} {-------------------} procedure Move_4_6; begin SetColor(Green); Animation(191, 66, 94, 2, 'c', True) end; {Move_4_5} {-------------------} procedure Help; {Помощь} const XH: Integer = 70; YH: Integer = 70; begin ClearDevice; SetColor(BRDCol); Rectangle(0, 0, GetMaxX, GetMaxY); SetColor(LightCyan); SetTextJustify(1, 0); OutTextXY(GetMaxX div 2, YH + 10,'Помощь:'); SetTextJustify(0, 0); OutTextXY(XH + 10, YH + 20,'Адрес :'); OutTextXY(XH + 10, YH + 30,'УУ :'); OutTextXY(XH + 10, YH + 40,'АЛУ :'); OutTextXY(XH + 10, YH + 50,'АЛУ+УУ :'); OutTextXY(XH + 10, YH + 60,'ВЗУ :'); OutTextXY(XH + 10, YH + 70,'ОЗУ :'); OutTextXY(XH + 10, YH + 80,'УВвода :'); OutTextXY(XH + 10, YH + 90,'УВывода:'); SetColor(Cyan); OutTextXY(XH + 90, YH + 20,'номер ячейки памяти'); OutTextXY(XH + 90, YH + 30,'устройство управления'); OutTextXY(XH + 90, YH + 40,'арифметико-логическое устройство'); OutTextXY(XH + 90, YH + 50,'процессор'); OutTextXY(XH + 90, YH + 60,'внешнее запоминающее устройство (hdd, fdd и др.)'); OutTextXY(XH + 90, YH + 70,'оперативное запоминающее устройство'); OutTextXY(XH + 90, YH + 80,'устройство ввода'); OutTextXY(XH + 90, YH + 90,'устройство вывода'); _Pause end; {Help} {-------------------} procedure MainWin; begin ClearDevice; BildWin; BildContext; BildFuncKey end; {MainWin} {-------------------} |
procedure Play; {-------------} procedure SelectPage(N: Byte); begin case N of 1: begin FuncKeyWindow[2].Put(XS, YS); Page_1; Move_1 end; 2: begin FuncKeyWindow[1].Put(XS, YS); Page_2; Move_2 end; 3: begin FuncKeyWindow[1].Put(XS, YS); Page_3; Move_3 end; 4: begin FuncKeyWindow[3].Put(XS, YS); Page_4_1; Move_4_1; Delay(Time_3 * 20); Page_4_2; Delay(Time_3 * 20); Move_4_2; Delay(Time_3 * 20); Page_4_3; Delay(Time_3 * 20); Move_4_3; Move_4_4; Page_4_4; Delay(Time_3 * 20); Page_4_5; Delay(Time_3 * 20); Move_4_5; Delay(Time_3 * 20); Page_4_6; Delay(Time_3 * 20); Move_4_6; Delay(Time_3 * 20); Page_4_7 end end end; {SelectPage} {-------------} const Back = #75; Next = #77; F1 = #59; Esc = #27; var ArrowsAndEsc: set of Char; ExtentedKey: Boolean; Flag: Boolean; CH: Char; N: Byte; begin ClearDevice; MainWin; N := 0; |
ArrowsAndEsc := [Back, Next, F1, Esc]; repeat ExtentedKey := False; Flag := False; CH := ReadKey; if CH = Esc then Flag := True; if CH = #0 then begin CH := ReadKey; ExtentedKey := True end; if ExtentedKey then case CH of Back: begin Dec(N); SelectPage(N); if N < 1 then N := 1 end; Next: begin Inc(N); SelectPage(N); if N > 4 then N := 4 end; F1: begin Temp[1].Get(X0, Y0, X0 + 380, Y0 + 300); Temp[2].Get(X0, Y0 + 305, GetMaxX - X0, YS - 5); Help; MainWin; Temp[1].Put(X0, Y0); Temp[2].Put(X0, Y0 + 305); if N <= 1 then FuncKeyWindow[2].Put(XS, YS); if N = 4 then FuncKeyWindow[3].Put(XS, YS) end end {Case} until Flag; ClearDevice end; {Play} {-------------------} procedure TextT(Col: TColor; S: TText); |