Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СП_курсовой.docx
Скачиваний:
2
Добавлен:
14.07.2019
Размер:
231.71 Кб
Скачать

4 Выполнение информационных расчетов

4.2 Расчёт надёжности программы-отладчика

Для оценки надёжности функционирования программы применена модель Коркорэна, которая учитывает динамику отладки программы:

(5.2)

где – число успешных испытаний в серии из прогонов программы; – число типов ошибок, по которым ведётся учёт; – число ошибок -го типа, выявленных за прогонов; – масштабирующий коэффициент, определяемый ступенчатой функцией

(5.3)

где – вероятность устранения ошибки -го типа.

N0 = 41 N = 50 T = 6

0.95

Полученные показатели являются нормальными для данного программного продукта, т.к. он является учебным.

ЗАКЛЮЧЕНИЕ

В результате выполнения данного курсового проекта был создан транслятор-отладчик микропроцессора К1816ВЕ48, позволяющий реализовывать лексический и синтаксический анализы, генерацию машинных кодов, дизассемблирование машинных кодов и распознавание определённого набора команд для данного типа микропроцессора. Также реализована возможность изменения данных в памяти, текущего состояния регистров и флагов, пошаговый и автоматический режим выполнения программы.

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

Библиографический список

  1. Буреев Л.Н. Простейшая микро-ЭВМ / Л.Н.Буреев, А.Л.Дудко, В.Н.Захаров. - М.: «Мир», 1992. 218с.

  2. Григорьев В.Л. Программирование однокристальных микропроцессоров /В.Л. Григорьев. – М.: Энергоатомиздат, 1987. – 288 с.

  3. Григорьев В.Л. Программное обеспечение микропроцессорных систем. /В.Л. Григорьев. – М.: Энергоатомиздат, 1983. – 208 с.

  4. Леветаль Л. Программирование на языке ассемблера. / Л. Леветаль, У. Сейвилл. – М.:Радио и связь,1987 .– 447с.

ПРИЛОЖЕНИЕ А

Текст программы отладчика

//---------------------------------------------------------------------------

#include <vcl.h>

#include <fstream.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

int col, row;

int command_count=0, cell_count=1;

bool pause=0, stop=0, step=0;

int delay=1;

AnsiString decTobin(int dec_val)

{

char bin_val[8];

int i=7;

int t_val=dec_val;

//bin_val[8]='\n';

while (t_val>=2)

{

bin_val[i]=t_val-t_val/2*2+'0';

t_val/=2;

i--;

}

bin_val[i--]=t_val+'0';

while(i>=0)

{

bin_val[i]='0';

i--;

}

bin_val[8]='\n';

AnsiString ret=(AnsiString)bin_val;

ret.SetLength(8);

return ret;

}

int get_row(int a, int b)

{

int i,j=0;

for(i=1;i<b;i++) {

AnsiString d=Form2->StringGrid1->Cells[4][i];

if (StrToInt(d)==a)

j=i;

}

return j;

}

int stepen2(int step)

{

int val=1;

for(int i=0; i<step; i++)

val*=2;

return val;

}

int binTodec(AnsiString a, int length)

{

AnsiString s=a;

int dec_val=0;

int i=length;

char *bin_val=s.c_str();

for(i;i>=0;i--)

{

if (bin_val[i]=='1')

dec_val+=stepen2(length-i);

}

return dec_val;

}

struct command

{

int code;

int byte_count;

};

unsigned char a;

class KP1816VE48

