00001 *************************
00002 *
00003 * OUTPUT.ASM
00004 * MDJ 09-27-90
00005 *
00006 * DATA OUTPUT ROUTINES,
00007 * SCREEN AND PRINTER
00008 *
00009 *************************
00010 *
00011 * REQUIRES: DCHAR
00012 *           SCROLL
00013 *           KBDCNT
00014 *           KBDIN
00015 *
00016 *************************
00017 *
00018 DCHAR   EQU     $3F00   CHARACTER DISPLAY ROUTINE
00019 CLRCHR  EQU     $41D1   CLEAR CHARACTER ROUTINE
00020 CURSCT  EQU     $430D   CURSOR ADVANCE ROUTINE
00021 ADVCOD  EQU     $F7     ADVANCE CODE
00022 CRLF    EQU     $41FA   CARRAIGE RETURN/LINE FEED ROUTINE
00023 SCROLL  EQU     $3F33   SCREEN SCROLL ROUTINE
00024 CR      EQU     $0D     ENTER KEY ASCII CODE
00025 SKP2    EQU     $8C     SKIP TWO BYTES
00026 PIA1    EQU     $FF20   PERIPHERAL INTERFACE ADAPTER #1
00027 DA      EQU     $FF20   SYNONYM FOR PIA1
00028 LPTBTD  EQU     $95     BAUD RATE
00029 LPTLND  EQU     $97     PRINTER CARRIAGE RETURN DELAY
00030 LPTWID  EQU     $9B     PRINTER WIDTH
00031 LPTPOS  EQU     $9C     LINE PRINTER POSITION
00032         ORG     $45DC
00033 *
00034 *************************
00035 *
00036 * PUTCHR AND PUTCHF PUT
00037 * A SINGLE CHARACTER TO
00038 * THE SCREEN - PUTCHR
00039 * CLEARS THE CURSOR
00040 * POSITION FIRST WHILE
00041 * PUTCHF DOES NOT
00042 *
00043 * ON ENTRY, THE CHARACTER
00044 * (8-BIT) MUST BE ON TOP
00045 * OF THE U-STACK - XCURS
00046 * & YCURS MUST POINT TO
00047 * THE SCREEN LOCATION
00048 *
00049 * NOTHING RETURNED
00050 *
00051 *************************
00052 *
00053 PUTCHR  JSR     CLRCHR  INLINE PCHAR FOR SPEED
00054 PUTCHF  JSR     DCHAR   GO DISPLAY CHARACTER
00055         JMP     CURSCT  GO ADVANCE CURSOR
00056 *
00057 *************************
00058 *
 
 
 
 
 
 
 
 
00059 * PRTCHR OUTPUTS A SINGLE
00060 * CHARACTER TO THE
00061 * LINEPRINTER
00062 *
00063 * ON ENTRY, THE CHARACTER
00064 * (8-BIT) MUST BE ON TOP
00065 * OF THE U-STACK AND 
00066 * LPTBTD, LPTLND,LPTWID,
00067 * & LPTPOS MUST BE
00068 * PROPERLY DEFINED
00069 *
00070 * NOTHING RETURNED
00071 *
00072 * REF. PAGES A17 & A18
00073 * COLOR BASIC UNRAVELLED
00074 *
00075 *************************
00076 *
00077 PRTCHR  PSHS    A
00078         PULU    A       GET CHARACTER
00079         PSHS    A,B,X,CC
00080         ORCC    #$50    DISABLE INTERRUPTS
00081 LA2C3   LDB     PIA1+2  GET RS-232 STATUS
00082         LSRB            SHIFT STATUS BIT INTO CARRY
00083         BCS     LA2C3   LOOP UNTIL READY
00084         BSR     LA2FB   SET OUTPUT TO MARKING
00085         CLRB
00086         BSR     LA2FD   TRANSMIT ONE START BIT
00087         LDB     #8      SEND 8 BITS
00088 LA2C8   PSHS    B       SAVE BIT COUNTER
00089         CLRB            CLEAR DA IMAGE
00090         LSRA            ROTATE NEXT BIT TO CARRY
00091         ROLB            ROTATE CARRY INTO BIT ONE
00092         ASLB            SET ALL OTHER BITS TO ZERO
00093         BSR     LA2FD   TRANSMIT DATA BYTE
00094         PULS    B       GET BIT COUNTER
00095         DECB            SENT ALL 8 BITS?
00096         BNE     LA2C8   GO IF NO
00097         BSR     LA2FB   SEND STOP BIT (ACCB=0)
00098         PULS    A,CC    RESTORE OUTPUT CHARACTER AND
00099 *                         INTERRUPTS STATUS
00100         CMPA    #CR     IS IT CARRIAGE RETURN?
00101         BEQ     LA2ED   GO IF YES
00102         INC     LPTPOS  INCREMENT PRINTER POSITION
00103         LDB     LPTPOS  END OF LINE PRINTER LINE?
00104         CMPB    LPTWID
00105         BLO     LA2F3   GO IF NO
00106 LA2ED   CLR     LPTPOS  RESET PRINTER POSITION
00107         BSR     LA305
00108         BSR     LA305   DELAY FOR CARRIAGE RETURN
00109 LA2F3   LDB     PIA1+2  WAIT FOR HANDSHAKE
00110         LSRB            CHECK RS-232 STATUS
00111         BCS     LA2F3   LOOP UNTIL READY
00112         PULS    B,X
00113         PULS    A
00114         RTS
00115 LA2FB   LDB     #2      SET RS-232 OUTPUT HIGH (MARKING)
00116 LA2FD   STB     DA      STORE TO THE D/A CONVERTER
 
 
 
 
 
 
 
 
00117         BSR     LA302   GO WAIT AWHILE
00118 LA302   LDX     LPTBTD  GET BAUD RATE
00119         FCB     SKP2    SKIP NEXT TWO BYTES
00120 LA305   LDX     LPTLND  PRINTER CARRIAGE RETURN DELAY
00121 LA7D3   LEAX    -1,X    
00122         BNE     LA7D3
00123         RTS
00124 *
00125 *************************
00126 *
00127 * TYPER OUTPUTS A MESSAGE
00128 * TO THE SCREEN AFTER
00129 * CLEARING CHARACTER 
00130 * POSITIONS
00131 *
00132 * TYPEF OUTPUTS A MESSAGE
00133 * TO THE SCREEN WITHOUT
00134 * CLEARING CHARACTER
00135 * POSITIONS
00136 *
00137 * TYPEP OUTPUTS A MESSAGE
00138 * TO THE PRINTER
00139 *
00140 * ON ENTRY:
00141 *  THE MESSAGE LENGTH
00142 *   (16-BIT) MUST BE IN
00143 *   REGISTER X
00144 *  THE MESSAGE START
00145 *   LOCATION MUST BE IN
00146 *   REGISTER Y
00147 *
00148 * NOTHING RETURNED
00149 *
00150 * THE MESSAGE BYTES MAY
00151 * BE ANY 8-BIT NUMBER
00152 * (0-255) - LESS THAN 33
00153 * AND GREATER THAN 126
00154 * PRINT AS AN ASCII SPACE
00155 *
00156 *************************
00157 *
00158 TYPER   PSHS    B
00159 TYPER1  LDB     ,Y+     LOAD CHARACTER
00160         CMPB    #33     LOWEST PRINTABLE CHARACTER
00161         BLO     TYPER2  GO IF LOWER
00162         CMPB    #126    HIGHEST PRINTABLE CHARACTER
00163         BHI     TYPER2  GO IF HIGHER
00164         PSHU    B
00165         JSR     CLRCHR  INLINE PUTCHR FOR SPEED
00166         JSR     DCHAR
00167         JSR     CURSCT
00168         BRA     TYPER3
00169 TYPER2  JSR     CLRCHR  OUTPUT A SPACE
00170         JSR     CURSCT
00171 TYPER3  LEAX    -1,X    DECREMENT COUNT
00172         BNE     TYPER1  RETURN FOR NEXT CHARACTER
00173         PULS    B
00174         RTS
 
 
 
 
 
 
 
 
00175 TYPEF   PSHS    B
00176 TYPEF1  LDB     ,Y+     LOAD CHARACTER
00177         CMPB    #33     LOWEST PRINTABLE CHARACTER
00178         BLO     TYPEF2  GO IF LOWER
00179         CMPB    #126    HIGHEST PRINTABLE CHARACTER
00180         BHI     TYPEF2  GO IF HIGHER
00181         PSHU    B
00182         JSR     DCHAR   INLINE PUTCHF FOR SPEED
00183 TYPEF2  JSR     CURSCT
00184         LEAX    -1,X    DECREMENT COUNT
00185         BNE     TYPEF1  RETURN FOR NEXT CHARACTER
00186         PULS    B
00187         RTS
00188 TYPEP   PSHS    B
00189 TYPEP1  LDB     ,Y+     LOAD CHARACTER
00190         CMPB    #33     LOWEST PRINTABLE CHARACTER
00191         BHS     TYPEP2  GO IF HIGHER OR SAME
00192         CMPB    #126    HIGHEST PRINTABLE CHARACTER
00193         BLS     TYPEP2  GO IF LOWER OR SAME
00194         LDB     #32     LOAD SPACE CHARACTER
00195 TYPEP2  PSHU    B
00196         JSR     PRTCHR  GO PRINT CHARACTER ON LINEPRINTER
00197         LEAX    -1,X    DECREMENT COUNT
00198         BNE     TYPEP1  RETURN FOR NEXT CHARACTER
00199         PULS    B
00200         RTS
00201 *
00202 *************************
00203 *
00204 * CRLFS DOES A CRLF ON
00205 * THE SCREEN AND THEN
00206 * SCROLLS THE SCREEN IF
00207 * REQUIRED
00208 *
00209 * NO ENTRY CONDITIONS
00210 *
00211 * NOTHING RETURNED
00212 *
00213 *************************
00214 *
00215 CRLFS   PSHS    A
00216         JSR     CRLF    GO DO CARRIAGE RETURN/LINE FEED
00217         LDA     ADVCOD  GET ADVANCE CODE
00218         CMPA    #0      IS IT CLEAR?
00219         BEQ     CRLFS1  GO IF YES
00220         JSR     SCROLL  GO SCROLL THE SCREEN
00221         CLR     ADVCOD  DOUBLE CLEAR
00222 CRLFS1  PULS    A
00223 ZEND    RTS
00224         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
