*
*  Source machine generated by GadToolsBox V2.0b
*  which is (c) Copyright 1991-1993 Jaba Development
*
*  GUI Designed by : Jesper Svennevid
*

    include 'exec/types.i'
    include 'intuition/intuition.i'
    include 'intuition/classes.i'
    include 'intuition/classusr.i'
    include 'intuition/imageclass.i'
    include 'intuition/gadgetclass.i'
    include 'libraries/gadtools.i'
    include 'graphics/displayinfo.i'
    include 'graphics/gfxbase.i'

    XREF    _GadToolsBase
    XREF    _IntuitionBase
    XREF    _GfxBase
    XREF    _SysBase

OpenScreenTagList    EQU    -612
OpenWindowTagList    EQU    -606
CloseScreen          EQU    -66
CloseWindow          EQU    -72
PrintIText           EQU    -216
LockPubScreen        EQU    -510
UnlockPubScreen      EQU    -516
SetMenuStrip         EQU    -264
ClearMenuStrip       EQU    -54
GetVisualInfoA       EQU    -126
FreeVisualInfo       EQU    -132
CreateContext        EQU    -114
CreateGadgetA        EQU    -30
GT_RefreshWindow     EQU    -84
FreeGadgets          EQU    -36
CreateMenusA         EQU    -48
LayoutMenusA         EQU    -66
FreeMenus            EQU    -54
OpenDiskFont         EQU    -30
CloseFont            EQU    -78
DrawBevelBoxA        EQU    -120
FreeClass            EQU    -714
NewObjectA           EQU    -636
DisposeObject        EQU    -642
TextLength           EQU    -54
CopyMem              EQU    -624
FindTagItem          EQU    -30
IntuiTextLength      EQU    -330
Forbid               EQU    -132
Permit               EQU    -138

GD_OpenROM                             EQU    0
GD_StartEmulator                       EQU    1
GD_ROMInfo                             EQU    2
GD_Preferences                         EQU    3
GD_About                               EQU    4
GD_Quit                                EQU    5

GD_DBRegX                              EQU    0
GD_DBRegY                              EQU    1
GD_DBRegS                              EQU    2
GD_DBRegA                              EQU    3
GD_DBRegPC                             EQU    4
GD_DBRegD                              EQU    5
GD_DBRegPB                             EQU    6
GD_DBRegDB                             EQU    7
GD_DBRegP                              EQU    8
GD_DBCurrOp                            EQU    9
GD_DBContEmulation                     EQU    10
GD_DBSingleStep                        EQU    11
GD_DBOneFrame                          EQU    12
GD_DBAbortEmulation                    EQU    13

GD_ForceMode                           EQU    0
GD_CyberGFX                            EQU    1
GD_DirectWrite                         EQU    2
GD_Speed                               EQU    3
GD_FrameSkip                           EQU    4
GD_ScreenMode                          EQU    5
GD_ForceReset                          EQU    6
GD_FastVBL                             EQU    7

SNESMenu_CNT    EQU    6
Debug_CNT    EQU    14
Prefs_CNT    EQU    8

    XDEF    Scr
    XDEF    VisualInfo
    XDEF    PubScreenName
    XDEF    SNESMenuWnd
    XDEF    DebugWnd
    XDEF    PrefsWnd
    XDEF    SNESMenuGList
    XDEF    DebugGList
    XDEF    PrefsGList
    XDEF    SNESMenuGadgets
    XDEF    DebugGadgets
    XDEF    PrefsGadgets
    XDEF    SNESMenuLeft
    XDEF    SNESMenuTop
    XDEF    SNESMenuWidth
    XDEF    SNESMenuHeight
    XDEF    DebugLeft
    XDEF    DebugTop
    XDEF    DebugWidth
    XDEF    DebugHeight
    XDEF    PrefsLeft
    XDEF    PrefsTop
    XDEF    PrefsWidth
    XDEF    PrefsHeight

Scr:
    DC.L    0
VisualInfo:
    DC.L    0
PubScreenName:
    DC.L    0
SNESMenuWnd:
    DC.L    0
DebugWnd:
    DC.L    0
PrefsWnd:
    DC.L    0
SNESMenuGList:
    DC.L    0
DebugGList:
    DC.L    0
PrefsGList:
    DC.L    0
SNESMenuGadgets:
    DCB.L    6,0
DebugGadgets:
    DCB.L    14,0
