home *** CD-ROM | disk | FTP | other *** search
/ HOT Scene Stuff / hotscenestuffzyklop1996.iso / demos / sunknown / asmtotsr.asm < prev    next >
Assembly Source File  |  1994-04-06  |  21KB  |  980 lines

  1. ; This is originally the file TOTSR.C, copyright (C) 1993 Forte.
  2. ;
  3. ; Due to a bug in Borland C++ (only 16-bit registers are by default pushed
  4. ; onto the stack in interrupt-handlers, whereas 32-bit registers are used
  5. ; throughout the code) we've chosen this easy approach ("push ax" ->
  6. ; "push eax") to get around without modifying any code.
  7. ;
  8. ; File created by Thomas H.
  9.  
  10.     .386p
  11.     ifndef    ??version
  12. ?debug    macro
  13.     endm
  14. publicdll macro    name
  15.     public    name
  16.     endm
  17.     endif
  18.     ?debug    V 300h
  19.     ?debug    S "TOTSR.C"
  20.     ?debug    C E9946A851C07544F5453522E43
  21.     ?debug    C E94019CA181B433A5C424F524C414E44435C494E434C5544455C53+
  22.     ?debug    C 5444494F2E48
  23.     ?debug    C E94019CA181B433A5C424F524C414E44435C494E434C5544455C5F+
  24.     ?debug    C 444546532E48
  25.     ?debug    C E94019CA181C433A5C424F524C414E44435C494E434C5544455C5F+
  26.     ?debug    C 4E46494C452E48
  27.     ?debug    C E94019CA181B433A5C424F524C414E44435C494E434C5544455C5F+
  28.     ?debug    C 4E554C4C2E48
  29.     ?debug    C E94019CA181C433A5C424F524C414E44435C494E434C5544455C53+
  30.     ?debug    C 54444C49422E48
  31.     ?debug    C E94019CA181C433A5C424F524C414E44435C494E434C5544455C53+
  32.     ?debug    C 5452494E472E48
  33.     ?debug    C E94019CA181B433A5C424F524C414E44435C494E434C5544455C43+
  34.     ?debug    C 4F4E494F2E48
  35.     ?debug    C E94019CA1819433A5C424F524C414E44435C494E434C5544455C44+
  36.     ?debug    C 4F532E48
  37.     ?debug    C E9E4A97A1C064D4944492E48
  38.     ?debug    C E9E4A97A1C07544F5453522E48
  39.     ?debug    C E9E4A97A1C0A554C5452414D49442E48
  40. TOTSR_TEXT    segment byte public use16 'CODE'
  41. TOTSR_TEXT    ends
  42. DGROUP    group    _DATA,_BSS
  43.     assume    cs:TOTSR_TEXT,ds:DGROUP
  44. _DATA    segment word public use16 'DATA'
  45. d@    label    byte
  46. d@w    label    word
  47. _DATA    ends
  48. _BSS    segment word public use16 'BSS'
  49. b@    label    byte
  50. b@w    label    word
  51. _BSS    ends
  52. _DATA    segment word public use16 'DATA'
  53. orig_clock    label    dword
  54.     db    0
  55.     db    0
  56.     db    0
  57.     db    0
  58. clock_interval    label    word
  59.     db    142
  60.     db    32
  61.     db    0
  62.     db    0
  63. _um_hook    label    dword
  64.     db    0
  65.     db    0
  66.     db    0
  67.     db    0
  68. _DATA    ends
  69. TOTSR_TEXT    segment byte public use16 'CODE'
  70.     ?debug    C E80107544F5453522E43946A851C
  71.     ?debug    L 32
  72.     assume    cs:TOTSR_TEXT
  73. _um_data_out    proc    far
  74.     ?debug    B
  75.     push    bp
  76.     mov    bp,sp
  77.     ?debug    C E60462797465040A060000
  78.     ?debug    B
  79.     ?debug    L 34
  80.     cmp    dword ptr DGROUP:_um_hook,large 0
  81.     je    short @1@86
  82.     ?debug    L 35
  83.     mov    ax,16
  84.     ?debug    L 36
  85.     mov    cx,word ptr [bp+6]
  86.     ?debug    L 37
  87.     call    dword ptr DGROUP:_um_hook
  88. @1@86:
  89.     ?debug    L 39
  90.     xor    ax,ax
  91.     ?debug    L 40
  92.     pop    bp
  93.     ret    
  94.     ?debug    C E60462797465040A060000
  95.     ?debug    E
  96.     ?debug    E
  97. _um_data_out    endp
  98.     ?debug    L 42
  99.     assume    cs:TOTSR_TEXT
  100. _um_pitch_bend    proc    far
  101.     ?debug    B
  102.     push    bp
  103.     mov    bp,sp
  104.     ?debug    C E6036C7362040A0A0000036D7362040A08000007+
  105.     ?debug    C 6368616E6E656C040A060000
  106.     ?debug    B
  107.     ?debug    L 44
  108.     mov    ax,word ptr [bp+6]
  109.     add    ax,224
  110.     push    ax
  111.     push    cs
  112.     call    near ptr _um_data_out
  113.     pop    cx
  114.     ?debug    L 45
  115.     push    word ptr [bp+8]
  116.     push    cs
  117.     call    near ptr _um_data_out
  118.     pop    cx
  119.     ?debug    L 46
  120.     push    word ptr [bp+10]
  121.     push    cs
  122.     call    near ptr _um_data_out
  123.     pop    cx
  124.     ?debug    L 47
  125.     pop    bp
  126.     ret    
  127.     ?debug    C E6076368616E6E656C040A060000036D7362040A+
  128.     ?debug    C 080000036C7362040A0A0000
  129.     ?debug    E
  130.     ?debug    E
  131. _um_pitch_bend    endp
  132.     ?debug    L 49
  133.     assume    cs:TOTSR_TEXT
  134. _um_program    proc    far
  135.     ?debug    B
  136.     push    bp
  137.     mov    bp,sp
  138.     ?debug    C E60470726F67040A080000076368616E6E656C04+
  139.     ?debug    C 0A060000
  140.     ?debug    B
  141.     ?debug    L 51
  142.     mov    ax,word ptr [bp+6]
  143.     add    ax,192
  144.     push    ax
  145.     push    cs
  146.     call    near ptr _um_data_out
  147.     pop    cx
  148.     ?debug    L 52
  149.     push    word ptr [bp+8]
  150.     push    cs
  151.     call    near ptr _um_data_out
  152.     pop    cx
  153.     ?debug    L 53
  154.     pop    bp
  155.     ret    
  156.     ?debug    C E6076368616E6E656C040A0600000470726F6704+
  157.     ?debug    C 0A080000
  158.     ?debug    E
  159.     ?debug    E
  160. _um_program    endp
  161.     ?debug    L 55
  162.     assume    cs:TOTSR_TEXT
  163. _um_chanpressure    proc    far
  164.     ?debug    B
  165.     push    bp
  166.     mov    bp,sp
  167.     ?debug    C E6087072657373757265040A0A00000570697463+
  168.     ?debug    C 68040A080000076368616E6E656C040A060000
  169.     ?debug    B
  170.     ?debug    L 57
  171.     mov    ax,word ptr [bp+6]
  172.     add    ax,208
  173.     push    ax
  174.     push    cs
  175.     call    near ptr _um_data_out
  176.     pop    cx
  177.     ?debug    L 58
  178.     push    word ptr [bp+8]
  179.     push    cs
  180.     call    near ptr _um_data_out
  181.     pop    cx
  182.     ?debug    L 59
  183.     push    word ptr [bp+10]
  184.     push    cs
  185.     call    near ptr _um_data_out
  186.     pop    cx
  187.     ?debug    L 60
  188.     pop    bp
  189.     ret    
  190.     ?debug    C E6076368616E6E656C040A060000057069746368+
  191.     ?debug    C 040A080000087072657373757265040A0A0000
  192.     ?debug    E
  193.     ?debug    E
  194. _um_chanpressure    endp
  195.     ?debug    L 62
  196.     assume    cs:TOTSR_TEXT
  197. _um_pressure    proc    far
  198.     ?debug    B
  199.     push    bp
  200.     mov    bp,sp
  201.     ?debug    C E6087072657373757265040A0A00000570697463+
  202.     ?debug    C 68040A080000076368616E6E656C040A060000
  203.     ?debug    B
  204.     ?debug    L 64
  205.     mov    ax,word ptr [bp+6]
  206.     add    ax,160
  207.     push    ax
  208.     push    cs
  209.     call    near ptr _um_data_out
  210.     pop    cx
  211.     ?debug    L 65
  212.     push    word ptr [bp+8]
  213.     push    cs
  214.     call    near ptr _um_data_out
  215.     pop    cx
  216.     ?debug    L 66
  217.     push    word ptr [bp+10]
  218.     push    cs
  219.     call    near ptr _um_data_out
  220.     pop    cx
  221.     ?debug    L 67
  222.     pop    bp
  223.     ret    
  224.     ?debug    C E6076368616E6E656C040A060000057069746368+
  225.     ?debug    C 040A080000087072657373757265040A0A0000
  226.     ?debug    E
  227.     ?debug    E
  228. _um_pressure    endp
  229.     ?debug    L 69
  230.     assume    cs:TOTSR_TEXT
  231. _um_parameter    proc    far
  232.     ?debug    B
  233.     push    bp
  234.     mov    bp,sp
  235.     ?debug    C E60576616C7565040A0A000007636F6E74726F6C+
  236.     ?debug    C 040A080000076368616E6E656C040A060000
  237.     ?debug    B
  238.     ?debug    L 71
  239.     mov    ax,word ptr [bp+6]
  240.     add    ax,176
  241.     push    ax
  242.     push    cs
  243.     call    near ptr _um_data_out
  244.     pop    cx
  245.     ?debug    L 72
  246.     push    word ptr [bp+8]
  247.     push    cs
  248.     call    near ptr _um_data_out
  249.     pop    cx
  250.     ?debug    L 73
  251.     push    word ptr [bp+10]
  252.     push    cs
  253.     call    near ptr _um_data_out
  254.     pop    cx
  255.     ?debug    L 74
  256.     pop    bp
  257.     ret    
  258.     ?debug    C E6076368616E6E656C040A06000007636F6E7472+
  259.     ?debug    C 6F6C040A0800000576616C7565040A0A0000
  260.     ?debug    E
  261.     ?debug    E
  262. _um_parameter    endp
  263.     ?debug    L 76
  264.     assume    cs:TOTSR_TEXT
  265. _um_note_on    proc    far
  266.     ?debug    B
  267.     enter    2,0
  268.     ?debug    C E60876656C6F63697479040A0A0000046E6F7465+
  269.     ?debug    C 040A080000076368616E6E656C040A060000
  270.     ?debug    B
  271.     ?debug    L 80
  272.     mov    ax,word ptr [bp+6]
  273.     add    ax,144
  274.     push    ax
  275.     push    cs
  276.     call    near ptr _um_data_out
  277.     pop    cx
  278.     mov    word ptr [bp-2],ax
  279.     ?debug    L 81
  280.     push    word ptr [bp+8]
  281.     push    cs
  282.     call    near ptr _um_data_out
  283.     pop    cx
  284.     add    word ptr [bp-2],ax
  285.     ?debug    L 82
  286.     push    word ptr [bp+10]
  287.     push    cs
  288.     call    near ptr _um_data_out
  289.     pop    cx
  290.     add    word ptr [bp-2],ax
  291.     ?debug    L 83
  292.     mov    ax,word ptr [bp-2]
  293.     ?debug    L 84
  294.     leave    
  295.     ret    
  296.     ?debug    C E6056572726F720402FEFF00076368616E6E656C+
  297.     ?debug    C 040A060000046E6F7465040A0800000876656C6F+
  298.     ?debug    C 63697479040A0A0000
  299.     ?debug    E
  300.     ?debug    E
  301. _um_note_on    endp
  302.     ?debug    L 86
  303.     assume    cs:TOTSR_TEXT
  304. _um_note_off    proc    far
  305.     ?debug    B
  306.     push    bp
  307.     mov    bp,sp
  308.     ?debug    C E60876656C6F63697479040A0A0000046E6F7465+
  309.     ?debug    C 040A080000076368616E6E656C040A060000
  310.     ?debug    B
  311.     ?debug    L 88
  312.     mov    ax,word ptr [bp+6]
  313.     add    ax,128
  314.     push    ax
  315.     push    cs
  316.     call    near ptr _um_data_out
  317.     pop    cx
  318.     ?debug    L 89
  319.     push    word ptr [bp+8]
  320.     push    cs
  321.     call    near ptr _um_data_out
  322.     pop    cx
  323.     ?debug    L 90
  324.     push    word ptr [bp+10]
  325.     push    cs
  326.     call    near ptr _um_data_out
  327.     pop    cx
  328.     ?debug    L 91
  329.     pop    bp
  330.     ret    
  331.     ?debug    C E6076368616E6E656C040A060000046E6F746504+
  332.     ?debug    C 0A0800000876656C6F63697479040A0A0000
  333.     ?debug    E
  334.     ?debug    E
  335. _um_note_off    endp
  336.     ?debug    L 93
  337.     assume    cs:TOTSR_TEXT
  338. _reset_um    proc    far
  339.     ?debug    B
  340.     enter    2,0
  341.     ?debug    B
  342.     ?debug    L 97
  343.     mov    ax,18
  344.     ?debug    L 98
  345.     cmp    dword ptr DGROUP:_um_hook,large 0
  346.     je    short @9@86
  347.     call    dword ptr DGROUP:_um_hook
  348. @9@86:
  349.     ?debug    L 99
  350.     mov    word ptr [bp-2],0
  351. @9@114:
  352.     ?debug    L 100
  353.     push    large 120
  354.     push    word ptr [bp-2]
  355.     push    cs
  356.     call    near ptr _um_parameter
  357.     add    sp,6
  358.     ?debug    L 101
  359.     push    large 121
  360.     push    word ptr [bp-2]
  361.     push    cs
  362.     call    near ptr _um_parameter
  363.     add    sp,6
  364.     ?debug    L 102
  365.     push    large 100
  366.     push    word ptr [bp-2]
  367.     push    cs
  368.     call    near ptr _um_parameter
  369.     add    sp,6
  370.     ?debug    L 103
  371.     push    large 101
  372.     push    word ptr [bp-2]
  373.     push    cs
  374.     call    near ptr _um_parameter
  375.     add    sp,6
  376.     ?debug    L 104
  377.     push    large 000020006h
  378.     push    word ptr [bp-2]
  379.     push    cs
  380.     call    near ptr _um_parameter
  381.     add    sp,6
  382.     ?debug    L 105
  383.     push    large 38
  384.     push    word ptr [bp-2]
  385.     push    cs
  386.     call    near ptr _um_parameter
  387.     add    sp,6
  388.     ?debug    L 99
  389.     inc    word ptr [bp-2]
  390.     cmp    word ptr [bp-2],16
  391.     jl    short @9@114
  392.     ?debug    L 107
  393.     mov    ax,1
  394.     ?debug    L 108
  395.     leave    
  396.     ret    
  397.     ?debug    C E601690402FEFF00
  398.     ?debug    E
  399.     ?debug    E
  400. _reset_um    endp
  401. TOTSR_TEXT    ends
  402. _DATA    segment word public use16 'DATA'
  403. us_timer    label    word
  404.     db    0
  405.     db    0
  406.     db    0
  407.     db    0
  408. timer    label    word
  409.     db    0
  410.     db    0
  411.     db    0
  412.     db    0
  413. tempo    label    word
  414.     db    192
  415.     db    18
  416.     db    0
  417.     db    0
  418. _DATA    ends
  419. TOTSR_TEXT    segment byte public use16 'CODE'
  420.     ?debug    L 114
  421.     assume    cs:TOTSR_TEXT
  422. clock    proc    far
  423.     ?debug    B
  424.     push    eax ; Oops... this was originally "push ax"
  425.     push    ebx
  426.     push    ecx
  427.     push    edx
  428.     push    es
  429.     push    ds
  430.     push    esi
  431.     push    edi
  432.     push    bp
  433.     mov    bp,DGROUP
  434.     mov    ds,bp
  435.     mov    bp,sp
  436.     sub    sp,6
  437.     ?debug    B
  438.     ?debug    L 118
  439.     inc    dword ptr DGROUP:_ticks
  440.     ?debug    L 119
  441.     mov    eax,dword ptr DGROUP:clock_interval
  442.     add    dword ptr DGROUP:us_timer,eax
  443.     ?debug    L 120
  444.     mov    eax,dword ptr DGROUP:us_timer
  445.     cmp    eax,dword ptr DGROUP:tempo
  446.     jbe    short @10@86
  447.     ?debug    L 121
  448.     xor    edx,edx
  449.     div    dword ptr DGROUP:tempo
  450.     mov    word ptr [bp-2],ax
  451.     ?debug    L 122
  452.     movsx    eax,word ptr [bp-2]
  453.     mov    dword ptr [bp-6],eax
  454.     imul    eax,dword ptr DGROUP:tempo
  455.     sub    dword ptr DGROUP:us_timer,eax
  456.     ?debug    L 123
  457.     mov    eax,dword ptr [bp-6]
  458.     add    dword ptr DGROUP:timer,eax
  459. @10@86:
  460.     ?debug    L 125
  461.     cmp    byte ptr DGROUP:_callmidi,0
  462.     je    short @10@142
  463.     ?debug    L 126
  464.     call    far ptr _smidigo
  465. @10@142:
  466.     ?debug    L 127
  467.     cmp    dword ptr DGROUP:orig_clock,large 0
  468.     je    short @10@198
  469.     ?debug    L 128
  470.     pushf    
  471.     call    dword ptr DGROUP:orig_clock
  472. @10@198:
  473.     ?debug    L 129
  474.     leave    
  475.     pop    edi
  476.     pop    esi
  477.     pop    ds
  478.     pop    es
  479.     pop    edx
  480.     pop    ecx
  481.     pop    ebx
  482.     pop    eax
  483.     iret
  484.     ?debug    C E601740402FEFF00
  485.     ?debug    E
  486.     ?debug    E
  487. clock    endp
  488.     ?debug    L 131
  489.     assume    cs:TOTSR_TEXT
  490. _um_set_tempo    proc    far
  491.     ?debug    B
  492.     enter    4,0
  493.     ?debug    C E60764697669736F72040A0A00000275730C0A06+
  494.     ?debug    C 0000
  495.     ?debug    B
  496.     ?debug    L 141
  497.     cmp    word ptr [bp+10],0
  498.     jle    short @11@86
  499.     ?debug    L 142
  500.     movsx    ebx,word ptr [bp+10]
  501.     mov    eax,dword ptr [bp+6]
  502.     xor    edx,edx
  503.     div    ebx
  504.     jmp    short @11@114
  505. @11@86:
  506.     ?debug    L 144
  507.     mov    ax,word ptr [bp+10]
  508.     neg    ax
  509.     sar    ax,8
  510.     and    ax,127
  511.     mov    word ptr [bp-2],ax
  512.     ?debug    L 145
  513.     mov    ax,word ptr [bp+10]
  514.     and    ax,127
  515.     mov    word ptr [bp-4],ax
  516.     ?debug    L 146
  517.     mov    ax,word ptr [bp-2]
  518.     imul    word ptr [bp-4]
  519.     movsx    ebx,ax
  520.     mov    eax,large 0000F4240h
  521.     cdq    
  522.     idiv    ebx
  523. @11@114:
  524.     mov    dword ptr DGROUP:tempo,eax
  525.     ?debug    L 148
  526.     cmp    dword ptr DGROUP:tempo,large 0
  527.     ja    short @11@198
  528.     mov    dword ptr DGROUP:tempo,large 1
  529. @11@198:
  530.     ?debug    L 149
  531.     leave    
  532.     ret    
  533.     ?debug    C E610736D7074655F7265736F6C7574696F6E0402+
  534.     ?debug    C FCFF000C736D7074655F666F726D61740402FEFF+
  535.     ?debug    C 000275730C0A0600000764697669736F72040A0A+
  536.     ?debug    C 0000
  537.     ?debug    E
  538.     ?debug    E
  539. _um_set_tempo    endp
  540.     ?debug    L 151
  541.     assume    cs:TOTSR_TEXT
  542. _um_reset_tick_counter    proc    far
  543.     ?debug    B
  544.     ?debug    B
  545.     ?debug    L 153
  546.     mov    dword ptr DGROUP:timer,large 0
  547.     ?debug    L 154
  548.     mov    dword ptr DGROUP:us_timer,large 0
  549.     ?debug    L 155
  550.     ret    
  551.     ?debug    E
  552.     ?debug    E
  553. _um_reset_tick_counter    endp
  554.     ?debug    L 157
  555.     assume    cs:TOTSR_TEXT
  556. _um_wait_for    proc    far
  557.     ?debug    B
  558.     push    bp
  559.     mov    bp,sp
  560.     ?debug    C E609736F6D655F74696D650C0A060000
  561.     ?debug    B
  562.     ?debug    L 160
  563.     mov    eax,dword ptr [bp+6]
  564.     cmp    eax,dword ptr DGROUP:timer
  565.     jbe    short @13@86
  566.     mov    ax,1
  567.     jmp    short @13@114
  568. @13@86:
  569.     xor    ax,ax
  570. @13@114:
  571.     ?debug    L 164
  572.     pop    bp
  573.     ret    
  574.     ?debug    C E609736F6D655F74696D650C0A060000
  575.     ?debug    E
  576.     ?debug    E
  577. _um_wait_for    endp
  578.     ?debug    L 167
  579.     assume    cs:TOTSR_TEXT
  580. _um_init_hardware    proc    far
  581.     ?debug    B
  582.     enter    14,0
  583.     push    di
  584.     ?debug    C E319074D4944494C49425A001E01
  585.     ?debug    C E31B00000023040400
  586.     ?debug    C E31A000400161B00
  587.     ?debug    C E31D00000023010400
  588.     ?debug    C E31C000400161D00
  589.     ?debug    C E31F00000023010400
  590.     ?debug    C E31E000400161F00
  591.     ?debug    C E32100000023010400
  592.     ?debug    C E320000400162100
  593.     ?debug    C E32300000023010400
  594.     ?debug    C E322000400162300
  595.     ?debug    C E32500000023040400
  596.     ?debug    C E324000400162500
  597.     ?debug    C E32700000023010400
  598.     ?debug    C E326000400162700
  599.     ?debug    C E32900000023010400
  600.     ?debug    C E328000400162900
  601.     ?debug    C E32B00000023040400
  602.     ?debug    C E32A000400162B00
  603.     ?debug    C E32D00000023040400
  604.     ?debug    C E32C000400162D00
  605.     ?debug    C E32F00000023010400
  606.     ?debug    C E32E000400162F00
  607.     ?debug    C E33100000023010400
  608.     ?debug    C E330000400163100
  609.     ?debug    C E33300000023010400
  610.     ?debug    C E332000400163300
  611.     ?debug    C E33500000023010400
  612.     ?debug    C E334000400163500
  613.     ?debug    C E33700000023010400
  614.     ?debug    C E336000400163700
  615.     ?debug    C E33900000023010400
  616.     ?debug    C E338000400163900
  617.     ?debug    C E33B00000023040400
  618.     ?debug    C E33A000400163B00
  619.     ?debug    C E33D00000023010400
  620.     ?debug    C E33C000400163D00
  621.     ?debug    C E33F05747261636B1C001E1A
  622.     ?debug    C E340000400160801
  623.     ?debug    C E3410A706C61795F7374617465020022000080FF+
  624.     ?debug    C 7F24
  625.     ?debug    C E33E000400163F00
  626.     ?debug    C E318000400161900
  627.     ?debug    C E6026D6C180A060000
  628.     ?debug    B
  629.     ?debug    L 174
  630.     mov    word ptr [bp-2],120
  631.     jmp    short @14@114
  632. @14@58:
  633.     ?debug    L 175
  634.     push    word ptr [bp-2]
  635.     call    far ptr _getvect
  636.     pop    cx
  637.     mov    word ptr DGROUP:_um_hook+2,dx
  638.     mov    word ptr DGROUP:_um_hook,ax
  639.     ?debug    L 176
  640.     mov    ax,word ptr DGROUP:_um_hook+2
  641.     mov    word ptr [bp-4],ax
  642.     mov    word ptr [bp-6],259
  643.     ?debug    L 177
  644.     push    8
  645.     push    ds
  646.     push    offset DGROUP:s@
  647.     push    ax
  648.     push    word ptr [bp-6]
  649.     call    far ptr _strncmp
  650.     add    sp,10
  651.     or    ax,ax
  652.     je    short @14@142
  653.     ?debug    L 174
  654.     inc    word ptr [bp-2]
  655. @14@114:
  656.     cmp    word ptr [bp-2],127
  657.     jle    short @14@58
  658. @14@142:
  659.     ?debug    L 179
  660.     cmp    word ptr [bp-2],127
  661.     jle short    @@13
  662.     jmp    @14@674
  663. @@13:
  664.     ?debug    L 180
  665.     push    ds
  666.     push    offset DGROUP:s@+9
  667.     call    far ptr _midi_message
  668.     add    sp,4
  669.     ?debug    L 181
  670.     cmp    dword ptr DGROUP:_um_hook,large 0
  671.     je    short @14@226
  672.     ?debug    L 182
  673.     mov    ax,26
  674.     ?debug    L 183
  675.     call    dword ptr DGROUP:_um_hook
  676. @14@226:
  677.     ?debug    L 185
  678.     push    cs
  679.     call    near ptr _reset_um
  680.     ?debug    L 186
  681.     cmp    dword ptr DGROUP:_um_hook,large 0
  682.     jne short    @@14
  683.     jmp    @14@702
  684. @@14:
  685.     ?debug    L 187
  686.     les    bx,dword ptr [bp+6]
  687.     mov    eax,dword ptr es:[bx+72]
  688.     jmp    short @14@590
  689. @14@282:
  690.     ?debug    L 188
  691.     les    bx,dword ptr [bp-10]
  692.     mov    es,word ptr es:[bx+2]
  693.     ?debug    L 189
  694.      push     es
  695.     ?debug    L 190
  696.     les    bx,dword ptr [bp-10]
  697.     mov    di,word ptr es:[bx]
  698.     ?debug    L 191
  699.      push     di
  700.     ?debug    L 192
  701.     les    bx,dword ptr [bp-10]
  702.     mov    eax,dword ptr es:[bx+12]
  703.     mov    dword ptr [bp-14],eax
  704.     ?debug    L 193
  705.      mov     bx, word ptr [bp-14]+2
  706.     ?debug    L 194
  707.      mov     dx, word ptr [bp-14]
  708.     ?debug    L 195
  709.      pop     di
  710.     ?debug    L 196
  711.      pop     es
  712.     ?debug    L 197
  713.     mov    ax,10
  714.     ?debug    L 198
  715.     call    dword ptr DGROUP:_um_hook
  716.     ?debug    L 187
  717.     les    bx,dword ptr [bp-10]
  718.     mov    eax,dword ptr es:[bx+24]
  719. @14@590:
  720.     mov    dword ptr [bp-10],eax
  721.     cmp    dword ptr [bp-10],large 0
  722.     jne    short @14@282
  723.     ?debug    L 200
  724.     mov    ax,14
  725.     ?debug    L 201
  726.     call    dword ptr DGROUP:_um_hook
  727.     jmp    short @14@702
  728. @14@674:
  729.     ?debug    L 204
  730.     mov    dword ptr DGROUP:_um_hook,large 0
  731.     ?debug    L 205
  732.     push    ds
  733.     push    offset DGROUP:s@+52
  734.     call    far ptr _midi_error
  735.     add    sp,4
  736.     ?debug    L 206
  737.     mov    ax,1
  738.     jmp    short @14@730
  739. @14@702:
  740.     ?debug    L 208
  741.     xor    ax,ax
  742. @14@730:
  743.     ?debug    L 209
  744.     pop    di
  745.     leave    
  746.     ret    
  747.     ?debug    C E343000400160200
  748.     ?debug    C E6066C656E6774680C02F2FF0005747261636B3E+
  749.     ?debug    C 02F6FF00057374616D704302FAFF000676656374+
  750.     ?debug    C 6F720402FEFF00026D6C180A060000
  751.     ?debug    E
  752.     ?debug    E
  753. _um_init_hardware    endp
  754.     ?debug    L 212
  755.     assume    cs:TOTSR_TEXT
  756. _um_cleanup    proc    far
  757.     ?debug    B
  758.     ?debug    B
  759.     ?debug    L 214
  760.     push    cs
  761.     call    near ptr _reset_um
  762.     ?debug    L 215
  763.     cmp    dword ptr DGROUP:_um_hook,large 0
  764.     je    short @15@58
  765.     ?debug    L 216
  766.     mov    ax,27
  767.     ?debug    L 217
  768.     call    dword ptr DGROUP:_um_hook
  769. @15@58:
  770.     ?debug    L 219
  771.     ret    
  772.     ?debug    E
  773.     ?debug    E
  774. _um_cleanup    endp
  775.     ?debug    L 221
  776.     assume    cs:TOTSR_TEXT
  777. _um_init_timers    proc    far
  778.     ?debug    B
  779.     ?debug    B
  780.     ?debug    L 223
  781.     push    8
  782.     call    far ptr _getvect
  783.     pop    cx
  784.     mov    word ptr DGROUP:orig_clock+2,dx
  785.     mov    word ptr DGROUP:orig_clock,ax
  786.     ?debug    L 224
  787.     push    seg clock
  788.     push    offset clock
  789.     push    8
  790.     call    far ptr _setvect
  791.     add    sp,6
  792.     ?debug    L 225
  793.     mov    dx,67
  794.     mov    al,54
  795.     out    dx,al
  796.     ?debug    L 226
  797.     mov    dx,64
  798.     mov    al,216
  799.     out    dx,al
  800.     ?debug    L 227
  801.     mov    al,38
  802.     out    dx,al
  803.     ?debug    L 228
  804.     ret    
  805.     ?debug    E
  806.     ?debug    E
  807. _um_init_timers    endp
  808.     ?debug    L 230
  809.     assume    cs:TOTSR_TEXT
  810. _um_cleanup_timers    proc    far
  811.     ?debug    B
  812.     ?debug    B
  813.     ?debug    L 232
  814.     mov    dx,67
  815.     mov    al,54
  816.     out    dx,al
  817.     ?debug    L 233
  818.     mov    dx,64
  819.     mov    al,0
  820.     out    dx,al
  821.     ?debug    L 234
  822.     out    dx,al
  823.     ?debug    L 235
  824.     cmp    dword ptr DGROUP:orig_clock,large 0
  825.     je    short @17@58
  826.     push    dword ptr DGROUP:orig_clock
  827.     push    8
  828.     call    far ptr _setvect
  829.     add    sp,6
  830. @17@58:
  831.     ?debug    L 236
  832.     ret    
  833.     ?debug    E
  834.     ?debug    E
  835. _um_cleanup_timers    endp
  836.     ?debug    C E9
  837.     ?debug    C FA01000000
  838. TOTSR_TEXT    ends
  839. _DATA    segment word public use16 'DATA'
  840. s@    label    byte
  841.     db    'ULTRAMID'
  842.     db    0
  843.     db    'UltraMID is now loading instrument patches'
  844.     db    0
  845.     db    'Couldn'
  846.     db    39
  847.     db    't find UltraMID'
  848.     db    0
  849. _DATA    ends
  850. TOTSR_TEXT    segment byte public use16 'CODE'
  851. TOTSR_TEXT    ends
  852. _tempo    equ    tempo
  853. _timer    equ    timer
  854. _us_timer    equ    us_timer
  855.     public    _um_data_out
  856.     public    _um_hook
  857. _clock_interval    equ    clock_interval
  858. _clock    equ    clock
  859. _orig_clock    equ    orig_clock
  860.     extrn    _ticks:word
  861.     extrn    _smidigo:far
  862.     extrn    _callmidi:byte
  863.     public    _um_cleanup
  864.     public    _reset_um
  865.     public    _um_wait_for
  866.     public    _um_reset_tick_counter
  867.     public    _um_cleanup_timers
  868.     public    _um_init_timers
  869.     public    _um_init_hardware
  870.     public    _um_set_tempo
  871.     public    _um_note_off
  872.     public    _um_note_on
  873.     public    _um_parameter
  874.     public    _um_pressure
  875.     public    _um_chanpressure
  876.     public    _um_program
  877.     public    _um_pitch_bend
  878.     extrn    _midi_message:far
  879.     extrn    _midi_error:far
  880.     extrn    _setvect:far
  881.     extrn    _getvect:far
  882.     extrn    _strncmp:far
  883. _s@    equ    s@
  884.     ?debug    C EA010C
  885.     ?debug    C E34400000023040400
  886.     ?debug    C EC0C5F756D5F646174615F6F7574441800
  887.     ?debug    C E34600000023010400
  888.     ?debug    C E345000400164600
  889.     ?debug    C EC085F756D5F686F6F6B450000
  890.     ?debug    C E34700000023010700
  891.     ?debug    C E34900000023010700
  892.     ?debug    C E348000400164900
  893.     ?debug    C EB065F7469636B730600
  894.     ?debug    C E34A00000023010400
  895.     ?debug    C EB085F736D696469676F4A00
  896.     ?debug    C EB095F63616C6C6D6964690800
  897.     ?debug    C E34B00000023010400
  898.     ?debug    C EC0B5F756D5F636C65616E75704B1800
  899.     ?debug    C E34C00000023040400
  900.     ?debug    C EC095F72657365745F756D4C1800
  901.     ?debug    C E34D00000023040400
  902.     ?debug    C EC0C5F756D5F776169745F666F724D1800
  903.     ?debug    C E34E00000023010400
  904.     ?debug    C EC165F756D5F72657365745F7469636B5F636F75+
  905.     ?debug    C 6E7465724E1800
  906.     ?debug    C E34F00000023010400
  907.     ?debug    C EC125F756D5F636C65616E75705F74696D657273+
  908.     ?debug    C 4F1800
  909.     ?debug    C E35000000023010400
  910.     ?debug    C EC0F5F756D5F696E69745F74696D657273501800
  911.     ?debug    C E35100000023040400
  912.     ?debug    C EC115F756D5F696E69745F686172647761726551+
  913.     ?debug    C 1800
  914.     ?debug    C E35200000023010400
  915.     ?debug    C EC0D5F756D5F7365745F74656D706F521800
  916.     ?debug    C E35300000023010400
  917.     ?debug    C EC0C5F756D5F6E6F74655F6F6666531800
  918.     ?debug    C E35400000023040400
  919.     ?debug    C EC0B5F756D5F6E6F74655F6F6E541800
  920.     ?debug    C E35500000023010400
  921.     ?debug    C EC0D5F756D5F706172616D65746572551800
  922.     ?debug    C E35600000023010400
  923.     ?debug    C EC0C5F756D5F7072657373757265561800
  924.     ?debug    C E35700000023010400
  925.     ?debug    C EC105F756D5F6368616E70726573737572655718+
  926.     ?debug    C 00
  927.     ?debug    C E35800000023010400
  928.     ?debug    C EC0B5F756D5F70726F6772616D581800
  929.     ?debug    C E35900000023010400
  930.     ?debug    C EC0E5F756D5F70697463685F62656E64591800
  931.     ?debug    C E35A00000023010401
  932.     ?debug    C EB0D5F6D6964695F6D6573736167655A00
  933.     ?debug    C E35B00000023010401
  934.     ?debug    C EB0B5F6D6964695F6572726F725B00
  935.     ?debug    C E35C00000023010400
  936.     ?debug    C EB085F736574766563745C00
  937.     ?debug    C E35F00000023010700
  938.     ?debug    C E35E000400165F00
  939.     ?debug    C E35D000000235E0400
  940.     ?debug    C EB085F676574766563745D00
  941.     ?debug    C E36000000023040400
  942.     ?debug    C EB085F7374726E636D706000
  943.     ?debug    C E60574656D706F0C0000021400000574696D6572+
  944.     ?debug    C 0C0000021000000875735F74696D65720C000002+
  945.     ?debug    C 0C00000E636C6F636B5F696E74657276616C0C00+
  946.     ?debug    C 00020400000A6F7269675F636C6F636B48000002+
  947.     ?debug    C 0000000777636861725F740206000666706F735F+
  948.     ?debug    C 740606000673697A655F740A0600074D4944494C+
  949.     ?debug    C 494219070005747261636B3F07000A706C61795F+
  950.     ?debug    C 7374617465410700
  951.     ?debug    F clock 71 152 0
  952.     ?debug    C E200074D665F676574631A00084D665F6572726F+
  953.     ?debug    C 721C00094D665F6865616465721E00154D705F72+
  954.     ?debug    C 657365745F7469636B5F636F756E74657220000C+
  955.     ?debug    C 4D705F7365745F74656D706F22000B4D705F7761+
  956.     ?debug    C 69745F666F7224000E4D705F696E69745F74696D+
  957.     ?debug    C 6572732600114D705F636C65616E75705F74696D+
  958.     ?debug    C 65727328000D4D705F72657365745F6D6964692A+
  959.     ?debug    C 000A4D705F6E6F74655F6F6E2C000B4D705F6E6F+
  960.     ?debug    C 74655F6F66662E000B4D705F7072657373757265+
  961.     ?debug    C 30000C4D705F706172616D6574657232000D4D70+
  962.     ?debug    C 5F70697463685F62656E6434000A4D705F70726F+
  963.     ?debug    C 6772616D36000F4D705F6368616E707265737375+
  964.     ?debug    C 72653800104D705F696E69745F68617264776172+
  965.     ?debug    C 653A000A4D705F636C65616E75703C00094D705F+
  966.     ?debug    C 747261636B733E0008747261636B6E756D040010+
  967.     ?debug    C 4D705F6D61737465725F766F6C756D6504000A4D+
  968.     ?debug    C 665F6E6F6D6572676504000B4D665F746F626572+
  969.     ?debug    C 6561640600124D705F6E6578745F6576656E745F+
  970.     ?debug    C 74696D650CC05A000000
  971.     ?debug    C E2000464617461400005706C617970400008706F+
  972.     ?debug    C 736974696F6E0C00066C656E6774680C0009706C+
  973.     ?debug    C 61795F74696D650C000673746174757308401600+
  974.     ?debug    C 0000000A706C61795F737461746541000A6E6578+
  975.     ?debug    C 745F747261636B3EC01C000000
  976.     ?debug    C E400094D50535F424547494E0000000B4D50535F+
  977.     ?debug    C 504C4159494E47010080084D50535F444F4E4502+
  978.     ?debug    C 00
  979.     end
  980.