Тёмный

Creating a MIDI player in MS-DOS / BASIC 

Bisqwit
Подписаться 147 тыс.
Просмотров 37 тыс.
50% 1

In this tool-assisted education video, I demonstrate how to write a MIDI player from scratch.
Please see this page for more details, including the source code:
bisqwit.iki.fi/jutut/kuvat/pr...
Twitter: / realbisqwit
Patreon: / bisqwit (alternatives at iki.fi/bisqwit/donate.html)
Twitch: / realbisqwit
Homepage: iki.fi/bisqwit/
MIDI is a Music Interchange file format which describes music in abstract terms such as "piano key C-4 pressed down". A synthesizer is required to reproduce audible music from MIDI files. In this tool-assisted education video, I create one such synthesizer program from scratch, using the OPL3 hardware synthesizer as the backend for generating the actual sounds.
You see me type every line. The resulting program contains the rudimentary features for playing most MIDI files just fine, including the pitch slides and pans, but it lacks other special effects like vibrato, nor does it support any more tunings than the standard equal-interval mathematical tuning. It supports the loopStart/loopEnd mechanism found in authentic Final Fantasy VII MIDI files.
This is probably my best MS-DOS MIDI player so far (at least in some aspects), and I have written two. The first one, written in 1998, however eventually evolved also to convert them into S3Ms...
This was also the most difficult production-for-show so far in terms of getting it right; BASIC has its own unique challenges at debugging it, and I did accidentally introduce many bugs into this program, despite writing it from a script. I did fix them too, though. But more time was consumed doing that than I had planned.
Music played during this video:
- Zoolook by Jogeir Liljedalh (a few seconds in the beginning)
- Predicament / Chrono Cross (BGM during programming)
- Chmmr and Arilou themes / Star Control III (MIDI)
- Barret and battle themes / Final Fantasy VII (MIDI)
- Airship and Big whale themes / Final Fantasy IV (MIDI, sequenced by Andrew Thompson)
Songs begin at:
12:00 FF4 Airship
13:02 FF7 Barret
14:33 SC3 Arilou
15:56 FF7 Battle
17:27 FF4 Big Whale
My favourite part of this video: 08:53 onwards.
P.S. Eventually this program evolved into a C++ opensource project! Check it out here: bisqwit.iki.fi/source/adlmidi...

Опубликовано:

 

