#
# Mc.txt - microcode for i8051 project
# (C) C.c 2011
# spbsu ifmo, spb, russia
#

# We starts at 0x000:

@Reset:
Romm++ # Just inc the Romm - Romm=0 is sended to all blocks, if command is skipped // nonfinal
BusB->Acc;BusB->B;BusB->SP;BusB->Psw;BusB->PCL;BusC->PCH;BusB->DPL;BusB->DPH;Romm++ # cleaning registers and PC

@IF: # Instruction fetch
BusB16=Code;PC++;SetInstruction # IR=Code[PC++]; Romm=IR2Romm[IR];


# ----- JMP -----

@$02: # ljmp #immediate16
BusB16=Code;PC++;Wrk1Src=BusB;SetWrk1;Romm++ # Wrk1=Code[PC++];
BusB16=Code;PC++;Wrk2Src=BusB;SetWrk2;Romm++ # Wrk2=Code[PC++];
BusB8=Wrk2;BusC8=Wrk1;BusC->PCH;BusB->PCL;Goto;Romm=@IF # PCH=Wrk1; PCL=Wrk2; goto @IF;


# ----- DA -----

@$D4: # da a
BusB8=Acc;BusC8=CR;BusB->RA;BusC->RB;Romm++ # RA=Acc; RB=CR();
AluOp=Add;Alu->BusB;BusB->Acc;Romm++ # Acc=RA+RsB;
AluOp=Add;BusC8=CRPsw;Wrk1Src=BusC;SetWrk1;Romm++ # Wrk1=CRPsw;
BusB8=Wrk1;BusB->Psw;Goto;Romm=@IF # Psw=Wrk1; goto @IF;


# ----- MOV -----

@$74: # mov a, #immediate
BusB16=Code;PC++;BusB->Acc;Goto;Romm=@IF # Acc=Code[PC++]; goto @IF;

@$76:
@$77: # mov @Ri, #immediate
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;BusA=Bank+IR[0];BusB8=Data[BusA];Wrk2Src=BusB;SetWrk2;Romm++ # Wrk1=Code[PC++]; Wrk2=Data[Ri];
BusA=Wrk2;BusB8=Wrk1;BusB->Data[BusA];Goto;Romm=@IF # Data[Wrk2]=Wrk1; goto @IF;

@$F6:
@$F7: # mov @Ri, Acc
BusA=Bank+IR[0];BusB8=Data[BusA];Wrk2Src=BusB;SetWrk2;Romm++ # Wrk2=Data[Ri];
BusA=Wrk2;BusB8=Acc;BusB->Data[BusA];Goto;Romm=@IF # Data[Wrk2]=Acc; goto @IF;

@$75: # mov direct, #immediate
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++ # Wrk1=Code[PC++];
BusC16=Code;PC++;Wrk2Src=BusC;SetWrk2;Romm++ # Wrk2=Code[PC++];
BusA=Wrk1;BusB8=Wrk2;BusB->Data[BusA];Goto;Romm=@IF # Data[Wrk1]=Wrk2; goto @IF;

@$85: # mov dest_direct, src_direct
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++ # Wrk1=Code[PC++];
BusA=Wrk1;BusB8=Data[BusA];Wrk2Src=BusB;SetWrk2;Romm++ # Wrk2=Data[Wrk1];
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++ # Wrk1=Code[PC++];
BusA=Wrk1;BusB8=Wrk2;BusB->Data[BusA];Goto;Romm=@IF # Data[Wrk1]=Wrk2; goto @IF;

@$78:
@$79:
@$7a:
@$7b:
@$7c:
@$7d:
@$7e:
@$7f: # mov Rn, #immediate
BusB16=Code;PC++;BusA=Bank+IR[2..0];BusB->Data[BusA];Goto;Romm=@IF; # Rn=Code[PC++]; goto @IF;

@$F8:
@$F9:
@$Fa:
@$Fb:
@$Fc:
@$Fd:
@$Fe:
@$Ff: # mov Rn, Acc
BusB8=Acc;BusA=Bank+IR[2..0];BusB->Data[BusA];Goto;Romm=@IF; # Rn=Acc; goto @IF;

