From ff8c50a97874cb5588b450d8fe5145734a545db5 Mon Sep 17 00:00:00 2001 From: TMR Date: Tue, 15 Dec 2015 20:43:44 +0000 Subject: [PATCH] Source and binary files --- data/charset.raw | Bin 0 -> 1024 bytes data/death.raw | Bin 0 -> 8192 bytes includes/be_driver.asm | 145 ++++++++++++++++++++++++++++++++ includes/be_mps.asm | 164 ++++++++++++++++++++++++++++++++++++ includes/be_mps_alt.asm | 111 ++++++++++++++++++++++++ includes/registers.asm | 22 +++++ septic#060812 | Bin 0 -> 15342 bytes septic.asm | 182 ++++++++++++++++++++++++++++++++++++++++ septic.do | Bin 0 -> 143360 bytes 9 files changed, 624 insertions(+) create mode 100644 data/charset.raw create mode 100644 data/death.raw create mode 100644 includes/be_driver.asm create mode 100644 includes/be_mps.asm create mode 100644 includes/be_mps_alt.asm create mode 100644 includes/registers.asm create mode 100644 septic#060812 create mode 100644 septic.asm create mode 100644 septic.do diff --git a/data/charset.raw b/data/charset.raw new file mode 100644 index 0000000000000000000000000000000000000000..e2ba54735dd0fd3d95dddc05ac7727b1e0b9c21d GIT binary patch literal 1024 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 XS46Ws6-yL-2>;x!Sy8nBll}ky5CRrt literal 0 HcmV?d00001 diff --git a/includes/be_driver.asm b/includes/be_driver.asm new file mode 100644 index 0000000..01b3ec4 --- /dev/null +++ b/includes/be_driver.asm @@ -0,0 +1,145 @@ +; +; BEEPER ENGINE MUSIC DRIVER +; + + +; Reset the music driver +be_track_reset lda #$00 + sta be_pattn_cnt + +; Fetch the next pattern to play from track data +be_pattn_fetch ldx be_pattn_cnt + lda be_track_00,x + cmp #eod + beq be_track_reset + + asl + tax + lda be_pattn_pos+$00,x + sta be_pattn_read+$01 + lda be_pattn_pos+$01,x + sta be_pattn_read+$02 + + inc be_pattn_cnt + + rts + + +; Read the next byte of the pattern +be_pattn_read lda be_pattn_00 + cmp #eod + bne be_pattn_bump + + jsr be_pattn_fetch + jmp be_pattn_read + +be_pattn_bump inc be_pattn_read+$01 + bne *+$05 + inc be_pattn_read+$02 + rts + + +; Fetch and play the next note +be_pattn_play jsr be_pattn_read + tax + lda be_note_freqs,x + sta be_snd_freq + jsr be_pattn_read + sta be_snd_dur + + cpx #off + beq be_snd_off_play + +; Zapac's tone generator +be_snd_on_play lda speaker + ldx be_snd_freq +be_snd_on_loop dex + beq be_snd_on_play + nop + nop + dey + bne be_snd_on_loop + dec be_snd_dur + bne be_snd_on_loop + rts + +; Dummy loop for "off" (so the timing is the same) +be_snd_off_play nop + nop + ldx be_snd_freq +be_snd_off_loop dex + beq be_snd_off_play + nop + nop + dey + bne be_snd_off_loop + dec be_snd_dur + bne be_snd_off_loop + rts + + +; Note frequency table +be_note_freqs !byte $ff,$f1,$e3,$d6,$ca,$bf,$b4,$aa,$a1,$98,$8f,$87 + !byte $80,$79,$72,$6c,$66,$60,$5b,$55,$51,$4c,$48,$44 + !byte $40,$3c,$39,$36,$33,$30,$2d,$2b,$28,$26,$24,$22 + +; Note commands for the music data - x is a sharp +c_1 = $00 +cx1 = $01 +d_1 = $02 +dx1 = $03 +e_1 = $04 +f_1 = $05 +fx1 = $06 +g_1 = $07 +gx1 = $08 +a_1 = $09 +ax1 = $0a +b_1 = $0b + +c_2 = $0c +cx2 = $0d +d_2 = $0e +dx2 = $0f +e_2 = $10 +f_2 = $11 +fx2 = $12 +g_2 = $13 +gx2 = $14 +a_2 = $15 +ax2 = $16 +b_2 = $17 + +c_3 = $18 +cx3 = $19 +d_3 = $1a +dx3 = $1b +e_3 = $1c +f_3 = $1d +fx3 = $1e +g_3 = $1f +gx3 = $20 +a_3 = $21 +ax3 = $22 +b_3 = $23 + +off = $3f +eod = $ff + +; Duration commands for the music data +dur01 = $0e +dur02 = dur01*$02 +dur03 = dur01*$03 +dur04 = dur01*$04 +dur05 = dur01*$05 +dur06 = dur01*$06 +dur07 = dur01*$07 +dur08 = dur01*$08 +dur09 = dur01*$09 +dur0a = dur01*$0a +dur0b = dur01*$0b +dur0c = dur01*$0c +dur0d = dur01*$0d +dur0e = dur01*$0e +dur0f = dur01*$0f +dur10 = dur01*$10 diff --git a/includes/be_mps.asm b/includes/be_mps.asm new file mode 100644 index 0000000..4ae58f7 --- /dev/null +++ b/includes/be_mps.asm @@ -0,0 +1,164 @@ +; +; MICRPROSE SOCCER (INDOOR) - TUNE 9 +; + + +; Track data +be_track_00 !byte $00,$01,$00,$02,$00,$03,$00,$04 + !byte eod + +; Pattern reference table +be_pattn_pos !byte be_pattn_00 + !byte be_pattn_01 + !byte be_pattn_02 + !byte be_pattn_03 + !byte be_pattn_04 + +; Pattern data +be_pattn_00 !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte eod + +be_pattn_01 !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur01 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur02 + !byte eod + +be_pattn_02 !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + + !byte g_2,dur01 + !byte g_1,dur04 + !byte f_2,dur01 + !byte f_1,dur04 + !byte g_3,dur01 + !byte g_2,dur01 + !byte f_2,dur01 + !byte f_1,dur05 + !byte off,dur02 + !byte eod + +be_pattn_03 !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + + !byte g_2,dur01 + !byte g_1,dur04 + !byte ax2,dur01 + !byte ax1,dur04 + !byte g_3,dur01 + !byte g_2,dur01 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur02 + !byte eod + +be_pattn_04 !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + !byte g_2,dur01 + !byte g_1,dur05 + !byte off,dur04 + !byte g_3,dur01 + !byte g_2,dur05 + !byte off,dur04 + + !byte f_3,dur01 + !byte f_2,dur04 + !byte f_2,dur01 + !byte f_1,dur04 + !byte g_3,dur01 + !byte g_2,dur01 + !byte f_2,dur01 + !byte f_1,dur05 + !byte off,dur02 + !byte e_3,dur01 + !byte e_2,dur04 + !byte e_2,dur01 + !byte e_1,dur04 + !byte g_3,dur01 + !byte g_2,dur01 + !byte e_2,dur01 + !byte e_1,dur05 + !byte off,dur02 + !byte eod \ No newline at end of file diff --git a/includes/be_mps_alt.asm b/includes/be_mps_alt.asm new file mode 100644 index 0000000..a2036db --- /dev/null +++ b/includes/be_mps_alt.asm @@ -0,0 +1,111 @@ +; +; MICRPROSE SOCCER (INDOOR) - TUNE 9 +; + + +; Track data +be_track_00 !byte $00,$01,$00,$02,$00,$03,$00,$04 + !byte eod + +; Pattern reference table +be_pattn_pos !byte be_pattn_00 + !byte be_pattn_01 + !byte be_pattn_02 + !byte be_pattn_03 + !byte be_pattn_04 + +; Pattern data +be_pattn_00 !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte eod + +be_pattn_01 !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur02 + !byte g_1,dur05 + !byte off,dur03 + !byte eod + +be_pattn_02 !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte f_1,dur05 + !byte g_2,dur02 + !byte f_1,dur05 + !byte off,dur03 + !byte eod + +be_pattn_03 !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte ax1,dur05 + !byte g_2,dur02 + !byte g_1,dur05 + !byte off,dur03 + !byte eod + +be_pattn_04 !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte g_1,dur05 + !byte off,dur05 + !byte g_2,dur05 + !byte off,dur05 + !byte f_2,dur05 + !byte f_1,dur05 + !byte g_2,dur02 + !byte f_1,dur05 + !byte off,dur03 + !byte e_2,dur05 + !byte e_1,dur05 + !byte g_2,dur02 + !byte e_1,dur05 + !byte off,dur03 + !byte eod \ No newline at end of file diff --git a/includes/registers.asm b/includes/registers.asm new file mode 100644 index 0000000..28d3c34 --- /dev/null +++ b/includes/registers.asm @@ -0,0 +1,22 @@ +; SYSTEM EQUATES +kbd_read = $c000 +kbd_strobe_clr = $c010 + +rd_vbl_bar = $c019 + + +; Speaker toggle +speaker = $c030 + + +; Mode controllers +txtclr = $c050 ; select bitmap mode +txtset = $c051 ; select text mode +mixclr = $c052 ; full screen +mixset = $c053 ; split screen (last four lines are text) + +txtpage1 = $c054 ; select text buffer 1 ($0400) +txtpage2 = $c055 ; select text buffer 2 ($0x00) + +lores = $c056 ; display low res graphics +hires = $c057 ; display high res graphics \ No newline at end of file diff --git a/septic#060812 b/septic#060812 new file mode 100644 index 0000000000000000000000000000000000000000..25dceff8a0a7214c4f58181965115aed0cdb4ee2 GIT binary patch literal 15342 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 + sta mread+$02 + rts + + +; Include the music driver and tune data + !src "includes/be_driver.asm" + !src "includes/be_mps.asm" + + +; The "scrolling" message text +scroll_text !scr " beep beep beepy beeeeep... " + !scr "welcome to -=- septic -=- from cosine!" + !scr " " + + !scr "okay, this release isn't much to look at" + !scr "but playing even these simple notes will" + !scr "tie up the cpu! the source code can be" + !scr " examined over at github for anyone who " + !scr "fancies trying to improve on the driver." + !scr " " + + !scr "code, driver and cosmetics ....... t.m.r" + !scr "tone playing routine ............. zapac" + !scr "one voice tune ........... martin galway" + !scr "nicked from microprose soccer on the c64" + !scr " " + + !scr " cosine's a-z greetings meander towards " + !scr "abyss connection, arkanix labs, artstate" + !scr " ate bit, booze design, camelot, chorus " + !scr " chrome, cncd, cpu, crescent, crest " + !scr " covert bitops, defence force " + !scr "dekadence, desire, dac, dmagic, dualcrew" + !scr " exclusive on, fairlight, fire, focus " + !scr " french touch, funkscientist, " + !scr " genesis project, gheymaid inc., hitmen " + !scr " hokuto force, level64, m and m " + !scr " maniacs of noise, meanteam, metalvotze " + !scr " noname, nostalgia, nuance, offence " + !scr " onslaught, orb, oxyron, padua, plush " + !scr " psytronik, reptilia, resource " + !scr " rgcd, secure, shape, side b, slash " + !scr " slipstream, success and trc, style " + !scr " suicyco industries, taquart, tempest " + !scr " tek, triad, trsi, viruz, vision, wow " + !scr " wrath, xenon and anyone we forgot! " + !scr " " + + !scr "don't forget to visit the cosine website" + !scr "for 8-bit delights http://cosine.org.uk/" + !scr " " + + !scr "-=- t.m.r signing off - 2015-12-15 -=-" + !scr " " + + !byte $00 ; end of text diff --git a/septic.do b/septic.do new file mode 100644 index 0000000000000000000000000000000000000000..6ca6bf18b9e2ee0c78483ce59b8c8ef426424ba1 GIT binary patch literal 143360 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 OU