PrefsGadgets:
    DCB.L    8,0
BufNewGad:
    DC.W    0,0,0,0
    DC.L    0,0
    DC.W    0
    DC.L    0,0,0
TD:
    DC.L    TAG_DONE
NR:
    DC.L    GT_VisualInfo,$00000000,TAG_DONE
IR:
    DC.L    GT_VisualInfo,$00000000,GTBB_Recessed,1,TAG_DONE
SNESMenuLeft:
    DC.W    0
SNESMenuTop:
    DC.W    14
SNESMenuWidth:
    DC.W    331
SNESMenuHeight:
    DC.W    115
DebugLeft:
    DC.W    59
DebugTop:
    DC.W    46
DebugWidth:
    DC.W    246
DebugHeight:
    DC.W    201
PrefsLeft:
    DC.W    50
PrefsTop:
    DC.W    33
PrefsWidth:
    DC.W    256
PrefsHeight:
    DC.W    134

SNESMenuGTypes:
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND

DebugGTypes:
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    TEXT_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND
    DC.W    BUTTON_KIND

PrefsGTypes:
    DC.W    CYCLE_KIND
    DC.W    CHECKBOX_KIND
    DC.W    CHECKBOX_KIND
    DC.W    SLIDER_KIND
    DC.W    SLIDER_KIND
    DC.W    BUTTON_KIND
    DC.W    CHECKBOX_KIND
    DC.W    CHECKBOX_KIND

SNESMenuNGads:
    DC.W    -3,-13,108,16
    DC.L    OpenROMText,0
    DC.W    GD_OpenROM
    DC.L    PLACETEXT_IN,0,0
    DC.W    107,-13,108,16
    DC.L    StartEmulatorText,0
    DC.W    GD_StartEmulator
    DC.L    PLACETEXT_IN,0,0
    DC.W    217,-13,108,16
    DC.L    ROMInfoText,0
    DC.W    GD_ROMInfo
    DC.L    PLACETEXT_IN,0,0
    DC.W    -3,4,108,16
    DC.L    PreferencesText,0
    DC.W    GD_Preferences
    DC.L    PLACETEXT_IN,0,0
    DC.W    107,4,108,16
    DC.L    AboutText,0
    DC.W    GD_About
    DC.L    PLACETEXT_IN,0,0
    DC.W    217,4,108,16
    DC.L    QuitText,0
    DC.W    GD_Quit
    DC.L    PLACETEXT_IN,0,0

DebugNGads:
    DC.W    181,27,50,14
    DC.L    DBRegXText,0
    DC.W    GD_DBRegX
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,44,50,14
    DC.L    DBRegYText,0
    DC.W    GD_DBRegY
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,92,50,14
    DC.L    DBRegSText,0
    DC.W    GD_DBRegS
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,11,50,14
    DC.L    DBRegAText,0
    DC.W    GD_DBRegA
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,157,50,14
    DC.L    DBRegPCText,0
    DC.W    GD_DBRegPC
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,60,50,14
    DC.L    DBRegDText,0
    DC.W    GD_DBRegD
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,125,50,14
    DC.L    DBRegPBText,0
    DC.W    GD_DBRegPB
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,141,50,14
    DC.L    DBRegDBText,0
    DC.W    GD_DBRegDB
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,76,50,14
    DC.L    DBRegPText,0
    DC.W    GD_DBRegP
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    181,174,50,14
    DC.L    DBCurrOpText,0
    DC.W    GD_DBCurrOp
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    2,180,144,16
    DC.L    DBContEmulationText,0
    DC.W    GD_DBContEmulation
    DC.L    PLACETEXT_IN,0,0
    DC.W    2,126,144,16
    DC.L    DBSingleStepText,0
    DC.W    GD_DBSingleStep
    DC.L    PLACETEXT_IN,0,0
    DC.W    2,144,144,16
    DC.L    DBOneFrameText,0
    DC.W    GD_DBOneFrame
    DC.L    PLACETEXT_IN,0,0
    DC.W    2,162,144,16
    DC.L    DBAbortEmulationText,0
    DC.W    GD_DBAbortEmulation
    DC.L    PLACETEXT_IN,0,0

