Я думаю, что команда Майкла верна; избегая использования «x» и «y» из-за потенциальных причин неоднозначности регистра, адрес $0200 + (q*32) + p
содержит пиксель в (p, q) для p и q в диапазоне от 0 до 31, и в каждом байте младшие четыре бита определяют цвет пикселя .
Так, например. $0200
— это пиксель в верхнем левом углу, $0201
— это пиксель справа от верхнего левого угла, а $0220
— это пиксель в верхнем левом углу.
В терминах 6502 возможная прямая реализация общей подпрограммы построения графика может использовать индексированную косвенную адресацию, сохраняя $0200 + (q*32)
в ячейке с нулевой страницей, а затем индексируя p
для достижения определенной горизонтальной позиции в этой строке. Неожиданно и без проверки того, какой именно синтаксис использует этот ассемблер, и жесткого кодирования использования адресов нулевой страницы $80 и $81:
;
; Plot; stores the colour in A to the pixel at (y, x).
; So, yes: x and y are backwards.
;
; Clobbers x.
;
Plot:
; Arbitrarily, this adds x to ($200 >> 5) and
; then shifts the whole lot left by 5. That's
; rather than shifting x by 5 and then doing a
; one-byte add to the upper byte, I guess.
pha
txa
clc
adc #$10 ; $10 = $200 >> 5
sta $80
lda #$00
sta $81
; Multiply by 32. You could unroll this if
; that's what your priorities imply.
ldx #5
.rollLoop
asl $80
rol $81
dex
bne rollLoop
pla
sta ($80), y
rts
person
Tommy
schedule
16.02.2021