module dk_3 Title 'dk_3' " Programm for Disp_Kbd_1 - XC95108 PC84. " " " Port assignment: " DD - Graphic LCD display " IOB, IOCI, IOCO - Universal IO bus " KBDO, KBDI - Matrix keyboard port " " Graphic LCD display controller SED1330/1335. " ========================================================= Declarations " Adress bus " AX0..AX9 PIN 1,2,3,4,5,6,7,11,13,14 istype 'pos'; " Data bus. Connected to D8..D15 of CPU " DX0..DX7 PIN 19,21,25,26,75,79,80,81 istype 'pos'; " Bus control signals " !HWR PIN 15 istype 'pos'; !RD PIN 23 istype 'pos'; !CS3 PIN 18 istype 'pos'; " Display data bus " DDX0..DDX7 PIN 35,36,37,39,40,41,43,44 istype 'pos'; " Display control signals " RS PIN 66 istype 'pos'; !DWR PIN 46 istype 'pos'; !DRD PIN 47 istype 'pos'; !CS PIN 48 istype 'pos'; " Keyboard ROW " KBOX0..KBOX3 PIN 50,51,52,53 istype 'reg'; " Keyboard COLUMN : KBIX0..KBIX7 PIN 54,55,56,57,58,61,62,65 istype 'pos'; " IOB bus " IOBX0..IOBX7 PIN 45,63,67,68,69,70,71,72 istype 'reg'; " IOCO bus (output) " IOCOX0 PIN 33 istype 'reg'; IOCOX1 PIN 34 istype 'reg'; " IOCI bus (input) " IOCIX0 PIN 31 istype 'pos'; IOCIX1 PIN 32 istype 'pos'; " LED " LED1 PIN 82 istype 'pos'; LED2 PIN 83 istype 'pos'; " LCD display LED " " RED_D PIN 76 istype 'reg'; " GREEN_D PIN 77 istype 'reg'; " General " RES PIN 20 istype 'pos'; " Reset LCD display RESET PIN 74 istype 'pos'; " /RESET input - pin GSR CPU_WAIT PIN 24 istype 'pos'; IOB_WR, IOB_RD NODE; " RD & WR signals DISP_WR, DISP_RD NODE; KBD_WR, KBD_RD NODE; IOC_WR, IOC_RD NODE; IOB_DIR_WR NODE; IOB_DIR0..IOB_DIR7 NODE istype 'reg'; " IOB direction register IOBIX7..IOBIX0 NODE; " IOB input register "IOCIX7..IOCIX0 NODE; " "IOC input register " A = [AX9..AX0]; AS = [AX2..AX0]; DBUS = [DX7..DX0]; DD = [DDX7..DDX0]; IOB = [IOBX7..IOBX0]; IOCO = [IOCOX1..IOCOX0]; IOCI = [IOCIX1..IOCIX0]; KBI = [KBIX7..KBIX0]; KBO = [KBOX3..KBOX0]; IOB_DIR = [IOB_DIR7..IOB_DIR0]; IOBI = [IOBIX7..IOBIX0]; IOCI_BUF = [0,0,0,0,IOCO.FB,IOCI]; " ========================================================= Equations LED1 = !CS3; LED2 = 0; RES = RESET; DISP_WR = !AX1 & !AX2 & CS3 & HWR; " 00x DISP_RD = !AX1 & !AX2 & CS3 & RD; " 00x KBD_WR = (AS == ^b010) & CS3 & HWR; " 010 KBD_RD = (AS == ^b010) & CS3 & RD; " 010 IOB_WR = (AS == ^b100) & CS3 & HWR; " 100 IOB_RD = (AS == ^b100) & CS3 & RD; " 100 IOC_WR = (AS == ^b101) & CS3 & HWR; " 101 IOC_RD = (AS == ^b101) & CS3 & RD; " 101 IOB_DIR_WR = (AS == ^b110) & CS3 & HWR; " 110 " --------------------------------------------------------- " --- Data bus DBUS.OE = DISP_RD # KBD_RD # IOB_RD # IOC_RD; DBUS = KBI & KBD_RD # DD & DISP_RD # IOBI & IOB_RD # IOCI_BUF & IOC_RD; " --- Display DD = DBUS.PIN; DD.OE = DISP_WR; RS = AX0; CS = DISP_RD # DISP_WR; DWR = HWR; DRD = RD; " --- KBO KBO.CLK = !KBD_WR; KBO := [DX3..DX0]; " --- IOB_DIR IOB_DIR := DBUS; IOB_DIR.CLK = !IOB_DIR_WR; IOB_DIR.AP = !RESET; " Input after reset " --- IOB IOB := DBUS; IOB.CLK = !IOB_WR; IOB.OE = !IOB_DIR; IOBI = IOB.PIN & IOB_DIR # IOB.FB & !IOB_DIR; " --- IOCO IOCO := DBUS[2..1]; IOCO.CLK = !IOC_WR; " --- IOCI " Nothing is here " --- Controls CPU_WAIT = 0; " No WAIT states inserted RES = RESET; " ========================================================= end dk_3