PrefsNGads:
    DC.W    84,2,160,16
    DC.L    ForceModeText,0
    DC.W    GD_ForceMode
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    218,21,26,11
    DC.L    CyberGFXText,0
    DC.W    GD_CyberGFX
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    85,21,26,11
    DC.L    DirectWriteText,0
    DC.W    GD_DirectWrite
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    84,118,160,11
    DC.L    SpeedText,0
    DC.W    GD_Speed
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    84,104,160,11
    DC.L    FrameSkipText,0
    DC.W    GD_FrameSkip
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    84,85,160,16
    DC.L    ScreenModeText,0
    DC.W    GD_ScreenMode
    DC.L    PLACETEXT_IN,0,0
    DC.W    218,34,26,11
    DC.L    ForceResetText,0
    DC.W    GD_ForceReset
    DC.L    PLACETEXT_LEFT,0,0
    DC.W    85,34,26,11
    DC.L    FastVBLText,0
    DC.W    GD_FastVBL
    DC.L    PLACETEXT_LEFT,0,0

SNESMenuGTags:
    DC.L    TAG_DONE
    DC.L    GA_Disabled,1
    DC.L    TAG_DONE
    DC.L    GA_Disabled,1
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE


DebugGTags:
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    GTTX_Border,1
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE


PrefsGTags:
    DC.L    GTCY_Labels,ForceModeLabels
    DC.L    TAG_DONE
    DC.L    GA_Disabled,1
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    GTSL_Min,1
    DC.L    GTSL_Max,100
    DC.L    GTSL_MaxLevelLen,4
    DC.L    GTSL_LevelFormat,SpeedFormat
    DC.L    PGA_Freedom,LORIENT_HORIZ
    DC.L    GA_RelVerify,1
    DC.L    TAG_DONE
    DC.L    GTSL_Max,9
    DC.L    GTSL_MaxLevelLen,4
    DC.L    GTSL_LevelFormat,FrameSkipFormat
    DC.L    PGA_Freedom,LORIENT_HORIZ
    DC.L    GA_RelVerify,1
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE
    DC.L    TAG_DONE


SpeedFormat:
    DC.B    '%2ld',0
    CNOP     0,2

FrameSkipFormat:
    DC.B    '%1ld',0
    CNOP     0,2

OpenROMText:
    DC.B    'Open ROM...',0

StartEmulatorText:
    DC.B    'Start',0

ROMInfoText:
    DC.B    'Information',0

PreferencesText:
    DC.B    'Preferences',0

AboutText:
    DC.B    'About...',0

QuitText:
    DC.B    'Quit',0

    CNOP    0,2

DBRegXText:
    DC.B    'X',0

DBRegYText:
    DC.B    'Y',0

DBRegSText:
    DC.B    'S',0

DBRegAText:
    DC.B    'A',0

DBRegPCText:
    DC.B    'PC',0

DBRegDText:
    DC.B    'D',0

DBRegPBText:
    DC.B    'PB',0

DBRegDBText:
    DC.B    'DB',0

DBRegPText:
    DC.B    'P',0

DBCurrOpText:
    DC.B    'OP',0

DBContEmulationText:
    DC.B    'Cont. Emulation',0

DBSingleStepText:
    DC.B    'Single Step',0

DBOneFrameText:
    DC.B    'One Frame',0

DBAbortEmulationText:
    DC.B    'Abort Emulation',0

    CNOP    0,2

ForceModeText:
    DC.B    'ROM Force',0

CyberGFXText:
    DC.B    'CyberGFX',0

DirectWriteText:
    DC.B    'DWrite',0

SpeedText:
    DC.B    'Speed   ',0

FrameSkipText:
    DC.B    'Skip   ',0

ScreenModeText:
    DC.B    'Screen Mode...',0

ForceResetText:
    DC.B    'Force Reset',0

FastVBLText:
    DC.B    'Fast VBL',0

    CNOP    0,2

    XDEF    ForceModeLabels

ForceModeLabels:
    DC.L    ForceModeLab0
    DC.L    ForceModeLab1
    DC.L    ForceModeLab2
    DC.L    0

ForceModeLab0:    DC.B    'OFF',0
ForceModeLab1:    DC.B    'Force to LowROM',0
ForceModeLab2:    DC.B    'Force to HiROM',0

    CNOP    0,2

    XDEF    topaz8

topaz8:
    DC.L    topazFName8
    DC.W    8
    DC.B    $00,$00

topazFName8:
    DC.B    'topaz.font',0
    CNOP    0,2

    XDEF    SNESMenuWindowTags

