mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-13 04:05:15 +00:00
chiptune_debug: update the tests with current understanding
This commit is contained in:
parent
4e3481b91a
commit
30ffba8a55
@ -72,3 +72,22 @@ $3c by itself = fine
|
||||
50/3c and 50/32 also have issues, but not quite the same
|
||||
(Some, audio fading instead of glitch?)
|
||||
|
||||
|
||||
Got new AY-3-8913 chips
|
||||
Tried looking at the timings.
|
||||
8913 timings are actually worse in some cases (especially writes)
|
||||
than 8910, though still in the low us range so we shouldn't be
|
||||
hitting it?
|
||||
|
||||
The programming manual and timing diagrams hint that you can flip
|
||||
the address_latch / address ordering when writing. This does
|
||||
work on real hardware but not in any of the emulators.
|
||||
|
||||
Have a new test, chiptune_smallest:
|
||||
+ No IRQ, plain busy wait at 20ms
|
||||
+ No lookups, hardcode the $51 to $3c transition
|
||||
|
||||
Still shows the glitch, actually very quickly.
|
||||
Changes made to test this:
|
||||
+ Try increasing the WAIT delay from 85 to 120
|
||||
(still an issue)
|
||||
|
@ -205,14 +205,16 @@ reset_ay_right:
|
||||
|
||||
write_ay_address_right:
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_2_ORB ; latch_address on PB1 ; 3
|
||||
|
||||
; address
|
||||
stx MOCK_6522_2_ORA ; put address on PA1 ; 3
|
||||
; on AY-3-8913 hold 300ns
|
||||
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_2_ORB ; latch_address on PB1 ; 3
|
||||
|
||||
|
||||
|
||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sta MOCK_6522_2_ORB ; 3
|
||||
|
||||
|
@ -4,7 +4,12 @@
|
||||
MB_CHUNK_OFFSET = $94
|
||||
MB_VALUE = $91
|
||||
|
||||
WAIT = $FCA8
|
||||
WAIT = $FCA8 ; 1/2(26+27A+5A^2) us
|
||||
; 85 = 19.223ms
|
||||
; 86 = 19.6ms
|
||||
; 87 = 20.11ms
|
||||
; 120 = 37.6ms
|
||||
; 240 = 147.25ms
|
||||
|
||||
; left channel
|
||||
MOCK_6522_1_ORB = $C400 ; 6522 #1 port b data
|
||||
@ -115,15 +120,6 @@ reset_ay_right:
|
||||
nop
|
||||
nop
|
||||
|
||||
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
|
||||
;=========================
|
||||
; Setup initial conditions
|
||||
;=========================
|
||||
@ -156,49 +152,28 @@ reset_ay_right:
|
||||
|
||||
main_loop:
|
||||
|
||||
|
||||
;======================================
|
||||
; Write frames to Mockingboard
|
||||
;======================================
|
||||
; actually plays frame loaded at end of
|
||||
; last interrupt, so 20ms behind?
|
||||
|
||||
mb_write_frame:
|
||||
|
||||
ldy MB_CHUNK_OFFSET
|
||||
|
||||
|
||||
; 4: C CHANNEL FINE
|
||||
lda c_fine,Y
|
||||
lda #$51
|
||||
sta MB_VALUE
|
||||
; ldx #4
|
||||
jsr write_ay_value_right
|
||||
|
||||
increment_offset:
|
||||
inc MB_CHUNK_OFFSET ; increment offset
|
||||
lda MB_CHUNK_OFFSET
|
||||
; delay ~20ms
|
||||
lda #87
|
||||
jsr WAIT ; wait 20ms or so
|
||||
|
||||
and #$1 ; reduce number played
|
||||
; $f = 16
|
||||
; $3 = 4
|
||||
; $1 = 2
|
||||
; $0 = 1
|
||||
|
||||
sta MB_CHUNK_OFFSET
|
||||
lda #$3C
|
||||
sta MB_VALUE
|
||||
jsr write_ay_value_right
|
||||
|
||||
|
||||
;============================
|
||||
; delay 20ms?
|
||||
;============================
|
||||
lda #85
|
||||
; delay ~20ms
|
||||
lda #87
|
||||
jsr WAIT ; wait 20ms or so
|
||||
|
||||
jmp main_loop
|
||||
|
||||
|
||||
|
||||
; Write sequence
|
||||
; Inactive -> Latch Address -> Inactive -> Write Data -> Inactive
|
||||
|
||||
|
||||
;=========================================
|
||||
; Write Right/Left to save value AY-3-8910
|
||||
@ -206,46 +181,43 @@ increment_offset:
|
||||
; register in X
|
||||
; value in MB_VALUE
|
||||
|
||||
; Write sequence
|
||||
; ADDRESS: Inactive -> Latch Address -> Addr -> Inactive
|
||||
; Programming manual (as well as timing diagrams)
|
||||
; say you can flip latch / addr order, but the simulators
|
||||
; don't like that.
|
||||
; Value: Inactive -> Data -> Write Data -> Inactive
|
||||
;
|
||||
|
||||
|
||||
write_ay_address_right:
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_2_ORB ; latch_address on PB1 ; 3
|
||||
|
||||
; address
|
||||
stx MOCK_6522_2_ORA ; put address on PA1 ; 3
|
||||
; on AY-3-8913 hold 300ns
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_2_ORB ; latch_address on PB1 ; 3
|
||||
; on AY-3-8913 hold 300ns, on AY-3-8910 hold 400ns
|
||||
|
||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sta MOCK_6522_2_ORB ; 3
|
||||
|
||||
; on AY-3-8913 hold at least 50ns
|
||||
; on AY-3-8913 hold 50ns, on AY-3-8910 hold 100ns
|
||||
|
||||
|
||||
write_ay_value_right:
|
||||
|
||||
lda MB_VALUE ; 3
|
||||
sta MOCK_6522_2_ORA ; put value on PA2 ; 3
|
||||
; AY-3-8913 must hold 50ns
|
||||
sta MOCK_6522_2_ORA ; put value on PA2 ; 4
|
||||
; AY-3-8913 + AY-3-8910: 50ns
|
||||
; presumably the next two instructions take 6*1us so plenty of time
|
||||
|
||||
lda #MOCK_AY_WRITE ; ; 2
|
||||
sta MOCK_6522_2_ORB ; write on PB2 ; 3
|
||||
; AY-3-8913 must hold 1800ns
|
||||
sta MOCK_6522_2_ORB ; write on PB2 ; 4
|
||||
; AY-3-8913 hold 1800ns, AY-3-8910 500ns
|
||||
|
||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sta MOCK_6522_2_ORB ; 3
|
||||
; AY-3-8913 must hold 100ns
|
||||
|
||||
sta MOCK_6522_2_ORB ; 4
|
||||
; AY-3-8913 + AY-3-8910: 100ns
|
||||
|
||||
rts ; 6
|
||||
;===========
|
||||
; 53
|
||||
|
||||
c_fine:
|
||||
|
||||
.byte $51,$3c
|
||||
;.byte $32,$50, $3d,$32,$50,$3c, $33,$50,$3c,$32,$51,$3c,$32,$50
|
||||
|
||||
|
||||
|
||||
|
@ -206,16 +206,14 @@ write_ay_both:
|
||||
|
||||
write_ay_address_left:
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_1_ORB ; latch_address on PB1 ; 3
|
||||
nop
|
||||
|
||||
; address
|
||||
stx MOCK_6522_1_ORA ; put address on PA1 ; 3
|
||||
; on AY-3-8913 hold 300ns
|
||||
nop
|
||||
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_1_ORB ; latch_address on PB1 ; 3
|
||||
nop
|
||||
|
||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sta MOCK_6522_1_ORB ; 3
|
||||
@ -250,39 +248,16 @@ write_ay_value_left:
|
||||
; AY-3-8913 must hold 100ns
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_1_ORB ; latch_address on PB1 ; 3
|
||||
nop
|
||||
|
||||
; address
|
||||
stx MOCK_6522_1_ORA ; put address on PA1 ; 3
|
||||
|
||||
; on AY-3-8913 hold 300ns
|
||||
nop
|
||||
|
||||
|
||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sta MOCK_6522_1_ORB ; 3
|
||||
|
||||
; on AY-3-8913 hold at least 50ns
|
||||
|
||||
nop
|
||||
|
||||
|
||||
write_ay_address_right:
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
sta MOCK_6522_2_ORB ; latch_address on PB1 ; 3
|
||||
nop
|
||||
|
||||
; address
|
||||
stx MOCK_6522_2_ORA ; put address on PA1 ; 3
|
||||
stx MOCK_6522_2_ORA ; put address on PA2 ; 3
|
||||
; on AY-3-8913 hold 300ns
|
||||
nop
|
||||
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB2 ; 2
|
||||
sta MOCK_6522_2_ORB ; latch_address on PB2 ; 3
|
||||
nop
|
||||
|
||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sta MOCK_6522_2_ORB ; 3
|
||||
|
Loading…
Reference in New Issue
Block a user