*A,10000 END *M ORG $1010 T1 =$D0 T2 =$D1 T3 =$D2 T4 =$D3 T5 =$D4 T6 =$D5 CHRST =$D6;2B CHRIX =$E8 REMA =$334;2B DIVIS =$336;2B QUOT =$338;2B DIVID =$33A;2B XCOORD=$33C YCOORD=$33D X1 =$33E Y1 =$33F XDIRE =$340 YDIRE =$341 IX =$342;2B IY =$344;2B LOOPN =$346 LOOPC =$347 XFRAC =$348 YFRAC =$349 WINDOW=$34A FUNCTI=$34B COLOR =$34C XWIND =$350;8B YWIND =$358;8B XMIND =$360;8B YMIND =$368;8B XSAVE =$370;8B YSAVE =$378;8B NPAR =$380 XPAR =$381 YPAR =$382 APAR =$383 JMP EXEC JMP BEGIN JUMPTB: WOR INITGR;0 WOR LINETO WOR SETWIN WOR SELWIN WOR PLOT WOR CLEARW WOR CLEARS WOR MOVETO WOR SAVEC WOR LOADC WOR SETFUN WOR SCREEN WOR PLOTS WOR TEXT WOR DRAWTX WOR BOX WOR COLOUR WOR DRAWCH;18 WOR READPX WOR CSET WOR INVERT WOR INVERN WOR OLD JMAX =22 BEGIN: JSR $802E LDA #LAST+2 STA 44 LDA #0 STA LAST+1 JSR $8117 JSR $8A7B JSR $80C2 JSR INITGR LDX #$80 JMP ($300) OLD: LDY #1 TYA STA ($2B),Y JSR $8818 JSR $884B STA $2F STY $30 STA $31 STY $32 RTS EXEC: LDA #0 STA NPAR STA XPAR STA YPAR STA APAR JSR GETPAR LDA NPAR CMP #JMAX+1 BCS EXEX ASLA TAX LDA JUMPTB,X STA GO+1 LDA JUMPTB+1,X STA GO+2 LDX XPAR LDY YPAR LDA APAR GO: JMP $FFFF EXEX: JMP $991C GETPAR: JSR $A897 STX NPAR JSR $A89D JSR $A897 STX XPAR JSR $A89D JSR $A897 STX YPAR JSR $A89D JSR $A897 STX APAR RTS INVERT: LDX WINDOW INVERN: LDA WINDOW PHA STX WINDOW LDA XMIND,X CLC SBC XWIND,X STA CHRST LDA YMIND,X SEC SBC YWIND,X STA CHRST+1 LDA FUNCTI PHA LDA #$40 STA FUNCTI INV1: LDX CHRST LDY #0 JSR MOVETO LDX CHRST LDY CHRST+1 JSR LINETO DEC CHRST BPL INV1 PLA STA FUNCTI PLA STA WINDOW RTS READPX: LDA #$4C STA FIXAD JSR PLOT PHP LDA #$20 STA FIXAD PLP BNE READ1 LDY T3 LDA BSET,Y STX T1 AND T1 RTS READ1: LDA #$80 RTS CSET: STX CBASE RTS COLOUR: STX COLOR PIXEX: RTS PLOT: TXA BMI PIXEX LDX WINDOW CLC ADC XWIND,X CMP XMIND,X BCS PIXEX TAX TYA BMI PIXEX LDY WINDOW CLC ADC YWIND,Y CMP YMIND,Y BCS PIXEX TAY JSR GETLOC JMP FIXLOC GETLOC: TYA AND #1 STA T3 TYA AND #$FE TAY LDA PTAB,Y STA T1 LDA PTAB+1,Y STA T2 TXA LSRA PHP CLC ADC T1 STA T1 BCC GET1 INC T2 GET1: PLP BCC GET2 LDA T3 ORA #2 STA T3 GET2: RTS FIXLOC: LDY #0 LDA (T1),Y FIXAD: JSR SEARCH BNE GET2 STX T4 LDY T3 BIT FUNCTI BMI FIX2 BVS FIX3 LDA BSET,Y ORA T4 JMP FUCK FIX2: LDA BCLR,Y AND T4 JMP FUCK FIX3: LDA BSET,Y EOR T4 AND #15 FUCK: TAX LDA PCDE,X LDY #0 STA (T1),Y LDA T2 EOR #4 STA T2 LDA COLOR STA (T1),Y RTS SEARCH: LDX #15 SEA0: CMP PCDE,X BEQ SEA1 DEX BPL SEA0 SEA1: RTS DIVID1: STA DIVID STY DIVID+1 STX DIVIS LDX #0 STX DIVIS+1 JSR DIVIDE LDA QUOT LDY QUOT+1 LDX REMA RTS DIVIDE: LDA #0 STA REMA STA REMA+1 STA QUOT STA QUOT+1 LDX #16 DIVID0: ASL DIVID ROL DIVID+1 ROL REMA ROL REMA+1 ROL QUOT ROL QUOT+1 SEC LDA REMA SBC DIVIS TAY LDA REMA+1 SBC DIVIS+1 BMI DIVID3 STA REMA+1 STY REMA INC QUOT BNE DIVID3 INC QUOT+1 DIVID3: DEX BNE DIVID0 RTS LINETO: STX X1 STY Y1 LDY #0 TXA SEC SBC XCOORD BPL LIN1 EOR #255 CLC ADC #1 INY LIN1: STA T3 STY XDIRE LDY #0 LDA Y1 SEC SBC YCOORD BPL LIN2 EOR #255 CLC ADC #1 INY LIN2: STA T4 STY YDIRE CMP T3 BCS LIN3 LDA T3 LIN3: STA LOOPN TAX LDA #0 LDY T3 JSR DIVID1 LDA QUOT STA IX LDA QUOT+1 STA IX+1 LDX LOOPN LDA #0 LDY T4 JSR DIVID1 LDA QUOT STA IY LDA QUOT+1 STA IY+1 LDA #0 STA XFRAC STA YFRAC LDA #0 STA LOOPC LINST: CMP LOOPN BEQ LINEX LDX XCOORD BIT XFRAC BPL LINS5 INX LINS5: LDY YCOORD BIT YFRAC BPL LINS6 INY LINS6: JSR PLOT LDA XDIRE BEQ POSITX LDA XFRAC SEC SBC IX STA XFRAC LDA XCOORD SBC IX+1 STA XCOORD JMP LINS9 POSITX: LDA XFRAC CLC ADC IX STA XFRAC LDA XCOORD ADC IX+1 STA XCOORD LINS9: LDA YDIRE BEQ POSITY LDA YFRAC SEC SBC IY STA YFRAC LDA YCOORD SBC IY+1 STA YCOORD JMP LINS10 POSITY: LDA YFRAC CLC ADC IY STA YFRAC LDA YCOORD ADC IY+1 STA YCOORD LINS10: INC LOOPC LDA LOOPC JMP LINST LINEX: RTS SETWIN: STX T1 TAX LDA XCOORD AND #$FE STA XWIND,X LDA YCOORD AND #$FE STA YWIND,X LDA T1 AND #$FE STA XMIND,X TYA AND #$FE STA YMIND,X RTS SELWIN: STX COLOR STY FUNCTI PHA JSR SAVEC PLA STA WINDOW JMP LOADC INITGR: LDA #0 STA WINDOW STA XWIND STA YWIND LDA #80 STA XMIND LDA #50 STA YMIND RTS CLEARW: LDX WINDOW CLEARS: STX T6 LDA YWIND,X TAY LDA XWIND,X TAX JSR GETLOC LDX T6 LDA YMIND,X SEC SBC YWIND,X LSRA STA YDIRE LDA XMIND,X CLC SBC XWIND,X LSRA STA XDIRE LDA YDIRE BEQ CLEA2 LDA PCDE+15 BIT FUNCTI BVS CLEA0 BMI CLEA0 LDA PCDE CLEA0: STA T3 CLEA1: LDY XDIRE BEQ CLEA2 CLEA3: LDA T3 STA (T1),Y LDA T2 TAX EOR #4 STA T2 LDA COLOR STA (T1),Y STX T2 DEY BPL CLEA3 LDA T1 CLC ADC #40 STA T1 BCC CLEA4 INC T2 CLEA4: DEC YDIRE BNE CLEA1 CLEA2: RTS SAVEC: LDX WINDOW LDA XCOORD STA XSAVE,X LDA YCOORD STA YSAVE,X RTS LOADC: LDX WINDOW LDA XSAVE,X STA XCOORD LDA YSAVE,X STA YCOORD RTS SETFUN: STX FUNCTI RTS MOVETO: STX XCOORD STY YCOORD RTS SCREEN: STX $FF15 STY $FF19 RTS DRAWTX: STX CHRST STY CHRST+1 STA IY JSR SAVEC LDY #0 DRAWED: STY CHRIX LDA (CHRST),Y BEQ DRAWEX JSR CHARAC LDY CHRIX INY BNE DRAWED DRAWEX: JMP LOADC DRAWCH: STY IY TXA CHARAC: STA DRAWL+1 LDA #0 STA DRAWL+2 ASL DRAWL+1 ROL DRAWL+2 ASL DRAWL+1 ROL DRAWL+2 ASL DRAWL+1 ROL DRAWL+2 LDA CBASE AND #$FC CLC ADC DRAWL+2 STA DRAWL+2 DRAW3: LDA YCOORD PHA LDY #7 DRAWL: LDA $FFFF BIT IY BVC DRAW55 EOR #255 DRAW55: STA IX LDA XCOORD PHA LDX #7 DRAW5: LDA BSET,X AND IX BEQ DRAW4 BIT IY BPL DRAW51 LDA #0 STA FUNCTI JMP DRAW51 DRAW4: BIT IY BPL DRAW52 LDA #$80 STA FUNCTI DRAW51: JSR PLOTS DRAW52: INC XCOORD DEX BPL DRAW5 PLA STA XCOORD INC YCOORD INC DRAWL+1 BNE DRAW6 INC DRAWL+2 DRAW6: DEY BPL DRAWL PLA STA YCOORD LDA IY AND #1 BEQ LEFRIG LDA YCOORD CLC ADC #8 STA YCOORD RTS LEFRIG: LDA XCOORD CLC ADC #8 STA XCOORD RTS PLOTS: TXA PHA TYA PHA LDX XCOORD LDY YCOORD JSR PLOT PLA TAY PLA TAX RTS TEXT: STX CHRST STY CHRST+1 LDX XCOORD LDY YCOORD JSR GETLOC LDY #0 TEXT1: LDA (CHRST),Y BEQ TEXT2 LDX FUNCTI CPX #$40 BCC TEXT3 EOR #128 TEXT3: STA (T1),Y INY BNE TEXT1 TEXT2: RTS BOX: STX CHRST STY CHRST+1 LDA YCOORD STA CHRIX LDA XCOORD STA T6 LDX CHRST LDY CHRIX JSR LINETO LDX CHRST LDY CHRST+1 JSR LINETO LDX T6 LDY CHRST+1 JSR LINETO LDX T6 LDY CHRIX JMP LINETO PTAB: WOR3072,3112,3152,3192,3232 WOR3272,3312,3352,3392,3432 WOR3472,3512,3552,3592,3632 WOR3672,3712,3752,3792,3832 WOR3872,3912,3952,3992,4032 BSET:BYT 1,2,4,8,16,32,64,128 BCLR:BYT $FE,$FD,$FB,$F7 BYT $EF,$DF,$BF,$7F PCDE: BYT 32 ,126,123,97 ,124,226 BYT 255,236,108,127,98 ,252 BYT 225,251,254,160 CBASE:BYT $D0 LAST: RES 1 *T