0000        0100        .OPT NOEJECT            0105 ;            0110 ; ******************************            0115 ;            0120 ;  DIAMOND PATTERN FILL ROUTINE             0125 ;            0130 ;     (C)1984 BERNHARD ENGL            0135 ;            0140 ; ******************************            0145 ;            0150 ; FOR LIGHTPEN GRAPHICS DEMO.            0155 ; USE: LOCATE X,Y,A            0160 ; USR (ADR,SCREENAD,WORKAD,Y*256+X,A*256+C)            0165 ;0000        0170        *=    $D6            0175 ;00D6        0180 COLORS *=    *+1       FILL COLOR00D7        0185 COLORC *=    *+1       COLOR TO BE FILLED00D8        0190 TEMPX  *=    *+1       TEMPORARY X00D9        0195 TEMPY  *=    *+1       TEMPORARY Y00DA        0200 TABLE1 *=    *+2       BEGIN OF TABLE 100DC        0205 SCREEN *=    *+2       SCREEN START ADR00DE        0210 TABLE2 *=    *+2       BEGIN OF TABLE 200E0        0215 WORK1  *=    *+2       POINTER 100E2        0220 WORK2  *=    *+2       POINTER 200E4        0225 DIRC   *=    *+1       DIRECTION COUNT00E5        0230 PIXPNT *=    *+2       PIXEL POINTER00E7        0235 PIXIND *=    *+1       PIXEL INDEX00E8        0240 TEMP   *=    *+2       TEMPORARY WORD            0245 ;00EA        0250        *=    $63D            0255 ;063D A5E8   0260 ADD    LDA TEMP        PIXINT=PIXINT+TEMP063F 18     0265        CLC0640 65E5   0270        ADC PIXPNT0642 85E5   0275        STA PIXPNT0644 ASE9   0280        LDA TEMP+10646 65E6   0285        ADC PIXPNT+10648 85E6   0290        STA PIXPNT+1064A 60     0295        RTS            0300 ;064B B500   0305 ADV    LDA 0,X         ADVANCE POINTER Y BY 2064D 18     0310        CLC064E 6902   0315        ADC #20650 9500   0320        STA 0,X0652 9002   0325        BCC ADV10654 F601   0330        INC 1,X0656 60     0335 ADV1   RTS            0340 ;0657 C5DE   0345 COMP   CMP TABLE2      COMPARE A,X WITH TABLE20659 D002   0350        BNE COMP1065B E4DF   0355        CPX TABLE2+1065D 60     0360 COMP1  RTS            0365 ;065E 00     0370 DELTX  .BYTE 0,1,0,$FF065F 010660 000661 FF0662 01     0375 DELTY  .BYTE 1,0,$FF,00663 000664 FF0665 000666 C0     0380 MASK   .BYTE $C0,$0C,$30,$030667 0C0668 300669 03066A 00     0385 COLTAB .BYTE 0,$55,$AA,$FF066B 55066C AA066D FF            0390 ;066E A5DC   0395 FILL9  LDA SCREEN      CALC PIXEL ADR AND INDEX0670 A6DD   0400        LDX SCREEN+10672 85E5   0405        STA PIXPNT0674 86E6   0410        STX PIXPNT+10676 88     0415        DEY             ZERO Y0677 84E9   0420        STY TEMP+10679 84E7   0425        STY PIXIND067B ASD8   0430        LDA REMPX       GET PIXEL INDEX067D 4A     0435        LSR A067E 26E7   0440        ROL PIXIND0680 4A     0445        LSR A0681 26E7   0450        ROL PIXIND0683 85E8   0455        STA TEMP        ADD X/4 to SCREEN ADR0685 203D06 0460        JSR ADD0688 A5D9   0465        LDA TEMPY068A 85E8   0470        STA TEMP068C A205   0475        LDX #5068E 06E8   0480 FILL4  ASL TEMP        MULTIPLY Y BY 20690 26E9   0485        ROL TEMP+10692 E003   0490        CPX #30694 D003   0495        BNE FILLS0696 203D06 0500        JSR ADD         ADD Y*80699 CA     0505 FILL5  DEX069A D0F2   0510        BNE FILL4069C 203D06 0515        JSR ADD         ADD Y*32069F B1E5   0520        LDA (PIXPNT),Y  GET FOUR PIXELS   06A1 A6D7   0525        LDX COLORC      COLOR COMPARE06A3 5D6A06 0530        EOR COLTAB,X06A6 A6E7   0535        LDX PIXIND      ISOLATE PIXEL06A8 3D6606 0540        AND MASK,X06AB D022   0545        BNE FILL10      NOT RIGHT COLOR06AD BD6606 0550        LDA MASK,X      CHANGE PIXEL TO FILL COLOR06B0 48     0555        PHA06B1 A6D6   0560        LDX COLORS06B3 3D6A06 0565        AND COLTAB,X06B6 85E8   0570        STA TEMP06B8 68     0575        PLA06B9 49FF   0580        EOR #$FF06BB 31E5   0585        AND (PIXINT),Y06BD 05E8   0590        ORA TEMP06BF 91E5   0595        STA (PIXINT),Y06C1 A5D8   0600        LDA TEMPX       COORDINATES TO TABLE206C3 91E2   0605        STA (WORK2),Y06C5 A5D9   0610        LDA TEMPY06C7 C8     0615        INY06C8 91E2   0620        STA (WORK2),Y06CA A2E2   0625        LDX #WORK2      ADVANCE WORK206CC 204B06 0630        JSR ADV06CF 60     0635 FILL10 RTS            0640 ;06D0        0645        *=$4000            0650 ;            0655 ; MAIN ROUTINE (RELOCATABLE)            0660 ;4000 68     0665 FILL   PLA             PULL NO OF ARGS4001 A207   0670        LDX #7          PULL ARGUMENTS4003 68     0675	FILL1  PLA4004 95D6   0680        STA COLORS,X4006 CA     0685        DEX4007 10FA   0690        BPL FILL14009 A6DA   0695        LDX TABLE1      INIT TABLES AND POINTERS400B E8     0700        INX400C E8     0705        INX400D 86DE   0710        STX TABLE2400F A5DB   0715        LDA TABLE1+14011 8SDF   0720        STA TABLE2+14013 A5D8   0725        LDA TEMPX4015 A000   0730        LDY #04017 91DA   0735        STA (TABLE1),Y4019 ASD9   0740        LDA TEMPY401B C8     0745        INY401C 91DA   0750        STA (TEBLE1),Y401E A5DA   0755 FILL2  LDA TABLE1      PROCESS TABLE14020 A6DB   0760        LDX TABLE1+14022 85E0   0765        STA WORK14024 86E1   0770        STX WORK1+14026 A5DE   0775        LDA TABLE2      GENERATE TABLE24028 A6DF   0780        LDX TABLE2+1402A 85E2   0785        STA WORK2402C 86E3   0790        STX WORK2+1402E A903   0795 FILL7  LDA #3          FOUR DIRECTIONS FROM...4030 85E4   0800        STA DIRC        EACH PIXEL FROM TABLE14032 A000   0805 FILL3  LDY #0          GET COORDINATES...4034 B1E0   0810        LDA (WORK1),Y   AND ADD OFFSET4036 A6E4   0815        LDX DIRC4038 18     0820        CLC4039 7D5E06 0825        ADC DELTX,X403C C991   0830        CMP #145403E B012   0835        BCS FILL6       OUT OF RANGE4040 85D8   0840        STA TEMPX4042 C8     0845        INY4043 B1E0   0850        LDA (WORK1),Y4045 18     0855        CLC4046 7D6206 0860        ADC 4049 C960   0865        CMP #96404B B005   0870        BCS FILL6       OUT OF RANGE404D 85D9   0875        STA TEMPY404F 206E06 0880        JSR FILL94052 C6E4   0885 FILL6  DEC DIRC4054 19DC   0890        BPL FILL34056 A2E0   0895        LDX #WORK1      ADVANCE WORK14058 204B06 0900        JSR ADV405B A5E0   0905        LDA WORK1405D A6E1   0910        LDX WORK1+140SF 205706 0915        JSR COMP4062 D0CA   0920        BNE FILL7       WORK1<>TABLE24064 A5E2   0925        LDA WORK24066 A6E3   0930        LDX WORK2+14068 205706 0935        JSR COMP406B D001   0940        BNE FILL8       COORDINATES WERE GENERATED406D 60     0945        RTS             EXIT406E A5DA   0950 FILL8  LDA TABLE1      BUILD NEW TABLE1 FROM TABLE24070 A6DB   0955        LDX TABLE1+14072 85E0   0960        STA WORK14074 86E1   0965        STX WORK1+14076 A000   0970 FILL11 LDY #04078 B1DE   0975        LDA (TABLE2),Y407A 91E0   0980        STA (WORK1),Y407C C8     0985        INY407D B1DE   0990        LDA (TABLE2),Y407F 91E0   0995        STA (WORK1),Y4081 A2DE   1000        LDX #TEBALE 2   ADVANCE POINTERS4083 204B06 1005        JSR ADV4086 A2E0   1010        LDX #WORK14088 204B06 1015        JSR ADV408B A5E0   1020        LSA WORK2408D A6E3   1025        LDX WORK2+1408F 205706 1030        JSR COMP4092 D0E2   1035        BNE FILL11      TABLE END NOT REACHED4094 A5E0   1040        LDA WORK14096 A6E1   1045        LDX WORK1+14098 85DE   1050        STA TABLE2409A 86DF   1055        STX TABLE2+1409C D080   1060        BNE FILL2       ALWAYS409E        1065        .END