Full source code for Impulse Tracker, including sound drivers, network drivers, and some supporting documentation
This was originally released on BitBucket in 2014 alongside an article series titled "20 years of Impulse Tracker", but BitBucket sunset mercurial repositories, and so this is now made available on GitHub.
Note that this repository is purely sharing what used to be -- there is no active development, and changes/fixes will not be merged other than issues preventing build.
To build Impulse Tracker, you will need:
Turbo Assembler v4.1
Turbo Link v3.01
Borland MAKE v4.0
A DOS environment
Once you have these, building IT.EXE should be just a single call to MAKE
Sound drivers are build individually via M*.BAT files inside the SoundDrivers subdirectory
IT.ASM: Startup routines
IT_DISK.ASM: Disk IO Routines. Uses IT_D_*.INC files
IT_DISPL.ASM: Display routines for the Playback Screen (F5)
IT_EMS.ASM: EMS memory handling routines
IT_F.ASM: Collection of functions used by the object model
IT_FOUR.ASM: Fast Fourier routines. Used by the graphic equalizer (Alt-F12). Not available on all all sound cards
IT_G.ASM: Global key handler functions
IT_H.ASM: Help Module (F1)
IT_I.ASM: Sample list (F3) and Instrument list (F4) module
IT_K.ASM: Keyboard module
IT_L.ASM: Information line code
IT_M.ASM: Main message loop/dispatcher
IT_MDATA.ASM: Global music variable data
IT_MMTSR.ASM: Sample compression/decompression routines
IT_MOUSE.ASM: Mouse handling code
IT_MSG.ASM: Message editor module (Shift-F9)
IT_MUSIC.ASM: Module playback code. Also uses IT_M_EFF.INC
IT_NET.ASM: Network code
IT_OBJ1.ASM: UI object definitions
IT_PE.ASM: Pattern Editor module (F2)
IT_S.ASM: Screen functions, including character generation
IT_TUTE.ASM: Interactive Tutorial module
IT_VESA.ASM: VESA code for graphic equalizer
SWITCH.INC: High level switches for the program
Q: "What are all those funny characters in the source code?"
A: I wrote the original source code using DOS characters, with characters drawing borders/boxes in comments in the source code. In the interests of posterity, I have left the code intact as it was.
Q: "Why didn't you use STRUCs or ENUMs" in your ASM source?
A: Simply because I didn't know about them at the time. I wish I did. There's a InternalDocumentation folder that I've included in the repository that details what some of the magic numbers appearing through the code might mean.
Q: "Flow in some functions seems to jump all over the place. Why?"
A: The original code was compatible all the way back to an 8086 machine. 8086 would allow you to do conditional jumps only within +/-128 bytes, so I spent too much time shuffling code around to meet this restriction. When I shifted away from this 8086 restriction, I never went back to update the code that was mutilated by it.
BSD 3-clause license can be found in LICENSE.
Hacker News (1)
Assembly
99.6%
Full source code for Impulse Tracker, including sound drivers, network drivers, and some supporting documentation
This was originally released on BitBucket in 2014 alongside an article series titled "20 years of Impulse Tracker", but BitBucket sunset mercurial repositories, and so this is now made available on GitHub.
Note that this repository is purely sharing what used to be -- there is no active development, and changes/fixes will not be merged other than issues preventing build.
To build Impulse Tracker, you will need:
Turbo Assembler v4.1
Turbo Link v3.01
Borland MAKE v4.0
A DOS environment
Once you have these, building IT.EXE should be just a single call to MAKE
Sound drivers are build individually via M*.BAT files inside the SoundDrivers subdirectory
IT.ASM: Startup routines
IT_DISK.ASM: Disk IO Routines. Uses IT_D_*.INC files
IT_DISPL.ASM: Display routines for the Playback Screen (F5)
IT_EMS.ASM: EMS memory handling routines
IT_F.ASM: Collection of functions used by the object model
IT_FOUR.ASM: Fast Fourier routines. Used by the graphic equalizer (Alt-F12). Not available on all all sound cards
IT_G.ASM: Global key handler functions
IT_H.ASM: Help Module (F1)
IT_I.ASM: Sample list (F3) and Instrument list (F4) module
IT_K.ASM: Keyboard module
IT_L.ASM: Information line code
IT_M.ASM: Main message loop/dispatcher
IT_MDATA.ASM: Global music variable data
IT_MMTSR.ASM: Sample compression/decompression routines
IT_MOUSE.ASM: Mouse handling code
IT_MSG.ASM: Message editor module (Shift-F9)
IT_MUSIC.ASM: Module playback code. Also uses IT_M_EFF.INC
IT_NET.ASM: Network code
IT_OBJ1.ASM: UI object definitions
IT_PE.ASM: Pattern Editor module (F2)
IT_S.ASM: Screen functions, including character generation
IT_TUTE.ASM: Interactive Tutorial module
IT_VESA.ASM: VESA code for graphic equalizer
SWITCH.INC: High level switches for the program
Q: "What are all those funny characters in the source code?"
A: I wrote the original source code using DOS characters, with characters drawing borders/boxes in comments in the source code. In the interests of posterity, I have left the code intact as it was.
Q: "Why didn't you use STRUCs or ENUMs" in your ASM source?
A: Simply because I didn't know about them at the time. I wish I did. There's a InternalDocumentation folder that I've included in the repository that details what some of the magic numbers appearing through the code might mean.
Q: "Flow in some functions seems to jump all over the place. Why?"
A: The original code was compatible all the way back to an 8086 machine. 8086 would allow you to do conditional jumps only within +/-128 bytes, so I spent too much time shuffling code around to meet this restriction. When I shifted away from this 8086 restriction, I never went back to update the code that was mutilated by it.
BSD 3-clause license can be found in LICENSE.
Hacker News (1)
Assembly
99.6%