SNESMenuWindowTags:
SNESMenuL:
    DC.L    WA_Left,0
SNESMenuT:
    DC.L    WA_Top,0
SNESMenuW:
    DC.L    WA_InnerWidth,0
SNESMenuH:
    DC.L    WA_InnerHeight,0
    DC.L    WA_IDCMP,BUTTONIDCMP!IDCMP_CLOSEWINDOW!IDCMP_REFRESHWINDOW
    DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!WFLG_GIMMEZEROZERO!WFLG_ACTIVATE!WFLG_RMBTRAP
SNESMenuWG:
    DC.L    WA_Gadgets,0
    DC.L    WA_Title,SNESMenuWTitle
    DC.L    WA_ScreenTitle,SNESMenuSTitle
SNESMenuSC:
    DC.L    WA_PubScreen,0
    DC.L    WA_PubScreenFallBack,1
    DC.L    TAG_DONE

SNESMenuWTitle:
    DC.B    'AmiSNESE',0
    CNOP    0,2

SNESMenuSTitle:
    DC.B    'Amiga SuperNES Emulator v0.13b Copyright © 1997-1998 Jesper Svennevid',0
    CNOP    0,2

    XDEF    DebugWindowTags

DebugWindowTags:
DebugL:
    DC.L    WA_Left,0
DebugT:
    DC.L    WA_Top,0
DebugW:
    DC.L    WA_Width,0
DebugH:
    DC.L    WA_Height,0
    DC.L    WA_IDCMP,TEXTIDCMP!BUTTONIDCMP!IDCMP_GADGETDOWN!IDCMP_INTUITICKS!IDCMP_MOUSEMOVE!IDCMP_MOUSEBUTTONS!IDCMP_CLOSEWINDOW!IDCMP_REFRESHWINDOW
    DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE!WFLG_RMBTRAP
DebugWG:
    DC.L    WA_Gadgets,0
    DC.L    WA_Title,DebugWTitle
    DC.L    WA_ScreenTitle,DebugSTitle
DebugSC:
    DC.L    WA_PubScreen,0
    DC.L    WA_AutoAdjust,1
    DC.L    WA_PubScreenFallBack,1
    DC.L    TAG_DONE

DebugWTitle:
    DC.B    'AmiSNESE Debugger',0
    CNOP    0,2

DebugSTitle:
    DC.B    'Amiga SuperNES Emulator v0.13b Copyright © 1997-1998 Jesper Svennevid',0
    CNOP    0,2

    XDEF    PrefsWindowTags

PrefsWindowTags:
PrefsL:
    DC.L    WA_Left,0
PrefsT:
    DC.L    WA_Top,0
PrefsW:
    DC.L    WA_Width,0
PrefsH:
    DC.L    WA_Height,0
    DC.L    WA_IDCMP,CYCLEIDCMP!CHECKBOXIDCMP!SLIDERIDCMP!BUTTONIDCMP!IDCMP_CLOSEWINDOW!IDCMP_REFRESHWINDOW
    DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE!WFLG_RMBTRAP
PrefsWG:
    DC.L    WA_Gadgets,0
    DC.L    WA_Title,PrefsWTitle
    DC.L    WA_ScreenTitle,PrefsSTitle
PrefsSC:
    DC.L    WA_PubScreen,0
    DC.L    WA_PubScreenFallBack,1
    DC.L    TAG_DONE

PrefsWTitle:
    DC.B    'Preferences',0
    CNOP    0,2

PrefsSTitle:
    DC.B    'Amiga SuperNES Emulator v0.13b Copyright © 1997-1998 Jesper Svennevid',0
    CNOP    0,2

    XDEF    DebugText0

DebugText0:
    DC.B    1,0
    DC.B    RP_JAM1
    DC.B    0
    DC.W    37,4
    DC.L    topaz8
    DC.L    DebugIText0
    DC.L    0

DebugIText0:
    DC.B    'Code Dump',0

    CNOP    0,2

    XDEF    SetupScreen

SetupScreen
    movem.l d1-d3/a0-a2/a6,-(sp)
    move.l  _IntuitionBase,a6
    move.l  PubScreenName,a0
    jsr     LockPubScreen(a6)
    move.l  d0,Scr
    tst.l   d0
    beq     SError
    move.l  Scr,a0
    move.l  _GadToolsBase,a6
    lea.l   TD,a1
    jsr     GetVisualInfoA(a6)
    move.l  d0,VisualInfo
    tst.l   d0
    beq     VError
    moveq   #0,d0
