Changeset 92 for Deliverables/D4.1
- Timestamp:
- Sep 20, 2010, 5:40:16 PM (10 years ago)
- Location:
- Deliverables/D4.1
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
Deliverables/D4.1/ASM.mli
r46 r92 1 open BitVectors;; 1 2 open Physical;; 2 3 -
Deliverables/D4.1/ASMInterpret.ml
r91 r92 1 1 open BitVectors;; 2 open ASM;; 2 3 open Physical;; 3 4 … … 83 84 84 85 let get_cy_flag status = 85 let (cy,_,_,_),_ =status.psw in cy86 let [cy;_;_;_;_;_;_;_] = to_bits status.psw in cy 86 87 let get_ac_flag status = 87 let (_,ac,_,_),_ =status.psw in ac88 let [_;ac;_;_;_;_;_;_] = to_bits status.psw in ac 88 89 let get_fo_flag status = 89 let (_,_,fo,_),_ =status.psw in fo90 let [_;_;fo;_;_;_;_;_] = to_bits status.psw in fo 90 91 let get_rs1_flag status = 91 let (_,_,_,rs1),_ =status.psw in rs192 let [_;_;_;rs1;_;_;_;_] = to_bits status.psw in rs1 92 93 let get_rs0_flag status = 93 let _,(rs0,_,_,_) =status.psw in rs094 let [_;_;_;_;rs0;_;_;_] = to_bits status.psw in rs0 94 95 let get_ov_flag status = 95 let _,(_,ov,_,_) =status.psw in ov96 let [_;_;_;_;_;ov;_;_] = to_bits status.psw in ov 96 97 let get_ud_flag status = 97 let _,(_,_,ud,_) =status.psw in ud98 let [_;_;_;_;_;_;ud;_] = to_bits status.psw in ud 98 99 let get_p_flag status = 99 let _,(_,_,_,p) =status.psw in p100 let [_;_;_;_;_;_;_;p] = to_bits status.psw in p 100 101 101 102 (* timings taken from SIEMENS *) 102 103 103 104 let fetch pmem pc = 104 let next pc = pc ++ 1, WordMap.find pc pmem in 105 let next pc = 106 let (carry, res) = half_add pc (vect_of_int 1 `Sixteen) in 107 res, WordMap.find pc pmem 108 in 105 109 let instr = WordMap.find pc pmem in 106 let pc = pc ++ 1 in 110 let cy, pc = half_add pc (vect_of_int 1 `Sixteen) in 111 let (un, ln) = from_byte instr in 112 let bits = (from_nibble un, from_nibble ln) in 107 113 try 108 match instrwith114 match bits with 109 115 (a10,a9,a8,true),(false,false,false,true) -> 110 116 let pc,b1 = next pc in 111 ACALL (`ADDR11 ( a10,a9,a8,b1)), pc, 2117 ACALL (`ADDR11 (mk_word11 a10 a9 a8 b1)), pc, 2 112 118 | (false,false,true,false),(true,r1,r2,r3) -> 113 119 ADD (`A,`REG (r1,r2,r3)), pc, 1 … … 132 138 | (a10,a9,a8,false),(false,false,false,true) -> 133 139 let pc,b1 = next pc in 134 AJMP (`ADDR11 ( a10,a9,a8,b1)), pc, 2140 AJMP (`ADDR11 (mk_word11 a10 a9 a8 b1)), pc, 2 135 141 | (false,true,false,true),(true,r1,r2,r3) -> 136 142 ANL (`U1 (`A, `REG (r1,r2,r3))), pc, 1 … … 246 252 let pc,b1 = next pc in 247 253 let pc,b2 = next pc in 248 LCALL (`ADDR16 ( b1,b2)), pc, 2254 LCALL (`ADDR16 (mk_word b1 b2)), pc, 2 249 255 | (false,false,false,false),(false,false,true,false) -> 250 256 let pc,b1 = next pc in 251 257 let pc,b2 = next pc in 252 LJMP (`ADDR16 ( b1,b2)), pc, 2258 LJMP (`ADDR16 (mk_word b1 b2)), pc, 2 253 259 | (true,true,true,false),(true,r1,r2,r3) -> 254 260 MOV (`U1 (`A, `REG(r1,r2,r3))), pc, 1 … … 303 309 let pc,b1 = next pc in 304 310 let pc,b2 = next pc in 305 MOV (`U4 (`DPTR, `DATA16( b1,b2))), pc, 2311 MOV (`U4 (`DPTR, `DATA16(mk_word b1 b2))), pc, 2 306 312 | (true,false,false,true),(false,false,true,true) -> 307 313 MOVC (`A, `A_DPTR), pc, 2 … … 411 417 ;; 412 418 419 let lift a f g = 420 let (x, y) = f a in 421 (g x, g x) 422 413 423 let assembly1 = 414 424 function 415 ACALL (`ADDR11 (a10,a9,a8,b1)) -> 416 [(a10,a9,a8,true),(false,false,false,true); b1] 425 ACALL (`ADDR11 w) -> 426 let (a10,a9,a8,b1) = from_word11 w in 427 [(a10,a9,a8,true),(false,false,false,true); lift b1 from_byte from_nibble] 417 428 | ADD (`A,`REG (r1,r2,r3)) -> 418 429 [(false,false,true,false),(true,r1,r2,r3)] 419 430 | ADD (`A, `DIRECT b1) -> 420 [(false,false,true,false),(false,true,false,true); b1]431 [(false,false,true,false),(false,true,false,true); lift b1 from_byte from_nibble] 421 432 | ADD (`A, `INDIRECT i1) -> 422 433 [(false,false,true,false),(false,true,true,i1)] 423 434 | ADD (`A, `DATA b1) -> 424 [(false,false,true,false),(false,true,false,false); b1]435 [(false,false,true,false),(false,true,false,false); lift b1 from_byte from_nibble] 425 436 | ADDC (`A, `REG(r1,r2,r3)) -> 426 437 [(false,false,true,true),(true,r1,r2,r3)] 427 438 | ADDC (`A, `DIRECT b1) -> 428 [(false,false,true,true),(false,true,false,true); b1]439 [(false,false,true,true),(false,true,false,true); lift b1 from_byte from_nibble] 429 440 | ADDC (`A,`INDIRECT i1) -> 430 441 [(false,false,true,true),(false,true,true,i1)] 431 442 | ADDC (`A,`DATA b1) -> 432 [(false,false,true,true),(false,true,false,false); b1] 433 | AJMP (`ADDR11 (a10,a9,a8,b1)) -> 434 [(a10,a9,a8,false),(false,false,false,true)] 443 [(false,false,true,true),(false,true,false,false); lift b1 from_byte from_nibble] 444 | AJMP (`ADDR11 w) -> 445 let (a10,a9,a8,b1) = from_word11 w in 446 [(a10,a9,a8,false),(false,false,false,true)] 435 447 | ANL (`U1 (`A, `REG (r1,r2,r3))) -> 436 448 [(false,true,false,true),(true,r1,r2,r3)] 437 449 | ANL (`U1 (`A, `DIRECT b1)) -> 438 [(false,true,false,true),(false,true,false,true); b1]450 [(false,true,false,true),(false,true,false,true); lift b1 from_byte from_nibble] 439 451 | ANL (`U1 (`A, `INDIRECT i1)) -> 440 452 [(false,true,false,true),(false,true,true,i1)] 441 453 | ANL (`U1 (`A, `DATA b1)) -> 442 [(false,true,false,true),(false,true,false,false); b1]454 [(false,true,false,true),(false,true,false,false); lift b1 from_byte from_nibble] 443 455 | ANL (`U2 (`DIRECT b1,`A)) -> 444 [(false,true,false,true),(false,false,true,false); b1]456 [(false,true,false,true),(false,false,true,false); lift b1 from_byte from_nibble] 445 457 | ANL (`U2 (`DIRECT b1,`DATA b2)) -> 446 [(false,true,false,true),(false,false,true,true); b1; b2]458 [(false,true,false,true),(false,false,true,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 447 459 | ANL (`U3 (`C,`BIT b1)) -> 448 [(true,false,false,false),(false,false,true,false); b1]460 [(true,false,false,false),(false,false,true,false); lift b1 from_byte from_nibble] 449 461 | ANL (`U3 (`C,`NBIT b1)) -> 450 [(true,false,true,true),(false,false,false,false); b1]462 [(true,false,true,true),(false,false,false,false); lift b1 from_byte from_nibble] 451 463 | CJNE (`U1 (`A, `DIRECT b1), `REL b2) -> 452 [(true,false,true,true),(false,true,false,true); b1; b2]464 [(true,false,true,true),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 453 465 | CJNE (`U1 (`A, `DATA b1), `REL b2) -> 454 [(true,false,true,true),(false,true,false,false); b1; b2]466 [(true,false,true,true),(false,true,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 455 467 | CJNE (`U2 (`REG(r1,r2,r3), `DATA b1), `REL b2) -> 456 [(true,false,true,true),(true,r1,r2,r3); b1; b2]468 [(true,false,true,true),(true,r1,r2,r3); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 457 469 | CJNE (`U2 (`INDIRECT i1, `DATA b1), `REL b2) -> 458 [(true,false,true,true),(false,true,true,i1); b1; b2]470 [(true,false,true,true),(false,true,true,i1); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 459 471 | CLR `A -> 460 472 [(true,true,true,false),(false,true,false,false)] … … 462 474 [(true,true,false,false),(false,false,true,true)] 463 475 | CLR (`BIT b1) -> 464 [(true,true,false,false),(false,false,true,false); b1]476 [(true,true,false,false),(false,false,true,false); lift b1 from_byte from_nibble] 465 477 | CPL `A -> 466 478 [(true,true,true,true),(false,true,false,false)] … … 468 480 [(true,false,true,true),(false,false,true,true)] 469 481 | CPL (`BIT b1) -> 470 [(true,false,true,true),(false,false,true,false); b1]482 [(true,false,true,true),(false,false,true,false); lift b1 from_byte from_nibble] 471 483 | DA `A -> 472 484 [(true,true,false,true),(false,true,false,false)] … … 476 488 [(false,false,false,true),(true,r1,r2,r3)] 477 489 | DEC (`DIRECT b1) -> 478 [(false,false,false,true),(false,true,false,true); b1]490 [(false,false,false,true),(false,true,false,true); lift b1 from_byte from_nibble] 479 491 | DEC (`INDIRECT i1) -> 480 492 [(false,false,false,true),(false,true,true,i1)] … … 482 494 [(true,false,false,false),(false,true,false,false)] 483 495 | DJNZ (`REG(r1,r2,r3), `REL b1) -> 484 [(true,true,false,true),(true,r1,r2,r3); b1]496 [(true,true,false,true),(true,r1,r2,r3); lift b1 from_byte from_nibble] 485 497 | DJNZ (`DIRECT b1, `REL b2) -> 486 [(true,true,false,true),(false,true,false,true); b1; b2]498 [(true,true,false,true),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 487 499 | INC `A -> 488 500 [(false,false,false,false),(false,true,false,false)] … … 490 502 [(false,false,false,false),(true,r1,r2,r3)] 491 503 | INC (`DIRECT b1) -> 492 [(false,false,false,false),(false,true,false,true); b1]504 [(false,false,false,false),(false,true,false,true); lift b1 from_byte from_nibble] 493 505 | INC (`INDIRECT i1) -> 494 506 [(false,false,false,false),(false,true,true,i1)] … … 496 508 [(true,false,true,false),(false,false,true,true)] 497 509 | JB (`BIT b1, `REL b2) -> 498 [(false,false,true,false),(false,false,false,false); b1; b2]510 [(false,false,true,false),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 499 511 | JBC (`BIT b1, `REL b2) -> 500 [(false,false,false,true),(false,false,false,false); b1; b2]512 [(false,false,false,true),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 501 513 | JC (`REL b1) -> 502 [(false,true,false,false),(false,false,false,false); b1]514 [(false,true,false,false),(false,false,false,false); lift b1 from_byte from_nibble] 503 515 | JMP `IND_DPTR -> 504 516 [(false,true,true,true),(false,false,true,true)] 505 517 | JNB (`BIT b1, `REL b2) -> 506 [(false,false,true,true),(false,false,false,false); b1; b2]518 [(false,false,true,true),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 507 519 | JNC (`REL b1) -> 508 [(false,true,false,true),(false,false,false,false); b1]520 [(false,true,false,true),(false,false,false,false); lift b1 from_byte from_nibble] 509 521 | JNZ (`REL b1) -> 510 [(false,true,true,true),(false,false,false,false); b1]522 [(false,true,true,true),(false,false,false,false); lift b1 from_byte from_nibble] 511 523 | JZ (`REL b1) -> 512 [(false,true,true,false),(false,false,false,false); b1] 513 | LCALL (`ADDR16 (b1,b2)) -> 514 [(false,false,false,true),(false,false,true,false); b1; b2] 515 | LJMP (`ADDR16 (b1,b2)) -> 516 [(false,false,false,false),(false,false,true,false); b1; b2] 524 [(false,true,true,false),(false,false,false,false); lift b1 from_byte from_nibble] 525 | LCALL (`ADDR16 w) -> 526 let (b1,b2) = from_word w in 527 [(false,false,false,true),(false,false,true,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 528 | LJMP (`ADDR16 w) -> 529 let (b1,b2) = from_word w in 530 [(false,false,false,false),(false,false,true,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 517 531 | MOV (`U1 (`A, `REG(r1,r2,r3))) -> 518 532 [(true,true,true,false),(true,r1,r2,r3)] 519 533 | MOV (`U1 (`A, `DIRECT b1)) -> 520 [(true,true,true,false),(false,true,false,true); b1]534 [(true,true,true,false),(false,true,false,true); lift b1 from_byte from_nibble] 521 535 | MOV (`U1 (`A, `INDIRECT i1)) -> 522 536 [(true,true,true,false),(false,true,true,i1)] 523 537 | MOV (`U1 (`A, `DATA b1)) -> 524 [(false,true,true,true),(false,true,false,false); b1]538 [(false,true,true,true),(false,true,false,false); lift b1 from_byte from_nibble] 525 539 | MOV (`U2 (`REG(r1,r2,r3), `A)) -> 526 540 [(true,true,true,true),(true,r1,r2,r3)] 527 541 | MOV (`U2 (`REG(r1,r2,r3), (`DIRECT b1))) -> 528 [(true,false,true,false),(true,r1,r2,r3); b1]542 [(true,false,true,false),(true,r1,r2,r3); lift b1 from_byte from_nibble] 529 543 | MOV (`U2 (`REG(r1,r2,r3), (`DATA b1))) -> 530 [(false,true,true,true),(true,r1,r2,r3); b1]544 [(false,true,true,true),(true,r1,r2,r3); lift b1 from_byte from_nibble] 531 545 | MOV (`U3 (`DIRECT b1, `A)) -> 532 [(true,true,true,true),(false,true,false,true); b1]546 [(true,true,true,true),(false,true,false,true); lift b1 from_byte from_nibble] 533 547 | MOV (`U3 (`DIRECT b1, `REG(r1,r2,r3))) -> 534 [(true,false,false,false),(true,r1,r2,r3); b1]548 [(true,false,false,false),(true,r1,r2,r3); lift b1 from_byte from_nibble] 535 549 | MOV (`U3 (`DIRECT b1, `DIRECT b2)) -> 536 [(true,false,false,false),(false,true,false,true); b1; b2]550 [(true,false,false,false),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 537 551 | MOV (`U3 (`DIRECT b1, `INDIRECT i1)) -> 538 [(true,false,false,false),(false,true,true,i1); b1]552 [(true,false,false,false),(false,true,true,i1); lift b1 from_byte from_nibble] 539 553 | MOV (`U3 (`DIRECT b1, `DATA b2)) -> 540 [(false,true,true,true),(false,true,false,true); b1; b2]554 [(false,true,true,true),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 541 555 | MOV (`U2 (`INDIRECT i1, `A)) -> 542 556 [(true,true,true,true),(false,true,true,i1)] 543 557 | MOV (`U2 (`INDIRECT i1, `DIRECT b1)) -> 544 [(true,false,true,false),(false,true,true,i1); b1]558 [(true,false,true,false),(false,true,true,i1); lift b1 from_byte from_nibble] 545 559 | MOV (`U2 (`INDIRECT i1, `DATA b1)) -> 546 [(false,true,true,true),(false,true,true,i1); b1]560 [(false,true,true,true),(false,true,true,i1); lift b1 from_byte from_nibble] 547 561 | MOV (`U5 (`C, `BIT b1)) -> 548 [(true,false,true,false),(false,false,true,false); b1]562 [(true,false,true,false),(false,false,true,false); lift b1 from_byte from_nibble] 549 563 | MOV (`U6 (`BIT b1, `C)) -> 550 [(true,false,false,true),(false,false,true,false); b1] 551 | MOV (`U4 (`DPTR, `DATA16(b1,b2))) -> 552 [(true,false,false,true),(false,false,false,false); b1; b2] 564 [(true,false,false,true),(false,false,true,false); lift b1 from_byte from_nibble] 565 | MOV (`U4 (`DPTR, `DATA16 w)) -> 566 let (b1,b2) = from_word w in 567 [(true,false,false,true),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 553 568 | MOVC (`A, `A_DPTR) -> 554 569 [(true,false,false,true),(false,false,true,true)] … … 570 585 [(false,true,false,false),(true,r1,r2,r3)] 571 586 | ORL (`U1(`A, `DIRECT b1)) -> 572 [(false,true,false,false),(false,true,false,true); b1]587 [(false,true,false,false),(false,true,false,true); lift b1 from_byte from_nibble] 573 588 | ORL (`U1(`A, `INDIRECT i1)) -> 574 589 [(false,true,false,false),(false,true,true,i1)] 575 590 | ORL (`U1(`A, `DATA b1)) -> 576 [(false,true,false,false),(false,true,false,false); b1]591 [(false,true,false,false),(false,true,false,false); lift b1 from_byte from_nibble] 577 592 | ORL (`U2(`DIRECT b1, `A)) -> 578 [(false,true,false,false),(false,false,true,false); b1]593 [(false,true,false,false),(false,false,true,false); lift b1 from_byte from_nibble] 579 594 | ORL (`U2 (`DIRECT b1, `DATA b2)) -> 580 [(false,true,false,false),(false,false,true,true); b1; b2]595 [(false,true,false,false),(false,false,true,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 581 596 | ORL (`U3 (`C, `BIT b1)) -> 582 [(false,true,true,true),(false,false,true,false); b1]597 [(false,true,true,true),(false,false,true,false); lift b1 from_byte from_nibble] 583 598 | ORL (`U3 (`C, `NBIT b1)) -> 584 [(true,false,true,false),(false,false,false,false); b1]599 [(true,false,true,false),(false,false,false,false); lift b1 from_byte from_nibble] 585 600 | POP (`DIRECT b1) -> 586 [(true,true,false,true),(false,false,false,false); b1]601 [(true,true,false,true),(false,false,false,false); lift b1 from_byte from_nibble] 587 602 | PUSH (`DIRECT b1) -> 588 [(true,true,false,false),(false,false,false,false); b1]603 [(true,true,false,false),(false,false,false,false); lift b1 from_byte from_nibble] 589 604 | RET -> 590 605 [(false,false,true,false),(false,false,true,false)] … … 602 617 [(true,true,false,true),(false,false,true,true)] 603 618 | SETB (`BIT b1) -> 604 [(true,true,false,true),(false,false,true,false); b1]619 [(true,true,false,true),(false,false,true,false); lift b1 from_byte from_nibble] 605 620 | SJMP (`REL b1) -> 606 [(true,false,false,false),(false,false,false,false); b1]621 [(true,false,false,false),(false,false,false,false); lift b1 from_byte from_nibble] 607 622 | SUBB (`A, `REG(r1,r2,r3)) -> 608 623 [(true,false,false,true),(true,r1,r2,r3)] 609 624 | SUBB (`A, `DIRECT b1) -> 610 [(true,false,false,true),(false,true,false,true); b1]625 [(true,false,false,true),(false,true,false,true); lift b1 from_byte from_nibble] 611 626 | SUBB (`A, `INDIRECT i1) -> 612 627 [(true,false,false,true),(false,true,true,i1)] 613 628 | SUBB (`A, `DATA b1) -> 614 [(true,false,false,true),(false,true,false,false); b1]629 [(true,false,false,true),(false,true,false,false); lift b1 from_byte from_nibble] 615 630 | SWAP `A -> 616 631 [(true,true,false,false),(false,true,false,false)] … … 618 633 [(true,true,false,false),(true,r1,r2,r3)] 619 634 | XCH (`A, `DIRECT b1) -> 620 [(true,true,false,false),(false,true,false,true); b1]635 [(true,true,false,false),(false,true,false,true); lift b1 from_byte from_nibble] 621 636 | XCH (`A, `INDIRECT i1) -> 622 637 [(true,true,false,false),(false,true,true,i1)] … … 626 641 [(false,true,true,false),(true,r1,r2,r3)] 627 642 | XRL(`U1(`A, `DIRECT b1)) -> 628 [(false,true,true,false),(false,true,false,true); b1]643 [(false,true,true,false),(false,true,false,true); lift b1 from_byte from_nibble] 629 644 | XRL(`U1(`A, `INDIRECT i1)) -> 630 645 [(false,true,true,false),(false,true,true,i1)] 631 646 | XRL(`U1(`A, `DATA b1)) -> 632 [(false,true,true,false),(false,true,false,false); b1]647 [(false,true,true,false),(false,true,false,false); lift b1 from_byte from_nibble] 633 648 | XRL(`U2(`DIRECT b1, `A)) -> 634 [(false,true,true,false),(false,false,true,false); b1]649 [(false,true,true,false),(false,false,true,false); lift b1 from_byte from_nibble] 635 650 | XRL(`U2(`DIRECT b1, `DATA b2)) -> 636 [(false,true,true,false),(false,false,true,true); b1; b2]651 [(false,true,true,false),(false,false,true,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble] 637 652 ;; 638 653 639 654 let get_address_of_register status (b1,b2,b3) = 640 let (_,_,rs1,rs0),_ = status.psw in655 let (_,_,rs1,rs0),_ = from_word status.psw in 641 656 let base = 642 657 match rs1,rs0 with -
Deliverables/D4.1/BitVectors.ml
r90 r92 6 6 type word = [`Sixteen] vect 7 7 type word11 = [`Eleven] vect 8 9 type sizes = [ `Four | `Seven | `Eight | `Eleven | `Sixteen ] 8 10 9 11 let mk_nibble b1 b2 b3 b4 = [b1; b2; b3; b4] -
Deliverables/D4.1/BitVectors.mli
r90 r92 8 8 type word = [`Sixteen] vect 9 9 type word11 = [`Eleven] vect 10 11 type sizes = [ `Four | `Seven | `Eight | `Eleven | `Sixteen ] 10 12 11 13 val mk_nibble: bit -> bit -> bit -> bit -> nibble … … 25 27 26 28 val int_of_vect: 'a vect -> int 27 val vect_of_int: int -> [< `Four | `Seven | `Eight | `Eleven | `Sixteen ] -> [`Four | `Seven | `Eight | `Eleven | `Sixteen ]vect29 val vect_of_int: int -> ([< sizes] as 'a) -> 'a vect 28 30 29 31 val (-&-): 'a vect -> 'a vect -> 'a vect -
Deliverables/D4.1/physical.ml
r91 r92 19 19 | _ -> raise Byte7_conversion 20 20 21 let add8_with_c b1 b2 c=21 let add8_with_c (b1 : [`Eight] vect) (b2 : [`Eight] vect) (c : bit) = 22 22 let n1 = int_of_vect b1 in 23 23 let n2 = int_of_vect b2 in 24 let c = int_of_ vect c in24 let c = int_of_bit c in 25 25 let res = n1 + n2 + c in 26 26 let ac = n1 mod 16 + n2 mod 16 + c >= 16 in … … 28 28 let res,c = res mod 256, res >= 256 in 29 29 let ov = c <> c6 in 30 vect_of_int res ,c,ac,ov30 vect_of_int res `Eight,c,ac,ov 31 31 ;; 32 32 … … 53 53 let inc b = 54 54 let res = int_of_vect b + 1 in 55 if res > 255 then vect_of_int 0 `Eight56 else vect_of_int res `Eight55 if res > 255 then (vect_of_int 0 `Eight : byte) 56 else (vect_of_int res `Eight : byte) 57 57 ;; 58 58 -
Deliverables/D4.1/physical.mli
r91 r92 10 10 11 11 val subb8_with_c: 12 byte -> byte -> bit -> ([ `Eight | `Eleven | `Four | `Seven | `Sixteen ] vect) * bit * bit * bit (* -, c, ac, ov *) 13 val dec: byte -> ([ `Eight | `Eleven | `Four | `Seven | `Sixteen ] vect) (* with roll-over *) 14 val inc: byte -> ([ `Eight | `Eleven | `Four | `Seven | `Sixteen ] vect) (* with roll-over *) 12 byte -> byte -> bit -> byte * bit * bit * bit (* -, c, ac, ov *) 13 val add8_with_c: 14 byte -> byte -> bit -> byte * bit * bit * bit 15 val dec: byte -> byte (* with roll-over *) 16 val inc: byte -> byte (* with roll-over *)
Note: See TracChangeset
for help on using the changeset viewer.