mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-13 22:30:49 +00:00
interlace: re-cycle count sample/ornament load
This commit is contained in:
parent
101e7b279f
commit
eab946a051
@ -6,15 +6,23 @@
|
|||||||
;===========================
|
;===========================
|
||||||
; Load Ornament 0/Sample 1
|
; Load Ornament 0/Sample 1
|
||||||
;===========================
|
;===========================
|
||||||
|
; these only called by init so in theory are not cycle critical
|
||||||
|
|
||||||
load_ornament0_sample1:
|
load_ornament0_sample1:
|
||||||
lda #0 ; 2
|
lda #0 ; 2
|
||||||
jsr load_ornament ; 6
|
jsr load_ornament ; 6
|
||||||
|
load_sample1:
|
||||||
|
lda #1 ; 2
|
||||||
; fall through
|
; fall through
|
||||||
|
|
||||||
|
;===========================
|
||||||
;===========================
|
;===========================
|
||||||
; Load Sample
|
; Load Sample
|
||||||
;===========================
|
;===========================
|
||||||
|
;===========================
|
||||||
|
; cycles: 72 (NOTE SAMPLES MUST NOT CROSS PAGE BOUNDARY)
|
||||||
|
;===========================
|
||||||
|
;===========================
|
||||||
; sample in A
|
; sample in A
|
||||||
; which note offset in X
|
; which note offset in X
|
||||||
|
|
||||||
@ -26,11 +34,6 @@ load_ornament0_sample1:
|
|||||||
; and then leave SAMPLE_H:SAMPLE_L pointing to begnning of
|
; and then leave SAMPLE_H:SAMPLE_L pointing to begnning of
|
||||||
; the sample data
|
; the sample data
|
||||||
|
|
||||||
; Optimization:
|
|
||||||
; see comments on ornament setting
|
|
||||||
|
|
||||||
load_sample1:
|
|
||||||
lda #1 ; 2
|
|
||||||
|
|
||||||
load_sample:
|
load_sample:
|
||||||
|
|
||||||
@ -59,34 +62,38 @@ load_sample:
|
|||||||
|
|
||||||
ldy #0 ; 2
|
ldy #0 ; 2
|
||||||
lda (SAMPLE_L),Y ; 5+
|
lda (SAMPLE_L),Y ; 5+
|
||||||
sta note_a+NOTE_SAMPLE_LOOP,X ; 5
|
sta note_a+NOTE_SAMPLE_LOOP,X ; 4
|
||||||
|
|
||||||
; Set the length value
|
; Set the length value
|
||||||
; a->sample_length=pt3->data[a->sample_pointer];
|
; a->sample_length=pt3->data[a->sample_pointer];
|
||||||
|
|
||||||
iny ; 2
|
iny ; 2
|
||||||
lda (SAMPLE_L),Y ; 5+
|
lda (SAMPLE_L),Y ; 5+
|
||||||
sta note_a+NOTE_SAMPLE_LENGTH,X ; 5
|
sta note_a+NOTE_SAMPLE_LENGTH,X ; 4
|
||||||
|
|
||||||
; Set pointer to beginning of samples
|
; Set pointer to beginning of samples
|
||||||
|
|
||||||
lda SAMPLE_L ; 3
|
lda SAMPLE_L ; 3
|
||||||
adc #$2 ; 2
|
adc #$2 ; 2
|
||||||
sta note_a+NOTE_SAMPLE_POINTER_L,X ; 5
|
sta note_a+NOTE_SAMPLE_POINTER_L,X ; 4
|
||||||
lda SAMPLE_H ; 3
|
lda SAMPLE_H ; 3
|
||||||
adc #$0 ; 2
|
adc #$0 ; 2
|
||||||
sta note_a+NOTE_SAMPLE_POINTER_H,X ; 5
|
sta note_a+NOTE_SAMPLE_POINTER_H,X ; 4
|
||||||
|
|
||||||
ldy PT3_TEMP ; 3
|
ldy PT3_TEMP ; 3
|
||||||
|
|
||||||
rts ; 6
|
rts ; 6
|
||||||
;============
|
;============
|
||||||
; 76
|
; 72
|
||||||
|
|
||||||
|
|
||||||
;===========================
|
;===========================
|
||||||
; Load Ornament
|
; Load Ornament
|
||||||
;===========================
|
;===========================
|
||||||
|
;===========================
|
||||||
|
; cycles: 78 (NOTE SAMPLES MUST NOT CROSS PAGE BOUNDARY)
|
||||||
|
;===========================
|
||||||
|
;===========================
|
||||||
; ornament value in A
|
; ornament value in A
|
||||||
; note offset in X
|
; note offset in X
|
||||||
|
|
||||||
@ -127,38 +134,34 @@ load_ornament:
|
|||||||
sta ORNAMENT_H ; 3
|
sta ORNAMENT_H ; 3
|
||||||
|
|
||||||
lda #0 ; 2
|
lda #0 ; 2
|
||||||
sta note_a+NOTE_ORNAMENT_POSITION,X ; 5
|
sta note_a+NOTE_ORNAMENT_POSITION,X ; 4
|
||||||
|
|
||||||
tay ; 2
|
tay ; 2
|
||||||
|
|
||||||
; Set the loop value
|
; Set the loop value
|
||||||
; a->ornament_loop=pt3->data[a->ornament_pointer];
|
; a->ornament_loop=pt3->data[a->ornament_pointer];
|
||||||
lda (ORNAMENT_L),Y ; 5+
|
lda (ORNAMENT_L),Y ; 5+
|
||||||
sta note_a+NOTE_ORNAMENT_LOOP,X ; 5
|
sta note_a+NOTE_ORNAMENT_LOOP,X ; 4
|
||||||
|
|
||||||
; Set the length value
|
; Set the length value
|
||||||
; a->ornament_length=pt3->data[a->ornament_pointer];
|
; a->ornament_length=pt3->data[a->ornament_pointer];
|
||||||
iny ; 2
|
iny ; 2
|
||||||
lda (ORNAMENT_L),Y ; 5+
|
lda (ORNAMENT_L),Y ; 5+
|
||||||
sta note_a+NOTE_ORNAMENT_LENGTH,X ; 5
|
sta note_a+NOTE_ORNAMENT_LENGTH,X ; 4
|
||||||
|
|
||||||
; Set the pointer to the value past the length
|
; Set the pointer to the value past the length
|
||||||
|
|
||||||
lda ORNAMENT_L ; 3
|
lda ORNAMENT_L ; 3
|
||||||
adc #$2 ; 2
|
adc #$2 ; 2
|
||||||
sta note_a+NOTE_ORNAMENT_POINTER_L,X ; 5
|
sta note_a+NOTE_ORNAMENT_POINTER_L,X ; 4
|
||||||
lda ORNAMENT_H ; 3
|
lda ORNAMENT_H ; 3
|
||||||
adc #$0 ; 2
|
adc #$0 ; 2
|
||||||
sta note_a+NOTE_ORNAMENT_POINTER_H,X ; 5
|
sta note_a+NOTE_ORNAMENT_POINTER_H,X ; 4
|
||||||
|
|
||||||
ldy PT3_TEMP ; restore Y value ; 3
|
ldy PT3_TEMP ; restore Y value ; 3
|
||||||
|
|
||||||
rts ; 6
|
rts ; 6
|
||||||
|
|
||||||
;============
|
;============
|
||||||
; 83
|
; 78
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -232,14 +232,20 @@ note_c:
|
|||||||
end_vars:
|
end_vars:
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
; this is only called by lib_init
|
||||||
load_ornament0_sample1:
|
load_ornament0_sample1:
|
||||||
lda #0 ; 2
|
lda #0 ; 2
|
||||||
jsr load_ornament ; 6
|
jsr load_ornament ; 6
|
||||||
; fall through
|
; fall through
|
||||||
|
load_sample1:
|
||||||
|
lda #1 ; 2
|
||||||
|
|
||||||
|
|
||||||
|
;===========================
|
||||||
;===========================
|
;===========================
|
||||||
; Load Sample
|
; Load Sample
|
||||||
;===========================
|
;===========================
|
||||||
|
;===========================
|
||||||
; sample in A
|
; sample in A
|
||||||
; which note offset in X
|
; which note offset in X
|
||||||
|
|
||||||
@ -254,8 +260,6 @@ load_ornament0_sample1:
|
|||||||
; Optimization:
|
; Optimization:
|
||||||
; see comments on ornament setting
|
; see comments on ornament setting
|
||||||
|
|
||||||
load_sample1:
|
|
||||||
lda #1 ; 2
|
|
||||||
|
|
||||||
load_sample:
|
load_sample:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user