ROW     *       &AF     ;place row counter in zero page memory
OSRDCH  *       &FFE0   ;read character from console
OSNEWL  *       &FFE7   ;print newline to console
OSWRCH  *       &FFEE   ;print character in A to console
        ORG     &2000   ;reasonably available part of user memory
ARGYLL  LDAIM   &0C     ;ASCII control code FF
        JSR     OSWRCH  ;clear screen
        LDYIM   &13     ;set column number = 19 (descends to 1)
        STY     ROW     ;set row number = 19 (descends to 1)
CELL    TYA             ;column to A
D       TAX             ;save +/- column in X
        CLC             ;clear carry flag for add
        ADC     ROW     ;add row number (carry still clear)
        ADCIM   &80     ;add magic number (C=1 if negative):    
E       SBCIM   &06     ;modulo 6 by repeated subtraction
        BEQ     F       ;if no remainder then print star (NB A=0)
        BCS     E       ;otherwise subtract until borrow in
        TXA             ;nonzero remainder so invert column
        EORIM   &BF     ;another magic number
        BMI     D       ;if now negative, test for remainder
        LDAIM   &0A     ;else remainder either way, print space
F       EORIM   &2A     ;A=ASC"*" coming from E else A=ASC" "
        JSR     OSWRCH  ;print character in A
        DEY             ;decrement column number
        BNE     CELL    ;print next character if Y > 0
        JSR     OSNEWL  ;else print newline
        LDYIM   &13     ;reset column number
        DEC     ROW     ;decrement row number
        BNE     CELL    ;print next row if ROW > 0
        JMP     OSRDCH  ;get character from console and return
        END