@$A8:
@$A9:
@$Aa:
@$Ab:
@$Ac:
@$Ad:
@$Ae:
@$Af: # mov Rn, direct
BusB16=Code;PC++;Wrk1Src=BusB;SetWrk1;Romm++ # Wrk1=Code[PC++];
BusA=Wrk1;BusB8=Data[BusA];Wrk2Src=BusB;SetWrk2;Romm++ # Wrk2=Data[Wrk1];
BusB8=Wrk2;BusA=Bank+IR[2..0];BusB->Data[BusA];Goto;Romm=@IF # Rn=Wrk2; goto @IF;

# ----- ORL -----

@$44: # orl Acc, #immediate
BusB8=Acc;BusC16=Code;PC++;BusB->RA;BusC->RB;Romm++ # RA=Acc; RB=Code[PC++];
AluOp=OR;Alu->BusB;BusB->Acc;Goto;Romm=@IF # Acc = RA | RB; goto @IF;

@$48:
@$49:
@$4a:
@$4b:
@$4c:
@$4d:
@$4e:
@$4f: # orl Acc, Rn
BusA=Bank+IR[2..0];BusB8=Data[BusA];Wrk1Src=BusB;SetWrk1;Romm++ # Wrk1=Rn;
BusB8=Acc;BusC8=Wrk1;BusB->RA;BusC->RB;Romm++ # RA=Acc; RB=Wrk1;
AluOp=OR;Alu->BusB;BusB->Acc;Goto;Romm=@IF # Acc = RA | RB; goto @IF;

# ----- CJNE -----

@$B8: # Rn, #immediate, offset
BusC16=Code;PC++;BusA=Bank+IR[2..0];BusB8=Data[BusA];BusB->RA;BusC->RB;Romm++ # RA=Rn; RB=Code[PC++];
AluOp=subb;Alu->BusB;Wrk1Src=BusB;SetWrk1;Romm++ # Wrk1=RA-RB;
If=Wrk1Z;Goto;Romm=@IF # if (Wrk1==0) goto @IF;
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;BusB8=Psw;Wrk2Src=BusB;SetWrk2;Romm++ # Wrk1=Code[PC++]; Wrk2=Psw;
BusC8=Wrk1;BusB16=PCL;BusB->RA;BusC->RB;Romm++ # RA=Wrk1; RB=PCL;
AluOp=Add;Alu->BusB;BusB->PCL;Romm++ # PCL=RA+RB;
AluOp=Add;AluPsw->BusB;BusB->PSW;Romm++ # Psw=AluPsw;
If=Wrk1.7;Goto;Romm=@CJNE_Lower # if (Wrk1<0) goto @CJNE_Lower;
BusC16=PCH;BusB->RA;BusC->RB;Romm++ # RA=0; RB=PCH;
AluOp=Add;+Psw.cf;Alu->BusB;Wrk1Src=BusB;SetWrk1;Romm++ # Wrk1=RA+RB+c;
BusC8=Wrk1;BusC->PCH;Goto;Romm=@IF # PCH=Wrk1; goto @IF;
@CJNE_Lower:
BusC16=PCH;BusBB=0xff;BusB->RA;BusC->RB;Romm++ # RA=0xff; RB=PCH;
AluOp=Add;+Psw.cf;Alu->BusB;Wrk1Src=BusB;SetWrk1;Romm++ # Wrk1=RA+RB+c;
BusC8=Wrk1;BusC->PCH;Goto;Romm=@IF # PCH=Wrk1; goto @IF;


Соседние файлы в папке Debug
  • #
    09.05.201442.5 Кб6i8051-mc-compiler.pdb
  • #
    09.05.2014490 б5i8051-mc-compiler.vshost.exe.manifest
  • #
    09.05.20144.26 Кб5mc.txt
  • #
    09.05.201431 б5mc.txt.labelmap
  • #
    09.05.2014188 б6mc.txt.mcd
  • #
    09.05.2014490 б5mca.vshost.exe.manifest