home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d807 / voicecode.lha / VoiceCode / Assembly_Code / LearnVoice.asm next >
Encoding:
Assembly Source File  |  1993-01-25  |  27.6 KB  |  1,228 lines

  1. ******************************************
  2.  
  3. *  Voice Recognition Demo by Richard Horne
  4.  
  5. *  December 1992
  6.  
  7. *  Requires voice.library (V 6.4) in sys:libs
  8.  
  9. ******************************************
  10.  
  11.    INCLUDE     "exec/types.i"
  12.    INCLUDE     "intuition/intuition.i"
  13.    INCLUDE     "libraries/dos.i"
  14.  
  15. *********** external references **********
  16.  
  17.    XREF  _AbsExecBase
  18.    XREF  _LVOOpenLibrary
  19.    XREF  _LVOCloseLibrary
  20.    XREF  _LVOOpenWindow
  21.    XREF  _LVOCloseWindow
  22.    XREF  _LVOOpenScreen
  23.    XREF  _LVOCloseScreen
  24.    XREF  _LVOSetMenuStrip
  25.    XREF  _LVOClearMenuStrip
  26.    XREF  _LVODisplayBeep
  27.    XREF  _LVOWait
  28.    XREF  _LVOGetMsg
  29.    XREF  _LVOReplyMsg
  30.    XREF  _LVOLoadRGB4
  31.    XREF  _LVOSetAPen
  32.    XREF  _LVOText
  33.    XREF  _LVOMove
  34.    XREF  _LVOOpen
  35.    XREF  _LVOClose
  36.    XREF  _LVORead
  37.    XREF  _LVOWrite
  38.    XREF  _LVOExecute
  39.  
  40.    XDEF  _main
  41.  
  42. *******  Voice.library Functions ********
  43.  
  44. _LVOLearn            EQU   -30
  45. _LVORecognize        EQU   -36
  46. _LVOAddVoiceTask     EQU   -42
  47. _LVORemVoiceTask     EQU   -48
  48. _LVOGainUp           EQU   -54
  49. _LVOGainDown         EQU   -60
  50. _LVORecDataAddress   EQU   -66
  51. _LVORecMapAddress    EQU   -72
  52. _LVOWordScore        EQU   -78
  53. _LVOPickSampler      EQU   -84
  54. _LVOSetVoicePri      EQU   -90
  55. _LVOPickTimer        EQU   -96
  56.  
  57. *********** Begin Program  **************
  58.  
  59. _main:
  60.    movea.l  _AbsExecBase,a6      ;Open DOS Llibrary
  61.    movea.l  #DOS_Name,a1
  62.    moveq.l  #0,d0
  63.    jsr      _LVOOpenLibrary(a6)
  64.    move.l   d0,DOS_Base
  65.    beq      Close50
  66.  
  67.    movea.l  DOS_Base,a6          ;Open NIL
  68.    move.l   #NILFileName,d1
  69.    move.l   #MODE_NEWFILE,d2
  70.    jsr      _LVOOpen(a6)
  71.    move.l   d0,NIL_Handle
  72.    beq      Close40
  73.  
  74.    movea.l  _AbsExecBase,a6      ;Open Intuition Library
  75.    movea.l  #INTUITION_Name,a1
  76.    moveq.l  #0,d0
  77.    jsr      _LVOOpenLibrary(a6)
  78.    move.l   d0,Intuition_Base
  79.    beq      Close30
  80.  
  81.    movea.l  #GRAPHICS_Name,a1    ;Open Graphics Library
  82.    moveq.l  #0,d0
  83.    jsr      _LVOOpenLibrary(a6)
  84.    move.l   d0,Graphics_Base
  85.    beq      Close20
  86.  
  87.    movea.l  #VOICE_Name,a1       ;Open Voice Library
  88.    moveq.l  #6,d0
  89.    jsr      _LVOOpenLibrary(a6)  ;Version 6 Only
  90.    move.l   d0,Voice_Base
  91.    beq      Close10
  92.  
  93. ****** Open Info Screen and Window *******
  94.  
  95.    movea.l  #InfoScreen,a0       ;Open Info Screen
  96.    movea.l  Intuition_Base,a6
  97.    jsr      _LVOOpenScreen(a6)
  98.    move.l   d0,InfoScr
  99.    beq      Close8
  100.  
  101.    add.l    #sc_RastPort,d0
  102.    move.l   d0,InfoRastPort
  103.  
  104.    move.l   InfoScr,d0
  105.    add.l    #sc_ViewPort,d0
  106.    move.l   d0,InfoViewPort
  107.  
  108.    movea.l  Graphics_Base,a6     ;Set Colors
  109.    movea.l  InfoViewPort,a0
  110.    move.l   #Colors,a1
  111.    move.l   #4,d0
  112.    jsr      _LVOLoadRGB4(a6)
  113.  
  114.    movea.l  #InfoWindow,a0       ;Open Info Window
  115.    move.l   InfoScr,nw_Screen(a0)
  116.    movea.l  Intuition_Base,a6
  117.    jsr      _LVOOpenWindow(a6)
  118.    move.l   d0,InfoWdw
  119.    beq      Close4
  120.  
  121.    bsr      WriteInfoText        ;Write Information
  122.  
  123.    movea.l  Intuition_Base,a6
  124.    movea.l  InfoWdw,a0
  125.    movea.l  #ProjectMenu,a1
  126.    jsr      _LVOSetMenuStrip(a6)
  127.  
  128. InfoPause:
  129.    movea.l  InfoWdw,a0
  130.    movea.l  wd_UserPort(a0),a0
  131.    move.b   MP_SIGBIT(a0),d1
  132.    moveq.l  #1,d0
  133.    lsl.l    d1,d0
  134.    movea.l  _AbsExecBase,a6
  135.    jsr      _LVOWait(a6)
  136.  
  137. GetInfoMessage:
  138.    movea.l  InfoWdw,a0
  139.    movea.l  wd_UserPort(a0),a0
  140.    movea.l  _AbsExecBase,a6
  141.    jsr      _LVOGetMsg(a6)
  142.    move.l   d0,IDCMPMessage
  143.    beq      InfoPause
  144.  
  145.    movea.l  d0,a0                ;Get Message Class and Code
  146.    move.l   im_Class(a0),MessageClass
  147.    move.w   im_Code(a0),MessageCode
  148.  
  149.    movea.l  _AbsExecBase,a6      ;Reply
  150.    move.l   d0,a1
  151.    jsr      _LVOReplyMsg(a6)
  152.  
  153.    cmpi.l   #CLOSEWINDOW,MessageClass  ;Close and quit?
  154.    beq      Close
  155.  
  156.    cmpi.l   #MENUPICK,MessageClass     ;Menu Selection?
  157.    bne      GetInfoMessage
  158.  
  159. MenuSelect:
  160.    moveq.l  #0,d0
  161.    move.w   MessageCode,d0
  162.    and.w    #$1F,d0
  163.    move.w   d0,MenuNumber
  164.  
  165.    moveq.l  #0,d0
  166.    move.w   MessageCode,d0
  167.    move.w   #5,d1
  168.    lsr.w    d1,d0
  169.    and.w    #$3F,d0
  170.    move.w   d0,ItemNumber
  171.  
  172.    cmpi.w   #1,MenuNumber        ;Learn Menu Chosen?
  173.    beq      LearnRoutine
  174.  
  175.    cmpi.w   #2,MenuNumber        ;Options Chosen?
  176.    beq      GetInfoMessage
  177.  
  178.    cmpi.w   #0,ItemNumber        ;Project Menu Chosen
  179.    beq      SaveFileRoutine
  180.    cmpi.w   #1,ItemNumber
  181.    beq      LoadFileRoutine
  182.    cmpi.w   #2,ItemNumber
  183.    beq      RecognizeRoutine
  184.    cmpi.w   #3,ItemNumber
  185.    beq      Close
  186.    bra      GetInfoMessage
  187.  
  188. SaveFileRoutine:
  189.    movea.l  DOS_Base,a6
  190.    move.l   #VoiceFileName,d1
  191.    move.l   #MODE_NEWFILE,d2
  192.    jsr      _LVOOpen(a6)
  193.    move.l   d0,File_Handle
  194.  
  195.    move.l   File_Handle,d1
  196.    move.l   #MapBuffer,d2
  197.    move.l   #1824,d3
  198.    jsr      _LVOWrite(a6)
  199.  
  200.    move.l   File_Handle,d1
  201.    jsr      _LVOClose(a6)
  202.  
  203.    bra      GetInfoMessage
  204.  
  205. LoadFileRoutine:
  206.    movea.l  DOS_Base,a6
  207.    move.l   #VoiceFileName,d1
  208.    move.l   #MODE_OLDFILE,d2
  209.    jsr      _LVOOpen(a6)
  210.    move.l   d0,File_Handle
  211.    beq      1$
  212.  
  213.    moveq.l  #0,d0
  214.    move.l   File_Handle,d1
  215.    move.l   #MapBuffer,d2
  216.    move.l   #1824,d3
  217.    jsr      _LVORead(a6)
  218.  
  219.    cmpi.l   #-1,d0
  220.    bne      2$
  221.  
  222. 1$
  223.    movea.l  Intuition_Base,a6          ;Beep if no voice.dat
  224.    movea.l  InfoScr,a0
  225.    jsr      _LVODisplayBeep(a6)
  226.    bra      6$
  227.  
  228. 2$
  229.    movea.l  #OneLearnItem,a0           ;Erase all checkmarks
  230.    move.l   #5,d7
  231. 4$
  232.    move.w   #ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT,mi_Flags(a0)
  233.    move.l   mi_NextItem(a0),a0
  234.    dbra     d7,4$
  235.  
  236. 6$
  237.    movea.l  DOS_Base,a6
  238.    move.l   File_Handle,d1
  239.    jsr      _LVOClose(a6)
  240.  
  241. 8$
  242.    bra      GetInfoMessage
  243.  
  244. ******************************************
  245.  
  246. RecognizeRoutine:
  247.    movea.l  #VoiceWindow,a0      ;Open VoiceTask Window
  248.    move.l   InfoScr,nw_Screen(a0)
  249.    movea.l  Intuition_Base,a6
  250.    jsr      _LVOOpenWindow(a6)
  251.    move.l   d0,VoiceWdw          ;Intuition Window
  252.    beq      Close
  253.  
  254.    add.l    #wd_RPort,d0
  255.    move.l   d0,a0
  256.    move.l   (a0),VoiceRastPort
  257.  
  258.    movea.l  VoiceRastPort,a0
  259.    move.l   rp_BitMap(a0),VoiceBitMap
  260.    movea.l  VoiceBitMap,a0
  261.    move.l   bm_Planes(a0),VoiceBitPlane
  262.  
  263.    movea.l  #PS3SubItem,a0       ;What digitizer?
  264.    move.w   mi_Flags(a0),d0
  265.    btst     #8,d0
  266.    beq      0$
  267.    movea.l  VoiceWdw,a0
  268.    movea.l  #RecProjectMenu,a1
  269.    jsr      _LVOSetMenuStrip(a6)
  270.  
  271. 0$
  272.    movea.l  Voice_Base,a6
  273.    bsr      ChooseDigitizer
  274.  
  275.    movea.l  #ResHighSubItem,a0   ;What resolution?
  276.    move.w   mi_Flags(a0),d0
  277.    btst     #8,d0
  278.    bne      2$
  279.    move.l   #1,Resolution        ;Low
  280.    bra.s    4$
  281. 2$
  282.    move.l   #0,Resolution        ;High
  283. 4$
  284.    movea.l  #MapBuffer,a0        ;User's voice map buffer
  285.    movea.l  VoiceWdw,a1
  286.    movea.l  wd_UserPort(a1),a1   ;User's message port
  287.    move.l   #6,d0                ;Number words in vocabulary
  288.    move.l   Resolution,d1        ;Resolution
  289.    jsr      _LVOAddVoiceTask(a6)
  290.  
  291.    movea.l  Intuition_Base,a6    ;Clear Info Menu
  292.    movea.l  InfoWdw,a0
  293.    movea.l  #ProjectMenu,a1
  294.    jsr      _LVOClearMenuStrip(a6)
  295.  
  296. VoicePause:
  297.    movea.l  _AbsExecBase,a6      ;Wait IntuiMessages
  298.    movea.l  VoiceWdw,a0          ;or Message from VoiceTask
  299.    movea.l  wd_UserPort(a0),a0
  300.    move.b   MP_SIGBIT(a0),d1
  301.    moveq.l  #1,d0
  302.    lsl.l    d1,d0
  303.    jsr      _LVOWait(a6)
  304.  
  305. GetVoiceMessage:
  306.    movea.l  _AbsExecBase,a6
  307.    movea.l  VoiceWdw,a0
  308.    movea.l  wd_UserPort(a0),a0
  309.    jsr      _LVOGetMsg(a6)
  310.    move.l   d0,IDCMPMessage
  311.    beq      VoicePause
  312.  
  313.    movea.l  IDCMPMessage,a0
  314.    move.l   im_Class(a0),MessageClass
  315.    move.w   im_Code(a0),MessageCode
  316.  
  317.    cmp.l    #0,MessageClass      ;A Reply from VoiceTask?
  318.    beq      ReceiveVoiceMsg
  319.  
  320.    movea.l  _AbsExecBase,a6      ;Reply if not from VoiceTask
  321.    movea.l  IDCMPMessage,a1
  322.    jsr      _LVOReplyMsg(a6)
  323.  
  324.    cmpi.l   #CLOSEWINDOW,MessageClass     ;Close and Exit?
  325.    beq      CloseVoiceTask
  326.  
  327.    cmpi.l   #MENUPICK,MessageClass
  328.    bne      GetVoiceMessage
  329.  
  330.    moveq.l  #0,d0                ;Menu Selected
  331.    move.w   MessageCode,d0
  332.    move.w   #5,d1
  333.    lsr.w    d1,d0
  334.    and.w    #$3F,d0
  335.    move.w   d0,ItemNumber
  336.  
  337.    cmpi.w   #0,ItemNumber        ;Volume Up?
  338.    bne      2$
  339.    movea.l  Voice_Base,a6
  340.    jsr      _LVOGainUp(a6)
  341.    bra      GetVoiceMessage
  342.  
  343. 2$
  344.    cmpi.w   #1,ItemNumber        ;Volume Down?
  345.    bne      4$
  346.    movea.l  Voice_Base,a6
  347.    jsr      _LVOGainDown(a6)
  348.    bra      GetVoiceMessage
  349.  
  350. 4$
  351.    cmpi.w   #2,ItemNumber        ;Quit?
  352.    bne      GetVoiceMessage
  353.  
  354. CloseVoiceTask:
  355.    movea.l  Voice_Base,a6        ;Remove Voice Task
  356.    jsr      _LVORemVoiceTask(a6)
  357.  
  358.    movea.l  Intuition_Base,a6
  359.    movea.l  VoiceWdw,a0
  360.    jsr      _LVOCloseWindow(a6)
  361.  
  362.    movea.l  Intuition_Base,a6    ;Set Info Menu
  363.    movea.l  InfoWdw,a0
  364.    movea.l  #ProjectMenu,a1
  365.    jsr      _LVOSetMenuStrip(a6)
  366.  
  367.    bra      GetInfoMessage
  368.  
  369. ReceiveVoiceMsg:                 ;Process Message From VoiceTask
  370.    move.w   MessageCode,d7
  371.  
  372.    btst     #15,d7               ;Match Error?
  373.    beq      MatchFound
  374.  
  375.    movea.l  Graphics_Base,a6
  376.    movea.l  VoiceRastPort,a1
  377.    move.l   #24,d0
  378.    move.l   #60,d1
  379.    jsr      _LVOMove(a6)
  380.  
  381.    movea.l  VoiceRastPort,a1
  382.    move.l   #2,d0
  383.    jsr      _LVOSetAPen(a6)
  384.  
  385.    cmpi.w   #-1,d7               ;No Matches?
  386.    bne.s    2$
  387.    movea.l  Graphics_Base,a6
  388.    movea.l  VoiceRastPort,a1
  389.    movea.l  #NegMatchWord,a0
  390.    move.l   #9,d0
  391.    jsr      _LVOText(a6)
  392.    bra      EndRec
  393.  
  394. 2$
  395.    cmpi.w   #-2,d7               ;Clip?
  396.    bne.s    4$
  397.    movea.l  Graphics_Base,a6
  398.    movea.l  VoiceRastPort,a1
  399.    movea.l  #ClipWord,a0
  400.    move.l   #9,d0
  401.    jsr      _LVOText(a6)
  402.    bra      EndRec
  403.  
  404. 4$
  405.    cmpi.w   #-3,d7               ;Low Volume?
  406.    bne      6$
  407.    movea.l  Graphics_Base,a6
  408.    movea.l  VoiceRastPort,a1
  409.    movea.l  #LowVolWord,a0
  410.    move.l   #9,d0
  411.    jsr      _LVOText(a6)
  412.    bra      EndRec
  413.  
  414. 6$
  415.    cmpi.w   #-4,d7               ;Noisy?
  416.    bne      GetVoiceMessage
  417.    movea.l  Graphics_Base,a6
  418.    movea.l  VoiceRastPort,a1
  419.    movea.l  #NoiseWord,a0
  420.    move.l   #9,d0
  421.    jsr      _LVOText(a6)
  422.    bra      EndRec
  423.  
  424. MatchFound:
  425.    bsr      PlotMap              ;Plot Word Map
  426.  
  427.    movea.l  Graphics_Base,a6
  428.    movea.l  VoiceRastPort,a1
  429.    move.l   #24,d0
  430.    move.l   #60,d1
  431.    jsr      _LVOMove(a6)
  432.  
  433.    movea.l  VoiceRastPort,a1
  434.    move.l   #1,d0
  435.    jsr      _LVOSetAPen(a6)
  436.  
  437.    movea.l  Graphics_Base,a6     ;Write recognized word
  438.    movea.l  VoiceRastPort,a1
  439.    movea.l  #MapBuffer,a0
  440.    move.w   MessageCode,d5
  441.    mulu     #304,d5              ;304 bytes for each map in sequence
  442.    adda.l   d5,a0
  443.    move.l   #9,d0
  444.    jsr      _LVOText(a6)
  445.  
  446.    movea.l  #SayOnSubItem,a0     ;Say On?
  447.    move.w   mi_Flags(a0),d0
  448.    btst     #8,d0
  449.    beq      EndRec
  450.  
  451.    movea.l  #SayString,a0        ;Load Say String
  452.    adda.l   #18,a0
  453.    movea.l  #MapBuffer,a1
  454.    move.w   MessageCode,d0
  455.    mulu     #304,d0              ;304 bytes for each map in sequence
  456.    adda.l   d0,a1
  457.    move.l   (a1)+,(a0)+          ;Insert Say String
  458.    move.l   (a1)+,(a0)+
  459.    move.l   (a1)+,(a0)+
  460.  
  461.    movea.l  DOS_Base,a6          ;Say
  462.    move.l   #SayString,d1
  463.    moveq.l  #0,d2
  464.    move.l    NIL_Handle,d3
  465.    jsr      _LVOExecute(a6)
  466.  
  467. EndRec:
  468.    movea.l  _AbsExecBase,a6      ;Now Reply to VoiceTask
  469.    movea.l  IDCMPMessage,a1      ;in order to listen for
  470.    jsr      _LVOReplyMsg(a6)     ;the next word.
  471.  
  472.    bra      GetVoiceMessage      ;Return and wait for message
  473.  
  474. ******************************************
  475.  
  476. LearnRoutine:
  477.    movea.l  Voice_Base,a6
  478.    bsr      ChooseDigitizer
  479.  
  480.    movea.l  #MapBuffer,a0              ;MapBuffer address in a0
  481.    movea.l  #WordList,a1               ;Start of Word List
  482.    move.w   ItemNumber,d0              ;Sequence Number of Word
  483.    lsl.w    #4,d0                      ;16 bytes per word
  484.    adda.w   d0,a1                      ;ASCII text string in a1
  485.  
  486.    movea.l  InfoScr,a2                 ;Screen for Learn Window
  487.    move.w   ItemNumber,d0              ;Sequence Number of Word
  488.    move.l   #130,d1                    ;X Position of Learn Window
  489.    move.l   #40,d2                     ;Y Position of Learn Window
  490.    jsr      _LVOLearn(a6)
  491.  
  492.    cmpi.l   #0,d0                      ;Intentionally Cancelled?
  493.    bne      GetInfoMessage
  494.  
  495.    movea.l  #OneLearnItem,a0           ;If Cancelled, erase checkmark
  496.    move.w   ItemNumber,d0
  497.    subq.w   #1,d0
  498. 2$
  499.    cmpi.w   #-1,d0
  500.    beq      4$
  501.    move.l   mi_NextItem(a0),a0
  502.    subq.w   #1,d0
  503.    bra.s    2$
  504. 4$
  505.    move.w   #ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT,mi_Flags(a0)
  506.  
  507.    bra      GetInfoMessage
  508.  
  509. *********** Close and Exit ****************
  510.  
  511. Close:
  512.    movea.l  Intuition_Base,a6
  513.    movea.l  InfoWdw,a0
  514.    jsr      _LVOCloseWindow(a6)
  515.  
  516. Close4:
  517.    movea.l  Intuition_Base,a6
  518.    movea.l  InfoScr,a0
  519.    jsr      _LVOCloseScreen(a6)
  520.  
  521. Close8:                                ;Close Libraries
  522.    movea.l  _AbsExecBase,a6
  523.    movea.l  Voice_Base,a1
  524.    jsr      _LVOCloseLibrary(a6)
  525.  
  526. Close10:
  527.    movea.l  _AbsExecBase,a6
  528.    movea.l  Graphics_Base,a1
  529.    jsr      _LVOCloseLibrary(a6)
  530.  
  531. Close20:
  532.    movea.l  _AbsExecBase,a6
  533.    movea.l  Intuition_Base,a1
  534.    jsr      _LVOCloseLibrary(a6)
  535.  
  536. Close30:
  537.    movea.l  DOS_Base,a6
  538.    move.l   NIL_Handle,d1
  539.    jsr      _LVOClose(a6)
  540.  
  541. Close40:
  542.    movea.l  _AbsExecBase,a6
  543.    movea.l  DOS_Base,a1
  544.    jsr      _LVOCloseLibrary(a6)
  545.  
  546. Close50:
  547.  
  548.    rts
  549.  
  550. ************ SubRoutines *****************
  551.  
  552. ChooseDigitizer:
  553.    movea.l  #PS3SubItem,a0       ;What digitizer?
  554.    move.w   mi_Flags(a0),d0
  555.    btst     #8,d0
  556.    beq      2$
  557.    moveq.l  #0,d0                ;PS3 Chosen
  558.    bra.s    6$
  559. 2$
  560.    movea.l  #SMSubItem,a0
  561.    move.w   mi_Flags(a0),d0
  562.    btst     #8,d0
  563.    beq      4$
  564.    moveq.l  #1,d0                ;SoundMaster Chosen
  565.    bra.s    6$
  566. 4$
  567.    moveq.l  #2,d0                ;Generic Chosen
  568. 6$
  569.    jsr      _LVOPickSampler(a6)
  570.  
  571.    rts
  572.  
  573. **************** Plot Map ***************
  574.  
  575. PlotMap:
  576.    movem.l  d2-d7/a4-a5,-(a7)
  577.  
  578.    movea.l  Voice_Base,a6        ;Find Map Address
  579.    jsr      _LVORecMapAddress(a6)
  580.    move.l   d0,a5
  581.  
  582.    move.w   #20,d0               ;Starting X in d7
  583.    movea.l  VoiceWdw,a0
  584.    add.w    wd_LeftEdge(a0),d0
  585.    ext.l    d0
  586.    move.l   d0,d7
  587.  
  588.    move.l   #71,d5               ;Loop counter (72 frequency Points)
  589. PMLoop:
  590.    move.w   #18,d0               ;Starting Y in d6
  591.    movea.l  VoiceWdw,a0
  592.    add.w    wd_TopEdge(a0),d0
  593.    ext.l    d0
  594.    move.l   d0,d6
  595.  
  596.    move.l   (a5)+,d3             ;32 bit word from map
  597.  
  598.    move.l   d7,d2
  599.    divu     #8,d2                ;X/8 Bytes
  600.  
  601.    move.l   #31,d4               ;Loop counter (32 bits per frequency)
  602. PFLoop:
  603.    move.l   d6,d0
  604.    mulu     #80,d0               ;Y*80 Bytes per line
  605.  
  606.    add.w    d2,d0                ;Byte Position in d0
  607.  
  608.    move.l   d2,d1
  609.    swap     d1                   ;7 - (Remainder of X/8)
  610.    sub.w    #7,d1
  611.    neg.w    d1                   ;Bit Position in d1
  612.  
  613.    movea.l  VoiceBitPlane,a4
  614.    btst     d4,d3
  615.    beq      10$
  616.    bset     d1,0(a4,d0.w)
  617.    bra.s    12$
  618. 10$
  619.    bclr     d1,0(a4,d0.w)
  620. 12$
  621.    addq.w   #1,d6
  622.    dbra     d4,PFLoop
  623.  
  624.    addq.l   #1,d7
  625.    dbra     d5,PMLoop
  626.  
  627.    movem.l  (a7)+,d2-d7/a4-a5
  628.    rts
  629.  
  630. ************** Info Text *****************
  631.  
  632. WriteInfoText:
  633.    movea.l  Graphics_Base,a6
  634.    movea.l  InfoRastPort,a1
  635.    move.l   #1,d0
  636.    jsr      _LVOSetAPen(a6)
  637.  
  638.    movea.l  #InfoText,a5
  639.    move.l   #21,d7               ;Loop Counter, 22 lines
  640.    move.l   #24,d6               ;Starting X
  641.    move.l   #22,d5               ;Starting Y
  642.  
  643. WILoop:
  644.    movea.l  InfoRastPort,a1
  645.    move.l   d6,d0
  646.    move.l   d5,d1
  647.    jsr      _LVOMove(a6)
  648.  
  649.    movea.l  InfoRastPort,a1
  650.    movea.l  a5,a0
  651.    move.l   #71,d0
  652.    jsr      _LVOText(a6)
  653.  
  654.    adda.l   #72,a5
  655.    add.l    #8,d5
  656.    dbra     d7,WILoop
  657.  
  658.    rts
  659.  
  660. ***************** Data *******************
  661.  
  662.    SECTION  data,DATA
  663.  
  664. DOS_Name:
  665.    dc.b     'dos.library',0
  666.  
  667. INTUITION_Name:
  668.    dc.b     'intuition.library',0
  669.  
  670. GRAPHICS_Name:
  671.    dc.b     'graphics.library',0,0
  672.  
  673. VOICE_Name:
  674.    dc.b     'voice.library',0
  675.  
  676. VoiceFileName:
  677.    dc.b     'Voice.dat',0
  678.  
  679. NILFileName:
  680.    dc.b     'NIL:',0,0
  681.  
  682. WordList:                        ;16 bytes each
  683.    dc.b     'Peter          ',0
  684.    dc.b     'Piper          ',0
  685.    dc.b     'Picked         ',0
  686.    dc.b     'A Peck Of      ',0
  687.    dc.b     'Pickled        ',0
  688.    dc.b     'Peppers        ',0
  689.  
  690. NegMatchWord:
  691.    dc.b     'No Match ',0
  692.  
  693. LowVolWord:
  694.    dc.b     'Low Vol  ',0
  695.  
  696. ClipWord:
  697.    dc.b     'Clipping ',0
  698.  
  699. NoiseWord:
  700.    dc.b     'Noisy    ',0
  701.  
  702. SayString:
  703.    dc.b     'sys:utilities/Say              ',0
  704.  
  705. InfoScreen:
  706.    dc.w     0,0,640,200,2
  707.    dc.b     0,1
  708.    dc.w     V_HIRES,CUSTOMSCREEN!NS_EXTENDED
  709.    dc.l     MyFont,0,0,0,ScreenTagList
  710.  
  711. MyFont:
  712.    dc.l     MyFontName     ;pointer to font name
  713.    dc.w     8              ;size
  714.    dc.w     0
  715.  
  716. MyFontName:
  717.    dc.b     'topaz.font',0,0
  718.  
  719. ScreenTagList:
  720.    dc.l     SA_Pens,MyPenArray
  721.    dc.l     TAG_DONE
  722.  
  723. ScreenTitle:
  724.    dc.b     'InfoScreen',0,0
  725.  
  726. MyPenArray:
  727.    dc.w     0     ;Detail Pen
  728.    dc.w     1     ;Block Pen
  729.    dc.w     1     ;Text Pen
  730.    dc.w     2     ;Shine Pen
  731.    dc.w     1     ;Shadow Pen
  732.    dc.w     3     ;Hifill Pen
  733.    dc.w     1     ;Text over Hifill
  734.    dc.w     0     ;Background Pen
  735.    dc.w     1     ;Hilight text Pen
  736.  
  737. ******************************************
  738.  
  739. InfoWindow:
  740.    dc.w     0,0,640,200
  741.    dc.b     0,1
  742.    dc.l     CLOSEWINDOW!RAWKEY!MENUPICK
  743.    dc.l     WINDOWCLOSE!WINDOWDEPTH!WINDOWDRAG!WINDOWSIZING!ACTIVATE
  744.    dc.l     0,0,InfoWindowTitle,0,0
  745.    dc.w     320,100,0,0,CUSTOMSCREEN
  746.  
  747. InfoWindowTitle:
  748.    dc.b     '                        VoiceDemo Information',0
  749.    cnop     0,2
  750.  
  751. ******************************************
  752.  
  753. VoiceWindow:
  754.    dc.w     160,30,112,65
  755.    dc.b     0,1
  756.    dc.l     CLOSEWINDOW!MENUPICK,WINDOWCLOSE!WINDOWDRAG!ACTIVATE
  757.    dc.l     0,0,VoiceWindowTitle,0,0
  758.    dc.w     160,30,0,0,CUSTOMSCREEN
  759.  
  760. VoiceWindowTitle:
  761.    dc.b     'VoiceWdw ',0
  762.    cnop     0,2
  763.  
  764. Colors:
  765.    dc.w     $0999,$0000,$0eee,$0679    ;gray, black, white, blue
  766.  
  767. ************ Project Menu ****************
  768.  
  769. ProjectMenu:
  770.    dc.l     LearnMenu
  771.    dc.w     5,0,70,0,MENUENABLED
  772.    dc.l     ProjectMenuTitle,SaveVoiceFileItem
  773.    dc.w     0,0,0,0
  774.  
  775. ProjectMenuTitle:
  776.    dc.b     'PROJECT',0
  777.  
  778. SaveVoiceFileItem:
  779.    dc.l     LoadVoiceFileItem
  780.    dc.w     0,0,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  781.    dc.l     0,SaveVoiceFileItemText,0,0,0
  782.  
  783. SaveVoiceFileItemText:
  784.    dc.b     0,1,RP_JAM1,0
  785.    dc.w     0,0
  786.    dc.l     0,SaveVoiceFileItemTitle,0
  787.  
  788. SaveVoiceFileItemTitle:
  789.    dc.b     'Save Voice File',0
  790.  
  791. LoadVoiceFileItem:
  792.    dc.l     RecognizeItem
  793.    dc.w     0,10,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  794.    dc.l     0,LoadVoiceFileItemText,0,0,0
  795.  
  796. LoadVoiceFileItemText:
  797.    dc.b     0,1,RP_JAM1,0
  798.    dc.w     0,0
  799.    dc.l     0,LoadVoiceFileItemTitle,0
  800.  
  801. LoadVoiceFileItemTitle:
  802.    dc.b     'Load Voice File',0
  803.    cnop     0,2
  804.  
  805. RecognizeItem:
  806.    dc.l     QuitItem
  807.    dc.w     0,20,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  808.    dc.l     0,RecognizeItemText,0,0,0
  809.  
  810. RecognizeItemText:
  811.    dc.b     0,1,RP_JAM1,0
  812.    dc.w     0,0
  813.    dc.l     0,RecognizeItemTitle,0
  814.  
  815. RecognizeItemTitle:
  816.    dc.b     'Recognize Voice',0
  817.  
  818. QuitItem:
  819.    dc.l     0
  820.    dc.w     0,30,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  821.    dc.l     0,QuitItemText,0,0,0
  822.  
  823. QuitItemText:
  824.    dc.b     0,1,RP_JAM1,0
  825.    dc.w     0,0
  826.    dc.l     0,QuitItemTitle,0
  827.  
  828. QuitItemTitle:
  829.    dc.b     'Quit',0,0
  830.  
  831. ************ Learn Menu ******************
  832.  
  833. LearnMenu:
  834.    dc.l     OptionMenu
  835.    dc.w     120,0,60,0,MENUENABLED
  836.    dc.l     LearnMenuTitle,OneLearnItem
  837.    dc.w     0,0,0,0
  838.  
  839. LearnMenuTitle:
  840.    dc.b     'LEARN',0
  841.  
  842. OneLearnItem:
  843.    dc.l     TwoLearnItem
  844.    dc.w     0,0,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  845.    dc.l     0,OneLearnItemText,0,0,0
  846.  
  847. OneLearnItemText:
  848.    dc.b     0,1,RP_JAM1,0
  849.    dc.w     CHECKWIDTH,0
  850.    dc.l     0,OneLearnItemTitle,0
  851.  
  852. OneLearnItemTitle:
  853.    dc.b     '"Peter"',0
  854.  
  855. TwoLearnItem:
  856.    dc.l     ThreeLearnItem
  857.    dc.w     0,10,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  858.    dc.l     0,TwoLearnItemText,0,0,0
  859.  
  860. TwoLearnItemText:
  861.    dc.b     0,1,RP_JAM1,0
  862.    dc.w     CHECKWIDTH,0
  863.    dc.l     0,TwoLearnItemTitle,0
  864.  
  865. TwoLearnItemTitle:
  866.    dc.b     '"Piper"',0
  867.  
  868. ThreeLearnItem:
  869.    dc.l     FourLearnItem
  870.    dc.w     0,20,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  871.    dc.l     0,ThreeLearnItemText,0,0,0
  872.  
  873. ThreeLearnItemText:
  874.    dc.b     0,1,RP_JAM1,0
  875.    dc.w     CHECKWIDTH,0
  876.    dc.l     0,ThreeLearnItemTitle,0
  877.  
  878. ThreeLearnItemTitle:
  879.    dc.b     '"Picked"',0,0
  880.  
  881. FourLearnItem:
  882.    dc.l     FiveLearnItem
  883.    dc.w     0,30,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  884.    dc.l     0,FourLearnItemText,0,0,0
  885.  
  886. FourLearnItemText:
  887.    dc.b     0,1,RP_JAM1,0
  888.    dc.w     CHECKWIDTH,0
  889.    dc.l     0,FourLearnItemTitle,0
  890.  
  891. FourLearnItemTitle:
  892.    dc.b     '"A Peck Of"',0
  893.  
  894. FiveLearnItem:
  895.    dc.l     SixLearnItem
  896.    dc.w     0,40,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  897.    dc.l     0,FiveLearnItemText,0,0,0
  898.  
  899. FiveLearnItemText:
  900.    dc.b     0,1,RP_JAM1,0
  901.    dc.w     CHECKWIDTH,0
  902.    dc.l     0,FiveLearnItemTitle,0
  903.  
  904. FiveLearnItemTitle:
  905.    dc.b     '"Pickeled"',0,0
  906.  
  907. SixLearnItem:
  908.    dc.l     0
  909.    dc.w     0,50,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  910.    dc.l     0,SixLearnItemText,0,0,0
  911.  
  912. SixLearnItemText:
  913.    dc.b     0,1,RP_JAM1,0
  914.    dc.w     CHECKWIDTH,0
  915.    dc.l     0,SixLearnItemTitle,0
  916.  
  917. SixLearnItemTitle:
  918.    dc.b     '"Peppers"',0
  919.  
  920. ************ Option Menu *****************
  921.  
  922. OptionMenu:
  923.    dc.l     0
  924.    dc.w     240,0,60,0,MENUENABLED
  925.    dc.l     OptionMenuTitle,DigitizerOptionItem
  926.    dc.w     0,0,0,0
  927.  
  928. OptionMenuTitle:
  929.    dc.b     'OPTIONS',0
  930.  
  931. *************************************
  932.  
  933. DigitizerOptionItem:
  934.    dc.l     ResOptionItem
  935.    dc.w     0,0,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
  936.    dc.l     0,DigitizerOptionItemText,0
  937.    dc.w     0
  938.    dc.l     PS3SubItem
  939.    dc.w     0
  940.  
  941. DigitizerOptionItemText:
  942.    dc.b     0,1,RP_JAM1,0
  943.    dc.w     0,0
  944.    dc.l     0,DigitizerOptionItemTitle,0
  945.  
  946. DigitizerOptionItemTitle:
  947.    dc.b     'Digitizer',0
  948.  
  949. PS3SubItem:
  950.    dc.l     SMSubItem
  951.    dc.w     98,4,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
  952.    dc.l     6,PS3SubItemText
  953.    dc.l     0,0,0
  954.  
  955. PS3SubItemText:
  956.    dc.b     0,1,RP_JAM1,0
  957.    dc.w     CHECKWIDTH,0
  958.    dc.l     0,PS3SubItemTitle,0
  959.  
  960. PS3SubItemTitle:
  961.    dc.b     'PerfectSound3',0
  962.  
  963. SMSubItem:
  964.    dc.l     GenSubItem
  965.    dc.w     98,14,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  966.    dc.l     5,SMSubItemText
  967.    dc.l     0,0,0
  968.  
  969. SMSubItemText:
  970.    dc.b     0,1,RP_JAM1,0
  971.    dc.w     CHECKWIDTH,0
  972.    dc.l     0,SMSubItemTitle,0
  973.  
  974. SMSubItemTitle:
  975.    dc.b     'SoundMaster',0
  976.  
  977. GenSubItem:
  978.    dc.l     0
  979.    dc.w     98,24,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  980.    dc.l     3,GenSubItemText
  981.    dc.l     0,0,0
  982.  
  983. GenSubItemText:
  984.    dc.b     0,1,RP_JAM1,0
  985.    dc.w     CHECKWIDTH,0
  986.    dc.l     0,GenSubItemTitle,0
  987.  
  988. GenSubItemTitle:
  989.    dc.b     'Generic',0
  990.  
  991. *************************************
  992.  
  993. ResOptionItem:
  994.    dc.l     SayOptionItem
  995.    dc.w     0,10,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
  996.    dc.l     0,ResOptionItemText,0
  997.    dc.w     0
  998.    dc.l     ResHighSubItem
  999.    dc.w     0
  1000.  
  1001. ResOptionItemText:
  1002.    dc.b     0,1,RP_JAM1,0
  1003.    dc.w     0,0
  1004.    dc.l     0,ResOptionItemTitle,0
  1005.  
  1006. ResOptionItemTitle:
  1007.    dc.b     'Resolution',0,0
  1008.  
  1009. ResHighSubItem:
  1010.    dc.l     ResLowSubItem
  1011.    dc.w     98,4,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  1012.    dc.l     2,ResHighSubItemText,0,0,0
  1013.  
  1014. ResHighSubItemText:
  1015.    dc.b     0,1,RP_JAM1,0
  1016.    dc.w     CHECKWIDTH,0
  1017.    dc.l     0,ResHighSubItemTitle,0
  1018.  
  1019. ResHighSubItemTitle:
  1020.    dc.b     'High',0,0
  1021.  
  1022. ResLowSubItem:
  1023.    dc.l     0
  1024.    dc.w     98,14,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
  1025.    dc.l     1,ResLowSubItemText,0,0,0
  1026.  
  1027. ResLowSubItemText:
  1028.    dc.b     0,1,RP_JAM1,0
  1029.    dc.w     CHECKWIDTH,0
  1030.    dc.l     0,ResLowSubItemTitle,0
  1031.  
  1032. ResLowSubItemTitle:
  1033.    dc.b     'Low',0
  1034.  
  1035. ******************************************
  1036.  
  1037. SayOptionItem:
  1038.    dc.l     0
  1039.    dc.w     0,20,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1040.    dc.l     0,SayOptionItemText,0
  1041.    dc.w     0
  1042.    dc.l     SayOnSubItem
  1043.    dc.w     0
  1044.  
  1045. SayOptionItemText:
  1046.    dc.b     0,1,RP_JAM1,0
  1047.    dc.w     0,0
  1048.    dc.l     0,SayOptionItemTitle,0
  1049.  
  1050. SayOptionItemTitle:
  1051.    dc.b     'Say',0
  1052.  
  1053. SayOnSubItem:
  1054.    dc.l     SayOffSubItem
  1055.    dc.w     98,4,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  1056.    dc.l     2,SayOnSubItemText
  1057.    dc.l     0,0,0
  1058.  
  1059. SayOnSubItemText:
  1060.    dc.b     0,1,RP_JAM1,0
  1061.    dc.w     CHECKWIDTH,0
  1062.    dc.l     0,SayOnSubItemTitle,0
  1063.  
  1064. SayOnSubItemTitle:
  1065.    dc.b     'On',0,0
  1066.  
  1067. SayOffSubItem:
  1068.    dc.l     0
  1069.    dc.w     98,14,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
  1070.    dc.l     1,SayOffSubItemText
  1071.    dc.l     0,0,0
  1072.  
  1073. SayOffSubItemText:
  1074.    dc.b     0,1,RP_JAM1,0
  1075.    dc.w     CHECKWIDTH,0
  1076.    dc.l     0,SayOffSubItemTitle,0
  1077.  
  1078. SayOffSubItemTitle:
  1079.    dc.b     'Off',0
  1080.  
  1081. ******** Recognize Project Menu **********
  1082.  
  1083. RecProjectMenu:
  1084.    dc.l     0
  1085.    dc.w     5,0,70,0,MENUENABLED
  1086.    dc.l     RecProjectMenuTitle,VolumeUpItem
  1087.    dc.w     0,0,0,0
  1088.  
  1089. RecProjectMenuTitle:
  1090.    dc.b     'PROJECT',0
  1091.  
  1092. VolumeUpItem:
  1093.    dc.l     VolumeDownItem
  1094.    dc.w     0,0,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1095.    dc.l     0,VolumeUpItemText,0,0,0
  1096.  
  1097. VolumeUpItemText:
  1098.    dc.b     0,1,RP_JAM1,0
  1099.    dc.w     0,0
  1100.    dc.l     0,VolumeUpItemTitle,0
  1101.  
  1102. VolumeUpItemTitle:
  1103.    dc.b     'Volume Up',0
  1104.  
  1105. VolumeDownItem:
  1106.    dc.l     RecQuitItem
  1107.    dc.w     0,10,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1108.    dc.l     0,VolumeDownItemText,0,0,0
  1109.  
  1110. VolumeDownItemText:
  1111.    dc.b     0,1,RP_JAM1,0
  1112.    dc.w     0,0
  1113.    dc.l     0,VolumeDownItemTitle,0
  1114.  
  1115. VolumeDownItemTitle:
  1116.    dc.b     'Volume Dn',0
  1117.    cnop     0,2
  1118.  
  1119. RecQuitItem:
  1120.    dc.l     0
  1121.    dc.w     0,20,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1122.    dc.l     0,RecQuitItemText,0,0,0
  1123.  
  1124. RecQuitItemText:
  1125.    dc.b     0,1,RP_JAM1,0
  1126.    dc.w     0,0
  1127.    dc.l     0,RecQuitItemTitle,0
  1128.  
  1129. RecQuitItemTitle:
  1130.    dc.b     'Quit',0
  1131.    cnop     0,2
  1132.  
  1133. *************************** Information Text  ************************************
  1134.  
  1135. InfoText:
  1136.    dc.b '      This program utilizes the PerfectSound3, SoundMaster, or Generic ',0
  1137.    dc.b 'audio digitizer and the public domain disk-based voice.library to learn',0
  1138.    dc.b 'and recognize six simple spoken phrases.  The phrases are "Peter ...   ',0
  1139.    dc.b 'Piper... Picked ... A Peck Of ... Pickled ... Peppers."                ',0
  1140.    dc.b '      First, the program must learn each phrase.  To do this, select   ',0
  1141.    dc.b 'the desired phrase from the "Learn" menu.  You will then be prompted to',0
  1142.    dc.b 'speak this phrase to produce three acceptable digital samples.  Choose ',0
  1143.    dc.b 'the "Sample" gadget to record, and the "Accept" gadget to save each of ',0
  1144.    dc.b 'the THREE REQUIRED SAMPLES for each phrase.  You may need to increase  ',0
  1145.    dc.b 'or decrease volume by moving your microphone or by choosing the        ',0
  1146.    dc.b 'appropriate volume adjustment gadget.  Speak each phrase slowly and    ',0
  1147.    dc.b 'forcefully, pronouncing each syllable distinctly.  After learning all  ',0
  1148.    dc.b 'six phrases, you may save a complete file of voice data as voice.dat.  ',0
  1149.    dc.b '      After learning is complete, you may proceed to recognize any     ',0
  1150.    dc.b 'phrase at random.  Choose "Recognize Voice" from the Project Menu to   ',0
  1151.    dc.b 'start a separate task that listens to the audio digitizer and          ',0
  1152.    dc.b 'recognizes each phrase based on an audio frequency analysis.  When a   ',0
  1153.    dc.b 'phrase is recognized, it will be spoken back to you using the Amiga    ',0
  1154.    dc.b 'speach capability.  A voice map showing a frequency range of 3200 Hz   ',0
  1155.    dc.b 'versus 3/4 second of time will also be plotted.  Digitizer volume may  ',0
  1156.    dc.b 'be changed by menu selection.  "Clipping" indicates volume is too high.',0
  1157.    dc.b '"Low Vol" indicates volume is too low.                                 ',0
  1158.    dc.b '                                                                       ',0
  1159.  
  1160. **********************************************************************************
  1161.  
  1162.    SECTION  Memory,BSS
  1163.  
  1164. DOS_Base:
  1165.    ds.l     1
  1166.  
  1167. Intuition_Base:
  1168.    ds.l     1
  1169.  
  1170. Graphics_Base:
  1171.    ds.l     1
  1172.  
  1173. Voice_Base:
  1174.    ds.l     1
  1175.  
  1176. InfoScr:
  1177.    ds.l     1
  1178.  
  1179. InfoWdw:
  1180.    ds.l     1
  1181.  
  1182. InfoRastPort:
  1183.    ds.l     1
  1184.  
  1185. InfoViewPort:
  1186.    ds.l     1
  1187.  
  1188. VoiceWdw:
  1189.    ds.l     1
  1190.  
  1191. VoiceRastPort:
  1192.    ds.l     1
  1193.  
  1194. VoiceBitMap:
  1195.    ds.l     1
  1196.  
  1197. VoiceBitPlane:
  1198.    ds.l     1
  1199.  
  1200. Resolution:
  1201.    ds.l     1
  1202.  
  1203. File_Handle:
  1204.    ds.l     1
  1205.  
  1206. NIL_Handle:
  1207.    ds.l     1
  1208.  
  1209. MessageClass
  1210.    ds.l     1
  1211.  
  1212. MessageCode:
  1213.    ds.w     1
  1214.  
  1215. IDCMPMessage:
  1216.    ds.l     1
  1217.  
  1218. MenuNumber:
  1219.    ds.w     1
  1220.  
  1221. ItemNumber:
  1222.    ds.w     1
  1223.  
  1224. MapBuffer:
  1225.    ds.b     1824  ;6 word maps, (72*4 + 16) bytes each
  1226.  
  1227.    END
  1228.