home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The AGA Experience 2
/
agavol2.iso
/
software
/
utilities
/
emulation
/
frodo
/
src
/
main.asm
< prev
next >
Wrap
Assembly Source File
|
1996-01-29
|
19KB
|
1,095 lines
*
* Main.asm - Hauptprogramm des C64-Emulators/Einstellungsfenster
*
* Copyright (C) 1994-1996 by Christian Bauer
*
MACHINE 68020
INCLUDE "exec/types.i"
INCLUDE "exec/macros.i"
INCLUDE "exec/memory.i"
INCLUDE "exec/execbase.i"
INCLUDE "dos/dos.i"
INCLUDE "dos/dosextens.i"
INCLUDE "intuition/intuition.i"
INCLUDE "intuition/intuitionbase.i"
INCLUDE "libraries/locale.i"
INCLUDE "workbench/startup.i"
INCLUDE "devices/timer.i"
INCLUDE "Frodo_rev.i"
CATCOMP_NUMBERS = 1
INCLUDE "LocStrings.i"
XREF _SysBase ;AStartup
XREF _DOSBase
XREF _WBenchMsg
XDEF _main
XDEF _UtilityBase
XDEF _IntuitionBase
XDEF _GfxBase
XDEF _GadToolsBase
XDEF _AslBase
XDEF _IconBase
XDEF _CyberGfxBase
XDEF _CiaBase
XDEF _MiscBase
XDEF _SID6581Base
XDEF _PlaySidBase
XDEF _TimerBase
XDEF MainTask
XDEF _ShowPrefs
XDEF Random
XDEF ResetC64
XREF _DoThePrefs ;Prefs.c
XREF _LocalizePrefs
XREF _OpenPrefs
XREF _OpenDisplay ;Display.c
XREF _CloseDisplay
XREF _EmulToBack
XREF _EmulToFront
XREF _EventLoop
XREF _LocalizeDisplay
XDEF TheLocale ;Strings.o
XREF GetString
XREF TheRAM ;6510.asm
XREF TheBasic
XREF TheKernal
XREF TheChar
XREF TheColor
XREF Init6510
XREF Reset6510
XREF Start6510
XREF Stop6510
XREF Wait6510
XREF Pause6510
XREF Resume6510
XREF Localize6510
XREF Reset6526 ;6526.asm
XREF ChangedKeys
XREF CIACycles
XREF Joystick1On
XREF Joystick2On
XREF JoystickSwap
XREF KeyboardYZ
XREF Init6569 ;6569.asm
XREF OpenGraphics
XREF DisplayID
XREF ScreenType
XREF NormalCycles
XREF BadLineCycles
XREF SpritesOn
XREF Collisions
XREF Overscan
XREF SkipLatch
XREF LimitSpeed
XREF DirectVideo
XREF Reset6581 ;6581.asm
XREF InitSID
XREF ExitSID
XREF ChangedSIDPrefs
XREF PauseSound
XREF ResumeSound
XREF SIDType
XREF InitIEC ;IEC.asm
XREF ExitIEC
XREF ChangedIECPrefs
XREF Dir8
XREF Dir9
XREF Dir10
XREF Dir11
XREF Drv8Type
XREF Drv9Type
XREF Drv10Type
XREF Drv11Type
XREF OtherIEC
XREF MapSlash
XDEF PDir8 ;Für ChangedIECPrefs
XDEF PDir9
XDEF PDir10
XDEF PDir11
XDEF PDrv8Type
XDEF PDrv9Type
XDEF PDrv10Type
XDEF PDrv11Type
XDEF _IsDraco
SECTION "text",CODE
**
** Definitionen
**
; Laufwerkstypen
DRVTYPE_DIR = 0
DRVTYPE_D64 = 1
DRVTYPE_IEC = 2
**
** Hauptprogramm
**
MACHINE 68000
*
* Libraries öffnen
*
; Task holen
_main move.l _SysBase,a6
sub.l a1,a1
JSRLIB FindTask
move.l d0,MainTask
; Libraries öffnen
moveq #37,d0
lea UtilityName,a1
JSRLIB OpenLibrary
move.l d0,_UtilityBase
beq NoUtility
moveq #37,d0
lea IntuiName,a1
JSRLIB OpenLibrary
move.l d0,_IntuitionBase
beq NoIntui
moveq #37,d0
lea GfxName,a1
JSRLIB OpenLibrary
move.l d0,_GfxBase
beq NoGfx
moveq #37,d0
lea GadToolsName,a1
JSRLIB OpenLibrary
move.l d0,_GadToolsBase
beq NoGadTools
moveq #38,d0
lea AslName,a1
JSRLIB OpenLibrary
move.l d0,_AslBase
beq NoAsl
moveq #37,d0
lea IconName,a1
JSRLIB OpenLibrary
move.l d0,_IconBase
beq NoIcon
moveq #40,d0
lea CyberGfxName,a1
JSRLIB OpenLibrary
move.l d0,_CyberGfxBase
moveq #0,d0
lea SID6581Name,a1
JSRLIB OpenLibrary
move.l d0,_SID6581Base
moveq #1,d0
lea PlaySidName,a1
JSRLIB OpenLibrary
move.l d0,_PlaySidBase
lea CiaResName,a1
JSRLIB OpenResource
move.l d0,_CiaBase
beq NoCiaRes
lea MiscResName,a1
JSRLIB OpenResource
move.l d0,_MiscBase
lea DracoResName,a1
JSRLIB OpenResource
tst.l d0
sne.b IsDraco
lea TimerName,a0
moveq #UNIT_MICROHZ,d0
lea TimerIO,a1
moveq #0,d1
JSRLIB OpenDevice
move.l TimerIO+IO_DEVICE,_TimerBase
beq NoTimerDev
; Locale öffnen und Catalog laden
move.l _SysBase,a6
moveq #37,d0
lea LocaleName,a1
JSRLIB OpenLibrary
move.l d0,_LocaleBase
beq 10$
move.l d0,a6
sub.l a0,a0
lea CatalogName,a1
lea CatalogTags,a2
JSRLIB OpenCatalogA
move.l d0,TheCatalog
; Datenstrukturen lokalisieren
10$ bsr Localize
jsr Localize6510
jsr _LocalizePrefs
jsr _LocalizeDisplay
*
* 68020+ vorhanden?
*
move.l _SysBase,a0
move.w AttnFlags(a0),d0
btst #AFB_68020,d0
beq No68020Exit
MACHINE 68020
*
* Argumente auswerten
*
; Default-Name der Prefs-Datei setzen
lea PrefsDefName,a0
lea PrefsName,a1
move.w #255,d0
1$ move.b (a0)+,(a1)+
dbeq d0,1$
; Vom CLI gestartet?
move.l MainTask,a0
tst.l pr_CLI(a0)
beq FromWB
; Ja, ReadArgs benutzen
FromCLI move.l _DOSBase,a6
move.l #Template,d1
move.l #CLIArgs,d2 ;Erstes Argument
moveq #0,d3
JSRLIB ReadArgs
move.l d0,d1 ;NULL ist OK
move.l PrefsNameArg,d0 ;Name der Prefs-Datei kopieren
beq 1$
move.l d0,a0
lea PrefsName,a1
move.w #255,d0
2$ move.b (a0)+,(a1)+
dbeq d0,2$
1$ JSRLIB FreeArgs
bra ArgsDone
; Von der Workbench gestartet, erstes Icon als Prefs laden
FromWB move.l _WBenchMsg,a0
cmp.l #1,sm_NumArgs(a0)
bls ArgsDone
move.l sm_ArgList(a0),a0
lea wa_SIZEOF(a0),a0 ;Erstes Icon (wir selbst) überspringen
move.l wa_Lock(a0),d1
beq ArgsDone
move.l wa_Name(a0),d4
move.l _DOSBase,a6
move.l #PrefsName,d2
move.l #256,d3
JSRLIB NameFromLock
move.l #PrefsName,d1
move.l d4,d2
move.l #256,d3
JSRLIB AddPart
ArgsDone
*
* Einstellungen laden
*
; Vorgegebene Einstellungen
move.w #63,PNormalCycles
move.w #23,PBadLineCycles
move.w #63,PCIACycles
move.w #-1,PJoystick2On
move.w #-1,PSpritesOn
move.w #-1,PCollisions
move.w #-1,PMapSlash
move.w #-1,PFastReset
move.w #OSCAN_TEXT,POverscan
move.w #1,PSkipLatch
; Einstellungen laden
pea ThePrefs
jsr _OpenPrefs
addq.l #4,sp
*
* Einstellungsfenster
*
; Einstellungsfenster darstellen
clr.w PrefsFromEmul
pea ThePrefs
jsr _DoThePrefs
addq.l #4,sp
; Einstellungen übernehmen, wenn OK geklickt, sonst beenden
tst.l d0
beq Exit
bsr SetPrefs
; IEC-Bus vorbereiten
jsr InitIEC
bsr IECErrorReq
; SID-Emulation vorbereiten
jsr InitSID
*
* Emulation initialisieren
*
; Zufallszahlengenerator initialisieren
move.l _IntuitionBase,a0
move.l ib_Micros(a0),RandomSeed
; Speicher für alles holen (die unteren Worte müssen mit den C64-Adressen
; übereinstimmen, außer CharROM)
move.l _SysBase,a6
move.l #$30000,d0 ;192K
move.l #MEMF_ANY|MEMF_CLEAR,d1
JSRLIB AllocVec
move.l d0,RAMBlock
beq NoMemExit
add.l #$ffff,d0 ;Auf xxxx0000 bringen
clr.w d0
move.l d0,TheRAM
add.l #$11000,d0
move.l d0,TheChar ;yyyy1000
add.l #$9000,d0
move.l d0,TheBasic ;yyyya000
add.l #$3800,d0
move.l d0,TheColor ;yyyyd800
add.l #$0800,d0
move.l d0,TheKernal ;yyyye000
; Opcodes $d2 (Wraparound) ab $10000 installieren,
; für den Fall, daß ein Programm über $ffff springt
move.l TheRAM,a0
lea $10000(a0),a0
moveq #256/4-1,d0
10$ move.l #$d2d2d2d2,(a0)+
dbra d0,10$
; ROMs laden
move.l _DOSBase,a6
move.l #BasicFileName,d1 ;Basic
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoBasicExit
move.l d0,d1
move.l TheBasic,d2
move.l #$2000,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
move.l #KernalFileName,d1 ;Kernal
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoKernalExit
move.l d0,d1
move.l TheKernal,d2
move.l #$2000,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
move.l #CharFileName,d1 ;Char
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoCharExit
move.l d0,d1
move.l TheChar,d2
move.l #$1000,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
; Betriebssystem patchen
move.l TheKernal,a0
move.w #$f200,$0d40(a0) ;IECOut
move.w #$f201,$0d23(a0) ;IECOutATN
move.w #$f202,$0d36(a0) ;IECOutSec
move.w #$f203,$0e13(a0) ;IECIn
move.w #$f204,$0def(a0) ;IECSetATN
move.w #$f205,$0dbe(a0) ;IECRelATN
move.w #$f206,$0dcc(a0) ;IECTurnaround
move.w #$f207,$0e03(a0) ;IECRelease
bsr PatchReset
; Bildschirm öffnen
jsr OpenGraphics
cmp.l #1,d0
beq NoScreenExit
cmp.l #2,d0
beq NoMemExit
; Alles initialisieren
jsr Reset6526
jsr Reset6581
jsr Init6510
jsr Init6569
; 6510 starten
jsr Start6510
tst.l d0
bne NoMemExit
; IDCMP des Fensters handhaben
jsr _EventLoop
; Programm beenden
bra Exit
*
* Fehlerbehandlung/Beenden
*
MACHINE 68000
No68020Exit moveq #MSG_NO68020,d0
lea TheLocale,a0
jsr GetString
lea ErrorReq,a1
move.l d0,es_TextFormat(a1)
sub.l a0,a0
sub.l a2,a2
sub.l a3,a3
move.l _IntuitionBase,a6
JSRLIB EasyRequestArgs
bra NoCiaRes
MACHINE 68020
NoMemExit moveq #MSG_NOMEM,d0
bra ReqExit
NoScreenExit moveq #MSG_NOSCREEN,d0
bra ReqExit
NoKernalExit moveq #MSG_NOKERNAL,d0
bra ReqExit
NoBasicExit moveq #MSG_NOBASIC,d0
bra ReqExit
NoCharExit moveq #MSG_NOCHAR,d0
ReqExit lea TheLocale,a0
jsr GetString
lea ErrorReq,a1
move.l d0,es_TextFormat(a1)
sub.l a0,a0
sub.l a2,a2
sub.l a3,a3
move.l _IntuitionBase,a6
JSRLIB EasyRequestArgs
Exit jsr Stop6510
jsr Reset6581 ;Stoppt diesen Lärm!
jsr ExitSID
jsr _CloseDisplay
jsr ExitIEC
move.l _SysBase,a6
move.l RAMBlock,d0
beq 1$
move.l d0,a1
JSRLIB FreeVec
1$
MACHINE 68000
move.l _SysBase,a6
move.l _TimerBase,d0
beq NoTimerDev
lea TimerIO,a1
JSRLIB CloseDevice
NoTimerDev
NoCiaRes move.l _SysBase,a6
move.l _PlaySidBase,d0
beq NoPlaySid
move.l d0,a1
JSRLIB CloseLibrary
NoPlaySid move.l _SID6581Base,d0
beq NoSID6581
move.l d0,a1
JSRLIB CloseLibrary
NoSID6581 move.l _LocaleBase,d0 ;Catalog schließen
beq NoLocale
move.l d0,a6
move.l TheCatalog,a0
JSRLIB CloseCatalog
move.l a6,a1
move.l _SysBase,a6
JSRLIB CloseLibrary
NoLocale move.l _CyberGfxBase,d0
beq NoCyber
move.l d0,a1
JSRLIB CloseLibrary
NoCyber move.l _IconBase,a1
JSRLIB CloseLibrary
NoIcon move.l _AslBase,a1
JSRLIB CloseLibrary
NoAsl move.l _GadToolsBase,a1
JSRLIB CloseLibrary
NoGadTools move.l _GfxBase,a1
JSRLIB CloseLibrary
NoGfx move.l _IntuitionBase,a1
JSRLIB CloseLibrary
NoIntui move.l _UtilityBase,a1
JSRLIB CloseLibrary
NoUtility moveq #0,d0
rts
MACHINE 68020
**
** C64 und Floppy zurücksetzen
**
XDEF _ResetC64
_ResetC64
ResetC64 jsr Reset6510
jsr Reset6526
jmp Reset6581
**
** Je nach Zustand von FastReset den Speichertest aus dem ROM entfernen
**
PatchReset move.l TheKernal,a0
tst.w FastReset
bne 1$
move.w #$d0e8,$1d84(a0)
rts
1$ move.w #$a000,$1d84(a0)
rts
**
** Preferences
**
*
* Preferences aus dem Emulator heraus
*
; Aktuelle Preferences holen
_ShowPrefs movem.l d2-d7/a2-a6,-(sp)
bsr GetPrefs
; Fenster öffnen und handhaben
move.w #-1,PrefsFromEmul
pea ThePrefs
jsr _DoThePrefs
addq.l #4,sp
; Prefs setzen, wenn OK geklickt
tst.l d0
beq 1$ ;Die stehen hier (und nicht in SetPrefs),
jsr ChangedIECPrefs ; weil beim ersten Aufruf von SetPrefs
bsr IECErrorReq ; noch nicht alles initialisiert ist
bsr SetPrefs
jsr ChangedSIDPrefs
bsr PatchReset
1$ movem.l (sp)+,d2-d7/a2-a6
rts
*
* Einstellungen setzen
*
SetPrefs move.w PNormalCycles,NormalCycles
move.w PBadLineCycles,BadLineCycles
move.w PCIACycles,CIACycles
move.w PJoystick1On,Joystick1On
move.w PJoystick2On,Joystick2On
move.w PJoystickSwap,JoystickSwap
move.w PDrv8Type,Drv8Type
move.w PDrv9Type,Drv9Type
move.w PDrv10Type,Drv10Type
move.w PDrv11Type,Drv11Type
move.w POtherIEC,OtherIEC
move.w PSpritesOn,SpritesOn
move.w PCollisions,Collisions
move.w POverscan,Overscan
move.w PMapSlash,MapSlash
move.w PFastReset,FastReset
move.w PLimitSpeed,LimitSpeed
tst.w IsDraco ;Auf dem DraCo Joysticks abschalten
beq 3$
clr.w Joystick1On
clr.w Joystick2On
3$
move.w PSkipLatch,SkipLatch
bne 2$
move.w #1,SkipLatch ;Keine Null zulassen
2$
tst.w PrefsFromEmul
bne 1$
move.l PDisplayID,DisplayID ;Nur beim Start
move.w PScreenType,ScreenType
move.w PDirectVideo,DirectVideo
1$
lea PDir8,a0
lea Dir8,a1
moveq #256/4-1,d0
11$ move.l (a0)+,(a1)+
dbra d0,11$
lea PDir9,a0
lea Dir9,a1
moveq #256/4-1,d0
12$ move.l (a0)+,(a1)+
dbra d0,12$
lea PDir10,a0
lea Dir10,a1
moveq #256/4-1,d0
13$ move.l (a0)+,(a1)+
dbra d0,13$
lea PDir11,a0
lea Dir11,a1
moveq #256/4-1,d0
14$ move.l (a0)+,(a1)+
dbra d0,14$
move.w PSIDType,SIDType
move.w PKeyboardYZ,KeyboardYZ
jmp ChangedKeys
*
* Einstellungen holen
*
GetPrefs move.w NormalCycles,PNormalCycles
move.w BadLineCycles,PBadLineCycles
move.w CIACycles,PCIACycles
move.w Joystick1On,PJoystick1On
move.w Joystick2On,PJoystick2On
move.w JoystickSwap,PJoystickSwap
move.w SIDType,PSIDType
move.w Drv8Type,PDrv8Type
move.w Drv9Type,PDrv9Type
move.w Drv10Type,PDrv10Type
move.w Drv11Type,PDrv11Type
move.w OtherIEC,POtherIEC
move.w KeyboardYZ,PKeyboardYZ
move.w SpritesOn,PSpritesOn
move.w Collisions,PCollisions
move.w Overscan,POverscan
move.w MapSlash,PMapSlash
move.w FastReset,PFastReset
move.w LimitSpeed,PLimitSpeed
move.w DirectVideo,PDirectVideo
move.l DisplayID,PDisplayID
move.w ScreenType,PScreenType
move.w SkipLatch,PSkipLatch
lea Dir8,a0
lea PDir8,a1
moveq #256/4-1,d0
11$ move.l (a0)+,(a1)+
dbra d0,11$
lea Dir9,a0
lea PDir9,a1
moveq #256/4-1,d0
12$ move.l (a0)+,(a1)+
dbra d0,12$
lea Dir10,a0
lea PDir10,a1
moveq #256/4-1,d0
13$ move.l (a0)+,(a1)+
dbra d0,13$
lea Dir11,a0
lea PDir11,a1
moveq #256/4-1,d0
14$ move.l (a0)+,(a1)+
dbra d0,14$
rts
**
** Requester entsprechend dem Rückgabewert von InitIEC/ChangedIECPrefs anzeigen
** d0: Rückgabewert
**
IECErrorReq tst.l d0
beq 1$
cmp.l #1,d0
bne 2$
lea NoParPortReq,a1
bra 3$
2$ lea NoTimerReq,a1
3$ move.l a6,-(sp)
move.l _IntuitionBase,a6
sub.l a0,a0
move.l a0,a2
move.l a0,a3
JSRLIB EasyRequestArgs
move.l (sp)+,a6
1$ rts
**
** Zufallsbyte ermitteln (0..255)
** d0: Ergebnis als 32-Bit-Wert (MSW muß Null sein!)
**
Random move.l RandomSeed,d1
mulu.l #2311,d1
add.l #25367,d1
divul.l #120050,d0:d1 ;Rest nach d0
move.l d0,RandomSeed
lsl.l #8,d0
divu.l #120050,d0
rts
**
** Strings in Datenstrukturen lokalisieren
**
GetStr MACRO ;Label
lea TheLocale,a0
move.l #\1,d0
jsr GetString
ENDM
Localize GetStr MSG_REQTITLE
move.l d0,ErrorReq+es_Title
move.l d0,NoParPortReq+es_Title
move.l d0,NoTimerReq+es_Title
GetStr MSG_REQGADS
move.l d0,ErrorReq+es_GadgetFormat
GetStr MSG_REQGADS2
move.l d0,NoParPortReq+es_GadgetFormat
move.l d0,NoTimerReq+es_GadgetFormat
GetStr MSG_NOPARPORT
move.l d0,NoParPortReq+es_TextFormat
GetStr MSG_NOTIMER
move.l d0,NoTimerReq+es_TextFormat
rts
**
** C-Support (da ohne c.lib gelinkt wird)
**
XDEF __mulu
__mulu mulu.l d1,d0
rts
XDEF __muls
__muls muls.l d1,d0
rts
XDEF __divu
__divu divu.l d1,d0
rts
XDEF __divs
__divs divs.l d1,d0
rts
XDEF _memset ;Dest, Char, Len -> Dest
_memset move.l 4(sp),a0
move.l 8(sp),d0
move.l 12(sp),d1
beq 1$
2$ move.b d0,(a0)+
subq.l #1,d1
bne 2$
1$ move.l 4(sp),d0
rts
XDEF _strcat ;Dest, Source -> Dest
_strcat move.l 4(sp),d0
move.l d0,a0
move.l 8(sp),a1
1$ tst.b (a0)+
bne 1$
subq.l #1,a0
2$ move.b (a1)+,(a0)+
bne 2$
rts
XDEF _strncat ;Dest, Source, Max -> Dest
_strncat move.l 4(sp),d0
move.l d0,a0
move.l 8(sp),a1
move.l 12(sp),d1
beq 1$
2$ tst.b (a0)+
bne 2$
subq.l #1,a0
3$ move.b (a1)+,(a0)+
beq 1$
subq.l #1,d1
bne 3$
clr.b (a0)
1$ rts
XDEF _strchr ;String, Char -> First
_strchr move.l 4(sp),a0
move.l 8(sp),d0
2$ cmp.b (a0),d0
beq 1$
tst.b (a0)+
bne 2$
moveq #0,d0
rts
1$ move.l a0,d0
rts
XDEF _strrchr ;String, Char -> Last
_strrchr move.l 4(sp),a0
move.l 8(sp),d1
moveq #0,d0
2$ cmp.b (a0),d1
bne 1$
move.l a0,d0
1$ tst.b (a0)+
bne 2$
rts
XDEF _strcpy ;Dest, Source -> Dest
_strcpy move.l 4(sp),d0
move.l d0,a0
move.l 8(sp),a1
1$ move.b (a1)+,(a0)+
bne 1$
rts
XDEF _strncpy ;Dest, Source, Max -> Dest
_strncpy move.l 4(sp),d0
move.l d0,a0
move.l 8(sp),a1
move.l 12(sp),d1
2$ subq.l #1,d1
bcs 1$
move.b (a1)+,(a0)+
bne 2$
bra 3$
4$ clr.b (a0)+
3$ subq.l #1,d1
bcc 4$
1$ rts
XDEF _strlen ;String
_strlen move.l 4(sp),a0
1$ tst.b (a0)+
bne 1$
sub.l 4(sp),a0
move.l a0,d0
subq.l #1,d0
rts
XDEF _malloc ;ByteSize
_malloc move.l 4(sp),d0
move.l a6,-(sp)
move.l _SysBase,a6
move.l #MEMF_PUBLIC,d1
JSRLIB AllocVec
move.l (sp)+,a6
rts
XDEF _free ;Ptr
_free move.l 4(sp),a1
move.l a6,-(sp)
move.l _SysBase,a6
JSRLIB FreeVec
move.l (sp)+,a6
rts
XDEF _GetStr ;MSG_#?
_GetStr lea TheLocale,a0
move.l 4(sp),d0
jmp GetString
XDEF _PutChProc ;Für RawDoFmt
_PutChProc move.b d0,(a3)+
rts
**
** Konstanten
**
; Taglist für OpenCatalog
CatalogTags dc.l OC_Version,2
dc.l 0
; Strings
Version VERSTAG
UtilityName dc.b "utility.library",0
IntuiName dc.b "intuition.library",0
GfxName dc.b "graphics.library",0
GadToolsName dc.b "gadtools.library",0
AslName dc.b "asl.library",0
IconName dc.b "icon.library",0
CyberGfxName dc.b "cybergraphics.library",0
LocaleName dc.b "locale.library",0
SID6581Name dc.b "6581sid.library",0
PlaySidName dc.b "playsid.library",0
CiaResName dc.b "ciaa.resource",0
MiscResName dc.b "misc.resource",0
DracoResName dc.b "draco.resource",0
TimerName dc.b "timer.device",0
CatalogName dc.b "Frodo.catalog",0
PrefsDefName dc.b "PROGDIR:Frodo Prefs",0
BasicFileName dc.b "PROGDIR:Basic ROM",0
KernalFileName dc.b "PROGDIR:Kernal ROM",0
CharFileName dc.b "PROGDIR:Char ROM",0
Template dc.b "FILE=PREFSFILE",0
CNOP 0,4
**
** Datenbereich
**
_UtilityBase dc.l 0
_IntuitionBase dc.l 0
_GfxBase dc.l 0
_GadToolsBase dc.l 0
_AslBase dc.l 0
_IconBase dc.l 0
_CyberGfxBase dc.l 0
_SID6581Base dc.l 0
_PlaySidBase dc.l 0
_CiaBase dc.l 0
_MiscBase dc.l 0
_TimerBase dc.l 0
TheLocale ;Struktur für GetString
_LocaleBase dc.l 0
TheCatalog dc.l 0
MainTask dc.l 0 ;Emulator-Haupttask
RandomSeed dc.l 0 ;Basis für Zufallsgenerator
RAMBlock dc.l 0 ;Zeiger auf Speicherbereich
; Requester
ErrorReq dc.l 20,0,0,0,0
NoParPortReq dc.l 20,0,0,0,0
NoTimerReq dc.l 20,0,0,0,0
**
** Nicht initialisierte Daten
**
SECTION "BSS",BSS
TimerIO ds.b IOTV_SIZE ;Dummy, um die _TimerBase bekommen
XDEF _PrefsName
_PrefsName
PrefsName ds.b 256 ;Puffer für Namen der Prefs-Datei
CLIArgs ;Argumente
PrefsNameArg ds.l 1
XDEF _PrefsFromEmul
_PrefsFromEmul
PrefsFromEmul ds.w 1 ;#0: Einstellungen vom Emulator aus aufgerufen
; Einstellungen
ThePrefs
Pdummy ds.w 1
PNormalCycles ds.w 1
PBadLineCycles ds.w 1
PCIACycles ds.w 1
PJoystick1On ds.w 1
PJoystick2On ds.w 1
PJoystickSwap ds.w 1
PDisplayID ds.l 1
PScreenType ds.w 1
PDir8 ds.b 256
PDir9 ds.b 256
PDir10 ds.b 256
PDir11 ds.b 256
PDrv8Type ds.w 1
PDrv9Type ds.w 1
PDrv10Type ds.w 1
PDrv11Type ds.w 1
PSIDType ds.w 1
POtherIEC ds.w 1
PKeyboardYZ ds.w 1
PCollisions ds.w 1
POverscan ds.w 1
PMapSlash ds.w 1
PFastReset ds.w 1
PSkipLatch ds.w 1
PLimitSpeed ds.w 1
PDirectVideo ds.w 1
PSpritesOn ds.w 1
PrefsLength = *-ThePrefs
FastReset ds.w 1 ;Prefs: Speichertest bei Reset abschalten
_IsDraco
IsDraco ds.w 1 ;Laufen wir auf einem DraCo?
END