{

//private:

public:

short int progr_length, comm_length;

/////////////АЛУ////////////////////

unsigned char A,B;

bool T1, T2, Int, PR, EMA, PME, ALE, W, RD;

//в PSW записывать 10- или 16-ричное представление всех флагов

//признаки

bool IE, F1, MB;

bool C, AC,F0, RB, SP1,SP0,SP2;

short int stack_pointer;

unsigned char SP; //для записи указателя стека(SP2,SP1, SP0)

//таймер

unsigned char PB; // регистр временного хранения

unsigned char PA; // регистр аккумулятора

/////////////////////////////////////////

//////// таймер

int TCNT;//

bool TF, TIE;

//..............................................

short int PC; //счетчик команд (12 разрядов)

//...............указатель стека..........

//struct data_memory

//{

unsigned char data_memory[64];

unsigned char *RB0[8], *RB1[8];

unsigned char *stack[16];

//};

unsigned char program_memory[2048];//память программ

char *RPP[1024];

char *VPP[1024];

unsigned char BUS, P1,P2, P4,P5,P6,P7;

//public:

void reset()

{

stop=0;

command_count=0, cell_count=1;

int i;

progr_length=0;

A=0;

BUS=0; P1=0; P2=0; P4=0; P5=0; P6=0; P7=0;

T1=0; T2=0; Int=0; PR=0; EMA=0; PME=0; ALE=0; W=0; RD=0;

IE=0; F1=0; MB=0;

C=0; AC=0; F0=0; RB=0; SP1=0;SP0=0;SP2=0;

//stack_pointer=0x08;

SP=0x10; //указатель стека - адрес памяти данных

PB=0;PA=0;

TIE=0; TCNT=0; TF=0; PC=0;

for(i=0;i<64;i++)

data_memory[i]=0;

for(i=0;i<2048;i++)

program_memory[i]=0;

show();

}

KP1816ve48 ()

{

reset();

for(int i=0;i<1024;i++)

{

program_memory[i]=0;

RPP[i]=program_memory+i;

}

for(int i=1024;i<2048;i++)

{

program_memory[i]=0;

VPP[i]=program_memory+i;

}

for(int i=0;i<8;i++)

{

data_memory[i]=0;

RB0[i]=data_memory+i;

}

for(int i=8;i<24;i++)

{

data_memory[i]=0;

stack[i]=data_memory+i;

}

for(int i=24;i<32;i++)

{

data_memory[i]=0;

RB1[i]=data_memory+i;

}

for(int i=32;i<64;i++)

{

data_memory[i]=0;

}

a=*(RPP[0]);

show();

};

int get_progr_mem_value(int i)

{

return program_memory[i];

}

void show()

{

Form2->CheckBox1->Checked=IE?1:0;

Form2->CheckBox2->Checked=F1?1:0;

Form2->CheckBox3->Checked=MB?1:0;

Form2->CheckBox4->Checked=MB?0:1;

Form2->CheckBox5->Checked=C?1:0;

Form2->CheckBox6->Checked=AC?1:0;

Form2->CheckBox7->Checked=F0?1:0;

Form2->CheckBox8->Checked=RB?1:0;

Form2->StringGrid9->Cells[0][1]=SP0?1:0;

Form2->StringGrid9->Cells[1][1]=SP1?1:0;

Form2->StringGrid9->Cells[2][1]=SP2?1:0;

Form2->Edit14->Text=TIE?1:0;

Form2->Edit13->Text=TF?1:0;

int i,j,k=0;

for(i=0;i<8;i++)

Form2->StringGrid8->Cells[7-i][1]=(A>>i)&1;

if(Form2->RadioButton3->Checked)

{

for(i=0;i<8;i++)

{

Form2->StringGrid2->Cells[2][i+1]=IntToHex(data_memory[i],2);

Form2->StringGrid2->Cells[4][i+1]=IntToHex(data_memory[i+18],2);

Form2->StringGrid2->Cells[6][i+1]=IntToHex(data_memory[i+8],2);

Form2->StringGrid2->Cells[5][i+1]=IntToHex(i+8,2);

}

Form2->Edit12->Text=IntToHex(TCNT,2);

}

if(Form2->RadioButton1->Checked)

for(i=0;i<8;i++)

{

Form2->StringGrid2->Cells[2][i+1]=data_memory[i];

Form2->StringGrid2->Cells[4][i+1]=data_memory[i+18];

Form2->StringGrid2->Cells[6][i+1]=data_memory[i+8];

Form2->StringGrid2->Cells[5][i+1]=IntToHex(i+8,2);

}

Form2->Edit12->Text=TCNT;

int PSW=get_psw();

if(Form2->RadioButton3->Checked) //16-ричная система

{

Form2->Edit2->Text=IntToHex(data_memory[0],2);

Form2->Edit3->Text=IntToHex(data_memory[1],2);

Form2->Edit21->Text=IntToHex(data_memory[2],2);

Form2->Edit22->Text=IntToHex(data_memory[3],2);

Form2->Edit23->Text=IntToHex(data_memory[4],2);

Form2->Edit24->Text=IntToHex(data_memory[5],2);

Form2->Edit25->Text=IntToHex(data_memory[6],2);

Form2->Edit26->Text=IntToHex(data_memory[7],2);

Form2->Edit34->Text=IntToHex(data_memory[0x18],2);

Form2->Edit33->Text=IntToHex(data_memory[0x19],2);

Form2->Edit32->Text=IntToHex(data_memory[0x1A],2);

Form2->Edit31->Text=IntToHex(data_memory[0x1B],2);

Form2->Edit30->Text=IntToHex(data_memory[0x1C],2);

Form2->Edit29->Text=IntToHex(data_memory[0x1D],2);

Form2->Edit28->Text=IntToHex(data_memory[0x1E],2);

Form2->Edit27->Text=IntToHex(data_memory[0x1F],2);

Form2->Edit42->Text=IntToHex(data_memory[0x08],2);

Form2->Edit41->Text=IntToHex(data_memory[0x09],2);

Form2->Edit40->Text=IntToHex(data_memory[0x0A],2);

Form2->Edit39->Text=IntToHex(data_memory[0x0B],2);

Form2->Edit38->Text=IntToHex(data_memory[0x0C],2);

Form2->Edit37->Text=IntToHex(data_memory[0x0D],2);

Form2->Edit36->Text=IntToHex(data_memory[0x0E],2);

Form2->Edit35->Text=IntToHex(data_memory[0x0F],2);

Form2->Edit9->Text=IntToHex(PC,3);

Form2->Edit5->Text=IntToHex(A,2);

Form2->Edit4->Text=IntToHex(B,2);

Form2->Edit18->Text=decTobin(BUS);

Form2->Edit16->Text=decTobin(P1);

Form2->Edit17->Text=decTobin(P2);

Form2->Edit6->Text=IntToHex(BUS,2);

Form2->Edit7->Text=IntToHex((int)P1,2);

Form2->Edit8->Text=IntToHex(P2,2);

Form2->Edit15->Text=IntToHex(PSW,2);

Form2->Edit10->Text=IntToHex(P4,2);

Form2->Edit11->Text=IntToHex(P5,2);

Form2->Edit19->Text=IntToHex(P6,2);

Form2->Edit20->Text=IntToHex(P7,2);

k=0;

for(i=0; i<8; i++)

for(j=0;j<8; j++)

{

Form2->StringGrid3->Cells[j+1][i+1]=IntToHex(data_memory[k],2);

k++;

}

k=0;

for(i=0; i<128; i++)

for(j=0;j<8; j++)

{

Form2->StringGrid4->Cells[j+1][i+1]=IntToHex(program_memory[k],2);

k++;

}

}

else if(Form2->RadioButton1->Checked) //10-тичная система

{

Form2->Edit2->Text=data_memory[0];

Form2->Edit3->Text=data_memory[1];

Form2->Edit21->Text=data_memory[2];

Form2->Edit22->Text=data_memory[3];

Form2->Edit23->Text=data_memory[4];

Form2->Edit24->Text=data_memory[5];

Form2->Edit25->Text=data_memory[6];

Form2->Edit26->Text=data_memory[7];

Form2->Edit34->Text=data_memory[0x18];

Form2->Edit33->Text=data_memory[0x19];

Form2->Edit32->Text=data_memory[0x1A];

Form2->Edit31->Text=data_memory[0x1B];

Form2->Edit30->Text=data_memory[0x1C];

Form2->Edit29->Text=data_memory[0x1D];

Form2->Edit28->Text=data_memory[0x1E];

Form2->Edit27->Text=data_memory[0x1F];

Form2->Edit42->Text=data_memory[0x08];

Form2->Edit41->Text=data_memory[0x09];

Form2->Edit40->Text=data_memory[0x0A];

Form2->Edit39->Text=data_memory[0x01B];

Form2->Edit38->Text=data_memory[0x0C];

Form2->Edit37->Text=data_memory[0x0D];

Form2->Edit36->Text=data_memory[0x0E];

Form2->Edit35->Text=data_memory[0x0F];

Form2->Edit9->Text=PC;

Form2->Edit18->Text=BUS;

Form2->Edit16->Text=P1;

Form2->Edit17->Text=P2;

Form2->Edit5->Text=A;

Form2->Edit4->Text=B;

Form2->Edit18->Text=decTobin(BUS);

Form2->Edit16->Text=decTobin(P1);

Form2->Edit17->Text=decTobin(P2);

Form2->Edit6->Text=BUS;

Form2->Edit7->Text=P1;

Form2->Edit8->Text=P2;

Form2->Edit15->Text=PSW;

Form2->Edit10->Text=P4;

Form2->Edit11->Text=P5;

Form2->Edit19->Text=P6;

Form2->Edit20->Text=P7;

k=0;

for(i=0; i<8; i++)

for(j=0;j<8; j++)

{

Form2->StringGrid3->Cells[j+1][i+1]=data_memory[k];

k++;

}

k=0;

for(i=0; i<128; i++)

for(j=0;j<8; j++)

{

Form2->StringGrid4->Cells[j+1][i+1]=program_memory[k];

k++;

}

}

else if(Form2->RadioButton2->Checked)

{

for(i=0;i<8;i++)

{

Form2->StringGrid2->Cells[2][i+1]=data_memory[i];

Form2->StringGrid2->Cells[4][i+1]=data_memory[i+18];

Form2->StringGrid2->Cells[6][i+1]=data_memory[i+8];

Form2->StringGrid2->Cells[5][i+1]=IntToHex(i+8,2);

}

Form2->Edit12->Text=decTobin(TCNT);

//int PSW=get_psw();

Form2->Edit9->Text=decTobin(PC);

Form2->Edit5->Text=decTobin(A);

Form2->Edit4->Text=decTobin(B);

Form2->Edit18->Text=decTobin(BUS);

Form2->Edit16->Text=decTobin(P1);

Form2->Edit17->Text=decTobin(P2);

Form2->Edit6->Text=IntToHex(BUS,2);

Form2->Edit7->Text=IntToHex((int)P1,2);

Form2->Edit8->Text=IntToHex(P2,2);

Form2->Edit15->Text=decTobin(PSW);

Form2->Edit10->Text=decTobin(P4);

Form2->Edit11->Text=decTobin(P5);

Form2->Edit19->Text=decTobin(P6);

Form2->Edit20->Text=decTobin(P7);

k=0;

for(i=0; i<8; i++)

for(j=0;j<8; j++)

{

Form2->StringGrid3->Cells[j+1][i+1]=IntToHex(data_memory[k],2);

k++;

}

k=0;

for(i=0; i<128; i++)

for(j=0;j<8; j++)

{

Form2->StringGrid4->Cells[j+1][i+1]=IntToHex(program_memory[k],2);

k++;

}

}

}

void clear_OZU()

{

for (int i=0;i<64;i++)

data_memory[i]=0;

show();

}

void anl_R(unsigned char R)

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

unsigned char value;

unsigned char prev_a=A; //предыдущее значение в аккумуляторе

if (RB==0)

switch(R)

{

case 0: value=data_memory[0]; break;

case 1: value=data_memory[1]; break;

case 2: value=data_memory[2]; break;

case 3: value=data_memory[3]; break;

case 4: value=data_memory[4]; break;

case 5: value=data_memory[5]; break;

case 6: value=data_memory[6]; break;

case 7: value=data_memory[7]; break;

}

else

switch(R)

{

case 0: value=data_memory[24]; break;

case 1: value=data_memory[25]; break;

case 2: value=data_memory[26]; break;

case 3: value=data_memory[27]; break;

case 4: value=data_memory[28]; break;

case 5: value=data_memory[29]; break;

case 6: value=data_memory[30]; break;

case 7: value=data_memory[31]; break;

}

A=A&value;

B=0;

PC++;

show();

}

