90 lines
No EOL
1.3 KiB
ArmAsm
Executable file
90 lines
No EOL
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 |