SDone:
    movem.l (sp)+,d1-d3/a0-a2/a6
    rts
SError:
    moveq   #1,d0
    bra.s   SDone
VError:
    moveq   #2,d0
    bra.s   SDone

    XDEF    CloseDownScreen

CloseDownScreen:
    movem.l d0-d1/a0-a1/a6,-(sp)
    move.l  _GadToolsBase,a6
    move.l  VisualInfo,a0
    cmpa.l  #0,a0
    beq.s   NoVis
    jsr     FreeVisualInfo(a6)
    move.l  #0,VisualInfo
NoVis:
    move.l  _IntuitionBase,a6
    suba.l  a0,a0
    move.l  Scr,a1
    cmpa.l  #0,a1
    beq.s   NoScr
    jsr     UnlockPubScreen(a6)
    move.l  #0,Scr
NoScr:
    movem.l (sp)+,d0-d1/a0-a1/a6
    rts

    XDEF    SNESMenuRender

SNESMenuRender:
    movem.l d0-d5/a0-a2/a6,-(sp)
    move.l  SNESMenuWnd,a0
    move.b  wd_BorderLeft(a0),d4
    ext.w   d4
    move.b  wd_BorderTop(a0),d5
    ext.w   d5
    move.l  VisualInfo,NR+4
    move.l  VisualInfo,IR+4
    move.l  _GadToolsBase,a6
    move.l  SNESMenuWnd,a0
    move.l  wd_RPort(a0),a2
    move.l  a2,a0
    lea.l   IR,a1
    move.w  #-1,d0
    add.w   d4,d0
    move.w  #22,d1
    add.w   d5,d1
    move.w  #325,d2
    move.w  #77,d3
    jsr     DrawBevelBoxA(a6)
    movem.l (sp)+,d0-d5/a0-a2/a6
    rts

    XDEF    OpenSNESMenuWindow

OpenSNESMenuWindow:
    movem.l d1-d4/a0-a4/a6,-(sp)
    move.l  Scr,a0
    moveq   #0,d3
    moveq   #0,d2
    move.b  sc_WBorLeft(a0),d2
    move.l  sc_Font(a0),a1
    move.w  ta_YSize(a1),d3
    addq.w  #1,d3
    move.b  sc_WBorTop(a0),d0
    ext.w   d0
    add.w   d0,d3
    move.l  _GadToolsBase,a6
    lea.l   SNESMenuGList,a0
    jsr     CreateContext(a6)
    move.l  d0,a3
    tst.l   d0
    beq     SNESMenuCError
    movem.w d2-d3,-(sp)
    moveq   #0,d3
    lea.l   SNESMenuGTags,a4
SNESMenuGL:
    move.l  _SysBase,a6
    lea.l   SNESMenuNGads,a0
    move.l  d3,d0
    mulu    #gng_SIZEOF,d0
    add.l   d0,a0
    lea.l   BufNewGad,a1
    moveq   #gng_SIZEOF,d0
    jsr     CopyMem(a6)
    lea.l   BufNewGad,a0
    move.l  VisualInfo,gng_VisualInfo(a0)
    move.l  #topaz8,gng_TextAttr(a0)
    move.w  gng_LeftEdge(a0),d0
    add.w   (sp),d0
    move.w  d0,gng_LeftEdge(a0)
    move.w  gng_TopEdge(a0),d0
    add.w   2(sp),d0
    move.w  d0,gng_TopEdge(a0)
    move.l  _GadToolsBase,a6
    lea.l   SNESMenuGTypes,a0
    moveq   #0,d0
    move.l  d3,d1
    asl.l   #1,d1
    add.l   d1,a0
    move.w  (a0),d0
    move.l  a3,a0
    lea.l   BufNewGad,a1
    move.l  a4,a2
    jsr     CreateGadgetA(a6)
    tst.l   d0
    bne.s    SNESMenuCOK
    movem.w (sp)+,d2-d3
    bra     SNESMenuGError
SNESMenuCOK:
    move.l  d0,a3
    move.l  d3,d0
    asl.l   #2,d0
    lea.l   SNESMenuGadgets,a0
    add.l   d0,a0
    move.l  a3,(a0)
