sys 58 include/struct.h extern SYSTEM *sys; sys 352 src/assemble.c if(adr >= sys->memsize) { sys 357 src/assemble.c (sys->memory)[adr] = word; sys 789 src/assemble.c fwrite(sys->memory, sizeof(WORD), execptr->end, fp); sys 236 src/disassemble.c cmd = sys->memory[i] & 0xFF00; sys 239 src/disassemble.c if(sys->memory[i] == 0) { sys 246 src/disassemble.c disassemble_dc(sys->memory[i], i); sys 249 src/disassemble.c disassemble_cmd_adr_x(cmdtype, cmdname, sys->memory[i], sys->memory[i+1], i); sys 252 src/disassemble.c disassemble_cmd_r(cmdtype, cmdname, sys->memory[i], i); sys 9 src/dump.c fprintf(stdout, "#%04X: adr :", sys->cpu->pr); sys 10 src/dump.c if(end > sys->memsize) { sys 11 src/dump.c end = sys->memsize; sys 13 src/dump.c for(int i = 0; i < sys->memsize && i < col; i++) { sys 22 src/dump.c fprintf(stdout, "#%04X: %04X: ", sys->cpu->pr, i); sys 29 src/dump.c fprintf(stdout, "%04X", sys->memory[i]); sys 40 src/dump.c char *sp = word2bit(sys->cpu->sp); sys 41 src/dump.c char *pr = word2bit(sys->cpu->pr); sys 42 src/dump.c char *fr = word2bit(sys->cpu->fr); sys 47 src/dump.c fprintf(stdout, "#%04X: GR%d: ", sys->cpu->pr, i); sys 48 src/dump.c print_dumpword(sys->cpu->gr[i], execmode.logical); sys 51 src/dump.c fprintf(stdout, "#%04X: SP: %6d = #%04X = %s\n", sys->cpu->pr, sys->cpu->sp, sys->cpu->sp, sp); sys 52 src/dump.c fprintf(stdout, "#%04X: PR: %6d = #%04X = %s\n", sys->cpu->pr, sys->cpu->pr, sys->cpu->pr, pr); sys 53 src/dump.c fprintf(stdout, "#%04X: FR (OF SF ZF): %s\n", sys->cpu->pr, fr + L3BIT); /* FRは下位3けたを表示 */ sys 115 src/exec.c sys->memory[sys->cpu->gr[1]] = sys->memory[sys->cpu->gr[2]] = 0x0; sys 123 src/exec.c if(sys->cpu->gr[1] + i > execptr->end) { sys 128 src/exec.c sys->memory[sys->cpu->gr[1] + i] = buf[i]; sys 130 src/exec.c sys->memory[sys->cpu->gr[2]] = i + 1; sys 139 src/exec.c for(i = 0; i < sys->memory[sys->cpu->gr[2]]; i++) { sys 140 src/exec.c if(sys->cpu->gr[1] + i > execptr->end) { sys 147 src/exec.c if(((w = sys->memory[sys->cpu->gr[1]+i]) >= 0x20 && w <= 0x7E) || /* JIS X 0201ラテン文字 */ sys 160 src/exec.c sys->cpu->fr = 0x0; sys 163 src/exec.c sys->cpu->fr += SF; sys 167 src/exec.c sys->cpu->fr += ZF; sys 177 src/exec.c setcerr(205, s = pr2str(sys->cpu->pr)); /* r/r1 in word #1 - not GR */ sys 190 src/exec.c setcerr(206, s = pr2str(sys->cpu->pr)); /* r/r1 in word #1 - not GR */ sys 203 src/exec.c a += sys->cpu->gr[x]; sys 213 src/exec.c if((a = get_adr_x(adr, oprx)) >= sys->memsize) { sys 214 src/exec.c setcerr(207, s = pr2str(sys->cpu->pr + 1)); /* address in word #2 - out of memory */ sys 218 src/exec.c return sys->memory[a]; sys 229 src/exec.c sys->cpu->pr += 1; sys 234 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 235 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] = get_val_adr_x(w[1], w[0])); sys 236 src/exec.c sys->cpu->pr += 2; sys 241 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 242 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] = sys->cpu->gr[get_x_r2(w[0])]); sys 243 src/exec.c sys->cpu->pr += 1; sys 248 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 249 src/exec.c sys->memory[get_adr_x(w[1], w[0])] = sys->cpu->gr[get_r_r1(w[0])]; sys 250 src/exec.c sys->cpu->pr += 2; sys 255 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 256 src/exec.c sys->cpu->gr[get_r_r1(w[0])] = get_adr_x(w[1], w[0]); sys 257 src/exec.c sys->cpu->pr += 2; sys 264 src/exec.c sys->cpu->fr = 0x0; sys 267 src/exec.c if((tmp = (short)(sys->cpu->gr[r]) + (short)val) > 32767 || tmp < -32768) { sys 268 src/exec.c sys->cpu->fr += OF; sys 271 src/exec.c sys->cpu->gr[r] = (WORD)(tmp & 0xFFFF); sys 272 src/exec.c if((sys->cpu->gr[r] & 0x8000) == 0x8000) { sys 273 src/exec.c sys->cpu->fr += SF; sys 274 src/exec.c } else if(sys->cpu->gr[r] == 0x0) { sys 275 src/exec.c sys->cpu->fr += ZF; sys 281 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 283 src/exec.c sys->cpu->pr += 2; sys 288 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 289 src/exec.c adda(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])]); sys 290 src/exec.c sys->cpu->pr += 1; sys 295 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 297 src/exec.c sys->cpu->pr += 2; sys 302 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 303 src/exec.c adda(get_r_r1(w[0]), ~(sys->cpu->gr[get_x_r2(w[0])]) + 1); sys 304 src/exec.c sys->cpu->pr += 1; sys 312 src/exec.c o = sys->cpu->gr[r]; sys 313 src/exec.c sys->cpu->fr = 0; /* flag initialize */ sys 318 src/exec.c sys->cpu->fr += OF; sys 322 src/exec.c sys->cpu->fr += OF; sys 329 src/exec.c sys->cpu->gr[r] = (WORD)s; sys 332 src/exec.c sys->cpu->fr += SF; sys 335 src/exec.c sys->cpu->fr += ZF; sys 341 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 343 src/exec.c sys->cpu->pr += 2; sys 348 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 349 src/exec.c addl_gr(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])], true); sys 350 src/exec.c sys->cpu->pr += 1; sys 355 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 357 src/exec.c sys->cpu->pr += 2; sys 362 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 363 src/exec.c addl_gr(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])], false); sys 364 src/exec.c sys->cpu->pr += 1; sys 369 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 370 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] &= get_val_adr_x(w[1], w[0])); sys 371 src/exec.c sys->cpu->pr += 2; sys 376 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 377 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] &= sys->cpu->gr[get_x_r2(w[0])]); sys 378 src/exec.c sys->cpu->pr += 1; sys 383 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 384 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] |= get_val_adr_x(w[1], w[0])); sys 385 src/exec.c sys->cpu->pr += 2; sys 390 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 391 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] |= sys->cpu->gr[get_x_r2(w[0])]); sys 392 src/exec.c sys->cpu->pr += 1; sys 397 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 398 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] ^= get_val_adr_x(w[1], w[0])); sys 399 src/exec.c sys->cpu->pr += 2; sys 404 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 405 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] ^= sys->cpu->gr[get_x_r2(w[0])]); sys 406 src/exec.c sys->cpu->pr += 1; sys 411 src/exec.c sys->cpu->fr = 0; sys 412 src/exec.c if((short)sys->cpu->gr[r] < (short)val) { sys 413 src/exec.c sys->cpu->fr = SF; sys 414 src/exec.c } else if(sys->cpu->gr[r] == val) { sys 415 src/exec.c sys->cpu->fr = ZF; sys 421 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 423 src/exec.c sys->cpu->pr += 2; sys 428 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 429 src/exec.c cpa(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])]); sys 430 src/exec.c sys->cpu->pr += 1; sys 435 src/exec.c sys->cpu->fr = 0x0; sys 436 src/exec.c if(sys->cpu->gr[r] < val) { sys 437 src/exec.c sys->cpu->fr = SF; sys 438 src/exec.c } else if(sys->cpu->gr[r] == val) { sys 439 src/exec.c sys->cpu->fr = ZF; sys 445 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 447 src/exec.c sys->cpu->pr += 2; sys 452 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 453 src/exec.c cpl(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])]); sys 454 src/exec.c sys->cpu->pr += 1; sys 459 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 461 src/exec.c WORD sign = sys->cpu->gr[r] & 0x8000; sys 464 src/exec.c sys->cpu->fr = 0; sys 465 src/exec.c sys->cpu->gr[r] &= 0x7FFF; sys 467 src/exec.c last = sys->cpu->gr[r] & 0x4000; sys 468 src/exec.c sys->cpu->gr[r] <<= 1; sys 470 src/exec.c sys->cpu->gr[r] = sign | (sys->cpu->gr[r] & 0x7FFF); sys 473 src/exec.c sys->cpu->fr += OF; sys 477 src/exec.c sys->cpu->fr += SF; sys 480 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 481 src/exec.c sys->cpu->fr += ZF; sys 483 src/exec.c sys->cpu->pr += 2; sys 488 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 490 src/exec.c WORD sign = sys->cpu->gr[r] & 0x8000; sys 493 src/exec.c sys->cpu->fr = 0; sys 494 src/exec.c sys->cpu->gr[r] &= 0x7FFF; sys 496 src/exec.c last = sys->cpu->gr[r] & 0x1; sys 497 src/exec.c sys->cpu->gr[r] >>= 1; sys 499 src/exec.c sys->cpu->gr[r] |= 0x4000; sys 502 src/exec.c sys->cpu->gr[r] = sign | sys->cpu->gr[r]; sys 505 src/exec.c sys->cpu->fr += OF; sys 509 src/exec.c sys->cpu->fr += SF; sys 512 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 513 src/exec.c sys->cpu->fr += ZF; sys 515 src/exec.c sys->cpu->pr += 2; sys 520 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 524 src/exec.c sys->cpu->fr = 0x0; sys 526 src/exec.c last = sys->cpu->gr[r] & 0x8000; sys 527 src/exec.c sys->cpu->gr[r] <<= 1; sys 531 src/exec.c sys->cpu->fr += OF; sys 534 src/exec.c if((sys->cpu->gr[r] & 0x8000) > 0x0) { sys 535 src/exec.c sys->cpu->fr += SF; sys 538 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 539 src/exec.c sys->cpu->fr += ZF; sys 541 src/exec.c sys->cpu->pr += 2; sys 546 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 550 src/exec.c sys->cpu->fr = 0x0; sys 552 src/exec.c last = sys->cpu->gr[r] & 0x0001; sys 553 src/exec.c sys->cpu->gr[r] >>= 1; sys 557 src/exec.c sys->cpu->fr += OF; sys 560 src/exec.c if((sys->cpu->gr[r] & 0x8000) > 0x0) { sys 561 src/exec.c sys->cpu->fr += SF; sys 564 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 565 src/exec.c sys->cpu->fr += ZF; sys 567 src/exec.c sys->cpu->pr += 2; sys 572 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 573 src/exec.c if((sys->cpu->fr & (SF | ZF)) == 0) { sys 574 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 576 src/exec.c sys->cpu->pr += 2; sys 582 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 583 src/exec.c if((sys->cpu->fr & SF) > 0) { sys 584 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 586 src/exec.c sys->cpu->pr += 2; sys 592 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 593 src/exec.c if((sys->cpu->fr & ZF) == 0) { sys 594 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 596 src/exec.c sys->cpu->pr += 2; sys 602 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 603 src/exec.c if((sys->cpu->fr & ZF) > 0) { sys 604 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 606 src/exec.c sys->cpu->pr += 2; sys 612 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 613 src/exec.c if((sys->cpu->fr & OF) > 0) { sys 614 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 616 src/exec.c sys->cpu->pr += 2; sys 622 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 623 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 628 src/exec.c assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize); sys 629 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 630 src/exec.c sys->memory[--(sys->cpu->sp)] = get_adr_x(w[1], w[0]); sys 631 src/exec.c sys->cpu->pr += 2; sys 636 src/exec.c assert(sys->cpu->sp > execptr->end); sys 637 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 640 src/exec.c if(sys->cpu->sp >= sys->memsize) { sys 641 src/exec.c setcerr(203, s = pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - stack underflow */ sys 644 src/exec.c sys->cpu->gr[get_r_r1(w[0])] = sys->memory[(sys->cpu->sp)++]; sys 645 src/exec.c sys->cpu->pr += 1; sys 651 src/exec.c assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize); sys 652 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 653 src/exec.c sys->memory[--(sys->cpu->sp)] = sys->cpu->pr + 1; sys 654 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 659 src/exec.c assert(sys->cpu->sp <= sys->memsize); sys 660 src/exec.c if(sys->cpu->sp == sys->memsize) { sys 662 src/exec.c } else if(sys->cpu->sp < sys->memsize) { sys 663 src/exec.c sys->cpu->pr = sys->memory[(sys->cpu->sp)++] + 1; sys 669 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 682 src/exec.c sys->cpu->pr += 2; sys 699 src/exec.c for (sys->cpu->pr = execptr->start; ; ) { sys 703 src/exec.c fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr); sys 707 src/exec.c fprintf(stdout, "#%04X: Memory::::\n", sys->cpu->pr); sys 714 src/exec.c (execmode.monitor == true && sys->cpu->pr == execptr->start) || sys 715 src/exec.c execmode.step == true || getbps(sys->cpu->pr) == true) sys 717 src/exec.c if(sys->cpu->pr == execptr->start) { sys 723 src/exec.c if(sys->cpu->pr >= sys->memsize) { sys 724 src/exec.c setcerr(201, s = pr2str(sys->cpu->pr)); /* Program Register (PR) - memory overflow */ sys 728 src/exec.c if(sys->cpu->sp <= execptr->end) { sys 729 src/exec.c setcerr(202, s = pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - stack overflow */ sys 734 src/exec.c if((cmdptr = getcmdptr(sys->memory[sys->cpu->pr] & 0xFF00)) == NULL) { sys 735 src/exec.c setcerr(204, s = pr2str(sys->cpu->pr)); /* OP in word #1 - not command code */ sys 756 src/exec.c } while(clock_end - clock_begin < CLOCKS_PER_SEC / sys->clocks); sys 30 src/load.c end = start + fread(sys->memory + start, sizeof(WORD), sys->memsize - start, fp); sys 31 src/load.c if(end == sys->memsize) { sys 333 src/monitor.c fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr); sys 343 src/monitor.c fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr); sys 8 src/struct.c SYSTEM *sys = NULL; sys 270 src/struct.c sys = malloc_chk(sizeof(SYSTEM), "sys"); sys 273 src/struct.c sys->memsize = memsize; sys 276 src/struct.c sys->clocks = clocks; sys 278 src/struct.c sys->cpu = malloc_chk(sizeof(CPU), "comet2_init.cpu"); sys 282 src/struct.c sys->memory = calloc_chk(sys->memsize, sizeof(WORD), "comet2_init.memory"); sys 294 src/struct.c sys->cpu->gr[i] = 0x0; sys 296 src/struct.c sys->cpu->sp = sys->memsize; /* スタックポインタ */ sys 297 src/struct.c sys->cpu->pr = 0x0; /* プログラムレジスタ */ sys 298 src/struct.c sys->cpu->fr = 0x0; /* フラグレジスタ */ sys 305 src/struct.c memset(sys->memory, 0, sys->memsize * sizeof(WORD)); sys 334 src/struct.c FREE(sys->memory); sys 335 src/struct.c FREE(sys->cpu); sys 336 src/struct.c FREE(sys);