- {
- b++;
- switch (*(b++))
- {
- case 'A': // absolute address
- sprintf(temp, "%04"_A_"x",
- t_addr((addr&0xf800)|
- (((code>>5)&0x07)*256 +
- rom->get(addr+1))));
- break;
- case 'l': // long address
- sprintf(temp, "%04"_A_"x",
- t_addr(rom->get(addr+1)*256 +
- rom->get(addr+2)));
- break;
- case 'a': // addr8 (direct address) at 2nd byte
- if (!get_name(rom->get(addr+1), sfr_tbl(), temp))
- sprintf(temp, "%02"_M_"x", rom->get(addr+1));
- break;
- case '8': // addr8 (direct address) at 3rd byte
- if (!get_name(rom->get(addr+2), sfr_tbl(), temp))
- sprintf(temp, "%02"_M_"x", rom->get(addr+2));
- //sprintf(temp, "%02"_M_"x", rom->get(addr+2));
- break;
- case 'b': // bitaddr at 2nd byte
- {
- t_addr ba= rom->get(addr+1);
- if (get_name(ba, bit_tbl(), temp))
- break;
- if (get_name((ba<128)?((ba/8)+32):(ba&0xf8), sfr_tbl(), temp))
- {
- strcat(temp, ".");
- sprintf(c, "%1"_M_"d", ba & 0x07);
- strcat(temp, c);
- break;
- }
- sprintf(temp, "%02x.%"_M_"d", (ba<128)?((ba/8)+32):(ba&0xf8),
- ba & 0x07);
- break;
- }
- case 'r': // rel8 address at 2nd byte
- sprintf(temp, "%04"_A_"x",
- t_addr(addr+2+(signed char)(rom->get(addr+1))));
- break;
- case 'R': // rel8 address at 3rd byte
- sprintf(temp, "%04"_A_"x",
- t_addr(addr+3+(signed char)(rom->get(addr+2))));
- break;
- case 'd': // data8 at 2nd byte
- sprintf(temp, "%02"_M_"x", rom->get(addr+1));
- break;
- case 'D': // data8 at 3rd byte
- sprintf(temp, "%02"_M_"x", rom->get(addr+2));
- break;
- case '6': // data16 at 2nd(H)-3rd(L) byte
- sprintf(temp, "%04"_A_"x",
- t_addr(rom->get(addr+1)*256 +
- rom->get(addr+2)));
- break;
- default:
- strcpy(temp, "?");
- break;
- }
- t= temp;
- while (*t)
- *(p++)= *(t++);
- }
+ {
+ b++;
+ switch (*(b++))
+ {
+ case 'A': // absolute address
+ sprintf(temp, "%04"_A_"x",
+ t_addr((addr&0xf800)|
+ (((code>>5)&0x07)*256 +
+ rom->get(addr+1))));
+ break;
+ case 'l': // long address
+ sprintf(temp, "%04"_A_"x",
+ t_addr(rom->get(addr+1)*256 +
+ rom->get(addr+2)));
+ break;
+ case 'a': // addr8 (direct address) at 2nd byte
+ if (!get_name(rom->get(addr+1), sfr_tbl(), temp))
+ sprintf(temp, "%02"_M_"x", rom->get(addr+1));
+ break;
+ case '8': // addr8 (direct address) at 3rd byte
+ if (!get_name(rom->get(addr+2), sfr_tbl(), temp))
+ sprintf(temp, "%02"_M_"x", rom->get(addr+2));
+ //sprintf(temp, "%02"_M_"x", rom->get(addr+2));
+ break;
+ case 'b': // bitaddr at 2nd byte
+ {
+ t_addr ba= rom->get(addr+1);
+ if (get_name(ba, bit_tbl(), temp))
+ break;
+ if (get_name((ba<128)?((ba/8)+32):(ba&0xf8), sfr_tbl(), temp))
+ {
+ strcat(temp, ".");
+ sprintf(c, "%1"_M_"d", ba & 0x07);
+ strcat(temp, c);
+ break;
+ }
+ sprintf(temp, "%02x.%"_M_"d", (ba<128)?((ba/8)+32):(ba&0xf8),
+ ba & 0x07);
+ break;
+ }
+ case 'r': // rel8 address at 2nd byte
+ sprintf(temp, "%04"_A_"x",
+ t_addr(addr+2+(signed char)(rom->get(addr+1))));
+ break;
+ case 'R': // rel8 address at 3rd byte
+ sprintf(temp, "%04"_A_"x",
+ t_addr(addr+3+(signed char)(rom->get(addr+2))));
+ break;
+ case 'd': // data8 at 2nd byte
+ sprintf(temp, "%02"_M_"x", rom->get(addr+1));
+ break;
+ case 'D': // data8 at 3rd byte
+ sprintf(temp, "%02"_M_"x", rom->get(addr+2));
+ break;
+ case '6': // data16 at 2nd(H)-3rd(L) byte
+ sprintf(temp, "%04"_A_"x",
+ t_addr(rom->get(addr+1)*256 +
+ rom->get(addr+2)));
+ break;
+ default:
+ strcpy(temp, "?");
+ break;
+ }
+ t= temp;
+ while (*t)
+ *(p++)= *(t++);
+ }
- {
- case 'a': // acall
- analyze((addr & 0xf800)|
- ((rom->get(addr+1)&0x07)*256+
- rom->get(addr+2)));
- analyze(addr+tabl->length);
- break;
- case 'A': // ajmp
- addr= (addr & 0xf800)|
- ((rom->get(addr+1) & 0x07)*256 + rom->get(addr+2));
- break;
- case 'l': // lcall
- analyze(rom->get(addr+1)*256 + rom->get(addr+2));
- analyze(addr+tabl->length);
- break;
- case 'L': // ljmp
- addr= rom->get(addr+1)*256 + rom->get(addr+2);
- break;
- case 'r': // reljmp (2nd byte)
- analyze(rom->validate_address(addr+(signed char)(rom->get(addr+1))));
- analyze(addr+tabl->length);
- break;
- case 'R': // reljmp (3rd byte)
- analyze(rom->validate_address(addr+(signed char)(rom->get(addr+2))));
- analyze(addr+tabl->length);
- break;
- case 's': // sjmp
- {
- signed char target;
- target= rom->get(addr+1);
- addr+= 2;
- addr= rom->validate_address(addr+target);
- break;
- }
- case '_':
- return;
- default:
- addr= rom->validate_address(addr+tabl->length);
- break;
- }
+ {
+ case 'a': // acall
+ analyze((addr & 0xf800)|
+ ((rom->get(addr+1)&0x07)*256+
+ rom->get(addr+2)));
+ analyze(addr+tabl->length);
+ break;
+ case 'A': // ajmp
+ addr= (addr & 0xf800)|
+ ((rom->get(addr+1) & 0x07)*256 + rom->get(addr+2));
+ break;
+ case 'l': // lcall
+ analyze(rom->get(addr+1)*256 + rom->get(addr+2));
+ analyze(addr+tabl->length);
+ break;
+ case 'L': // ljmp
+ addr= rom->get(addr+1)*256 + rom->get(addr+2);
+ break;
+ case 'r': // reljmp (2nd byte)
+ analyze(rom->validate_address(addr+(signed char)(rom->get(addr+1))));
+ analyze(addr+tabl->length);
+ break;
+ case 'R': // reljmp (3rd byte)
+ analyze(rom->validate_address(addr+(signed char)(rom->get(addr+2))));
+ analyze(addr+tabl->length);
+ break;
+ case 's': // sjmp
+ {
+ signed char target;
+ target= rom->get(addr+1);
+ addr+= 2;
+ addr= rom->validate_address(addr+target);
+ break;
+ }
+ case '_':
+ return;
+ default:
+ addr= rom->validate_address(addr+tabl->length);
+ break;
+ }
- {
- interrupt->was_reti= DD_FALSE;
- pre_inst();
- result= exec_inst();
- post_inst();
- /*
- {
- if (c)
- print_regs(c);
- else
- {
- if (sim->app->get_commander()==NULL)
- printf("no commander PC=0x%x\n",PC);
- else
- if (sim->app->get_commander()->frozen_console==NULL)
- printf("no frozen console PC=0x%x\n",PC);
- else
- c= sim->app->get_commander()->frozen_console;
- if (c)
- print_regs(c);
- else
- printf("no console PC=0x%x\n",PC);
- }
- }
- */
- /*if (result == resGO)
- result= check_events();*/
- }
+ {
+ interrupt->was_reti= DD_FALSE;
+ pre_inst();
+ result= exec_inst();
+ post_inst();
+ /*
+ {
+ if (c)
+ print_regs(c);
+ else
+ {
+ if (sim->app->get_commander()==NULL)
+ printf("no commander PC=0x%x\n",PC);
+ else
+ if (sim->app->get_commander()->frozen_console==NULL)
+ printf("no frozen console PC=0x%x\n",PC);
+ else
+ c= sim->app->get_commander()->frozen_console;
+ if (c)
+ print_regs(c);
+ else
+ printf("no console PC=0x%x\n",PC);
+ }
+ }
+ */
+ /*if (result == resGO)
+ result= check_events();*/
+ }
- (ie & is->ie_mask) &&
- (sfr->get(is->src_reg) & is->src_mask))
- {
- int pr= it_priority(is->ie_mask);
- if (il->level >= 0 &&
- pr <= il->level)
- continue;
- if (state == stIDLE)
- {
- state= stGO;
- sfr->set_bit0(PCON, bmIDL);
- interrupt->was_reti= DD_TRUE;
- return(resGO);
- }
- if (is->clr_bit)
- sfr->set_bit0(is->src_reg, is->src_mask);
- sim->app->get_commander()->
- debug("%g sec (%d clks): Accepting interrupt `%s' PC= 0x%06x\n",
- get_rtime(), ticks->ticks, object_name(is), PC);
- IL= new it_level(pr, is->addr, PC, is);
- return(accept_it(IL));
- }
+ (ie & is->ie_mask) &&
+ (sfr->get(is->src_reg) & is->src_mask))
+ {
+ int pr= it_priority(is->ie_mask);
+ if (il->level >= 0 &&
+ pr <= il->level)
+ continue;
+ if (state == stIDLE)
+ {
+ state= stGO;
+ sfr->set_bit0(PCON, bmIDL);
+ interrupt->was_reti= DD_TRUE;
+ return(resGO);
+ }
+ if (is->clr_bit)
+ sfr->set_bit0(is->src_reg, is->src_mask);
+ sim->app->get_commander()->
+ debug("%g sec (%d clks): Accepting interrupt `%s' PC= 0x%06x\n",
+ get_rtime(), ticks->ticks, object_name(is), PC);
+ IL= new it_level(pr, is->addr, PC, is);
+ return(accept_it(IL));
+ }