*
*``````````````````````````````*
* TFILLA ::     TEXT FILL AREA *
*-                            -*
* FILLS A RECTANGULAR AREA OF  *
* THE SCREEN WITH THE DESIRED  *
* CHARACTER.                   *
*-                            -*
* CLOBBERS:                    *
*                              *
* FLAGS:  ???-----  REG: AXYM  *
*-                            -*
* CYCLES: ???                  *
* SIZE:                        *
*-                            -*
* USAGE:                       *
*        LDA (LEFT BOUND)      *
*        PHA                   *
*        LDA (UPPER BOUND)     *
*        PHA                   *
*        LDA (RIGHT BOUND)     *
*        PHA                   *
*        LDA (BOTTOM BOUND)    *
*        PHA                   *
*        LDA (FILL CHAR)       *
*        PHA                   *
*        JSR TFILLA            *
*-                            -*
* ENTRY                        *
*                              *
* TOP OF STACK                 *
*                              *
* LOW BYTE OF RETURN ADDRESS   *
* HI BYTE OF RETURN ADDRESS    *
* FILL CHAR (:FILL)            *
* BOTTOM BOUND (:BOTTOM)       *
* RIGHT BOUND (:RIGHT)         *
* TOP BOUND (:TOP)             *
* LEFT BOUND (:LEFT)           *
*-                            -*
* EXIT                         *
*                              *
* TOP OF STACK                 *
*                              *
* LOW BYTE OF RETURN ADDRESS   *
* HI BYTE OF RETURN ADDRESS    *
*                              *
*  A = LOW BYTE OF ADDRESS     *
*  X = COUNTER DATA; TRASH     *
*  Y = COUNTER DATA; TRASH     *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TFILLA
*
** SAVE RETURN ADDRESS
*
         PLA
         STA   RETADR
         PLA
         STA   RETADR+1
*
** LOAD PARAMETERS
*
         PLA
         STA   :F
         PLA
         STA   :Y2
         PLA
         STA   :X2
         PLA
         STA   :YC
         STA   :Y1
         PLA
         STA   :XC
         STA   :X1
*
********************************
*
** ERROR CONTROL
*
********************************
*
         LDA   ERRCTRL
         CMP   #1
         BEQ   :CHKERR
         JMP   :ERREND
:CHKERR
         LDA   :X1
         CMP   :X2        ; X1 => X2?
         BCS   :X1HI
         LDA   :Y1
         CMP   :Y2
         BCS   :Y1HI      ; Y1 => Y2?
         LDA   :X1
         CMP   #40
         BCS   :XOVF
         LDA   :X2
         CMP   #40
         BCS   :XOVF
         LDA   :Y1
         CMP   #24
         BCS   :YOVF
         LDA   :Y2
         CMP   #24
         BCS   :YOVF
         JMP   :ERREND
:X1HI
         _ERR  #:E_SID;#:E_X1H;#:E_DMP1;#:X1;#7
         JMP   :ERREND
:Y1HI
         _ERR  #:E_SID;#:E_Y1H;#:E_DMP1;#:X1;#7
         JMP   :ERREND
:XOVF
         _ERR  #:E_SID;#:E_XOF;#:E_DMP1;#:X1;#7
         JMP   :ERREND
:YOVF
         _ERR  #:E_SID;#:E_YOF;#:E_DMP1;#:X1;#7
*
********************************
*
:ERREND
*
********************************
*
*
:LP1
         LDA   :YC
         LDY   :XC
         JSR   $F847      ; GBASCALC
         LDA   :F
         STA   ($26),Y
         LDA   :YC
         INY
         STY   :XC
         CPY   :X2
         BNE   :LP1

*
         LDA   :X1
         STA   :XC
         INC   :YC
         LDA   :YC
         CMP   :Y2
         BNE   :LP1
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
         LDA   RETADR+1
         PHA
         LDA   RETADR
         PHA
*
         RTS
*
** DATA
*
:X1      DS    1
:X2      DS    1
:Y1      DS    1
:Y2      DS    1
:XC      DS    1
:YC      DS    1
:F       DS    1
*
:E_SID   ASC   "TFILLA (TFILL MACRO)",00
:E_DMP1  ASC   "DUMPING X1(1) X2(1) Y1(1) Y2(1)"
         ASC   "XC(1) YC(1) F(1)",00
:E_X1H   ASC   "X1 MUST BE LOWER THAN X2.",00
:E_Y1H   ASC   "Y1 MUST BE LOWER THAN Y2.",00
:E_XOF   ASC   "X <> MIN/MAX COLUMNS.",00
:E_YOF   ASC   "Y <> MIN/MAX ROWS",00
*
