0100 ;   FILL ROUTINE USING CIO›0110 ;›0120 ;  CIO EQUATES USED›0130 ;›0140 CIO =   $E456›0150 ICCOM = $0342›0160 ICBLEN = $0348›0170 CGBINR = $07    ; GET BINARY RECORD›0180 CPBINR = $0B    ; PUT BINARY RECORD›0190 ;›0200 BUFA =  $CB     ; ADRESSES FOR IND,Y›0210 BUFB =  $CD     ; ADDRESSING FOR›0220 BUFC =  $CF     ; PIXEL COORDINATE›0230 BUFD =  $D4     ; STORAGE›0240 ;›0250 XPOS =  $55     ; X COORDINATE see OS›0260 YPOS =  $54     ; Y COORDINATE  "  "›0270 ;›0280 COLOR = $D1     ; COLOR TO PLOT›0290 ;›0300 ; THE FOLLOWING LOCATIONS CAN ONLY›0310 ; BE USED TEMPORARILY, BECAUSE THEY›0320 ; ARE RESERVED FOR THE FLOATING POINT›0330 ; ROUTINES.›0340 ;›0350 COLOVER = $E6   ; COLOR TO COVER›0360 COUNTNEW = $E7  ; # NEW PIXELS›0370 COUNTOLD = $E8  ; # PIXELS TO TEST›0380 ;                 AROUND›0390 XPSTOR = $E9    ; STORE ORIGINAL XPOS›0400 YPSTOR = $EA›0410 XP  =   $D6     ; X COORDINATE›0420 YP  =   $D7     ; Y COORDINATE›0430 TEM =   $EB     ; TO STORE Y INDEX›0440 ;›0450 ;  THE FILL ROUTINE USES PAGE 6›0460 ;›0470     *=  $0600›0480 ;›0490     PLA ›0500     PLA ›0510     PLA         ; THE COLOR TO PLOT›0520     STA COLOR›0530     LDA $06FE   ; BUFD ADDRESS STORED›0540     STA BUFD    ; HERE BECAUSE OF THE›0550     LDA $06FF   ; LIMITED FREE SPACE›0560     STA BUFD+1  ; IN PAGE 0›0570 ;›0580     LDA #0›0590     STA COUNTNEW ; INITIALIZATION›0600     LDY #1      ; ONE PIXEL FIRST TIME›0610     LDA XPOS    ; FROM O.S.›0620     STA (BUFA),Y›0630     STA XPSTOR›0640     STA XP      ; FOR THE FIRST LOCATE›0650     LDA YPOS    ; FROM O.S.›0660     STA (BUFB),Y›0670     STA YPSTOR›0680     STA YP      ; FOR THE FIRST LOCATE›0690     STY COUNTOLD ; ONE PIXEL›0700     JSR LOCATE  ; GET COLOR TO COVER›0710     STA COLOVER›0720     CMP COLOR   ; ITSELF ?›0730     BNE PRELOOP›0740     RTS         ; IF ITSELF QUIT OR GET›0750 ;                 INFINITE LOOP !›0760 ;›0770 PRELOOP JSR PLOT›0780 LOOP LDA (BUFA),Y›0790     STA XP      ; X FOR CURRENT PIXEL›0800     LDA (BUFB),Y›0810     STA YP      ; Y FOR CURRENT PIXEL›0820 ;›0830 LOOP0 INC XP    ; TEST TO RIGHT›0840     LDA XP›0850     CMP #80     ; RHS LIMIT TO SCREEN›0860     BCS LOOP1›0870     JSR LOCATE  ; IF WITHIN SCREEN›0880 ;                 THEN SEE IF THE PIXEL›0890 ;                 CONTAINS THE COLOR TO›0900 ;                 BE OVERWRITTEN. THE›0910 ;                 LOCATE ROUTINE›0920 ;                 CONTAINS THE COMPARE.›0930 ;›0940     BNE LOOP1›0950     JSR KEEP    ; PLOT IT AND MARK IT›0960 ;                 FOR ITS OWN TEST›0970 ;                 NEXT TIME THROUGH THE›0980 ;                 LIST OF LOCATIONS.›0990 ;›1000 LOOP1 DEC XP›1010     DEC XP›1020     LDA XP›1030     CMP #255    ; CHECK SCREEN LHS›1040     BEQ LOOP2›1050     JSR LOCATE›1060     BNE LOOP2›1070     JSR KEEP›1080 ;›1090 LOOP2 INC XP›1100     INC YP      ; TEST BELOW›1110     LDA YP›1120     CMP #80     ; BOTTOM OF SCREEN›1130     BCS LOOP3›1140     JSR LOCATE›1150     BNE LOOP3›1160     JSR KEEP›1170 ;›1180 LOOP3 DEC YP›1190     DEC YP›1200     LDA YP›1210     CMP #255›1220     BEQ LOOP4›1230     JSR LOCATE›1240     BNE LOOP4›1250     JSR KEEP›1260 ;›1270 LOOP4 DEC COUNTOLD›1280     BEQ DONELOOP ; ALL POINTS DONE›1290     INY         ; ELSE DO NEXT POINT›1300     JMP LOOP›1310 ;›1320 DONELOOP LDY COUNTNEW›1330     BEQ RETURN0 ; IF NO NEW POINTS›1340 ;                 IN THE COLOR TO›1350 ;                 COVER REMAIN›1360 ;›1370     STY COUNTOLD ; THIS BECOMES THE›1380 ;                  NEW # PIXELS TO›1390 ;                  PLOT AND TEST›1400 ;›1410 TRANSFER LDA (BUFD),Y›1420     STA (BUFB),Y›1430     LDA (BUFC),Y›1440     STA (BUFA),Y›1450     DEY ›1460     BNE TRANSFER ; MOVE BUFFERS›1470     LDY #1›1480     LDA #0›1490     STA COUNTNEW ; INITIALIZE›1500     JMP LOOP    ; BEGIN AGAIN›1510 ;›1520 ;   THE SUBROUTINES›1530 ;›1540 KEEP JSR PLOT   ; Y REG. IN TEM›1550     INC COUNTNEW›1560     BEQ RETURN2 ; BUFFER OVERFLOWS›1570     LDY COUNTNEW›1580     LDA XP      ; STORE THE COORD.›1590     STA (BUFC),Y ; OF THIS PIXEL›1600     LDA YP      ; FOR PLOTTING AND›1610     STA (BUFD),Y ; TESTING.›1620     LDY TEM     ; RECOVER Y REG.›1630     RTS ›1640 ;›1650 LOCATE JSR POS›1660     LDA #CGBINR›1670     STA ICCOM,X›1680     JSR CIO     ;  CIO LOCATE›1690     LDY TEM›1700     CMP COLOVER ; PIXEL IN A REG.›1710     RTS ›1720 ;›1730 POS STY TEM›1740     LDA XP›1750     STA XPOS    ; POSITION X›1760     LDA YP›1770     STA YPOS    ; AND Y›1780     LDX #$60    ; TO USE IN LOCATE›1790     LDA #0      ; AND IN PLOT›1800     STA ICBLEN,X ; ONE PIXEL AS›1810     STA ICBLEN+1,X ; IN ACCUM.›1820     RTS ›1830 ;›1840 PLOT JSR POS›1850     LDA #CPBINR›1860     STA ICCOM,X›1870     LDA COLOR   ; THE ONE TO PLOT›1880     JSR CIO›1890     LDY TEM›1900     RTS ›1910 ;›1920 RETURN0 LDA YPSTOR›1930     STA YPOS›1940     LDA XPSTOR›1950     STA XPOS›1960     RTS ›1970 ;›1980 RETURN2 JSR RETURN0›1990     PLA         ; WE EXITED A SUBROUTINE›2000     PLA         ; SO POP RETURN ADDRESS›2010     RTS         ; TO BASIC›2020 ;›2030 ;   TO USE FOR ANY GRAPHICS›2040 ;   MODE OTHER THAN 8, FIX›2050 ;   THE SCREEN LIMIT TESTS.›