void anl_sobaka_R(bool R)

{

Application->ProcessMessages();

//while(pause) {Application->ProcessMessages();};

unsigned char value;

short addr;

addr=data_memory[R];

value=data_memory[addr];

A=A&value;

B=0;

PC++;

show();

}

void anl_a_data(unsigned char data)

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

A=A&data;

B=data;

PC+=2;

show();

}

void anl_bus_data(unsigned char data)

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

BUS=BUS&data;

B=data;

PC+=2;

show();

}

void anl_port_data(bool port, unsigned char data)

{

while(pause) {Application->ProcessMessages();};

if(port==0)

P1=P1&data;

else

P2=P2&data;

B=data;

PC+=2;

show();

}

void jnc(short addr)

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

if(!C)

{

PC=0;

PC+=addr;

Form2->StringGrid1->Cells[0][cell_count]="";

cell_count=get_row(PC,progr_length);

command_count=PC;

}

else PC+=2;

show();

}

void nop()

{

PC++;

show();

}

void outl_bus_a()

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

BUS=A;

B=0;

PC++;

show();

}

void outl_port_a(bool port)

{

while(pause) {Application->ProcessMessages();};

if(!port)

P1=A;

else

P2=A;

PC++;

show();

}

void orld_pd_a(unsigned char port)

