Comment and label BRR sample upload routine.

This commit is contained in:
p4plus2 2017-09-03 06:46:35 -07:00
parent 5c57018b83
commit 0cab6757a3
3 changed files with 99 additions and 101 deletions

View file

@ -248,7 +248,7 @@ upload_spc_engine_wrapper:
upload_spc_engine: upload_spc_engine:
JSR upload_spc_base_engine ;$B58191 \ Upload the core of the SPC engine JSR upload_spc_base_engine ;$B58191 \ Upload the core of the SPC engine
JSR upload_spc_sound_engine ;$B58194 | Upload the sound processor of the SPC engine JSR upload_spc_sound_engine ;$B58194 | Upload the sound processor of the SPC engine
JSR CODE_B582A9 ;$B58197 | JSR upload_global_samples ;$B58197 |
LDA #sound_effect_data ;$B5819A |\ Load pointer to sound effect data LDA #sound_effect_data ;$B5819A |\ Load pointer to sound effect data
STA $32 ;$B5819D | | STA $32 ;$B5819D | |
LDA.w #sound_effect_data>>16 ;$B5819F | | LDA.w #sound_effect_data>>16 ;$B5819F | |
@ -403,23 +403,23 @@ upload_spc_sound_engine:
STA $34 ;$B58299 |/ STA $34 ;$B58299 |/
LDA #$0560 ;$B5829B |\ Set the ARAM destination LDA #$0560 ;$B5829B |\ Set the ARAM destination
STA $35 ;$B5829E |/ STA $35 ;$B5829E |/
LDA #$067F ;$B582A0 |\ Set the number of bytes to transfer LDA #$067F ;$B582A0 |\ Set the number of words to transfer
STA $37 ;$B582A3 |/ STA $37 ;$B582A3 |/
JSR upload_spc_block ;$B582A5 | Upload SPC block JSR upload_spc_block ;$B582A5 | Upload SPC block
RTS ;$B582A8 / RTS ;$B582A8 /
CODE_B582A9: ; \ upload_global_samples: ; \
LDA #DATA_EE11F9 ;$B582A9 |\ LDA #global_sample_map ;$B582A9 |\ Load the pointer to the global sample map
STA $0E ;$B582AC | | STA $0E ;$B582AC | |
LDA.w #DATA_EE11F9>>16 ;$B582AE | | LDA.w #global_sample_map>>16 ;$B582AE | |
STA $10 ;$B582B1 |/ STA $10 ;$B582B1 |/
LDA #$3100 ;$B582B3 |\ ARAM destination LDA #$3100 ;$B582B3 |\ Source directory ARAM destination
STA $02 ;$B582B6 |/ STA $02 ;$B582B6 |/
STZ $0A ;$B582B8 | STZ $0A ;$B582B8 |
LDA #$3400 ;$B582BA |\ LDA #$3400 ;$B582BA |\ Sample data ARAM destination
STA $06 ;$B582BD |/ STA $06 ;$B582BD |/
STZ $0A ;$B582BF | STZ $0A ;$B582BF | Reset the sample counter
JSR CODE_B582D1 ;$B582C1 | JSR sample_uploader ;$B582C1 |
LDA $02 ;$B582C4 |\ LDA $02 ;$B582C4 |\
STA $04 ;$B582C6 |/ STA $04 ;$B582C6 |/
LDA $06 ;$B582C8 |\ LDA $06 ;$B582C8 |\
@ -428,57 +428,57 @@ CODE_B582A9: ; \
STA $0C ;$B582CE |/ STA $0C ;$B582CE |/
RTS ;$B582D0 / RTS ;$B582D0 /
CODE_B582D1: sample_uploader:
STZ $0A ;$B582D1 \ STZ $0A ;$B582D1 \ Reset the sample counter
LDX #$0000 ;$B582D3 | LDX #$0000 ;$B582D3 |
LDA $0A ;$B582D6 |\ LDA $0A ;$B582D6 |\
STA $3A ;$B582D8 |/ STA $3A ;$B582D8 |/
LDA $0E ;$B582DA |\ LDA $0E ;$B582DA |\ Copy sample map pointer
STA $3E ;$B582DC |/ STA $3E ;$B582DC | |
LDA $10 ;$B582DE |\ LDA $10 ;$B582DE | |
STA $40 ;$B582E0 |/ STA $40 ;$B582E0 |/
LDA $02 ;$B582E2 |\ LDA $02 ;$B582E2 |\ Copy source directory ARAM destination
STA $42 ;$B582E4 |/ STA $42 ;$B582E4 |/
LDA $06 ;$B582E6 |\ LDA $06 ;$B582E6 |\ Copy sample data ARAM destination
STA $44 ;$B582E8 |/ STA $44 ;$B582E8 |/
CODE_B582EA: ; | .parse_next_sample ; |
LDA [$3E] ;$B582EA | LDA [$3E] ;$B582EA | Load sample number
INC $3E ;$B582EC |\ INC $3E ;$B582EC |\ Increment the sample map pointer
INC $3E ;$B582EE |/ INC $3E ;$B582EE |/
CMP #$FFFF ;$B582F0 |\ CMP #$FFFF ;$B582F0 |\ Sample number FFFF implies end of table, branch and upload
BEQ .upload_sample_directory ;$B582F3 |/ BEQ .upload_sample_directory ;$B582F3 |/
STA $3C ;$B582F5 |\ STA $3C ;$B582F5 |\ Triple sample number to index sample pointer table
CLC ;$B582F7 | | CLC ;$B582F7 | |
ADC $3C ;$B582F8 | | ADC $3C ;$B582F8 | |
ADC $3C ;$B582FA |/ ADC $3C ;$B582FA |/
TXY ;$B582FC | TXY ;$B582FC | Preserve ARAM buffer index
TAX ;$B582FD | TAX ;$B582FD |\ Load pointer to the current sample
LDA.l DATA_EE0D86,x ;$B582FE |\ LDA.l sample_table,x ;$B582FE | |
STA $32 ;$B58302 | | STA $32 ;$B58302 | |
LDA.l DATA_EE0D88,x ;$B58304 | | LDA.l sample_table+2,x ;$B58304 | |
STA $34 ;$B58308 |/ STA $34 ;$B58308 |/
TYX ;$B5830A | TYX ;$B5830A | Restore ARAM buffer index
LDA $06 ;$B5830B |\ LDA $06 ;$B5830B |\ Store sample data ARAM destination
STA $7E2200,x ;$B5830D |/ STA $7E2200,x ;$B5830D |/
INX ;$B58311 |\ INX ;$B58311 |\ Increment ARAM buffer index
INX ;$B58312 |/ INX ;$B58312 |/
LDA [$32] ;$B58313 |\ LDA [$32] ;$B58313 |\ Load size of unlooped sample data
CLC ;$B58315 | | CLC ;$B58315 | |
ADC $06 ;$B58316 | | ADC $06 ;$B58316 | | Add unlooped sample data and ARAM destination
STA $7E2200,x ;$B58318 |/ STA $7E2200,x ;$B58318 |/ Store destination of sample loop entry
INX ;$B5831C |\ INX ;$B5831C |\ Increment ARAM buffer index
INX ;$B5831D |/ INX ;$B5831D |/
INC $02 ;$B5831E |\ INC $02 ;$B5831E |\ Increase source directory ARAM destination by 4 bytes
INC $02 ;$B58320 | | INC $02 ;$B58320 | |
INC $02 ;$B58322 | | INC $02 ;$B58322 | |
INC $02 ;$B58324 |/ INC $02 ;$B58324 |/
INC $32 ;$B58326 |\ INC $32 ;$B58326 |\ Increment pointer to current sample data
INC $32 ;$B58328 |/ INC $32 ;$B58328 |/
LDA [$32] ;$B5832A |\ LDA [$32] ;$B5832A |\ Load size of looped sample data
CLC ;$B5832C | | CLC ;$B5832C | |
ADC $06 ;$B5832D | | ADC $06 ;$B5832D | | Add looped sample data and ARAM destination
STA $06 ;$B5832F |/ STA $06 ;$B5832F |/ Store next potential ARAM sample destination
BRA CODE_B582EA ;$B58331 / BRA .parse_next_sample ;$B58331 / Parse the next sample
.upload_sample_directory ; \ .upload_sample_directory ; \
LDA #$2200 ;$B58333 |\ Set upload source to $7E2200 LDA #$2200 ;$B58333 |\ Set upload source to $7E2200
@ -489,102 +489,102 @@ CODE_B582EA: ; |
STA $35 ;$B5833F |/ STA $35 ;$B5833F |/
LDA #$3400 ;$B58341 |\ Calculate and set upload size LDA #$3400 ;$B58341 |\ Calculate and set upload size
SEC ;$B58344 | | SEC ;$B58344 | |
SBC $42 ;$B58345 | | ($3400 - ARAM dest + 1) / 2 SBC $42 ;$B58345 | | word count = ($3400 - ARAM dest + 1) / 2
CLC ;$B58347 | | CLC ;$B58347 | |
INC A ;$B58348 | | INC A ;$B58348 | |
LSR A ;$B58349 | | LSR A ;$B58349 | |
STA $37 ;$B5834A |/ STA $37 ;$B5834A |/
JSR upload_spc_block ;$B5834C | Upload sample directory JSR upload_spc_block ;$B5834C | Upload sample directory
LDA #DATA_EE11F9 ;$B5834F |\ LDA #global_sample_map ;$B5834F |\ Load global sample map pointer
STA $3E ;$B58352 | | STA $3E ;$B58352 | |
LDA.w #DATA_EE11F9>>16 ;$B58354 | | LDA.w #global_sample_map>>16 ;$B58354 | |
STA $40 ;$B58357 |/ STA $40 ;$B58357 |/
LDA $0E ;$B58359 |\ LDA $0E ;$B58359 |\ If the sample map pointer is not the global samples
CMP $3E ;$B5835B | | CMP $3E ;$B5835B | |
BNE CODE_B58365 ;$B5835D |/ BNE .map_global_sample ;$B5835D |/ Branch and include global samples in the mapping
LDA $10 ;$B5835F |\ LDA $10 ;$B5835F |\ If the pointer does match the global samples
CMP $40 ;$B58361 | | CMP $40 ;$B58361 | |
BEQ CODE_B583B8 ;$B58363 |/ BEQ .upload_samples ;$B58363 |/ Branch ahead and don't double map global samples
CODE_B58365: ; | .map_global_sample ; |
LDA [$3E] ;$B58365 |\ LDA [$3E] ;$B58365 | Load the sample number
CMP #$FFFF ;$B58367 | | CMP #$FFFF ;$B58367 |\ Sample number FFFF implies end of table, in that case
BEQ CODE_B5837F ;$B5836A |/ BEQ .map_set_specific_samples ;$B5836A |/ Branch and map set specific samples
INC $3E ;$B5836C |\ INC $3E ;$B5836C |\ Increment sample map pointer
INC $3E ;$B5836E |/ INC $3E ;$B5836E |/
TAX ;$B58370 | TAX ;$B58370 | Use sample number as an index
LDA $0A ;$B58371 |\ LDA $0A ;$B58371 |\ Store the sample id at the sample number index
SEP #$20 ;$B58373 | | SEP #$20 ;$B58373 | |
STA $7E2200,x ;$B58375 |/ STA $7E2200,x ;$B58375 | |
REP #$20 ;$B58379 | REP #$20 ;$B58379 |/
INC $0A ;$B5837B | INC $0A ;$B5837B | Increment the sample number count
BRA CODE_B58365 ;$B5837D / BRA .map_global_sample ;$B5837D / Parse next sample map entry
CODE_B5837F: ; \ .map_set_specific_samples ; \
LDA $0E ;$B5837F |\ LDA $0E ;$B5837F |\ Load target sample map pointer
STA $3E ;$B58381 |/ STA $3E ;$B58381 | |
LDA $10 ;$B58383 |\ LDA $10 ;$B58383 | |
STA $40 ;$B58385 |/ STA $40 ;$B58385 |/
CODE_B58387: ; | .map_sample ; |
LDA [$3E] ;$B58387 |\ LDA [$3E] ;$B58387 | Load the sample number
CMP #$FFFF ;$B58389 | | CMP #$FFFF ;$B58389 |\ Sample number FFFF implies end of table, branch and upload
BEQ .upload_source_number_table ;$B5838C |/ BEQ .upload_source_number_map ;$B5838C |/
INC $3E ;$B5838E |\ INC $3E ;$B5838E |\ Increment sample map pointer
INC $3E ;$B58390 |/ INC $3E ;$B58390 |/
TAX ;$B58392 | TAX ;$B58392 | Use sample number as an index
LDA $0A ;$B58393 |\ LDA $0A ;$B58393 |\ Store the sample id at the sample number index
SEP #$20 ;$B58395 | | SEP #$20 ;$B58395 | |
STA $7E2200,x ;$B58397 | | STA $7E2200,x ;$B58397 | |
REP #$20 ;$B5839B |/ REP #$20 ;$B5839B |/
INC $0A ;$B5839D | INC $0A ;$B5839D | Increment the sample number count
BRA CODE_B58387 ;$B5839F / BRA .map_sample ;$B5839F / Parse next sample map entry
.upload_source_number_table ; \ .upload_source_number_map ; \
LDA #$2200 ;$B583A1 |\ Set upload source to $7E2200 LDA #$2200 ;$B583A1 |\ Set upload source to $7E2200
STA $32 ;$B583A4 | | STA $32 ;$B583A4 | |
LDA #$007E ;$B583A6 | | LDA #$007E ;$B583A6 | |
STA $34 ;$B583A9 |/ STA $34 ;$B583A9 |/
LDA #$0560 ;$B583AB |\ Set ARAM Destination to $0560 LDA #$0560 ;$B583AB |\ Set ARAM Destination to $0560
STA $35 ;$B583AE |/ STA $35 ;$B583AE |/
LDA #$0080 ;$B583B0 |\ Set transfer size to 128 bytes LDA #$0080 ;$B583B0 |\ Set transfer size to 128 words
STA $37 ;$B583B3 |/ STA $37 ;$B583B3 |/
JSR upload_spc_block ;$B583B5 | Upload the source number table JSR upload_spc_block ;$B583B5 | Upload the source number table
CODE_B583B8: ; | .upload_samples ; |
LDA $44 ;$B583B8 |\ LDA $44 ;$B583B8 |\ Load and copy the sample destination pointer
STA $06 ;$B583BA |/ STA $06 ;$B583BA |/
CODE_B583BC: ; | .upload_next_sample ; |
LDA [$0E] ;$B583BC |\ LDA [$0E] ;$B583BC | Load the sample number
CMP #$FFFF ;$B583BE | | CMP #$FFFF ;$B583BE |\ Sample number FFFF implies end of table, branch and return
BEQ CODE_B583FA ;$B583C1 |/ BEQ .return ;$B583C1 |/
INC $0E ;$B583C3 |\ INC $0E ;$B583C3 |\ Increment sample map pointer
INC $0E ;$B583C5 |/ INC $0E ;$B583C5 |/
STA $3C ;$B583C7 |\ STA $3C ;$B583C7 |\ Triple sample number to index sample data pointer table
CLC ;$B583C9 | | CLC ;$B583C9 | |
ADC $3C ;$B583CA | | ADC $3C ;$B583CA | |
ADC $3C ;$B583CC |/ ADC $3C ;$B583CC | |
TAX ;$B583CE | TAX ;$B583CE |/
LDA.l DATA_EE0D86,x ;$B583CF |\ LDA.l sample_table,x ;$B583CF |\ Load a the pointer to the sample.
STA $32 ;$B583D3 | | STA $32 ;$B583D3 | |
LDA.l DATA_EE0D88,x ;$B583D5 | | LDA.l sample_table+2,x ;$B583D5 | |
STA $34 ;$B583D9 |/ STA $34 ;$B583D9 |/
INC $32 ;$B583DB |\ INC $32 ;$B583DB |\ Skip unlooped intro size
INC $32 ;$B583DD |/ INC $32 ;$B583DD |/
LDA $06 ;$B583DF |\ LDA $06 ;$B583DF |\ Load and copy the ARAM destination
STA $35 ;$B583E1 |/ STA $35 ;$B583E1 |/
LDA [$32] ;$B583E3 |\ LDA [$32] ;$B583E3 |\ Load and copy the size of the sample to upload
STA $37 ;$B583E5 |/ STA $37 ;$B583E5 |/
CLC ;$B583E7 |\ CLC ;$B583E7 |\ Add the ARAM destination and sample size
ADC $35 ;$B583E8 | | ADC $35 ;$B583E8 | |
STA $06 ;$B583EA |/ STA $06 ;$B583EA |/ Store this as the next ARAM destination
CLC ;$B583EC |\ CLC ;$B583EC |\ Convert bytes to upload to words to upload
INC $37 ;$B583ED | | INC $37 ;$B583ED | |
LSR $37 ;$B583EF |/ LSR $37 ;$B583EF |/
INC $32 ;$B583F1 |\ INC $32 ;$B583F1 |\ Increment pointer so the sample data start is the next byte
INC $32 ;$B583F3 |/ INC $32 ;$B583F3 |/
JSR upload_spc_block ;$B583F5 | JSR upload_spc_block ;$B583F5 | Upload the sample data
BRA CODE_B583BC ;$B583F8 / BRA .upload_next_sample ;$B583F8 / Continue uploading samples
CODE_B583FA: .return
RTS ;$B583FA / RTS ;$B583FA > All done, no more samples.
upload_inline_spc_block: ; \ upload_inline_spc_block: ; \
LDA [$32] ;$B583FB |\ Load the destination ARAM address from the block LDA [$32] ;$B583FB |\ Load the destination ARAM address from the block
@ -673,7 +673,7 @@ CODE_B58469:
STA $06 ;$B58486 | STA $06 ;$B58486 |
LDA $0C ;$B58488 | LDA $0C ;$B58488 |
STA $0A ;$B5848A | STA $0A ;$B5848A |
JSR CODE_B582D1 ;$B5848C | JSR sample_uploader ;$B5848C |
RTS ;$B5848F / RTS ;$B5848F /
DATA_B58490: DATA_B58490:

View file

@ -1833,8 +1833,7 @@ DATA_1199:
base off base off
arch 65816 arch 65816
DATA_EE0D86: sample_table:
%offset(DATA_EE0D88, 2)
dl DATA_EECE62 dl DATA_EECE62
dl DATA_EECFFC dl DATA_EECFFC
dl DATA_EED1CC dl DATA_EED1CC
@ -2229,7 +2228,7 @@ DATA_EE117B:
DATA_EE11F6: DATA_EE11F6:
db $00, $00, $00 db $00, $00, $00
DATA_EE11F9: global_sample_map:
db $01, $00, $02, $00, $03, $00, $04, $00 db $01, $00, $02, $00, $03, $00, $04, $00
db $06, $00, $08, $00, $07, $00, $05, $00 db $06, $00, $08, $00, $07, $00, $05, $00
db $00, $00, $A5, $00, $0C, $00, $09, $00 db $00, $00, $A5, $00, $0C, $00, $09, $00

View file

@ -127,7 +127,6 @@ CODE_B3A369 ;<-- Some sort of execptr routine
CODE_B6D923 ;<-- Change to bank BA CODE_B6D923 ;<-- Change to bank BA
DATA_EE0D86 ;Pointers to used at $32 (long)
DATA_EE1086 ;More long pointers DATA_EE1086 ;More long pointers
DATA_EE117B ;Even more DATA_EE117B ;Even more
DATA_BCB600 ;Collision detection pointers DATA_BCB600 ;Collision detection pointers