SNESMenuTL:
    tst.l   (a4)
    beq.s   SNESMenuDN
    addq.w  #8,a4
    bra.s   SNESMenuTL
SNESMenuDN:
    addq.w  #4,a4
    addq.w  #1,d3
    cmp.w   #SNESMenu_CNT,d3
    bmi     SNESMenuGL
    movem.w (sp)+,d2-d3
    move.l  SNESMenuGList,SNESMenuWG+4
    move.l  Scr,SNESMenuSC+4
    moveq   #0,d0
    move.w  SNESMenuLeft,d0
    move.l  d0,SNESMenuL+4
    move.w  SNESMenuTop,d0
    move.l  d0,SNESMenuT+4
    move.w  SNESMenuWidth,d0
    move.l  d0,SNESMenuW+4
    move.w  SNESMenuHeight,d0
    move.l  d0,SNESMenuH+4
    move.l  _IntuitionBase,a6
    suba.l  a0,a0
    lea.l   SNESMenuWindowTags,a1
    jsr     OpenWindowTagList(a6)
    move.l  d0,SNESMenuWnd
    tst.l   d0
    beq     SNESMenuWError
    move.l  _GadToolsBase,a6
    move.l  SNESMenuWnd,a0
    suba.l  a1,a1
    jsr     GT_RefreshWindow(a6)
    jsr     SNESMenuRender
    moveq   #0,d0
SNESMenuDone:
    movem.l (sp)+,d1-d4/a0-a4/a6
    rts
SNESMenuCError:
    moveq   #1,d0
    bra.s   SNESMenuDone
SNESMenuGError:
    moveq   #2,d0
    bra.s   SNESMenuDone
SNESMenuWError:
    moveq   #4,d0
    bra.s   SNESMenuDone

    XDEF    CloseSNESMenuWindow

CloseSNESMenuWindow:
    movem.l d0-d1/a0-a2/a6,-(sp)
    move.l  _IntuitionBase,a6
    move.l  SNESMenuWnd,a0
    cmpa.l  #0,a0
    beq     SNESMenuNWnd
    jsr     CloseWindow(a6)
    move.l  #0,SNESMenuWnd
SNESMenuNWnd:
    move.l  _GadToolsBase,a6
    move.l  SNESMenuGList,a0
    cmpa.l  #0,a0
    beq     SNESMenuNGad
    jsr     FreeGadgets(a6)
    move.l  #0,SNESMenuGList
SNESMenuNGad:
    movem.l (sp)+,d0-d1/a0-a2/a6
    rts

    XDEF    DebugRender

DebugRender:
    movem.l d0-d5/a0-a2/a6,-(sp)
    move.l  DebugWnd,a0
    move.b  wd_BorderLeft(a0),d4
    ext.w   d4
    move.b  wd_BorderTop(a0),d5
    ext.w   d5
    move.l  VisualInfo,NR+4
    move.l  VisualInfo,IR+4
    move.l  _GadToolsBase,a6
    move.l  DebugWnd,a0
    move.l  wd_RPort(a0),a2
    move.l  a2,a0
    lea.l   IR,a1
    move.w  #153,d0
    add.w   d4,d0
    move.w  #5,d1
    add.w   d5,d1
    move.w  #82,d2
    move.w  #189,d3
    jsr     DrawBevelBoxA(a6)
    move.l  a2,a0
    lea.l   NR,a1
    move.w  #2,d0
    add.w   d4,d0
    move.w  #15,d1
    add.w   d5,d1
    move.w  #144,d2
    move.w  #106,d3
    jsr     DrawBevelBoxA(a6)
    move.l  _IntuitionBase,a6
    move.l  DebugWnd,a0
    move.l  wd_RPort(a0),a0
    lea.l   DebugText0,a1
    move.l  d4,d0
    move.l  d5,d1
    jsr     PrintIText(a6)
    movem.l (sp)+,d0-d5/a0-a2/a6
    rts

    XDEF    OpenDebugWindow

OpenDebugWindow:
    movem.l d1-d4/a0-a4/a6,-(sp)
    move.l  Scr,a0
    moveq   #0,d3
    moveq   #0,d2
    move.b  sc_WBorLeft(a0),d2
    move.l  sc_Font(a0),a1
    move.w  ta_YSize(a1),d3
    addq.w  #1,d3
    move.b  sc_WBorTop(a0),d0
    ext.w   d0
    add.w   d0,d3
    move.l  _GadToolsBase,a6
    lea.l   DebugGList,a0
    jsr     CreateContext(a6)
    move.l  d0,a3
    tst.l   d0
    beq     DebugCError
    movem.w d2-d3,-(sp)
    moveq   #0,d3
    lea.l   DebugGTags,a4
