;================================ ;================================ ; mockingboard interrupt handler ;================================ ;================================ ; On Apple II/6502 the interrupt handler jumps to address in 0xfffe ; This is in the ROM, which saves the registers ; on older IIe it saved A to $45 (which could mess with DISK II) ; newer IIe doesn't do that. ; It then calculates if it is a BRK or not (which trashes A) ; Then it sets up the stack like an interrupt and calls 0x3fe TIME_OFFSET EQU 13 interrupt_handler: ; pha ; save A ; 3 ; A is saved in $45 by firmware txa pha ; save X tya pha ; save Y inc $0404 ; debug (flashes char onscreen) bit $C404 ; clear 6522 interrupt by reading T1C-L ; 4 ; jmp exit_interrupt lda DONE_PLAYING ; 3 beq pt3_play_music ; if song done, don't play music ; 3/2nt jmp check_keyboard ; 3 ;============ ; 13 pt3_play_music: ; for(i=0;i < pt3.music_len;i++) { ; pt3_set_pattern(i,&pt3); ; for(j=0;j<64;j++) { ; if (pt3_decode_line(&pt3)) break; ; for(f=0;f 9:59 songs yet done_time: ;============= ; 90 worst ;================================= ; Moved visualization here as a hack ;================================= ;============================ ; Visualization ;============================ ; jsr clear_top ; lda RASTERBARS_ON ; beq skip_rasters ; jsr draw_rasters ;skip_rasters: ; jsr volume_bars ; jsr page_flip check_keyboard: jsr get_key lda LASTKEY beq exit_interrupt cmp #(' '+$80) bne key_R key_space: lda #$80 eor DONE_PLAYING jmp quiet_exit key_R: cmp #'R' bne key_left lda #$ff eor RASTERBARS_ON sta RASTERBARS_ON jmp done_key key_left: cmp #'A' bne key_right lda #$40 bne quiet_exit key_right: cmp #'D' bne done_key lda #$20 bne quiet_exit done_key: jmp exit_interrupt quiet_exit: sta DONE_PLAYING jsr clear_ay_both ;===================================== ; clear register area ;===================================== ldx #13 ; 2 lda #0 ; 2 mb_clear_reg: sta REGISTER_DUMP,X ; clear register value ; 4 dex ; 2 bpl mb_clear_reg ; 2nt/3 exit_interrupt: ; pla ; restore a ; 4 pla tay ; restore Y pla tax ; restore X lda $45 ; restore A rti ; return from interrupt ; 6 ;============ ; typical ; ???? cycles