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 
                                                                        