Movatterモバイル変換


[0]ホーム

URL:


Hoppa till innehållet
Wikipedia
Sök

MOS Technology 6502

Från Wikipedia
(Omdirigerad från6502)
MOS 6502
W65C02

MOS Technology 6502 är en8-bitars CPU skapad avMOS Technology år 1975. Chipet liknar till stora delar6800-processorn som tillverkades avMotorola, men kostade mycket mindre. Processorn har tillverkats i många olika varianter, som har använts i diverse hemdatorer och tv-spel, bland annat följande:Commodore PET,Commodore VIC-20,Commodore 64:s diskettstationer,Apple II,Atari 2600 ochNintendo Entertainment System (där kalladRP2A03).

Historia

[redigera |redigera wikitext]

6502 designades främst av det ingenjörslag som ansvarade förMotorola 6800, strax efter att de sagt upp sig från moderföretaget och bildatMOS Technology. Deras första modell hette6501, och var 6800-kompatibel i den grad att man utan modifikation kunde använda den på moderkort ritade för 6800. Programmen behövde däremot skrivas om.Motorola svarade med att stämma MOS, vilket ledde till att de lade ner 6501 och började arbeta med en ny design.

Resultatet blev 6502, som till skillnad från föregångaren inte kunde användas direkt på samma moderkort som 6800. För att stimulera ett intresse för den nya processorn konstrueradeChuck Peddle på MOS Technology enmikrodator som kalladesKIM-1. Den sålde bra, och inspirerade liknande initiativ baserade på 6502.

En stor anledning till den framgång som 6502 skulle komma att skörda var prissättningen: medan konkurrentprodukterna Motorola 6800 ochIntel 8080 såldes för 179USD, prissattes 6502 när den släpptes i september1975 till 25 USD. Den enorma prisskillnaden gjorde att få hade förtroende för processorn i början, men närIntel och Motorola raskt därefter sänkte sina priser till 79 USD så tog marknaden notis om allvaret i prissättningen.

Den första användningen av 6502 som vände sig till hemanvändare snarare än elektronikentusiaster varAtari 2600, känd som det förstatv-spelet. Denna maskin använde sig av en6507-processor, som endast kunde adressera 8KibyteRAM. Den rena 6502 användes i ett flertal efterföljande datorer av bland annatApple,Commodore ochAtari. Den direkta efterföljaren till 6502 var6510, och användes iCommodore 64.

Nintendos förstaspelkonsol,Famicom (Japan) ellerNintendo Entertainment System (Amerika,Europa), använde två specialtillverkade varianter av 6502, nämligen2A03 iNTSC-system och2A07 iPAL-diton.

Teknisk beskrivning

[redigera |redigera wikitext]

6502 har ett generellt dataregister (ackumulatorn A), två indexregister (X och Y), samt programräknare, stackpekare och ett statusregister. Alla dessa register är åtta bitar stora, utom programräknaren som är uppdelad i två bytes (adressrymd 0x0000 – 0xFFFF). Endast ackumulatorn och indexregistren kan manipuleras direkt med load- och store-instruktioner, och endast på ackumulatorn kan man utföra alla operationer.

Bitarna i statusregistret har följande betydelse:

BitBetydelse
0Carry-biten. Sätts till 1 om resultatet av en instruktion som stödjer carry överskrider 8 bitar. Kan sättas manuellt med CLC- och SEC-instruktionerna.
1Zero-biten. Sätts till 1 om resultatet av en instruktion är noll.
2IRQ Disable. Stänger av all avbrottshantering om biten är satt. Manipuleras med CLI- respektive SEI-instruktionerna.
3Decimal mode. Försätter processorn iBCD-läge. Manipuleras med CLD- respektive SED-instruktionerna.
4BRK command. Sätts av instruktionen BRK, triggar ett non-maskable interrupt.
5Oanvänd.
6Overflow-biten. Håller reda på om en räkneoperation involverande negativa tal har hamnat utanför talrymden.
7Negative-biten. Sätts om högsta biten i resultatet av en instruktion är satt.

Som en följd av 8-bitarsarkitekturen ärRAM indelat ipages om 256 bytes. Den första av dessa pages är speciell och kallas förzero page. Minnesadresserna i zero page kan bland annat användas som en slags adressregister, vilket möjliggör mer avancerade operationer. Se exempel nedan.

Programexempel

[redigera |redigera wikitext]

Addition i 16 bitar

[redigera |redigera wikitext]

Följandeassemblerprogram för 6502 adderar två 16bitar stora tal, med carry-flagga:

lda TAL1_LO      ; Lägg lägsta byten av första talet i ackumulatorregistretclc              ; Rensa carry-flaggan innan additionadc TAL2_LO      ; Addera ackumulatorvärdet med lägsta byten i andra taletsta RESULTAT_LO  ; Lagra nya ackumulatorvärdet i lägsta byten av resultatetlda TAL1_HI      ; Lägg högsta byten av första talet i ackumulatornadc TAL2_HI      ; Addera, men rensa inte carry-flaggan denna gångsta RESULTAT_HI  ; Lagra ackumulatorn i högsta byten av resultatet

De tvåbytes som utgör summan återfinns då på minnespositionerna RESULTAT_LO respektive RESULTAT_HI. Carry-flaggan motsvarar den 17:e biten av resultatet.

Minnespekare

[redigera |redigera wikitext]

Följandeassemblerprogram för 6502 fyller minnesområdet mellan 0x1000 och 0x2000 med värdet 0xFF, med hjälp av en pekare izero page:

    lda #$00     ; Sätt adress $10 till att peka på $1000.    ldx #$10     ; -    sta $10      ; Notera LSB-ordning på bytes i adressen.    stx $11      ; -    ldy #$00     ; Sätt y-index till noll.loop:    lda #$ff     ; Sätt ackumulatorn till $ff.    sta ($10),y  ; Lagra ackumulatorvärdet på adressen som ($10) pekar på.    lda $10      ; Läs den låga byten av pekaradressen till ackumulatorn.    clc          ; Rensa carry.    adc #$01     ; Öka värdet.    sta $10      ; Lagra nya värdet.    lda $11      ; Läs den höga byten av pekaradressen till ackumulatorn.    adc #$00     ; Addera eventuell carry-bit från föregående addition.    sta $11      ; Lagra nya värdet.    cmp #$20     ; Är den höga byten $20?    bne loop     ; Om inte, hoppa till loop.

Externa länkar

[redigera |redigera wikitext]
MOS6502-serie

6502 |6507 |6510 |65C816

Hämtad från ”https://sv.wikipedia.org/w/index.php?title=MOS_Technology_6502&oldid=54010668
Kategori:

[8]ページ先頭

©2009-2025 Movatter.jp