DebugGL:
    move.l  _SysBase,a6
    lea.l   DebugNGads,a0
    move.l  d3,d0
    mulu    #gng_SIZEOF,d0
    add.l   d0,a0
    lea.l   BufNewGad,a1
    moveq   #gng_SIZEOF,d0
    jsr     CopyMem(a6)
    lea.l   BufNewGad,a0
    move.l  VisualInfo,gng_VisualInfo(a0)
    move.l  #topaz8,gng_TextAttr(a0)
    move.w  gng_LeftEdge(a0),d0
    add.w   (sp),d0
    move.w  d0,gng_LeftEdge(a0)
    move.w  gng_TopEdge(a0),d0
    add.w   2(sp),d0
    move.w  d0,gng_TopEdge(a0)
    move.l  _GadToolsBase,a6
    lea.l   DebugGTypes,a0
    moveq   #0,d0
    move.l  d3,d1
    asl.l   #1,d1
    add.l   d1,a0
    move.w  (a0),d0
    move.l  a3,a0
    lea.l   BufNewGad,a1
    move.l  a4,a2
    jsr     CreateGadgetA(a6)
    tst.l   d0
    bne.s    DebugCOK
    movem.w (sp)+,d2-d3
    bra     DebugGError
DebugCOK:
    move.l  d0,a3
    move.l  d3,d0
    asl.l   #2,d0
    lea.l   DebugGadgets,a0
    add.l   d0,a0
    move.l  a3,(a0)
DebugTL:
    tst.l   (a4)
    beq.s   DebugDN
    addq.w  #8,a4
    bra.s   DebugTL
DebugDN:
    addq.w  #4,a4
    addq.w  #1,d3
    cmp.w   #Debug_CNT,d3
    bmi     DebugGL
    movem.w (sp)+,d2-d3
    move.l  DebugGList,DebugWG+4
    move.l  Scr,DebugSC+4
    moveq   #0,d0
    move.w  DebugLeft,d0
    move.l  d0,DebugL+4
    move.w  DebugTop,d0
    move.l  d0,DebugT+4
    move.w  DebugWidth,d0
    move.l  d0,DebugW+4
    move.w  DebugHeight,d0
    add.w   d3,d0
    move.l  d0,DebugH+4
    move.l  _IntuitionBase,a6
    suba.l  a0,a0
    lea.l   DebugWindowTags,a1
    jsr     OpenWindowTagList(a6)
    move.l  d0,DebugWnd
    tst.l   d0
    beq     DebugWError
    move.l  _GadToolsBase,a6
    move.l  DebugWnd,a0
    suba.l  a1,a1
    jsr     GT_RefreshWindow(a6)
    jsr     DebugRender
    moveq   #0,d0
DebugDone:
    movem.l (sp)+,d1-d4/a0-a4/a6
    rts
DebugCError:
    moveq   #1,d0
    bra.s   DebugDone
DebugGError:
    moveq   #2,d0
    bra.s   DebugDone
DebugWError:
    moveq   #4,d0
    bra.s   DebugDone

    XDEF    CloseDebugWindow

CloseDebugWindow:
    movem.l d0-d1/a0-a2/a6,-(sp)
    move.l  _IntuitionBase,a6
    move.l  DebugWnd,a0
    cmpa.l  #0,a0
    beq     DebugNWnd
    jsr     CloseWindow(a6)
    move.l  #0,DebugWnd
DebugNWnd:
    move.l  _GadToolsBase,a6
    move.l  DebugGList,a0
    cmpa.l  #0,a0
    beq     DebugNGad
    jsr     FreeGadgets(a6)
    move.l  #0,DebugGList
DebugNGad:
    movem.l (sp)+,d0-d1/a0-a2/a6
    rts

    XDEF    OpenPrefsWindow

