Skip to content

Commit

Permalink
Update GEMINIFM.SRC
Browse files Browse the repository at this point in the history
OPM drums fully implement and numerous volume-related bugs fixed
  • Loading branch information
TheNetNomad committed Dec 3, 2021
1 parent c77065a commit 4a73ea7
Showing 1 changed file with 99 additions and 66 deletions.
165 changes: 99 additions & 66 deletions GEMINIFM.SRC
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,13 @@ BEGIN
SET OPM_OP2VOL_BASE = ^h68;
SET OPM_OP4VOL_BASE = ^h78;

BYTE OPM0_VOL;
BYTE OPM1_VOL;
BYTE OPM2_VOL;
BYTE OPM3_VOL;
BYTE OPM4_VOL;
BYTE OPM5_VOL;

BYTE OPM_BD_VOL;
BYTE OPM_SD_VOL;
BYTE OPM_HH_VOL;
Expand All @@ -202,6 +209,7 @@ BEGIN

{--WARNING- THESE ARE STORED IN MGSDRV INST ORDER, *NOT* OPLL INST REGISTER ORDER
{--THAT MEANS THE USER VOICE IS INSTRUMENT *F* DESPITE BEING INSTRUMENT 0 IN GEMINI FM
{--IF I DON'T FIX TIS BEFORE V1.0 GET MAD AT ME

{--INSTRUMENT 0;
BYTE OPM_I0_20 VALUE ^hFC;
Expand Down Expand Up @@ -870,7 +878,7 @@ BEGIN
CALL SUB_OPM_WRITE;

MOVE ^h76 TO OPM_REG_OUT;
MOVE ^h00 TO OPM_DATA_OUT;
MOVE ^hFF TO OPM_DATA_OUT;
CALL SUB_OPM_WRITE;

MOVE ^h7E TO OPM_REG_OUT;
Expand Down Expand Up @@ -1507,6 +1515,14 @@ BEGIN

OD;

MOVE GEMINI_COMMAND_BYTECODE TO OPM_INST_POINTER;
SUBTRACT ^h20 FROM OPM_INST_POINTER;
ADD #OPM0_VOL TO OPM_INST_POINTER;

ADD ^h10 TO GEMINI_COMMAND_BYTECODE;
MOVE @OPM_INST_POINTER TO GEMINI_COMMAND_DATA;
CALL SUB_OPM_SET_VOLUME;

EXIT;

SUB_OPM_NOTE_ON:
Expand All @@ -1518,25 +1534,27 @@ BEGIN
MOVE ^h07 TO OPM_DATA_OUT;
CALL SUB_OPM_WRITE;

MOVE ^h66 TO OPM_REG_OUT;
MOVE ^h6E TO OPM_REG_OUT;
SWITCH ON OPM_BD_VOL:
^hF: MOVE 20 TO OPM_DATA_OUT;
^hE: MOVE 27 TO OPM_DATA_OUT;
^hD: MOVE 34 TO OPM_DATA_OUT;
^hC: MOVE 41 TO OPM_DATA_OUT;
^hB: MOVE 48 TO OPM_DATA_OUT;
^hA: MOVE 55 TO OPM_DATA_OUT;
^h9: MOVE 62 TO OPM_DATA_OUT;
^h8: MOVE 69 TO OPM_DATA_OUT;
^h7: MOVE 76 TO OPM_DATA_OUT;
^h6: MOVE 83 TO OPM_DATA_OUT;
^h5: MOVE 90 TO OPM_DATA_OUT;
^h4: MOVE 97 TO OPM_DATA_OUT;
^h3: MOVE 104 TO OPM_DATA_OUT;
^h2: MOVE 111 TO OPM_DATA_OUT;
^h1: MOVE 118 TO OPM_DATA_OUT;
^hF: MOVE 00 TO OPM_DATA_OUT;
^hE: MOVE 7 TO OPM_DATA_OUT;
^hD: MOVE 14 TO OPM_DATA_OUT;
^hC: MOVE 21 TO OPM_DATA_OUT;
^hB: MOVE 28 TO OPM_DATA_OUT;
^hA: MOVE 35 TO OPM_DATA_OUT;
^h9: MOVE 42 TO OPM_DATA_OUT;
^h8: MOVE 49 TO OPM_DATA_OUT;
^h7: MOVE 56 TO OPM_DATA_OUT;
^h6: MOVE 63 TO OPM_DATA_OUT;
^h5: MOVE 70 TO OPM_DATA_OUT;
^h4: MOVE 77 TO OPM_DATA_OUT;
^h3: MOVE 84 TO OPM_DATA_OUT;
^h2: MOVE 91 TO OPM_DATA_OUT;
^h1: MOVE 108 TO OPM_DATA_OUT;
^h0: MOVE 127 TO OPM_DATA_OUT;
ENDSWITCH;
ADD 7 TO OPM_DATA_OUT; {--DEBUG
{--MOVE 127 TO OPM_DATA_OUT;
CALL SUB_OPM_WRITE;

MOVE OPM_CNTL_REG TO OPM_REG_OUT;
Expand All @@ -1549,36 +1567,36 @@ BEGIN
MOVE ^h20 TO OPM_DATA_OUT;
CALL SUB_OPM_WRITE;

MOVE ^h66 TO OPM_REG_OUT;
MOVE ^h6E TO OPM_REG_OUT;
SWITCH ON OPM_TM_VOL:
^hF: MOVE 20 TO OPM_DATA_OUT;
^hE: MOVE 27 TO OPM_DATA_OUT;
^hD: MOVE 34 TO OPM_DATA_OUT;
^hC: MOVE 41 TO OPM_DATA_OUT;
^hB: MOVE 48 TO OPM_DATA_OUT;
^hA: MOVE 55 TO OPM_DATA_OUT;
^h9: MOVE 62 TO OPM_DATA_OUT;
^h8: MOVE 69 TO OPM_DATA_OUT;
^h7: MOVE 76 TO OPM_DATA_OUT;
^h6: MOVE 83 TO OPM_DATA_OUT;
^h5: MOVE 90 TO OPM_DATA_OUT;
^h4: MOVE 97 TO OPM_DATA_OUT;
^h3: MOVE 104 TO OPM_DATA_OUT;
^h2: MOVE 111 TO OPM_DATA_OUT;
^h1: MOVE 118 TO OPM_DATA_OUT;
^hF: MOVE 7 TO OPM_DATA_OUT;
^hE: MOVE 7 TO OPM_DATA_OUT;
^hD: MOVE 14 TO OPM_DATA_OUT;
^hC: MOVE 21 TO OPM_DATA_OUT;
^hB: MOVE 28 TO OPM_DATA_OUT;
^hA: MOVE 35 TO OPM_DATA_OUT;
^h9: MOVE 42 TO OPM_DATA_OUT;
^h8: MOVE 49 TO OPM_DATA_OUT;
^h7: MOVE 56 TO OPM_DATA_OUT;
^h6: MOVE 63 TO OPM_DATA_OUT;
^h5: MOVE 70 TO OPM_DATA_OUT;
^h4: MOVE 77 TO OPM_DATA_OUT;
^h3: MOVE 84 TO OPM_DATA_OUT;
^h2: MOVE 91 TO OPM_DATA_OUT;
^h1: MOVE 108 TO OPM_DATA_OUT;
^h0: MOVE 127 TO OPM_DATA_OUT;
ENDSWITCH;
SUBTRACT 7 FROM OPM_DATA_OUT; {--DEBUG
CALL SUB_OPM_WRITE;




MOVE OPM_CNTL_REG TO OPM_REG_OUT;
MOVE ^b01111110 TO OPM_DATA_OUT;
CALL SUB_OPM_WRITE;
FI;
FI;

AND GEMINI_COMMAND_DATA WITH ^b00000010 GIVING OPM_DATA_OUT;
IF OPM_DATA_OUT = ^b00000010 THEN
{-- CRASH
Expand Down Expand Up @@ -1609,6 +1627,7 @@ BEGIN
^h1: MOVE 118 TO OPM_DATA_OUT;
^h0: MOVE 127 TO OPM_DATA_OUT;
ENDSWITCH;
ADD 15 TO OPM_DATA_OUT; {--DEBUG
CALL SUB_OPM_WRITE;

MOVE OPM_CNTL_REG TO OPM_REG_OUT;
Expand All @@ -1624,28 +1643,29 @@ BEGIN
CALL SUB_OPM_WRITE;

MOVE ^hDF TO OPM_REG_OUT;
MOVE ^h15 TO OPM_DATA_OUT;
MOVE ^h14 TO OPM_DATA_OUT;
CALL SUB_OPM_WRITE;

MOVE ^h7F TO OPM_REG_OUT;
SWITCH ON OPM_SD_VOL:
^hF: MOVE 20 TO OPM_DATA_OUT;
^hE: MOVE 27 TO OPM_DATA_OUT;
^hD: MOVE 34 TO OPM_DATA_OUT;
^hC: MOVE 41 TO OPM_DATA_OUT;
^hB: MOVE 48 TO OPM_DATA_OUT;
^hA: MOVE 55 TO OPM_DATA_OUT;
^h9: MOVE 62 TO OPM_DATA_OUT;
^h8: MOVE 69 TO OPM_DATA_OUT;
^h7: MOVE 76 TO OPM_DATA_OUT;
^h6: MOVE 83 TO OPM_DATA_OUT;
^h5: MOVE 90 TO OPM_DATA_OUT;
^h4: MOVE 97 TO OPM_DATA_OUT;
^h3: MOVE 104 TO OPM_DATA_OUT;
^h2: MOVE 111 TO OPM_DATA_OUT;
^h1: MOVE 118 TO OPM_DATA_OUT;
^hF: MOVE 40 TO OPM_DATA_OUT;
^hE: MOVE 46 TO OPM_DATA_OUT;
^hD: MOVE 52 TO OPM_DATA_OUT;
^hC: MOVE 58 TO OPM_DATA_OUT;
^hB: MOVE 64 TO OPM_DATA_OUT;
^hA: MOVE 70 TO OPM_DATA_OUT;
^h9: MOVE 76 TO OPM_DATA_OUT;
^h8: MOVE 82 TO OPM_DATA_OUT;
^h7: MOVE 88 TO OPM_DATA_OUT;
^h6: MOVE 94 TO OPM_DATA_OUT;
^h5: MOVE 100 TO OPM_DATA_OUT;
^h4: MOVE 106 TO OPM_DATA_OUT;
^h3: MOVE 112 TO OPM_DATA_OUT;
^h2: MOVE 118 TO OPM_DATA_OUT;
^h1: MOVE 124 TO OPM_DATA_OUT;
^h0: MOVE 127 TO OPM_DATA_OUT;
ENDSWITCH;
ADD 15 TO OPM_DATA_OUT; {--DEBUG
CALL SUB_OPM_WRITE;

MOVE OPM_CNTL_REG TO OPM_REG_OUT;
Expand All @@ -1665,23 +1685,24 @@ BEGIN

MOVE ^h7F TO OPM_REG_OUT;
SWITCH ON OPM_HH_VOL:
^hF: MOVE 20 TO OPM_DATA_OUT;
^hE: MOVE 27 TO OPM_DATA_OUT;
^hD: MOVE 34 TO OPM_DATA_OUT;
^hC: MOVE 41 TO OPM_DATA_OUT;
^hB: MOVE 48 TO OPM_DATA_OUT;
^hA: MOVE 55 TO OPM_DATA_OUT;
^h9: MOVE 62 TO OPM_DATA_OUT;
^h8: MOVE 69 TO OPM_DATA_OUT;
^h7: MOVE 76 TO OPM_DATA_OUT;
^h6: MOVE 83 TO OPM_DATA_OUT;
^h5: MOVE 90 TO OPM_DATA_OUT;
^h4: MOVE 97 TO OPM_DATA_OUT;
^h3: MOVE 104 TO OPM_DATA_OUT;
^h2: MOVE 111 TO OPM_DATA_OUT;
^h1: MOVE 118 TO OPM_DATA_OUT;
^hF: MOVE 40 TO OPM_DATA_OUT;
^hE: MOVE 46 TO OPM_DATA_OUT;
^hD: MOVE 52 TO OPM_DATA_OUT;
^hC: MOVE 58 TO OPM_DATA_OUT;
^hB: MOVE 64 TO OPM_DATA_OUT;
^hA: MOVE 70 TO OPM_DATA_OUT;
^h9: MOVE 76 TO OPM_DATA_OUT;
^h8: MOVE 82 TO OPM_DATA_OUT;
^h7: MOVE 88 TO OPM_DATA_OUT;
^h6: MOVE 94 TO OPM_DATA_OUT;
^h5: MOVE 100 TO OPM_DATA_OUT;
^h4: MOVE 106 TO OPM_DATA_OUT;
^h3: MOVE 112 TO OPM_DATA_OUT;
^h2: MOVE 118 TO OPM_DATA_OUT;
^h1: MOVE 124 TO OPM_DATA_OUT;
^h0: MOVE 127 TO OPM_DATA_OUT;
ENDSWITCH;
ADD 15 TO OPM_DATA_OUT; {--DEBUG
CALL SUB_OPM_WRITE;

MOVE OPM_CNTL_REG TO OPM_REG_OUT;
Expand Down Expand Up @@ -1775,6 +1796,11 @@ BEGIN
FI;

SUBTRACT ^h30 FROM GEMINI_COMMAND_BYTECODE;
MOVE GEMINI_COMMAND_BYTECODE TO OPM_INST_POINTER;
ADD #OPM0_VOL TO OPM_INST_POINTER;
MOVE GEMINI_COMMAND_DATA TO @OPM_INST_POINTER;


MOVE GEMINI_COMMAND_BYTECODE TO OPM_INST_POINTER;
ADD #OPM0_INST TO OPM_INST_POINTER;

Expand All @@ -1796,10 +1822,17 @@ BEGIN
^h1: MOVE 118 TO OPM_DATA_OUT;
^h0: MOVE 127 TO OPM_DATA_OUT;
ENDSWITCH;
SUBTRACT 10 FROM OPM_DATA_OUT; {--debug

{-- TODO RETURN TO THIS ONCE ALTERNATE VOICES ARE IMPLEMENTED
{-- ALSO PER-INSTRUMENT OFFSETS

SWITCH ON @OPM_INST_POINTER:
{--6: MOVE 0 TO OPM_DATA_OUT;
7: SUBTRACT 5 FROM OPM_DATA_OUT;
ENDSWITCH;


MOVE GEMINI_COMMAND_BYTECODE TO OPM_REG_OUT;
ADD OPM_OP4VOL_BASE TO OPM_REG_OUT;
CALL SUB_OPM_WRITE;
Expand Down

0 comments on commit 4a73ea7

Please sign in to comment.