; D:MYPLOT ; Plot a bit mapped graphics point COLGET = $88 COLPUT = $88 ROWGET = $89 ROWPUT = $89 HOLD1 = $8E HOLD2 = $8F SADRL = $90 SADRH = $91 BITPLT DS 1 PMASK DS 1 MYPLOT PROC STA BITPLT ;save bit to plot JSR MULT40 LDA COLPUT LSR A ;DIV by 4 LSR A STA HOLD1 CLC ADC SADRL ;screen addr lsb BCC :OVER INC SADRH ;screen addr msb :OVER STA SADRL LDA HOLD1 ASL A ;Mult by 4 ASL A STA HOLD1 ;get remainder of LDA COLPUT ;COL DIV by 4 SEC SBC HOLD1 TAX LDA #3 STA PMASK :NEXT CPX #3 ;shift plot val over BEQ :OUT ;by remainder value ASL BITPLT ASL BITPLT ASL PMASK ASL PMASK INX BPL :NEXT ;unconditional :OUT = * LDA SAVMSC CLC ADC SADRL ;add index into STA $92 ;screen to top of screen LDA SAVMSC+1 ADC SADRH STA $93 LDX #0 LDA PMASK ;complement mask EOR #$FF AND ($92,X) ;clear out plot bits ; allows ploting zeros ORA BITPLT ;reset to bitplot value STA ($92,X) RTS MULT = $8A MULTCD = $8B ;multiply ROW by 40 and store in shadow addr MULT40 PROC LDA ROWPUT STA MULTCD LDA #40 STA MULT LDA #0 STA SADRH LDX #8 :NEXT ASL A ROL SADRH ASL MULT BCC :SKIP CLC ADC MULTCD BCC :SKIP INC SADRH :SKIP DEX BNE :NEXT STA SADRL RTS MYGET PROC JSR MULT42 LDA COLGET LSR A ;DIV by 4 LSR A STA HOLD1 CLC ADC SADRL ;screen addr lsb BCC :OVER INC SADRH ;screen addr msb :OVER STA SADRL LDA HOLD1 ASL A ;Mult by 4 ASL A STA HOLD1 LDA COLGET SEC SBC HOLD1 STA HOLD2 TAX LDA #%00000011 :NEXT CPX #3 BEQ :OUT ASL A ASL A INX BPL :NEXT ;unconditional :OUT = * STA HOLD1 LDA SAVMSC CLC ADC SADRL STA $92 LDA SAVMSC+1 ADC SADRH STA $93 LDX #0 LDA HOLD1 AND ($92,X) LDX HOLD2 ;shift data back :NEXT2 CPX #3 ; down BEQ :EXIT LSR A LSR A INX BPL :NEXT2 ;unconditional :EXIT RTS MULT2 = $8C MLTCD2 = $8D MULT42 PROC LDA ROWGET STA MLTCD2 LDA #40 STA MULT2 LDA #0 STA SADRH LDX #8 :NEXT ASL A ROL SADRH ASL MULT2 BCC :OVER CLC ADC MLTCD2 BCC :OVER INC SADRH :OVER DEX BNE :NEXT STA SADRL RTS