OpenPrefsWindow:
    movem.l d1-d4/a0-a4/a6,-(sp)
    move.l  Scr,a0
    moveq   #0,d3
    moveq   #0,d2
    move.b  sc_WBorLeft(a0),d2
    move.l  sc_Font(a0),a1
    move.w  ta_YSize(a1),d3
    addq.w  #1,d3
    move.b  sc_WBorTop(a0),d0
    ext.w   d0
    add.w   d0,d3
    move.l  _GadToolsBase,a6
    lea.l   PrefsGList,a0
    jsr     CreateContext(a6)
    move.l  d0,a3
    tst.l   d0
    beq     PrefsCError
    movem.w d2-d3,-(sp)
    moveq   #0,d3
    lea.l   PrefsGTags,a4
PrefsGL:
    move.l  _SysBase,a6
    lea.l   PrefsNGads,a0
    move.l  d3,d0
    mulu    #gng_SIZEOF,d0
    add.l   d0,a0
    lea.l   BufNewGad,a1
    moveq   #gng_SIZEOF,d0
    jsr     CopyMem(a6)
    lea.l   BufNewGad,a0
    move.l  VisualInfo,gng_VisualInfo(a0)
    move.l  #topaz8,gng_TextAttr(a0)
    move.w  gng_LeftEdge(a0),d0
    add.w   (sp),d0
    move.w  d0,gng_LeftEdge(a0)
    move.w  gng_TopEdge(a0),d0
    add.w   2(sp),d0
    move.w  d0,gng_TopEdge(a0)
    move.l  _GadToolsBase,a6
    lea.l   PrefsGTypes,a0
    moveq   #0,d0
    move.l  d3,d1
    asl.l   #1,d1
    add.l   d1,a0
    move.w  (a0),d0
    move.l  a3,a0
    lea.l   BufNewGad,a1
    move.l  a4,a2
    jsr     CreateGadgetA(a6)
    tst.l   d0
    bne.s    PrefsCOK
    movem.w (sp)+,d2-d3
    bra     PrefsGError
PrefsCOK:
    move.l  d0,a3
    move.l  d3,d0
    asl.l   #2,d0
    lea.l   PrefsGadgets,a0
    add.l   d0,a0
    move.l  a3,(a0)
PrefsTL:
    tst.l   (a4)
    beq.s   PrefsDN
    addq.w  #8,a4
    bra.s   PrefsTL
PrefsDN:
    addq.w  #4,a4
    addq.w  #1,d3
    cmp.w   #Prefs_CNT,d3
    bmi     PrefsGL
    movem.w (sp)+,d2-d3
    move.l  PrefsGList,PrefsWG+4
    move.l  Scr,PrefsSC+4
    moveq   #0,d0
    move.w  PrefsLeft,d0
    move.l  d0,PrefsL+4
    move.w  PrefsTop,d0
    move.l  d0,PrefsT+4
    move.w  PrefsWidth,d0
    move.l  d0,PrefsW+4
    move.w  PrefsHeight,d0
    add.w   d3,d0
    move.l  d0,PrefsH+4
    move.l  _IntuitionBase,a6
    suba.l  a0,a0
    lea.l   PrefsWindowTags,a1
    jsr     OpenWindowTagList(a6)
    move.l  d0,PrefsWnd
    tst.l   d0
    beq     PrefsWError
    move.l  _GadToolsBase,a6
    move.l  PrefsWnd,a0
    suba.l  a1,a1
    jsr     GT_RefreshWindow(a6)
    moveq   #0,d0
PrefsDone:
    movem.l (sp)+,d1-d4/a0-a4/a6
    rts
PrefsCError:
    moveq   #1,d0
    bra.s   PrefsDone
PrefsGError:
    moveq   #2,d0
    bra.s   PrefsDone
PrefsWError:
    moveq   #4,d0
    bra.s   PrefsDone

    XDEF    ClosePrefsWindow

ClosePrefsWindow:
    movem.l d0-d1/a0-a2/a6,-(sp)
    move.l  _IntuitionBase,a6
    move.l  PrefsWnd,a0
    cmpa.l  #0,a0
    beq     PrefsNWnd
    jsr     CloseWindow(a6)
    move.l  #0,PrefsWnd
PrefsNWnd:
    move.l  _GadToolsBase,a6
    move.l  PrefsGList,a0
    cmpa.l  #0,a0
    beq     PrefsNGad
    jsr     FreeGadgets(a6)
    move.l  #0,PrefsGList
PrefsNGad:
    movem.l (sp)+,d0-d1/a0-a2/a6
    rts


    end
