MODULE BDM2 TITLE 'BDM_IMPLEMENTATION' // DEFINE INPUTS DATA0 PIN 15; DATA3 PIN 16; DATA8 PIN 17; DATA9 PIN 18; R_W PIN 20; L_CS2 PIN 22; L_CS8 PIN 25; YO_CLOCK PIN 11; AUTOFEED PIN 5; STROBE PIN 4; SEL_INP PIN 7; DSO PIN 9; DSI PIN 40; L_BERR PIN 28; FREEZE PIN 30; LOGIC_CLOCK PIN 35; LOGIC_IO_1 PIN 37; LOGIC_IO_2 PIN 38; LOGIC_IO_3 PIN 39; LOGIC_IO_4 PIN 42; LOGIC_IO_5 PIN 43; LOGIC_IO_6 PIN 44; LOGIC_IO_7 PIN 3; BIT8_BOOT PIN 10; // DEFINE OUTPUTS OUT_PAPER PIN 8 ISTYPE 'COM'; ERROR PIN 6 ISTYPE 'COM'; L_BKPT PIN 29 ISTYPE 'COM'; L_RESET PIN 19 ISTYPE 'COM'; W_R PIN 21 ISTYPE 'COM'; MCS2 PIN 26 ISTYPE 'COM'; DSACK0 PIN 27 ISTYPE 'COM'; V_LED PIN 41 ISTYPE 'COM'; //DEFINE NODES S4,S3,S2,S1,S0 NODE ISTYPE 'REG_D,BUFFER,KEEP'; DA_NODE NODE ISTYPE 'REG_D,BUFFER,KEEP'; //DEFINE GENERICS AND DATA GROUPS ONE = [0,0,0,0,0]; TWO = [0,0,0,0,1]; THREE = [0,0,0,1,0]; FOUR = [0,0,0,1,1]; FIVE = [0,0,1,0,0]; SIX = [0,0,1,0,1]; SEVEN = [0,0,1,1,0]; EIGHT = [0,0,1,1,1]; NINE = [0,1,0,0,0]; TEN = [0,1,0,0,1]; ELEVEN = [0,1,0,1,0]; TWELVE = [0,1,0,1,1]; THIRTEEN = [0,1,1,0,0]; FOURTEEN = [0,1,1,0,1]; FIFTEEN = [0,1,1,1,0]; SIXTEEN = [0,1,1,1,1]; SEVENTEEN = [1,0,0,0,0]; EIGHTEEN = [1,0,0,0,1]; NINETEEN = [1,0,0,1,0]; TWENTY = [1,0,0,1,1]; TWENTYONE = [1,0,1,0,0]; TWENTYTWO = [1,0,1,0,1]; TWENTYTHREE = [1,0,1,1,0]; TWENTYFOUR = [1,0,1,1,1]; TWENTYFIVE = [1,1,0,0,0]; TWENTYSIX = [1,1,0,0,1]; TWENTYSEVEN = [1,1,0,1,0]; TWENTYEIGHT = [1,1,0,1,1]; TWENTYNINE = [1,1,1,0,0]; THIRTY = [1,1,1,0,1]; THIRTYONE = [1,1,1,1,0]; THIRTYTWO = [1,1,1,1,1]; STATE_REG = [S4,S3,S2,S1,S0]; H,L,X,Z,C,U = 1,0,.X.,.Z.,.C.,.U.; PLSI PROPERTY 'ISP ON'; PLSI PROPERTY 'PULLUP ON'; PLSI PROPERTY 'Y0_AS_RESET OFF'; EQUATIONS L_BERR = 1; L_BERR.OE = 1; L_BKPT = ((!DA_NODE.Q & L_RESET) & STROBE # LOGIC_IO_7); L_BKPT.OE = 1; DA_NODE.AR = !SEL_INP; DA_NODE.D = 1; DA_NODE.CLK = (!DSI # !AUTOFEED); ERROR = FREEZE; ERROR.OE = 1; OUT_PAPER = !(DSO & FREEZE); OUT_PAPER.OE = 1; V_LED = FREEZE; V_LED.OE = 1; W_R = !R_W; W_R.OE = 1; DATA0 = BIT8_BOOT; DATA0.OE = (!L_RESET & R_W); //GOE = LOGIC_IO_2 DATA3 = 0; DATA3.OE = (!L_RESET & R_W); //GOE = LOGIC_IO_2 DATA8 = 0; DATA8.OE = (!L_RESET & R_W); //GOE = LOGIC_IO_2 DATA9 = 0; DATA9.OE = (!L_RESET & R_W); //GOE = LOGIC_IO_2 MCS2.OE = 1; DSACK0.OE = 1; STATE_REG.CLK = [!YO_CLOCK,!YO_CLOCK,!YO_CLOCK,!YO_CLOCK,!YO_CLOCK]; STATE_DIAGRAM STATE_REG STATE ONE: DSACK0 = 1; MCS2 = 0; IF (L_CS2 == 0) THEN TWO ELSE ONE STATE TWO: DSACK0 = 1; MCS2 = 0; GOTO THREE; STATE THREE: DSACK0 = 1; MCS2 = 0; GOTO FOUR; STATE FOUR: DSACK0 = 1; MCS2 = 0; GOTO FIVE; STATE FIVE: DSACK0 = 1; MCS2 = 0; GOTO SIX; STATE SIX: DSACK0 = 1; MCS2 = 1; GOTO SEVEN; STATE SEVEN: DSACK0 = 1; MCS2 = 1; GOTO EIGHT; STATE EIGHT: DSACK0 = 1; MCS2 = 1; GOTO NINE; STATE NINE: DSACK0 = 1; MCS2 = 1; GOTO TEN; STATE TEN: DSACK0 = 1; MCS2 = 1; GOTO ELEVEN; STATE ELEVEN: DSACK0 = 1; MCS2 = 1; GOTO TWELVE; STATE TWELVE: DSACK0 = 1; MCS2 = 1; GOTO THIRTEEN; STATE THIRTEEN: DSACK0 = 1; MCS2 = 1; GOTO FOURTEEN; STATE FOURTEEN: DSACK0 = 1; MCS2 = 1; GOTO FIFTEEN; STATE FIFTEEN: DSACK0 = 1; MCS2 = 1; GOTO SIXTEEN; STATE SIXTEEN: DSACK0 = 1; MCS2 = 1; GOTO SEVENTEEN; STATE SEVENTEEN: DSACK0 = 1; MCS2 = 1; GOTO EIGHTEEN; STATE EIGHTEEN: DSACK0 = 1; MCS2 = 0; GOTO NINETEEN; STATE NINETEEN: DSACK0 = 1; MCS2 = 0; GOTO TWENTY; STATE TWENTY: DSACK0 = 1; MCS2 = 0; GOTO TWENTYONE; STATE TWENTYONE: DSACK0 = 1; MCS2 = 0; GOTO TWENTYTWO; STATE TWENTYTWO: DSACK0 = 1; MCS2 = 0; GOTO TWENTYTHREE; STATE TWENTYTHREE: DSACK0 = 1; MCS2 = 0; GOTO TWENTYFOUR; STATE TWENTYFOUR: DSACK0 = 1; MCS2 = 0; GOTO TWENTYFIVE; STATE TWENTYFIVE: DSACK0 = 1; MCS2 = 0; GOTO TWENTYSIX; STATE TWENTYSIX: DSACK0 = 1; MCS2 = 0; GOTO TWENTYSEVEN; STATE TWENTYSEVEN: DSACK0 = 1; MCS2 = 0; GOTO TWENTYEIGHT; STATE TWENTYEIGHT: DSACK0 = 1; MCS2 = 0; GOTO TWENTYNINE; STATE TWENTYNINE: DSACK0 = 1; MCS2 = 0; GOTO THIRTY; STATE THIRTY: DSACK0 = 1; MCS2 = 0; GOTO THIRTYONE; STATE THIRTYONE: DSACK0 = 0; MCS2 = 0; GOTO THIRTYTWO; STATE THIRTYTWO: DSACK0 = 0; MCS2 = 0; IF(L_CS2 == 0) THEN THIRTYTWO ELSE ONE; END