mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-14 13:33:48 +00:00
interlace: urgh cycle counting is a pain
This commit is contained in:
parent
c64b7c7e18
commit
bbf26118bb
@ -251,16 +251,17 @@ load_ornament:
|
|||||||
; Calculate Note
|
; Calculate Note
|
||||||
;=====================================
|
;=====================================
|
||||||
; note offset in X
|
; note offset in X
|
||||||
|
; 6+2+52 = 60
|
||||||
|
|
||||||
; 6+52 = 58
|
; 7 + 6 + [???] = note disabled
|
||||||
|
|
||||||
calculate_note:
|
calculate_note:
|
||||||
|
|
||||||
.if 0
|
.if 0
|
||||||
lda note_a+NOTE_ENABLED,X ; 4+
|
lda note_a+NOTE_ENABLED,X ; 4
|
||||||
bne note_enabled ; 2/3
|
bne note_enabled ; 3
|
||||||
|
|
||||||
sta note_a+NOTE_AMPLITUDE,X ; 5
|
;-1
|
||||||
|
sta note_a+NOTE_AMPLITUDE,X ; 4
|
||||||
jmp done_note ; 3
|
jmp done_note ; 3
|
||||||
|
|
||||||
note_enabled:
|
note_enabled:
|
||||||
@ -333,9 +334,10 @@ note_not_negative:
|
|||||||
cmp #96
|
cmp #96
|
||||||
bcc note_not_too_high ; blt
|
bcc note_not_too_high ; blt
|
||||||
|
|
||||||
lda #95
|
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
lda #95 ; 2
|
||||||
|
|
||||||
note_not_too_high:
|
note_not_too_high:
|
||||||
|
|
||||||
; w = GetNoteFreq(j,pt3->frequency_table);
|
; w = GetNoteFreq(j,pt3->frequency_table);
|
||||||
@ -672,41 +674,75 @@ sample_pos_ok:
|
|||||||
lda note_a+NOTE_ORNAMENT_LOOP,X
|
lda note_a+NOTE_ORNAMENT_LOOP,X
|
||||||
sta note_a+NOTE_ORNAMENT_POSITION,X
|
sta note_a+NOTE_ORNAMENT_POSITION,X
|
||||||
ornament_pos_ok:
|
ornament_pos_ok:
|
||||||
|
.endif
|
||||||
|
|
||||||
done_note:
|
done_note:
|
||||||
; set mixer value
|
; set mixer value
|
||||||
; this is a bit complex (from original code)
|
; this is a bit complex (from original code)
|
||||||
; after 3 calls it is set up properly
|
; after 3 calls it is set up properly
|
||||||
lsr PT3_MIXER_VAL
|
lsr PT3_MIXER_VAL ; 5
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
; 7+ [26] + 6 = 39 // onoff==0
|
||||||
|
; 7+ 4 + 12 + 6 + 4 + 6 = 39 // onoff counted down to 0, do_onoff
|
||||||
|
; 7+ 4 + 12 + 6 + 4 + 6 = 39 // onoff counted down to 0, do_offon
|
||||||
|
; 7+ 4 + [18] + 4 + 6 = 39 // otherwise
|
||||||
|
|
||||||
handle_onoff:
|
handle_onoff:
|
||||||
ldy note_a+NOTE_ONOFF,X ;if (a->onoff>0) {
|
ldy note_a+NOTE_ONOFF,X ;if (a->onoff>0) { ; 4
|
||||||
beq done_onoff
|
beq done_onoff_kill_26 ; 3
|
||||||
|
;============
|
||||||
|
; 7
|
||||||
|
|
||||||
dey ; a->onoff--;
|
; -1
|
||||||
|
|
||||||
bne put_offon ; if (a->onoff==0) {
|
dey ; a->onoff--; ; 2
|
||||||
lda note_a+NOTE_ENABLED,X
|
bne put_offon_kill_18 ; if (a->onoff==0) { ; 3
|
||||||
eor #$1 ; toggle note_enabled
|
;============
|
||||||
sta note_a+NOTE_ENABLED,X
|
; 4
|
||||||
|
|
||||||
beq do_offon
|
; -1
|
||||||
|
lda note_a+NOTE_ENABLED,X ; 4
|
||||||
|
eor #$1 ; toggle note_enabled ; 2
|
||||||
|
sta note_a+NOTE_ENABLED,X ; 4
|
||||||
|
beq do_offon ; 3
|
||||||
|
;============
|
||||||
|
; 12
|
||||||
do_onoff:
|
do_onoff:
|
||||||
ldy note_a+NOTE_ONOFF_DELAY,X ; if (a->enabled) a->onoff=a->onoff_delay;
|
; -1
|
||||||
jmp put_offon
|
; if (a->enabled) a->onoff=a->onoff_delay;
|
||||||
|
ldy note_a+NOTE_ONOFF_DELAY,X ; 4
|
||||||
|
jmp put_offon ; 3
|
||||||
|
;============
|
||||||
|
; 6
|
||||||
do_offon:
|
do_offon:
|
||||||
ldy note_a+NOTE_OFFON_DELAY,X ; else a->onoff=a->offon_delay;
|
; else a->onoff=a->offon_delay;
|
||||||
put_offon:
|
ldy note_a+NOTE_OFFON_DELAY,X ; 4
|
||||||
sty note_a+NOTE_ONOFF,X
|
nop ; make things match ; 2
|
||||||
.endif
|
;============
|
||||||
|
; 6
|
||||||
|
|
||||||
|
put_offon:
|
||||||
|
sty note_a+NOTE_ONOFF,X ; 4
|
||||||
|
;============
|
||||||
|
; 4
|
||||||
done_onoff:
|
done_onoff:
|
||||||
|
|
||||||
rts ; 6
|
rts ; 6
|
||||||
|
|
||||||
|
done_onoff_kill_26:
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
lda CYCLE_WASTE ; 3
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
jmp done_onoff ; 3
|
||||||
|
|
||||||
|
put_offon_kill_18:
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
inc CYCLE_WASTE ; 5
|
||||||
|
jmp put_offon ; 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1466,7 +1502,7 @@ not_done:
|
|||||||
; update pattern or line if necessary
|
; update pattern or line if necessary
|
||||||
; then calculate the values for the next frame
|
; then calculate the values for the next frame
|
||||||
|
|
||||||
; 8+367=375
|
; 8+373=381
|
||||||
|
|
||||||
;==========================
|
;==========================
|
||||||
; pattern done early!
|
; pattern done early!
|
||||||
@ -1565,8 +1601,7 @@ next_pattern:
|
|||||||
;======================================
|
;======================================
|
||||||
; ????? FIXME/calculate note
|
; ????? FIXME/calculate note
|
||||||
;
|
;
|
||||||
|
; 9+ 202 + 36+11+18+30+18+49 = 373
|
||||||
; 9+ 196 + 36+11+18+30+18+49 = 367
|
|
||||||
|
|
||||||
do_frame:
|
do_frame:
|
||||||
; AY-3-8910 register summary
|
; AY-3-8910 register summary
|
||||||
@ -1588,13 +1623,13 @@ do_frame:
|
|||||||
; 9
|
; 9
|
||||||
|
|
||||||
;;ldx #(NOTE_STRUCT_SIZE*0) ; Note A
|
;;ldx #(NOTE_STRUCT_SIZE*0) ; Note A
|
||||||
jsr calculate_note ; 6+58
|
jsr calculate_note ; 6+60
|
||||||
ldx #(NOTE_STRUCT_SIZE*1) ; Note B ; 2
|
ldx #(NOTE_STRUCT_SIZE*1) ; Note B ; 2
|
||||||
jsr calculate_note ; 6+58
|
jsr calculate_note ; 6+60
|
||||||
ldx #(NOTE_STRUCT_SIZE*2) ; Note C ; 2
|
ldx #(NOTE_STRUCT_SIZE*2) ; Note C ; 2
|
||||||
jsr calculate_note ; 6+58
|
jsr calculate_note ; 6+60
|
||||||
;=============
|
;=============
|
||||||
; FIXME 196
|
; 202
|
||||||
|
|
||||||
; Note, we assume 1MHz timings, adjust pt3 as needed
|
; Note, we assume 1MHz timings, adjust pt3 as needed
|
||||||
|
|
||||||
@ -1716,12 +1751,14 @@ pt3_envelope_delay_smc:
|
|||||||
lda #$d1 ; 2
|
lda #$d1 ; 2
|
||||||
beq done_do_frame_x ; assume can't be negative? ; 3
|
beq done_do_frame_x ; assume can't be negative? ; 3
|
||||||
; do this if envelope_delay>0
|
; do this if envelope_delay>0
|
||||||
;====
|
;==========
|
||||||
; 5
|
; 5
|
||||||
|
|
||||||
; -1
|
; -1
|
||||||
dec pt3_envelope_delay_smc+1 ; 6
|
dec pt3_envelope_delay_smc+1 ; 6
|
||||||
bne done_do_frame_y ; 3
|
bne done_do_frame_y ; 3
|
||||||
|
;==========
|
||||||
|
; 8
|
||||||
; only do if we hit 0
|
; only do if we hit 0
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,10 +178,10 @@ display_loop:
|
|||||||
; -582 -- erase 22+4*(8+6+126) = 582
|
; -582 -- erase 22+4*(8+6+126) = 582
|
||||||
; -696 -- move+draw 4*(16+26+6+126) = 696
|
; -696 -- move+draw 4*(16+26+6+126) = 696
|
||||||
; -10 -- keypress
|
; -10 -- keypress
|
||||||
; -381(382) -- calc values
|
; -387 -- calc values
|
||||||
; -997 -- mockingboard out
|
; -997 -- mockingboard out
|
||||||
;=======
|
;=======
|
||||||
; 1883 2881 2265
|
; 1878
|
||||||
|
|
||||||
pad_time:
|
pad_time:
|
||||||
|
|
||||||
@ -354,7 +354,7 @@ pad_time:
|
|||||||
;============================
|
;============================
|
||||||
|
|
||||||
|
|
||||||
jsr pt3_make_frame ; 6+375 = 381
|
jsr pt3_make_frame ; 6+381 = 387
|
||||||
jsr mb_write_frame ; 6+991 = 997
|
jsr mb_write_frame ; 6+991 = 997
|
||||||
|
|
||||||
|
|
||||||
@ -362,16 +362,20 @@ pad_time:
|
|||||||
; WAIT for VBLANK to finish
|
; WAIT for VBLANK to finish
|
||||||
;============================
|
;============================
|
||||||
|
|
||||||
|
; Try X=6 Y=54 cycles=1945R5
|
||||||
|
; nop
|
||||||
|
; lda TEMP
|
||||||
|
|
||||||
|
; Try X=6 Y=52 cycles=1873R5
|
||||||
|
nop
|
||||||
|
lda TEMP
|
||||||
|
|
||||||
; Try X=124 Y=3 cycles=1879R4
|
; Try X=124 Y=3 cycles=1879R4
|
||||||
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
;; Try X=2 Y=180 cycles=2881
|
|
||||||
;; Try X=112 Y=4 cycles=2265
|
|
||||||
|
|
||||||
ldy #3 ; 2
|
ldy #52 ; 2
|
||||||
loop1: ldx #124 ; 2
|
loop1: ldx #6 ; 2
|
||||||
loop2: dex ; 2
|
loop2: dex ; 2
|
||||||
bne loop2 ; 2nt/3
|
bne loop2 ; 2nt/3
|
||||||
dey ; 2
|
dey ; 2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user