;;Screen print. Draws a pixel at a specified position. ;; Destroys A X Y .proc pixel_draw; Draws a pixel at [Y = FB , X = FC, FD]. Y = 0 - 320, X= 0 - 200 ;;write_byte = 00010000, LDA $FC ; X (mod 8) AND #%00000111 ;;Store pixel in byte TAX LDA #%10000000 INX tt: DEX BEQ end__;Y=0 end this CLC ROR A jmp tt end__: STA $FE ;;FIND THE POSITION IN MEMORY TO WRITE PIXEL ;; + + + + + > X ;; + ;; + ;;\/ ;; Y ;; ;; Let be this position in memory be stored in [$49, $4A] temporaraly ;;pos = x_offset LDA #%11111000 AND $FC STA $49 LDA $FD STA $4A ;;y_offset because chuncks aka y_offset_bc LDA #%00000111 ; A = y (mod 8) AND $FB ;;pos += y_offset_bc CLC ADC $49 STA $49 LDA #$00 ADC $4A STA $4A LDY $FB LDA #$00 STA $4B ;;y =8 translates to 320 bytes. LDA #%11111000 ; A = y - [y (mod 8)] AND $FB STA $FB ;;We need to A = A*40 =A * 2^3 * 5 ;;A = A*2^3 mult_16 $FB, $4B mult_16 $FB, $4B mult_16 $FB, $4B ;;*5 Add_16 $49, $4A, $FB, $4B Add_16 $49, $4A, $FB, $4B Add_16 $49, $4A, $FB, $4B Add_16 $49, $4A, $FB, $4B Add_16 $49, $4A, $FB, $4B STY $FB ;;add offset for where bitmap is Add_16 $49, $4A, #Bitmap ;;Let draw some stuff LDX #$00 LDA $FE ORA ($49, X) STA ($49, X) RTS .endproc