12 дек 2010

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 118   
@Bisqwit
@Bisqwit 11 лет назад
My syntax highlighter is called "synhili", and you can Google-search it by that name and download it. Do note that it only works in GW-BASIC and other BASICA clones. It works by reading the display memory and rewriting it. As such, it depends on this particular style of user interface, and it does not work in QBasic or QuickBasic. You will however find equivalent features in most modern programming IDEs of today and some of the programming editors, such as Notepad++, Emacs, Joe or Jed.
@Bisqwit
@Bisqwit 13 лет назад
@uilium Thanks for the feedback! Yes, this could be expanded into a sequencer, though not without significant redesign. It is rather trivial to read data from MPU-401 (MIDI I/O port), but timing it is difficult if one wants to store it into a MIDI file. Stuff read from MPU-401 (which is same data as is in MIDI files) can be synthesized with OPL3 as is done in this program.
@Bisqwit
@Bisqwit 13 лет назад
@mattedj The attraction with it for me is that it allows for great music without the use of any copyright data - e.g. audio recordings, i.e. samples. (And I cannot choose good samples anyway.) With OPL, it's just input a few numbers, and there you have a good instrument.
@lordplenty
@lordplenty 2 года назад
I'm frequently looking online for basic code samples, I can't believe I haven't found this video (or related website) earlier. Excellent program, and with just a few changes it runs in flawlessly in PB35 as well. I was surprised that so many GW instructions and syntax are working in PB, while being absent from Power Basic's documentation entirely. The line-number convention made the code a monstrous spaghetti. I've spent days unwinding it to structural form, and I'm only half-way done.
@Kylork
@Kylork 10 лет назад
All I can say is, thumbs up for Chrono Cross music at the beginning there. The song is called "Dilemma". Still my favorite vg of all time and my favorite vg soundtrack. Very cool stuff with with the midi in BASIC too!
@Bisqwit
@Bisqwit 11 лет назад
If you are using DOSBox like I do, you can just hit ctrl-shift-F5 to begin recording. (Change the hotkey to your liking by hitting ctrl-F1 and confirugin.) Otherwise, you will need to find a screen-recorder for your platform. For Windows you might use e.g. Camstudio (it is GPL). For Linux, I do not know the names of any popular related tools, because I usually make my own ones. I have released one, named xgetimage, but it is rather horrible. I have also a better one that is currently unreleased.
@Bisqwit
@Bisqwit 13 лет назад
@OMA2k I use it for creating entertaining videos. Pretty much for nothing else. I use QBasic marginally more (in the recent 8 years or so, PHP took its place for me), but for these videos, sometimes GW-BASIC is the handier tool, because it naturally allows for more concise implementations. Also, I can have syntax highlighting for GW-BASIC within its "IDE", which I cannot do for QBasic. (In a recent video, I used an editor that I created myself to provide similar experience for QBasic.)
@invalid5777
@invalid5777 3 года назад
it's always so amusing to see how quick my code flow goes without any GUI. God, I wish I was born during DOS. It would've been fun :(
@tutorialbiz
@tutorialbiz 13 лет назад
Well done. Very impressive.
@Bisqwit
@Bisqwit 12 лет назад
@kiyotewolf Thanks for the tip: It did not work, though. I tried it, back then. DOSBox simply does not generate the break signal.
@Bisqwit
@Bisqwit 13 лет назад
@waytostoned PAS8 unfortunately does not contain OPL3, which this program requires (for panning). You need PAS16 or some other card that has OPL3. You can make this program OPL2 compatible with little changes, though. (It might even work verbatim, with reduced functionality, but I cannot guarantee it.)
@Bisqwit
@Bisqwit 12 лет назад
@SuperDav3 ..."and Turing"? I never knew there was a programming language by that name. But yeah, nowadays I too do mostly C++ and PHP programming. I only use GW-BASIC and the like for the fun of programming itself, when I want to make presentations like this. I don't think I have created a single BASIC program within last 10 years that did not end up as a video in RU-vid or at least a source code listing on some forum.
@MP5348
@MP5348 11 лет назад
Intelligent and superb work man. Teach me some more programming language.
@mattedj
@mattedj 13 лет назад
OPL sounded amazing
@Bisqwit
@Bisqwit 11 лет назад
I wonder what you seem to think that 64-bit is supposed to sound like -- for I certainly don't know -- but the songs heard in the end of this video are MIDI, where bitness is not even an applicable concept. Pondering on the bitness of MIDI is like asking how fast is sour. In addition, they were played through FM synthesis, where bitness is also not an applicable concept (FM is technically analog, though for practical reasons the actual OPL chip operates in digital and so does the emulator).
@iF3nd3r
@iF3nd3r 12 лет назад
wow dude that is so epic
@tamsanh
@tamsanh 11 лет назад
I've always been curious: How can I get into recording my own programming sessions in this manner? I'd love to be able to record my work on a project in C, in VIM, and have it playback all my frustrations and anguish, and eventual victory, in real time.
@jolk42
@jolk42 11 лет назад
While you write the program, I can't help noticing the colors for the different statements that your are making and how your values and parenthesis are different colors, which makes it very easy to go back and see if you forgot a parenthesis, or if you need to change the value to another value, it's easy to spot, How do you make Basic show the program like that when creating/listing it?
@uilium
@uilium 13 лет назад
Ive been looking for a way to manipulate midi files in GW or QBASIC. It looks like this could be expanded into a sequencer, right? OH THANKS so much! This is the best video I ever seen for me :^)
@XaneMyers
@XaneMyers 7 лет назад
ADLMIDI...hmm...I just checked and yep, this is the same thing that is in Foobar2000's MIDI-playing component! I did see your name in the list of choices for instruments too.
@FAMICOMASTER
@FAMICOMASTER 10 лет назад
Will this work with all sound cards? If not, which ones does it support? I'm thinking ofusing this with Windows 95 on my Toshiba Libretto 50CT with 16MB of RAM if it helps at all.
@therealdutchidiot
@therealdutchidiot 5 лет назад
If it has an OPL2 or OPL3 chip on board it should work, so basically legacy soundcards should work, including adlib.
@Bisqwit
@Bisqwit 12 лет назад
Yes
@adam7868
@adam7868 11 лет назад
the t255 makes and emulates midi files which makes it sooo easy to make them
@williamwilliam9993
@williamwilliam9993 7 лет назад
+Bisqwit what is the song at 14:33. can i find the midi file, Bisqwit?
@Bisqwit
@Bisqwit 7 лет назад
I'm not sure, but try this: www.google.fi/search?q=star+control+3+midi
@mikefennec2397
@mikefennec2397 3 года назад
Very Cool!
@Atri48
@Atri48 12 лет назад
Good video!
@woodstockspoonful8830
@woodstockspoonful8830 10 лет назад
I can't get it to work on QB64 I'm using the newest version at you site but I couldn't find any instructions on how to use it or make it work on QBasic
@woodstockspoonful8830
@woodstockspoonful8830 10 лет назад
Or maybe some instructions for how to use the c++ version I'm new to programming and don't know much
@Bisqwit
@Bisqwit 10 лет назад
Woodstock Spoonful QB64 does not support FM synthesis, so it won't work on it. As for using the C++ version, if you are using Linux, Mingw or Cygwin, you can just download the source code, extract it and type "make". Some small changes may be required on the latter two systems. If you are not using one of those three systems, and especially if you are an unfortunate victim of the Microsoft operating system, then you're on your own, sorry. There's a precompiled version of ADLMIDI though. You can find the link in the comments of the video introducing ADLMIDI.
@mikafoxx2717
@mikafoxx2717 8 лет назад
+Bisqwit Isn't it incredible how time flies? Came across your videos again and couldn't help but watching them over. I had absolutely zero clue on what I was doing when I first commented on your video with "Woodstock Spoonful", and in retrospect.. still don't have a clue. Still applaud your videos and your talent, and I've also finally realized how awful that Microsoft operating system is. Linux all the way. I've always loved the good old days of programming, even had multiple TANDY Color Computers and accessories before someone "accidentally" got rid of them. Anyways, thanks for the videos man, I've always appreciated them, even if I don't have a clue what you're doing the first three quarters of the video.
@TheCoolerFury
@TheCoolerFury 5 лет назад
It seems that RU-vid channel "Noclip" used this video in their Fallout 76 documentary, but you wouldn't know that from their description. The relevant timestamp for that video is ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-gi8PTAJ2Hjs.html.
@Bisqwit
@Bisqwit 5 лет назад
Thanks for the heads-up!
@williamwilliam9993
@williamwilliam9993 7 лет назад
+Bisqwit listen at 15:57. can i find the midi file? Bisqwit?
@Bisqwit
@Bisqwit 7 лет назад
lmgtfy.com/?q=final+fantasy+vii+midi
@ryesalvador1071
@ryesalvador1071 9 лет назад
I've tried the source code with qbasic in dosbox, but I got duplicate definiton, and bad record number error in gwbasic. I've read the comments and it seems basic is actually linking to ASM assembly? I'm new to basic and does not know how does it work? can you give me more insight on this.
@Bisqwit
@Bisqwit 9 лет назад
Ryan Salvador GW-BASIC and QBasic are slightly incompatible. This program uses one of those things that are incompatible. As for the "linking to ASM assembly" part, it happens on lines 173-175 and is explained on lines 176-180. For a quick and lazy way, you could remove lines 173-180 entirely. The only thing it affects is how hot your CPU will run and how much noise the CPU fan will therefore produce in attempt to cool it down. Incidentally, removing that code should also make the program run in QBasic. As for a "bad record number" error, pay attention to this line in the program source code: 160 filename$ = "chmmr.mid" '
@ryesalvador1071
@ryesalvador1071 9 лет назад
Bisqwit Does not work.
@Bisqwit
@Bisqwit 9 лет назад
Ryan Salvador Please describe the symptoms so I can at least have a _chance_ of solving your problem. "Does not work" is the most unhelpful problem report that you could ever devise. EDIT: And here's to show that it does work. bisqwit.iki.fi/kala/midiplay-qb.mp4
@ryesalvador1071
@ryesalvador1071 9 лет назад
Bisqwit Amazing! That solved my problem. I was deleting the lines 173-180 entirely before and then I tried commenting it with single quotes as shown in the video and it worked! Thanks.
@Bisqwit
@Bisqwit 9 лет назад
Ryan Salvador Good to hear. For future reference, here's some useful reading. www.chiark.greenend.org.uk/~sgtatham/bugs.html www.catb.org/esr/faqs/smart-questions.html
@jolk42
@jolk42 11 лет назад
I still use it now, in 2013, haha.
@GabrielMiceli
@GabrielMiceli 8 лет назад
I'm running this in MS-DOS 7.1 with a SoundBlaster Live card, and most of the percussion gets dropped. Is it possible to fix this?
@Bisqwit
@Bisqwit 8 лет назад
No, Soundblaster Live is a horrible card without a real OPL chip. It emulates it to some degree, with bad results.
@GabrielMiceli
@GabrielMiceli 8 лет назад
Bisqwit Thanks for your input. I am now considering buying a SoundBlaster 16 PCI card. Will this work better with it?
@Bisqwit
@Bisqwit 8 лет назад
As long as it's not an "AudioPCI" card.
@GabrielMiceli
@GabrielMiceli 8 лет назад
I wouldn't know. This is what I'm planning to get: amzn.to/2aq3g4L
@Bisqwit
@Bisqwit 8 лет назад
Yes, I believe that would work. Though I am seriously amazed that someone would invest in such old hardware at this day. Note that the Technical Features section on that very page is incorrect and misleading. It claims to quote the manufacturer, but the information in that section applies to Sound Blaster AWE32 (or AWE64), not Sound Blaster 16. As a general principle, I avoid shopping at vendors who provide misleading information.
@JesusJavier-MyAccount
@JesusJavier-MyAccount 4 года назад
Is it possible for there to be a background MIDI player?
@Bisqwit
@Bisqwit 4 года назад
Yes, but not with this tool (GW-BASIC).
@Atri48
@Atri48 12 лет назад
yeah
@Atri48
@Atri48 12 лет назад
DID you wrote the code alone?
@LD49196
@LD49196 6 лет назад
Input the read data on file?
@Bisqwit
@Bisqwit 6 лет назад
I see a question mark, but I don’t see an interrogative.
@Bisqwit
@Bisqwit 13 лет назад
@supepat GW-BASIC.
@williamwilliam9993
@williamwilliam9993 6 лет назад
+Bisqwit hey bisqwit happy new year this is a midi program can i also have ADLMidi, bisqwit?
@Bisqwit
@Bisqwit 6 лет назад
Yes, follow the link in the video description to the page where you can download its source code. Or you can use a Google search. I gather you did neither.
@OMA2k
@OMA2k 13 лет назад
Wow, GW-BASIC still being used in 2010?! O__o I remember writing small programs with it as a child in the early 90s :-) I even created a stupid "key smasher" game in GW-BASIC complete with characters and animations made in Autodesk Animator (shown through AAPLAY with the shell command xD). It was a terrible game but fun to play with friends :-)
@jacquesmit502
@jacquesmit502 6 лет назад
GW-BASIC rules !!!!
@PatrickHamhuis
@PatrickHamhuis 13 лет назад
wich program are you using?
@SagaraS132
@SagaraS132 7 лет назад
Can you offer an EXE file from your ADLMIDI player for the DOSBox? I would like so much to play HMI, HMP and HMQ files under Windows in DOSBox. Compiling the source code is too hard for me. Have not even the knowledge for it. Do not know what I need for it and not how I must proceed. On your Website stand that C++ Code is better as the Basic code. Can you build a binary file from your program. That would be great.
@Bisqwit
@Bisqwit 7 лет назад
The DOSBox version is really a Windows version that is being run with the equivalent of Wine but for DOS. You do not want it. You can download the Windows version instead. bisqwit.iki.fi/src/adlmidi-122-win32.zip Note that this is rather an old version, because I distribute software as source code and only make binaries (let alone Windows binaries) when I have a particular reason to (since it involves extra effort).
@SagaraS132
@SagaraS132 7 лет назад
But can this tool playing HMI, HMP and HMQ files? Because the original games have the human machine interface midi. I search a tool that can play this files directly. Optional that can switch the instrument bank files. And for all version of HMI, HMP and HMQ. I have many old games that have this files. Daggerfall, Descent, Normality etc. But no tool play it. Only the Setup tool, but this is not compatible with every game. Because the other drivers are always different. MIDI only is not the problem. Also other MIDI files such as MOD, SND, XMI, etc. do not. XMI Files are midis for Miles Sound System. Give a player for it. MOD, MUS and other midi tracker files are available for games, e.g. DOOM, Heretic, etc. The player I use as is OpenMPT. IMF files can be found at iD games. WOLF3D, Commander Keen, etc. The player that i use is IMFPlay and is only for DOS. The imf2wav converter are bit buggy by the sound. The imfplay is very good. Only any Human machine interface files gives no player. And i search a player for it. But I cannot so good programming as you. Can one actually write such an HMI player at all.
@Bisqwit
@Bisqwit 7 лет назад
No, it cannot play HMI, HMP, HMQ, or XMP files. You must first convert them into MIDI. There exist free tools for that. Then, you can use ADLMIDI to play those songs using the original AdLib soundbanks that the game had which ADLMIDI has. ADLMIDI also supports GMD/MUS files (ScummVM), MUS/DMX files (Doom), IMF files and CMF/CTMF files, but probably not all of those yet in the old precompiled Windows binary that is provided for convenience for those who are challenged in using a compiler.
@SagaraS132
@SagaraS132 7 лет назад
Perhaps that your program supports these HMI files sometime in the future? Because that would be really awesome. Otherwise your adlmidi player is really brilliant. But if there are too many instruments that overlap, it scratches horribly at the play. Is this already fixed in the newer versions?
@Bisqwit
@Bisqwit 7 лет назад
I haven't added HMI file support, because I don't know the format, and there already exist good lossless MIDI conversions thereof. As for the instrument overflow, after the bank number you can give another number that specifies the number of cards it simulates (also, how many 4-op channels it creates). These numbers help alleviate channel congestion.
@tekra8971
@tekra8971 9 лет назад
Bisqwit, what is the song at 11:19? I really love that song.
@Bisqwit
@Bisqwit 9 лет назад
It is the Chmmr theme song from the PC game of Star Control III.
@tekra8971
@tekra8971 9 лет назад
Bisqwit You should give me a MIDI file or an mp3 of the song. I can't find it anywhere. You do not have to, but it is a good song, especially when you programmed it. When it started, the bassline offset gave me the chills. It is amazing.
@Bisqwit
@Bisqwit 9 лет назад
Tech Quad You can find it here: bisqwit.iki.fi/music/misc/sc3_chmmr.mid
@tekra8971
@tekra8971 9 лет назад
YOU ARE THE BEST, DUDE
@michaelgulak
@michaelgulak 2 года назад
So was it necessary to use hugely nostalgic music from all my favorite FF games and catch me off guard in this? :)
@Bisqwit
@Bisqwit 2 года назад
Absolutely!
@MercurioMarco
@MercurioMarco 12 лет назад
Thumb up for FFVII music!!
@KuraIthys
@KuraIthys 7 лет назад
Mmh. This reminds me of my project to try and cram a YM2612 into a Super Nintendo cartridge. Mostly to mess with people. Also... Because I can. XD
@Bisqwit
@Bisqwit 7 лет назад
Sounds cool!
@PeterSwinkels
@PeterSwinkels 2 года назад
Okay, being able to write a MIDI player in GWBasic is kind of amazing but doing so is also kind of silly imho. Q(uick) Basic runs on practically the same kind of hardware but is vastly superior in at least a dozen or so ways.
@PeterSwinkels
@PeterSwinkels 2 года назад
Q(uick) Basic: 1. Is faster. 2. Supports long integers. 3. Supports 64k strings. 4. Supports binary file access. 5. Supports VGA. 6. Supports structures. 7. Supports procedures and functions with their own separate scope. 8. No mandatory line numbers. 9. Supports labels. 10. Offers a way to exit loops without resorting to using to the GOTO statement. 11. Supports unconditional loops. 12. Conditional expressions can be placed at the end of the loop. 13. Supports SELECT CASE. 14. Supports multiline blocks in IF statements. 15. Supports multiple branches for IF statements. 16. Supports constants. 17. Offers functions for converting the letter case in strings. 18. Comes with a much better editor. 19. Supports arrays with a variable base. 20. Has a way to check array boundaries.
@Bisqwit
@Bisqwit 2 года назад
But it does not have syntax highlighting (neither does GW-BASIC, but I added it. I could not use the same method to add colors in QB). This was the primary reason I used GW-BASIC. It made for a cooler video. If I wanted to write an actual MIDI player, I would use C++, which I did: bisqwit.iki.fi/source/adlmidi.html (based on the work I did in this video).
@PeterSwinkels
@PeterSwinkels 2 года назад
@@Bisqwit It looks cooler, but if written in Q(uick) Basic while taking advantage of it's more advanced features the code would actually be easier to work with. I've been converting it and while I admire your programming skills I maintain that your GWBasic code is spaghetti. Also, just some feedback: all dialects of BASIC I am aware of use -1 for TRUE and not 1. Although you can use any non-zero value, this can cause issues when using boolean operators. (AND/OR/XOR/NOT/etc.). Also your code appears to be wasting array space. I see several loops iterating though a base zero arrray which start counting at one.
@Bisqwit
@Bisqwit 2 года назад
Easier to work with - arguable. Most of all this video was all about _presentation of progress,_ and GW-BASIC worked best for presentation. On QB, if you use SUB/FUNCTION instead of GOSUB, you are _forced_ to remove a subroutine from screen when you start working on the next one (because each of them are on different _tab_ in the F2 view), which would mean that either the code is hidden from screen as soon as it’s complete (no chance to read it) or the video would have to include pauses (breaks pacing, invites the viewer to start skipping through the video, ugly). Code is spaghetti ­- arguable although more true; this is a downside of using GW-BASIC. However, I did the best I could: All subroutines were clearly separated and marked as such, and indents were used for all loops and such, whether said loops were done using FOR/NEXT, WHILE/WEND or IF…GOTO. Truth values - true, I’m not sure why I used 1 for the paused variable. I could have done “NOT paused” just as well. Maybe it was a matter of personal preference, maybe an oversight. Wasting array space - GW-BASIC does not support the 1 TO 100 syntax in DIM declarations that QB does, and I needed 0-index for _most_ arrays, so I just resigned to wasting the zero index. I also didn’t want to add new OPTION BASE statements - which, I think, are not even allowed in QB after the first non-declaration statement. Not a big deal, just one INTEGER/DOUBLE wasted per array, 9 in total.
@PeterSwinkels
@PeterSwinkels 2 года назад
@@Bisqwit Good point regarding the SUB/FUNCTION bit. I remember having already replied to this, but it seems my comment got deleted. I hope I wasn't being offense. If so, I appologize. If you're interested, I uploaded a syntax highlighter for QB at my GitHub.
@RobertPendell
@RobertPendell 5 лет назад
Eight and a half years later I find this video. You had to play a bunch of Final Fantasy MIDI's didn't you?
@Bisqwit
@Bisqwit 5 лет назад
Yeah! As MIDIs go they’re on my top favorites.
@adam7868
@adam7868 11 лет назад
if only gwbasic had a format function then i could go somthing like noteread$ = format "ff ff" boom there done enjoy but unfortunatly thats a downsider about it
@yumenokoyume
@yumenokoyume 10 лет назад
Chrono Trigger music
@adam7868
@adam7868 11 лет назад
kind of hard to beleve rhat all those songs were 8bit they sounded so 64bit
@bas777ien
@bas777ien 3 месяца назад
Oh no, the Chrono Cross music has been removed!
@Bisqwit
@Bisqwit 3 месяца назад
Unfortunately yes. It got copyright-claimed.
@bas777ien
@bas777ien 3 месяца назад
@@Bisqwit That is really sad. I used to watch some of your videos before sleeping, and the combination of the code being written and the music made for a relaxing experience. I think my favourite is the OpenGL/C++ one with the Lufia II Theme.
@kapteenijuhani
@kapteenijuhani 9 лет назад
Chrono cross pauhaa
@Bisqwit
@Bisqwit 9 лет назад
Näin on. Harvoja soundtrackeja mitä jaksan kuunnella.
Далее
Why DOS Was (and Is) a Thing
32:24
Просмотров 169 тыс.
Я читаю переписки сына
00:18
Просмотров 651 тыс.
QVZ PREMYER LIGA
00:18
Просмотров 644 тыс.
The Incredible Musical Keyboard for the Commodore 64
9:43
I wrote a Raytracer for DOS, 16 VGA colors
15:00
Просмотров 894 тыс.
What is the Smallest Possible .EXE?
17:57
Просмотров 305 тыс.
What Happened to MIDI? | Nostalgia Nerd
24:39
Просмотров 449 тыс.
How to program DOS in graphics mode
15:47
Просмотров 6 тыс.
What are EXE files made of?
11:00
Просмотров 144 тыс.
101 MS DOS GAMES (1978-1997)
21:03
Просмотров 1,7 млн