{

Application->ProcessMessages();

while(pause) {};

unsigned char temp;

switch (port)

{

case 4: P4=(P4|A)&&0x0F; break;

case 5: P4=(P5|A)&&0x0F; break;

case 6: P4=(P6|A)&&0x0F; break;

case 7: P4=(P7|A)&&0x0F; break;

}

PC+=2;

}

void retr()

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

SP=-2;

stack_pointer=data_memory[SP];

stack_pointer<<8;

stack_pointer==stack_pointer||data_memory[SP+1];

PC=stack_pointer;

PC>>4;

if (SP&0x20) SP0=1;

if (SP&0x40) SP1=1;

if (SP&0x80) SP2=1;

command_count=PC;

Form2->StringGrid1->Cells[0][cell_count]="";

cell_count=get_row(PC, progr_length);

show();

}

void rla()

{

Application->ProcessMessages();

while(pause) {Application->ProcessMessages();};

A=(A<<1)|(A>>7);

PC++;

show();

}

int get_psw()

{

int one=0;

one+=SP0?1:0;

one+=(SP1?1:0)*2;

one+=(SP2?1:0)*4;

one+=(RB?1:0)*16;

one+=(F0?1:0)*32;

one+=(AC?1:0)*64;

one+=(C?1:0)*128;

return one;

}

void direct()

{

PC++;

show();

}

void get_comm()

{

AnsiString comm,addr, code;

int i=0, j=0;

while(i<comm_length)

{

comm="";

addr=IntToHex(j,3);

code=IntToHex(program_memory[i],2);

switch (program_memory[i] & 0xF0)

{

case 0x50: //ANL A, <reg>; ANL A, #data;

switch (program_memory[i]&0x0F)

{

case(0x08): comm= "ANL A, R0"; break;

case(0x09): comm= "ANL A, R1"; break;

case(0x0A): comm= "ANL A, R2"; break;

case(0x0B): comm= "ANL A, R3"; break;

case(0x0C): comm= "ANL A, R4"; break;

case(0x0D): comm= "ANL A, R5"; break;

case(0x0E): comm= "ANL A, R6"; break;

case(0x0F): comm= "ANL A, R7"; break;

case(0x03): comm= "ANL A, #"+IntToStr(program_memory[++i]);

code=IntToHex(program_memory[i-1],2)+" "+ IntToHex(program_memory[i],2);

break;

}

break;

case (0x60):

switch(program_memory[i]&0x0F)

{

case (0x00): comm="ANL A,@R0"; break;

case (0x01): comm="ANL A,@R1"; break;

}

break;

//=========================команды дальше==============

case(0x90):

switch(program_memory[i]&0x0F)

{

case (0x08): comm= "ANL BUS, #"+IntToStr(program_memory[++i]);

code=IntToHex(program_memory[i-1],2)+" "+ IntToHex(program_memory[i],2);

break;

case (0x0A): comm= "ANL P2, #"+IntToStr(program_memory[++i]);

code=IntToHex(program_memory[i-1],2)+" "+ IntToHex(program_memory[i],2);

break;

case (0x09): comm= "ANL P1, #"+IntToStr(program_memory[++i]);

code=IntToHex(program_memory[i-1],2)+" "+ IntToHex(program_memory[i],2);

break;

case (0x03): comm= "RETR";break;

} break;

case (0xE0) :

switch(program_memory[i]&0x0F)

{

case(0x06): comm= "JNC "+IntToHex(program_memory[++i],3);

code=IntToHex(program_memory[i-1],2)+" "+ IntToHex(program_memory[i],2);

break;

break;

case(0x07): comm= "RL A";break;

}

break;

case ( 0x00):

switch(program_memory[i]&0x0F)

{

case(0x00): comm= "NOP";break;

case(0x02): comm= "OUTL BUS, A";break;

}break;

case ( 0x30):

switch(program_memory[i]&0x0F)

{

case(0x09): comm= "OUTL P1,A";break;

case(0x0A): comm= "OUTL P2,A";break;

}

break;

case ( 0x80):

switch(program_memory[i]&0x0F)

{

case(0x0C): comm= "ORDL P4, A";

break;

case(0x0D): comm= "ORDL P5, A";

break;

case(0x0E): comm= "ORDL P6, A";

break;

case(0x0F): comm= "ORDL P7, A";

break;

}

break;

case ( 0x40):

switch(program_memory[i]&0x0F)

{

case(0x05): comm= "STOP CNT"; break;

}

default: comm=IntToStr(program_memory[i]);

}

i++;

Form2->StringGrid1->Cells[4][j+1]=i;

j++;

Form2->StringGrid1->Cells[3][j]=comm;

Form2->StringGrid1->Cells[2][j]=code;

Form2->StringGrid1->Cells[0][j]="";

}

progr_length=i-1;

}

