// DCP-Multibus.bcpl -- Multibus FSM Roms for Dicentra Central Processor // Loaded with DCP-Proms.bcpl // Last modified October 28, 1983 1:22 AM by Boggs external Multibus manifest [ high = 1; low = 0 ] //----------------------------------------------------------------------------------------- let Multibus(addr, data) be //----------------------------------------------------------------------------------------- [ manifest [ // FSM states C1FH = 0 C1SH = 1 C2FH = 2 C2SH = 3 C3FH = 4 C3SH = 5 C1Wait = 6 Ref2FH = 7 Ref2SH = 8 Read3FH = 9 Read3SH = 10 Write3FH = 11 Write3SH = 12 C1WFH = 13 C1WSH = 14 C2WFH = 15 ] structure Addr: [ blank bit 7 CurState bit 4 IORef bit MapRef bit XACK bit //low true InitTrap bit //low true Master bit //low true ] structure Data: [ NextState bit 4 Cycle1 bit Cycle2 bit Cycle3 bit DoIt bit WriteMar bit WriteMDR bit BCLK bit WriteMD bit ReadMAx bit //low true MBIdle bit blank bit 2 IOCmd bit ClearCmd bit //low true ReadCmd bit WriteCmd bit ClearAD bit ReadMar bit //low true ReadMap bit //low true ReadMDR bit //low true blank bit 8 ] let CurrentState = addr<>Data.NextState = high? NextState, not NextState data>>Data.Cycle1 = Cycle1? high, low data>>Data.Cycle2 = Cycle2? high, low data>>Data.Cycle3 = Cycle3? high, low data>>Data.DoIt = DoIt? high, low data>>Data.WriteMar = WriteMar? high, low data>>Data.WriteMDR = WriteMDR? high, low data>>Data.BCLK = BCLK data>>Data.WriteMD = WriteMD? high, low data>>Data.ReadMAx = ReadMAx? low, high data>>Data.MBIdle = MBIdle? high, low data>>Data.IOCmd = IOCmd? high, low data>>Data.ClearCmd = ClearCmd? low, high data>>Data.ReadCmd = ReadCmd? high, low data>>Data.WriteCmd = WriteCmd? high, low data>>Data.ClearAD = ClearAD? high, low data>>Data.ReadMar = ReadMar? low, high data>>Data.ReadMap = ReadMap? low, high data>>Data.ReadMDR = ReadMDR? low, high ]