mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-28 14:30:52 +00:00
pt3: more code brought in
This commit is contained in:
parent
dd392a2cc6
commit
08c28739de
@ -40,7 +40,7 @@ PT3_PLAYER: pt3_player.o
|
|||||||
ld65 -o PT3_PLAYER pt3_player.o -C ../linker_scripts/apple2_1000.inc
|
ld65 -o PT3_PLAYER pt3_player.o -C ../linker_scripts/apple2_1000.inc
|
||||||
|
|
||||||
pt3_player.o: pt3_player.s \
|
pt3_player.o: pt3_player.s \
|
||||||
gr_fast_clear.s pt3_lib.s interrupt_handler.s
|
gr_fast_clear.s pt3_lib.s interrupt_handler.s zp.inc
|
||||||
# mockingboard.s \
|
# mockingboard.s \
|
||||||
# keypress_minimal.s \
|
# keypress_minimal.s \
|
||||||
# qkumba_rts.s \
|
# qkumba_rts.s \
|
||||||
@ -53,7 +53,7 @@ PT3_DUMPER: pt3_dumper.o
|
|||||||
ld65 -o PT3_DUMPER pt3_dumper.o -C ../linker_scripts/apple2_1000.inc
|
ld65 -o PT3_DUMPER pt3_dumper.o -C ../linker_scripts/apple2_1000.inc
|
||||||
|
|
||||||
pt3_dumper.o: pt3_dumper.s \
|
pt3_dumper.o: pt3_dumper.s \
|
||||||
gr_fast_clear.s pt3_lib.s interrupt_handler.s
|
gr_fast_clear.s pt3_lib.s interrupt_handler.s zp.inc
|
||||||
ca65 -o pt3_dumper.o pt3_dumper.s -l pt3_dumper.lst
|
ca65 -o pt3_dumper.o pt3_dumper.s -l pt3_dumper.lst
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,13 @@ NOTE_LEN=14
|
|||||||
NOTE_LEN_COUNT=15
|
NOTE_LEN_COUNT=15
|
||||||
NOTE_SPEC_COMMAND=16 ; is this one needed?
|
NOTE_SPEC_COMMAND=16 ; is this one needed?
|
||||||
NOTE_NEW_NOTE=17
|
NOTE_NEW_NOTE=17
|
||||||
|
NOTE_ALL_DONE=18
|
||||||
|
NOTE_ADDR_L=19
|
||||||
|
NOTE_ADDR_H=20
|
||||||
|
NOTE_ORNAMENT_POINTER_L=21
|
||||||
|
NOTE_ORNAMENT_POINTER_H=22
|
||||||
|
NOTE_ORNAMENT_LOOP=23
|
||||||
|
NOTE_ORNAMENT_LENGTH=24
|
||||||
|
|
||||||
note_a:
|
note_a:
|
||||||
.byte 'A' ; NOTE_WHICH
|
.byte 'A' ; NOTE_WHICH
|
||||||
@ -43,7 +49,13 @@ note_a:
|
|||||||
.byte $0 ; NOTE_LEN_COUNT
|
.byte $0 ; NOTE_LEN_COUNT
|
||||||
.byte $0 ; NOTE_SPEC_COMMAND
|
.byte $0 ; NOTE_SPEC_COMMAND
|
||||||
.byte $0 ; NOTE_NEW_NOTE
|
.byte $0 ; NOTE_NEW_NOTE
|
||||||
|
.byte $0 ; NOTE_ALL_DONE
|
||||||
|
.byte $0 ; NOTE_ADDR_L
|
||||||
|
.byte $0 ; NOTE_ADDR_H
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_POINTER_L
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_POINTER_H
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_LOOP
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_LENGTH
|
||||||
|
|
||||||
note_b:
|
note_b:
|
||||||
.byte 'B' ; NOTE_WHICH
|
.byte 'B' ; NOTE_WHICH
|
||||||
@ -64,6 +76,13 @@ note_b:
|
|||||||
.byte $0 ; NOTE_LEN_COUNT
|
.byte $0 ; NOTE_LEN_COUNT
|
||||||
.byte $0 ; NOTE_SPEC_COMMAND
|
.byte $0 ; NOTE_SPEC_COMMAND
|
||||||
.byte $0 ; NOTE_NEW_NOTE
|
.byte $0 ; NOTE_NEW_NOTE
|
||||||
|
.byte $0 ; NOTE_ALL_DONE
|
||||||
|
.byte $0 ; NOTE_ADDR_L
|
||||||
|
.byte $0 ; NOTE_ADDR_H
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_POINTER_L
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_POINTER_H
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_LOOP
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_LENGTH
|
||||||
|
|
||||||
note_c:
|
note_c:
|
||||||
.byte 'C' ; NOTE_WHICH
|
.byte 'C' ; NOTE_WHICH
|
||||||
@ -84,7 +103,13 @@ note_c:
|
|||||||
.byte $0 ; NOTE_LEN_COUNT
|
.byte $0 ; NOTE_LEN_COUNT
|
||||||
.byte $0 ; NOTE_SPEC_COMMAND
|
.byte $0 ; NOTE_SPEC_COMMAND
|
||||||
.byte $0 ; NOTE_NEW_NOTE
|
.byte $0 ; NOTE_NEW_NOTE
|
||||||
|
.byte $0 ; NOTE_ALL_DONE
|
||||||
|
.byte $0 ; NOTE_ADDR_L
|
||||||
|
.byte $0 ; NOTE_ADDR_H
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_POINTER_L
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_POINTER_H
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_LOOP
|
||||||
|
.byte $0 ; NOTE_ORNAMENT_LENGTH
|
||||||
|
|
||||||
pt3_version: .byte $0
|
pt3_version: .byte $0
|
||||||
pt3_frequency_table: .byte $0
|
pt3_frequency_table: .byte $0
|
||||||
@ -107,7 +132,7 @@ pt3_envelope_type_old: .byte $0
|
|||||||
pt3_envelope_delay: .byte $0
|
pt3_envelope_delay: .byte $0
|
||||||
pt3_envelope_delay_orig:.byte $0
|
pt3_envelope_delay_orig:.byte $0
|
||||||
|
|
||||||
pt3_current_pattern: .byte $0
|
;pt3_current_pattern: .byte $0
|
||||||
pt3_music_len: .byte $0
|
pt3_music_len: .byte $0
|
||||||
pt3_mixer_value: .byte $0
|
pt3_mixer_value: .byte $0
|
||||||
|
|
||||||
@ -117,12 +142,51 @@ temp_word_h: .byte $0
|
|||||||
|
|
||||||
; Header offsets
|
; Header offsets
|
||||||
|
|
||||||
PT3_HEADER_FREQUENCY = $63
|
PT3_HEADER_FREQUENCY = $63
|
||||||
|
PT3_PATTERN_LOC_L = $67
|
||||||
|
PT3_PATTERN_LOC_H = $68
|
||||||
|
PT3_SAMPLE_LOC_L = $69
|
||||||
|
PT3_SAMPLE_LOC_H = $6A
|
||||||
|
PT3_ORNAMENT_LOC_L = $A9
|
||||||
|
PT3_OTNAMENT_LOC_H = $AA
|
||||||
|
PT3_PATTERN_TABLE = $C9
|
||||||
|
|
||||||
|
;===========================
|
||||||
|
; Load Ornament
|
||||||
|
;===========================
|
||||||
|
|
||||||
load_ornament:
|
load_ornament:
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
; a->ornament_pointer=pt3->ornament_patterns[a->ornament];
|
||||||
|
; a->ornament_loop=pt3->data[a->ornament_pointer];
|
||||||
|
; a->ornament_pointer++;
|
||||||
|
; a->ornament_length=pt3->data[a->ornament_pointer];
|
||||||
|
; a->ornament_pointer++;
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda note_a+NOTE_ORNAMENT_POINTER_L
|
||||||
|
adc #2
|
||||||
|
sta note_a+NOTE_ORNAMENT_POINTER_L
|
||||||
|
lda note_a+NOTE_ORNAMENT_POINTER_H
|
||||||
|
adc #0
|
||||||
|
sta note_a+NOTE_ORNAMENT_POINTER_H
|
||||||
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
;===========================
|
||||||
|
; Load Sample
|
||||||
|
;===========================
|
||||||
|
;
|
||||||
load_sample:
|
load_sample:
|
||||||
|
; a->sample_pointer=pt3->sample_patterns[a->sample];
|
||||||
|
; a->sample_loop=pt3->data[a->sample_pointer];
|
||||||
|
; a->sample_pointer++;
|
||||||
|
; a->sample_length=pt3->data[a->sample_pointer];
|
||||||
|
; a->sample_pointer++;
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
pt3_init_song:
|
pt3_init_song:
|
||||||
@ -162,7 +226,7 @@ pt3_init_song:
|
|||||||
sta pt3_envelope_period_l
|
sta pt3_envelope_period_l
|
||||||
sta pt3_envelope_period_h
|
sta pt3_envelope_period_h
|
||||||
sta pt3_envelope_type
|
sta pt3_envelope_type
|
||||||
sta pt3_current_pattern
|
; sta pt3_current_pattern
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -314,6 +378,8 @@ done_note:
|
|||||||
prev_note: .byte $0
|
prev_note: .byte $0
|
||||||
prev_sliding_l: .byte $0
|
prev_sliding_l: .byte $0
|
||||||
prev_sliding_h: .byte $0
|
prev_sliding_h: .byte $0
|
||||||
|
a_done: .byte $0
|
||||||
|
current_val: .byte $0
|
||||||
|
|
||||||
;=====================================
|
;=====================================
|
||||||
; Decode Note
|
; Decode Note
|
||||||
@ -321,14 +387,12 @@ prev_sliding_h: .byte $0
|
|||||||
|
|
||||||
decode_note:
|
decode_note:
|
||||||
|
|
||||||
; int a_done=0;
|
|
||||||
; int current_val;
|
|
||||||
|
|
||||||
; Init vars
|
; Init vars
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta note_a+NOTE_NEW_NOTE ; for printing notes?
|
sta note_a+NOTE_NEW_NOTE ; for printing notes?
|
||||||
sta note_a+NOTE_SPEC_COMMAND ; These are only if printing?
|
sta note_a+NOTE_SPEC_COMMAND ; These are only if printing?
|
||||||
|
sta a_done
|
||||||
|
|
||||||
; Skip decode if note still running
|
; Skip decode if note still running
|
||||||
lda note_a+NOTE_LEN_COUNT
|
lda note_a+NOTE_LEN_COUNT
|
||||||
@ -350,7 +414,9 @@ keep_decoding:
|
|||||||
|
|
||||||
|
|
||||||
note_decode_loop:
|
note_decode_loop:
|
||||||
; a->len_count=a->len;
|
lda note_a+NOTE_LEN ; re-up length count
|
||||||
|
sta note_a+NOTE_LEN_COUNT
|
||||||
|
|
||||||
|
|
||||||
; current_val=pt3->data[*addr];
|
; current_val=pt3->data[*addr];
|
||||||
; switch((current_val>>4)&0xf) {
|
; switch((current_val>>4)&0xf) {
|
||||||
@ -640,18 +706,65 @@ pt3_decode_line:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
current_subframe: .byte $0
|
||||||
|
current_line: .byte $0
|
||||||
|
current_pattern: .byte $0
|
||||||
|
|
||||||
;=====================================
|
;=====================================
|
||||||
; Set Pattern
|
; Set Pattern
|
||||||
;=====================================
|
;=====================================
|
||||||
|
|
||||||
pt3_set_pattern:
|
pt3_set_pattern:
|
||||||
|
|
||||||
|
ldy current_pattern
|
||||||
|
lda PT3_LOC+PT3_PATTERN_TABLE,Y ; get pattern table value
|
||||||
|
|
||||||
|
asl ; mul by two, as word sized
|
||||||
|
tay
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
lda PT3_LOC+PT3_PATTERN_LOC_L
|
||||||
|
sta PATTERN_L
|
||||||
|
lda PT3_LOC+PT3_PATTERN_LOC_H
|
||||||
|
sta PATTERN_H
|
||||||
|
|
||||||
|
lda (PATTERN_L),Y
|
||||||
|
sta note_a+NOTE_ADDR_L
|
||||||
|
iny
|
||||||
|
|
||||||
|
lda (PATTERN_L),Y
|
||||||
|
adc >PT3_LOC ; assume page boundary
|
||||||
|
sta note_a+NOTE_ADDR_H
|
||||||
|
iny
|
||||||
|
|
||||||
|
lda (PATTERN_L),Y
|
||||||
|
sta note_b+NOTE_ADDR_L
|
||||||
|
iny
|
||||||
|
|
||||||
|
lda (PATTERN_L),Y
|
||||||
|
adc >PT3_LOC ; assume page boundary
|
||||||
|
sta note_b+NOTE_ADDR_H
|
||||||
|
iny
|
||||||
|
|
||||||
|
lda (PATTERN_L),Y
|
||||||
|
sta note_c+NOTE_ADDR_L
|
||||||
|
iny
|
||||||
|
|
||||||
|
lda (PATTERN_L),Y
|
||||||
|
adc >PT3_LOC ; assume page boundary
|
||||||
|
sta note_c+NOTE_ADDR_H
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta note_a+NOTE_ALL_DONE
|
||||||
|
sta note_b+NOTE_ALL_DONE
|
||||||
|
sta note_c+NOTE_ALL_DONE
|
||||||
|
|
||||||
|
sta pt3_noise_period
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
current_subframe: .byte $0
|
|
||||||
current_line: .byte $0
|
|
||||||
current_pattern: .byte $0
|
|
||||||
|
|
||||||
;=====================================
|
;=====================================
|
||||||
; pt3 make frame
|
; pt3 make frame
|
||||||
|
@ -100,8 +100,8 @@ DECODER_STATE EQU $7F
|
|||||||
;OVER_LAND EQU $7D
|
;OVER_LAND EQU $7D
|
||||||
;NUM1L EQU $7E
|
;NUM1L EQU $7E
|
||||||
;NUM1H EQU $7F
|
;NUM1H EQU $7F
|
||||||
CHUNKSIZE EQU $80
|
PATTERN_L EQU $80
|
||||||
LZ4_DONE EQU $81
|
PATTERN_H EQU $81
|
||||||
DECODE_ERROR EQU $82
|
DECODE_ERROR EQU $82
|
||||||
|
|
||||||
A_COLOR EQU $83
|
A_COLOR EQU $83
|
||||||
|
Loading…
x
Reference in New Issue
Block a user