void stop_func()

{

Form2->Button7->Click();

stop=1;

}

void sw(int &i, int &k)

{

if(k>1)

Form2->StringGrid1->Cells[0][k-1]="";

Form2->StringGrid1->Cells[0][k]="*";

if(Form2->StringGrid1->Cells[1][k]=="1")

Form2->Button7->Click();

switch (program_memory[i] & 0xF0)

{

case 0x50: //ANL A, <reg>; ANL A, #data;

switch (program_memory[i]&0x0F)

{

case(0x08): anl_R(0); break;

case(0x09): anl_R(1); break;

case(0x0A): anl_R(2); break;

case(0x0B): anl_R(3); break;

case(0x0C): anl_R(4); break;

case(0x0D): anl_R(5); break;

case(0x0E): anl_R(6); break;

case(0x0F): anl_R(7); break;

case(0x03):anl_a_data(program_memory[++i]);break;

}

break;

case (0x60):

switch(program_memory[i]&0x0F)

{

case (0x00): anl_sobaka_R(0); break;

case (0x01): anl_sobaka_R(1); break;

}

break;

//=========================команды дальше==============

case(0x90):

switch(program_memory[i]&0x0F)

{

case (0x08): anl_bus_data(program_memory[++i]);break;

case (0x0A): anl_port_data(1,program_memory[++i]); break;

case (0x09): anl_port_data(0,program_memory[++i]); break;

case (0x03): retr();break;

} break;

case (0xE0) :

switch(program_memory[i]&0x0F)

{

case(0x06): jnc(program_memory[++i]);break;

case(0x07): rla();break;

}

break;

case ( 0x00):

switch(program_memory[i]&0x0F)

{

case(0x00): nop();break;

case(0x02): outl_bus_a();break;

}break;

case ( 0x30):

switch(program_memory[i]&0x0F)

{

case(0x09): outl_port_a(0);break;

case(0x0A): outl_port_a(1);break;

}

break;

case ( 0x80):

switch(program_memory[i]&0x0F)

{

case(0x0C): orld_pd_a(4); break;

case(0x0D): orld_pd_a(5); break;

case(0x0E): orld_pd_a(6); break;

case(0x0F):orld_pd_a(7); break;

}

break;

case ( 0x40):

switch(program_memory[i]&0x0F)

{

case(0x05): stop_func(); break;

}

default: direct();

}

i=PC;

// i++;

k++;

}

void program(int i)

{

Application->ProcessMessages();

int j=0;

while(i<progr_length)

{

while(pause==1) {Application->ProcessMessages();};

switch (program_memory[i] & 0xF0)

{

case 0x50: //ANL A, <reg>; ANL A, #data;

switch (program_memory[i]&0x0F)

{

case(0x08): anl_R(0); break;

case(0x09): anl_R(1); break;

case(0x0A): anl_R(2); break;

case(0x0B): anl_R(3); break;

case(0x0C): anl_R(4); break;

case(0x0D): anl_R(5); break;

case(0x0E): anl_R(6); break;

case(0x0F): anl_R(7); break;

case(0x03):anl_a_data(program_memory[++i]);break;

}

break;

case (0x60):

switch(program_memory[i]&0x0F)

{

case (0x00): anl_sobaka_R(0); break;

case (0x01): anl_sobaka_R(1); break;

}

break;

//=========================команды дальше==============

case(0x90):

switch(program_memory[i]&0x0F)

{

case (0x08): anl_bus_data(program_memory[++i]);break;

case (0x0A): anl_port_data(1,program_memory[++i]); break;

case (0x09): anl_port_data(0,program_memory[++i]); break;

case (0x03): retr();break;

} break;

case (0xE0) :

switch(program_memory[i]&0x0F)

{

case(0x06): jnc(program_memory[++i]);break;

case(0x07): rla();break;

}

break;

case ( 0x00):

switch(program_memory[i]&0x0F)

{

// case(0x00): comm = "NOP";break;

case(0x02): outl_bus_a();break;

}break;

case ( 0x30):

switch(program_memory[i]&0x0F)

{

case(0x09): outl_port_a(0);break;

case(0x0A): outl_port_a(1);break;

}

break;

case ( 0x80):

switch(program_memory[i]&0x0F)

{

case(0x0C): orld_pd_a(4); break;

case(0x0D): orld_pd_a(5); break;

case(0x0E): orld_pd_a(6); break;

case(0x0F):orld_pd_a(7); break;

}

break;

case ( 0x40):

switch(program_memory[i]&0x0F)

{

// case(0x05): comm= "STOP CNT"; break;

}

default: direct();

}

i++;

j++;

if(step)

{

pause=1; step=0;}

}

}

};

KP1816VE48 proc;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

char hex_symb(int val)

