|
|
|
In gewissen Situationen ist es für C64 Software günstig zu wissen, ob sie auf einem echten C64 oder einem Emulator läuft (etwa um Fastloader abzustellen). Wolfgang Lorenz, der Autor von PC64 hat eine Methode vorgeschlagen, die den Typ des Emulators durch eine besondere Verwendung des Speicherbereichs $DFA0-$DFFF bestimmt. Details entnehmen Sie bitte dem untenstehenden Listing.
Wenn Sie dieses Programm mit Power64 testen wollen, kopieren Sie es aus diesem Dokument und fügen Sie es (per Copy & Paste oder Drag & Drop) in ein offenes Power64 Emulator Fenster ein.
Power64 wird die folgende Meldung ausgeben:
Power64 (4.9.5) Commodore 64 for Power Macintosh (C) 2008 Roland Lieger
Wenn die Unterstützung der Emulator Erkennung Probleme mit einem Spiel verursachen sollte, so kann sie dem über Options/ROM Patches abgestellt werden.
100 REM ********* WHERE AM I? ********* 110 REM ------------------------------- 120 REM THIS IS THE RECOMMENDED METHOD 130 REM HOW TO DETECT A C64 EMULATOR, 140 REM E.G. FOR DISABLING FAST LOADERS 150 REM 160 REM - THE BYTE AT $DFFF CHANGES 170 REM BETWEEN $55 AND $AA ON EVERY 180 REM READ ACCESS 190 REM - THE BYTE AT $DFFE CONTAINS 200 REM THE MANUFACTURER CODE LETTER: 210 REM A = C64ALIVE 220 REM F = FRODO 230 REM P = PERSONAL C64 240 REM S = C64 SOFTWARE EMULATOR 250 REM V = VICE 260 REM X = X64 270 REM / = POWER64 280 REM - THE WORD AT $DFFC CONTAINS 290 REM THE EMULATOR VERSION NUMBER, 300 REM E.G. $0120 FOR VERSION 1.2 310 REM - THE BYTES FROM $DFA0 CONTAIN 320 REM A COPYRIGHT STRING WITH 330 REM EMULATOR NAME AND VERSION, 340 REM $0D, COPYRIGHT AND $00. 350 REM ------------------------------- 360 : 500 PRINT 510 X=57343: REM $DFFF 520 IF PEEK(X)<>85 THEN IF PEEK(X)<>85 THEN 1000 530 IF PEEK(X)<>170 THEN 1000 540 IF PEEK(X)<>85 THEN 1000 550 IF PEEK(X)<>170 THEN 1000 560 M$=CHR$(PEEK(57342)): REM $DFFE 570 PRINT "MANUFACTURER = '"; M$; "' "; 580 IF M$="A" THEN PRINT "(C64ALIVE)"; 590 IF M$="F" THEN PRINT "(FRODO)"; 600 IF M$="P" THEN PRINT "(PC64)"; 610 IF M$="S" THEN PRINT "(C64S)"; 620 IF M$="V" THEN PRINT "(VICE)"; 630 IF M$="X" THEN PRINT "(X64)"; 640 IF M$="/" THEN PRINT "(POWER64)"; 650 PRINT 660 : 700 V=PEEK(57341)*256 + PEEK(57340): REM $DFFD/$DFFC 710 H$="0123456789ABCDEF" 720 FOR I=0 TO 3 730 V$=MID$(H$,1+(V AND 15),1)+V$ 740 V=INT(V/16) 750 NEXT 760 PRINT "VERSION = $";V$ 770 PRINT 780 : 800 I=57248: REM $DFA0 810 X=PEEK(I) 820 IF X=0 THEN PRINT: END 830 PRINT CHR$(X); 840 I=I+1 850 GOTO 810 860 : 900 REM ------------------------------- 910 REM THESE ARE MANUFACTURER-SPECIFIC 920 REM WORKAROUNDS, WHICH SHOULD BE 930 REM REPLACED WITH THE OFFICIAL 940 REM EMULATOR DETECTION METHOD 950 : 1000 IF PEEK(60682)<>0 THEN 1100: REM $ED0A 1010 PRINT "C64 SOFTWARE EMULATOR" 1020 PRINT "(C)1991-94 MIHA PETERNEL" 1030 END 1040 : 1100 IF PEEK(60736)<>0 THEN 1200: REM $ED40 1110 PRINT "X64 (VERSION 1 OR 2)" 1120 PRINT "(C)1993-94 J.SONNINEN/T.RANTANEN/J.VALTA" 1130 END 1140 : 1200 X=57087: REM $DEFF 1210 IF PEEK(X)+PEEK(X)+PEEK(X)<>0 THEN 2000 1220 PRINT "C64ALIVE" 1230 PRINT "(C)1993-94 F.LITTMANN DEVELOPMENTS" 1240 END 1250 : 2000 PRINT "THIS IS AN ORIGINAL C64 OR C128"
Quelle: http://www.infinite-loop.at/Power64/Documentation/Power64-LiesMich/AF-Emulatorerkennung.html Power64 Homepage: http://www.infinite-loop.at und http://www.salto.at - EMail: © Roland Lieger, Goethegasse 39, A-2340 Mödling, Österreich Letzte Änderung: 29. Feb. 2008 |