assembly - PET CBM C64 MOS6510 组装 在屏幕上打印出带有计算屏幕地址的字母?
问题描述
我是 C64 汇编程序编程的新手,我对保存和加载内存区域的过程有疑问。我担心以下问题:
lda #$01
sta $0400
将字母 A 放在屏幕的左上角
ldx #$00
lda #$01
sta $0400, x
有了这个,我可以使用 x 寄存器作为计数器,并且可以比较我使用循环的频率。
但现在我有一个 16 位计算(屏幕起始地址加上 xxx)并将结果存储在一个内存地址中,如 4000 美元和 4001 美元。如何使用这个值作为新的屏幕地址,在屏幕的计算区域上打印出字母 a?
解决方案
好的,现在我理解了(间接)的含义,Y 我的解决方案现在看起来像这样:
.var lines = $28 //40 characters
.var currentPos = $fd //save screen address
calcLine:
ldx #$05 //counter 5 backward
ldy #$00 //Sets carry to 0
lda #lines //A=40
asl //A=80
calc:
clc
adc #lines //A=120 (or $78 in hex)
bcc next //If carry, then increase
iny
next:
dex
cpx #$00
bne calc
sta currentPos //If carry, then increase
sty currentPos+1 //Save value if carry
//add screen start address ($0400)
clc
lda currentPos+1
adc #$04
sta currentPos+1
lda #$42 //the sign
sta (currentPos),y
推荐阅读
- reactjs - 如何以更短的方式赋予多个属性以响应组件?
- r - 在数据框行上运行 purrr::map_dfr?
- reactjs - ReactJS 在父类中使用子道具
- mingw - 使用 MinGw 平台和 MPICH、fftw lapack 和 BLAS 等库为 windows 编译 linux 程序 (OpenMX)?
- c++ - 带有 g++ 编译器的 OpenGL C++,无法在 Windows 10 上找到 GLFW(没有 Visual Studio)
- c# - 瞬时代码延迟?任务使用是否正确?
- ios - 多个 iOS 框架,如果主框架名称为“网络”,则嵌套“库未加载”问题
- unity3d - Unity 序列化和编码精灵
- python - 如何从具有基本身份验证的 url 中读取 cv2.imread
- .net - 然后包含在 Entity Framework .net core 2.0 中