{

switch (val)

{

case 10: return 'A';

case 11: return 'B';

case 12: return 'C';

case 13: return 'D';

case 14: return 'E';

case 15: return 'F';

}

}

int GetDecFromHex(char c)

{

switch (c)

{

case 'A':case'a': return 10;

case 'B':case'b': return 11;

case 'C':case'c': return 12;

case 'D':case'd': return 13;

case 'E':case'e': return 14;

case 'F':case'f': return 15;

}

}

AnsiString binTohex(AnsiString s)

{

char hex_val[2];

char* bin_val=s.c_str();

char first_bin[4];

for (int i=0;i<4; i++)

first_bin[i]=bin_val[i];

char second_bin[4];

for (int i=4;i<8; i++)

second_bin[i-4]=bin_val[i];

int f_hex=binTodec((AnsiString)first_bin,3);

if(f_hex>9)

hex_val[0]=hex_symb(f_hex);

else hex_val[0]=f_hex+'0';

int s_hex=binTodec((AnsiString)second_bin,3);

if(s_hex>9)

hex_val[1]=hex_symb(s_hex);

else hex_val[1]=s_hex+'0';

AnsiString ret = (AnsiString)hex_val;

ret.SetLength(2);

return ret;

}

int hexTodec(AnsiString s)

{

int dec_val=0;

char * hex=s.c_str();

int f_hex=0,s_hex=0;

if(hex[0]>'9')

f_hex=GetDecFromHex(hex[0]);

else f_hex=hex[0]-'0';

if(s.Length()>1)

{

if(hex[1]>'9')

s_hex=GetDecFromHex(hex[1]);

else s_hex=hex[1]-'0';

return f_hex*16+s_hex;

}

return f_hex;

}

//---------------------------------------------------------------------------

//---------------------------------------------

void __fastcall TForm2::FormCreate(TObject *Sender)

{

BlankBmp->LoadFromFile( "Blank.bmp" );

GreenLightBmp->LoadFromFile("GreenLight.bmp" );

prog0->LoadFromFile("prog0.bmp" );

prog1->LoadFromFile("prog1.bmp" );

//Form2->StringGrid1->Cells[0][0]="адрес";

Form2->StringGrid1->Cells[2][0]="код";

Form2->StringGrid1->Cells[1][0]="BP";

Form2->StringGrid1->Cells[3][0]="мнемоника";

int i;

for(i=0;i<8;i++)

Form2->StringGrid8->Cells[i][0]="A"+IntToStr(7-i);

Form2->StringGrid9->Cells[0][0]="...";

Form2->StringGrid9->Cells[1][0]="SP";

Form2->StringGrid9->Cells[2][0]="...";

for(i=0;i<8;i++)

Form2->StringGrid2->Cells[0][i+1]="R"+IntToStr(i);

Form2->StringGrid2->Cells[1][0]="Адр.";

Form2->StringGrid2->Cells[3][0]="Адр.";

Form2->StringGrid2->Cells[5][0]="Адр.";

Form2->StringGrid2->Cells[2][0]="RB0";

Form2->StringGrid2->Cells[4][0]="RB1";

Form2->StringGrid2->Cells[6][0]="Stack";

for(i=0;i<8;i++)

{

Form2->StringGrid3->Cells[0][i+1]=IntToHex(i*8,2);

Form2->StringGrid3->Cells[i+1][0]="+0"+IntToStr(i);

Form2->StringGrid2->Cells[1][i+1]=IntToHex(i,2);

Form2->StringGrid2->CellRect(1,i+1);

Form2->StringGrid2->Cells[3][i+1]=IntToHex(i+24,2);

}

for(i=0;i<8;i++)

Form2->StringGrid4->Cells[i+1][0]="+0"+IntToStr(i);

for(i=0;i<128;i++)

Form2->StringGrid4->Cells[0][i+1]=IntToHex(i*8,2);

Form2->RadioButton3->Checked=true;

}

//-------------------------------------------------

void write_command(unsigned char code, int addr)

{

Form2->StringGrid1->Cells[0][addr+1]=IntToHex(addr,3);

Form2->StringGrid1->Cells[1][addr+1]=IntToHex(code,3);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)

