?? instructions.vhd
字號:
when 198 => INS <= doins( iSHR1 ); -- SHIFT => 1
when 199 => INS <= doins( iCMP, 16#85#);
when 200 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 201 => INS <= doins( iSHRE); -- SHIFT => EXTEND
when 202 => INS <= doins( iCMP, 16#C2#);
when 203 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 204 => INS <= doins( iROR); -- SHIFT => ROTATE
when 205 => INS <= doins( iCMP, 16#61#);
when 206 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
----------------------------------------------------------------------------------
-- WAIT instruction
when 207 => INS <= doins( iIOWRT, iDAT, 16#00#); -- IO_IN is connected to IO_OUT
when 208 => INS <= doins( iWAIT,iIF,INPUT0 ); -- wait if flag 0 set its not !
when 209 => INS <= doins( iIOWRT, iDAT, 16#01#); -- IO_IN is connected to IO_OUT
when 210 => INS <= doins( iWAIT,iNOTIF,INPUT0 ); -- wait if flag 0 set its set !
-- Test SUB
when 211 => INS <= doins( iLOAD, 100);
when 212 => INS <= doins( iSUB, 1);
when 213 => INS <= doins( iCMP, 99);
when 214 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 215 => INS <= doins( iSUB, 95);
when 216 => INS <= doins( iCMP, 4);
when 217 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Jump to ISR tests
when 218 => INS <= doins( iJUMP, 300);
----------------------------------------------------------------------------------
-- ISR testing
when 300 => INS <= doins( iLOAD,16#12#); -- Put 12 in memory location 1
when 301 => INS <= doins( iRAMWRT,1,iACC);
when 302 => INS <= doins( iCMP, 16#12#); -- set zero flag
when 303 => INS <= doins( iJUMP,iNOTIF,ZERO,254); -- ZERO flag should still be set before ISR
when 304 => INS <= doins( iIOWRT, iDAT, 249); -- route INTACT to flag input
when 305 => INS <= doins( iIOWRT, iDAT, 251); -- Cause interrupt to occur
when 306 => INS <= doins( iNOP);
when 307 => INS <= doins( iNOP);
when 308 => INS <= doins( iJUMP,iNOTIF,ZERO,254); -- ZERO flag should still be set after ISR
when 309 => INS <= doins( iRAMREAD,1); -- Verify that ISR called once only
when 310 => INS <= doins( iCMP, 16#13#);
when 311 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 312 => INS <= doins( iIOWRT, iDAT, 250); -- route IO_OUT to flag input
when 313 => INS <= doins( iJUMP,410);
-- The ISR Service Routine
when 400 => INS <= doins( iPUSH); -- store the accumalator
when 401 => INS <= doins( iIOWRT, iDAT, 252); -- Clear the external interrupt
when 402 => INS <= doins( iRAMREAD,1); -- increment the value at location 1
when 403 => INS <= doins( iINC); --
when 404 => INS <= doins( iRAMWRT,1,iACC); -- write it back, zero flag is not set
when 405 => INS <= doins( iJUMP,iNOTIF,INPUT0,254); -- INTACT should be set
when 406 => INS <= doins( iCALL,223); -- Do a normal call
when 407 => INS <= doins( iJUMP,iNOTIF,INPUT0,254); -- INTACT should still be set
when 408 => INS <= doins( iPOP); -- Restore the accumlator
when 409 => INS <= doins( iRETISR);
----------------------------------------------------------------------------------
-- 2.3 Added Instructions Testing
when 410 => INS <= doins( iLOAD,iDAT,16#55#); -- use new immediate instruction
when 411 => INS <= doins( iAND, iDAT,16#0F#);
when 412 => INS <= doins( iCMP, iDAT,16#05#);
when 413 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 414 => INS <= doins( iOR, iDAT,16#A2#);
when 415 => INS <= doins( iCMP,iDAT,16#A7#);
when 416 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 417 => INS <= doins( iINC );
when 418 => INS <= doins( iCMP,iDAT,16#A8#);
when 419 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 420 => INS <= doins( iXOR,iDAT,16#0F#);
when 421 => INS <= doins( iCMP,iDAT,16#A7#);
when 422 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 423 => INS <= doins( iADD,iDAT,16#12#);
when 424 => INS <= doins( iCMP,iDAT,16#B9#);
when 425 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 426 => INS <= doins( iCMP,16#B9#);
when 427 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 430 => INS <= doins( iRAMWRT,0,iDAT,16#55#); -- put data in RAM
when 431 => INS <= doins( iRAMWRT,1,iDAT,16#0F#);
when 432 => INS <= doins( iRAMWRT,2,iDAT,16#05#);
when 433 => INS <= doins( iRAMWRT,3,iDAT,16#A2#);
when 434 => INS <= doins( iRAMWRT,4,iDAT,16#A7#);
when 435 => INS <= doins( iRAMWRT,5,iDAT,16#A8#);
when 436 => INS <= doins( iRAMWRT,6,iDAT,16#0F#);
when 437 => INS <= doins( iRAMWRT,7,iDAT,16#12#);
when 438 => INS <= doins( iRAMWRT,8,iDAT,16#b9#);
--RAM based instructions
when 439 => INS <= doins( iLOAD,iRAM,0); --iLOAD,iDAT,16#55#);
when 440 => INS <= doins( iAND, iRAM,1); --iAND, iDAT,16#0F#);
when 441 => INS <= doins( iCMP, iRAM,2); --iCMP, iDAT,16#05#);
when 442 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 443 => INS <= doins( iOR, iRAM,3); --iOR, iDAT,16#A2#);
when 444 => INS <= doins( iCMP,iRAM,4); --iCMP,iDAT,16#A7#);
when 445 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 446 => INS <= doins( iINC );
when 447 => INS <= doins( iCMP,iRAM,5); --iCMP,iDAT,16#A8#);
when 448 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 449 => INS <= doins( iXOR,iRAM,6); --iXOR,iDAT,16#0F#);
when 450 => INS <= doins( iCMP,iRAM,4); --iCMP,iDAT,16#A7#);
when 451 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 452 => INS <= doins( iADD,iRAM,7); --iADD,iDAT,16#12#);
when 453 => INS <= doins( iCMP,iRAM,8); --iCMP,iDAT,16#B9#);
when 454 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 455 => INS <= doins( iCMP,16#B9#);
when 456 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 470 => INS <= doins( iIOWRT, iDAT,16#32#); -- Test New IO Instructions
when 471 => INS <= doins( iIOREAD); -- Check old write and read
when 472 => INS <= doins( iCMP,16#32#);
when 473 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 474 => INS <= doins( iLOAD,iDAT,16#47#);
when 475 => INS <= doins( iIOWRT,iACC); -- New instruction and read
when 476 => INS <= doins( iLOAD,iDAT,0);
when 477 => INS <= doins( iIOREAD);
when 478 => INS <= doins( iCMP,16#47#);
when 479 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 480 => INS <= doins( iLOAD,iDAT,16#77#); -- PUSH Immediate data
when 481 => INS <= doins( iPUSH,iACC);
when 482 => INS <= doins( iPUSH,iDAT,16#89#);
when 483 => INS <= doins( iPOP);
when 484 => INS <= doins( iCMP,16#89#);
when 485 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 486 => INS <= doins( iPOP);
when 487 => INS <= doins( iCMP,16#77#);
when 488 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Loop Instruction
when 490 => INS <= doins( iLOAD,5); -- accum=5
when 491 => INS <= doins( iLOADZ,iACC);
when 492 => INS <= doins( iINC);
when 493 => INS <= doins( iDECZ);
when 494 => INS <= doins( iJUMP,iNOTIF,ZZERO,492);
when 495 => INS <= doins( iCMP,10); -- Should have incremented by 5
when 496 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- WAIT instruction with switching input
when 498 => INS <= doins( iIOWRT, iDAT, 249); -- This will assert input for 20 clocks
when 499 => INS <= doins( iJUMP,iNOTIF,INPUT1,254); -- Make sure is set
when 500 => INS <= doins( iWAIT,iIF,INPUT1 ); -- Should sit here for 20 clocks
when 501 => INS <= doins( iJUMP,iIF,INPUT1,254); -- Make sure is cleared
when 502 => INS <= doins( iIOWRT, iDAT, 250); -- route IO_OUT to flag input
-- Multiply and DEC
when 503 => INS <= doins( iLOAD,3);
when 504 => INS <= doins( iMULT,iDAT,3);
when 505 => INS <= doins( iRAMWRT,15,iDAT,4);
when 506 => INS <= doins( iMULT,iRAM,15);
when 507 => INS <= doins( iDEC);
when 508 => INS <= doins( iCMP,35);
when 509 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Multiply Example
when 510 => INS <= doins( iRAMWRT,0,iDAT,12); -- A
when 511 => INS <= doins( iRAMWRT,1,iDAT,13); -- B
when 512 => INS <= doins( iRAMWRT,2,iDAT,0); -- P=Answer
when 513 => INS <= doins( iLOADZ,iDAT,8);
when 514 => INS <= doins( iRAMREAD,0); -- Get A
when 515 => INS <= doins( iBITTST,0); -- See if bit 0 set
when 516 => INS <= doins( iJUMP,iIF,iZERO,520);
when 517 => INS <= doins( iRAMREAD,2); -- Get P
when 518 => INS <= doins( iADD,iRAM,1); -- ADD B
when 519 => INS <= doins( iRAMWRT,2,iACC); -- Save
when 520 => INS <= doins( iRAMREAD,1); -- Shift B
when 521 => INS <= doins( iSHL0); -- *2
when 522 => INS <= doins( iRAMWRT,1,iACC); --
when 523 => INS <= doins( iRAMREAD,0); -- Shift A
when 524 => INS <= doins( iSHR0); --
when 525 => INS <= doins( iRAMWRT,0,iACC); -- Save
when 526 => INS <= doins( iDECZ); -- Do for all bits
when 527 => INS <= doins( iJUMP,iIFNOT,iZZERO,514);
when 528 => INS <= doins( iRAMREAD,2); -- Get P
when 529 => INS <= doins( iCMP,156); -- 12*13 should be 156
when 530 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Loop Increment Instruction
when 531 => INS <= doins( iLOAD,0); -- Clear accum
when 532 => INS <= doins( iLOADZ,iDAT,251);
when 533 => INS <= doins( iINC);
when 534 => INS <= doins( iINCZ);
when 535 => INS <= doins( iJUMP,iNOTIF,ZZERO,533);
when 536 => INS <= doins( iCMP,16#05#); -- Should loop 5 times
when 537 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Indirect Addressing
when 540 => INS <= doins( iLOADZ,iDAT,10);
when 541 => INS <= doins( iAPBWRTZ, iDAT, 0,16#12#); -- Write 12 to slot 0 @LOOP=10
when 542 => INS <= doins( iINCZ);
when 543 => INS <= doins( iAPBWRTZ, iDAT, 0,16#15#); -- Write 15 to slot 0 @LOOP=11
when 544 => INS <= doins( iAPBREAD, 0,10); -- Read the location
when 545 => INS <= doins( iCMP,16#12#);
when 546 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 547 => INS <= doins( iAPBREAD, 0,11); -- Read the location
when 548 => INS <= doins( iCMP,16#15#);
when 549 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 550 => INS <= doins( iINCZ);
when 551 => INS <= doins( iLOAD,33); --
when 552 => INS <= doins( iAPBWRTZ, iACC, 0); -- Write ACC to slot 0 @LOOP=12
when 553 => INS <= doins( iAPBREAD, 0,12); -- Read the location
when 554 => INS <= doins( iCMP,33);
when 555 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 556 => INS <= doins( iINCZ);
when 557 => INS <= doins( iLOAD,1); -- ACM location 1 will be 254
when 558 => INS <= doins( iAPBWRTZ, iACM, 0); -- Write ACM to slot 0 @LOOP=13
when 559 => INS <= doins( iAPBREAD, 0,13); -- Read the location
when 560 => INS <= doins( iCMP,254);
when 561 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 562 => INS <= doins( iLOADZ,iDAT,10); -- check indirect reads
when 563 => INS <= doins( iAPBREADZ, 0); -- Read the location
when 564 => INS <= doins( iCMP,16#12#);
when 565 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 566 => INS <= doins( iINCZ);
when 567 => INS <= doins( iAPBREADZ, 0); -- Read the location
when 568 => INS <= doins( iCMP,16#15#);
when 569 => INS <= doins( iAPBREAD, 0,11); -- Read the location
when 570 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- test the ADDZ and DECZ instructions
when 571 => INS <= doins( iLOADZ,iDAT,10);
when 572 => INS <= doins( iSUBZ ,iDAT,10);
when 573 => INS <= doins( iJUMP,iNOTIF,ZZERO,254);
when 574 => INS <= doins( iLOADZ,iDAT,16#FE#);
when 575 => INS <= doins( iADDZ ,iDAT,2);
when 576 => INS <= doins( iJUMP,iNOTIF,ZZERO,254);
when 577 => INS <= doins( iLOAD,iDAT,3);
when 578 => INS <= doins( iLOADZ,iDAT,16#FD#);
when 579 => INS <= doins( iADDZ ,iACC);
when 580 => INS <= doins( iJUMP,iNOTIF,ZZERO,254);
-- Done tests, jump to signal all done
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -