mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-13 12:56:30 +00:00
pt3: add support for scaling the frequencies from 1.77MHz to 1MHz
The ZX Spectrum (default for pt3 files) runs the AY-3-8910 at 1.77MHz. We do this by multiplying by 9/16 (which is a pain, but could be worse)
This commit is contained in:
parent
45f367f356
commit
0a84e76e4e
@ -47,20 +47,27 @@ Using the PT3_PLAYER
|
|||||||
|
|
||||||
The pt3_player.dsk should boot automatically.
|
The pt3_player.dsk should boot automatically.
|
||||||
|
|
||||||
Use the right/left arrow keys to switch songs.
|
Controls:
|
||||||
Press the space bar to pause playback.
|
Right/Left arrow Switch songs
|
||||||
|
Spacebar Pause playback.
|
||||||
|
M Switch from 1MHz to 1.77MHz mode
|
||||||
|
|
||||||
FUTURE FEATURES:
|
FUTURE FEATURES:
|
||||||
Key to disable visualization
|
Key to disable visualization
|
||||||
Key to skip ahead/back in pattern list
|
Key to skip ahead/back in pattern list
|
||||||
L to enable looping in the song
|
L to enable looping in the song
|
||||||
|
|
||||||
Known Bugs:
|
ZX Compatability:
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
Will try to display lowecase names on a II/II+
|
|
||||||
|
|
||||||
ZX Spectrum songs expect a 1.77MHz AY-3-8910, but
|
ZX Spectrum songs expect a 1.77MHz AY-3-8910, but the Apple II
|
||||||
the Apple II is 1MHz so song are higher(?) pitched
|
is 1MHz so by default songs would sound lower
|
||||||
|
pitched. By default now we multiply by 9/16 to scale
|
||||||
|
things properly, but that does eat up extra CPU cycles.
|
||||||
|
You can toggle this on/off by pressing "M" when playing.
|
||||||
|
|
||||||
|
In theory we can create songs that expect 1MHz, but the pt3 format
|
||||||
|
has no way of indicating this.
|
||||||
|
|
||||||
Adding other files
|
Adding other files
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -189,7 +189,7 @@ check_keyboard:
|
|||||||
beq exit_interrupt
|
beq exit_interrupt
|
||||||
|
|
||||||
cmp #(' '+$80)
|
cmp #(' '+$80)
|
||||||
bne key_R
|
bne key_M
|
||||||
key_space:
|
key_space:
|
||||||
lda #$80
|
lda #$80
|
||||||
eor DONE_PLAYING
|
eor DONE_PLAYING
|
||||||
@ -207,13 +207,26 @@ lowbar:
|
|||||||
|
|
||||||
jmp quiet_exit
|
jmp quiet_exit
|
||||||
|
|
||||||
key_R:
|
key_M:
|
||||||
cmp #'R'
|
cmp #'M'
|
||||||
bne key_left
|
bne key_left
|
||||||
|
|
||||||
lda #$ff
|
lda convert_177
|
||||||
eor RASTERBARS_ON
|
eor #$1
|
||||||
sta RASTERBARS_ON
|
sta convert_177
|
||||||
|
beq at_1MHz
|
||||||
|
|
||||||
|
lda #'7'+$80
|
||||||
|
sta $7F4
|
||||||
|
sta $BF4
|
||||||
|
jmp done_key
|
||||||
|
|
||||||
|
at_1MHz:
|
||||||
|
lda #'0'+$80
|
||||||
|
sta $7F4
|
||||||
|
sta $BF4
|
||||||
|
|
||||||
|
|
||||||
jmp done_key
|
jmp done_key
|
||||||
|
|
||||||
key_left:
|
key_left:
|
||||||
|
@ -1803,16 +1803,128 @@ do_frame:
|
|||||||
lda note_a+NOTE_TONE_H ; Note A Period H
|
lda note_a+NOTE_TONE_H ; Note A Period H
|
||||||
sta REGISTER_DUMP+1 ; into R1
|
sta REGISTER_DUMP+1 ; into R1
|
||||||
|
|
||||||
|
lda convert_177
|
||||||
|
beq no_scale_a
|
||||||
|
|
||||||
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
|
; first multiply by 8
|
||||||
|
asl REGISTER_DUMP+0
|
||||||
|
rol REGISTER_DUMP+1
|
||||||
|
asl REGISTER_DUMP+0
|
||||||
|
rol REGISTER_DUMP+1
|
||||||
|
asl REGISTER_DUMP+0
|
||||||
|
rol REGISTER_DUMP+1
|
||||||
|
|
||||||
|
; add in original to get 9
|
||||||
|
clc
|
||||||
|
lda note_a+NOTE_TONE_L
|
||||||
|
adc REGISTER_DUMP+0
|
||||||
|
sta REGISTER_DUMP+0
|
||||||
|
lda note_a+NOTE_TONE_H
|
||||||
|
adc REGISTER_DUMP+1
|
||||||
|
sta REGISTER_DUMP+1
|
||||||
|
|
||||||
|
; divide by 16 to get proper value
|
||||||
|
ror REGISTER_DUMP+1
|
||||||
|
ror REGISTER_DUMP+0
|
||||||
|
ror REGISTER_DUMP+1
|
||||||
|
ror REGISTER_DUMP+0
|
||||||
|
ror REGISTER_DUMP+1
|
||||||
|
ror REGISTER_DUMP+0
|
||||||
|
ror REGISTER_DUMP+1
|
||||||
|
ror REGISTER_DUMP+0
|
||||||
|
lda REGISTER_DUMP+1
|
||||||
|
and #$0f
|
||||||
|
sta REGISTER_DUMP+1
|
||||||
|
|
||||||
|
no_scale_a:
|
||||||
|
|
||||||
lda note_b+NOTE_TONE_L ; Note B Period L
|
lda note_b+NOTE_TONE_L ; Note B Period L
|
||||||
sta REGISTER_DUMP+2 ; into R2
|
sta REGISTER_DUMP+2 ; into R2
|
||||||
lda note_b+NOTE_TONE_H ; Note B Period H
|
lda note_b+NOTE_TONE_H ; Note B Period H
|
||||||
sta REGISTER_DUMP+3 ; into R3
|
sta REGISTER_DUMP+3 ; into R3
|
||||||
|
|
||||||
|
lda convert_177
|
||||||
|
beq no_scale_b
|
||||||
|
|
||||||
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
|
; first multiply by 8
|
||||||
|
asl REGISTER_DUMP+2
|
||||||
|
rol REGISTER_DUMP+3
|
||||||
|
asl REGISTER_DUMP+2
|
||||||
|
rol REGISTER_DUMP+3
|
||||||
|
asl REGISTER_DUMP+2
|
||||||
|
rol REGISTER_DUMP+3
|
||||||
|
|
||||||
|
; add in original to get 9
|
||||||
|
clc
|
||||||
|
lda note_b+NOTE_TONE_L
|
||||||
|
adc REGISTER_DUMP+2
|
||||||
|
sta REGISTER_DUMP+2
|
||||||
|
lda note_b+NOTE_TONE_H
|
||||||
|
adc REGISTER_DUMP+3
|
||||||
|
sta REGISTER_DUMP+3
|
||||||
|
|
||||||
|
; divide by 16 to get proper value
|
||||||
|
ror REGISTER_DUMP+3
|
||||||
|
ror REGISTER_DUMP+2
|
||||||
|
ror REGISTER_DUMP+3
|
||||||
|
ror REGISTER_DUMP+2
|
||||||
|
ror REGISTER_DUMP+3
|
||||||
|
ror REGISTER_DUMP+2
|
||||||
|
ror REGISTER_DUMP+3
|
||||||
|
ror REGISTER_DUMP+2
|
||||||
|
lda REGISTER_DUMP+3
|
||||||
|
and #$0f
|
||||||
|
sta REGISTER_DUMP+3
|
||||||
|
|
||||||
|
no_scale_b:
|
||||||
|
|
||||||
lda note_c+NOTE_TONE_L ; Note C Period L
|
lda note_c+NOTE_TONE_L ; Note C Period L
|
||||||
sta REGISTER_DUMP+4 ; into R4
|
sta REGISTER_DUMP+4 ; into R4
|
||||||
lda note_c+NOTE_TONE_H ; Note C Period H
|
lda note_c+NOTE_TONE_H ; Note C Period H
|
||||||
sta REGISTER_DUMP+5 ; into R5
|
sta REGISTER_DUMP+5 ; into R5
|
||||||
|
|
||||||
|
lda convert_177
|
||||||
|
beq no_scale_c
|
||||||
|
|
||||||
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
|
; first multiply by 8
|
||||||
|
asl REGISTER_DUMP+4
|
||||||
|
rol REGISTER_DUMP+5
|
||||||
|
asl REGISTER_DUMP+4
|
||||||
|
rol REGISTER_DUMP+5
|
||||||
|
asl REGISTER_DUMP+4
|
||||||
|
rol REGISTER_DUMP+5
|
||||||
|
|
||||||
|
; add in original to get 9
|
||||||
|
clc
|
||||||
|
lda note_c+NOTE_TONE_L
|
||||||
|
adc REGISTER_DUMP+4
|
||||||
|
sta REGISTER_DUMP+4
|
||||||
|
lda note_c+NOTE_TONE_H
|
||||||
|
adc REGISTER_DUMP+5
|
||||||
|
sta REGISTER_DUMP+5
|
||||||
|
|
||||||
|
; divide by 16 to get proper value
|
||||||
|
ror REGISTER_DUMP+5
|
||||||
|
ror REGISTER_DUMP+4
|
||||||
|
ror REGISTER_DUMP+5
|
||||||
|
ror REGISTER_DUMP+4
|
||||||
|
ror REGISTER_DUMP+5
|
||||||
|
ror REGISTER_DUMP+4
|
||||||
|
ror REGISTER_DUMP+5
|
||||||
|
ror REGISTER_DUMP+4
|
||||||
|
lda REGISTER_DUMP+5
|
||||||
|
and #$0f
|
||||||
|
sta REGISTER_DUMP+5
|
||||||
|
|
||||||
|
no_scale_c:
|
||||||
|
|
||||||
|
|
||||||
; Noise
|
; Noise
|
||||||
; frame[6]= (pt3->noise_period+pt3->noise_add)&0x1f;
|
; frame[6]= (pt3->noise_period+pt3->noise_add)&0x1f;
|
||||||
clc
|
clc
|
||||||
@ -1820,6 +1932,34 @@ do_frame:
|
|||||||
adc pt3_noise_add
|
adc pt3_noise_add
|
||||||
and #$1f
|
and #$1f
|
||||||
sta REGISTER_DUMP+6
|
sta REGISTER_DUMP+6
|
||||||
|
sta temp_word_l
|
||||||
|
|
||||||
|
lda convert_177
|
||||||
|
beq no_scale_n
|
||||||
|
|
||||||
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
|
; first multiply by 8
|
||||||
|
asl REGISTER_DUMP+6
|
||||||
|
asl REGISTER_DUMP+6
|
||||||
|
asl REGISTER_DUMP+6
|
||||||
|
|
||||||
|
; add in original to get 9
|
||||||
|
clc
|
||||||
|
lda temp_word_l
|
||||||
|
adc REGISTER_DUMP+6
|
||||||
|
|
||||||
|
; divide by 16 to get proper value
|
||||||
|
ror REGISTER_DUMP+6
|
||||||
|
ror REGISTER_DUMP+6
|
||||||
|
ror REGISTER_DUMP+6
|
||||||
|
ror REGISTER_DUMP+6
|
||||||
|
lda REGISTER_DUMP+6
|
||||||
|
and #$1f
|
||||||
|
sta REGISTER_DUMP+6
|
||||||
|
|
||||||
|
no_scale_n:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Mixer
|
; Mixer
|
||||||
@ -1847,13 +1987,51 @@ do_frame:
|
|||||||
clc
|
clc
|
||||||
lda pt3_envelope_slide_l
|
lda pt3_envelope_slide_l
|
||||||
adc temp_word_l
|
adc temp_word_l
|
||||||
; sta temp_word_l
|
sta temp_word_l
|
||||||
sta REGISTER_DUMP+11
|
sta REGISTER_DUMP+11
|
||||||
lda temp_word_h
|
lda temp_word_h
|
||||||
adc pt3_envelope_slide_h
|
adc pt3_envelope_slide_h
|
||||||
; sta temp_word_h
|
sta temp_word_h
|
||||||
sta REGISTER_DUMP+12
|
sta REGISTER_DUMP+12
|
||||||
|
|
||||||
|
lda convert_177
|
||||||
|
beq no_scale_e
|
||||||
|
|
||||||
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
|
; first multiply by 8
|
||||||
|
asl REGISTER_DUMP+11
|
||||||
|
rol REGISTER_DUMP+12
|
||||||
|
asl REGISTER_DUMP+11
|
||||||
|
rol REGISTER_DUMP+12
|
||||||
|
asl REGISTER_DUMP+11
|
||||||
|
rol REGISTER_DUMP+12
|
||||||
|
|
||||||
|
; add in original to get 9
|
||||||
|
clc
|
||||||
|
lda temp_word_l
|
||||||
|
adc REGISTER_DUMP+11
|
||||||
|
sta REGISTER_DUMP+11
|
||||||
|
lda temp_word_h
|
||||||
|
adc REGISTER_DUMP+12
|
||||||
|
sta REGISTER_DUMP+12
|
||||||
|
|
||||||
|
; divide by 16 to get proper value
|
||||||
|
ror REGISTER_DUMP+12
|
||||||
|
ror REGISTER_DUMP+11
|
||||||
|
ror REGISTER_DUMP+12
|
||||||
|
ror REGISTER_DUMP+11
|
||||||
|
ror REGISTER_DUMP+12
|
||||||
|
ror REGISTER_DUMP+11
|
||||||
|
ror REGISTER_DUMP+12
|
||||||
|
ror REGISTER_DUMP+11
|
||||||
|
lda REGISTER_DUMP+12
|
||||||
|
and #$0f
|
||||||
|
sta REGISTER_DUMP+12
|
||||||
|
|
||||||
|
no_scale_e:
|
||||||
|
|
||||||
|
|
||||||
; Envelope shape
|
; Envelope shape
|
||||||
lda pt3_envelope_type
|
lda pt3_envelope_type
|
||||||
cmp pt3_envelope_type_old
|
cmp pt3_envelope_type_old
|
||||||
|
@ -334,6 +334,20 @@ done_name_loop:
|
|||||||
sta CH
|
sta CH
|
||||||
jsr print_both_pages ; print, tail call
|
jsr print_both_pages ; print, tail call
|
||||||
|
|
||||||
|
; update the MHz indicator with current state
|
||||||
|
|
||||||
|
lda convert_177
|
||||||
|
beq set_1MHz
|
||||||
|
|
||||||
|
lda #'7'+$80
|
||||||
|
jmp done_MHz
|
||||||
|
|
||||||
|
set_1MHz:
|
||||||
|
lda #'0'+$80
|
||||||
|
done_MHz:
|
||||||
|
sta $7F4
|
||||||
|
sta $BF4
|
||||||
|
|
||||||
; Print Left Arrow (INVERSE)
|
; Print Left Arrow (INVERSE)
|
||||||
lda #'<'
|
lda #'<'
|
||||||
sta $6D0
|
sta $6D0
|
||||||
@ -592,5 +606,5 @@ found_message: .asciiz "FOUND"
|
|||||||
;done_message: .asciiz "DONE PLAYING"
|
;done_message: .asciiz "DONE PLAYING"
|
||||||
loading_message: .asciiz "LOADING"
|
loading_message: .asciiz "LOADING"
|
||||||
clock_string: .asciiz "0:00 / 0:00"
|
clock_string: .asciiz "0:00 / 0:00"
|
||||||
mhz_string: .asciiz "1.0MHZ"
|
mhz_string: .asciiz "1.7MHZ"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user