{

//Application->ProcessMessages();

pause=0;

Form2->Timer1->Enabled=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button7Click(TObject *Sender)

{

pause=1;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button3Click(TObject *Sender)

{

Application->ProcessMessages();

step=1; pause=0;

if(command_count<=proc.progr_length && stop!=1)

proc.sw(command_count, cell_count);

pause=1; step=0;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::TrackBar1Change(TObject *Sender)

{

Application->ProcessMessages();

delay=Form2->TrackBar1->Position;

Timer1->Interval=delay*1000;

}

//---------------------------------------------------------------------------

int c;

void __fastcall TForm2::Timer1Timer(TObject *Sender)

{

if(pause||step)

Timer1->Enabled=false;

else

if(command_count<=proc.progr_length&&stop!=1)

proc.sw(command_count, cell_count);

else

{

command_count=0;

Timer1->Enabled=false;

pause=1;

}

proc.show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::StringGrid1MouseUp(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

int col, row;

StringGrid1->MouseToCell( X, Y,col, row );

if ( row == 0 ) return;

if ( Button == mbLeft )

{

if ( col == 1 )

{

if ( (StringGrid1->Cells[col][row]=="")||(StringGrid1->Cells[col][row]=="0"))

StringGrid1->Cells[col][row] = 1;

else

StringGrid1->Cells[col][row] = 0;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::StringGrid1DrawCell(TObject *Sender, int ACol,

int ARow, TRect &Rect, TGridDrawState State)

{

if(ACol==0&&ARow!=0)

{ if (StringGrid1->Cells[ACol][ARow]=="")

StringGrid1->Canvas->Draw(13, Rect.Top, prog0);

else

StringGrid1->Canvas->Draw(Rect.Left, Rect.Top, prog1);

}

if (ACol!=1||ARow==0) return;

else

StringGrid1->Canvas->Draw(Rect.Left, Rect.Top, BlankBmp);

if (StringGrid1->Cells[ACol][ARow]=="0")

StringGrid1->Canvas->Draw(Rect.Left, Rect.Top, BlankBmp);

if (StringGrid1->Cells[ACol][ARow]=="1")

StringGrid1->Canvas->Draw(Rect.Left, Rect.Top, GreenLightBmp );

}

//---------------------------------------------------------------------------

void __fastcall TForm2::N2Click(TObject *Sender)

{

if(Form2->OpenDialog1->Execute())

{

AnsiString filename=Form2->OpenDialog1->FileName;

ifstream fin (filename.c_str(), ios::in|ios::binary);

proc.reset();

unsigned char code;

int i=0;

while(!fin.eof())

{

fin>>code;

proc.program_memory[i]=code;

i++;

}

proc.comm_length=i-1;

proc.program_memory[i-1]=0;

i=0;

proc.get_comm();

fin.close();

pause=1;

proc.show();

}

else return;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::RadioButton1Click(TObject *Sender)

{

proc.show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::RadioButton2Click(TObject *Sender)

{

proc.show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::RadioButton3Click(TObject *Sender)

{

proc.show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button5Click(TObject *Sender)

{

proc.clear_OZU();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button4Click(TObject *Sender)

{

proc.reset();

for(int i=1;i<1024;i++)

for (int j=1;j<4; j++)

Form2->StringGrid1->Cells[j][i]="";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button2Click(TObject *Sender)

{

Form2->StringGrid1->Cells[0][cell_count-1]="";

command_count=0, cell_count=1; stop=0;

proc.PC=0; command_count=0;

proc.show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit10KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit19KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit11KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit20KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit16KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit17KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit18KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit12KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit13KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit14KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::StringGrid8KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit9KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::StringGrid9KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::StringGrid2KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::StringGrid3KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox1Click(TObject *Sender)

{

proc.IE=Form2->CheckBox1->Checked?1:0;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox2Click(TObject *Sender)

{

proc.F1=Form2->CheckBox2->Checked?1:0;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox3Click(TObject *Sender)

{

proc.MB=Form2->CheckBox3->Checked?0:1;

Form2->CheckBox4->Checked=!Form2->CheckBox3->Checked;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox4Click(TObject *Sender)

{

proc.MB=Form2->CheckBox4->Checked?1:0;

Form2->CheckBox3->Checked=!Form2->CheckBox4->Checked;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox5Click(TObject *Sender)

{

proc.C=Form2->CheckBox2->Checked?0:1;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox6Click(TObject *Sender)

{

proc.AC=Form2->CheckBox6->Checked?1:0;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox7Click(TObject *Sender)

{

proc.F0=Form2->CheckBox7->Checked?1:0;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox8Click(TObject *Sender)

{

proc.RB=Form2->CheckBox8->Checked?1:0;

Form2->CheckBox9->Checked=!Form2->CheckBox8->Checked;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::CheckBox9Click(TObject *Sender)

{

proc.RB=Form2->CheckBox9->Checked?0:1;

Form2->CheckBox8->Checked=!Form2->CheckBox9->Checked;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit5KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break; else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit4KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit4Change(TObject *Sender)

{

if(Form2->RadioButton1->Checked)

proc.B=StrToInt(Edit4->Text);

else if (Form2->RadioButton2->Checked)

proc.B=binTodec(Edit4->Text,Form2->Edit4->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.B=hexTodec(Edit4->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit2KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit24Change(TObject *Sender)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[5]=StrToInt(Edit24->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[5]=binTodec(Edit24->Text,Form2->Edit24->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[5]=hexTodec(Edit24->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit38Change(TObject *Sender)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[12]=StrToInt(Edit38->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[12]=binTodec(Edit38->Text,Form2->Edit38->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[12]=hexTodec(Edit38->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit18KeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.BUS=StrToInt(Edit18->Text);

else if (Form2->RadioButton2->Checked)

proc.BUS=binTodec(Edit18->Text,Form2->Edit18->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.BUS=hexTodec(Edit18->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit9KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.PC=StrToInt(Edit9->Text);

else if (Form2->RadioButton2->Checked)

proc.PC=binTodec(Edit9->Text,Form2->Edit9->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.PC=hexTodec(Edit9->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit10KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.P4=StrToInt(Edit10->Text);

else if (Form2->RadioButton2->Checked)

proc.P4=binTodec(Edit10->Text,Form2->Edit10->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.P4=hexTodec(Edit10->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit11KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.P5=StrToInt(Edit11->Text);

else if (Form2->RadioButton2->Checked)

proc.P5=binTodec(Edit11->Text,Form2->Edit11->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.P5=hexTodec(Edit11->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit19KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.P6=StrToInt(Edit19->Text);

else if (Form2->RadioButton2->Checked)

proc.P6=binTodec(Edit19->Text,Form2->Edit19->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.P6=hexTodec(Edit19->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit20KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.P7=StrToInt(Edit20->Text);

else if (Form2->RadioButton2->Checked)

proc.P7=binTodec(Edit20->Text,Form2->Edit20->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.P7=hexTodec(Edit20->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit5KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.A=StrToInt(Edit5->Text);

else if (Form2->RadioButton2->Checked)

proc.A=binTodec(Edit5->Text,Form2->Edit5->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.A=hexTodec(Edit5->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit17KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.P2=StrToInt(Edit17->Text);

else if (Form2->RadioButton2->Checked)

proc.P2=binTodec(Edit17->Text,Form2->Edit17->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.P2=hexTodec(Edit17->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit16KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.P1=StrToInt(Edit16->Text);

else if (Form2->RadioButton2->Checked)

proc.P1=binTodec(Edit16->Text,Form2->Edit16->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.P1=hexTodec(Edit16->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit2KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0]=StrToInt(Edit2->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0]=binTodec(Edit2->Text,Form2->Edit2->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0]=hexTodec(Edit2->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit3KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[1]=StrToInt(Edit3->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[1]=binTodec(Edit3->Text,Form2->Edit3->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[1]=hexTodec(Edit3->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit21KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[2]=StrToInt(Edit21->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[2]=binTodec(Edit21->Text,Form2->Edit21->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[2]=hexTodec(Edit21->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit22KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[3]=StrToInt(Edit22->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[3]=binTodec(Edit22->Text,Form2->Edit22->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[3]=hexTodec(Edit22->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit23KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[4]=StrToInt(Edit23->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[4]=binTodec(Edit23->Text,Form2->Edit23->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[4]=hexTodec(Edit23->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit25KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[6]=StrToInt(Edit25->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[6]=binTodec(Edit25->Text,Form2->Edit25->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[6]=hexTodec(Edit25->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit26KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[7]=StrToInt(Edit26->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[7]=binTodec(Edit26->Text,Form2->Edit26->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[7]=hexTodec(Edit26->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit26KeyPress(TObject *Sender, char &Key)

{

switch(Key)

{

case '0':case'1': break;

case '2':case '3':case '4':case '5':

case '6':case '7':case '8':case '9':case 8:if(Form2->RadioButton1->Checked||Form2->RadioButton3->Checked)

break;

else Key=0;

case 'A':case 'a':case 'B':case 'b':case 'C':case 'c':case 'D':case 'd':

case 'E':case 'e':case 'F':case 'f':

if(Form2->RadioButton3->Checked) break;

else Key=0;

default: Key=0; break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit33KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x19]=StrToInt(Edit33->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x19]=binTodec(Edit33->Text,Form2->Edit33->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x19]=hexTodec(Edit33->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit32KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x1A]=StrToInt(Edit32->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1A]=binTodec(Edit32->Text,Form2->Edit32->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1A]=hexTodec(Edit32->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit31KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x1B]=StrToInt(Edit31->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1B]=binTodec(Edit31->Text,Form2->Edit31->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1B]=hexTodec(Edit31->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit30KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x1B]=StrToInt(Edit30->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1B]=binTodec(Edit30->Text,Form2->Edit30->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1B]=hexTodec(Edit30->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit29KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x1B]=StrToInt(Edit29->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1B]=binTodec(Edit29->Text,Form2->Edit29->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1B]=hexTodec(Edit29->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit28KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x1B]=StrToInt(Edit28->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1B]=binTodec(Edit28->Text,Form2->Edit28->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1B]=hexTodec(Edit28->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit27KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{if(Form2->RadioButton1->Checked)

proc.data_memory[0x1B]=StrToInt(Edit27->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1B]=binTodec(Edit27->Text,Form2->Edit27->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1B]=hexTodec(Edit27->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit42KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[8]=StrToInt(Edit42->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[8]=binTodec(Edit42->Text,Form2->Edit42->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[8]=hexTodec(Edit42->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit41KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[9]=StrToInt(Edit41->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[9]=binTodec(Edit41->Text,Form2->Edit41->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[9]=hexTodec(Edit41->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit40KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[10]=StrToInt(Edit40->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[10]=binTodec(Edit40->Text,Form2->Edit40->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[10]=hexTodec(Edit40->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit39KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[11]=StrToInt(Edit39->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[11]=binTodec(Edit39->Text,Form2->Edit39->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[11]=hexTodec(Edit39->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit38KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[12]=StrToInt(Edit38->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[12]=binTodec(Edit38->Text,Form2->Edit38->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[12]=hexTodec(Edit38->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit37KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[13]=StrToInt(Edit37->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[13]=binTodec(Edit37->Text,Form2->Edit37->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[13]=hexTodec(Edit37->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit36KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[14]=StrToInt(Edit36->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[14]=binTodec(Edit36->Text,Form2->Edit36->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[14]=hexTodec(Edit36->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit35KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[15]=StrToInt(Edit35->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[15]=binTodec(Edit35->Text,Form2->Edit35->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[15]=hexTodec(Edit35->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit34KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Form2->RadioButton1->Checked)

proc.data_memory[0x1B]=StrToInt(Edit34->Text);

else if (Form2->RadioButton2->Checked)

proc.data_memory[0x1B]=binTodec(Edit34->Text,Form2->Edit34->Text.Length());

else if(Form2->RadioButton3->Checked)

proc.data_memory[0x1B]=hexTodec(Edit34->Text);

}

//---------------------------------------------------------------------------