Meta tags:
Headings (most frequently used words):
sound, commands, patrol, the, and, moon, scheduling, mood, arcade, game, mechanics, of, boards, hardware, three, solutions, specific, code, bugs, bass, groove, corrections, threading, language, mpsl, music, flow, simple, complex, scripts, sequencers,
Text of the page (most frequently used words):
the (489), and (133), sound (114), code (78), value (62), are (53), music (46), time (45), journal (44), for (42), voice (42), #command (41), ramuse (41), commands (38), that (37), this (35), effect (33), note (31), register (31), one (30), txt (30), effects (29), two (29), with (28), but (28), all (26), there (26), cas (26), three (25), hardware (25), from (24), each (24), frogger (24), patrol (23), volume (22), chip (22), voices (22), has (22), moon (22), pilot (22), notes (20), number (19), byte (19), script (18), fine (18), set (18), next (17), thread (17), board (17), frequency (16), bit (16), threads (16), coarse (15), base (15), game (15), like (15), sounds (15), these (14), ay0 (14), language (14), can (14), priority (14), main (14), single (14), noise (13), used (13), test (13), tone (12), force (12), stop (12), start (12), only (12), not (11), played (11), sets (11), ticks (11), then (11), will (11), use (11), sequencer (11), explosion (11), playing (11), other (11), cpu (11), uses (11), delta (11), return (11), complex (11), specific (11), have (11), song (10), you (10), same (10), line (10), background (10), different (10), envelope (10), they (10), channels (10), over (10), new (10), control (10), arcade (10), tick (9), writes (9), registers (9), second (9), car (9), dedicated (9), which (9), rval (9), its (9), every (8), off (8), channel (8), data (8), scripts (8), what (8), when (8), processor (8), chips (8), samples (8), player (8), table (8), sequencer0 (8), scheduling (8), write (8), more (8), never (8), pdf (8), drum (7), simple (7), period (7), thus (7), first (7), higher (7), four (7), missile (7), ay1 (7), sequencers (7), current (7), i94 (7), i98 (7), cnt (7), them (7), longer (7), usually (7), call (7), separate (7), z80 (7), boards (7), out (6), program (6), frequencies (6), see (6), decay (6), always (6), six (6), into (6), generator (6), groove (6), play (6), independently (6), coin (6), ufo (6), continuous (6), space (6), bytes (6), plays (6), was (6), mixer (6), values (6), change (6), defines (6), any (6), individual (6), flow (6), just (6), soundramuse (6), soundhardware (6), defender (6), gets (5), quarter (5), through (5), does (5), very (5), were (5), how (5), since (5), possible (5), lower (5), jumping (5), abc (5), bug (5), also (5), should (5), instead (5), end (5), instance (5), between (5), given (5), multiple (5), times (5), again (5), address (5), domain (5), upper (5), most (5), mpsl (5), loop (5), asm (5), soundcode (5), konami (4), actual (4), lines (4), jumps (4), volume_decay_speed (4), bass (4), scripting (4), calls (4), requested (4), 6803 (4), starting (4), handles (4), flying (4), jump (4), writing (4), interrupt (4), fcad (4), called (4), developer (4), here (4), bugs (4), adds (4), sweep (4), target (4), delay (4), once (4), whether (4), map (4), bits (4), clock (4), own (4), rom (4), early (4), processing (4), process (4), special (4), look (4), length (4), timing (4), maps (4), long (4), precise (4), starts (4), finish (4), laser (4), both (4), audio (4), 8910 (4), phoenixj (4), show (3), beats (3), executed (3), continue (3), started (3), beat (3), eighth (3), actually (3), back (3), decays (3), numbers (3), original (3), itself (3), dac (3), shooting (3), rocks (3), saucers (3), last (3), schedule (3), firing (3), than (3), missiles (3), passing (3), point (3), preempt (3), come (3), above (3), plant (3), sample (3), word (3), pointer (3), after (3), goal (3), include (3), ignore (3), sequencer1 (3), ports (3), request (3), found (3), tied (3), routine (3), jsr (3), lda (3), flag (3), doesn (3), fd7e (3), form (3), inc (3), good (3), sweeps (3), c_toggle_register (3), list (3), level (3), counter (3), automatically (3), decrements (3), harmony (3), ccff (3), several (3), share (3), returns (3), general (3), processes (3), software (3), well (3), tempo (3), shortest (3), mostly (3), power (3), twice (3), ends (3), defining (3), take (3), added (3), musical (3), running (3), alien (3), priorities (3), without (3), subroutine (3), great (3), requires (3), threading (3), simultaneous (3), solutions (3), provides (3), often (3), independent (3), scramble (3), instruments (3), bank7 (3), bank3 (3), bank2 (3), bank1 (3), invaders (3), jpg (3), tony (2), name (2), corrections (2), java (2), piano (2), automatic (2), make (2), sometimes (2), fragments (2), enables (2), evolves (2), case (2), makes (2), looking (2), dig (2), text (2), disassembly (2), did (2), represent (2), handled (2), resets (2), ram (2), using (2), matter (2), else (2), everything (2), remember (2), ground (2), already (2), restarted (2), takes (2), care (2), inserts (2), strategic (2), points (2), during (2), gap (2), disable (2), f004 (2), right (2), ending (2), reaching (2), congratulations (2), controls (2), input (2), reads (2), function (2), idle (2), even (2), though (2), 10_111_111 (2), ff83 (2), anything (2), sta (2), really (2), problems (2), don (2), cause (2), could (2), fd73 (2), store (2), fd7c (2), would (2), fd82 (2), fd84 (2), shortly (2), decrementing (2), increment (2), written (2), thing (2), alternate (2), 101_r_rrrr (2), add (2), pair (2), r0rrr (2), allows (2), defined (2), alternating (2), many (2), c_register_samples (2), regular (2), intervals (2), set_volume_and_reset_decay (2), dies (2), configure (2), modifying (2), run (2), until (2), clear (2), reload (2), five (2), quick (2), poke (2), configured (2), among (2), lets (2), rate (2), state (2), making (2), available (2), another (2), dacs (2), pre (2), recorded (2), half (2), virtual (2), developers (2), free (2), focus (2), tedious (2), purpose (2), before (2), maintains (2), driven (2), requests (2), wiki (2), turn (2), frees (2), treat (2), coded (2), manually (2), configurable (2), simply (2), allow (2), define (2), changes (2), changing (2), beginning (2), instrument (2), melody (2), designing (2), involves (2), envelopes (2), lot (2), stops (2), changed (2), bomb (2), important (2), frog (2), highest (2), scheduler (2), inserted (2), implemented (2), either (2), page (2), deal (2), straight (2), away (2), service (2), algorithm (2), pure (2), capacitors (2), manages (2), blast (2), filter (2), controlled (2), games (2), burger (2), evolve (2), must (2), later (2), exploding (2), ongoing (2), object (2), examples (2), shot (2), mechanics (2), site (2), classic (2), mood (2), blend (2), bedlam (2), code1 (2), ramuse1 (2), pyramid (2), bank6 (2), bank5 (2), bank4 (2), bank0 (2), after_25 (2), after_24 (2), after_23 (2), after_22 (2), after_21 (2), after_20 (2), after_19 (2), after_18 (2), after_17 (2), after_16 (2), after_15 (2), after_14 (2), after_13 (2), after_12 (2), after_11 (2), after_10 (2), after_9 (2), after_8 (2), after_7 (2), after_6 (2), after_5 (2), after_4 (2), after_3 (2), after_2 (2), after_1 (2), after_start (2), asteroids (2), may2025 (2), func (2), main2 (2), vectorrom (2), moonpatrolsound (2), gfx2 (2), sprites (2), gfx1 (2), theory (2), boot (2), 1loader (2), pointed, company, kanomi, thanks, modified, disassembler, being, asterisks, where, produced, closest, keyboard, utilizing, 02a7, restarting, fragment, almost, themselves, entirely, lining, listen, notice, patterns, composed, stitch, together, top, onboard, ramp, down, slower, deeper, high, pitch, decreased, let, refer, wrote, read, binary, f464, f986, generate, wonder, looked, names, labels, specially, entire, reinitializes, silences, clears, going, comes, screeching, halt, short, consume, anytime, overlap, applied, rapid, succession, ignored, explosions, busy, swirling, explosioncommands, 801, stream, f400, reinitialize, f404, 400, f000, f408, hitting, f40c, 3fc, f410, f414, f418, f41c, f420, reserved, slots, f424, f428, f42c, f430, f434, f438, f43c, f440, bet, commandscripts, f444, sequencer2, f446, restart, f448, f44a, f44c, sequencer3, f44e, f450, f452, f454, f456, f458, f45a, f45c, opening, f45e, f460, f462, ay38910, triggering, irq, functions, disabling, except, silenced, continues, 00ba, ors, zero, know, whatever, intended, getting, done, ff74, 10_111_110, bug2, initialization, pointless, ff85, ora, ff87, potential, errors, future, reuse, years, old, nobody, anymore, moot, increments, overflow, appear, fd6e, fd70, psha, hold, sign, check, fd71, ldx, adda, adjust, fd75, fd77, pula, fd78, bmi, fd86, handle, fd7a, bcc, carry, bug1, math, fcdd, fd81, incb, bra, fdd1, snippet, c_sweep_voice_register, 110_r_0rrr, c_sweep_voice_pair, 110_r_1rrr, flavors, c_sweep_voice, subtracts, decrement, 0020, steps, 16ms, occur, rrrrr, 100_r_rrrr, finally, modify, enabled, modifies, reading, threetone, creates, generates, cool, following, multi, parser, loaded, sequence, 0m0r_rrrr, threevoice, 0m1c_0000, threevoices, 0m1c_011o, ayc, 0m1c_10vv, 0m1c_11vv, programmatic, returned, decrease, auto, functionality, die, mmll, puts, stores, location, stacked, stored, memory, stack, deep, goto, clever, statement, nmi, handler, reproduce, lasts, eat, 1st, 4th, processors, working, their, programs, machine, twiddling, isolation, natural, instruction, concepts, languages, machines, rooted, systems, pulls, advances, wait, along, information, 4000hz, non, maskable, generated, msm5205, divides, 4ms, heart, describe, ish, details, follow, basic, types, http, wikipedia, org, moon_patrol, reset, amplitude, absolute, rest, silence, handling, proper, naturally, powers, counts, interval, count, too, per, basis, notation, lengths, whole, etc, dotted, ties, represented, encodes, nicely, converted, still, stark, contrast, fact, absolutely, stuffing, seems, inefficient, rarely, setting, ays, generally, bounce, octaves, advantage, low, evolved, nearly, identical, some, features, modern, pianos, keys, midi, electronic, standard, 128, middle, 261, 63hz, far, fewer, artistic, starving, composer, rendering, programmer, job, managing, stopping, full, preempting, dedication, policy, radically, explodes, letting, simpler, means, squad, appears, 1910, support, drop, hopping, lowest, deciding, might, register_samples, toggle_register, specified, gives, set_volume, decay_speed, sure, designers, describes, overview, aid, discussion, experts, programming, interpreter, eats, cycles, however, developed, knowledge, breaks, forward, learn, invented, aware, build, give, ball, hand, interpreted, implement, contains, why, trouble, routines, initializer, initialzer, initial, states, tell, ended, 250hz, 175hz, blazing, 700hz, runs, brief, waits, interrupts, briefly, looks, below, timepilot, having, moonpatrol, common, approach, assigned, mapped, moment, manipulating, included, scaf, evolutions, 6801, similar, switch, capacitor, network, 047uf, 220uf, switched, path, capacitance, configurations, none, 047, 220, 267, earliest, third, plenty, ttl, compatible, output, receive, pattern, repeating, nature, fast, warble, repeats, gunshot, impossible, circuit, circuits, labeled, configures, popular, computers, heard, classics, 1942, journey, jungle, hunt, spy, hunter, tron, tigers, few, provided, allowed, sends, decides, limited, resources, needs, currently, decide, interrupted, momentarily, resource, something, spice, integral, part, rhythms, beneath, unless, coding, ice, cream, truck, sine, waves, abruptly, waveforms, inherent, harmonics, trumpets, flutes, attacks, hard, slowly, quickly, fades, imagine, loud, nothing, white, random, spread, average, may, seem, big, world, racecar, motor, falling, mother, ship, traversing, screen, removed, fall, categories, record, event, fraction, completion, compare, approached, slightly, way, disassembled, froger, shoot, side, scroller, drives, buggy, pits, shoots, thought, boring, worth, anyone, walking, past, leave, mall, riff, stuck, his, head, zip, tools, stoned, morris, worm, virus, usvdobjs, ssvdobjs, section9, section8, section7, section6, section5, section4, section3, section2, section1, xenos, raakatu, code2, ramuse2, hauntedhouse, hardwaredisk, hardwarelevel1, hardwarelevel2, trs80, tetris, bank1f, bank1e, bank1d, bank1c, bank1b, bank1a, bank19, bank18, bank17, bank16, bank15, bank14, bank13, bank12, bank11, bank10, bank0f, bank0e, bank0d, bank0c, bank0b, bank0a, bank09, bank08, bank07, bank06, bank05, bank04, bank03, bank02, bank01, bank00, link, awakening, gameboy, kid, icarus, zelda, nes, doubleback, analyzer, downland, daggorath, popcorn, mega, savegameviewer, walk, madness, minotaur, raaka, work, coco, data350, code350, dataorg, codeorg, colossalcave, codebank7, codebank6, codebank5, codebank4, codebank3, codebank2, codebank1, codebank0, entombed, doublegap, double, codepal, combat, chess, battle, zone, stella, info, atari2600, sea, wolf, pit, tempest, scap, hhi, foreground, phoenix, pooyan, dvgprom, soundboard, mainboard, omega, race, textcolors, spritecolorsets, spritecolors, imagebackgroundcolors, gfx5, city, gfx4, hills, gfx3, mountains, cpu1fix, prompalettesprite, prompalettechar, promcolors, characters, cpu3, cpu2, secondary, cpu1, galaga, gfx, donkey, kong, soundrom, vid, mapping, bankfixed, memorymap, graphicsandcharacterassetinfo, crazyclimbermemorymapinfo, charenc, cclimber, buildings, bigspritegraphics, crazy, climber, centipede, dvg, orig, dec, rainbow, islands, amiga, home, contact,
Text of the page (random words):
gisters to control is pattern period and repeating nature a fast on off warble that repeats is great for a firing laser sound an envelope that dies off once is great for a gunshot a noise effect since there is only one envelope control it is impossible to have two sound effects using separate envelope controls at the same time the ay 3 8910 provides two general purpose 8 bit ttl compatible input output ports sound boards often use these i o ports receive commands from the main board three solutions time pilot uses a z80 cpu and two ay 3 8910 chips moon patrol uses a 6803 cpu and two ay 3 8910 chips frogger the earliest board uses a z80 cpu and just one ay chip frogger is mostly two voice music with a third voice for sound effects three voices were plenty frogger and time pilot are both by konami they used similar solutions to sound both boards use a switch capacitor audio filter network each ay voice has two capacitors 0 047uf and 0 220uf that can be switched into the audio path there are four possible filter capacitance configurations none 0 047 0 220 or both added 0 267 frogger uses a z80 cpu and 1 ay sound chip 3 voices konami included a scaf on evolutions of the sound board time pilot uses a z80 and 2 sound chips moon patrol uses 2 ay chips and a 6801 cpu threading sound evolves over time a thread is the code that changes the volume and frequency of a single sound effect over time at any given moment there could be several threads manipulating different simultaneous sound effects frogger and time pilot use a common approach for time pilot there are six possible threads each tied to one of the six ay channels two chips times three voices each if a laser blast is assigned to thread two then channel b of ay chip 1 is dedicated to the laser blast from start to finish frogger has three threads mapped to its three voices one chip moon patrol has six voices but only four threads as we will see shortly frogger and timepilot map threads to channels with each thread having one channel moonpatrol maps individual sound effects to individual channels with a thread a thread manages several channels all three sound boards are time driven a main loop ticks at regular intervals and runs all threads for a brief time then the loop waits for the next tick and processes all threads again the main board interrupts the loop briefly to request a new sound command the interrupt service looks for an available thread to start the new sound on see below the moon patrol main thread loop ticks at 250hz time pilot ticks at 175hz frogger ticks at a blazing 700hz but only has three threads to process in frogger and time pilot the individual threads are implemented as z80 code each sound effect has two routines an initializer and a player on the first tick of an effect the initialzer sets up the capacitors and initial states of the sound from then on the thread calls the player routine on every tick the player routine returns a flag to tell the main loop if the sound has ended or if it should continue next tick moon patrol on the other hand uses an interpreted language to implement the threads sound scripts are written in a domain specific language that contains jumps and subroutine calls and complex commands dedicated to sound why the trouble the pure z80 code requires the sound effect code to be aware of the threading instead of designing a sound effect from start to finish the developer has to build in return and come back points in the algorithm to give up the ball for the other threads with the domain specific language however the sound script is developed from start to finish in a straight line without any knowledge of how when the cpu breaks away to service the other threads the sound algorithm is more straight forward but it requires the developer to learn a new invented language with the domain specific language the developer gets to focus on sound effects the commands in the language are sound specific sound developers don t have to be experts in z80 programming but the domain specific language requires an interpreter which eats up code space in rom and cpu cycles when running moon patrol sound language mpsl i m sure that s not what the designers called it mpsl the moon patrol page describes these commands in great deal but a quick overview will aid the discussion here there are simple commands and complex commands and commands to control program flow the flow commands are stop call subroutine and return from subroutine the simple commands allow the mpsl program to write to a value to any register on either chip with the register the mpsl program gives the register number and the new value there is a command to set_volume of a voice voices 1 6 there is a command to set the automatic decay_speed of a voice there are three complex commands implemented in the code register_samples plays a list of values to a single register one value every tick it is only used in the ufo explosion effect the toggle_register command writes an alternating value to a single register every tick this command is never used there is a sweep command to change the value of a register from a starting value to an ending value over a specified time value scheduling there are usually multiple sound effects playing at the same time sound effects and music come and go independently of one another scheduling is the process of deciding which sound effects should be started on which threads sound effects have priorities the coin inserted sound for instance might be more important than a missile sound if a missile sound is playing and a coin is inserted the scheduler can stop the missile sound and start the higher priority coin sound frogger has 24 different sound effects that the main game board can request by number the sound board uses a table to look up the priority of a sound the higher the priority value in the table the more important the sound is the frog hopping sound for instance has the highest priority it will always be played the scheduler will stop the lowest priority command and start the highest priority the separate music voices are handled as separate sound effects the main board starts them one right after the other the support or harmony voices have a lower priority and if a lot of sounds are played the background voices will drop out time pilot has 28 different sounds that map to the six threads like in frogger each sound has a priority but instead of looking up the command number in a table the command number is the priority thus if all six threads are playing sounds then command 11 squad appears will preempt command 3 1910 bomb letting the command number be the priority makes the sound board simpler but it means that the priorities can t be changed without changing the main code in frogger the priorities are in a table in the sound board they can be changed without modifying the main code the moon patrol scheduling is radically different voices 1 2 and 3 are dedicated to 3 voice music on thread 0 when the player s car explodes thread 0 stops the music and plays a 3 voice complex explosion effect during game play the music is only 2 voices running on thread 0 the music plays on voices 1 and 2 thread 1 is used to play continuous alien sounds on voice 3 continuous sounds are the space plant and the ufo flying voices 5 and 6 are dedicated to the car jumping sound with thread 3 there is a lot of jumping in the game the dedication is a good policy thread 2 has full control of voice 4 there are four sounds that share that thread voice they use the priority preempting schedule like time pilot and frogger music designing music is an artistic process that involves a starving composer and a piano rendering that music is the programmer s job and involves managing precise musical frequencies precise musical timing and note envelopes for starting and stopping most modern pianos have 88 keys each with a very specific frequency the midi electronic music standard defines 128 note numbers note 60 maps to middle c which has a frequency of 261 63hz the ay uses two registers to define a frequency value but there are far fewer possible frequencies in music frogger and time pilot use a note table to map a note number to a two byte frequency remember the time pilot code is an evolved form of frogger music processing is nearly identical but time pilot adds some new features a song doesn t generally bounce all over the list of possible notes the notes of a song are usually all with the same two or three octaves frogger and time pilot take advantage of this by defining a note as a five bit number 0 31 added to a base note number the base note number is set at the beginning of the song this defines whether the music is a low instrument like a base groove or a higher main melody moon patrol in stark contrast has no note table at all in fact it has absolutely no music processing at all music is coded just like all other sound effects the notes are played by stuffing a two byte value into the ay frequency registers for each note with the register command this seems inefficient but the upper byte of the two byte value rarely changes the music script ends up setting the ays upper byte once and then changing the lower byte for each new note like frogger and time pilot the upper byte ends up defining the base note value and the lower byte ends up defining the individual notes frogger and time pilot use 5 bit note numbers 0 31 the upper three bits define the note length the note length is converted to a power of two for instance a note length value of 1 is the shortest note a value of 2 is twice as long as the shortest value 1 2 times longer a value of 3 is twice as long again 1 2 2 4 times longer a value of 4 is twice longer still 1 2 2 2 8 times longer this notation maps well to music which is defined mostly in notes with power of two lengths like whole notes half notes quarter notes eighth notes etc music does allow for dotted notes and ties between notes that can t be represented as a power of two but most music encodes nicely the base music interval the shortest note is configurable for the song this is simply a count of the base ticks this value defines the base tempo of the song the frogger code decrements the volume of the playing note automatically the time pilot code decrements the volume too but the rate is configurable on a per voice basis again moon patrol doesn t have any specific music handling at all the sound effect scripts delay the proper note length before playing the next note in frogger and time pilot music timing is coded more naturally in powers of two in moon patrol the timing is code manually in tick counts frogger and time pilot treat note number 0 as a rest silence no matter what the base note adds in they treat the value 31 as a flag that the upper 3 bits represent a special command thus there can be 8 special commands for frogger the special commands look like this 0 set the base note value to the next byte in the music data 1 set the base tempo value to the next byte in the music data 2 set the voice s volume to the next byte in the music data 3 7 turn voice off and end music processing on the voice frees the thread for other sounds for time pilot the special commands look like this 0 set the base note value to the next byte in the music data 1 set the base tempo for the voice to the next byte in the music data 2 set the voice s volume to the next byte in the music data 3 reset current note s amplitude 4 5 7 turn voice off and end the music process on the voice frees the thread for other sounds 6 jump to new music address next two bytes in the music data are absolute address moon patrol specific moon patrol on the wiki http en wikipedia org wiki moon_patrol the heart of the sound software is a scripting language used to describe sound effects in a language that is more well sound effect ish specific details follow but there are three basic types of commands in the language simple commands like set a register on a chip flow commands call return and complex commands that change a single voice frequency over a longer period of time the sound processor maintains four separate script sequencers each sequencer maintains its own script pointer or program counter along with two bytes of state information the software is driven by a 4000hz clock on the non maskable interrupt of the processor this clock is generated by the msm5205 as it requests samples from the cpu the software divides the clock by 16 and calls all four sequencers one at a time every 4ms each sequencer pulls its next command from its script advances its script pointer and processes the command the command returns the number of ticks to wait before processing the next command the sequencers are like separate threads separate processors working on their own programs independently of each other the scripting virtual machine takes care of twiddling the hardware and scheduling time for each script developers are free to focus on single sound scripts in isolation they are free to use a scripting language more natural to sound effects instead of the more tedious general purpose 6803 instruction set the concepts of domain specific languages and virtual machines were rooted in these early arcade systems the nmi interrupt handler also writes bytes to the two 4 bit dacs to reproduce pre recorded sounds moon patrol only uses one of these dacs and only for one effect a pre recorded explosion sound even though the explosion lasts half a second the samples eat up the 1st 1k of rom in the sound processor that s 1 4th of the rom sound commands flow commands there are three commands that control the flow of the script the stop command puts the sequencer in an idle state making it available for another sound script the call command stores the current script address and jumps to a new target location in the script the current script address is not stacked just stored in a single memory word thus the call stack is only one level deep but you can just ignore the return address making the call a goto very clever the return command returns the script to the next command after the last executed call statement ff stop fe mm ll call mmll f0 fd return the sound processor can be configured to decrease the volume of each of the 6 voices independently the ay chip has an envelope generator that does this automatically but each chip has only one envelope generator to share among its three voices this auto decay functionality lets each voice die out at its own rate simple commands the simple commands are five quick commands that poke single values into registers and configure the programmatic volume decay of each voice bit 6 of these commands is a continue bit if the bit is set the next command is executed on the same clock tick this allows you to poke several registers at once with no delay between the writes if the bit is clear the next byte from the script is returned as the delay until next command value for all following ...
|