PretrackerRaspberryCasket/original/player.i
2022-12-26 21:50:46 +01:00

102 lines
4.6 KiB
OpenEdge ABL

; MySong offsets
org_sv_num_waves_b = $00
org_sv_num_steps_b = $01
org_sv_num_steps_w = $02
org_sv_patterns_ptr = $04
org_sv_inst_patterns_table = $08 ; 32 ($18) waves max (until $88)
org_sv_curr_pat_pos_l = $88 ; only byte used FIXME why is this part of MySong? Should be in Player
org_sv_pat_pos_len_l = $8c ; only byte used
org_sv_pat_restart_pos_l = $90 ; only byte used
org_sv_pos_data_adr = $94
org_sv_inst_infos_ptr = $98
org_sv_waveinfo_ptr = $9c ; base pointer of wave info
org_sv_pattern_table = $a0 ; until $49c (excl.)
; $4d0 bytes of nothing here
org_sv_wavegen_order_table = $96c ; 24 bytes
; ----------------------------------------
; channel structure
org_pcd_arp_notes_l = 0
org_pcd_arp_note_1_b = 0
org_pcd_arp_note_2_b = 1
org_pcd_arp_note_3_b = 2
org_pcd_last_trigger_pos_w = 4 ; I think this makes sure that we don't retrigger the note on same pos
org_pcd_pat_vol_b = 6 ; Multiplied with volume of instrument.
org_pcd_pat_portamento_speed_b = 7
org_pcd_pat_adsr_rel_delay_b = 8 ; counts down until adsr release. Seems unused?
org_pcd_pat_2nd_inst_num_b = 9
org_pcd_pat_2nd_inst_delay_b = 10 ; low byte only?
org_pcd_pat_vol_ramp_speed_b = 11
org_pcd_new_inst_num_b = 12 ; load new instrument (number)
org_pcd_wave_offset_b = 13
org_pcd_note_off_delay_b = 14 ; time before note is released ($ff = disabled)
org_pcd_note_delay_b = 15 ; $ff = no note delay
org_pcd_pat_portamento_dest_w = $10 ; portamento destination pitch
org_pcd_pat_pitch_slide_w = $12
org_pcd_track_delay_steps_b = $14 ; $00 = no track delay, $ff = stop track delay (this is for the next channel!)
org_pcd_track_delay_offset_b = $15 ; $ff = no track delay
org_pcd_track_delay_vol16_b = $16
org_pcd_inst_vol_w = $18
org_pcd_inst_num_w = $1a ; current instrument number (lower byte used)
org_pcd_inst_wave_num_w = $1c ; current wave number (1 based) (lower byte used)
org_pcd_loaded_inst_vol_w = $1e ; low byte only
org_pcd_inst_sel_arp_note_w = $20
org_pcd_inst_new_step_w = $22 ; seems to be unused
org_pcd_inst_ping_pong_s_w = $24 ; direction of pingpong (-1 / +1)
org_pcd_inst_pitch_pinned_b = $26
org_pcd_inst_vol_slide_w = $28
org_pcd_inst_pitch_w = $2a
org_pcd_inst_curr_port_pitch_w = $2c
org_pcd_inst_note_pitch_w = $2e
org_pcd_inst_pitch_slide_w = $30
org_pcd_inst_subloop_wait_w = $32
org_pcd_inst_loop_offset_l = $34 ; only lower word reasonable
org_pcd_inst_info_ptr = $38 ; pointer to currently active instrument
org_pcd_waveinfo_ptr = $3c ; pointer to currently active waveinfo
org_pcd_adsr_phase_l = $40 ; 0=attack, 1=decay, 2=sustain, 3=release
org_pcd_adsr_phase_speed_b = $44 ;
org_pcd_adsr_pos_w = $46 ; $10 (release pos?)
org_pcd_adsr_vol64_w = $48 ; speed? ($48)+($46)
org_pcd_adsr_attack_speed_l = $4a ; (low byte only)
org_pcd_adsr_decay_speed_l = $4e ; (low byte only)
org_pcd_adsr_sustain_l = $52 ; 15/16 (low byte only)
org_pcd_adsr_release_l = $56 ; read in release (low byte only)
org_pcd_adsr_volume_l = $5a ; 0 for restart / $400 (word only)
org_pcd_adsr_trigger_b = $5e ; 1 for restart (FIXME: never read??)
org_pcd_vibrato_pos_w = $60 ;
org_pcd_vibrato_depth_w = $62 ; is a byte value
org_pcd_vibrato_speed_w = $64 ; is a byte value
org_pcd_vibrato_delay_w = $66 ; is a byte value
org_pcd_inst_step_pos_b = $68
org_pcd_inst_speed_stop_b = $69 ; speed byte, $ff stops processing
org_pcd_inst_line_ticks_b = $6a ; $00
org_pcd_channel_num_b = $6b
org_pcd_track_delay_buffer = $7c ; 16 bytes x 32 steps, until $27c
org_pcd_out_ptr_l = $6c
org_pcd_out_len_w = $70
org_pcd_out_lof_w = $72
org_pcd_out_per_w = $74
org_pcd_out_vol_b = $76
org_pcd_out_trg_b = $77
org_pcd_out_unused_l = $78 ; copied for track delay, but not used?
org_pcd_SIZEOF = $27c
; player global variables (not bound to channel)
org_pv_pat_curr_row_b = $9f0 ; what is this? bit 0 is tested for shuffle
org_pv_next_pat_row_b = $9f1
org_pv_next_pat_pos_b = $9f2
org_pv_pat_speed_b = $9f3 ; speed byte (unfiltered)
org_pv_pat_line_ticks_b = $9f4
org_pv_my_song = $9f6 ; fw_PretrackerMySong
org_pv_pat_stopped_b = $9fa ; 0 = stop, 1 = run
org_pv_wave_sample_table = $9fc ; 24 pointers to sample starts, until $a5c
org_pv_sample_buffer_ptr = $a5c ; pointer to empty sample (for idle channel)
org_pv_osc_buffers = $a60
org_pv_loop_pattern_b = $1c6c ; repeat current pattern, do not advance