;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-

;;Screen print. Draws a pixel at a specified position.
.proc pixel_draw; user-procedure :clobbers (A X Y) :clobbers-arguments 0
;; Draws a pixel at Y_pos, X_pos se mem.inc
        .include "pixel.inc"
        Bitmap = $4000
        Bitmap_end = $5F3F
        ;; X = X_pos (mod 8)
	LDA X_pos ; X (mod 8)
	AND #%00000111
	TAX

	;;Store pixel in byte_to_paint
	LDA #%10000000
	INX
@shift_btp: ;; check out SMB instruction here! //Hugo
	DEX
	BEQ end__;X=0 end this
	CLC
	ROR A
	jmp @shift_btp
end__:
	STA byte_to_paint

	;;FIND THE POSITION IN MEMORY TO WRITE PIXEL
	;; + + + + + >  X
	;; +
	;; +
	;;\/
	;; Y
	;;

	;;pos = x_offset
	LDA #%11111000
	AND X_pos
	STA btp_mem_pos

	LDA X_pos + 1
	STA btp_mem_pos + 1

	;;The y_pos adds offset because chunk offsets + inside chunk offset.
	;; Adding inside chunk offset
	LDA #%00000111 ; A = y (mod 8)
	AND Y_pos ;; offset to add
	TAY

	LDA #$00
	STA $4B
	;;y =8 translates to 320 bytes.
	CLC
	LDA #%11111000 ; A =  y - [y (mod 8)]
	AND Y_pos
	STA C
	STA B
	LDA #$00
	STA C+1
	STA B+1

	;;We need to calculate C*40. 40 = 2*2*2*(2^2 +1)
	;; _*2^2
	Mult_16 C, C+1
	Mult_16 C, C+1

	;; + _*1
	Add_16 C, C+1, B, B+1, !

	;; *2*2*2
	Mult_16 C, C + 1
	Mult_16 C, C + 1
	Mult_16 C, C + 1

	Add_16 btp_mem_pos, btp_mem_pos + 1, C, C + 1, !

	;;add offset for where bitmap is
	Add_16 btp_mem_pos, btp_mem_pos + 1, #<Bitmap, #>Bitmap, !

	;;Let draw some stuff
	LDA byte_to_paint ;; note that both bytes are used!
	ORA (>btp_mem_pos), Y
	STA (>btp_mem_pos), Y
	RTS
.endproc