home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
crossplatform
/
emulators
/
Atari
/
c64.lzh
/
C64
/
DOC
/
ARTIKEL.TXT
next >
Wrap
Text File
|
1986-02-06
|
22KB
|
384 lines
wOHL JEDER, DER SICH ETWAS INTENSIVER MIT SEINEM cOMPUTER
BESCHFTIGT HAT, WIRD SICH SCHON EINMAL GERGERT HABEN, DA
AUSGERECHNET DAS pROGRAMM, DAS ER GERNE BESITZEN WRDE, AUF
SEINEM rECHNER NICHT LUFT. bESONDERS VIEL PROFESSIONELLE
sOFTWARE IST Z.b. FR ANDERE bETRIEBSSYSTEME WIE ms-dos ODER cp/m
ZU ERHALTEN. dA DIESE sYSTEME JEDOCH FR ANDERE pROZESSOREN ALS
DEN 68000 GESCHRIEBEN SIND, IST ES EIGENTLICH NICHT MGLICH,
DEREN pROGRAMME AUF DEM aTARI st ZU VERWENDEN. gANZ AUSWEGLOS IST
DIE sITUATION NUN ABER AUCH NICHT. fR DIE OBEN GENANNTEN
bETRIEBSSYSTEME GIBT ES INZWISCHEN eMULATOREN AUF DEM mARKT, DIE
ES ERMGLICHEN, AUCH pROGRAMME, DIE FR ANDERE pROZESSOREN ODER
bETRIEBSSYSTEME GESCHRIEBEN WORDEN SIND, AUF DEM st LAUFEN ZU
LASSEN. vON DIESEN pROGRAMMEN SIND DIE mac-eMULATOREN BESONDERS
HERVORZUHEBEN. dA DER mACINTOSH WIE DER st EBENFALLS MIT EINEN
68000-pROZESSOR ARBEITET, IST ES IN DIESEM fALL MGLICH, DURCH
EIN ENTSPRECHENDES pROGRAMM NICHT NUR DAS mACINTOSH-
bETRIEBSSYSTEM AUF DEM st ZU IMPLEMENTIEREN, SONDERN DABEI AUCH
NOCH EINE GRERE gESCHWINDIGKEIT IM pROGRAMMABLAUF ZU ERREICHEN,
ALS DIES AUF DEM "oRIGINAL" mac-sYSTEM DER fALL IST. dIE uRSACHE
HIERFR LIEGT DARIN, DA DER 68000 BEIM st HHER GETAKTET IST,
ALS IM mACINTOSH. lEIDER DRFTE DIESE aRT VON eMULATOREN EIN
sONDERFALL BLEIBEN, DENN DIE BEKANNTESTEN bETRIEBSSYSTEME LAUFEN
NUN EINMAL NUR AUF rECHNERN, DIE KEINEN pROZESSOR DER 68000-
fAMILIE BENUTZEN. iN DIESEM fALL BLEIBT ALS aUSWEG NUR DIE
sOFTWARE-eMULATION DES ENTSPRECHENDEN pROZESSORS. dER
gESCHWINDIGKEITSVERLUST, DER DABEI AUFTRITT, LT SICH LEIDER
NICHT VERMEIDEN. aLLERDINGS KANN MAN BEI ENTSPRECHENDER
pROGRAMMIERUNG TROTZDEM RECHT AKZEPTABLE gESCHWINDIGKEITEN
ERREICHEN, AUCH WENN MAN DIESES NICHT JEDEM AUF DEM mARKT
BEFINDLICHEN eMULATOR ANMERKT.
aLS aTARI- UND c64-bESITZER HABE ICH MICH DAMIT BESCHFTIGT, DAS
bETRIEBSSYSTEM DES c64 SO GUT WIE MGLICH AUF DEM st ZU
IMPLEMENTIEREN. fR DIE sPIELE-fREAKS HEIT DAS ABER LEIDER
NICHT, DA NUN DER st IN DER lAGE IST, c64-sPIELE ZU VERARBEITEN.
dAZU IST DER aUFBAU DER BEIDEN cOMPUTER ZU VERSCHIEDEN. dENNOCH
LT SICH BIS AUF EINIGE SPEZIELLE fHIGKEITEN DES c64 EIN
BRAUCHBARER eMULATOR ENTWICKELN. wAS MAN BEI DER pROGRAMMIERUNG
EINES SOLCHEN eMULATORPROGRAMMS BEACHTEN SOLLTE, WIRD gEGENSTAND
DES aRTIKELS SEIN. dA DIESER tEIL kENNTNISSE IN aSSEMBLER-
pROGRAMMIERUNG VORAUSSETZT, DRFTE ER VOR ALLEM FR aSSEMBLER-
pROGRAMMIERER INTERESSANT SEIN. aUERDEM MCHTE ICH KURZ EIN PAAR
fEATURES DES c64-eMULATORS BESCHREIBEN. kONKRETERE hINWEISE
FINDEN SICH AUF DER lESERSERVICE-dISKETTE, AUF DER SICH DER
eMULATOR BEFINDET.
bEVOR MAN SICH UM DIE iMPLEMENTIERUNG EINES KONKRETEN
bETRIEBSSYSTEMS KMMERN KANN, GEHT ES ERST EINMAL DARUM, SICH
DETAILLIERTE iNFORMATIONEN BER DEN ZU EMULIERENDEN pROZESSOR ZU
BESORGEN. (dABEI SETZE ICH NATRLICH VORAUS, DA MAN DIE
pROGRAMMIERUNG DES 68000 GUT BEHERRSCHT.) uM SICH NHER MIT DEM
EIGENTLICHEN bETRIEBSSYSTEM BESCHFTIGEN ZU KNNEN, MU
SCHLIELICH ERST EINMAL DIE eMULATION FR DEN ENTSPRECHENDEN
pROZESSOR STEHEN. fR DIE BEKANNTESTEN pROZESSOREN, WIE IM fALL
DES c64 FR DEN 6502, IST ES KEIN pROBLEM, AN DIE ENTSPRECHENDE
lITERATUR ZU KOMMEN. wICHTIG SIND VOR ALLEM iNFORMATIONEN BER
DIE bEHANDLUNG DER fLAGS DES pROZESSORS BEI DEN VERSCHIEDENEN
bEFEHLSTYPEN SOWIE EINE bESCHREIBUNG EVENTUELLER bESONDERHEITEN
DES pROZESSORS. zU BEACHTEN IST, DA Z.b. DAS cARRY-fLAG DURCHAUS
NICHT IN ALLEN pROZESSOREN DIE GLEICHE bEDEUTUNG HAT. gERADE DER
6502 HAT HIER SEINE bESONDERHEIT. iM GNSTIGSTEN fALL HAT MAN
SCHON EINMAL MIT DEM ZU EMULIERENDEN pROZESSOR GEARBEITET, WAS
SICH IM WEITEREN vERLAUF DER pROGRAMMIERUNG ALS GROER vORTEIL
ERWEISEN WIRD.
bEI DER EIGENTLICHEN pROGRAMMIERUNG DES eMULATORS SPIELT DIE
gESCHWINDIGKEIT DER bEFEHLSAUSWERTUNG EINE BESONDERS GROE rOLLE.
dA DER 68000 MIT DEN bEFEHLSCODES DES 6502 BERHAUPT NICHTS
ANFANGEN KANN, MU JEDER oPCODE INTERPRETIERT WERDEN, HNLICH WIE
ES EIN basic-iNTERPRETER MIT EINEM basic-pROGRAMM MACHT. fR
JEDEN 6502-cODE MU EINE rOUTINE IN 68000-aSSEMBLER ENTWICKELT
WERDEN, DIE aKTIONEN VORNIMMT, DIE DEM ENTSPRECHENDEN 6502-bEFEHL
ENTSPRECHEN. hIERIN LIEGT AUCH DER gRUND, WARUM ES NICHT MGLICH
IST, MIT EINEM sOFTWARE-eMULATOR DIE GLEICHE gESCHWINDIGKEIT ZU
ERREICHEN, WIE SIE DAS sYSTEM BESITZT, DAS EMULIERT WIRD. oBWOHL
DER 68000 MIT 8 mhZ GETAKTET IST UND DER 6510 IM c64 MIT NUR
KNAPP 1 mhZ, BEDEUTET DIE iNTERPRETATION DER bEFEHLSBYTES EINEN
vERLUST AN gESCHWINDIGKEIT. dIE EIGENTLICHE bEARBEITUNG DER
EINZELNEN oPCODES IN DEN ENTSPRECHENDEN rOUTINEN KANN JEDOCH
DURCHAUS SCHNELLER VOM 68000 AUSGEFHRT WERDEN, ALS VOM 6502. sO
BENTIGT DER c64-eMULATOR ZUM sETZEN DES cARRY-fLAGS 4 tAKTYKLEN,
DER 6502 BRAUCHT 2 tAKTZYKLEN. rECHNET MAN DIESE aNGABEN AUF DIE
tAKTFREQUENZEN DER BEIDEN pROZESSOREN UM, SO SCHNEIDET DER 68000
DEUTLICH BESSER AB. aLLERDINGS MU NUN NOCH DIE zEIT ADDIERT
WERDEN, DIE DER eMULATOR BENTIGT, BIS ER DIE aDRESSE DER rOUTINE
ZUM sETZEN DES fLAGS ERMITTELT HAT. dIESER vORGANG NIMMT JEDOCH
SO VIEL zEIT IN aNSPRUCH, DA DER 6502 SCHLIELICH DOCH DER
sCHNELLERE IST. dA DIE tAKTFREQUENZ NEUERER pROZESSORTYPEN IMMER
WEITER STEIGT, WIRD ES WOHL NUR EINE fRAGE DER zEIT SEIN, BIS ES
MGLICH IST, EINEN 8 bIT-pROZESSOR MINDESTENS MIT DER
gESCHWINDIGKEIT ZU EMULIEREN, MIT DER DIESER pROZESSOR
NORMALERWEISE BETRIEBEN WIRD.
nUN WIEDERHOLT SICH DER vORGANG DER iNTERPRETATION DES FOLGENDEN
bEFEHLSBYTES NATRLICH BEI JEDEM NEUEN 6502-oPCODE. dESHALB IST
ES GERADE AN DIESER sTELLE BESONDERS WICHTIG, EINE MGLICHST
SCHNELLE aUSWERTUNG DES NCHSTEN bEFEHLSBYTES ZU ERREICHEN. sPART
MAN HIER NUR EINEN tAKTZYKLUS EIN, SO STEIGT DIE gESCHWINDIGKEIT
DER eMULATION BEREITS MERKLICH. wIE KANN NUN DAS NCHSTE
bEFEHLSBYTE AUSGEWERTET WERDEN? iM ALLGEMEINEN WIRD HIERZU DIESES
bYTE IN EIN dATENREGISTER GELADEN UND DANN DIE aDRESSE DER
ZUGEHRIGEN eMULATIONSROUTINE AUS DIESEM bYTE BERECHNET. dIES
KANN Z.b. DURCH DEN FOLGENDEN aLGORITHMUS GESCHEHEN:
loop: clr d0
move.b (a0)+,d0
asl #2,d0
move.l (a1,d0),a0 aLGORITHMUS 1
jsr (a0)
bra loop
gEHT MAN DAVON AUS, DA a0 AUF DAS NCHSTE bEFEHLSBYTE IM 6502-
aDRERAUM ZEIGT UND a1 DEN aNFANG EINER tABELLE MIT
sPRUNGADRESSEN AUF DIE ENTSPRECHENDEN eMULATIONSROUTINEN ENTHLT,
WRDE OBIGES pROGRAMMFRAGMENT DEN aNFORDERUNGEN GERECHT.
aLLERDINGS LT DIE gESCHWINDIGKEIT DER iNTERPRETATION NOCH VIEL
ZU WNSCHEN BRIG. uM EINE HHERE gESCHWINDIGKEIT ZU ERREICHEN,
KANN MAN DEN asl-bEFEHL DURCH ZWEI add-bEFEHLE ERSETZEN UND DIE
OBIGE rOUTINE FR JEDEN ZU EMULIERENDEN oPCODE NEU PROGRAMMIEREN,
WAS DANN SO AUSSEHEN KNNTE:
clr d0
move.b (a0)+,d0
add d0,d0
add d0,d0
move.l (a1,d0),a0 aLGORITHMUS 2
jmp (a0)
iN DIESEM fALL WIRD DIE NCHSTE AUSZUFHRENDE rOUTINE NICHT MEHR
ALS uNTERPROGRAMM ANGESPRUNGEN, SO DA MAN NICHT MIT rts ZU EINER
BERGEORDNETEN iNTERPRETATIONSROUTINE ZURCKKEHREN KANN. eBEN AUS
DIESEM gRUND MU SICH DER OBIGE pROGRAMMTEIL AM eNDE JEDER
eMULATIONS-uNTERROUTINE BEFINDEN, ALSO FR JEDEN oPCODE EINMAL IM
pROGRAMM VORHANDEN SEIN. dADURCH WIRD DAS eMULATORPROGRAMM ZWAR
LNGER, DAFR ABER DEUTLICH SCHNELLER, DA DER aUFRUF UND DIE
rCKKEHR AUS EINEM uNTERPROGRAMM BESONDERS VIEL zEIT BENTIGT.
uND gESCHWINDIGKEIT IST FR EINEN sOFTWARE-eMULATOR DAS HCHSTE
gEBOT! dARBER HINAUS HAT MAN AUF DEM st GENUG sPEICHERPLATZ, UM
BEI EINEM eMULATOR FR EINEN pROZESSOR MIT NUR 64k aDRERAUM
NICHT SPAREN ZU MSSEN.
dER OBEN DARGESTELLTE aLGORITHMUS 2 FINDET SICH IN HNLICHER fORM
IN ALLEN MIR BEKANNTEN sOFTWARE-eMULATOREN WIEDER. lASSEN SIE UNS
EINMAL EIN WENIG RECHNEN: dIE aUSFHRUNGSGESCHWINDIGKEIT FR
DIESEN aLGORITHMUS BETRGT 46 tAKTZYKLEN. dER 6502 IST
NORMALERWEISE MIT 1mhZ GETAKTET, DER st MIT 8mhZ. aLLEIN DIE
iNTERPRETATION EINES bEFEHLSBYTES WRDE DEMNACH EINE zEIT
VERBRAUCHEN, DIE 46/8 6502-zYKLEN ENTSPRICHT, ALSO FAST 6 6502-
zYKLEN. dA DIE KRZESTEN 6502-bEFEHLE 2 tAKTZYKLEN (BEZOGEN AUF
DEN 6502) BRAUCHEN, WRDE NUR DIE aUSWERTUNG DES NCHSTEN bEFEHLS
DURCH DEN eMULATOR SCHON EXTREM VIEL zEIT VERSCHLINGEN. dAS
pRINZIP, DAS IN aLGORITHMUS 2 ZUR iNTERPRETATION VERWENDET WURDE,
KANN JEDOCH NICHT MEHR ENTSCHEIDEND VERKRZT WERDEN. uRSPRNGLICH
ARBEITET AUCH MEIN c64-eMULATOR MIT EINEM VERGLEICHBAREN
aLGORITHMUS.
iST MAN ALLERDINGS BEREIT, 64k sPEICHERPLATZ MEHR FR DEN
eMULATOR ZU OPFERN, WAS BEIM st NORMALERWEISE MGLICH IST, SO
KANN MAN DIE SO ZEITKRITISCHE bEFEHLSINTERPRETATION DURCH EINE
VLLIG ANDERE pROGRAMMIERUNG DEUTLICH BESCHLEUNIGEN. hIER DIE
rOUTINE, WIE SIE IN MEINEM eMULATOR VERWENDET WIRD:
move.b (a0)+,lbl+2(a1)
lbl: jmp $0(a1) aLGORITHMUS 3
aUCH HIER IST a0 pOINTER AUF DAS NCHSTE bEFEHLSBYTE, a1 IST EIN
SPEZIELLER pOINTER IN DAS 64k-sEGMENT, IN DEM SICH DER eMULATOR
NUN BEFINDET. nUN EIN PAAR eRKLRUNGEN ZU aLGORITHMUS 3, DENN ER
DRFTE NICHT SO EINSICHTIG SEIN, WIE DIE ERSTEN BEIDEN. iM OBIGEN
fALL WIRD DAS bEFEHLSBYTE NMLICH OHNE IRGENDWELCHE WEITEREN
bERECHNUNGEN DIREKT ZUR aDREBILDUNG IM DARAUFFOLGENDEN
sPRUNGBEFEHL VERWENDET. hIERZU AM BESTEN EIN bEISPIEL. nEHMEN WIR
AN, DER NCHSTE 6502-oPCODE, AUF DEN DAS aDREREGISTER a0 ZEIGT,
IST $ea. dIESES bYTE WIRD NUN ALS dISPLACEMENT FR DEN FOLGENDEN
sPRUNGBEFEHL BENUTZT, WOBEI SICH DAS pROGRAMM SELBST VERNDERT.
dIREKT VOR DEM sPRUNG SIEHT DER sPRUNGBEFEHL DANN ALSO
FOLGENDERMAEN AUS:
jmp $ea00(a2)
dAS 6502-bEFEHLSBYTE BILDET DAS hI-bYTE FR DAS dISPLACEMENT, DAS
lO-bYTE IST IMMER nULL. aUF DIESE aRT UND wEISE SPART MAN SICH
JEGLICHE aDREBERECHNUNG, DA DIE sPRUNGADRESSE AUF DIE PASSENDE
rOUTINE NICHT MEHR EINER tABELLE ENTNOMMEN WIRD, WIE ES BEI DEN
ERSTEN BEIDEN aLGORITHMEN DER fALL IST. aLLERDINGS MU NUN JEDE
rOUTINE ZUR bEHANDLUNG DER oPCODES IN GENAU EINER pAGE aBSTAND
HINTER DEM bEGINN DER VORHERIGEN rOUTINE ANFANGEN, DA DAS lO-bYTE
DES dISPLACEMENTS IMMER nULL IST. sO KOMMT ES AUCH, DAS FR DIESE
aRT DER eMULATION 64k sPEICHERPLATZ BENTIGT WERDEN, NMLICH FR
JEDEN oPCODE DES 6502 256 bYTES. dIE aUSFHRUNGSZEIT VON
aLGORITHMUS 3 BETRGT NUR NOCH 30 tAKTZYKLEN. eR IST ALSO UM 50%
SCHNELLER ALS aLGORITHMUS 2. dIESER gESCHWINDIGKEITSZUWACHS MACHT
SICH DEUTLICH BEMERKBAR, DENN ER SCHLGT JA BEI JEDEM 6502-oPCODE
NEU ZU bUCHE.
sOWEIT DAS wICHTIGSTE ZUR iNTERPRETATION DER bEFEHLSBYTES DES
6502. iST DIESES pROBLEM GELST, SO MU MAN SICH ALS nCHSTES
DARUM KMMERN, WO DIE rEGISTER DES ZU EMULIERENDEN pROZESSORS
"AUFBEWAHRT" WERDEN KNNEN. iN UNSEREM fALL IST DIESE fRAGE RECHT
EINFACH ZU BEANTWORTEN. dER 6502 HAT DREI rEGISTER (aKKUMULATOR,
x- UND y-rEGISTER) SOWIE EINEN 8-bIT-sTACKPOINTER UND DEN
pROGRAMMZHLER. dER 68000 BESITZT INSGESAMT 15 rEGISTER, WENN MAN
a7 ALS sTACKPOINTER EINMAL AUER aCHT LT. eS IST SOMIT KEINE
kUNST, DIESE rEGISTER IN dATEN- BZW. aDREREGISTERN DES 68000
UNTERZUBRINGEN. fR sTACKPOINTER UND pROGRAMMZHLER WIRD JEWEILS
EIN aDREREGISTER, FR DIE ANDEREN 6502-rEGISTER WERDEN DREI
dATENREGISTER VERWENDET, IN DENEN NUR DAS lO-bYTE GENUTZT WIRD.
sCHLIELICH MU DAS pROZESSORSTATUSREGISTER DES 6502 AUCH NOCH
IRGENDWO UNTERGEBRACHT WERDEN. eS IST IM ALLGEMEINEN NICHT
MGLICH, EINFACH DIE fLAGS DES 68000 ZU VERWENDEN, DA SICH DEREN
vERWENDUNG VON DER BEIM 6502 GERINGFGIG UNTERSCHEIDET. dARBER
HINAUS HAT DER 68000 IM gEGENSATZ ZUM 6502 Z.b. KEIN dEZIMALFLAG.
bEI DEN MEISTEN ARITHMETISCHEN oPERATIONEN BESTEHT IN DER
bEHANDLUNG DER fLAGS JEDOCH KEIN uNTERSCHIED. eS EMPFIEHLT SICH,
DIE fLAGS IN EINEM WEITEREN dATENREGISTER UNTERZUBRINGEN UND NUR
BEI bEDARF IN DAS ccr-rEGISTER DES 68000 ZU BERTRAGEN.
sCHLIELICH WIRD DES pROZESSORSTATUSREGISTER NICHT VON JEDEM
bEFEHL BEEINFLUT. nACHDEM BEI rECHENOPERATIONEN DIE fLAGS IM ccr
ENTSPRECHEND GESETZT WORDEN SIND, WERDEN SIE DANN WIEDER IN DAS
RESERVIERTE dATENREGISTER BERTRAGEN.
dURCH DIE BESCHRIEBENE vERWENDUNG DER rEGISTER BLEIBEN NOCH
EINIGE rEGISTER DEM pROGRAMMIERER ZUR vERFGUNG. sIE KNNEN DANN
dATEN AUFNEHMEN, DIE WHREND DER eMULATION STNDIG ZUR vERFGUNG
STEHEN SOLLEN, WIE Z.b. EIN pOINTER AUF DEN 64k aDRERAUM DES
6502 SOWIE AUF DIE 64k, DIE FR DEN eMULATOR RESERVIERT SIND, UND
IN DEM SICH DIE eMULATIONSROUTINEN FR DIE EINZELNEN oPCODES DES
6502 BEFINDEN. pRINZIPIELL IST ES NATRLICH AUCH MGLICH, DIE
rEGISTERINHALTE DES 6502 IM sPEICHER ABZULEGEN. aLLERDINGS DAUERN
zUGRIFFE AUF DEN sPEICHER VERHLTNISMIG LANGE, SO DA MAN KEINE
BRAUCHBARE gESCHWINDIGKEIT MEHR ERZIELEN KNNTE.
wILL MAN pROZESSOREN EMULIEREN, DIE MEHR rEGISTER AUFWEISEN, ALS
DER 6502 SIE BESITZT, SO MU MAN DIE aUFTEILUNG NEU BERDENKEN.
dIES IST BRIGENS BEI DEN MEISTEN ANDEREN pROZESSOREN DER fALL,
Z.b. BEIM 8080, z80 UND 8086. mAN SOLLTE JEDOCH DURCH GESCHICKTE
wAHL DER rEGISTERBELEGUNG STETS DAFR SORGEN, DA ABSOLUTE
zUGRIFFE AUF DEN sPEICHER MGLICHST VERMIEDEN WERDEN, DA SIE
BESONDERS ZEITAUFWENDIG SIND. bEIM c64-eMULATOR KONNTEN DIREKTE
zUGRIFFE AUF DEN sPEICHER VOLLKOMMEN UMGANGEN WERDEN. hIER WIRD
NUR BER aDREREGISTER AUF DEN aDRERAUM DES 6502-pROZESSORS
ZUGEGRIFFEN.
wILL MAN MIT DEM 68000 EINEN 8 bIT-pROZESSOR EMULIEREN, SO SIND
EINIGE aDRESSIERUNGSARTEN UND bEFEHLE RECHT LEICHT
NACHZUVOLLZIEHEN, ANDERE STELLEN JEDOCH pROBLEME DAR, BESONDERS
DANN, WENN ES DARUM GEHT, EINE MGLICHST SCHNELLE aUSFHRUNGSZEIT
ZU ERZIELEN. iCH MCHTE HIER ALS bEISPIEL DIE ABSOLUTE
aDRESSIERUNG DES 6502 ANFHREN. eIGENTLICH KEIN pROBLEM, SOLLTE
MAN MEINEN. aBER DENNOCH MU MAN HIER VORSICHTIG SEIN. wIE SIE
SICHER WISSEN, KANN DER 68000 AUF 16 bIT-wORTE NUR DANN
ZUGREIFEN, WENN SIE AUF GERADEN sPEICHERADRESSEN STEHEN. vERSTE
GEGEN DIESE rEGEL FHREN ZU EINEM aDREFEHLER, DER SICH IN DREI
bOMBEN PERSONIFIZIERT. bEI pROGRAMMEN, DIE FR DIESEN pROZESSOR
GESCHRIEBEN SIND, LIEGEN DIE bEFEHLSWORTE UND ABSOLUTEN aDRESSEN
DESHALB NATRLICH IMMER AUF GERADEN aDRESSEN. bEI 8 bIT
pROZESSOREN SIEHT DIE sACHE JEDOCH GANZ ANDERS AUS. dIE OBEN
ANGEFHRTE eINSCHRNKUNG FR ABSOLUTE aDRESSEN BESTEHT HIER
NICHT. eS KANN ALSO OHNE wEITERES PASSIEREN, DA DIE ABSOLUTE
aDRESSE, DIE AUF EINEN sPRUNGBEFEHL DES 6502 FOLGT, AUF EINER
UNGERADEN aDRESSE LIEGT. sOMIT IST ES NICHT MGLICH, DIE aDRESSEN
FR DIE ABSOLUTE aDRESSIERUNG MIT EINEM EINZIGEN bEFEHL AUS DEM
6502-aDRERAUM IN EIN rEGISTER DES 68000 ZU HOLEN. sOLCHE
aDRESSEN MSSEN HIER GRUNDSTZLICH IN ZWEI EINZELNE bYTES
AUFGESPALTEN WERDEN. dARBER HINAUS EXISTIERT NOCH EIN WEITERES
RGERNIS. iM gEGENSATZ ZUM 68000 WERDEN BEI 8 bIT pROZESSOREN
ABSOLUTE aDRESSEN MIT DEN lO-bYTE ZUERST IM sPEICHER ABGELEGT.
bEVOR MAN EINE SOLCHE aDRESSE VERWENDEN KANN, MSSEN ALSO ERST
DIE BEIDEN aDREBYTES IN DIE RICHTIGE rEIHENFOLGE GEBRACHT
WERDEN. mIT FOLGENDER rOUTINE KNNTE DANN DIE ABSOLUTE aDRESSE
AUS DEM sPEICHER IN EIN dATENREGISTER GEHOLT WERDEN:
move.b (a0)+,d0
asl #8,d0 aLGORITHMUS 4
move.b (a0)+,d0
ror #8,d0
dIE BEIDEN bYTES FR DIE ABSOLUTE aDRESSE WERDEN HIER EINZELN AUS
DEM sPEICHER GEHOLT UND DURCH sCHIEBEN UND rOTIEREN IN DIE
RICHTIGE rEIHENFOLGE GEBRACHT. sO WEIT, SO GUT. lEIDER BRAUCHEN
sCHIEBE- UND rOTIERBEFEHLE RELATIV VIEL zEIT. aLGORITHMUS 4 MAG
ZWAR LEICHT ZU DURCHSCHAUEN SEIN, BENTIGT JEDOCH 58 tAKTZYKLEN.
dIES IST BESONDERS UNGNSTIG, WENN MAN BEDENKT, DA DIE ABSOLUTE
aDRESSIERUNG RELATIV HUFIG VORKOMMT. iST MAN JEDOCH BEREIT, EIN
aDREREGISTER ZU OPFERN, SO KANN MAN DURCH EINE VLLIG
ANDERSARTIGE pROGRAMMIERUNG EINEN GROEN gESCHWINDIGKEITSVORTEIL
ERLANGEN:
move.b (a0)+,-(a2)
move.b (a0)+,-(a2) aLGORITHMUS 5
move (a2)+,d0
iN aLGORITHMUS 5 ZEIGT a2 AUF EINE BELIEBIGE GERADE aDRESSE IM
sPEICHER, AN DER DIE BEIDEN bYTES ZU EINEM wORT ZUSAMMENGESETZT
UND ANSCHLIEEND NACH d0 BERTRAGEN WERDEN. dIESE ETWAS
UNKONVENTIONELLE aRT DER pROGRAMMIERUNG MAG ZWAR UMSTNDLICH
ERSCHEINEN, SIE KOMMT DAFR JEDOCH MIT NUR 32 zYKLEN AUS, DENN
sCHIEBE- UND rOTIERBEFEHLE ENTFALLEN NUN VLLIG. lEIDER IST ES
NICHT MGLICH, DEN sTACKPOINTER, ALSO a7, SO ZU BENUTZEN, WIE IN
DIESEM bEISPIEL a2. dER sTACKPOINTER WIRD NMLICH GRUNDSTZLICH
UM EIN wORT, ALSO ZWEI bYTES, ERHHT ODER ERNIEDRIGT, AUCH WENN
bYTEOPERATIONEN DURCHGEFHRT WERDEN, SO DA ER SICH NICHT AN
sTELLE EINES ANDEREN aDREREGISTERS BENUTZEN LT.
dIE OBIGE pROBLEMATIK STELLT NUR EINES VON VIELEN pROBLEMEN DAR,
DIE MAN BEI DER eMULATION EINES 8 bIT pROZESSORS ZU BEWLTIGEN
HAT, WENN MAN UM JEDEN tAKTZYKLUS KMPFEN MU.
iST NUN ENDLICH DIE EIGENTLICHE eMULATION DES pROZESSORS
FERTIGGESTELLT, WOBEI NATRLICH FRAGLICH IST, WIEVIELE fEHLER SIE
NOCH ENTHLT, MU MAN ALS NCHSTES SEIN aUGENMERK AUF DIE
iMPLEMENTATION DES bETRIEBSSYSTEMS RICHTEN. sCHLIELICH IST ES
DAS ERSTE UND WICHTIGSTE pROGRAMM, DAS MAN ZUM lAUFEN BRINGEN
MU. lUFT DAS bETRIEBSSYSTEM UNTER DEM eMULATOR EINWANDFREI, SO
KANN MAN DAVON AUSGEHEN, DA SICH KAUM NOCH fEHLER IM pROGRAMM
BEFINDEN, DA ALLE bEFEHLE DES EMULIERTEN pROZESSORS IRGENDWANN
EINMAL AUSGEFHRT WERDEN DRFTEN.
nICHT JEDES bETRIEBSSYSTEM LT SICH GLEICH GUT AUF EINEN ANDEREN
cOMPUTER BERTRAGEN. dAS bETRIEBSSYSTEM DES c64 LT IN DIESER
hINSICHT EINIGES ZU wNSCHEN BRIG. iM GNSTIGSTEN fALL GIBT ES
FR JEDE WICHTIGE fUNKTION, DIE VOM sYSTEM ERLEDIGT WERDEN SOLL,
ALSO INSBESONDERE UM DIE bEHANDLUNG DER eIN- UND aUSGABE, EINE
fUNKTIONSNUMMER ODER EINEN sPRUNGVEKTOR. bEIM c64 GIBT ES ZWAR
EINE SOLCHE lISTE VON sPRUNGVEKTOREN, NUR IST SIE LEIDER NICHT SO
VOLLSTNDIG, WIE MAN ES GERNE HTTE. bESSER SIEHT ES DA BEI cp/m
UND ms-dos AUS. hIER GIBT ES WEITAUS MEHR fUNKTIONEN ALS BEIM
c64, SO DA EINE eMULATION ERLEICHTERT WIRD. dIES LIEGT NATRLICH
DARAN, DA DIESE BEIDEN sYSTEM OHNEHIN FR DEN eINSATZ AUF
UNTERSCHIEDLICHEN cOMPUTERN VORGESEHEN SIND, WAS BEIM c64 JA
NICHT UNBEDINGT DER fALL IST. wELCHES sYSTEM MAN AUCH IMMER
EMULIEREN WILL, ALLE aUFGABEN DIE BER SOLCHE vEKTOREN ODER
fUNKTIONSNUMMERN AUFGERUFEN WERDEN, MSSEN VOM eMULATOR BERWACHT
WERDEN. hIERZU EIN KONKRETES bEISPIEL: fR DIE aUSGABE VON
zEICHEN AUF DEM c64 EXISTIERT EIN sPRUNGVEKTOR bsout. dA DIE
bILDSCHIRMDARSTELLUNG DER zEICHEN AUF DEM st GRUNDSTZLICH ANDERS
REALISIERT WIRD ALS AUF DEM c64, MU AN DIESER sTELLE
EINGEGRIFFEN WERDEN. dIE aUSGABE AUF DEM bILDSCHIRM DARF NICHT SO
ERFOLGEN, WIE ES BEIM c64 GESCHEHEN WRDE, DENN DANN WRDE SICH
AUF DEM bILDSCHIRM DES st GAR NICHTS TUN. sIE MU IN EINER
EIGENEN aUSGABEROUTINE PROGRAMMIERT WERDEN. dAS GLEICHE GILT FR
VIELE ANDERE fUNKTIONEN DES bETRIEBSSYSTEMS AUF DEM c64.
nATRLICH MU MAN DARAUF ACHTEN, DA DIE rEGISTER, DIE FR DEN
bETRIEB DES eMULATORS WICHTIGE dATEN ENTHALTEN, NICHT IN DEN
EIGENEN rOUTINEN VERNDERT WERDEN BZW. NUR dATEN ERHALTEN, DIE
VOM bETRIEBSSYSTEM DES c64 ERWARTET WERDEN. dIE load-rOUTINE SOLL
Z.b. DAS eNDE DES GELADENEN pROGRAMMS ALS rCKGABEWERT IN DEN
iNDEXREGISTERN LIEFERN.
wIE SCHON ANGESPROCHEN, MU DIE eMULATION DURCH GEEIGNETE
pROGRAMMIERUNG SO GESTALTET WERDEN, DA SIE MGLICHST SCHNELL
ERFOLGT. nEBEN ENTSPRECHENDER pROGRAMMIERUNG DES eMULATORS GIBT
ES NOCH WEITERE mGLICHKEITEN, DIE gESCHWINDIGKEIT VON pROGRAMMEN
AUF DEM st ZU ERHHEN, BESONDERS DANN, WENN ES SICH NICHT UM
pROGRAMME HANDELT, DIE IN gem-uMGEBUNG LAUFEN. iN DIESEM fALL IST
ES NMLICH MGLICH, vEKTOREN, WIE DEN EVNT_TIMER-vEKTOR DES gem
AUF EINEN rts-bEFEHL UMZUBIEGEN, SO DA DIE ZUGEHRIGEN rOUTINEN,
DIE WHREND EINES iNTERRUPTS AUSGEFHRT WERDEN, NICHT MEHR
ANGESPRUNGEN WERDEN. dIES HAT UNTER ANDEREM ZUR fOLGE, DA DIE
uHR DES kONTROLLFELDS NICHT MEHR LUFT, WENN DER eMULATOR AKTIV
IST. dA MAN SIE BEIM c64-eMULATOR OHNEHIN NICHT BENTIGT, IST
DIES ABER KEIN bEINBRUCH. dER lOHN DAFR IST EINE ERHHTE
gESCHWINDIGKEIT. wEITERHIN KANN ES LOHNENSWERT SEIN, DIE mAUS
ABZUSCHALTEN, ODER BESSER NOCH ALLE aKTIONEN, DIE DEN
tASTATURPROZESSOR BETREFFEN, SELBST ZU BERNEHMEN.
zUM sCHLU MCHTE ICH NOCH AUF DIE fRAGE EINGEHEN, INWIEWEIT
BERHAUPT EINE kOMPATIBILITT, INSBESONDERE ZUM c64, AUF EINEM
ANDEREN cOMPUTER ZU ERREICHEN IST. BERLEGT MAN SICH, WAS DEN c64
SO ERFOLGREICH GEMACHT HAT, SO SIND DIES IN ERSTER lINIE DIE
UNZHLIGEN sPIELE, DIE FR DIESEN cOMPUTER EXISTIEREN. gERADE
sPIELE REIZEN DIE SPEZIELLEN fHIGKEITEN DES c64 (sPRITES,
rASTERZEILEN-iNTERRUPT, tIMER) BESONDERS AUS. dA DIE hARDWARE DES
st KEINE dARSTELLUNG VON sPRITES ERLAUBT, UND DIESE gRAFIKOBJEKTE
NICHT NUR AUS zEITGRNDEN UNMGLICH DURCH sOFTWARE NACHGEBILDET
WERDEN KNNEN, IST DIE eMULATION VON sPIELEN ALSO IN fRAGE
GESTELLT. wEITERHIN IST ES AUS zEITGRNDEN NICHT MGLICH, DIE
iNTERRUPTROUTINEN DES c64 DURCH DEN eMULATOR AUSFHREN ZU LASSEN,
DA DANN DIE aRBEITSGESCHWINDIGKEIT MERKLICH NACHLASSEN WRDE.
sCHLIELICH SIND GERADE iNTERRUPTS EINE BESONDERS ZEITKRITISCHE
aNGELEGENHEIT, DA SIE SEHR HUFIG AUFTRETEN.
dAMIT SIND NUN ABER ALLE WESENTLICHEN eINSCHRNKUNGEN BEI DER
eMULATION AUFGEFHRT. eIN gROTEIL DER pROGRAMME, DIE NICHT AUF
DIE GENANNTEN mGLICHKEITEN ZURCKGREIFEN, KANN VOM c64-eMULATOR
VERARBEITET WERDEN. aUCH HOCHAUFLSENDE gRAFIK IST IN EINEM
GEWISSEN mAE MGLICH. aLLERDINGS MU DIE bITMAP FR DIE gRAFIK
IM bEREICH VON $e000-$ffff, ALSO UNTER DEM bETRIEBSSYSTEM LIEGEN,
DAMIT DER eMULATOR ERKENNT, WANN DER gRAFIKSPEICHER ANGESPROCHEN
WIRD. dA DIE BERPRFUNG DES bILDSCHIRMSPEICHERS UND DER bITMAP
RELATIV VIEL zEIT IN aNSPRUCH NIMMT, HAT EIN vERZICHT AUF DIESE
aUSGABEKONTROLLE EINE WEITERE eRHHUNG DER gESCHWINDIGKEIT ZUR
fOLGE.
nEBEN DER eMULATION DES c64 SIND AUCH EINE dRUCKER- UND EINE
fLOPPY-eMULATION, DIE DER 1541 WEITGEHEND ENTSPRICHT, IM eMULATOR
ENTHALTEN. dAS pROGRAMM LUFT BRIGENS IN NIEDRIGER UND IN HOHER
aUFLSUNG, SO DA JEDER st-bESITZER SICH NUN SEINEN EIGENEN c64
VON dISK LADEN KANN.