home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 4 Drivers / 04-Drivers.zip / cs0929a.zip / strat.lst < prev    next >
File List  |  1999-09-29  |  23KB  |  620 lines

  1.  
  2. Module: D:\dev\csrc\os2dd\scd\strat.c
  3. Group: 'DGROUP' CONST,CONST2,_DATA,_BSS
  4.  
  5. Segment: _TEXT  PARA   00000239 bytes  
  6.  
  7. //
  8. // strat.c
  9. // 25-Jan-99
  10. //
  11. // VOID __far stratMode2(REQPACK __far *rpPtr);
  12.  
  13.  
  14. #include "cs40.h"
  15.  
  16. static VOID stratInitComplete(REQPACK __far *rpPtr);
  17. static VOID stratOpen(REQPACK __far *rpPtr);
  18. static VOID stratClose(REQPACK __far *rpPtr);
  19. static VOID stratDeinstall(REQPACK __far *rpPtr);
  20.  
  21. static USHORT P5 = 0;          // updated at strat entry (once, set to 1 if can RDTSC)
  22. static USHORT R3 = 3;          // updated at strat entry (usually once, set to 0 if ring0)
  23.  
  24. #ifdef TRACE_WANTED // ===================================================
  25.  
  26.  static ULONG calibrate = -1;
  27.  static USHORT trace = 1;       // true if should call to trace support
  28.  
  29.  
  30.  // ----------------------
  31.  // in: minor event number
  32.  //out: tPeft.rdtsc.lo (for calibrartion use, right at startup)
  33.  //nts: needs P5 to get RDTSC, else uses timer0
  34.  //     if P5 .lo always has bit0=1
  35.  //     if not P5 .lo always has bit0=0
  36.  //
  37.  //     code being traced is surrounded by
  38.  //
  39.  //       #ifdef TRACE_XXX
  40.  //        tracePerf(TRACE_XXX, _IF());
  41.  //       #endif
  42.  //
  43.  //     where this is defined in my_h\os2\traceid.h
  44.  
  45.  ULONG tracePerf(USHORT minor, ULONG data) {
  46.  
  47.   USHORT rc = 7734;
  48.  
  49.   typedef struct _TPERF {
  50.    ULONG count;
  51.    RDTSC_COUNT rdtsc;
  52.    ULONG data;
  53.   } TPERF;
  54.  
  55.   static TPERF tPerf = {0,0};
  56.  
  57.  0000  56                tracePerf_      push    si
  58.  0001  57                                push    di
  59.  0002  89 c2                             mov     dx,ax
  60.  
  61.   if (trace == 0) return 0;
  62.  
  63.   P5 = 0;  // just simpler to compare with non-p5 times on mytrace.exe reports
  64.  
  65.  0004  83 3e 00 00 00                    cmp     word ptr _trace,0000H
  66.  0009  75 07                             jne     L1
  67.  000b  31 c0                             xor     ax,ax
  68.  000d  31 d2                             xor     dx,dx
  69.  000f  5f                                pop     di
  70.  0010  5e                                pop     si
  71.  0011  c3                                ret     
  72.  
  73.   tPerf.count++;
  74.   tPerf.data = data;
  75.  
  76.   if (P5) {
  77.      rdtsc(&tPerf.rdtsc);
  78.      tPerf.rdtsc.lo = tPerf.rdtsc.lo | 1;     // bit0=1 always if P5
  79.   }
  80.   else {
  81.      // 838.1  ns per tick
  82.      // 0.8381 us per tick
  83.      // 50 ticks = 50 x 0.8381 us = 41.91 us
  84.  
  85.      tPerf.rdtsc.lo = (ULONG)ReadTimer0();
  86.      tPerf.rdtsc.lo = tPerf.rdtsc.lo & ~1;    // bit0=0 always if not P5
  87.   }
  88.  
  89.  0012  a1 0c 00          L1              mov     ax,L23
  90.  
  91.   if (R3) {
  92.  0015  8b 36 00 00                       mov     si,_R3
  93.  0019  89 1e 18 00                       mov     L27,bx
  94.  001d  89 0e 1a 00                       mov     L28,cx
  95.  0021  31 ff                             xor     di,di
  96.  0023  8b 1e 0e 00                       mov     bx,L24
  97.  0027  05 01 00                          add     ax,0001H
  98.  002a  a3 0c 00                          mov     L23,ax
  99.  002d  11 fb                             adc     bx,di
  100.  002f  28 c0                             sub     al,al
  101.  0031  51                                push    cx
  102.  0032  9c                                pushf   
  103.  0033  fa                                cli     
  104.  0034  e6 43                             out     43H,al
  105.  0036  e4 40                             in      al,40H
  106.  0038  88 c4                             mov     ah,al
  107.  003a  e4 40                             in      al,40H
  108.  003c  9d                                popf    
  109.  003d  59                                pop     cx
  110.  003e  86 c4                             xchg    al,ah
  111.  0040  a3 10 00                          mov     L25,ax
  112.  0043  89 3e 00 00                       mov     _P5,di
  113.  0047  8a 26 10 00                       mov     ah,L25
  114.  004b  89 3e 12 00                       mov     L26,di
  115.  004f  80 e4 fe                          and     ah,0feH
  116.  0052  89 1e 0e 00                       mov     L24,bx
  117.  0056  88 26 10 00                       mov     L25,ah
  118.  005a  85 f6                             test    si,si
  119.  005c  74 11                             je      L2
  120.  
  121.      rc = DosSysTrace(255,sizeof(TPERF),minor,(PCHAR)&tPerf);
  122.   }
  123.  005e  68 ff 00                          push    00ffH
  124.  0061  6a 10                             push    0010H
  125.  0063  52                                push    dx
  126.  0064  1e                                push    ds
  127.  0065  68 0c 00                          push    offset L23
  128.  0068  9a 00 00 00 00                    call    far DOS16SYSTRACE
  129.  
  130.   else {
  131.  006d  eb 22                             jmp     L3
  132.  
  133.      rc = DevHelp_RAS(255,minor,sizeof(TPERF),(PSZ)&tPerf);
  134.   }
  135.  
  136.  006f  be 0c 00          L2              mov     si,offset L23
  137.  0072  bb 10 00                          mov     bx,0010H
  138.  0075  8c d8                             mov     ax,ds
  139.  0077  89 d1                             mov     cx,dx
  140.  0079  8e c0                             mov     es,ax
  141.  007b  b8 ff 00                          mov     ax,00ffH
  142.  007e  1e                                push    ds
  143.  007f  06                                push    es
  144.  0080  1f                                pop     ds
  145.  0081  07                                pop     es
  146.  0082  b2 28                             mov     dl,28H
  147.  0084  26 ff 1e 00 00                    call    dword ptr es:_Device_Help
  148.  0089  06                                push    es
  149.  008a  1f                                pop     ds
  150.  008b  b8 00 00                          mov     ax,0000H
  151.  008e  83 d8 00                          sbb     ax,0000H
  152.  
  153.   return tPerf.rdtsc.lo;  // used only just after boot so will always be still in lo, or if not,
  154.  0091  a1 10 00          L3              mov     ax,L25
  155.  0094  8b 16 12 00                       mov     dx,L26
  156.  
  157.  }                        // hopefully won't be unlucky enough to straddle lo/hi in split second
  158.  
  159.  
  160.  // ---------------------
  161.  // in: n/a
  162.  //out: n/a
  163.  //nts: called at strat init complete (and play start when debugging)
  164.  
  165.  0098  5f                                pop     di
  166.  0099  5e                                pop     si
  167.  009a  c3                                ret     
  168.  009b  fc                                cld     
  169.  
  170.  VOID traceCalibrate(VOID) {
  171.  
  172.   ULONG ti, to;
  173.  
  174.   _cli_();
  175.  009c  53                traceCalibrate_ push    bx
  176.  009d  51                                push    cx
  177.  009e  52                                push    dx
  178.  009f  56                                push    si
  179.  00a0  57                                push    di
  180.  00a1  b8 01 00                          mov     ax,0001H
  181.  
  182.  00a4  31 db                             xor     bx,bx
  183.  00a6  31 c9                             xor     cx,cx
  184.  
  185.   ti = tracePerf(TRACE_CALIBRATE_IN,0);   // results in 50-100 ticks on box2 (timer0)
  186.  00a8  9c                                pushf   
  187.  00a9  fa                                cli     
  188.  00aa  e8 00 00                          call    tracePerf_
  189.  00ad  89 c7                             mov     di,ax
  190.  
  191.   to = tracePerf(TRACE_CALIBRATE_OUT,0);  // ring0
  192.  00af  31 db                             xor     bx,bx
  193.  00b1  31 c9                             xor     cx,cx
  194.  00b3  b8 01 80                          mov     ax,8001H
  195.  00b6  89 d6                             mov     si,dx
  196.  00b8  e8 00 00                          call    tracePerf_
  197.  
  198.   _sti_();
  199.  
  200.  00bb  9d                                popf    
  201.  
  202.   if (P5) {
  203.  00bc  8b 1e 00 00                       mov     bx,_P5
  204.  00c0  85 db                             test    bx,bx
  205.  00c2  74 36                             je      L6
  206.  
  207.      if (to > ti) {
  208.  00c4  39 f2                             cmp     dx,si
  209.  00c6  77 06                             ja      L4
  210.  00c8  75 11                             jne     L5
  211.  00ca  39 f8                             cmp     ax,di
  212.  00cc  76 0d                             jbe     L5
  213.  
  214.         calibrate = to - ti;    // usual, means did not wrap to rdtsc.hi
  215.      }
  216.  00ce  29 f8             L4              sub     ax,di
  217.  00d0  19 f2                             sbb     dx,si
  218.  00d2  a3 00 00                          mov     _calibrate,ax
  219.  00d5  89 16 02 00                       mov     _calibrate+2H,dx
  220.  
  221.      else {
  222.  00d9  eb 44                             jmp     L10
  223.  
  224.         calibrate = (0xFFFFFFFF - ti) + to + 1; // wrapped, so take pre-wrap and add to post wrap
  225.  00db  bb ff ff          L5              mov     bx,0ffffH
  226.  00de  29 fb                             sub     bx,di
  227.  00e0  89 df                             mov     di,bx
  228.  00e2  bb ff ff                          mov     bx,0ffffH
  229.  00e5  19 f3                             sbb     bx,si
  230.  00e7  01 f8                             add     ax,di
  231.  00e9  11 da                             adc     dx,bx
  232.  00eb  05 01 00                          add     ax,0001H
  233.  00ee  83 d2 00                          adc     dx,0000H
  234.  00f1  a3 00 00                          mov     _calibrate,ax
  235.  00f4  89 16 02 00                       mov     _calibrate+2H,dx
  236.  
  237.      }
  238.   }
  239.   else {
  240.  00f8  eb 25                             jmp     L10
  241.  
  242.      if (ti > to) {          // expected for timer0, unless rollunder (can't be expected to be =)
  243.  00fa  39 d6             L6              cmp     si,dx
  244.  00fc  77 06                             ja      L7
  245.  00fe  75 0a                             jne     L8
  246.  0100  39 c7                             cmp     di,ax
  247.  0102  76 06                             jbe     L8
  248.  
  249.         calibrate = ti - to; // ti=40000  to=39950  calibrate=50
  250.      }
  251.  0104  29 c7             L7              sub     di,ax
  252.  0106  19 d6                             sbb     si,dx
  253.  
  254.      else {                  // rollunder (ti=25  to=65530  calibrate=50)
  255.  0108  eb 0d                             jmp     L9
  256.  
  257.         calibrate = ti + (65536-to);
  258.      }
  259.   }
  260.  
  261.   return;
  262.  010a  29 c3             L8              sub     bx,ax
  263.  010c  89 d8                             mov     ax,bx
  264.  010e  bb 01 00                          mov     bx,0001H
  265.  0111  19 d3                             sbb     bx,dx
  266.  0113  01 c7                             add     di,ax
  267.  0115  11 de                             adc     si,bx
  268.  0117  89 3e 00 00       L9              mov     _calibrate,di
  269.  011b  89 36 02 00                       mov     _calibrate+2H,si
  270.  
  271.  }
  272.  
  273. #endif  // #ifdef TRACE_WANTED ===================================================
  274.  
  275.  
  276. // -------------------------------------
  277. // in:
  278. //out:
  279. //nts: have to remember to think __far for all pointers
  280. //
  281. //     be aware that rpPtr and es:bx contents probably aren't the same, even if not calling out
  282. //     this because compiler sets a local rpPtr (pointer) to es:bx on entry, then uses local ptr
  283. //
  284. //     also be aware that watcom __saveregs doesn't do what it says it does (!) so be sure to
  285. //     look at listing file if __saveregs is used (also check how __interrupt looks)
  286.  
  287. // need to __loadds?
  288.  
  289.  011f  5f                L10             pop     di
  290.  0120  5e                                pop     si
  291.  0121  5a                                pop     dx
  292.  0122  59                                pop     cx
  293.  0123  5b                                pop     bx
  294.  0124  c3                stratOpen_      ret     
  295.  0125  89 c0                             mov     ax,ax
  296.  0127  fc                                cld     
  297.  
  298. VOID __far stratMode2(REQPACK __far *rpPtr) {
  299. #pragma aux stratMode2 parm [es bx];
  300.  
  301. // int3();
  302. // ddprintf("@stratMode2, es:bx=%p\n",rpPtr);
  303.  
  304.  0128  51                stratMode2_     push    cx
  305.  0129  52                                push    dx
  306.  012a  56                                push    si
  307.  012b  57                                push    di
  308.  012c  89 de                             mov     si,bx
  309.  012e  8c c7                             mov     di,es
  310.  
  311.  if (R3) {
  312.  0130  83 3e 00 00 00                    cmp     word ptr _R3,0000H
  313.  0135  74 5c                             je      L13
  314.  
  315.     R3 = IsRing3();                  // inits in ring3, once gets to 0 always 0, even if multi hdrs
  316.  0137  0e                                push    cs
  317.  0138  58                                pop     ax
  318.  0139  83 e0 03                          and     ax,0003H
  319.  013c  a3 00 00                          mov     _R3,ax
  320.  
  321.     if (CanCPUID()) P5 = CanRDTSC(); // also only need to do this once (assumes not a BASEDEV)
  322.  }
  323.  
  324. #ifdef TRACE_STRAT
  325.  013f  66 53                             push    ebx
  326.  0141  66 9c                             pushfd  
  327.  0143  66 58                             pop     eax
  328.  0145  66 89 c3                          mov     ebx,eax
  329.  0148  66 35 00 00 20 00                 xor     eax,00200000H
  330.  014e  66 50                             push    eax
  331.  0150  66 9d                             popfd   
  332.  0152  66 9c                             pushfd  
  333.  0154  66 58                             pop     eax
  334.  0156  66 39 d8                          cmp     eax,ebx
  335.  0159  b8 00 00                          mov     ax,0000H
  336.  015c  74 01                             je      L11
  337.  015e  40                                inc     ax
  338.  015f  66 5b             L11             pop     ebx
  339.  0161  85 c0                             test    ax,ax
  340.  0163  74 2e                             je      L13
  341.  0165  66 53                             push    ebx
  342.  0167  66 51                             push    ecx
  343.  0169  66 52                             push    edx
  344.  016b  66 29 c0                          sub     eax,eax
  345.  016e  0f a2                             cpuid   
  346.  0170  66 83 f8 01                       cmp     eax,00000001H
  347.  0174  b8 00 00                          mov     ax,0000H
  348.  0177  72 11                             jb      L12
  349.  0179  66 b8 01 00 00 00                 mov     eax,00000001H
  350.  017f  0f a2                             cpuid   
  351.  0181  f6 c2 10                          test    dl,10H
  352.  0184  b8 00 00                          mov     ax,0000H
  353.  0187  74 01                             je      L12
  354.  0189  40                                inc     ax
  355.  018a  66 5a             L12             pop     edx
  356.  018c  66 59                             pop     ecx
  357.  018e  66 5b                             pop     ebx
  358.  0190  a3 00 00                          mov     _P5,ax
  359.  
  360.  tracePerf(TRACE_STRAT_IN, rpPtr->command);
  361. #endif
  362.  
  363.  0193  8e c7             L13             mov     es,di
  364.  0195  b8 45 00                          mov     ax,0045H
  365.  0198  26 8a 5c 02                       mov     bl,es:[si+2H]
  366.  019c  31 c9                             xor     cx,cx
  367.  019e  30 ff                             xor     bh,bh
  368.  01a0  e8 00 00                          call    tracePerf_
  369.  
  370.  rpPtr->status = RPDONE;
  371.  
  372.  01a3  8e c7                             mov     es,di
  373.  
  374.  switch (rpPtr->command) {
  375.  case STRATEGY_INIT:
  376.  01a5  26 8a 44 02                       mov     al,es:[si+2H]
  377.  01a9  26 c7 44 03 00 01                 mov     word ptr es:[si+3H],0100H
  378.  01af  3c 0e                             cmp     al,0eH
  379.  01b1  72 14                             jb      L15
  380.  01b3  76 25                             jbe     L17
  381.  01b5  3c 14                             cmp     al,14H
  382.  01b7  72 08                             jb      L14
  383.  01b9  76 4c                             jbe     L21
  384.  01bb  3c 1f                             cmp     al,1fH
  385.  01bd  74 3b                             je      L19
  386.  01bf  eb 3e                             jmp     L20
  387.  01c1  3c 10             L14             cmp     al,10H
  388.  01c3  74 2a                             je      L18
  389.  01c5  eb 38                             jmp     L20
  390.  01c7  84 c0             L15             test    al,al
  391.  01c9  76 06                             jbe     L16
  392.  01cb  3c 0d                             cmp     al,0dH
  393.  01cd  74 38                             je      L21
  394.  01cf  eb 2e                             jmp     L20
  395.  
  396.     stratMode2Init(rpPtr);
  397.  01d1  89 f0             L16             mov     ax,si
  398.  01d3  89 fa                             mov     dx,di
  399.  01d5  e8 00 00                          call    stratMode2Init_
  400.  
  401.     break;
  402.  case STRATEGY_OPEN:
  403.     stratOpen(rpPtr);
  404.     break;
  405.  case STRATEGY_CLOSE:
  406.  01d8  eb 2d                             jmp     L21
  407.  
  408.     stratClose(rpPtr);
  409.     break;
  410.  01da  26 8b 44 0d       L17             mov     ax,es:[si+0dH]
  411.  01de  e8 00 00                          call    streamFindStreamSFN_
  412.  01e1  89 c3                             mov     bx,ax
  413.  01e3  85 c0                             test    ax,ax
  414.  01e5  74 20                             je      L21
  415.  01e7  8b 47 24                          mov     ax,[bx+24H]
  416.  01ea  e8 00 00                          call    wavestreamDeinit_
  417.  01ed  eb 18                             jmp     L21
  418.  
  419.  case STRATEGY_GENIOCTL:
  420.  01ef  89 f0             L18             mov     ax,si
  421.  01f1  89 fa                             mov     dx,di
  422.  
  423.     ioctlStrat(rpPtr, 0);
  424.  01f3  31 db                             xor     bx,bx
  425.  01f5  e8 00 00                          call    ioctlStrat_
  426.  
  427.     break;
  428.  case STRATEGY_DEINSTALL:
  429.     stratDeinstall(rpPtr);
  430.     break;
  431.  case STRATEGY_INITCOMPLETE:
  432.  01f8  eb 0d                             jmp     L21
  433.  
  434.     stratInitComplete(rpPtr);
  435.  01fa  e8 00 00          L19             call    traceCalibrate_
  436.  
  437.     break;
  438.  default:
  439.  01fd  eb 08                             jmp     L21
  440.  
  441.     rpPtr->status = RPDONE | RPERR | RPGENFAIL;
  442.  01ff  8e c7             L20             mov     es,di
  443.  0201  26 c7 44 03 0c 81                 mov     word ptr es:[si+3H],810cH
  444.  
  445.  }
  446.  
  447. #ifdef TRACE_STRAT
  448.  0207  b8 45 80          L21             mov     ax,8045H
  449.  
  450.  tracePerf(TRACE_STRAT_OUT, rpPtr->status);
  451. #endif
  452.  
  453.  return;
  454.  020a  8e c7                             mov     es,di
  455.  020c  31 c9                             xor     cx,cx
  456.  020e  26 8b 5c 03                       mov     bx,es:[si+3H]
  457.  0212  e8 00 00                          call    tracePerf_
  458.  
  459. }
  460.  
  461. // ---------
  462. // in:
  463. //out:
  464. //nts: resets timer0 to max, and count-by-1 (mode2), so only do once, and then really only when testing
  465. //     does a trace calibrate (always), also done at play start
  466. //     seems like clock01.sys already sets to mode2, so can probably skip (am)
  467.  
  468. static VOID stratInitComplete(REQPACK __far *rpPtr) {
  469.  
  470. #ifdef TRACE_CALIBRATE
  471.  // ResetTimer0();
  472.  traceCalibrate();
  473. #endif
  474.  
  475.  return;
  476.  rpPtr;
  477. }
  478.  
  479.  
  480. // ---------
  481. // in:
  482. //out:
  483. //nts: resources not allocated until ioctlAudioInit()
  484.  
  485. static VOID stratOpen(REQPACK __far *rpPtr) {
  486.  
  487.  // check if VDD has hardware and if so return busy, as in:
  488.  // rpPtr->status = RPDONE | RPERR | RPBUSY;
  489.  // if not, then inc inUseCounter to prevent a VDD from getting it
  490.  
  491.  return;
  492.  rpPtr;
  493. }
  494.  
  495.  
  496. // ---------
  497. // in:
  498. //out:
  499. //nts: may want to verify pid?
  500.  
  501. extern void dumpheap(void);
  502.  
  503.  0215  5f                                pop     di
  504.  0216  5e                                pop     si
  505.  0217  5a                                pop     dx
  506.  0218  59                                pop     cx
  507.  0219  cb                                retf    
  508.  021a  89 c0                             mov     ax,ax
  509.  
  510. static VOID stratClose(REQPACK __far *rpPtr) {
  511.  
  512.  STREAM *streamPtr;
  513.  
  514.  021c  53                stratClose_     push    bx
  515.  021d  89 c3                             mov     bx,ax
  516.  021f  8e c2                             mov     es,dx
  517.  
  518.  streamPtr = streamFindStreamSFN(rpPtr->open.SFN);
  519.  0221  26 8b 47 0d                       mov     ax,es:[bx+0dH]
  520.  0225  e8 00 00                          call    streamFindStreamSFN_
  521.  0228  89 c3                             mov     bx,ax
  522.  
  523.  if (streamPtr) {
  524.  022a  85 c0                             test    ax,ax
  525.  022c  74 06                             je      L22
  526.  
  527.     wavestreamDeinit(streamPtr->wsParentPtr);  // this frees streamPtr and wsPtr (wsParentPtr)
  528.  
  529.     // dec inUseCounter
  530.  }
  531.  
  532. // !!!
  533. // dump heap
  534.  
  535. // dumpheap();
  536.  
  537.  return;
  538.  rpPtr;
  539.  022e  8b 47 24                          mov     ax,[bx+24H]
  540.  0231  e8 00 00                          call    wavestreamDeinit_
  541.  
  542. }
  543.  
  544.  
  545. // ---------
  546. // in:
  547. //out:
  548. //nts:
  549.  
  550. static VOID stratDeinstall(REQPACK __far *rpPtr) {
  551.  
  552.  // org code:
  553.  //  while (pAudioHWList->IsElements())
  554.  //     pAudioHWList->DestroyElement(pAudioHWList->PopHead());
  555.  
  556.  return;
  557.  rpPtr;
  558. }
  559.  
  560.  
  561.  0234  5b                L22             pop     bx
  562.  0235  89 c0                             mov     ax,ax
  563.  0237  fc                                cld     
  564.  0238  c3                stratDeinstall_ ret     
  565.  
  566. No disassembly errors
  567.  
  568. List of external symbols
  569.  
  570. Symbol
  571. ----------------
  572. _trace           00000006
  573. _R3              0000013d 00000132 00000017
  574. _P5              00000191 000000be 00000045
  575. DOS16SYSTRACE    00000069
  576. _Device_Help     00000087
  577. tracePerf_       00000213 000001a1 000000b9 000000ab
  578. _calibrate       0000011d 00000119 000000f6 000000f2 000000d7 000000d3
  579. stratMode2Init_  000001d6
  580. streamFindStreamSFN_ 
  581.                  00000226 000001df
  582. wavestreamDeinit_ 
  583.                  00000232 000001eb
  584. ioctlStrat_      000001f6
  585. traceCalibrate_  000001fb
  586. ------------------------------------------------------------
  587.  
  588. Segment: _DATA  PARA   0000001c bytes  
  589.  0000  00 00                   _P5             - ..
  590.  0002  03 00                   _R3             - ..
  591.  0004  ff ff ff ff             _calibrate      - ....
  592.  0008  01 00 00 00             _trace          - ....
  593.  000c  00 00                   L23             - ..
  594.  000e  00 00                   L24             - ..
  595.  0010  00 00                   L25             - ..
  596.  0012  00 00 00 00 00 00       L26             - ......
  597.  0018  00 00                   L27             - ..
  598.  001a  00 00                   L28             - ..
  599.  
  600. No disassembly errors
  601.  
  602. ------------------------------------------------------------
  603. List of public symbols
  604.  
  605. SYMBOL          GROUP           SEGMENT          ADDRESS
  606. ---------------------------------------------------------
  607. _calibrate      DGROUP          _DATA            00000004
  608. _P5             DGROUP          _DATA            00000000
  609. _R3             DGROUP          _DATA            00000002
  610. _trace          DGROUP          _DATA            00000008
  611. stratClose_                     _TEXT            0000021c
  612. stratDeinstall_                 _TEXT            00000238
  613. stratMode2_                     _TEXT            00000128
  614. stratOpen_                      _TEXT            00000124
  615. traceCalibrate_                 _TEXT            0000009c
  616. tracePerf_                      _TEXT            00000000
  617.  
  618. ------------------------------------------------------------
  619.  
  620.