Організація роботи мiкропроцесора в захищеному режимi, страница 20

        port[$a1]:=k2;                                                                                  { 2-й ПКП: ICW2 }

        port[$a1]:=2;                                                                                    { 2-й ПКП: ICW3 }

        port[$a1]:=1;                                                                                    { 2-й ПКП: ICW4 }

      end; {pic}

    procedure save_sreg;                                                                       { Зберiгання змiсту }

      begin                                                                                          { сегментних регiстрiв }

        Memw[0:4*$60]:=Dseg;                                                                                         { DS, }

        real_ss:=Sseg;                                                                                                         { SS i }

        asm mov real_es,es end                                                                                           { ES }

      end; {save_sreg}

    procedure  reset;assembler;                                    { Повеpнення в pеальний режим }

       asm             { за командою контpолера клавiатуpи, яка виконує скидання МП }

          mov res,1                                                          { Установка ознаки скидання МП }

          mov al,$fe                                                                                  { Команда скидання }

          out $64,al                                                                                        { мiкpопpоцесоpа }

@wait_res:                                                               { Очiкування пiд час скидання МП }

          hlt

          jmp @wait_res

      end;

    procedure test_wr;

{---Перевiрка зберiгання заборони запису в сегмент коду пiсля повернення МП --}

{-------------------------з захищеного режиму за командою MOV: ---------------------------}

{------------------якщо заборона збережена – виникаєпереривання 13, ------------------}

{------------------------ обробник якого (процедура reset)скидає МП-----------------------}

       begin

Meml[0:13*4]:=Longint(@reset);     { Занесення адреси  обробника reset в таблицю }

векторів }

         asm

            db 2eh                                                                                                  { Префікс CS: }

            mov ax,[0]

            db 2eh

            mov [0],ax                                                                           { Запис в сегмент коду }

         end;

        pic(0);                                            { Програмування ПКП для реального режиму }

      end; {test_wr}

    procedure init_tss_286;                                                  { Формування TSS для 80286 }

        begin

          tss.cs:=cs;

          tss.ds:=ds;

          tss.es:=es;

          tss.ss:=ds;

          tss.ip:=ofs_task;

          tss.bp:=ofs_task_stack;

          tss.sp:=ofs_task_stack;

          tss.ldtr:=0;

          tss.flags:=0;

        end;

    procedure init_tss_386;                                    { Формування TSS для 80386 i вище }

        begin

          tss.cs:=cs;

          tss.ds:=ds;

          tss.es:=es;

          tss.ss:=ds;

          tss.eip:=ofs_task;

          tss.ebp:=ofs_task_stack;

          tss.esp:=ofs_task_stack;

          tss.ldtr:=0;

          tss.eflags:=0;

          tss.bit_t:=0;

          tss.adr_bkvv:=0;

          tss.byte_end:=$ff

        end;

{--------------------------Визначення типу мiкpопpоцесоpа (cpu_type)-----------------------}

    procedure get_cpu_type;

      var

        data_cach:array[1..4,1..4] of byte;                                              { Данi пpо кеш МП }

        EBX_,                    {  Бренд-индекс та ін. }

feature,                                                { Данi про особливостi МП (регістр EDX) }

        ECX_:longint;                                      { Данi про особливостi МП (регістр ECX) }