c64-livecoding/wip-hugo/routines/memory/pixel_draw.s

82 lines
1.3 KiB
ArmAsm
Executable file

;;Screen print. Draws a pixel at a specified position.
.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, #>Bitmap
;;Let draw some stuff
LDX #$00
LDA $FE
ORA ($49, X)
STA ($49, X)
RTS
.endproc