早在2020年1月,我就开始为参加Forever 2020演示派对做准备。ROBO宣布了compo主题,因此我决定为Atari 65XE编写简单的作品。简介就绪后,我决定添加一个位图效果。遗憾的是,由于《永远》的取消,该简介的一部分已出版。Atari处理器是MOS 6502-8位寄存器,缺少用于访问硬件的端口。计算机的另一组件是ANTIC-它实现图像-颜色,视频模式,符号。有用于访问ANTIC的硬件单元,其用途在映射中进行了描述。 Atari我不会列出所有单元格的地址和目的地,我将描述效果本身的想法。应当注意,为方便起见,“映射”中的地址带有助记符-记住它们非常方便。什么是屏幕?在文本模式下,带有符号和框架的矩形是可见的。为了方便起见,可以通过将值0写入559来关闭矩形。如您所见,存在光栅效果的空间。现在,您需要将图形与输出同步到屏幕。有两种方法:RTCLOK equ $0012
lda RTCLOK+2
waits
cmp RTCLOK+2
beq waits
这里的RTCLOCK是计算机打开时开始的实时时钟。首先增加14美元,然后增加13美元和12美元。同步的想法很简单:将单元格$ 14的值与当前值进行比较。如果先前的值不匹配,则发生中断。但实际上,这种方法不合适,因此使用VCOUNT($ D40B)-框架上生成的线的垂直计数器会更方便。等待帧的开始将是:ws
lda $D40B ; VCOUNT
bne ws
这个想法本身就是将颜色值写入COLBK寄存器($ D01A)-框架的颜色。写入寄存器的值分为两部分:颜色类型和亮度,按类型* 16 +亮度计算。这里和这里详细介绍。但是,当为每行设置颜色时,需要进行同步-将任何值写入WSYNC(D40A)将使处理器停止运行,并使其等待下一行开始。显示列表中断中使用相同的方法。效果本身分为等待帧,生成颜色值并将其写入描述的寄存器中。为了简单起见,我使用零页面地址。您可以使用xasm汇编器进行编译。 org $4000
start
wait_frame
ws
lda $D40B ; VCOUNT
bne ws
LDY #0
STY 559
zz
LDA $CD
CLC
ADC #5
STA $CD
BCC BR1
INC $CE
BR1
ADC $CB
STA $CB
BCC BR2
INC $CC
BR2
LDA $CC
STA $D40A ; WSYNC
STA $D01A
INY
BNE zz
BEQ wait_frame
run start
原来是54个字节。54-6(程序标头)= 48个字节。有时间进行实验,例如玩绿色的亮度 lda $CC
;*
and #$0f
ORA #$C0
;*
sta $D40A ; wsync
sta $D01A
生成颜色的其他选项我将留给有兴趣的人自己动手。创建,试验和创建。太刺激了!