From 4ba6cd6eea66b54cda7da5f4e76c8b9753997de2 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 4 Jun 2018 08:05:02 -0400 Subject: [PATCH] sa: add duet version --- still_alive/Makefile | 16 +++- still_alive/SA.ED | Bin 0 -> 1983 bytes still_alive/duet.s | 194 +++++++++++++++++++++++++++++++++++++++++++ still_alive/sa_ed.s | 85 +++++++++++++++++++ 4 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 still_alive/SA.ED create mode 100644 still_alive/duet.s create mode 100644 still_alive/sa_ed.s diff --git a/still_alive/Makefile b/still_alive/Makefile index 7b9da314..ae3c999f 100644 --- a/still_alive/Makefile +++ b/still_alive/Makefile @@ -5,10 +5,11 @@ TOKENIZE = ../asoft_basic-utils/tokenize_asoft all: still_alive.dsk -still_alive.dsk: STILL_ALIVE TITLE.BAS ENDING +still_alive.dsk: STILL_ALIVE TITLE.BAS ENDING SA_ED $(DOS33) -y still_alive.dsk BSAVE -a 0x0C00 STILL_ALIVE $(DOS33) -y still_alive.dsk BSAVE -a 0x2000 ENDING $(DOS33) -y still_alive.dsk SAVE A TITLE.BAS + $(DOS33) -y still_alive.dsk BSAVE -a 0x0C00 SA_ED # $(DOS33) -y still_alive.dsk SAVE B GLADOS.HGR STILL_ALIVE: still_alive.o @@ -22,6 +23,17 @@ still_alive.o: still_alive.s \ ascii_art.inc ascii_art_lz4.inc lyrics.inc zp.inc ca65 -o still_alive.o still_alive.s -l still_alive.lst + +SA_ED: sa_ed.o + ld65 -o SA_ED sa_ed.o -C ../linker_scripts/apple2_c00.inc + +sa_ed.o: sa_ed.s \ + duet.s SA.ED \ + display_art.s display_lyrics.s \ + ascii_art.inc + ca65 -o sa_ed.o sa_ed.s -l sa_ed.lst + + ENDING: ending.o ld65 -o ENDING ending.o -C ../linker_scripts/apple2_2000.inc @@ -33,4 +45,4 @@ TITLE.BAS: title.bas $(TOKENIZE) < title.bas> TITLE.BAS clean: - rm -f *~ *.o *.lst STILL_ALIVE + rm -f *~ *.o *.lst STILL_ALIVE SA_ED ENDING diff --git a/still_alive/SA.ED b/still_alive/SA.ED new file mode 100644 index 0000000000000000000000000000000000000000..2d7bff65c98288b86454e5661965aade9c070d50 GIT binary patch literal 1983 zcmb_d+iu%13{^c0L9v<^L=m7N!qD5WJoy9mu&)@fKkPs5WrtES#7@>W?Sg=iC5pF0 z9z8sS=MX3b;$Q+<2i7qt1tyo)WM9|Qx+*0jRuU$GtXL1sW51$C+K!-B>rnOS+8U0; zNQ5|161N74^(-`3(wQ{5gk_njCaRF`g_sduGk7a7IJyk%{#*vBV`ynIBa1<8>=i(! zFQfy%*XhVPow=nW^T{}JL3YS1FJ3*(Q;8)+s*#pRB~yu(vlqvUAXKnWDiak*e7XYF zObZrgWmGT2CN!I}ER>ZpHnV$4nPR3%X-X88Vy}5}g@hfPM%PIZ`a_N*f>F18(B%Nv zuncQR2QfqP45W@!c=8~%=v zCXq29qy`hf@~WZ%bShfVLTIo>t>lirouNM#-|UE=P91K<{1zD|9D;w$`#bh8$8g6FZ=jS9j3F4qS%Old0?5u$V3irA z?tBI2LA6g4z2UB#u_66?)7f76Ksr|>=_Alc@)cHbCK*bb<$&e^w_MPLch0-HWxC*& zY0oX-6Eq&=j$5*G3qig{EWIHeLDtV~j~$W7PFz%7HfAQgG974t6#UKFyfV&m|NlyV ifbI$m%A4VOLtuL^=;6py)bBAowwL-Bhu1, then duration + PLA ; 92A: 68 ; 4 pop off stack + PLA ; 92B: 68 ; 4 pop off stack + PLA ; 92C: 68 ; 4 pop off stack + + ; fallthrough if first byte was zero + + ; Load byte from music stream + ; Set X=EOR if note zero, set X=CMP if it is + +load_freq: + LDX #$49 ; 92D: A2 49 ; 2 *!* X=0x49 (EOR opcode) + INY ; 92F: C8 ; 2 increment to next byte + LDA (MADDRL),Y ; 930: B1 1E ; 5 *!* load next byte + BNE exit_player ; 932: D0 02 ; 4 *!* if not zero + LDX #$C9 ; 934: A2 C9 ; 2 *!* X=0xC9 (CMP opcode) + +exit_player: + ; if byte0==0 and byte1==0 then done playing + RTS ; 936: 60 ; 6 return + + + ; We've got a duration/note/note triplet here + +play_note: + STA DURATION ; 937: 85 08 ; 3 store out duration + JSR load_freq ; 939: 20 2D09 ; 6 get freq#1 + STX selfmodify1 ; 93C: 8E 8309 ; 4 if 0 self-modify EOR/CMP + STA FREQ1 ; 93F: 85 06 ; 3 + LDX INSTRUMENT1 ; 941: A6 09 ; 3 *!* + +instr1_adjust: + LSR A ; 943: 4A ; 2 rshift freq by inst# + DEX ; 944: CA ; 2 + BNE instr1_adjust ; 945: D0 FC ; 4 *!* + STA selfmodify2+1 ; 947: 8D 7C09 ; 4 self-modify a CPY + + JSR load_freq ; 94A: 20 2D09 ; 6 get freq#2 + STX selfmodify3 ; 94D: 8E BB09 ; 4 if 0 self-modify EOR/CMP + STA FREQ2 ; 950: 85 07 ; 3 + LDX INSTRUMENT2 ; 952: A6 1D ; 3 *!* +instr2_adjust: + LSR A ; 954: 4A ; 2 rshift freq by inst# + DEX ; 955: CA ; 2 + BNE instr2_adjust ; 956: D0 FC ; 4 *!* + STA selfmodify4+1 ; 958: 8D B409 ; 4 self modify a CPX + + PLA ; 95B: 68 ; 4 + TAY ; 95C: A8 ; 2 + PLA ; 95D: 68 ; 4 + TAX ; 95E: AA ; 2 + PLA ; 95F: 68 ; 4 + BNE label8 ; 960: D0 03 ; 4 *!* + +label99: + BIT $C030 ; 962: 2C 30C0 ; 4 SPEAKER +label8: + CMP #$00 ; 965: C9 00 ; 2 + BMI label7 ; 967: 30 03 ; 4 *!* + NOP ; 969: EA ; 2 + BPL label9 ; 96A: 10 03 ; 4 *!* +label7: + BIT $C030 ; 96C: 2C 30C0 ; 4 SPEAKER +label9: + STA LOC4E ; 96F: 85 4E ; 3 + BIT $C000 ; 971: 2C 00C0 ; 4 KEYBOARD DATA + BMI exit_player ; 974: 30 C0 ; 4 *!* if keypress, exit + DEY ; 976: 88 ; 2 + BNE selfmodify2 ; 977: D0 02 ; 4 *!* + BEQ label11 ; 979: F0 06 ; 4 *!* +selfmodify2: + CPY #$00 ; 97B: C0 00 ; 2 + BEQ selfmodify1 ; 97D: F0 04 ; 4 *!* !!! + BNE label13 ; 97F: D0 04 ; 4 *!* +label11: + LDY FREQ1 ; 981: A4 06 ; 3 *!* +selfmodify1: + EOR #$40 ; 983: 49 40 ; 2 *!* !!! +label13: + BIT LOC4E ; 985: 24 4E ; 3 + BVC label14 ; 987: 50 07 ; 4 *!* + BVS label15 ; 989: 70 00 ; 4 *!* +label15: + BPL label16 ; 98B: 10 09 ; 4 *!* + NOP ; 98D: EA ; 2 + BMI label17 ; 98E: 30 09 ; 4 *!* +label14: + NOP ; 990: EA ; 2 + BMI label16 ; 991: 30 03 ; 4 *!* + NOP ; 993: EA ; 2 + BPL label17 ; 994: 10 03 ; 4 *!* +label16: + CMP $C030 ; 996: CD 30C0 ; 4 SPEAKER +label17: + DEC COUNT256 ; 999: C6 4F ; 5 div by 256 counter + BNE label18 ; 99B: D0 11 ; 4 *!* + + DEC DURATION ; 99D: C6 08 ; 5 + BNE label18 ; 99F: D0 0D ; 4 *!* + BVC label19 ; 9A1: 50 03 ; 4 *!* + BIT $C030 ; 9A3: 2C 30C0 ; 4 SPEAKER +label19: + PHA ; 9A6: 48 ; 3 + TXA ; 9A7: 8A ; 2 + PHA ; 9A8: 48 ; 3 + TYA ; 9A9: 98 ; 2 + PHA ; 9AA: 48 ; 3 + JMP triplet_loop ; 9AB: 4C 1509 ; 3 + +label18: + DEX ; 9AE: CA ; 2 + BNE selfmodify4 ; 9AF: D0 02 ; 4 *!* + BEQ label21 ; 9B1: F0 06 ; 4 *!* +selfmodify4: + CPX #$00 ; 9B3: E0 00 ; 2 + BEQ selfmodify3 ; 9B5: F0 04 ; 4 *!* !!! + BNE label23 ; 9B7: D0 04 ; 4 *!* +label21: + LDX FREQ2 ; 9B9: A6 07 ; 3 *!* +selfmodify3: + EOR #$80 ; 9BB: 49 80 ; 2 *!* !!! +label23: + BVS label99 ; 9BD: 70 A3 ; 4 *!* + NOP ; 9BF: EA ; 2 + BVC label8 ; 9C0: 50 A3 ; 4 *!* + diff --git a/still_alive/sa_ed.s b/still_alive/sa_ed.s new file mode 100644 index 00000000..d7764484 --- /dev/null +++ b/still_alive/sa_ed.s @@ -0,0 +1,85 @@ +; And Believe Me, I'm Still Alive + +.include "zp.inc" + + ;============================= + ; Setup + ;============================= + jsr HOME + jsr TEXT + + ; init variables + + lda #1 + sta FORTYCOL + + ;=========================== + ; clear both screens + ;=========================== + +only_forty: + + ; Clear text page0 + + jsr HOME + + + ;============================ + ; Draw Lineart around edges + ;============================ + + jsr setup_edges + + jsr HOME + + ;============================== + ; Setup lyrics + ;============================== + +; lda #<(lyrics) +; sta LYRICSL +; lda #>(lyrics) +; sta LYRICSH + + + ;================== + ; load song + ;================== + + ;================== + ; loop forever + ;================== + +forever_loop: + jmp forever_loop + + +;========= +;routines +;========= +.include "../asm_routines/gr_offsets.s" +;.include "../asm_routines/lz4_decode.s" + +.include "display_art.s" +.include "display_lyrics.s" + +;.include "interrupt_handler.s" + +.include "duet.s" + +;========= +; strings +;========= + + +lyrics: +;.include "lyrics.inc" + +.include "ascii_art.inc" + +;LZ4_BUFFER: +;.incbin "SA.KR4" + + +.incbin "SA.ED" +