|
|
|
I produttori di software sul C64 o sugli emulatori possono sapere se "la macchina" che il loro codice sta eseguendo sia un C64 reale, o no (per esempio per di abilitare i caricatori veloci). Wolfgang Lorenz, l'autore di PC64, ha suggerito un metodo che rivela il tipo di emulatore basato su un uso speciale degli indirizzi $$DFA0-$DFFF. Si veda il seguente elenco per i particolari.
Se desiderate testare questo programma su Power64, copiate il testo da questo documento ed incollatelo in una finestra aperta dell'emulatore Power64. Power64 risponderà con il seguente messaggio:
Power64 (4.9.5) Commodore 64 for Power Macintosh (C) 2008 Roland Lieger
Se l'autorilevazione avverte che l'emulatore Power64 può causare difficoltà con un programma, esso può essere disabilitato nella finestra delle patch Options/ROM.
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"
Fonte: http://www.infinite-loop.at/Power64/Documentation/Power64-LeggiMi/AF-Rilevatione_Emulatore.html Power64 Homepage: http://www.infinite-loop.at e http://www.salto.at - EMail: © Roland Lieger, Goethegasse 39, A-2340 Mödling, Austria - Europe Ultimo Cambiamento: 29. Febbraio 2008 |