;******************************************************************************************************* ; P A M E T M I K R O I N S T R U K C I mikroprocesoru D O P - v2 ;--------------------------------------------------------------------------- ; ; datum posledni upravy : 7. 11. 2001 ; autor : MPR (Michal Prazan), MBE (Milos Becvar) ; cislo revize : 2.1 ; ;******************************************************************************************************* ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ; N A S T A V E N I P O Z A P N U T I , T E S T V N E J S I H O P R E R U S E N I ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- START: { ,0,0, INTCHECK ; Nastaveni po zapnuti/resetu (prazdna operace) } INTCHECK: { ,0,25, IFT ; Test IF } IFT: { ,0,0, FETCH ; IF=0 => FETCH ,0,24, HW_INT_TEST ; IF=1 => Test signalu INT } HW_INT_TEST: { ,0,0, FETCH ; INT=0 => FETCH INTA ECIR, 0, 24, INTVECT ; INT=1 => INTA, cekani na prerusovaci vektor } INTVECT: { ,0,0, SW_INT ; INT=0 => Prerusovaci vektor nacten, jdi na obsluhu INTA ECIR,0, 24, INTVECT ; INT=1 => INTA, cekani na prerusovaci vektor } ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ; N A C T E N I N O V E I N S T R U K C E ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- FETCH: OEPC OEAB , 0 , 0 , ; OEPC MRD OEAB , 0 , 0 , ; FMWAIT: { OEPC MRD ECIR OEAB , 0 , 10 , FMWAIT ; Cekani na pamet ECPC , 0 , 7 , DEC_2 ; Puvodni navesti DECODE, test IR7 IR6 } ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ; D E K O D O V A N I I N S T R U K C E ;------------------------------------------------------------------------------------------------------- ; odskoky - navesti DEC_(uroven_hierarchie)_(1.podminka_bitu)_(2.podminka_bitu)_..... ;------------------------------------------------------------------------------------------------------- DEC_2: { , 0 , 4 , DEC_3_00 ; dekodovani IR1 IR0 , 0 , 4 , DEC_3_01 ; dekodovani IR1 IR0 , 0 , 6 , DEC_3_10 ; dekodovani IR5 IR4 , 0 , 1 , JP_IT ; dekodovani IR3 IR2 IR1, instrukce JP nebo IT } ;------------------------------------------------ DEC_3_00: { , 0 , 6 , DEC_3_00_00 ; dekodovani IR5 IR4 , 0 , 5 , DEC_3_00_XX ; dekodovani IR3 IR2 , 0 , 5 , DEC_3_00_XX ; dekodovani IR3 IR2 , 0 , 5 , DEC_3_00_XX ; dekodovani IR3 IR2 } DEC_3_00_00: { , 0 , 0 , SHR ;moje ;INTCHECK ; nedefinovana instrukce , 0 , 5 , LD2 ; dekodovani IR3 IR2, instrukce LD2 , 0 , 5 , OP2_010 ; dekodovani IR3 IR2, instrukce OP2 - operace 010 , 0 , 5 , OP2_011 ; dekodovani IR3 IR2, instrukce OP2 - operace 011 } DEC_3_00_XX: { OEPC OEAB , 0 , 0 , OPLD1_PC ; instrukce LD1 - zdroj PC OESP OEAB , 0 , 0 , OPLD1_SP ; instrukce LD1 - zdroj SP OES OEAB , 0 , 0 , OPLD1_S ; instrukce LD1 - zdroj S OED OEAB , 0 , 0 , OPLD1_D ; instrukce LD1 - zdroj D } ;------------------------------------------------ DEC_3_01: { , 0 , 6 , DEC_3_01_00 ; dekodovani IR5 IR4 , 0 , 5 , DEC_3_01_XX ; dekodovani IR3 IR2 , 0 , 5 , DEC_3_01_XX ; dekodovani IR3 IR2 , 0 , 5 , DEC_3_01_XX ; dekodovani IR3 IR2 } DEC_3_01_00: { , 0 , 5 , OP2_100 ; dekodovani IR3 IR2, instrukce OP2 - operace 100 , 0 , 5 , OP2_101 ; dekodovani IR3 IR2, instrukce OP2 - operace 101 , 0 , 5 , OP2_110 ; dekodovani IR3 IR2, instrukce OP2 - operace 110 , 0 , 5 , OP2_111 ; dekodovani IR3 IR2, instrukce OP2 - operace 111 } DEC_3_01_XX: { OEPC OEAB , 0 , 0 , OPLD1_PC ; instrukce LD1 - zdroj PC OESP OEAB , 0 , 0 , OPLD1_SP ; instrukce LD1 - zdroj SP OES OEAB , 0 , 0 , OPLD1_S ; instrukce LD1 - zdroj S OED OEAB , 0 , 0 , OPLD1_D ; instrukce LD1 - zdroj D } ;------------------------------------------------ DEC_3_10: { , 0 , 5 , DEC_3_10_00 ; dekodovani IR3 IR2 , 0 , 4 , P1 ; dekodovani IR1 IR0 , 0 , 5 , P2 ; dekodovani IR3 IR2 , 0 , 5 , P3 ; dekodovani IR3 IR2 } ; jedna se o instrukci ST DEC_3_10_00: { OEW ECOUTWR , 0 , 4 , cil ; W->DO, dekodovani IR1 IR0 OEPSW ECOUTWR , 0 , 4 , cil ; PSW->DO, dekodovani IR1 IR0 OES ECOUTWR , 0 , 4 , cil ; S->DO, dekodovani IR1 IR0 OED ECOUTWR , 0 , 4 , cil ; D->DO, dekodovani IR1 IR0 } ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ; R E A L I Z A C E J E D N O T L I V Y C H I N S T R U K C I + posledni dekodovani ;------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------- ;======================================================================================================= ; KOMPLETNI REALIZACE INSTRUKCE ST ;---------------------------------- ; posledni dekodovani - volba cilove adresy + typ cile cil: OED OEAB , 0 , 0 , DW ; odskok na dw (cil (word) na adresu v D) OED OEAB , 0 , 0 , DB ; odskok na db (cil (byte) na adresu v D) ECSP , 0 , 0 , SPW ; odskok na spw (cil (word) na adresu v SP) ECSP , 0 , 0 , SPB ; odskok na spb (cil (byte) na adresu v SP) ; vlastni realizace instrukce ST ;---------------------------------- DW: { OED OEAB MWR OEWR , 0 , 10 , DW ; - realizace instrukce ST (cil (word) na adresu v D) ECD , 0 , 0 , ; } OED OEAB , 0 , 0 , ; DW2: { OED OEAB MWR OEWR LH , 0 , 10 , DW2; druha slabika ECD , 0 , 0 , INTCHECK ; } DB: { OED OEAB MWR OEWR , 0 , 10 , DB ; - realizace instrukce ST (cil (byte) na adresu v D) ECD , 0 , 0 , INTCHECK ; } SPW: OESP OEAB , 0 , 0 , ; - realizace instrukce ST (cil (word) na adresu v SP) SPW1: { OESP OEAB MWR OEWR , 0 , 10 , SPW1; ECSP , 0 , 0 , ; } OESP OEAB , 0 , 0 , ; SPW2: { OESP OEAB MWR OEWR LH, 0 , 10 , SPW2; druha slabika , 0 , 0 , INTCHECK; } SPB: OESP OEAB , 0 , 0 , ; - realizace instrukce ST (cil (byte) na adresu v SP) SPB1: { OESP OEAB MWR OEWR , 0 , 10 , SPB1; , 0 , 0 , INTCHECK; } SHR: { OEW ECW, 6, 0, ; ECF CFS1 OEPSW,0,0,; OED ECW,2,0,; OEL ECW,10,0,; EMULATOR BUG 16:8 OF BUS IS NOT ZERO OEL ECW,10,0, ; D+L+L,; OEW PED,0,0,SHR_KONEC; } SHR_KONEC: { UDD ECD,0,0,DO_SHR; ,0,0,INTCHECK; } DO_SHR: { OED OEAB PEU, 0 , 0 , ; D->BUS & U OED OEAB MRD , 0 , 0 ,SHR_MEM_WAIT1; } SHR_MEM_WAIT1: { OED OEAB MRD ECINH , 0 , 10 , SHR_MEM_WAIT1; UDD ECD,0,0, ; ;D-1 OED OEAB, 0 , 0 , ; D->BUS OED OEAB MRD , 0 , 0 ,SHR_MEM_WAIT2; } SHR_MEM_WAIT2: { OED OEAB MRD ECINL , 0 , 10 , SHR_MEM_WAIT2; OEINLH ECW,2,0,; Z datain ->W OEU ECD CFS1 ECF ECW, 1 , 0 , ; ROTACE vpravo & U->D OEW ECOUTWR,0,0,SHR_WRITE1; } SHR_WRITE1: { OED OEAB MWR LH OEWR , 0 , 10 , SHR_WRITE1 ; zapis ECL UDD ECD,0,0,; D- OEW ECOUTWR,0,0,SHR_WRITE2; Nutny ? } SHR_WRITE2: { OED OEAB MWR OEWR , 0 , 10 , SHR_WRITE2 ; zapis ,0,14,SHR_KONEC; L zero ? } ;======================================================================================================= ; vysledky predchoziho dekodovani na P1, realizace instrukci NOT, AAF a JSW ;--------------------------------------------------------------------------- P1: { , 0 , 5 , P1_00 ; dekodovani IR3 IR2 OEW ECF ECW , 3 , 0 , INTCHECK ; not(W)->W UCF , 0 , 0 , AAF ; odskok na AAF - realizace instrukce AAf OEPC ECOUTWR ECSP, 0 , 0 , JSW ; odskok na JSW - realizace instrukce JSW } ;------------------------------------------------ ; REALIZACE INSTRUKCE AAF ;---------------------------------- AAF: OEAF ECW ECF , 10 , 0 , INTCHECK ; ;------------------------------------------------ ; REALIZACE INSTRUKCE JSW ;---------------------------------- JSW: OEW PEPC , 0 , 0 , SPW ; ;------------------------------------------------ ;-------------------------------------------------------------------------------- ; posledni dekodovani z vychoziho navesti P1, realizace instrukci RRC, SCF a RLC ;-------------------------------------------------------------------------------- P1_00: { ECW ECF, 1 , 0 , INTCHECK ; instrukce RRC ECF CFS0 , 0 , 0 , INTCHECK ; instrukce SCF UCF , 0 , 0 , RLC ; instrukce RLC (nejdrive je treba nastavit UCF !) , 0 , 0 , INTCHECK ; nedefinovana instrukce } RLC: ECF CFS1 ECW , 15 , 0 , INTCHECK ; ;======================================================================================================= ; vysledky predchoziho dekodovani na P2, realizace instrukci JSR, LD3, LD4 a LD5 ;-------------------------------------------------------------------------------- P2: { OEPC OEAB , 0 , 0 , JSR ; realizace instrukce JSR OEW OEAB , 0 , 0 , LD5 ; realizace instrukci LDx OEPC OEAB , 0 , 0 , LD3 ; realizace instrukce LD3 , 0 , 4 , P2_11 ; dekodovani IR1 IR0 } P2_11: { UCF , 0 , 0 , FETCH ; instrukce UCF , nacteni dalsi instrukce (neni test preruseni !) , 0 , 0 , INTCHECK ; nedef. , 0 , 0 , INTCHECK ; nedef. OEPC OEAB , 0 , 0 , LD3 ; realizace instrukce LD4 } ; zde NENI chyba !!! opravdu navesti LD3 ;------------------------------------------------ ; REALIZACE INSTRUKCE JSR ;---------------------------------- JSR: OEPC OEAB MRD, 0 , 0 , ; JSRW1: { OEPC OEAB MRD ECINL, 0 , 10 , JSRW1 ; ECPC , 0 , 0 , ; } OEPC OEAB ECSP , 0 , 0 , ; OEPC OEAB MRD , 0 , 0 , ; JSRW2: { OEPC OEAB MRD ECINH, 0 , 10 , JSRW2; ECPC , 0 , 0 , ; } OEPC ECOUTWR , 0 , 0 , ; OEINLH PEPC , 0 , 0 , SPW ; RETADR = SPW ;------------------------------------------------ ; REALIZACE INSTRUKCE LD5 ;---------------------------------- LD5: OEW OEAB MRD , 0 , 0 , ; LD5W1: { OEW OEAB MRD ECINL , 0 , 10 , LD5W1; ECW, 8 , 4 , LD5_DC ; dekodovani IR1 IR0 } LD5_DC: { , 0 , 0 , INTCHECK ; nedef. OEINSE ECW , 2 , 0 , INTCHECK ; OEW OEAB , 0 , 0 , DALE00 ; OEINZE ECW , 2 , 0 , INTCHECK ; } DALE00: OEW OEAB MRD , 0 , 0 , ; LD5W2: { OEW OEAB MRD ECINH , 0 , 10 , LD5W2; OEINLH ECW , 2 , 0 , INTCHECK ; } ;------------------------------------------------ ; REALIZACE INSTRUKCE LD3 (LD4) ;---------------------------------- LD3: OEPC OEAB MRD , 0 , 0 , ; LD3W1: { OEPC OEAB MRD ECINL , 0 , 10 , LD3W1; OESP ECW ECPC , 2 , 0 , ; } OEINZE ECW CI0, 11 , 5 , LD3DC; LD3DC: { , 0 , 0 , INTCHECK ; nedef. , 0 , 0 , INTCHECK ; nedef. , 0 , 6 , PODM ; dekodovani IR5 IR4 , 0 , 0 , INTCHECK ; konec instrukce LD4 } PODM: { , 0 , 0 , INTCHECK ; nedef. , 0 , 0 , INTCHECK ; nedef. OEW PES , 0 , 0 , INTCHECK ; OEW PED , 0 , 0 , INTCHECK ; } ;======================================================================================================= ; vysledky predchoziho dekodovani na P3, realizace instrukci SWW, LD6 a RET ;--------------------------------------------------------------------------- P3: { , 0 , 4 , P3_00 ; dekodovani IR1 IR0 OESP OEAB , 0 , 0 , LD6SP ; realizace instrukce LD6 - zdroj SP OEPC OEAB , 0 , 0 , LD3 ; realizace instrukce LD3 OESP OEAB , 0 , 0 , RET ; instrukce RET/RETI } P3_00: { SWW , 0 , 0 , FETCH ; realizace instrukce SWW, (neni test preruseni !) , 0 , 0 , INTCHECK ; nedef. OEPC OEAB , 0 , 0 , LD6PCw ; realizace instrukce LD6 - zdroj PC (word) OEPC OEAB , 0 , 0 , LD6PCb ; realizace instrukce LD6 - zdroj PC (byte) } ;------------------------------------------------ ; REALIZACE INSTRUKCE LD6 ;---------------------------------- ; zdroj SP LD6SP: OESP OEAB MRD , 0 , 0 , ; LD6SPW1: { OESP OEAB MRD ECINH ECINL, 0 , 10 , LD6SPW1; dekodovani IR0 UDSP ECSP , 0 , 4 , testw ; dekodovani IR1 IR0 } testw: { , 0 , 0 , INTCHECK ; nedef. , 0 , 0 , INTCHECK ; nedef. OESP OEAB , 0 , 0 , LD6SPw ; (dale word) OEINZE PEL , 0 , 0 , INTCHECK ; (byte) } LD6SPw: OESP OEAB MRD , 0 , 0 , ; LD6SPW2: { OESP OEAB MRD ECINL , 0 , 10 , LD6SPW2; OEINLH PEF PEL UDSP ECSP , 0 , 0 , INTCHECK ; } ; zdroj PC (byte) LD6PCb: OEPC OEAB MRD , 0 , 0 , ; LD6PCB1: { OEPC OEAB MRD ECINL , 0 , 10 , LD6PCB1; OEINZE PEL ECPC, 0 , 0 , INTCHECK ; } ; zdroj PC (word) LD6PCw: OEPC OEAB MRD , 0 , 0 , ; LD6PCW1: { OEPC OEAB MRD ECINL , 0 , 10 , LD6PCW1; ECPC , 0 , 0 , ; } OEPC OEAB , 0 , 0 , ; OEPC OEAB MRD , 0 , 0 , ; LD6PCW2: { OEPC OEAB MRD ECINH , 0 , 10 , LD6PCW2; ECPC OEINLH PEF PEL , 0 , 0 , INTCHECK ; } ;------------------------------------------------ ; REALIZACE INSTRUKCE RET ;---------------------------------- RET: OESP OEAB MRD , 0 , 0 , ; RETW1: { OESP OEAB MRD ECINH , 0 , 10 , RETW1; UDSP ECSP , 0 , 0 , ; } OESP OEAB , 0 , 0 , ; OESP OEAB MRD , 0 , 0 , ; RETW2: { OESP OEAB MRD ECINL , 0 , 10 , RETW2; UDSP ECSP OEINLH PEPC , 0 , 4 , P3_11; dekodovani IR1 IR0 (RETI/RET) } P3_11: { , 0 , 0 , INTCHECK ; instrukce RET OESP OEAB , 0 , 0 , RETI ; instrukce RETI , 0 , 0 , INTCHECK ; instrukce RET OESP OEAB , 0 , 0 , RETI ; instrukce RETI } ;------------------------------------------------ ; REALIZACE INSTRUKCE RETI ;---------------------------------- RETI: OESP OEAB MRD , 0 , 0 , ; RETIW1: { OESP OEAB MRD ECINH , 0 , 10 , RETIW1; UDSP ECSP , 0 , 0 , ; } OESP OEAB , 0 , 0 , ; OESP OEAB MRD , 0 , 0 , ; RETIW2: { OESP OEAB MRD ECINL , 0 , 10 , RETIW2; UDSP ECSP OEINLH PEF PEL , 0 , 0 , INTCHECK; DI -> PSW } ;======================================================================================================= ; KOMPLETNI REALIZACE INSTRUKCE LD1 a OP1 ;----------------------------------------- ;zdroj PC ;----------------------------------------------------------------------------------- OPLD1_PC: OEPC OEAB MRD , 0 , 0 , ; OPLD1_PCW1: { OEPC OEAB MRD ECINL , 0 , 10, OPLD1_PCW1; ECPC , 0 , 4 , OPLD1_PC_DE ; dekodovani IR1 IR0 } OPLD1_PC_DE: { , 0 , 0 , INTCHECK ; nedef. , 0 , 3 , OPLD1_s ; dekodovani IR6 IR5 IR4 - znamenkove rozsireni OEPC OEAB , 0 , 0 , OPLD1_PC_w ; dekodovani IR6 IR5 IR4 , 0 , 3 , OPLD1_b ; dekodovani IR6 IR5 IR4 - nulove rozsireni } OPLD1_PC_w: OEPC OEAB MRD , 0 , 0 , ; OPLD1_PCW2: { OEPC OEAB MRD ECINH , 0 , 10 , OPLD1_PCW2 ; ECPC , 0 , 3 , OPLD1_w ; dekodovani IR6 IR5 IR4 } ;zdroj SP ;----------------------------------------------------------------------------------- OPLD1_SP: OESP OEAB MRD , 0 , 0 , ; OPLD1_SPW1: { OESP OEAB MRD ECINL ECINH , 0 , 10 , OPLD1_SPW1 ; UDSP ECSP , 0 , 4 , ; dekodovani IR1 IR0 } OPLD1_SPD: { , 0 , 0 , INTCHECK ; nedef. , 0 , 3 , OPLD1_s ; dekodovani IR6 IR5 IR4 - znamenkove rozsireni OESP OEAB , 0 , 0 , OPLD1_SP_w ; dekodovani IR6 IR5 IR4 , 0 , 3 , OPLD1_b ; dekodovani IR6 IR5 IR4 - nulove rozsireni } OPLD1_SP_w: OESP OEAB MRD , 0 , 0 , ; OPLD1_SPW2: { OESP OEAB MRD ECINL , 0 , 10 , OPLD1_SPW2 ; UDSP ECSP , 0 , 3 , OPLD1_w; dekodovani IR6 IR5 IR4 } ;zdroj S ;----------------------------------------------------------------------------------- OPLD1_S: OES OEAB MRD , 0 , 0 , ; OPLD1_SW1: { OES OEAB MRD ECINL , 0 , 10 , OPLD1_SW1; ECS , 0 , 4 ,; dekodovani IR1 IR0 } OPLD1_SD: { , 0 , 0 , INTCHECK ; nedef. , 0 , 3 , OPLD1_s ; dekodovani IR6 IR5 IR4 - znamenkove rozsireni OES OEAB , 0 , 0 , OPLD1_S_w ; dekodovani IR6 IR5 IR4 , 0 , 3 , OPLD1_b ; dekodovani IR6 IR5 IR4 - nulove rozsireni } OPLD1_S_w: OES OEAB MRD , 0 , 0 , ; OPLD1_SW2: { OES OEAB MRD ECINH , 0 , 10 , OPLD1_SW2 ; ECS , 0 , 3 , OPLD1_w; dekodovani IR6 IR5 IR4 } ;zdroj D ;----------------------------------------------------------------------------------- OPLD1_D: OED OEAB MRD , 0 , 0 , ; OPLD1_DW1: { OED OEAB MRD ECINL , 0 , 10 , OPLD1_DW1 ; , 0 , 4 , OPLD1_DC ; dekodovani IR1 IR0 } OPLD1_DC: { , 0 , 0 , INTCHECK ; nedef. , 0 , 3 , OPLD1_s ; dekodovani IR6 IR5 IR4 - znamenkove rozsireni ECD , 0 , 0 , OPLD1_D_w ; dekodovani IR6 IR5 IR4 , 0 , 3 , OPLD1_b ; dekodovani IR6 IR5 IR4 - nulove rozsireni } OPLD1_D_w: OED OEAB , 0 , 0 , ; OED OEAB MRD , 0 , 0 , ; OPLD1_DW2: { OED OEAB MRD ECINH , 0 , 10 , OPLD1_DW2 ; UDD ECD , 0 , 3 , OPLD1_w; dekodovani IR6 IR5 IR4 } ;----------------------------------------------------------------------------------- ; (short, sign) znamenkove rozsireni OPLD1_s: { OEINSE PES , 0 , 0 , INTCHECK ; => S OEINSE PED , 0 , 0 , INTCHECK ; => D OEINSE ECF ECW , 10 , 0 , INTCHECK ; operace + OEINSE ECF ECW CI0, 11 , 0 , INTCHECK ; operace - OEINSE ECF ECW , 4 , 0 , INTCHECK ; operace AND OEINSE ECF ECW , 5 , 0 , INTCHECK ; operace OR OEINSE ECF ECW , 6 , 0 , INTCHECK ; operace XOR OEINSE ECW , 2 , 0 , INTCHECK ; => W (not setting Flags !) } ; word OPLD1_w: { OEINLH PES , 0 , 0 , INTCHECK ; => S OEINLH PED , 0 , 0 , INTCHECK ; => D OEINLH ECF ECW , 10 , 0 , INTCHECK ; operace + OEINLH ECF ECW CI0, 11 , 0 , INTCHECK ; operace - OEINLH ECF ECW , 4 , 0 , INTCHECK ; operace AND OEINLH ECF ECW , 5 , 0 , INTCHECK ; operace OR OEINLH ECF ECW , 6 , 0 , INTCHECK ; operace XOR OEINLH ECW , 2 , 0 , INTCHECK ; => W (not setting Flags !) } ; (byte) nulove rozsireni OPLD1_b: { OEINZE PES , 0 , 0 , INTCHECK ; => S OEINZE PED , 0 , 0 , INTCHECK ; => D OEINZE ECF ECW , 10 , 0 , INTCHECK ; operace + OEINZE ECF ECW CI0, 11 , 0 , INTCHECK ; operace - OEINZE ECF ECW , 4 , 0 , INTCHECK ; operace AND OEINZE ECF ECW , 5 , 0 , INTCHECK ; operace OR OEINZE ECF ECW , 6 , 0 , INTCHECK ; operace XOR OEINZE ECW , 2 , 0 , INTCHECK ; => W (not setting Flags !) } ;======================================================================================================= ; KOMPLETNI REALIZACE INSTRUKCE LD2 ;----------------------------------- LD2: { OEW PEPC , 0 , 0 , INTCHECK ; W => PC OEW PESP , 0 , 0 , INTCHECK ; W => SP OEW PES , 0 , 0 , INTCHECK ; W => S OEW PED , 0 , 0 , INTCHECK ; W => D } ;======================================================================================================= ; KOMPLETNI REALIZACE INSTRUKCE OP2 ;----------------------------------- ; operace + OP2_010: { OEW ECW ECF , 10 , 0 , INTCHECK ; OESP ECW ECF , 10 , 0 , INTCHECK ; OES ECW ECF , 10 , 0 , INTCHECK ; OED ECW ECF , 10 , 0 , INTCHECK ; } ; operace - OP2_011: { OEW ECW ECF CI0 , 11 , 0 , INTCHECK ; OESP ECW ECF CI0 , 11 , 0 , INTCHECK ; OES ECW ECF CI0 , 11 , 0 , INTCHECK ; OED ECW ECF CI0 , 11 , 0 , INTCHECK ; } ; operace AND OP2_100: { OEW ECW ECF, 4 , 0 , INTCHECK ; OESP ECW ECF, 4 , 0 , INTCHECK ; OES ECW ECF, 4 , 0 , INTCHECK ; OED ECW ECF, 4 , 0 , INTCHECK ; } ; operace OR OP2_101: { OEW ECW ECF , 5 , 0 , INTCHECK ; OESP ECW ECF, 5 , 0 , INTCHECK ; OES ECW ECF, 5 , 0 , INTCHECK ; OED ECW ECF, 5 , 0 , INTCHECK ; } ; operace XOR OP2_110: { OEW ECW ECF , 6 , 0 , INTCHECK ; OESP ECW ECF, 6 , 0 , INTCHECK ; OES ECW ECF, 6 , 0 , INTCHECK ; OED ECW ECF, 6 , 0 , INTCHECK ; } ; operace LOAD (priznaky se nenastavuji !) OP2_111: { , 0 , 0 , INTCHECK ; W->W = instrukce NOP OESP ECW , 2 , 0 , INTCHECK ; OES ECW , 2 , 0 , INTCHECK ; OED ECW , 2 , 0 , INTCHECK ; } ;======================================================================================================= ; KOMPLETNI REALIZACE INSTRUKCE JP a IT ;--------------------------------------- JP_IT: { , 0 , 23 , test_CF ; dekodovani s CF , 0 , 22 , test_ZF ; dekodovani se ZF , 0 , 21 , test_SF ; dekodovani se SF , 0 , 20 , test_OF ; dekodovani s OF ECL , 0 , 0 , LZERO_POM ; L musi byt napred dekrementovan (DOP-v2) , 0 , 0 , INTCHECK ; rezervovano , 0 , 0 , INTCHECK ; rezervovano , 0 , 6 , splneno ; dekodovani IR5 IR4, tato podminka je vzdy splnena } test_CF: { , 0 , 6 , splneno ; dekodovani IR5 IR4, test splnen , 0 , 6 , nesplneno ; dekodovani IR5 IR4, test nesplnen } test_ZF: { , 0 , 6 , splneno ; dekodovani IR5 IR4, test splnen , 0 , 6 , nesplneno ; dekodovani IR5 IR4, test nesplnen } test_SF: { , 0 , 6 , splneno ; dekodovani IR5 IR4, test splnen , 0 , 6 , nesplneno ; dekodovani IR5 IR4, test nesplnen } test_OF: { , 0 , 6 , splneno ; dekodovani IR5 IR4, test splnen , 0 , 6 , nesplneno ; dekodovani IR5 IR4, test nesplnen } LZERO_POM: ,0, 19, test_LZERO ; test LZERO test_LZERO: { , 0 , 6 , splneno ; dekodovani IR5 IR4, test splnen , 0 , 6 , nesplneno ; dekodovani IR5 IR4, test nesplnen } nesplneno: { , 0 , 0 , INTCHECK ; nedef. ECPC , 0 , 0 , nesplneno_01 ; JP nesplneno, posuv za adresu skoku , 0 , 0 , INTCHECK ; nedef. , 0 , 0 , INTCHECK ; zachyceni nove instrukce } nesplneno_01: ECPC , 0 , 0 , INTCHECK ; posledni inkrementace PC splneno: { , 0 , 0 , INTCHECK ; nedef. OEPC OEAB , 0 , 0 , JP ; odskok na JP , 0 , 0 , INTCHECK ; nedef. , 0 , 0 , SW_INT; odskok na IT } ;--------------------------------------- ; VLASTNI VYKONNA CAST INSTRUKCE JP ;--------------------------------------- JP: OEPC OEAB MRD , 0 , 0 , ; JPW1: { OEPC OEAB MRD ECINL , 0 , 10 , JPW1; ECPC , 0 , 0 ,; } OEPC OEAB , 0 , 0 , ; OEPC OEAB MRD , 0 , 0 , ; JPW2: { OEPC OEAB MRD ECINH , 0 , 10 , JPW2 ; OEINLH PEPC , 0 , 0 , INTCHECK ; } ;--------------------------------------- ; VLASTNI VYKONNA CAST INSTRUKCE IT ; TEZ OBSLUHA HW PRERUSENI (DOP-v2) ;--------------------------------------- SW_INT: OEPSW ECOUTWR ECSP , 0 , 0 , ; OEW PET ECW, 0 , 0 , ; docasna uschova W, nulovani W OESP OEAB, 0 , 0 , ; SW_INTW1: { OESP OEAB OEWR MWR , 0 , 10 , SW_INTW1 ; ECSP OEW PEF, 0 , 0 , ; inkrementace SP, nulovani priznaku } OESP OEAB, 0 , 0 , ; SW_INTW2: { OESP OEAB LH OEWR MWR , 0 , 10 , SW_INTW2 ; OEPC ECOUTWR ECSP, 0 , 0 , ; } OET ECW , 2 , 0 , ; restaurace W OEIT PEPC , 0 , 0 , SPW ; skok na zapis slova podle SP (drive RETADR) ;=======================================================================================================