Vicious Tracker

Basic and Machine Language

Moderator: Moderators

User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Re: Vicious Tracker

Post by chysn »

Great, I'm looking forward to the next revision!
VIC-20 Projects: wAx Assembler, TRBo: Turtle RescueBot, Helix Colony, Sub Med, Trolley Problem, Dungeon of Dance, ZEPTOPOLIS, MIDI KERNAL, The Archivist, Ed for Prophet-5

WIP: MIDIcast BASIC extension

he/him/his
User avatar
R'zo
Vic 20 Nerd
Posts: 514
Joined: Fri Jan 16, 2015 11:48 pm

Re: Vicious Tracker

Post by R'zo »

I am working on a new update.

VICIOUS TRACKER +
(with goal of cart release)
Vicious Tracker + will not have irq file support for exporting game song files. The scope of + is to be a music arranger/sequencer with midi out support.

New features and changes
-1 midi (selectable channels) out
-1 cv out
-"envelope" channel. This is not a true envelope generator but allows you to have envelope like controls over volume, sample speed and sample length
in a tracker format.
-length channel is designed for control over tempo per arrangement step.
-a new user interface that will be more compact, efficient.
-separating combined byte. For example {octave, note and note values have been combined in 1 byte %000/0000/0. These will be separated into
their own data fields. This will take more ram but there is plenty of room.

The cart will be 8k rom @ blk_5 with 16k ram @ blk_2,3. $a000 will contain the player, user interface and utilities. $4000 will be used for the song file timers and buffers. The current song file is 13k. I still have to add song settings data but that will be less than 1 page leaving me 2k of ram open the timers and buffers. I still have basic ram and lower ram open for play room.

to dos
-user interface
-player

song file format

Code: Select all

;-------------------------------------------------------------------------------
;"VICIOUS TRACKER +" song file template
;Ryan Liston
;11/26/2021
;-------------------------------------------------------------------------------
*=$4000     ;start address

defm        data_field  ;macro for generating data fields
      bytes  /1*/2      ;/1= value
      endm              ;/2= size 


;ARRANGER

;all arrangement data represents a pointer to a pattern 
;data input from interface is multiplied by 16

;9 CHANNELS

;1: vic voice 1 (baritone) @ 36874 ($900a)
arr_baritone      
      data_field 0,256

;2: vic voice 2 (tenor) @ 36875 ($900b)
arr_tenor
      data_field 0,256

;3: vic voice 3 (alto) @ 36876 ($900c)
arr_alto
      data_field 0,256

;4: vic voice 4 (noise) @ 36877 ($900d)
arr_noise
      data_field 0,256

;E: "envelope" controls vic volume @ 36878 ($900e) and speed (sound byte rate)
arr_envelope
      data_field 0,256

;M: midi note channel 0-15
arr_midi
      data_field 0,256

;C: cv line
arr_cv
      data_field 0,256

;L: pattern length
;lenght by exception is not a paattern pointer
;length determine the current pattern length 
;input is direct
;0-15
arr_length
      data_field 255,256

;-------------------------------------------------------------------------------

;PATTERN

;channel 1-4,midi and cv

;values include base note and note sample pointer
;octave/note/tone/sample
;0 to 7/0 to 11/0 to 1/0to 15

;note and sample pointers are devided between 4 parallel data sets
;note, octave and tone values are direct
;sample pointer is multiplied by 16
;oct+note+tone+sample slice value+note pointer value

;baritone patterns
pat_baritone_oct
      data_field 0,256            

pat_baritone_not
      data_field 0,256            

pat_baritone_ton
      data_field 0,256            

pat_baritone_smp
      data_field 0,256            

;tenor patterns
pat_tenor_oct
      data_field 0,256            

pat_tenor_not
      data_field 0,256            

pat_tenor_ton
      data_field 0,256            

pat_tenor_smp
      data_field 0,256            

;alto patterns
pat_alto_oct
      data_field 0,256            

pat_alto_not
      data_field 0,256            

pat_alto_ton
      data_field 0,256            

pat_alto_smp
      data_field 0,256            

;noise patterns
pat_noise_oct
      data_field 0,256            

pat_noise_not
      data_field 0,256            

pat_noise_ton
      data_field 0,256            

pat_noise_smp
      data_field 0,256            

;midi patterns
pat_midi_oct
      data_field 0,256            

pat_midi_not
      data_field 0,256            

pat_midi_ton
      data_field 0,256            

pat_midi_smp
      data_field 0,256            

;cv patterns
pat_cv_oct
      data_field 0,256            

pat_cv_not
      data_field 0,256            

pat_cv_ton
      data_field 0,256            

pat_cv_smp
      data_field 0,256            


;envelope patterns

;values include pointers to volume, speed and the value for current sample 
;      length

;null/sample length/vol/speed
;null/0 to 15/0 to 15/0 to 15

;envelope is split between 3 data sets

;sample length (direct value)
pat_env_len
      data_field 15,256

;volume (points to volume samples)(input*16)
pat_env_vol
      data_field 0,256

;speed (points to speed samples)(input*16)
pat_env_spd
      data_field 0,256

;-------------------------------------------------------------------------------
     
;SAMPLE

;channel 1 to 4,midi and cv

;3 data sets per channel
;octave/note/tone
;0 to 7/0 to 11/0 to 1
;all values are direct

;baritone samples
smp_baritone_oct
      data_field 0,256            

smp_baritone_not
      data_field 0,256            

smp_baritone_ton
      data_field 0,256            

;tenor samples
smp_tenor_oct
      data_field 0,256            

smp_tenor_not
      data_field 0,256            

smp_tenor_ton
      data_field 0,256            

;alto samples
smp_alto_oct
      data_field 0,256            

smp_alto_not
      data_field 0,256            

smp_alto_ton
      data_field 0,256            

;noise samples
smp_noise_oct
      data_field 0,256            

smp_noise_not
      data_field 0,256            

smp_noise_ton
      data_field 0,256            

;midi samples
smp_midi_oct
      data_field 0,256            

smp_midi_not
      data_field 0,256            

smp_midi_ton
      data_field 0,256            

;cv samples
smp_cv_oct
      data_field 0,256            

smp_cv_not
      data_field 0,256            

smp_cv_ton
      data_field 0,256            

;volume samples
;1 data set
;direct values
;0 to 15

smp_vol
      data_field 8,256
;-------------------------------------------------------------------------------
      
      
screen1.PNG
R'zo
I do not believe in obsolete...
User avatar
R'zo
Vic 20 Nerd
Posts: 514
Joined: Fri Jan 16, 2015 11:48 pm

Re: Vicious Tracker

Post by R'zo »

Update to the update...

The previous arrangement section is now relabeled as "phrase". I have added another layer. The new "Arrange" layer will allow you to arrange "phrase" sections in a movement style structure

"arrange" will have 3 elements {begin},{end} and {repeat}.
examples
00,00,3 will play phrase 00 4x
01,8,1 will play phrase 1 through 8 2x
09,29,0 will play 9 through $29 1x
30,30,0 will play $30 once

this pushes the song file up to a clean 16k.
timers and buffers will be set up in basic ram and lower ram.

updated song file

Code: Select all

;*******************************************************************************
;"VICIOUS TRACKER +" song file template
;Ryan Liston
;11/26/2021
;*******************************************************************************
;-------------------------------------------------------------------------------
*=$4000     ;start address

defm        data_field  ;macro for generating data fields
      bytes  /1*/2      ;/1= value
      endm              ;/2= size 


;PHRASE

;all PHRASE data represents a pointer to a pattern 
;data input from interface is multiplied by 16

;9 CHANNELS

;1: vic voice 1 (baritone) @ 36874 ($900a)
phr_baritone      
      data_field 0,256

;2: vic voice 2 (tenor) @ 36875 ($900b)
phr_tenor
      data_field 0,256

;3: vic voice 3 (alto) @ 36876 ($900c)
phr_alto
      data_field 0,256

;4: vic voice 4 (noise) @ 36877 ($900d)
phr_noise
      data_field 0,256

;E: "envelope" controls vic volume @ 36878 ($900e) and speed (sound byte rate)
phr_envelope
      data_field 0,256

;M: midi note channel 0-15
phr_midi
      data_field 0,256

;C: cv line
phr_cv
      data_field 0,256

;L: pattern length
;lenght by exception is not a paattern pointer
;length determine the current pattern length 
;input is direct
;0-15
phr_length
      data_field 255,256

;-------------------------------------------------------------------------------

;PATTERN

;channel 1-4,midi and cv

;values include base note and note sample pointer
;octave/note/tone/sample
;0 to 7/0 to 11/0 to 1/0to 15

;note and sample pointers are devided between 4 parallel data sets
;note, octave and tone values are direct
;sample pointer is multiplied by 16
;oct+note+tone+sample slice value+note pointer value

;baritone patterns
pat_baritone_oct
      data_field 0,256            

pat_baritone_not
      data_field 0,256            

pat_baritone_ton
      data_field 0,256            

pat_baritone_smp
      data_field 0,256            

;tenor patterns
pat_tenor_oct
      data_field 0,256            

pat_tenor_not
      data_field 0,256            

pat_tenor_ton
      data_field 0,256            

pat_tenor_smp
      data_field 0,256            

;alto patterns
pat_alto_oct
      data_field 0,256            

pat_alto_not
      data_field 0,256            

pat_alto_ton
      data_field 0,256            

pat_alto_smp
      data_field 0,256            

;noise patterns
pat_noise_oct
      data_field 0,256            

pat_noise_not
      data_field 0,256            

pat_noise_ton
      data_field 0,256            

pat_noise_smp
      data_field 0,256            

;midi patterns
pat_midi_oct
      data_field 0,256            

pat_midi_not
      data_field 0,256            

pat_midi_ton
      data_field 0,256            

pat_midi_smp
      data_field 0,256            

;cv patterns
pat_cv_oct
      data_field 0,256            

pat_cv_not
      data_field 0,256            

pat_cv_ton
      data_field 0,256            

pat_cv_smp
      data_field 0,256            


;envelope patterns

;values include pointers to volume, speed and the value for current sample 
;      length

;null/sample length/vol/speed
;null/0 to 15/0 to 15/0 to 15

;envelope is split between 3 data sets

;sample length (direct value)
pat_env_len
      data_field 15,256

;volume (points to volume samples)(input*16)
pat_env_vol
      data_field 0,256

;speed (points to speed samples)(input*16)
pat_env_spd
      data_field 0,256

;-------------------------------------------------------------------------------
     
;SAMPLE

;channel 1 to 4,midi and cv

;3 data sets per channel
;octave/note/tone
;0 to 7/0 to 11/0 to 1
;all values are direct

;baritone samples
smp_baritone_oct
      data_field 0,256            

smp_baritone_not
      data_field 0,256            

smp_baritone_ton
      data_field 0,256            

;tenor samples
smp_tenor_oct
      data_field 0,256            

smp_tenor_not
      data_field 0,256            

smp_tenor_ton
      data_field 0,256            

;alto samples
smp_alto_oct
      data_field 0,256            

smp_alto_not
      data_field 0,256            

smp_alto_ton
      data_field 0,256            

;noise samples
smp_noise_oct
      data_field 0,256            

smp_noise_not
      data_field 0,256            

smp_noise_ton
      data_field 0,256            

;midi samples
smp_midi_oct
      data_field 0,256            

smp_midi_not
      data_field 0,256            

smp_midi_ton
      data_field 0,256            

;cv samples
smp_cv_oct
      data_field 0,256            

smp_cv_not
      data_field 0,256            

smp_cv_ton
      data_field 0,256            

;volume samples
;1 data set
;direct values
;0 to 15

smp_vol
      data_field 8,256
      
;-------------------------------------------------------------------------------

;ARRANGE
;input is direct

;indexes phrase step for movement starting point 0-255
arr_begin
      data_field 0,256

;indexes phrase step for movement end point 0-255
arr_end
      data_field 255,256

;number of times the movement repeats
arr_rpt
      data_field0,256       
            
;example
;     00,0f,00    plays phrase $00 to $0f (including $0f) once
;     0a,18,04    plays phrase $0a to $18 (including $18) once and repeats 4x
;     19,19,00    plays phrase $19 once
screen2.PNG
R'zo
I do not believe in obsolete...
Post Reply