File AP.TK

Directory of image this file is from
This file as a plain text file

/NAME AP  READ AN ACTION POTENTIAL

/DATE : 11-09/75

/J.M.SCHIPPER,EMG.
/DIJKZIGT,ROTTERDAM.

/THIS IS AN EMULATOR TASK  CALLED BY:

/	TAD (10		THIS NUMBER  INDICATES AP
/	CDF BG BUFFER FIELD	REQUIRES 400(8) LOCATIONS
/	6770		/GIANT IOT  "TRAPPED"
/	 RETURN IF AP IS TIMED OUT AFTER RUNTIME .AC=-1
/	 RETURN AC=RELATIVE BUFFER ADDRESS 120 SAMPLES
/			BEFORE AP FOUND A MAX.
/ARG1,	BUFFER ADDRESS&CHANNR&POTM#
/

/ARG1,	BITS 0-5 = BUFFERPOINTER / 100(8)
/	BITS 6-8 =CHANNR IN CONVERSION
/	BITS 9   = UNUSED
/	BITS 10-11= POTM.LEVEL DETECTOR KNOB


/REMEMBER :AP RETURNS ALLWAYS  AFTER 'GIANT'
CLZE=6130
CLOE=6132
CLAB=6133
CLSA=6135
ADCL=6530
ADLM=6531
ADST=6532
ADRB=6533
ADLE=6536
MDELTA=-DELTA^2
DILC=6050
DILX=6053
DILY=6054
DIXY=6055
DILE=6056
ACL=7701
MQL=7421

/DEFINE:

DECIMAL
RUNTIME=10	/AP RUNS # SEC.AFTER THAT ,A TIMEOUT FOLLOWS
DELTA=25	/ WINDOW
OCTAL
EJECT

/"AP" SAMPLES AN INPUT CHANNEL (SEE TORES THE SAMPLES IN A "IN THE MEANTIME AP DISPLETECT. LEVEL .
/AFTER EAKES A POTMETER SAMPLE WHICH 
/BECOMES DETECTION LEVEL
/IF AN INPUT SIGNAL HAS A MAX:(LEVEL-DELTA)<MAX<(LEVEL+DELTA)
/THAN AP HAS FOUND A USEFULL SIGNAL.
/AP RETURNS TO BG WITH THE RELATIVE (BETWEEN 0-400 ) 
/BU BEFORE AP FOUND A MAX.IFIND A MAX WITHIN RUNTIMN WITH ACC=0

/	/	MEANEANS: ION  DF NEQ IF
/	 *	MEANS IOF

*200 APPNT, "A^100+"P&3777 /NAME AP ACTION POTENTIAL 401 /2 PAGES , ONE CONNECT ADC /DEVICE AD CONVERTOR IADDON, ADDONE /INTERRUPT LABEL LABEL, KLKINT /CLOCK HANDLER IBGBUF, BGBUF /BG BUFFER IRGPNT, RNGPNT ICHAN, CHAN /CHANN NUMBER IN CONVERSION IKNOB, KNOB /POTM USED FOR LEVEL IUDFLD, UDFLD /USER DATA FIELD IRGCNT, RNGCNT APUPC, 0 /END OF MONITOR TABLE ENTRY, SMA //AC CONTAINS A PNTR TO USER STATUS LIST JMP APERR //DON'T RUN THIS MODULE TAD C3 DCA APUPC //POINTS TO USER PROG.COUNTER TAD APUPC DCA APPNT ISZ APPNT //POINTS TO "GTF" TAD I APPNT //GET USER FIELDS AND C70 //MASK USER INSTR FLD TAD C6201 //FORM: CDF TO USER FLD DCA UIFLD TAD I APPNT //GET USER FLDS AND C7 //MASK USER DATA FLD CLL RAL RTL TAD C6201 //FORM: CDF TO USER DATA FLD DCA ZTEM2 //STORE FOR A WHILE ISZ APPNT //POINTS TO USER ACC TAD I APUPC //POINTER TO ARG IAC //POINTS TO BG ARGUMENT CNT, /CHT LOOP UIFLD, HLT // INSTR. FLD. JMS DEFERI X) CDTOIF / DCA Z DCA I IUDFLD /SET UDFLD TO RINGBUFFER DATA FIELD TAD ZTEM1 AND C7700 /MASK BG BUFFER ADDRESS DCA I IBGBUF TAD I IBGBUF /STORE IT DCA I IRGPNT /RESET RINGPOINTER TAD M400 DCA I IRGCNT /AND COUNTER TATR RAR /ROTATE CHAN# SK CHAN # DCA I ICHAN /GET ARG AND C3 /MASKET POTM # TAD I IKNOB /LOAD MULTIPLEXER WITH POTM.NR. ADLM TAD (POTM&177+5200 /FORM "JMP POTM" DCA I IADDON / JMP POTM FOR THE FIRST AD INT TAD (ADST DCA ADSTRT /STARTS AD CONVERSIONS AFTER CLOCK INT. CIF MONFLD /RESERV A SLOT # JMS I ZRESERV JMS ALARM /NO SLOTS AVAILABLE DCA SLOT /SLOT NUMBER CDF MONFLD //WE ALTER THE SKIP CHAIN &CLOCK RATE TAD I (CONTAB+TIMER-1 //SAVE SKPCHAIN LABEL DCA KLOK TAD MYCDIF //GET CIF CDF TO THIS FIELD IOF //* WE CAN'T HANDLE INTERRUPTS NOW DCA I (TIMER^4+SKPBAS+2 TAD LABEL ION //WE CAN AGAIN DCA I (CONTAB+TIMER-1 CLL CMA RAL //SET CLOCK RATE TO 5KHZ CLAB //AC STILL -2 TAD (1000+2 //ENABLE ADDONE INTERRUPT ADLE //LOAD AD ENABLE REGISTER DILC //CLEAR DISPLAY FUNCTIONS (NON STORE) CDTOIF /GO SAMPLING AND DISPLAY THE BUFFER TAD (-RUNTIME^DGNTICK /TIMEOUT JMS MONITOR /TIMEOUT: AC=2 WAIT /WAIT FOR SLOT INTERRUPT SLOT, 0 TAD (-2 // A DISOBLIGING TIMEOUT IS POSSIBLE CDF MONFLD ESS=2 SNA CMA DCA A TIMEOUT ADCL // KI1750 CLAB // RESET CL0 // AC STILL -1750 ; REPAIR SKIP CHAIN IOF //* DCA I (TIMER^4+SKPBAS+2 //* TAD KLOK ION // DCA I (CONTAB+TIMER-1 // JMS MONITOR EXIT RELEASE / SEE YOU NEXT TIME EJECT KLKINT, CLSA //* CLOCK INTFLAG ADSTRT, 0/ADST //CDF CIF MONFLD ISZ KLKIME ? EVERY 0.1S JMP I- RESET TIME DELAY DECIMAL TAD (-500 OCTAL DCA KLKCNT JMP I KLOK //* HANDLE TIME DECIMAL KLKCNT, -500 OCTAL APERR, JMS MONITOR //ERROR RETURN EXIT SWPOUT WACHT, .-. /WAIT LOOP DISPLAY SETTLE CLL CLA CMA RTL DCA CNT ISZ CNT JMP .-1 DIXY JMP I WACHT KLOK, 0 /SAVE SKPCHN INTERRUPT LABEL PAGE
IWACHT, WACHT /RELOCATION TABLE PAGE 2 ISLOT, SLOT IADSTRT,ADSTRT BGBUF, 0 ADDONE, JMP POTM/ 0 /JMP END/* HANDLE POTM OR DATA SAMPLES JMS RINGIN /* STORE SAMPLES IN RINGBUFFER ADRB //* READ SAMPLE AGAIN POS, SMA/SPA //* IF LEVEL<0 ; SPA IF LEVEL >0 JMP NO //* IF WRONG NEG, CIA/NOP DCA TEMP //* SAVE THIS ALWAYS POS.SAMPLE TAD TEMP TAD MLOW SPA CLA //* SAMPLE > LOWERLEVEL ? JMP AD1 //* NO - POSSIBLE A MAX IS PASSED TAD TEMP TAD MUPP //* YES -SAMPLE < UPPERLEVEL ? SMA SZA JMP N1 //* NO, SAMPLE EXCEEDED UPPERLEVEL CLA IAC //* OK SET MAX ( WE WERE BETWEEN LEVELS) JMP N2 AD1, TAD MAX //* 0 < SNA CLA //* LOWERLEVEL<RE? JMP QCKRET //* NOEVEL< SAMPLE <HARDWARE LAXFND //* NOW WE HAVE FOUND A MAX NO, CLA N1, DCA EXCEED //* ILLEGAL MAX N2, DCA MAX //* CLEAR OR SET MAX FLAG JMP QCKRET MAXFND, TAD (JMP END DCA ADDONE //* NO NEED TO TEST NEXT SAMPLES TAD M260 //* READ 35.2 MSEC;WE NEED THE END- DCA ENDCNT // OF THE ACTION POTENTIAL TOO !! QCKRET, CLA //* QUICK ? FIRST DISPLAY A LEVEL POINT TAD LEVEL DILY //* I HOPE THE LAST INTENSIFY IS DONE NOW JMS I IWACHT //* INCLUDES A DIXY CDF CIF MONFLD //* JMP I ZFSTEXT EJECT END, JMS RINGIN /* STORE IN RINGBUFFER ISZ ENDCNT //* READY ? JMP QCKRET DCA MAX DCA EXCEED //* CLEAR FLAGS TAD BGBUF //* FORM REL BUFFER ADDRESS CIA //* SINCE THE SOFINT MESSAGE TAD RNGPNT //* MUST NOT BE NEGATIVE. DCA RNGPNT TAD MYCDF DCA .+1 CDF /CDF TO IF FIELD DCA I IADSTRT /* NO AD STARTS PLEASE TAD I ISLOT /* GET WAITING SLOT NR CIF MONFLD JMS I ZSOFINT /*TELL THE WAITER W'RE READY ! RNGPNT, 0 /*STATUS (MESSAGE TO WAITER) TEMP, //*USED AS TEMP* RING BUFFER ADRB D UDFLD, HLT //*OVERLAY DCA I RNGPNT //*PUT INC RTL //* 4 TAD XREG //* SKIP 4 DISPLAY XREG POINTS DILX //* LOAD DISPLAY XREG DCA XREG JMS I IWACHT //* IT COSTS TIME BUT GIVES A NICER DISPLAY ISZ RNGPNT ISZ RNGCNT JMP I RINGIN TAD M400 //* RESET:FFER COUNTER TAD BGBUFFER POINTER TAD M1000EG TAD ADDONE //* ALLOE ? SZA CLA JMP I RINGIN //*END FASE :NO POTM SAMPLES TAD KNOB ADLM TAD (JMP POTM DCA ADDONE //*NEXT SAMPLE IS A POTM. SAMPLE JMP I RINGIN RNGCNT, -400 EJECT POTM, ADRB DCA LEVEL /*WE NEED THIS FOR DISPLAY TAD LEVEL CSPA, SPA /* SAMPLE IN AC >0 ? JMP MLEVEL /* NO - SAMPLE <0 CCIA, CIA JMS SETLEVEL /* FORM UPPER AND LOWERLEVEL TAD CSPA DCA POS /* TEST DATA > 0 TAD C7000 /* LEVEL > 0 (NOP) JMP P1 /* NO NEED TO TEST DATA < 0 MLEVEL, JMS SETLEVEL /* FROM UPPER AND LOWERLEVEL TAD CSMA /* LEVEL < 0 DCA POS /* NO NEED TOTEST DATA > 0 TAD CCIA P1, DCA NEG /* TEST DATA < 0 TAD CHAN ADLM /* SET MULTIPLEXER TO CHANNR DCA ADDONE JMP QCKRET /* GO AND SAMPLE UNTIL A MAX IS FOUND !! SETLEVEL,.-. TAD (DELTA /* LOWERLEVEL =-/SAMPLE/ + DELTA CSMA, SMA JMP QCKRET /* LOWERLEVEL > 0 = BAD LEVEL !! DCA MLOW TAD MLOW TAD (MDELTA /* UPPERLEVEL= -/SAMPLE/-DELTA DCA MUPP JMP I SETLEVEL ENDCNT, / # OF SAMPLES TO GO WERLEVEL MUPP, 0 /UPPERAX IS DETECTED EXCEED, S THE UPPERLEVEL CHAN, KNOB, 0 /LEVEL DETECTION KNOB LEVEL, 0 /THE POTM SAMPLE XREG, 0 /DISPLAY XREG $$$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search