tape interlock support, don't display PRESS PLAY if already pressed
This commit is contained in:
1 parent
b860322a09
commit
3416414e51
4 files changed
+35
-4
No files matched your search
@@ -151,8 +151,8 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on
|
|||||||
| `$FFF0` | `$E50A` | `PLOT` | DONE | |
|
| `$FFF0` | `$E50A` | `PLOT` | DONE | |
|
||||||
| `$FFF3` | | `IOBASE` | DONE | |
|
| `$FFF3` | | `IOBASE` | DONE | |
|
||||||
| `($FFFA)` | | NMI vec | PARTIAL | |
|
| `($FFFA)` | | NMI vec | PARTIAL | |
|
||||||
| `($FFFC)` | `$FCE2` | RESET vec | PARTIAL | |
|
| `($FFFC)` | `$FCE2` | RESET vec | PARTIAL | see IOINIT status |
|
||||||
| `($FFFE)` | | IRQ/BRK vec | PARTIAL | |
|
| `($FFFE)` | | IRQ/BRK vec | DONE | |
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@
|
|||||||
.label ROPRTY = $BD // tape / RS-232 temporary storage
|
.label ROPRTY = $BD // tape / RS-232 temporary storage
|
||||||
.label FSBLK = $BE // -- NOT IMPLEMENTED --
|
.label FSBLK = $BE // -- NOT IMPLEMENTED --
|
||||||
.label MYCH = $BF // -- NOT IMPLEMENTED --
|
.label MYCH = $BF // -- NOT IMPLEMENTED --
|
||||||
.label CAS1 = $C0 // -- NOT IMPLEMENTED --
|
.label CAS1 = $C0 // tape motor interlock
|
||||||
.label STAL = $C1 // $C1-$C2 LOAD/SAVE start address
|
.label STAL = $C1 // $C1-$C2 LOAD/SAVE start address
|
||||||
.label MEMUSS = $C3 // $C3-$C4 temporary address for tape LOAD/SAVE
|
.label MEMUSS = $C3 // $C3-$C4 temporary address for tape LOAD/SAVE
|
||||||
.label LSTX = $C5 // last keyy matrix position [!] our usage probably differs in details
|
.label LSTX = $C5 // last keyy matrix position [!] our usage probably differs in details
|
||||||
|
|||||||
@@ -5,6 +5,27 @@ default_irq_handler:
|
|||||||
jsr JSCNKEY
|
jsr JSCNKEY
|
||||||
jsr JUDTIM // update jiffy clock
|
jsr JUDTIM // update jiffy clock
|
||||||
|
|
||||||
|
#if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO
|
||||||
|
|
||||||
|
// Turn tape motor on/off depending on the button state
|
||||||
|
// For CAS1 (tape motor interlock) variable description, see Mapping the C64, page 7
|
||||||
|
|
||||||
|
lda CPU_R6510
|
||||||
|
and #$10
|
||||||
|
beq !+ // branch if tape button pressed
|
||||||
|
|
||||||
|
jsr tape_motor_off
|
||||||
|
lda #$00
|
||||||
|
sta CAS1
|
||||||
|
beq default_irq_handler_end_tape // branch always
|
||||||
|
!:
|
||||||
|
lda CAS1
|
||||||
|
bne default_irq_handler_end_tape
|
||||||
|
jsr tape_motor_on
|
||||||
|
|
||||||
|
default_irq_handler_end_tape:
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
// Acknowledge CIA interrupt and return
|
// Acknowledge CIA interrupt and return
|
||||||
jmp clear_cia1_interrupt_flag_and_return_from_interrupt
|
jmp clear_cia1_interrupt_flag_and_return_from_interrupt
|
||||||
|
|
||||||
@@ -84,6 +84,14 @@ tape_ask_play:
|
|||||||
|
|
||||||
sei // timing is critical for tape loading
|
sei // timing is critical for tape loading
|
||||||
|
|
||||||
|
// First check whether the button is already pressed
|
||||||
|
|
||||||
|
lda CPU_R6510
|
||||||
|
and #$10
|
||||||
|
beq tape_wait_play_done
|
||||||
|
|
||||||
|
// Turn off the motor, display message
|
||||||
|
|
||||||
jsr tape_motor_off
|
jsr tape_motor_off
|
||||||
|
|
||||||
ldx #__MSG_KERNAL_PRESS_PLAY
|
ldx #__MSG_KERNAL_PRESS_PLAY
|
||||||
@@ -110,6 +118,8 @@ tape_wait_play_loop:
|
|||||||
and #$10 // check for pressed button
|
and #$10 // check for pressed button
|
||||||
bne tape_wait_play_loop
|
bne tape_wait_play_loop
|
||||||
|
|
||||||
|
tape_wait_play_done:
|
||||||
|
|
||||||
jsr print_return
|
jsr print_return
|
||||||
jmp tape_screen_hide_motor_on
|
jmp tape_screen_hide_motor_on
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user