Я пытаюсь переключить нормальный ход выполнения программы в то время как прерывание, возвращается:Модифицированный 6502 прерывания Возвращает
START
SEI
LDX #<IRQ
LDY #>IRQ
STX $FFFE
STY $FFFF
CLI
LOOP1
INC $D020
JMP LOOP1
LOOP2
INC $D021
JMP LOOP2
IRQ
STA SAVEA+1
STX SAVEX+1
STY SAVEY+1
// Some Routines
LDA #$00
PHA
LDA #<LOOP2
PHA
LDA #>LOOP2
PHA
SAVEA
LDA #$00
SAVEX
LDX #$00
SAVEY
LDY #$00
RTI
Я написал этот код accourding к этому источнику: http://6502.org/tutorials/interrupts.html#1.3
Но дело PHA в crash, как переключить нормальный поток LOOP1 на LOOP2 в прерывание?
@DavidHoelzer вы поняли код, что часть просто настройки прерываний, и две петли являются два процесса, которые он хочет, чтобы запланировать. Тем не менее, отключение дальнейших прерываний в обработчике звучит как хорошая идея. Кроме того, сохраненные вещи уже в стеке должны быть удалены, иначе вы получите переполнение стека, если вы просто продолжаете толкать вещи. Порядок тоже кажется неправильным, вам нужно использовать то же, что и на диаграмме. – Jester
О да, вы правы. Я пропустил < and > для кода IRQ. Прошло немало времени. :) –
Непонятно, пытаетесь ли вы манипулировать содержимым стека или писать самомодифицирующийся код. Вы нажали новый адрес возврата, но предыдущий все еще существует. У вас быстро закончится стек. Я предлагаю «PHA; ТХ; PHA; TSX', а затем модифицировать уложенный адрес возврата путем индексации 'X', до восстановления регистров и выполнения' RTI'. –