;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ; V L A S T N Í M I K R O I N S T R U K C E ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ;DEKODOVANI IR(3:1) INSTR_1100xxxx: { , 0 , 0 , INTCHECK ; 000 , 0 , 0 , INTCHECK ; 001 , 0 , 0 , INTCHECK ; 010 , 0 , 0 , INTCHECK ; 011 , 0 , 0 , INTCHECK ; 100 , 0 , 0 , INTCHECK ; 101 , 0 , 0 , INSTR_CC_CD ; IR=1100 110 x TEST IR(0) , 0 , 0 , INTCHECK ; 111 } ;------------------------------------------------------------------------------------------------------- ; S P O J E N Í: O P E R A Č N Í Z N A K CCh CDh ;------------------------------------------------------------------------------------------------------- ;NACTEME DO W HODNOTU CISLA NA POSUN (M[na adrese S]->W), ZVYSIME S: S++ ;ULOZIME SPODNI CAST Z PAMETI DO DIL INSTR_CC_CD: OES OEAB , 0 , 0 , ; S->AB INSTR_DO_L: {OES OEAB MRD ECINL, 0 , 10 , INSTR_DO_L ; TEST WAIT, S->AB,M->DIL ECS , 0 , 0 , ; S++ } ;ULOZIME HORNI CAST Z PAMETI DO DIH OES OEAB , 0 , 0 , ; S->AB INSTR_DO_H: {OES OEAB MRD ECINH, 0 , 10 , INSTR_DO_H ;TEST WAIT, S->AB,M->DIH ECS OEINLH ECW, 2 , 0 , ; S++ } ;NACTEME OPERAND DO REGISTRU L (PAMET -> L) (PC->bus->AB;M->DB->DIL->bus->L), PC++ OEPC OEAB , 0 , 0 , ;PC->AB C_CD_PAMET: { OEPC OEAB MRD ECINL , 0 , 10 , C_CD_PAMET ;TEST SIGNALU WAIT, CTEME DO DIL PRES DAT.ZBERNICI ECPC OEINZE PEL, 0 , 0 , ;ZVYSIME PC, Z DIL PRESUNEME HODNOTU DO L (pres bus) (presouvame nulove rozsireni, ktere se pak stejne urizne) } ;NYNI MAME V L POCET POSUNU, PROVEDEME L POSUNU W ECL , 0 , 14 , CC_CD_TEST_L ;L PROBEHNE I PRO NULU => SNIZIME O 1 (L--), ;POKUD JE L=0, neprovadime posun, rovnou ulozime CC_CD_TEST_L:{ , 0 , 11 , INSTR_1100110x ; IR=1100 110 x TEST IR(0), dekodovani instrukce ECF , 0 , 0 , ICC_ULOZ ; NULOVY POSUN, ROVNOU ULOZIME, vynulovani CF } ;DEKODUJEME INSTRUKCI, ZDA-LI JDE O POSUN DOPRAVA CI DOLEVA, L-- pro posun vpravo INSTR_1100110x: { ECF ECL, 0 , 14 , ICC_POSUN ; IR=1100110 0 instr CC, vynulujeme CF, L-- ECF , 0 , 0 , ICD_POSUN ; IR=1100110 1 instr CD, vynulujeme CF, } ;DALE PROVEDEME POZADOVANY POSUN, POVOLIME POUZITI FLAG A JEHO ZAPSANI ;------------------------------------------------------------------------------- ;INSTRUKCE CCh ICC_POSUN: {ECL ECW , 1 , 14 , ICC_POSUN ;L--, W = shiftRight(W) - [#OP:1], TEST LZERO - [#SC:14] ECL ECF ECW CFS1 , 1 , 0 , ICC_PO_CF ;POSUN,L--,NASTAVENI CF } ;------------------------------------------------------------------------------- ;INSTRUKCE CDh ICD_POSUN: {ECL ECF ECW , 15 , 14 , ICD_POSUN ;L--, W += W - [#OP:1], TEST LZERO - [#SC:14] OEW ECOUTWR , 0 , 0 , ICC_ULOZ ;POSUN HOTOV, ULOZIME HODNOTU DO REGISTRU DOUT } ;------------------------------------------------------------------------------- ICC_PO_CF: OEW ECOUTWR , 0 , 0 , ICC_ULOZ ;POSUN HOTOV, ULOZIME HODNOTU DO REGISTRU DOUT ;NYNI ULOZIME SPODNI CAST DOUT DO PAMETI NA ADRESE Z D: M[na adrese D]=DOUT_low ICC_ULOZ: OED OEAB OEWR , 0 , 0 , ;D->bus->AB ICC_SPODNI: { OED OEAB OEWR MWR, 0 , 10 , ICC_SPODNI ;POVOLIME ZAPIS DO PAMETI, CEKAME NA PAMET - TEST WAIT OED OEAB OEWR , 0 , 0 , ;PRESAH } ;INKREMENTUJEME D: D++ (POSUN NA VYSSI ADRESU) ECD , 0, 0 , ;D++ ;NYNI ULOZIME HORNI CAST: M[na adrese D]=DOUT_hight OED OEAB LH OEWR , 0 , 0 , ;D->bus->AB ICC_HORNI: { OED OEAB LH OEWR MWR, 0 , 10 , ICC_HORNI ;POVOLIME ZAPIS DO PAMETI, CEKAME NA PAMET - TEST WAIT OED OEAB LH OEWR , 0 , 0 , ;PRESAH } ;INKREMENTUJEME D: D++ (ZVYSIME PRO DALSI INSTRUKCE) ECD , 0, 0 , INTCHECK ;D++, UKONCIME INSTRUNKCI (skok na dekodovani dalsi instrukce)