4 Выполнение информационных расчетов
4.2 Расчёт надёжности программы-отладчика
Для оценки надёжности функционирования программы применена модель Коркорэна, которая учитывает динамику отладки программы:
(5.2)
где – число успешных испытаний в серии из прогонов программы; – число типов ошибок, по которым ведётся учёт; – число ошибок -го типа, выявленных за прогонов; – масштабирующий коэффициент, определяемый ступенчатой функцией
(5.3)
где – вероятность устранения ошибки -го типа.
N0 = 41 N = 50 T = 6
0.95
Полученные показатели являются нормальными для данного программного продукта, т.к. он является учебным.
ЗАКЛЮЧЕНИЕ
В результате выполнения данного курсового проекта был создан транслятор-отладчик микропроцессора К1816ВЕ48, позволяющий реализовывать лексический и синтаксический анализы, генерацию машинных кодов, дизассемблирование машинных кодов и распознавание определённого набора команд для данного типа микропроцессора. Также реализована возможность изменения данных в памяти, текущего состояния регистров и флагов, пошаговый и автоматический режим выполнения программы.
В трансляторе организовано нахождение лексических и синтаксических ошибок в коде программы, выдача соответствующих сообщений с точным указанием места и типа ошибки. В отладчике реализована имитация работы микропроцессора, на основе поступающих внутренних кодов транслятора.
Библиографический список
Буреев Л.Н. Простейшая микро-ЭВМ / Л.Н.Буреев, А.Л.Дудко, В.Н.Захаров. - М.: «Мир», 1992. 218с.
Григорьев В.Л. Программирование однокристальных микропроцессоров /В.Л. Григорьев. – М.: Энергоатомиздат, 1987. – 288 с.
Григорьев В.Л. Программное обеспечение микропроцессорных систем. /В.Л. Григорьев. – М.: Энергоатомиздат, 1983. – 208 с.
Леветаль Л. Программирование на языке ассемблера. / Л. Леветаль, У. Сейвилл. – М.:Радио и связь,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);
}
//---------------------------------------------------------------------------