assembly 如何正确使用6502汇编程序中的中断处理程序?

yhxst69z  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(161)

我是汇编程序的新手,所以这个问题可能听起来很愚蠢,但是在光栅中断处理程序中应该实现什么类型的代码呢?
所以我知道这个处理程序在所需的光栅线被渲染时被调用。但这似乎只发生一次(如果我确认中断)。除非我清除屏幕或重绘相关部分,否则处理程序例程不会被再次调用,对吗?
那么使用中断的意义何在呢?
如果有这样的主循环:

main
  jsr readKeyboard
  jsr readJoystick
  ...
  jmp main

......那么我就有了一个无限循环来监控一切,所以我不明白使用中断做什么?
我的意思是,我认为中断可以用来实现一个事件系统。它们消除了轮询的需要和等待CPU周期的浪费。但是如果它们只发生一次,那么这是不可能的。

interruptHandler
  inc $d019 ; acknowledge
  ...
  ; do the work
  jmp $ea81

如果我这样确认,这个方法只被调用一次,如果我不这样做,它会被一遍又一遍地调用。
所以请帮助我理解这里的概念。
中断的正确使用方法是什么?它们适用于什么功能?什么时候应该使用它们?
谢谢!

1sbrub3j

1sbrub3j1#

如果我这样确认,这个方法只被调用一次,如果我不这样做,它会被一遍又一遍地调用。
看起来你正在期待并处理一个VIC-II中断。Commodore 64将VIC-II的中断线连接到6502的IRQ。VIC-II保持中断线直到中断被确认。
在6502上,IRQ是这样的,只要IRQ有效,除非中断已被禁用,否则IRQ例程将被调用。
这两个事实意味着,如果您不确认VIC-II的中断,那么一旦中断处理程序结束(这通常会隐式地重新启用中断),它将重新开始,因为VIC-II仍在Assert中断请求。
这些都已在答复我的问题时解释过
如果你确认了中断,那么当中断处理程序结束时,它会把控制权交还给中断发生时正在运行的代码。当然,一段时间后,中断可能会再次触发。一个未受干扰的光栅中断每秒会触发50次(至少在我的国家是这样)。
还有一个小问题这不是一个方法,而是一个中断处理程序。

相关问题