URL
https://opencores.org/ocsvn/wb_z80/wb_z80/trunk
Subversion Repositories wb_z80
[/] [wb_z80/] [trunk/] [doc/] [work_flag.txt] - Rev 39
Compare with Previous | Blame | View Log
// update all flags from alu8 for logic operations pv <= parity else oflADCsA_A = 'h8F,// ADC A,A ; 8FADCsA_B = 'h88,// ADC A,B ; 88ADCsA_C = 'h89,// ADC A,C ; 89ADCsA_D = 'h8A,// ADC A,D ; 8AADCsA_E = 'h8B,// ADC A,E ; 8BADCsA_H = 'h8C,// ADC A,H ; 8CADCsA_L = 'h8D,// ADC A,L ; 8DADCsA_N = 'hCE,// ADC A,N ; CE XXADDsA_A = 'h87,// ADD A,A ; 87ADDsA_B = 'h80,// ADD A,B ; 80ADDsA_C = 'h81,// ADD A,C ; 81ADDsA_D = 'h82,// ADD A,D ; 82ADDsA_E = 'h83,// ADD A,E ; 83ADDsA_H = 'h84,// ADD A,H ; 84ADDsA_L = 'h85,// ADD A,L ; 85ADDsA_N = 'hC6,// ADD A,N ; C6 XXANDsA = 'hA7,// AND A ; A7ANDsB = 'hA0,// AND B ; A0ANDsC = 'hA1,// AND C ; A1ANDsD = 'hA2,// AND D ; A2ANDsE = 'hA3,// AND E ; A3ANDsH = 'hA4,// AND H ; A4ANDsL = 'hA5,// AND L ; A5ANDsN = 'hE6,// AND N ; E6 XXCPsA = 'hBF,// CP A ; BFCPsB = 'hB8,// CP B ; B8CPsC = 'hB9,// CP C ; B9CPsD = 'hBA,// CP D ; BACPsE = 'hBB,// CP E ; BBCPsH = 'hBC,// CP H ; BCCPsL = 'hBD,// CP L ; BDCPsN = 'hFE,// CP N ; FE XXORsA = 'hB7,// OR A ; B7ORsB = 'hB0,// OR B ; B0ORsC = 'hB1,// OR C ; B1ORsD = 'hB2,// OR D ; B2ORsE = 'hB3,// OR E ; B3ORsH = 'hB4,// OR H ; B4ORsL = 'hB5,// OR L ; B5ORsN = 'hF6,// OR N ; F6 XXSBCsA = 'h9F,// SBC A ; 9FSBCsA_N = 'hDE,// SBC A,N ; DE XXSBCsB = 'h98,// SBC B ; 98SBCsC = 'h99,// SBC C ; 99SBCsD = 'h9A,// SBC D ; 9ASBCsE = 'h9B,// SBC E ; 9BSBCsH = 'h9C,// SBC H ; 9CSBCsL = 'h9D,// SBC L ; 9DSUBsA = 'h97,// SUB A ; 97SUBsB = 'h90,// SUB B ; 90SUBsC = 'h91,// SUB C ; 91SUBsD = 'h92,// SUB D ; 92SUBsE = 'h93,// SUB E ; 93SUBsH = 'h94,// SUB H ; 94SUBsL = 'h95,// SUB L ; 95SUBsN = 'hD6,// SUB N ; D6 XXXORsA = 'hAF,// XOR A ; AFXORsB = 'hA8,// XOR B ; A8XORsC = 'hA9,// XOR C ; A9XORsD = 'hAA,// XOR D ; AAXORsE = 'hAB,// XOR E ; ABXORsH = 'hAC,// XOR H ; ACXORsL = 'hAD,// XOR L ; ADXORsN = 'hEE,// XOR N ; EE XX// same as above but no cf change oh my god why?DECsA = 'h3D,// DEC A ; 3DDECsB = 'h05,// DEC B ; 05DECsC = 'h0D,// DEC C ; 0DDECsD = 'h15,// DEC D ; 15DECsE = 'h1D,// DEC E ; 1DDECsH = 'h25,// DEC H ; 25DECsL = 'h2D,// DEC L ; 2DINCsA = 'h3C,// INC A ; 3CINCsB = 'h04,// INC B ; 04INCsC = 'h0C,// INC C ; 0CINCsD = 'h14,// INC D ; 14INCsE = 'h1C,// INC E ; 1CINCsH = 'h24,// INC H ; 24INCsL = 'h2C,// INC L ; 2C// update h n c (f5, f3) from alu16ADDsHL_BC = 'h09,// ADD HL,BC ; 09ADDsHL_DE = 'h19,// ADD HL,DE ; 19ADDsHL_HL = 'h29,// ADD HL,HL ; 29ADDsHL_SP = 'h39,// ADD HL,SP ; 39INCsBC = 'h03,// INC BC ; 03INCsDE = 'h13,// INC DE ; 13INCsHL = 'h23,// INC HL ; 23INCsSP = 'h33,// INC SP ; 33// update all flags from alu16ED_SBCsHL_REG = 6'b01__0010, // compair with {ir[7:6],ir[3:0]}ED_ADCsHL_REG = 6'b01__1010, // compair with {ir[7:6],ir[3:0]}// the shifts probably muck with all flags (some operations are// guarenteed not to change certain flags )// crap docs say sf and zf never change for these ops.RLA = 'h17,// RLA ; 17RLCA = 'h07,// RLCA ; 07RRA = 'h1F,// RRA ; 1FRRCA = 'h0F,// RRCA ; 0F// sf and zf do change for thesesCB_RLC = 5'b00_000, // these must be compaired with ir[7:3]CB_RRC = 5'b00_001, // these must be compaired with ir[7:3]CB_RL = 5'b00_010, // these must be compaired with ir[7:3]CB_RR = 5'b00_011, // these must be compaired with ir[7:3]CB_SLA = 5'b00_100, // these must be compaired with ir[7:3]CB_SRA = 5'b00_101, // these must be compaired with ir[7:3]CB_SLL = 5'b00_110, // these must be compaired with ir[7:3]CB_SRL = 5'b00_111, // these must be compaired with ir[7:3]// pretty nomal stuff hereCB_BIT = 2'b01, // these must be compaired with ir[7:6]// which alu? --ED_NEG = 5'b01___100, // compair with {ir[7:6],ir[2:0]} all A<= -A// rmw 8 typesINCs6HL7 = 'h34,// INC (HL) ; 34DECs6HL7 = 'h35,// DEC (HL) ; 35// ED Block Move messyness// hf and nf <= 0 pnf<= BC==0ED_LDI = 'hA0// LDI ; ED A0 (DE++) <= (HL++) , BC--ED_LDD = 'hA8// LDD ; ED A8 (DE--) <= (HL--) , BC--ED_LDIR = 'hB0// LDIR ; ED B0 (DE++) <= (HL++) , BC-- Repeat til BC==0ED_LDDR = 'hB8// LDDR ; ED B8 (DE--) <= (HL--) , BC-- Repeat til BC==0// only c not affected - nf<=1 ?ED_CPI = 'hA1// CPI ; ED A1 A - (HL++) , BC--ED_CPD = 'hA9// CPD ; ED A9 A - (HL--) , BC--ED_CPIR = 'hB1// CPIR ; ED B1 A - (HL++) , BC-- repeat if(|BED_CPDR = 'hB9// CPDR ; ED B9 A - (HL--) , BC-- repeat if(|B// all the ed i/o muck with all flags -- wonderful cf?// use the aluoutput for the b-1 computation.ED_INI = 'hA2// INI ; ED A2 (HL++) <- (Cio) , B--ED_IND = 'hAA// IND ; ED AA (HL--) <- (Cio) , B--ED_INIR = 'hB2// INIR ; ED B2 (HL++) <- (Cio) , B-- repeat if(|B)ED_INDR = 'hBA// INDR ; ED BA (HL--) <- (Cio) , B-- repeat if(|B)ED_OUTI = 'hA3// OUTI ; ED A3 (Cio) <-(HL++) , B--ED_OUTD = 'hAB// OUTD ; ED AB (Cio) <-(HL--) , B--ED_OTIR = 'hB3// OTIR ; ED B3 (Cio) <-(HL++) , B-- rpt if(|B)ED_OTDR = 'hBB// OTDR ; ED BB (Cio) <-(HL--) , B-- rpt if(|B)ED_INsREG_6C7 = 5'b01___000,// compair with {ir[7:6],ir[2:0]} really (BCio)ED_OUTs6C7_REG = 5'b01___001,// compair with {ir[7:6],ir[2:0]}// special problemsCCF = 'h3F,// CCF ; 3F // h<=c c<=1C N<=0 F3,F5?CPL = 'h2F,// CPL ; 2F // H<=1 N<=1 F3,F5?DAA = 'h27,// DAA ; 27 // H<=0???SCF = 'h37,// SCF ; 37ED_RRD = 'h67// RRD ; ED 67 nibble roates A HLED_RLD = 'h6F// RLD ; ED 6F nibble roates A HLED_LDsA_I = 'h57// LD A,I ; ED 57 move I to A// no changesCB_RES = 2'b10, // these must be compaired with ir[7:6]CB_SET = 2'b11, // these must be compaired with ir[7:6]DECsBC = 'h0B,// DEC BC ; 0BDECsDE = 'h1B,// DEC DE ; 1BDECsHL = 'h2B,// DEC HL ; 2BDECsSP = 'h3B,// DEC SP ; 3BDI = 'hF3,// DI ; F3EI = 'hFB,// EI ; FBEXX = 'hD9,// EXX ; D9EXsAF_AFp = 'h08,// EX AF,AF' ; 08EXsDE_HL = 'hEB,// EX DE,HL ; EBHALT = 'h76,// HALT ; 76LDsA_A = 'h7F,// LD A,A ; 7FLDsA_B = 'h78,// LD A,B ; 78LDsA_C = 'h79,// LD A,C ; 79LDsA_D = 'h7A,// LD A,D ; 7ALDsA_E = 'h7B,// LD A,E ; 7BLDsA_H = 'h7C,// LD A,H ; 7CLDsA_L = 'h7D,// LD A,L ; 7DLDsA_N = 'h3E,// LD A,N ; 3E XXLDsBC_nn = 'h01,// LD BC,NN ; 01 XX XXLDsB_A = 'h47,// LD B,A ; 47LDsB_B = 'h40,// LD B,B ; 40LDsB_C = 'h41,// LD B,C ; 41LDsB_D = 'h42,// LD B,D ; 42LDsB_E = 'h43,// LD B,E ; 43LDsB_H = 'h44,// LD B,H ; 44LDsB_L = 'h45,// LD B,L ; 45LDsB_N = 'h06,// LD B,N ; 06 XXLDsC_A = 'h4F,// LD C,A ; 4FLDsC_B = 'h48,// LD C,B ; 48LDsC_C = 'h49,// LD C,C ; 49LDsC_D = 'h4A,// LD C,D ; 4ALDsC_E = 'h4B,// LD C,E ; 4BLDsC_H = 'h4C,// LD C,H ; 4CLDsC_L = 'h4D,// LD C,L ; 4DLDsC_N = 'h0E,// LD C,N ; 0E XXLDsDE_NN = 'h11,// LD DE,NN ; 11 XX XXLDsD_A = 'h57,// LD D,A ; 57LDsD_B = 'h50,// LD D,B ; 50LDsD_C = 'h51,// LD D,C ; 51LDsD_D = 'h52,// LD D,D ; 52LDsD_E = 'h53,// LD D,E ; 53LDsD_H = 'h54,// LD D,H ; 54LDsD_L = 'h55,// LD D,L ; 55LDsD_N = 'h16,// LD D,N ; 16 XXLDsE_A = 'h5F,// LD E,A ; 5FLDsE_B = 'h58,// LD E,B ; 58LDsE_C = 'h59,// LD E,C ; 59LDsE_D = 'h5A,// LD E,D ; 5ALDsE_E = 'h5B,// LD E,E ; 5BLDsE_H = 'h5C,// LD E,H ; 5CLDsE_L = 'h5D,// LD E,L ; 5DLDsE_N = 'h1E,// LD E,N ; 1E XXLDsHL_NN = 'h21,// LD HL,NN ; 21 XX XXLDsH_A = 'h67,// LD H,A ; 67LDsH_B = 'h60,// LD H,B ; 60LDsH_C = 'h61,// LD H,C ; 61LDsH_D = 'h62,// LD H,D ; 62LDsH_E = 'h63,// LD H,E ; 63LDsH_H = 'h64,// LD H,H ; 64LDsH_L = 'h65,// LD H,L ; 65LDsH_N = 'h26,// LD H,N ; 26 XXLDsL_A = 'h6F,// LD L,A ; 6FLDsL_B = 'h68,// LD L,B ; 68LDsL_C = 'h69,// LD L,C ; 69LDsL_D = 'h6A,// LD L,D ; 6ALDsL_E = 'h6B,// LD L,E ; 6BLDsL_H = 'h6C,// LD L,H ; 6CLDsL_L = 'h6D,// LD L,L ; 6DLDsL_N = 'h2E,// LD L,N ; 2E XXLDsSP_HL = 'hF9,// LD SP,HL ; F9LDsSP_NN = 'h31,// LD SP,NN ; 31 XX XXNOP = 'h00,// NOP ; 00ED_IMs0 = 'h46// IM 0 ; ED 46 set IM0ED_LDsI_A = 'h47// LD I,A ; ED 47 move a to IED_IMs1 = 'h56// IM 1 ; ED 56 set IM1ED_IMs2 = 'h5E// IM 2 ; ED 5E set IM2// load 8 typesLDsA_6BC7 = 'h0A,// LD A,(BC) ; 0ALDsA_6DE7 = 'h1A,// LD A,(DE) ; 1ALDsB_6HL7 = 'h46,// LD B,(HL) ; 46LDsD_6HL7 = 'h56,// LD D,(HL) ; 56LDsH_6HL7 = 'h66,// LD H,(HL) ; 66ADDsA_6HL7 = 'h86,// ADD A,(HL) ; 86SUBs6HL7 = 'h96,// SUB (HL) ; 96ANDs6HL7 = 'hA6,// AND (HL) ; A6ORs6HL7 = 'hB6,// OR (HL) ; B6LDsC_6HL7 = 'h4E,// LD C,(HL) ; 4ELDsE_6HL7 = 'h5E,// LD E,(HL) ; 5ELDsL_6HL7 = 'h6E,// LD L,(HL) ; 6ELDsA_6HL7 = 'h7E,// LD A,(HL) ; 7EADCsA_6HL7 = 'h8E,// ADC A,(HL) ; 8ESBCs6HL7 = 'h9E,// SBC (HL) ; 9EXORs6HL7 = 'hAE,// XOR (HL) ; AECPs6HL7 = 'hBE,// CP (HL) ; BELDsA_6NN7 = 'h3A,// LD A,(NN) ; 3A XX XXCB_MEM & CB_BIT = 2'b01, // (HL) these must be compaired with ir[7:6]// load 16 typesLDsHL_6NN7 = 'h2A,// LD HL,(NN) ; 2A XX XXPOPsAF = 'hF1,// POP AF ; F1 AF<- (SP++ ++)POPsBC = 'hC1,// POP BC ; C1 BC<- (SP++ ++)POPsDE = 'hD1,// POP DE ; D1 DE<- (SP++ ++)POPsHL = 'hE1,// POP HL ; E1 HL<- (SP++ ++)ED_LDsREG_6NN7 = 6'b01__1011, // compair with {ir[7:6],ir[3:0]} REG = BC,DE,HL,SP// store 8 typesLDs6HL7_N = 'h36,// LD (HL),N ; 36 XXLDs6BC7_A = 'h02,// LD (BC),A ; 02LDs6DE7_A = 'h12,// LD (DE),A ; 12LDs6HL7_A = 'h77,// LD (HL),A ; 77LDs6HL7_B = 'h70,// LD (HL),B ; 70LDs6HL7_C = 'h71,// LD (HL),C ; 71LDs6HL7_D = 'h72,// LD (HL),D ; 72LDs6HL7_E = 'h73,// LD (HL),E ; 73LDs6HL7_H = 'h74,// LD (HL),H ; 74LDs6HL7_L = 'h75,// LD (HL),L ; 75LDs6NN7_A = 'h32,// LD (NN),A ; 32 XX XX// store 16 typesPUSHsAF = 'hF5,// PUSH AF ; F5 (-- --SP) <- AFPUSHsBC = 'hC5,// PUSH BC ; C5 (-- --SP) <- BCPUSHsDE = 'hD5,// PUSH DE ; D5 (-- --SP) <- DEPUSHsHL = 'hE5,// PUSH HL ; E5 (-- --SP) <- HLLDs6NN7_HL = 'h22,// LD (NN),HL ; 22 XX XXED_LDs6NN7_REG = 6'b01__0011,// XX XX compair with {ir[7:6],ir[3:0]} REG = BC,DE,HL,SP// rmw 16 typesEXs6SP7_HL = 'hE3,// EX (SP),HL ; E3// Jumps only trick here is that next inst is not valid - ignore itJRs$t2 = 'h18,// JR $+2 ; 18 XXJRsC_$t2 = 'h38,// JR C,$+2 ; 38JRsNC_$t2 = 'h30,// JR NC,$+2 ; 30JRsNZ_$t2 = 'h20,// JR NZ,$+2 ; 20JRsZ_$t2 = 'h28,// JR Z,$+2 ; 28DJNZs$t2 = 'h10,// DJNZ $+2 ; 10 XX XXJPs = 'hC3,// JP $+3 ; C3 XX XXJPsC = 'hDA,// JP C,$+3 ; DA XX XXJPsHL = 'hE9,// JP HL ; E9 // documented as indirect IS NOTJPsM = 'hFA,// JP M,$+3 ; FA XX XXJPsNC = 'hD2,// JP NC,$+3 ; D2 XX XXJPsNZ = 'hC2,// JP NZ,$+3 ; C2 XX XXJPsPE = 'hEA,// JP PE,$+3 ; EA XX XXJPsPO = 'hE2,// JP PO,$+3 ; E2 XX XXJPsP = 'hF2,// JP P,$+3 ; F2 XX XXJPsZ = 'hCA,// JP Z,$+3 ; CA XX XXRSTs0 = 'hC7,// RST 0 ; C7RSTs8H = 'hCF,// RST 8H ; CFRSTs10H = 'hD7,// RST 10H ; D7RSTs18H = 'hDF,// RST 18H ; DFRSTs20H = 'hE7,// RST 20H ; E7RSTs28H = 'hEF,// RST 28H ; EFRSTs30H = 'hF7,// RST 30H ; F7RSTs38H = 'hFF,// RST 38H ; FF// callsCALLsC_NN = 'hDC,// CALL C,NN ; DC XX XX (-- --SP) <- PC, PC<-NNCALLsM_NN = 'hFC,// CALL M,NN ; FC XX XX (-- --SP) <- PC, PC<-NNCALLsNC_NN = 'hD4,// CALL NC,NN ; D4 XX XX (-- --SP) <- PC, PC<-NNCALLsNN = 'hCD,// CALL NN ; CD XX XX (-- --SP) <- PC, PC<-NNCALLsNZ_NN = 'hC4,// CALL NZ,NN ; C4 XX XX (-- --SP) <- PC, PC<-NNCALLsPE_NN = 'hEC,// CALL PE,NN ; EC XX XX (-- --SP) <- PC, PC<-NNCALLsPO_NN = 'hE4,// CALL PO,NN ; E4 XX XX (-- --SP) <- PC, PC<-NNCALLsP_NN = 'hF4,// CALL P,NN ; F4 XX XX (-- --SP) <- PC, PC<-NNCALLsZ_NN = 'hCC,// CALL Z,NN ; CC XX XX (-- --SP) <- PC, PC<-NN//returnsRET = 'hC9,// RET ; C9 PC <- (SP++ ++)RETsC = 'hD8,// RET C ; D8 PC <- (SP++ ++)RETsM = 'hF8,// RET M ; F8 PC <- (SP++ ++)RETsNC = 'hD0,// RET NC ; D0 PC <- (SP++ ++)RETsNZ = 'hC0,// RET NZ ; C0 PC <- (SP++ ++)RETsP = 'hF0,// RET P ; F0 PC <- (SP++ ++)RETsPE = 'hE8,// RET PE ; E8 PC <- (SP++ ++)RETsPO = 'hE0,// RET PO ; E0 PC <- (SP++ ++)RETsZ = 'hC8,// RET Z ; C8 PC <- (SP++ ++)ED_RETN = 5'b01___101; // compair with {ir[7:6],ir[2:0]} and !reti//io input no flag chnges for this oneINsA_6N7 = 'hDB,// IN A,(N) ; DB XX A<-(Nio)//silly//io outputOUTs6N7_A = 'hD3,// OUT (N),A ; D3 XX A-> (Nio)CBgrp = 'hCB,// CBgrp is rotates and bit munging belowEDgrp = 'hED,// EDgrp EDFDgrp = 'hFD,// FDgrp FDDDgrp = 'hDD,// DDgrp
