sys 58 include/struct.h extern SYSTEM *sys; sys 407 src/assemble.c if(adr >= sys->memsize) { sys 412 src/assemble.c (sys->memory)[adr] = word; sys 858 src/assemble.c fwrite(sys->memory, sizeof(WORD), execptr->end, fp); sys 11 src/dump.c fprintf(stdout, "#%04X: adr :", sys->cpu->pr); sys 12 src/dump.c if(end > sys->memsize) { sys 13 src/dump.c end = sys->memsize; sys 15 src/dump.c for(int i = 0; i < sys->memsize && i < col; i++) { sys 24 src/dump.c fprintf(stdout, "#%04X: %04X: ", sys->cpu->pr, i); sys 31 src/dump.c fprintf(stdout, "%04X", sys->memory[i]); sys 42 src/dump.c char *sp = word2bit(sys->cpu->sp); sys 43 src/dump.c char *pr = word2bit(sys->cpu->pr); sys 44 src/dump.c char *fr = word2bit(sys->cpu->fr); sys 49 src/dump.c fprintf(stdout, "#%04X: GR%d: ", sys->cpu->pr, i); sys 50 src/dump.c print_dumpword(sys->cpu->gr[i], execmode.logical); sys 53 src/dump.c fprintf(stdout, "#%04X: SP: %6d = #%04X = %s\n", sys->cpu->pr, sys->cpu->sp, sys->cpu->sp, sp); sys 54 src/dump.c fprintf(stdout, "#%04X: PR: %6d = #%04X = %s\n", sys->cpu->pr, sys->cpu->pr, sys->cpu->pr, pr); sys 55 src/dump.c fprintf(stdout, "#%04X: FR (OF SF ZF): %s\n", sys->cpu->pr, fr + L3BIT); /* FRは下位3けたを表示 */ sys 64 src/dump.c if(sys->cpu->pr == execptr->start && execmode.reverse == true) { /* reverseオプション指定時、スタート時にプログラム全体を逆アセンブル */ sys 65 src/dump.c disassemble_memory(sys->memory, execptr->start, (execptr->end)-1); sys 68 src/dump.c fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr); sys 72 src/dump.c fprintf(stdout, "#%04X: Memory::::\n", sys->cpu->pr); sys 76 src/dump.c fprintf(stdout, "#%04X: Disassemble::::", sys->cpu->pr); sys 77 src/dump.c disassemble_memory(sys->memory, sys->cpu->pr, sys->cpu->pr + code2cmdwordlen(sys->memory[sys->cpu->pr] & 0xFF00) - 1); sys 114 src/exec.c sys->memory[sys->cpu->gr[1]] = 0x0; sys 115 src/exec.c sys->memory[sys->cpu->gr[2]] = 0xFFFF; sys 123 src/exec.c if(sys->cpu->gr[1] + i >= execptr->end) { sys 127 src/exec.c sys->memory[sys->cpu->gr[1] + i] = buf[i]; sys 128 src/exec.c sys->memory[sys->cpu->gr[2]] = i + 1; sys 138 src/exec.c for(i = 0; i < sys->memory[sys->cpu->gr[2]]; i++) { sys 139 src/exec.c if(sys->cpu->gr[1] + i >= execptr->end) { sys 146 src/exec.c if(((w = sys->memory[sys->cpu->gr[1]+i]) >= 0x20 && w <= 0x7E) || /* JIS X 0201ラテン文字 */ sys 159 src/exec.c sys->cpu->fr = 0x0; sys 162 src/exec.c sys->cpu->fr += SF; sys 166 src/exec.c sys->cpu->fr += ZF; sys 176 src/exec.c setcerr(205, s = pr2str(sys->cpu->pr)); /* r/r1 in word #1 - not GR */ sys 189 src/exec.c setcerr(206, s = pr2str(sys->cpu->pr)); /* r/r1 in word #1 - not GR */ sys 202 src/exec.c a += sys->cpu->gr[x]; sys 212 src/exec.c if((a = get_adr_x(adr, oprx)) >= sys->memsize) { sys 213 src/exec.c setcerr(207, s = pr2str(sys->cpu->pr + 1)); /* address in word #2 - out of memory */ sys 217 src/exec.c return sys->memory[a]; sys 228 src/exec.c sys->cpu->pr += getcmdwordlen("NOP", NONE); sys 233 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 234 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] = get_val_adr_x(w[1], w[0])); sys 235 src/exec.c sys->cpu->pr += getcmdwordlen("LD", R_ADR_X); sys 240 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 241 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] = sys->cpu->gr[get_x_r2(w[0])]); sys 242 src/exec.c sys->cpu->pr += getcmdwordlen("LD", R1_R2); sys 247 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 248 src/exec.c sys->memory[get_adr_x(w[1], w[0])] = sys->cpu->gr[get_r_r1(w[0])]; sys 249 src/exec.c sys->cpu->pr += getcmdwordlen("ST", R_ADR_X); sys 254 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 255 src/exec.c sys->cpu->gr[get_r_r1(w[0])] = get_adr_x(w[1], w[0]); sys 256 src/exec.c sys->cpu->pr += getcmdwordlen("LAD", R_ADR_X); sys 263 src/exec.c sys->cpu->fr = 0x0; sys 266 src/exec.c if((tmp = (short)(sys->cpu->gr[r]) + (short)val) > 32767 || tmp < -32768) { sys 267 src/exec.c sys->cpu->fr += OF; sys 270 src/exec.c sys->cpu->gr[r] = (WORD)(tmp & 0xFFFF); sys 271 src/exec.c if((sys->cpu->gr[r] & 0x8000) == 0x8000) { sys 272 src/exec.c sys->cpu->fr += SF; sys 273 src/exec.c } else if(sys->cpu->gr[r] == 0x0) { sys 274 src/exec.c sys->cpu->fr += ZF; sys 280 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 282 src/exec.c sys->cpu->pr += getcmdwordlen("ADDA", R_ADR_X); sys 287 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 288 src/exec.c adda(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])]); sys 289 src/exec.c sys->cpu->pr += getcmdwordlen("ADDA", R1_R2); sys 294 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 296 src/exec.c sys->cpu->pr += getcmdwordlen("SUBA", R_ADR_X); sys 301 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 302 src/exec.c adda(get_r_r1(w[0]), ~(sys->cpu->gr[get_x_r2(w[0])]) + 1); sys 303 src/exec.c sys->cpu->pr += getcmdwordlen("SUBA", R1_R2); sys 311 src/exec.c o = sys->cpu->gr[r]; sys 312 src/exec.c sys->cpu->fr = 0; /* flag initialize */ sys 317 src/exec.c sys->cpu->fr += OF; sys 321 src/exec.c sys->cpu->fr += OF; sys 328 src/exec.c sys->cpu->gr[r] = (WORD)s; sys 331 src/exec.c sys->cpu->fr += SF; sys 334 src/exec.c sys->cpu->fr += ZF; sys 340 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 342 src/exec.c sys->cpu->pr += getcmdwordlen("ADDL", R_ADR_X); sys 347 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 348 src/exec.c addl_gr(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])], true); sys 349 src/exec.c sys->cpu->pr += getcmdwordlen("ADDL", R1_R2); sys 354 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 356 src/exec.c sys->cpu->pr += getcmdwordlen("SUBL", R_ADR_X); sys 361 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 362 src/exec.c addl_gr(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])], false); sys 363 src/exec.c sys->cpu->pr += getcmdwordlen("SUBL", R1_R2); sys 368 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 369 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] &= get_val_adr_x(w[1], w[0])); sys 370 src/exec.c sys->cpu->pr += getcmdwordlen("AND", R_ADR_X); sys 375 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 376 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] &= sys->cpu->gr[get_x_r2(w[0])]); sys 377 src/exec.c sys->cpu->pr += getcmdwordlen("AND", R1_R2); sys 382 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 383 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] |= get_val_adr_x(w[1], w[0])); sys 384 src/exec.c sys->cpu->pr += getcmdwordlen("OR", R_ADR_X); sys 389 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 390 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] |= sys->cpu->gr[get_x_r2(w[0])]); sys 391 src/exec.c sys->cpu->pr += getcmdwordlen("OR", R1_R2); sys 396 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 397 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] ^= get_val_adr_x(w[1], w[0])); sys 398 src/exec.c sys->cpu->pr += getcmdwordlen("XOR", R_ADR_X); sys 403 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 404 src/exec.c setfr(sys->cpu->gr[get_r_r1(w[0])] ^= sys->cpu->gr[get_x_r2(w[0])]); sys 405 src/exec.c sys->cpu->pr += getcmdwordlen("XOR", R1_R2); sys 410 src/exec.c sys->cpu->fr = 0; sys 411 src/exec.c if((short)sys->cpu->gr[r] < (short)val) { sys 412 src/exec.c sys->cpu->fr = SF; sys 413 src/exec.c } else if(sys->cpu->gr[r] == val) { sys 414 src/exec.c sys->cpu->fr = ZF; sys 420 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 422 src/exec.c sys->cpu->pr += getcmdwordlen("CPA", R_ADR_X); sys 427 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 428 src/exec.c cpa(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])]); sys 429 src/exec.c sys->cpu->pr += getcmdwordlen("CPA", R1_R2); sys 434 src/exec.c sys->cpu->fr = 0x0; sys 435 src/exec.c if(sys->cpu->gr[r] < val) { sys 436 src/exec.c sys->cpu->fr = SF; sys 437 src/exec.c } else if(sys->cpu->gr[r] == val) { sys 438 src/exec.c sys->cpu->fr = ZF; sys 444 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 446 src/exec.c sys->cpu->pr += getcmdwordlen("CPL", R_ADR_X); sys 451 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 452 src/exec.c cpl(get_r_r1(w[0]), sys->cpu->gr[get_x_r2(w[0])]); sys 453 src/exec.c sys->cpu->pr += getcmdwordlen("CPL", R1_R2); sys 458 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 460 src/exec.c WORD sign = sys->cpu->gr[r] & 0x8000; sys 463 src/exec.c sys->cpu->fr = 0; sys 464 src/exec.c sys->cpu->gr[r] &= 0x7FFF; sys 466 src/exec.c last = sys->cpu->gr[r] & 0x4000; sys 467 src/exec.c sys->cpu->gr[r] <<= 1; sys 469 src/exec.c sys->cpu->gr[r] = sign | (sys->cpu->gr[r] & 0x7FFF); sys 472 src/exec.c sys->cpu->fr += OF; sys 476 src/exec.c sys->cpu->fr += SF; sys 479 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 480 src/exec.c sys->cpu->fr += ZF; sys 482 src/exec.c sys->cpu->pr += getcmdwordlen("SLA", R_ADR_X); sys 487 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 489 src/exec.c WORD sign = sys->cpu->gr[r] & 0x8000; sys 492 src/exec.c sys->cpu->fr = 0; sys 493 src/exec.c sys->cpu->gr[r] &= 0x7FFF; sys 495 src/exec.c last = sys->cpu->gr[r] & 0x1; sys 496 src/exec.c sys->cpu->gr[r] >>= 1; sys 498 src/exec.c sys->cpu->gr[r] |= 0x4000; sys 501 src/exec.c sys->cpu->gr[r] = sign | sys->cpu->gr[r]; sys 504 src/exec.c sys->cpu->fr += OF; sys 508 src/exec.c sys->cpu->fr += SF; sys 511 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 512 src/exec.c sys->cpu->fr += ZF; sys 514 src/exec.c sys->cpu->pr += getcmdwordlen("SRA", R_ADR_X); sys 519 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 523 src/exec.c sys->cpu->fr = 0x0; sys 525 src/exec.c last = sys->cpu->gr[r] & 0x8000; sys 526 src/exec.c sys->cpu->gr[r] <<= 1; sys 530 src/exec.c sys->cpu->fr += OF; sys 533 src/exec.c if((sys->cpu->gr[r] & 0x8000) > 0x0) { sys 534 src/exec.c sys->cpu->fr += SF; sys 537 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 538 src/exec.c sys->cpu->fr += ZF; sys 540 src/exec.c sys->cpu->pr += getcmdwordlen("SLL", R_ADR_X); sys 545 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 549 src/exec.c sys->cpu->fr = 0x0; sys 551 src/exec.c last = sys->cpu->gr[r] & 0x0001; sys 552 src/exec.c sys->cpu->gr[r] >>= 1; sys 556 src/exec.c sys->cpu->fr += OF; sys 559 src/exec.c if((sys->cpu->gr[r] & 0x8000) > 0x0) { sys 560 src/exec.c sys->cpu->fr += SF; sys 563 src/exec.c if(sys->cpu->gr[r] == 0x0) { sys 564 src/exec.c sys->cpu->fr += ZF; sys 566 src/exec.c sys->cpu->pr += getcmdwordlen("SRL", R_ADR_X); sys 571 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 572 src/exec.c if((sys->cpu->fr & SF) > 0) { sys 573 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 575 src/exec.c sys->cpu->pr += getcmdwordlen("JMI", ADR_X); sys 581 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 582 src/exec.c if((sys->cpu->fr & ZF) == 0) { sys 583 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 585 src/exec.c sys->cpu->pr += getcmdwordlen("JNZ", ADR_X); sys 591 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 592 src/exec.c if((sys->cpu->fr & ZF) > 0) { sys 593 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 595 src/exec.c sys->cpu->pr += getcmdwordlen("JZE", ADR_X); sys 601 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 602 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 607 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 608 src/exec.c if((sys->cpu->fr & (SF | ZF)) == 0) { sys 609 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 611 src/exec.c sys->cpu->pr += getcmdwordlen("JPL", ADR_X); sys 617 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 618 src/exec.c if((sys->cpu->fr & OF) > 0) { sys 619 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 621 src/exec.c sys->cpu->pr += getcmdwordlen("JOV", ADR_X); sys 627 src/exec.c assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize); sys 628 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 629 src/exec.c sys->memory[--(sys->cpu->sp)] = get_adr_x(w[1], w[0]); sys 630 src/exec.c sys->cpu->pr += getcmdwordlen("PUSH", ADR_X); sys 635 src/exec.c assert(sys->cpu->sp > execptr->end); sys 636 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr]}; sys 639 src/exec.c if(sys->cpu->sp >= sys->memsize) { sys 640 src/exec.c setcerr(203, s = pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - stack underflow */ sys 643 src/exec.c sys->cpu->gr[get_r_r1(w[0])] = sys->memory[(sys->cpu->sp)++]; sys 644 src/exec.c sys->cpu->pr += getcmdwordlen("POP", R_); sys 650 src/exec.c assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize); sys 651 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 652 src/exec.c sys->memory[--(sys->cpu->sp)] = sys->cpu->pr + 1; sys 653 src/exec.c sys->cpu->pr = get_adr_x(w[1], w[0]); sys 658 src/exec.c assert(sys->cpu->sp <= sys->memsize); sys 659 src/exec.c if(sys->cpu->sp == sys->memsize) { sys 661 src/exec.c } else if(sys->cpu->sp < sys->memsize) { sys 662 src/exec.c sys->cpu->pr = sys->memory[(sys->cpu->sp)++] + 1; sys 668 src/exec.c WORD w[] = {sys->memory[sys->cpu->pr], sys->memory[sys->cpu->pr + 1]}; sys 681 src/exec.c sys->cpu->pr += getcmdwordlen("SVC", ADR_X); sys 695 src/exec.c sys->cpu->pr = execptr->start; sys 700 src/exec.c if((execmode.monitor == true && execptr->started == false) || execptr->stop == true || execmode.step == true || getbps(sys->cpu->pr) == true) sys 713 src/exec.c if(sys->cpu->pr >= sys->memsize) { sys 714 src/exec.c setcerr(201, s = pr2str(sys->cpu->pr)); /* Program Register (PR) - memory overflow */ sys 718 src/exec.c if(sys->cpu->sp <= execptr->end) { sys 719 src/exec.c setcerr(202, s = pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - stack overflow */ sys 724 src/exec.c if((cmdptr = getcmdptr(sys->memory[sys->cpu->pr] & 0xFF00)) == NULL) { sys 725 src/exec.c setcerr(204, s = pr2str(sys->cpu->pr)); /* OP in word #1 - not command code */ sys 745 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 309 src/monitor.c disassemble_memory(sys->memory, nh2word(args->argv[0]), nh2word(args->argv[1])); sys 311 src/monitor.c disassemble_memory(sys->memory, execptr->start, (execptr->end)-1); sys 330 src/monitor.c fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr); sys 8 src/struct.c SYSTEM *sys = NULL; sys 331 src/struct.c sys = malloc_chk(sizeof(SYSTEM), "sys"); sys 333 src/struct.c sys->memsize = memsize; sys 336 src/struct.c sys->clocks = clocks; sys 338 src/struct.c sys->cpu = malloc_chk(sizeof(CPU), "comet2_init.cpu"); sys 342 src/struct.c sys->memory = calloc_chk(sys->memsize, sizeof(WORD), "comet2_init.memory"); sys 354 src/struct.c sys->cpu->gr[i] = 0x0; sys 356 src/struct.c sys->cpu->sp = sys->memsize; /* スタックポインタ */ sys 357 src/struct.c sys->cpu->pr = 0x0; /* プログラムレジスタ */ sys 358 src/struct.c sys->cpu->fr = 0x0; /* フラグレジスタ */ sys 365 src/struct.c memset(sys->memory, 0, sys->memsize * sizeof(WORD)); sys 402 src/struct.c FREE(sys->memory); sys 403 src/struct.c FREE(sys->cpu); sys 404 src/struct.c FREE(sys);