/SOURCE PROGRAM BASIC.UF /OVERLAY FOR 'UF.8E', VERSION 26 /DEC-8E-ALOSA-A-LA /RONALD JONES O.D.,PH.D. /THE OHIO STATE UNIVERSITY /COLLEGE OF OPTOMETRY /COLUMBUS, OHIO 43210 / FPP=4000 FADD=FPP+2000 FSUB=FPP+2117 FFNEG=FPP+2130 FMPY=FPP+1600 FDIV=FPP+1722 FFPUT=FPP+2254 FFGET=FPP+2237 FFNOR=FPP+2213 FFDIVI=5412 FACCKR=0365 UNSFIX=1615 PSWAP=1230 ARGPRE=0307 DISD=6052 DILX=6053 DILY=6054 DIXY=6055 CLZE=6130 CLSK=6131 CLOE=6132 CLAB=6133 CLSA=6135 ADCL=6530 ADLM=6531 ADST=6532 ADRB=6533 ADSK=6534 ADLE=6536 ADRS=6537 EXP=44 HORD=45 LORD=46 MAXPTS=XR0 REFRFL=XR1 BUFADR=XR2 DX=XR3 SPF=6040 CAF=6007 IA=1465 EJECT USECON=0006 XR0=10 XR1=11 XR2=12 XR3=13 XR4=14 XR5=15 CDFIO=0020 ARSTRT=0022 INSAV=0064 K0010=0073 K0017=0074 K0200=0077 FIXP=0114 FGETL=0134 FPUTL=0135 FNORL=0136 FCLR=0137 FNEGL=0140 PISWAP=0156 GETARG=4163 FF=0037 DBSO=6506 DBCO=6505 CSAM=4072 PSAM=4074 NSAM=4073 DONE=4144 NCTR=4077 S=4154 PCTR=4075 FL4096=4160 EJECT /PATCHES TO 'UF.8E' / *4173 SRESET *4174 DRESET *4175 INI *4177 ARG123 EJECT /BRTS.SV PATCHES / /THESE ARE THE STARTING ADDRESSES OF THE ROUTINES /THEY SHOULD BE PATCHED INTO BRTS.SV STARTING AT 1560 / /PLT(N,X,Y) 3600 /REF(N,X,Y) 4310 /ADC(N) 3531 /CLK(R,O,S) 4100 /CLW(N) 3551 /DRO(T,M) 3400 /DRI(N) 4302 /SAM(C,N,P,T) 4000 /DAC(M,N) 3453 /GET(M.L) 4400 /PUT(M,L) 4431 /INI(N) 3425 /PLY(Y) 3510 / /ALSO PATCH BRTS.SV 0001=5402; 0002=4456 /DRO(T,M) FL PT NUMBER TO OUTPUT REG 0<=M<=4095 / T=1, LOGICAL 1'S ARE LOW; T=0, LOGICAL 1'S ARE HI / *3400 DRO, 0 JMS I FIXP /GET T AND FIX IT DCA DAC /TEMP SAVE TAD DAC TAD P6505 DCA DROIOT /PUT IOT ON LINE JMS GETARG JMS I FIXP /M SNA /IS M=0? JMP DRO1 /YES, CLEAR REG DROIOT, 0 CLA CLL JMP I DRO DRO1, CMA /-1 TAD DAC CIA TAD P6505 DCA DROIOT CMA JMP DROIOT /CLEAR REG P6505, 6505 EJECT /INI INITIALIZE ROUTINE / INI, 0 TAD USECON /ENTRY POINT OF BUF CLL RTL TAD ARSTRT /ADR-1 DCA XR5 TAD CDFIO DCA .+1 BUFBAK, 0 CMA TAD I XR5 DCA BUFBAK TAD I XR5 DCA PUTCDF TAD PUTCDF DCA CDFBAK CDF TAD BUFBAK DCA BUFADR TAD USECON /ENTRY POINT OF BUF DCA MEM /SAVE JMP I INI CDFBAK, 0 EJECT /DAC(N,M) LOAD DAC #N WHERE 0<=N<=5 WITH FLOATING / POINT NUMBER M, WHERE 0<=M<4096 / DAC, 0 JMS I FIXP /FIX N DCA DRO TAD DRO TAD KM6 /CHK FOR LEGAL VALUE SMA CLA /5 OR LESS? JMP IA /NO TAD DRO TAD ADAC /MAKE IOT DCA .+3 JMS GETARG JMS I FIXP /FIX M 0 CLA CLL JMP I DAC ADAC, 6551 KM6, -6 EJECT /BUTBUF ENTER WITH 12 BIT VAL IN AC PUT VAL IN USER BUF; / CHK TO SEE IF FIELD IS CROSSED. / PUTBUF, 0 PUTCDF, 0 DCA I BUFADR IAC TAD BUFADR SZA CLA /ABOUT TO CROSS FIELDS? JMP .+4 /NO TAD K0010 /YES TAD PUTCDF DCA PUTCDF CDF JMP I PUTBUF EJECT /PLY(Y) ENTER WITH YVAL IN FAC; CHK 0<=VAL<1.0 / PUT LEGAL VAL IN USER BUF. / PLY, 0 JMS JOB JMS PUTBUF JMP I PLY / JOB, 0 TAD HORD SPA CLA />=0? JMP IA /NO, ERROR TAD EXP SMA SZA CLA /<1.0? JMP IA /CONVERT NUMBER TO A 10 BIT DISPLAYABLE VAL / FAC=FAC*1776+1001 / JMS FMPY FL1022 JMS FADD FL513 JMS I FIXP JMP I JOB EJECT /ADC(N) SAMPLE ADC #N; RETURN LEGAL VAL TO FAC / ADC, 0 JMS I FIXP /GET ARG CIA TAD K0017 SPA /N<=17? JMP IA / NO CIA TAD K0017 ADLM ADST ADSK JMP .-1 ADRB DCA HORD JMS FFLOT JMP I ADC EJECT /CLW(N) N IS A DUMMY ARG; WAIT TILL CLOCK O.F. OR SCHMITT / TRIGGER (DEPENDING ON CLK) THEN RETURN TO BASIC. / CLW, 0 CLSK /STATUS SET? SKP JMP EARLY /YES CLSK JMP .-1 PVAL, CLSA /READ STATUS CLW1, CLL RAL /CHK ON O.F. SZL /O.F. BIT SET IN STATUS WD? CIA /YES, NEGATE /RTN CODES RAR DCA HORD JMS FFLOT JMP I CLW EARLY, CLSA TAD K0010 JMP CLW1 PAGE /PLT(N,X,Y) ROUTINE TO PLOT X,Y ARGS IF N=0. / IF 0<=N<=1024 THE USER ARRAY IS / CONVERTED TO 10BIT DISPLAYABLE / VALS THEN PLOTTED. / *3600 PLT, 0 JMS I FIXP /FIX N SNA JMP PLOT /PLOT ARGS IF N=0 CIA DCA CNTR DCA VTRX DCA VTRY TAD MEM CIA TAD USECON SNA CLA /ARRAY CHANGED? JMP APLT /NO, NOW 10 BIT! JMS INI /INITIALIZE ARRAY TAD CDFIO DCA .+1 ADDR, 0 /USED TO ADVANTAGE TAD I XR5 /BUMP CLA CLL TAD I XR5 /DIMENSION 2 CDF TAD CNTR /DIMENSION - N SPA CLA /IS DIMENSION>=N? JMP IA /NO, ABORT TAD CNTR RAL CLL /MULT BY 2 DCA CONT /SAVE COUNTER FOR REP JMS INIT /GET INITIAL ADDR AND CDF OF ARRAY / REP, 0 /INIT RETURNS CDF HERE IAC DCA FF TAD ADDR JMS I FGETL /GET DATA IN FAC, SET CDF CNTR, 0 /NOT USED BY FGET /PLY IS USED TO CREATE A 10 BIT ARRAY AND CHK VALUES. / DCA FF /MODE 1 CALL JMS PLY CLA CLL CML IAC RAL /3 TAD ADDR DCA ADDR SZL /FIELD CROSSED? JMS BPLT /YES ISZ CONT JMP REP /DISPLAY ROUTINE / APLT, CLSA KCC JMS INIT CONT, 0 TAD I ADDR TAD VTRX /VECTOR DISPLAY DILX CLA CLL ISZ ADDR JMP DPLT JMS BPLT TAD CONT DCA .+1 0 DPLT, TAD I ADDR /GET Y TAD VTRY CDF DILY DISD JMP .-1 DIXY CLA CLL ISZ ADDR SKP JMS BPLT ISZ REP JMP CONT /ARRAY NOT FINISHED KSF /FINISHED JMP CPLT TAD K0010 DCA HORD JMS FFLOT /KEYBOARD INTERUPT RETURNS 8 TO BASIC RTN, KCC /PLOT RETURNS HERE JMP I PLT /EXIT CPLT, CLSK JMP APLT+2 /CONTINUE IF NO CLOCK INTERRUPT TAD PLT /RETURN LOC DCA CLW /STORE IN CLW FUNCTION JMP PVAL /JUMP TO CLW, RETURN TO BASIC /SUBROUTINES / INIT, 0 TAD CNTR DCA REP /USED FOR VARIABLE COUNTER TAD CDFBAK DCA I INIT /PUT ON LINE TAD BUFBAK /ADDR-1 DCA ADDR ISZ ADDR SKP JMS BPLT /FIELD CROSSED JMP I INIT BPLT, 0 TAD I INIT TAD K0010 DCA I INIT JMP I BPLT VTRX, 0 VTRY, 0 /PLOT ARGS X,Y / PLOT, JMS GETARG /GET X JMS JOB /CHK, SCALE, AND FIX X DILX CLA CLL IAC JMS GETARG /GET Y JMS JOB DILY DISD JMP .-1 DIXY JMP RTN /EXIT FL1024, 13 2000 0 FL1022, 12 3774 0 MEM, -100 /DUMMY LOAD PAGE /FFLOT FLOAT ANY INTERGER IN HORD INTO FAC / *4200 FFLOT, 0 DCA LORD /CLEAR LOW ORDER MANTISSA TAD P13 /11 INTO EXPONENT DCA EXP JMS I FNORL /NORMALIZE JMP I FFLOT P13, 13 EJECT /ADSAM A CLOCK INTERRUPT FOR SAMPLING ADC'S / SCNTR=NEGCHK ADSAM1, ADRS /READ STATUS (GET MUX) IAC ADLM /BUMP MUX BY 1 JMP ADSAM2-1 ADSAM, CLSA /RD STAT AND CLEAR CLA SMA /SCHMITT TRIG? JMP ADSAM2-1 /YES TAD S SNA CLA /S=0? JMP ADSAM2 /YES, SET UP FOR O.F. SAMPLING ISZ SCNTR /CONTINUE UNTIL JMP TION /S NUMBER OF O.F.'S RCLK, TAD PCTR TAD PSAM DCA HORD JMS FFLOT /RETURN NUMBER OF POINTS TO BASIC JMP DONE /DONE IN CLK ROUTINE ADST ADSAM2, ADSK /SCHMITT TRIGS DON'T START CONV! JMP .-1 ADRB JMS PUTBUF ISZ NCTR /ALL SAMPLE? JMP ADSAM1 /NO ISZ PCTR /YES, JOB DONE? SKP JMP RCLK /JOB DONE, EXIT TAD CNTR TAD DRI DCA CNTR /UPDATE COUNTER IN PLT SRESET, TAD NSAM CIA DCA NCTR /ADC SAMPLE COUNT TAD CSAM ADLM /LOAD 1ST ADC TAD PSAM TAD PCTR SNA CLA /FIRST TIME THRU LOOP? JMP .+3 / YES, INIT TION, ION /NO, PLT JMP APLT+2 TAD NSAM RAR CLL SZL /ODD NUMBER? JMP IAA /YES, ABORT CIA DCA DRI /TEMP STORE JMS INI DCA CNTR TAD S SNA /IS S SET? JMP ADSAM4 /NO, INIT FOR O.F. SAMPLING CIA /YES, DISABLE O.F. ENABLE OF ADC DCA SCNTR ADLE ADSAM4, ION JMP ADSAM2 /IDLE UNTIL FIRST INTERUPT IAA, SPF JMP IA EJECT /DRI(N) N=DUMMY, SAMPLE DIGITAL I/O BOARD 0; AND RETURN RESULT / AS FL PT NUMBER IN FAC / DRI, 0 TAD P6503 JMS DIGIO /GET DIGITAL VAL JMS NEGCHK JMP I DRI P6503, 6503 EJECT /REF(N,X,Y) ROUTINE TO REFRESH AND VECTOR 10BIT ARRAY. / REF, 0 TAD REF DCA PLT /SET UP EXIT LINK FROM PLT JMS I FIXP /FIX N CIA DCA CNTR /RESET COUNTER IN PLT JMS GETARG JMS FADD FL1024 /ADD 2000(8) TO VAL JMS I FIXP /FIX X DCA VTRX /INSERT IN PLT ROUTINE IAC JMS GETARG JMS FADD FL1024 JMS I FIXP /FIX Y DCA VTRY TAD MEM CIA TAD USECON SZA CLA /HAS 'USE' BEEN CALLED? JMS INI /YES, RESET POINTERS JMP APLT EJECT /NEGCHK THIS ROUTINE CHKS TO SEE IF A VALUE / FROM DRI OR GET IS NEG. IF IT IS / THE VALUE IS CHANGED TO 4096 + / NEG VALUE. / NEGCHK, 0 DCA REF /TEMP STORE TAD REF DCA HORD JMS FFLOT TAD REF SMA CLA /VAL WAS NEG JMP I NEGCHK /NO JMS FADD /YES FL4096 JMP I NEGCHK PAGE /GET(M,L) M=0 GET VAL FROM USER BUF , NO MASKING / M>0,GET VAL FROM USER BUF AND MASK WHERE / M IS THE MASKING VAL. / L IS THE LOCATION OF USER BUF . / COMMON CALLS INI ROUTINE. / LHOLD=ARG123 MASK=DIGIO *4400 GET, 0 IAC DCA MSKCTR JMS I FIXP /GET M SNA /M=0? CMA /YES SET M=7777 CLL RAR SZL JMP .+3 ISZ MSKCTR JMP .-4 RAL JMS COMMON /SAME CODE FOR GET AND PUT TAD MSKCTR CIA DCA MSKCTR TAD I LHOLD CDF /RESET DF CLL RAR ISZ MSKCTR JMP .-2 RAL AND MASK JMS NEGCHK JMP I GET /PUT(M,L) M IS THE FL PT VAL TO BE FIXED AN PUT / IN THE USER BUF; LIS THE LOC OF THE USER BUF / INI IS CALLED BY COMMON. / PUT, 0 JMS I FIXP /GET AND FIX FL PT VAL JMS COMMON TAD MASK DCA I LHOLD CDF JMP I PUT /COMMON THIS ROUTINE IS UED BY GET AND PUT / COMMON, 0 DCA MASK /TEMP STORAGE JMS INI /INITIALIZE ARRAY, SPECIFIED BY USE JMS GETARG /GET L JMS I FIXP CLL TAD BUFBAK DCA LHOLD SZL /CROSSED FIELDS TAD K0010 /YES TAD CDFBAK DCA .+1 0 JMP I COMMON EJECT / WHEN INTERUPT OCCURS COME HERE / SERVC, CLA CLL /ASSIGN TO LOC 0002 CLSK SKP JMP ADSAM /CLOCK INTERUPT KSF SKP JMP KKBRD /TTY INTERUPT TSF /DUE TO LAST ECHO? HLT /SPURIOUS TCF JMP TION KKBRD, KRB TLS TAD M203 SZA CLA JMP TION /IGNORE CHAR JMS I PISWAP /CNTR/C TYPED JMP 7605 /RETURN TO MONITOR M203, -203 MSKCTR, 0 EJECT /ARG123 THIS ROUTINE GETS 3 ARGS AND STORES / THEIR FL. PT. VALUES IN ARG1, ARG2, & ARG3 / AND THEIR FIXED VALUES AT ADR, ADR+1 / AND ADR+2 / ARG123, 0 TAD I ARG123 /GET ADR-1 FOR THE ARGS DCA XR1 ISZ ARG123 JMS I FIXP DCA I XR1 JMS GETARG JMS I FIXP DCA I XR1 IAC JMS GETARG JMS I FIXP DCA I XR1 JMP I ARG123 EJECT /DRESET USED TO RESET STARTING DIGITAL I/O BOARD / AND CTR; WAIT FOR O.F.; SAMPLE EACH BOARD. / DRESET, JMS INI TAD NSAM CIA DCA NCTR TAD CSAM /STARTING BOARD # CLL RTL RAL TAD P6473 DCA KDBCI /WAIT LOOP CLSK JMP .-1 CLSA /READ STATUS CLA /SAMPLE ALL BOARDS DIGSAM, TAD K0010 TAD KDBCI JMS DIGIO JMS PUTBUF ISZ NCTR JMP DIGSAM ISZ PCTR /JOB DONE? JMP DRESET+1 /NO JMP DONE /YES, DONE IN CLK ROUTINE /DIGIO ENTER WITH DBCI SETUP FOR CORRECT BOARD; SET UP / IOT, SAMPLES BOARD, EXITS WITH VAL IN AC / DIGIO, 0 DCA KDBCI TAD KDBCI IAC DCA KDBRI KDBRI, 0 KDBCI, 0 JMP I DIGIO P6473, 6473 FL513, 12 2002 0 PAGE $$