123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833 |
- #include <stdio.h>
- #include <stdint.h>
- #define USE_CONSOLE
- #include <allegro.h>
- #include <string.h>
- #include <stdlib.h>
- #include <code_51.h>
- #include <code_editor.h>
- #include <dis_asm.h>
- #include <flags.h>
- #include <gui.h>
- #include <ramv.h>
- #include <regs.h>
- #include <emu51.h>
- FONT *mainf;
- int white, red, lred, green, blue;
- uint8_t SFR[0x100]; // internal memory and sfr area 256 bytes
- uint8_t EXT_RAM[0x10000]; // external memory 64kB
- uint8_t EXT_PMEM[0x10000]; // external memory 64kB for program
- uint8_t *Acc = &SFR[0xe0]; // 8-bit accumlator
- uint16_t *DPTR = (uint16_t *) &SFR[0x82]; // 16-bit register
- uint8_t *DPH = &SFR[0x83]; // high byte of DPTR
- uint8_t *DPL = &SFR[0x82]; // low byte of DPTR
- uint8_t *B = &SFR[0xf0]; // B register
- uint8_t *SP = &SFR[0x81]; // Stack Pointer
- uint8_t *PSW = &SFR[0xd0]; // Program Status Word
- uint8_t *P0 = &SFR[0x80]; // 1st Port
- uint8_t *P1 = &SFR[0x90]; // 2nd Port
- uint8_t *P2 = &SFR[0xa0]; // 3rd Port
- uint8_t *P3 = &SFR[0xb0]; // 4th port
- uint8_t *SBUF = &SFR[0x99]; // Serial transmission Buffer
- uint8_t *IE = &SFR[0xa8]; // Int Enable
- uint8_t *SCON = &SFR[0x98]; // Serial Control
- uint8_t *TH1 = &SFR[0x8d]; // Timer1 High
- uint8_t *TH0 = &SFR[0x8c]; // Timer0 High
- uint8_t *TL1 = &SFR[0x8b]; // Timer1 Low
- uint8_t *TL0 = &SFR[0x8a]; // Timer0 Low
- uint8_t *TMOD = &SFR[0x89]; // Timer Mode
- uint8_t *TCON = &SFR[0x88]; // Timer Control
- uint8_t *PCON = &SFR[0x87]; // Power Control
- uint8_t *R = &SFR[0x00]; // Additional 8 Rx Registers
- uint16_t PC = 0x0000; // Progam Counter
- uint8_t *ram = EXT_RAM;
- uint8_t *prog = EXT_PMEM;
- // initialize the emulator
- void init_8051(void)
- {
- int i;
- c_time = 0; // cycles counter
- for ( i = 0 ; i < 256 ; i++ )
- {
- SFR[i] = 0xA5; // all regs in internal RAM & SFR
- }
- *P0 = 0xff; //
- *P1 = 0xff; //
- *P2 = 0xff; // Some SFR registers
- *P3 = 0xff; // and Program Counter
- PC = 0x0000; //
- *SP = 0x07; //
- }
- // 8051 assembler macros
- int get_length(uint8_t code)
- {
- if ( asm51[code].code == code )
- {
- return asm51[code].length;
- }
- else
- {
- return 1;
- }
- }
- /*bool vret (void)
- {
- if (inportb(0x3da) & 8) return true;
- else return false;
- }*/
- void wait_for_retrace(void)
- {
- /*while (!vret())
- {
- }*/
- //vsync();
- }
- int load_code_table(code_51 *tmp_tab)
- {
- FILE *strio = NULL;
- char _mnem[6];
- int _code;
- int _length;
- int _cycles;
- char _datas[12];
- strio = fopen("list51.txt", "r");
- if ( strio )
- {
- for ( int c = 0 ; c < 256 ; c++ )
- {
- fscanf(strio, "%x", &_code);
- fscanf(strio, "%s", _mnem);
- fscanf(strio, "%s", _datas);
- fscanf(strio, "%d", &_length);
- fscanf(strio, "%d", &_cycles);
- if ( _mnem[0] == 'E' && _mnem[1] == 'N' && _mnem[2] == 'D' )
- {
- break;
- }
- tmp_tab[_code].code = (uint8_t) _code;
- strcpy(tmp_tab[_code].mnem, _mnem);
- strcpy(tmp_tab[_code].datas, _datas);
- tmp_tab[_code].length = (uint8_t) _length;
- tmp_tab[_code].cycles = (uint8_t) _cycles;
- }
- fclose(strio);
- }
- else
- {
- ShowMessage("Can't load list51.txt file", screen, 100, 100, 200, 60, "Error!");
- }
- return 0;
- }
- int load_ram(char *filename, uint8_t *ram)
- {
- FILE *strin = NULL;
- if ( *filename != 0 )
- {
- strin = fopen(filename, "rb");
- }
- if ( strin == NULL )
- {
- ShowMessage("Can't open the file", screen, 250, 100, 200, 100, "Error!");
- }
- else
- {
- uint16_t c = 0;
- for ( c ; !feof(strin) ; c++ )
- {
- ram[c] = fgetc(strin);
- }
- fclose(strin);
- }
- return 0;
- }
- int load_hex(char *filename, uint8_t *ram)
- {
- FILE *strin;
- int Adr = 0;
- int Cnt;
- //int to_mem;
- int i;
- char line[50];
- char word[5];
- char byte[3];
- byte[2] = word[4] = 0;
- strin = NULL;
- if ( *filename != 0 )
- {
- strin = fopen(filename, "r");
- }
- if ( strin == NULL )
- {
- ShowMessage("Can't open the file", screen, 250, 100, 200, 100, "Error!");
- return -1;
- }
- else
- {
- while ( !feof(strin))
- {
- fscanf(strin, "%s", line);
- //fprintf (out,"%s\n", line);
- byte[0] = line[1];
- byte[1] = line[2];
- sscanf(byte, "%x", &Cnt);
- word[0] = line[3];
- word[1] = line[4];
- word[2] = line[5];
- word[3] = line[6];
- sscanf(word, "%x", &Adr);
- byte[0] = line[7];
- byte[1] = line[8];
- sscanf(byte, "%x", &i);
- if ( i == 1 )
- {
- break;
- }
- else
- {
- byte[2] = 0;
- for ( i = 9 ; i < 9 + Cnt * 2 ; i += 2 )
- {
- byte[0] = line[i];
- byte[1] = line[i + 1];
- sscanf(byte, "%x", ( ram + Adr ));
- Adr++;
- }
- }
- }
- fclose(strin);
- //fclose (out);
- }
- return 0;
- }
- void ChangeMonitedSFRRegister(regs *regwnd)
- {
- char lab[10];
- char ln[3];
- int line_num = 0;
- int reg_adr = 0;
- GetText(ln, screen, 50, 50, 300, 70, 3, "Enter line number (dec)");
- sscanf(ln, "%d", &line_num);
- if ( line_num < 1 || line_num > 25 )
- {
- return;
- }
- GetText(lab, screen, 50, 80, 300, 70, 10, "Enter reg. label (ascii)");
- GetText(ln, screen, 50, 100, 300, 70, 3, "Enter register number (hex)");
- sscanf(ln, "%x", ®_adr);
- line_num--;
- strcpy(regwnd->reg_label[line_num], lab);
- regwnd->reg[line_num] = (uint8_t) reg_adr;
- return;
- }
- void reset51(void)
- {
- if ( QuestionBox("Are you sure want to reset 8051", screen, 250, 240, 300, 60, "Confirm!", makecol(255, 255, 255)))
- {
- init_8051();
- }
- return;
- }
- uint16_t ViewAt(void)
- {
- char hex4[6];
- int tmp_adr;
- GetText(hex4, screen, 50, 80, 300, 70, 5, "Enter new view point (hex)");
- if ( hex4[0] == 32 )
- {
- return 0;
- }
- sscanf(hex4, "%x", &tmp_adr);
- return (uint16_t) tmp_adr;
- }
- void ChangePC(void)
- {
- char hex4[5];
- int tmpPC = 0;
- GetText(hex4, screen, 50, 80, 300, 70, 5, "Enter new PC (hex)");
- if ( hex4[0] == 32 )
- {
- return;
- }
- sscanf(hex4, "%x", &tmpPC);
- PC = (uint16_t) tmpPC;
- return;
- }
- void ChangeRegValue_SFR(void)
- {
- char hex2[3];
- char hex2_a[3];
- int tmp_adr;
- int tmp_dat;
- GetText(hex2_a, screen, 50, 80, 300, 70, 3, "Enter adress from SFR (hex)");
- if ( hex2_a[0] == 32 )
- {
- return;
- }
- GetText(hex2, screen, 60, 90, 300, 70, 3, "Enter byte (hex)");
- sscanf(hex2_a, "%x", &tmp_adr);
- sscanf(hex2, "%x", &tmp_dat);
- SFR[(uint8_t) tmp_adr] = (uint8_t) tmp_dat;
- return;
- }
- void ChangeRegValue_RAM(void)
- {
- char hex2[3];
- char hex4_a[5];
- int tmp_adr;
- int tmp_dat;
- GetText(hex4_a, screen, 50, 80, 400, 70, 5, "Enter adress from External Memory (hex)");
- if ( hex4_a[0] == 32 )
- {
- return;
- }
- GetText(hex2, screen, 60, 90, 300, 70, 3, "Enter byte (hex)");
- sscanf(hex4_a, "%x", &tmp_adr);
- sscanf(hex2, "%x", &tmp_dat);
- prog[(uint16_t) tmp_adr] = (uint8_t) tmp_dat;
- return;
- }
- void LoadRAM(void)
- {
- char filename[40];
- GetText(filename, screen, 30, 80, 700, 70, 40, "Load *.bin file");
- for ( int c = 38 ; filename[c] == ' ' || filename[c] == '\r' ; c-- )
- {
- filename[c] = 0;
- }
- load_ram(filename, prog);
- return;
- }
- void LoadHEX(void)
- {
- char filename[40];
- GetText(filename, screen, 30, 80, 700, 70, 40, "Load *.hex file");
- for ( int c = 38 ; filename[c] == ' ' || filename[c] == '\r' ; c-- )
- {
- filename[c] = 0;
- }
- load_hex(filename, prog);
- return;
- }
- void LoadSrc(void)
- {
- char cmd[256];
- char filename[256];
- char comp_msg[512];
- FILE *msgin;
- int c = 0;
- GetText(filename, screen, 30, 80, 700, 70, 40, "Load and compile source file (*.*)");
- sprintf(cmd, "asm51.exe %s > out.tmp", filename);
- system(cmd);
- msgin = NULL;
- msgin = fopen("out.tmp", "rb");
- if ( msgin == NULL )
- {
- ShowMessage("Can't open the file: out.tmp", screen, 250, 100, 200, 100, "Error!");
- }
- else
- {
- for ( c ; c <= 0xffff ; c++ )
- {
- comp_msg[c] = fgetc(msgin);
- if ( feof(msgin))
- {
- break;
- }
- }
- fclose(msgin);
- }
- ShowMsgEx(comp_msg, screen, 100, 80, 600, 140, "Assembling status", makecol(255, 255, 255));
- for ( c = 512 ; c > 0 ; c-- )
- {
- if ( comp_msg[c] == ',' && comp_msg[c + 2] == '0' )
- {
- change_ext(filename);
- if ( load_hex(filename, prog) == 0 )
- {
- ShowMessage("Compiled file is loaded.", screen, 250, 100, 300, 80, "Message!");
- }
- break;
- }
- }
- return;
- }
- void EditSrc(void)
- {
- code_editor ed1;
- ed1.process();
- return;
- }
- void ChMaxI(int *maxi)
- {
- char dec6_a[7];
- GetText(dec6_a, screen, 50, 80, 400, 70, 7, "Enter number of instructions per frame");
- if ( dec6_a[0] == 32 )
- {
- return;
- }
- sscanf(dec6_a, "%d", maxi);
- return;
- }
- void ChMemMode(void)
- {
- if ( QuestionBox("Do you want to use memory in mixed mode?", screen, 100, 100, 400, 60, "Qusetion?", white))
- {
- ram = EXT_PMEM;
- }
- else
- {
- ram = EXT_RAM;
- }
- }
- void FillExt(void)
- {
- char h4beg[5], h4end[5], h2f[3];
- int from, to, i, ic = 1, fill;
- GetText(h4beg, screen, 50, 80, 400, 70, 5, "From adress... (16bit hex)");
- GetText(h4end, screen, 50, 80, 400, 70, 5, "...to adress (16bit hex)");
- GetText(h2f, screen, 50, 80, 400, 70, 3, "with byte (8bit hex)");
- sscanf(h4beg, "%x", &from);
- sscanf(h4end, "%x", &to);
- sscanf(h2f, "%x", &fill);
- if ( from > to )
- {
- ic = -1;
- }
- for ( i = from ; i != to ; i += ic )
- {
- ram[i] = fill;
- }
- ram[to] = fill;
- return;
- }
- void main_init(void)
- {
- load_code_table(asm51);
- //load_ram ("lekcja3.bin",ram);
- //load_ram ("avt.bin",ram);
- init_8051();
- allegro_init();
- install_timer();
- install_keyboard();
- //install_mouse();
- set_color_depth(8);
- set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
- //set_gfx_mode (GFX_AUTODETECT, 800, 600,0,0);
- set_palette(desktop_palette);
- //show_mouse (screen);
- RGB col;
- col.r = 0;
- col.g = 0;
- col.b = 0;
- set_color(0, &col);
- col.r = 63;
- col.g = 15;
- col.b = 0;
- set_color(1, &col);
- col.r = 20;
- col.g = 0;
- col.b = 0;
- set_color(2, &col);
- col.r = 255;
- col.g = 255;
- col.b = 255;
- set_color(255, &col);
- DATAFILE *dataf;
- dataf = load_datafile("data.dat");
- mainf = (FONT *) dataf[0].dat;
- }
- int main(void)
- {
- main_init();
- white = makecol(255, 255, 255);
- red = makecol(255, 0, 0);
- lred = makecol(255, 64, 0);
- green = makecol(0, 255, 0);
- blue = makecol(0, 0, 255);
- dis_asm disasm(prog, screen);
- regs SFRregs(SFR, screen);
- flags FlagWnd(screen);
- ramv RMon(screen);
- strcpy(SFRregs.reg_label[0], "Delay AVT");
- SFRregs.reg[0] = 0x75;
- strcpy(SFRregs.reg_label[1], "Key AVT ");
- SFRregs.reg[1] = 0x76;
- strcpy(SFRregs.reg_label[2], "DPH ");
- SFRregs.reg[2] = 0x83;
- strcpy(SFRregs.reg_label[3], "DPL ");
- SFRregs.reg[3] = 0x82;
- strcpy(SFRregs.reg_label[4], "PSW ");
- SFRregs.reg[4] = 0xd0;
- strcpy(SFRregs.reg_label[5], "P0 ");
- SFRregs.reg[5] = 0x80;
- strcpy(SFRregs.reg_label[6], "P1 ");
- SFRregs.reg[6] = 0x90;
- strcpy(SFRregs.reg_label[7], "P2 ");
- SFRregs.reg[7] = 0xa0;
- strcpy(SFRregs.reg_label[8], "P3 ");
- SFRregs.reg[8] = 0xb0;
- strcpy(SFRregs.reg_label[9], "TH1 ");
- SFRregs.reg[9] = 0x8d;
- strcpy(SFRregs.reg_label[10], "TL1 ");
- SFRregs.reg[10] = 0x8b;
- strcpy(SFRregs.reg_label[11], "TH0 ");
- SFRregs.reg[11] = 0x8c;
- strcpy(SFRregs.reg_label[12], "TL0 ");
- SFRregs.reg[12] = 0x8a;
- strcpy(SFRregs.reg_label[13], "IE ");
- SFRregs.reg[13] = 0xa8;
- strcpy(SFRregs.reg_label[14], "10 ");
- SFRregs.reg[14] = 0x12;
- strcpy(SFRregs.reg_label[15], "9 ");
- SFRregs.reg[15] = 0x11;
- strcpy(SFRregs.reg_label[16], "8 ");
- SFRregs.reg[16] = 0x10;
- strcpy(SFRregs.reg_label[17], "7 ");
- SFRregs.reg[17] = 0x0f;
- strcpy(SFRregs.reg_label[18], "6 ");
- SFRregs.reg[18] = 0x0e;
- strcpy(SFRregs.reg_label[19], "5 ");
- SFRregs.reg[19] = 0x0d;
- strcpy(SFRregs.reg_label[20], "4 ");
- SFRregs.reg[20] = 0x0c;
- strcpy(SFRregs.reg_label[21], "3 ");
- SFRregs.reg[21] = 0x0b;
- strcpy(SFRregs.reg_label[22], "2 ");
- SFRregs.reg[22] = 0x0a;
- strcpy(SFRregs.reg_label[23], "1 ");
- SFRregs.reg[23] = 0x09;
- strcpy(SFRregs.reg_label[24], "0 ");
- SFRregs.reg[24] = 0x08;
- PC = 0x0000;
- uint16_t aadr = 0x0000;
- uint16_t madr = 0x0000;
- bool manual_scrolling = true;
- bool step = true;
- bool into = false;
- bool over = false;
- unsigned long cnt = 0;
- int break_point = -1;
- char break_str[5];
- //load_ram("avt.bin",ram);
- int i = 0, maxi = 13000;
- while ( !( key[KEY_X] && key[KEY_ALT] ))
- {
- rect(screen, 2, 2, 798, 18, white);
- // key shortcuts disp
- rect(screen, 2, 521, 798, 598, white);
- textprintf(screen, mainf, 128, 528, white,
- "F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12");
- textprintf(screen, mainf, 128, 548, white,
- "Help ChSFR ManS Debug DView WrPC TInto SOver SrcEd FillE Speed Reset");
- textprintf(screen, mainf, 128, 568, white,
- "WrRAM WrSFR AutoS Run MView LdBIN LdHEX LdSrc BrkPt MemMod ");
- hline(screen, 2, 540, 798, white);
- textprintf(screen, mainf, 6, 548, white, "Function key :");
- hline(screen, 2, 560, 798, white);
- textprintf(screen, mainf, 6, 568, white, "Shift+key :");
- hline(screen, 2, 580, 798, white);
- textprintf(screen, mainf, 6, 587, white, "Alt+X: Exit ");
- textprintf(screen, mainf, 6, 7, white, "emu51 %s", VERSION);
- textout(screen, mainf, "AVT-2250 Segment display:", 490, 6, white);
- if ( ram == prog )
- {
- rect(screen, 680, 568, 680 + 6, 575, red);
- }
- cnt++;
- if ( manual_scrolling )
- {
- disasm.draw(aadr);
- }
- else
- {
- disasm.draw(PC);
- }
- disasm.blit_it(0, 20);
- RMon.draw(madr);
- RMon.blit_it(300, 320);
- SFRregs.draw();
- SFRregs.blit_it(400, 20);
- FlagWnd.draw();
- FlagWnd.blit_it(300, 20);
- if ( !step )
- {
- for ( i = 0 ; i < maxi ; i++ )
- {
- if ( PC == break_point )
- {
- step = true;
- break;
- }
- asm51[prog[PC]].process();
- }
- }
- else
- {
- if ( over )
- {
- asm51[prog[PC]].process();
- over = false;
- }
- if ( into )
- {
- asm51[prog[PC]].process();
- into = false;
- }
- }
- for ( i = 0 ; i <= 7 ; i++ )
- {
- // for compatibility with avt2250
- draw_SEG_digit(screen, 700 + 8 * i, 6, lred, 4, SFR[i + 0x78]);
- }
- if ( key[KEY_LCONTROL] )
- {
- if ( key[KEY_0_PAD] )
- {
- SFR[0x76] = 0x30;
- }
- if ( key[KEY_1_PAD] )
- {
- SFR[0x76] = 0x31;
- }
- if ( key[KEY_2_PAD] )
- {
- SFR[0x76] = 0x32;
- }
- if ( key[KEY_3_PAD] )
- {
- SFR[0x76] = 0x33;
- }
- if ( key[KEY_4_PAD] )
- {
- SFR[0x76] = 0x34;
- }
- if ( key[KEY_5_PAD] )
- {
- SFR[0x76] = 0x35;
- }
- if ( key[KEY_6_PAD] )
- {
- SFR[0x76] = 0x36;
- }
- if ( key[KEY_7_PAD] )
- {
- SFR[0x76] = 0x37;
- }
- if ( key[KEY_8_PAD] )
- {
- SFR[0x76] = 0x38;
- }
- if ( key[KEY_9_PAD] )
- {
- SFR[0x76] = 0x39;
- }
- if ( key[KEY_INSERT] )
- {
- SFR[0x76] = 0x41;
- }
- if ( key[KEY_HOME] )
- {
- SFR[0x76] = 0x42;
- }
- if ( key[KEY_PGUP] )
- {
- SFR[0x76] = 0x43;
- }
- if ( key[KEY_DEL] )
- {
- SFR[0x76] = 0x44;
- }
- if ( key[KEY_END] )
- {
- SFR[0x76] = 0x45;
- }
- if ( key[KEY_PGDN] )
- {
- SFR[0x76] = 0x46;
- }
- if ( key[KEY_ENTER_PAD] )
- {
- SFR[0x76] = 0x0d;
- }
- }
- else
- {
- if ( key[KEY_UP] )
- {
- aadr -= 3;
- }
- if ( key[KEY_DOWN] )
- {
- aadr += get_length(prog[aadr]);
- aadr += get_length(prog[aadr]);
- }
- if ( key[KEY_PGUP] && !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ))
- {
- madr -= 16;
- }
- if ( key[KEY_PGDN] && !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ))
- {
- madr += 16;
- }
- if ( key[KEY_PGUP] && ( key[KEY_LSHIFT] || key[KEY_RSHIFT] ))
- {
- madr -= 1;
- }
- if ( key[KEY_PGDN] && ( key[KEY_LSHIFT] || key[KEY_RSHIFT] ))
- {
- madr += 1;
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F2] )
- {
- ChangeMonitedSFRRegister(&SFRregs);
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F2] )
- {
- ChangeRegValue_SFR();
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F1] )
- {
- ChangeRegValue_RAM();
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F3] )
- {
- manual_scrolling = true;
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F3] )
- {
- manual_scrolling = false;
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F4] )
- {
- step = true;
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F4] )
- {
- step = false;
- }
- if ( step )
- {
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F7] )
- {
- into = true;
- }
- while ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F7] )
- {
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F8] )
- {
- over = true;
- }
- while ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F8] )
- {
- }
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F5] )
- {
- aadr = ViewAt();
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F5] )
- {
- madr = ViewAt();
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F6] )
- {
- ChangePC();
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F7] )
- {
- LoadRAM();
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F8] )
- {
- LoadHEX();
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F9] )
- {
- LoadSrc();
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F9] )
- {
- EditSrc();
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F12] )
- {
- reset51();
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F11] )
- {
- ChMaxI(&maxi);
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F11] )
- {
- ChMemMode();
- }
- if ( !( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F10] )
- {
- FillExt();
- }
- if (( key[KEY_LSHIFT] || key[KEY_RSHIFT] ) && key[KEY_F10] )
- {
- GetText(break_str, screen, 50, 80, 400, 70, 5, "Enter break piont adress");
- sscanf(break_str, "%x", &break_point);
- }
- }
- }
- return 0;
- }
- //END_OF_MAIN();
|