ASMB,L,C HED RTE BASIC 'CHAR' INTERFACE A-91200-16002-2 * * NAME: RTE BASIC 'CHAR' INTERFACE * SOURCE: 91200-18002 (FILE 1) * BINARY: 91200-16002 (MODULE 1) * PGMR: L.W.S. ADDED TO LIBRARY BY DENTON ANDERSON. * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * * NAM CHARS,7 91200-16002 REV 1648 -- 761124 ENT CHARS EXT .ENTR,CH#R SPC 2 * THIS ROUTINE SERVES AS AN INTERFACE BETWEEN THE TV LIBRARY * ROUTINE 'CHAR' AND A BASIC CALLING PROGRAM. IT ACCEPTS THE * ADDRESS OF A STRING VARIABLE (AS WELL AS A STRING IN QUOTES), * PUTS THE STRING LENGTH TEMPORAIRLY IN WORD 1 OF THE STRING * ARRAY, AND THEN CALLS THE CHAR LIBRARY ROUTINE TO DISPLAY * THE CHARACTER STRING. ALL OTHER PARAMETERS ARE PASSED DIRECTLY * TO CHAR AS RECEIVED. THE BASIC USER MUST CALL IT AS FOLLOWS: * * 10 CALL CHARS(X,Y,A$,S,D,N,M,P) * * X,Y --> X,Y COORDINATES OF LOWER-LEFT HAND POINT WHERE * CHARACTER STRING IS TO BE DISPLAYED. * * A$ --> STRING VARIABLE CONTAINING STRING TO BE DISPLAYED. * * S --> CHARACTER SIZE. * * D --> DIRECTION. * * N --> ARRAY STRUCTURE (FORCED TO 0). * * M --> DISPLAY MODE. * * P --> POWER FAIL INDICATOR. SKP * TYPICAL BASIC PROGRAM * --------------------- * * 10 DIM A$(72) * 20 PRINT "ENTER TV LU #, DISPLAY SENSE: "; * 30 INPUT L,S * 40 CALL VIDLU(L,S) * 50 CALL ERASE * 60 PRINT "ENTER ANY CHARACTER STRING OR /E" * 70 INPUT A$ * 80 IF A$(1,2)="/E" THEN 160 * 90 PRINT "ENTER X,Y,SIZE,DIREC,MODE: "; * 100 INPUT X,Y,S,D,M * 110 CALL CHARS(X,Y,A$,S,D,0,M,P) * 120 IF P#0 THEN 140 * 130 GO TO 50 * 140 PRINT"POWER FAIL, START OVER" * 150 GO TO 20 * 160 PRINT"DONE" * 170 END * * * BRANCH & MNEMONIC TABLE CONSIDERATIONS * -------------------------------------- * * THE FOLLOWING TYPE OF ENTRY MUST BE MADE: * * FOR RTE-B: * CHARS(I,I,R,I,I,I,I,V) * * FOR REAL TIME BASIC: * CHARS(I,I,RA,I,I,I,I,IV) * * THE ENTRY POINT MUST BE 'CHARS' WITH EIGHT PARAMETERS EXACTLY * AS SHOWN. PARAMETER NUMBER 3 MUST BE SPECIFIED AS REAL SO THAT * THE STRING ARRAY (A$) CAN BE RETRIEVED DURING RUN TIME. PARAMETER * NUMBER 6 CAN BE SPECIFIED AS ANYTHING SINCE IT IS ALWAYS PASSED * AS ZERO TO THE TV LIBRARY ROUTINE. SKP X NOP STARTING X & Y COORDINATES OF THE Y NOP THE LOWER-LEFT CORNER. BUFR NOP ADRS OF CHAR. STRING OR LITERAL. SIZE DEF .0 CHARACTER SIZE. DIREC DEF .0 STRING DIRECTION. NUMBR NOP ARRAY STRUCTURE. MODE DEF .0 DISPLAY MODE. PFL NOP POWER FAIL INDICATOR. SPC 1 CHARS NOP << ENTRY POINT >> JSB .ENTR GET PARAMETER ADDRESSES. DEF X SPC 1 LDA BUFR,I SAVE STATEMENT COMPILE CODE. STA TEMP SAVE FOR LATER RESTORE. AND .377 ISOLATE STRING LENGTH. STA BUFR,I TEMPORARILY PUT BACK IN STRING. LDA PFL TRANSFER POWER FAIL INDICATOR STA PFAIL ADDRESS FOR NEXT CALL. SPC 1 *... CALL CHAR LIBRARY ROUTINE ... SPC 1 JSB CH#R CALL DEF *+9 THE DEF X,I ACTUAL DEF Y,I TV DEF BUFR,I LIBRARY DEF SIZE,I ROUTINE. DEF DIREC,I DEF .0 DEF MODE,I PFAIL NOP SPC 1 LDA TEMP RESTORE ACTUAL FIRST WORD IN STA BUFR,I BASIC SYMBOL TABLE. LDA DEF0 RE-ESTABLISH DEFAULTS STA SIZE / STA DIREC / STA MODE / CLA / STA PFL / JMP CHARS,I RETURN TO BASIC. SPC 1 TEMP NOP HOLDS ORIGINAL FIRST WORD OF S.T. .0 OCT 0 BUFFER STRUCTURE PARAMETER. .377 OCT 377 STRING COUNT MASK VALUE. DEF0 DEF .0 SPC 1 END ASMB,L,C HED RTE BASIC 'POINT' INTERFACE A-91200-16002-2 * * NAME: RTE BASIC 'POINT' INTERFACE * SOURCE: 91200-18002 (FILE 2) * BINARY: 91200-16002 (MODULE 2) * PGMR: L.W.S. ADDED TO LIBRARY BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * P NAM PNTS,7 91200-16002 REV 1648 -- 761124 ENT PNTS EXT .ENTR,POINT,IFIX SUP PRESS EXTRANEOUS LISTING SPC 1 * THIS ROUTINE SERVES AS AN INTERFACE BETWEEN THE TV LIBRARY * ROUTINE 'POINT' AND A BASIC CALLING PROGRAM. IT ACCEPTS A * CONTIGUOUS ARRAY OF FLOATING-POINT X & Y SCREEN COORDINATES, * CONVERTS EACH TO INTEGER, AND SENDS UP TO 64 PAIRS OF COORD- * INATES TO THE ROUTINE 'POINT' AT A TIME. THE BASIC USER MUST * SET UP THE ARRAY OF X & Y COORDINATES AS FOLLOWS: * * A(1) = FIRST X COORDINATE * A(2) = FIRST Y COORDINATE * A(3) = SECOND X COORDINATE * A(4) = SECOND Y COORDINATE * . . * . . * . . * A(N-1) = LAST X COORDINATE * A(N) = LAST Y COORDINATE * * THE BASIC USER THEN CALLS IT AS FOLLOWS: * * 10 CALL PNTS(A(1),N,M,P) * * * A(1) --> FIRST WORD OF ARRAY OF POINTS * * N --> NUMBER OF POINTS (X,Y PAIRS) * * M --> DISPLAY MODE * * P --> POWER FAIL INDICATOR SKP * TYPICAL BASIC PROGRAM * --------------------- * * 10 DIM A(400) * 15 VIDLU(12,0) * 20 FOR I=1 TO 400 STEP 2 * 30 A(I)=((I+1)/2)-1 * 40 A(I+1)=((I+1)/2)-1 * 50 NEXT I * 60 CALL PNTS(A(1),200,3,P) * 70 IF P#0 THEN 15 * 80 END * * THE ABOVE EXAMPLE CALLS THE POINT LIBRARY ROUTINE WITH 200 PAIRS * OF X & Y COORDINATES. IMPORTANT: WHEN SUPPLYING THE ARRAY * NAME, IT MUST BE SPECIFIED AS AN ARRAY. * * BRANCH & MNEMONIC TABLE CONSIDERATIONS * -------------------------------------- * * THE FOLLOWING TYPE OF ENTRY MUST BE MADE: * * FOR RTE-B: PNTS(R,I,I,V) * * FOR REAL TIME BASIC: PNTS(RA,I,I,IV) * * THE ENTRY POINT MUST BE 'PNTS' WITH FOUR PARAMETERS EXACTLY * AS SHOWN. SKP BUFER NOP REAL ARRAY ADRS FOR POINTS. NUMBR DEF B1 NUMBER OF (X,Y) POINTS. MODE DEF ZERO SCREEN DISPLAY MODE. PFL NOP POWER FAIL INDICATOR. SPC 1 PNTS NOP << ENTRY >> JSB .ENTR GET PARAMETER ADDRESSES. DEF BUFER SPC 1 LDA NUMBR,I SET USERS POINT COUNT. SZA,RSS IF =0, RETURN. JMP PNTS,I CMA,INA SET NEGATIVE. STA NUMBR LDA PFL TRANSFER POWER FAIL INDICATOR STA PFAIL ADDRESS FOR NEXT CALL. SPC 1 NEXTB LDA BUFAD INITIALIZE INTERNAL POINT BUFFER ADDRESS. STA BUF LDA M64 SET-UP LOOP STA COUNT CONTROL FOR 64 POINTS. CLA INITIALIZE ACTUAL BUFFER COUNT. STA NPT SPC 1 NEXTP JSB GETP GET A REAL X-COORDINATE & FIX. STA XY SAVE FOR LATER MERGE WITH Y-COORDINATE. JSB GETP GET A REAL Y-COORDINATE & FIX. ALF,ALF POSITION Y IN HIGH 8 BITS. IOR XY MERGE TO FORM (Y,X) STA BUF,I PUT AWAY IN INTERNAL BUFFER. ISZ NUMBR LAST USER POINT ? RSS NO. JMP DUMP YES, DUMP TO TV.? ISZ COUNT 64 PAIRS ? RSS JMP DUMP DUMP TO TV. ISZ BUF BUMP INTERNAL BUFFER ADDRESS. ISZ NPT UPDATE NUMBER OF POINTS. JMP NEXTP GET NEXT POINT. SPC 1 DUMP ISZ NPT UPDATE ACTUAL NUMBER OF POINTS. JSB POINT SEND DEF *+5 64 (OR LESS) DEF BUFFR PAIRS DEF NPT OF DEF MODE,I POINTS. PFAIL NOP SPC 1 LDA NUMBR TIME TO SZA,RSS GET OUT? JMP DONE YES! JMP NEXTB NO, START NEXT BUFFER. SKP DONE LDA DEFB1 RE-ESTABLISH DEFAULTS STA NUMBR / LDA DEF0 / STA MODE / CLA / STA PFL / JMP PNTS,I ALL FINISHED!! SPC 2 GETP NOP < GET NEXT REAL POINT & FIX > DLD BUFER,I GET THE FLOATING-POINT VALUE. JSB IFIX CONVERT TO INTEGER LDB BUFER UPDATE USER'S BUFFER ADDRESS. ADB .2 STB BUFER JMP GETP,I RETURN. SPC 2 DEFB1 DEF B1 B1 OCT 1 .2 DEC 2 XY NOP HOLDS FORMED (Y,X) POINT M64 DEC -64 MAXIMUM POINT CONTROL VALUE NPT NOP ACTUAL NUMBER OF POINTS IN BUFFER COUNT NOP BUFFER LOOP CONTROL VALUE DEF0 DEF ZERO ZERO OCT 0 BUF NOP USERS BUFFER ADDRESSR ADDRESS BUFAD DEF *+1 INTERNAL POINT BUFFER BUFFR BSS 64 POINT BUFFER AREA. SPC 1 END ASMB,L,C HED VIDEO CHARACTER GENERATOR SUBROUTINE A-91200-16002-2 * * NAME: CHARACTER GENERATOR OF VIDEO DISPLAY LIBRARY * SOURCE: 91200-18002 (FILE 3) * BINARY: 91200-16002 (MODULE 3) * PGMR: R.M.C. REV.C(1648) MADE BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * NAM CHAR,7 91200-16002 REV 1648 -- 761124 ENT CHAR,CH#R EXT .ENTR,DI[T,[TAB,VECTR SUP PRESS EXTRANEOUS LISTING SPC 1 XCHAR NOP "X" COORDINATE, LOWER LEFT POINT. YCHAR NOP "Y" COORDINATE, LOWER LEFT POINT. BUFAD NOP BEGINNING OF CHARACTER STRING. SIZE DEF ZERO CHARACTER SIZE (>0). ROT DEF ZERO 90 DEGREE ROTATION (0:3). LEN DEF ZERO STRING LENGTH PARAMETER. MODE DEF ZERO 0 TO WRITE, NON-0 TO ERASE. PFL NOP POWER FAIL INDICATOR. SPC 1 CHAR NOP ENTRY POINT. JSB .ENTR TRANSFER THE PARAMETER ADDRESSES. DEF XCHAR LDA ROT,I AND B3 MOD 4 STA ROT LDA PFL TRANSFER POWER FAIL INDICATOR STA PFAIL ADDRESS FOR NEXT CALL. LDA YCHAR,I RETRIEVE INITIAL Y AND STA YV X CO-ORDINATES FOR TRANSFER LDA XCHAR,I TO 'VECTR' SUBROUTINE. STA XV LDA SIZE,I LOAD THE CHARACTER SIZE. SSA IS THE CHARACTER SIZE NEGATIVE? JMP EXIT ERROR, RETURN; "CALL" REJECTED. SZA,RSS IF SIZE 0 OR DEFAULTED, CLA,INA SET TO SIZE 1 AND B77 LIMIT TO A REASONABLE VALUE. STA SIZE CCA STA PCT PRESET THE PARENS COUNT, STA CHCTR AND CHARACTER COUNT. LDA LEN,I SSA STRING DELIMITED BY PARENS JMP BYTAD WHEN LEN IS NEGATIVE.. SZA,RSS STRING LENGTH IN FIRST WORD LDA BUFAD,I WHEN LEN=0. AND B77 REMOVE POSS HIGH CHAR. STA PCT PROTECT AGAINST ALL ('S. CMA USUAL INA SUPPRESSED TO ALLOW STA CHCTR LATER TEST WITH ISZ. SKP LDA LEN,I SZA,RSS TEST AGAIN FOR 0 PARAMETER ISZ BUFAD & BUMP TO PASS OVER. SPC 1 BYTAD LDA BUFAD CLE,ELA FORM BYTE ADDRESS. STA BUFAD ISZ CHCTR SKIPS IF PARENS MODE RSS CHCTR IS SAFE, & INITIALLY, NCH ISZ BUFAD INCREMENT FOR THE NEXT CHARACTER. LDA BUFAD LOAD THE ADDRESS WORD. CLE,ERA SAVE BIT 0 IN "E"; SHIFT ADDRESS. LDA A,I GET THE CHARACTER WORD. SEZ,RSS IS THE CHARACTER IN BITS 15-8? ALF,ALF YES, SO SHIFT IT INTO BITS 7-0. LDB DI[T DICTIONARY PARAMETERS ADDRESS AND B,I MASK TO LOWER BYTE (7 OR 8 INB BITS AS DEFINED IN DICTIONARY). ADA B,I SUBTRACT BASE CODE OF TABLE. SSA IF THE CHAR CODE IS < THE BASE, JMP NCH IGNORE THIS CHARACTER. INB POINT TO TABLE LENGTH. ADA B,I IF THE CHARACTER IS STILL NOT SSA,RSS IN THE TABLE,THEN TRY TO ADA M40 FORCE LOWER CASE TO UPPER CASE. SSA,RSS IF STILL NOT IN THE TABLE, JMP NCH IGNORE THE CHARACTER. CMA,INA RESTORE DICTIONARY OFFSET IN ADA B,I A ROUND-ABOUT WAY CMA,INA CPA LPARC IS THIS CHARACTER A "("? JMP LPARN YES. CPA RPARC IS THIS CHARACTER A ")"? ISZ PCT YES. IS IT THE FINAL ONE? JMP D NO, CONTINUE. JMP EXIT YES, FINAL ")" SO RETURN. SPC 1 B3 OCT 3 B7 OCT 7 B17 OCT 17 B77 OCT 77 B777 OCT 777 M1 OCT -1 M40 OCT -40 LPARC ABS 50B-40B ( P NOP PCT NOP PARENTHESIS COUNTER. RPARC ABS 51B-40B ) SKP LPARN LDA PCT LOAD THE PARENTHESIS COUNTER. ADA M1 DECREMENT BY ONE(1). STA PCT STORE IT IN "PCT". LDA LPARC GET LPAREN CODE AGAIN D INB START OF DICTIONARY ADA B LDB A TEMP SAVE OF DICTIONARY ADDRESS. LDA B,I DICTIONARY CHARACTER CODE WORD. ALF NUMBER OF CONTROL WORDS TO 4 LSB. AND B17 MASK OFF BITS 3-0. CMA,INA NEGATE FOR COUNTING. CLE,ELA FORM THE BYTE COUNT. STA CCT PRESET TO -(# OF VECTORS). LDA B,I GET THE DICTIONARY WORD AGAIN. AND B777 MASK OFF THE RELATIVE ADDRESS. LDB [TAB ADD BEGINNING OF TABLE ADDRESS. ADA B CLE,ELA FORM THE BYTE ADDRESS STA P SAVE "A" AT "P". NCW LDB P CHARACTER ADDRESS OF COMMAND. ISZ P INCREMENT "P" FOR THE NEXT CODE. CLE,ERB FORM MEMORY ADDRESS OF COMMAND. LDB B,I LOAD THE WORD CONTAINING COMMAND. SEZ TEST THE COMMAND LOCATION. BLF,BLF SHIFT COMMAND TO BITS 15-8. RBL,RBL STB A AND B3 ORIGINAL CODE BITS 6,7 STA TYPE BLF,RBR STB A AND B7 ORIGINAL CODE BITS 3,4,5 ADA ROT CORRECT FOR STRING'S ROTATION ADA ROT AND B7 MAKE MOD 8 STA THETA BLF,RBR STB A AND B7 ORIGINAL CODE BITS 0,1,2 MPY SIZE STA VLEN JSB VOUT CCA SET XV NEGATIVE SO THAT NEXT STA XV VECTOR WILL BE APPENDED. ISZ CCT MORE COMMAND WORDS? JMP NCW GET EM. ISZ CHCTR MORE CHARACTERS? JMP NCH GET EM. SKP EXIT LDA B100K DO A COMPLETION CALL TO STA VLEN VECTOR. JSB VOUT LDA DZERO RESTORE DEFAULT PARAMETERS STA SIZE FOR NEXT ENTRY STA ROT STA VLEN STA MODE CLA STA PFL JMP CHAR,I SPC 1 VOUT NOP JSB VECTR DEF CHK DEF XV DEF YV DEF THETA DEF VLEN DEF TYPE DEF MODE,I DEF ZERO PFAIL NOP CHK JMP VOUT,I SPC 3 CCT NOP CODE COUNTER. ZERO OCT 0 B100K OCT 100000 DZERO DEF ZERO SPC 1 CHCTR NOP CHARACTER COUNT THETA NOP VECTOR ROTATION 0:7 TYPE NOP VECTOR CONTROL 'WORD' * 0 NON-WRITING * 1 SUPPRESS FIRST POINT * 2 WRITE ALL POINTS * 3 SUPPRESS FIRST & LAST POINTS. SPC 1 A EQU 0 B EQU 1 CH#R EQU CHAR XV EQU XCHAR YV EQU YCHAR VLEN EQU LEN SPC 2 END