-; /* read input latch */ IOCLK: BU(01FAFFFD)<-; /* clock for serial I/O */ STAT: BU(01FAFFFF)<-; /* port status */ PROBLEM; SPC A1 DATION INOUT ALPHIC CONTROL(ALL); SPC POUT DATION OUT BASIC; SPC RESET DATION IN BASIC; SPC LIN DATION IN BASIC; SPC LOUT DATION IN BASIC; SPC PIN DATION IN BASIC; SPC PINL DATION IN BASIC; SPC IOCLK DATION IN BASIC; SPC STAT DATION IN BASIC; DCL ECTRL BIT(16); /* Eprommer control register */ /******************************************************************/ /* procedure to read a single byte from an eprom */ /******************************************************************/ READBYTE: PROC (ADR BIT(16)) RETURNS (BIT(8)); DCL DUMMY BIT(8); DCL BYTE BIT(16); ADR = ADR OR '8000'B4; /* pin 1 to 5V */ ECTRL = ECTRL AND 'FFEF'B4; /* /OE low */ SEND ECTRL TO POUT; TAKE DUMMY FROM IOCLK; SEND ADR TO POUT; /* set address */ TAKE DUMMY FROM LOUT; /* /CE low */ TAKE BYTE FROM PINL; /* read byte, /CE high */ ECTRL = ECTRL OR '0010'B4; /* /OE high */ SEND ECTRL TO POUT; TAKE DUMMY FROM IOCLK; RETURN(BYTE SHIFT 8); END; /* READBYTE:PROC */ /******************************************************************/ /* task to call the READBYTE procedure for 16 subsequent bytes */ /******************************************************************/ TEST:TASK; DCL DUMMY BIT(8); DCL BYTE BIT(8); DCL ADR BIT(16); ECTRL = '0001'B4; /* software reset */ SEND ECTRL TO POUT; TAKE DUMMY FROM IOCLK; ECTRL = '8009'B4; /* pin 1,28 to 5V */ /* data latch disabled */ PUT 'Addr: ' TO A1 BY SKIP,A; GET ADR FROM A1 BY SKIP,B4(4); PUT ADR,': ' TO A1 BY SKIP,B4(4),A; TO 16 REPEAT BYTE = READBYTE(ADR); PUT BYTE,' ' TO A1 BY B4(2),A; ADR = TOBIT(TOFIXED(ADR) + 1); END; ECTRL = '0001'B4; /* pin 1,28 to 0V */ SEND ECTRL TO POUT; TAKE DUMMY FROM IOCLK; END; /* TEST: TASK; */ /******************************************************************/ /* task to reset the userport */ /******************************************************************/ RESET: TASK; DCL DUMMY BIT(8); ECTRL = '0001'B4; /* pin 1,28 to 0V */ SEND ECTRL TO POUT; TAKE DUMMY FROM IOCLK; END; /* RESET: TASK; */ MODEND;