MOS 6502: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med 'MOS 6502 är en av de mest ikoniska mikroprocessorerna från 1970-talet och var central i datorrevolutionen. Den drev maskiner som Apple I, Apple II, Atari-spelkonsoler, Commodore 64 och många andra. Här är en mer detaljerad titt på MOS 6502: ==== Grundläggande Specifikationer ====    - Arkitektur**: 8-bitars processor.    - Klockfrekvens: Ofta 1 MHz, men varierar beroende på implementering.    - Adressbuss: 16 bitar, vilket ger möjlighet att adressera up...')
 
Ingen redigeringssammanfattning
Rad 68: Rad 68:
''MOS 6502 har ett rykte för att vara enkel att programmera tack vare dess logiska instruktionsuppsättning och var därför mycket populär för hemdatorer och spelkonsoler under 70- och 80-talet. Dess inverkan på datorindustrin kan inte underskattas; den hjälpte till att demokratisera datorteknik och gjorde det tillgängligt för en bredare publik.''
''MOS 6502 har ett rykte för att vara enkel att programmera tack vare dess logiska instruktionsuppsättning och var därför mycket populär för hemdatorer och spelkonsoler under 70- och 80-talet. Dess inverkan på datorindustrin kan inte underskattas; den hjälpte till att demokratisera datorteknik och gjorde det tillgängligt för en bredare publik.''


= Hello world i asm för datorer som hade 6502
== Apple II ==
```assembly
  LDX #0            ; Ladda indexregistret X med noll
LOOP:
  LDA MESSAGE,X    ; Ladda ackumulatorn med nästa tecken från meddelandet
  BEQ DONE          ; Om nollterminatorn har nåtts, avsluta programmet
  JSR $FDED        ; Anropa ROM-funktionen för att skriva ut tecknet på skärmen
  INX              ; Öka indexregistret för att gå till nästa tecken i meddelandet
  JMP LOOP          ; Hoppa tillbaka till början av loopen
DONE:
  BRK              ; Avsluta programmet
MESSAGE:
  .text "Hello, World!",0  ; Meddelandet att skriva ut, avslutas med en nollterminator
== Atari 8 Bitars ==
```assembly
; "Hello, World!" program for Atari 800
; Load address: $2000
        *= $2000    ; Load address
START  LDX #0      ; Load X register with 0
LOOP    LDA MESSAGE,X ; Load accumulator with the next character from the message
        BEQ DONE    ; If the null terminator is reached, exit the program
        JSR $E456  ; Call OS subroutine to print the character on the screen
        INX        ; Increment X to point to the next character in the message
        JMP LOOP    ; Jump back to the beginning of the loop
DONE    SWI        ; Exit the program
MESSAGE .text "Hello, World!",0  ; The message to print, terminated with a null character
== C64 ==
```assembly
; "Hello, World!" program for Commodore 64
; Load address: $1000
        *= $1000    ; Load address
START  LDX #0      ; Load X register with 0
LOOP    LDA MESSAGE,X ; Load accumulator with the next character from the message
        BEQ DONE    ; If the null terminator is reached, exit the program
        JSR $FFD2  ; Call KERNAL subroutine to print the character on the screen
        INX        ; Increment X to point to the next character in the message
        JMP LOOP    ; Jump back to the beginning of the loop
DONE    BRK        ; Exit the program
MESSAGE .text "Hello, World!",0  ; The message to print, terminated with a null character




[[Kategori:Hårdvara]]
[[Kategori:Hårdvara]]
[[Kategori:Cpu]]
[[Kategori:Cpu]]

Versionen från 18 november 2023 kl. 10.43

MOS 6502 är en av de mest ikoniska mikroprocessorerna från 1970-talet och var central i datorrevolutionen. Den drev maskiner som Apple I, Apple II, Atari-spelkonsoler, Commodore 64 och många andra. Här är en mer detaljerad titt på MOS 6502:

Grundläggande Specifikationer

   - Arkitektur**: 8-bitars processor.

   - Klockfrekvens: Ofta 1 MHz, men varierar beroende på implementering.

   - Adressbuss: 16 bitar, vilket ger möjlighet att adressera upp till 64 KB minne.

Instruktionsuppsättning

   - MOS 6502 har en enkel men effektiv uppsättning av instruktioner. Den stöder ungefär 56 operationer (t.ex., ADD, SUB, LOAD, STORE, etc.), men tack vare olika adresseringslägen kan dessa bli representerade av över 150 olika opcode-kombinationer.

Adresseringslägen

   - Den stöder flera adresseringslägen, inklusive omedelbar, zeropage, absolut, indirekt, och relativ adressering, bland andra.

Register

   - A (ackumulator)**: Används för de flesta aritmetiska och logiska operationer.

   -X och Y Indexregister**: Hjälper till med vissa adresseringslägen och loop operationer.

   - Statusregister: Innehåller flaggor för saker som noll-resultat, carry, interrupt disable, decimal mode, etc.

   - Stackpekare: För styrning av stacken.

   - Programräknare: Håller koll på den nästa instruktionen som ska exekveras.

Interruptions

   - Har stöd för maskerbara avbrott (IRQ) och icke-maskerbara avbrott (NMI), samt en RESET-interruption för systemåterställning.

Övriga Egenskaper

   - En av de mest framstående egenskaperna hos 6502 var dess pris. Den introducerades till en mycket lägre kostnad än konkurrerande processorer vid den tiden.

   - Den har en inbyggd klockgenerator och behöver bara en enkel extern oscillator.

Variantioner och Ättlingar

   - Många varianter av 6502 utvecklades, inklusive versioner med ytterligare instruktioner eller förbättrad prestanda.

6502: Den ursprungliga versionen av processorn.

6503 till 6507:

Dessa var versioner av 6502 med färre anslutningsstift och därmed en mindre adressbuss. Till exempel hade 6507 bara 13 adressstift, vilket begränsade den till att kunna adressera 8 KB minne. 6507 användes i Atari 2600-spelkonsolen.

6510

En förbättrad version av 6502 med en 8-bitars I/O-port och några andra mindre förändringar. Denna version användes i Commodore 64.

8502

Används i Commodore 128 och var en förbättrad version av 6510, med möjlighet att köras i både 1 MHz och 2 MHz-lägen.

65C02

En CMOS-version av 6502 som införde flera nya instruktioner, förbättrade vissa av de ursprungliga instruktionerna och rättade till några av 6502:ans "buggar". Denna version användes i bland annat Apple IIc och Enhanced Apple IIe.

65CE02

En vidareutveckling av 65C02 med ytterligare förbättringar och utökade instruktioner.

65816/65802

16-bitars utvidgningar av 6502. De kunde köras i 8-bitars kompatibilitetsläge eller 16-bitars infödingsläge. Denna version användes i Super Nintendo Entertainment System (SNES) och Apple IIGS.

Rockwell R6500

En variant framställd av Rockwell som hade några mindre förändringar jämfört med den ursprungliga 6502.

Synertek SY6510

En variant producerad av Synertek.

Kompatibilitet: Även om kärnarkitekturen var densamma och maskinkod skriven för 6502 i stort sett skulle fungera på en R6500, kunde de specifika integrerade funktionerna i vissa R6500-varianter kräva särskild kodning eller systemdesign för att dra full nytta av.


MOS 6502 har ett rykte för att vara enkel att programmera tack vare dess logiska instruktionsuppsättning och var därför mycket populär för hemdatorer och spelkonsoler under 70- och 80-talet. Dess inverkan på datorindustrin kan inte underskattas; den hjälpte till att demokratisera datorteknik och gjorde det tillgängligt för en bredare publik.

= Hello world i asm för datorer som hade 6502

Apple II

```assembly

  LDX #0            ; Ladda indexregistret X med noll

LOOP:

  LDA MESSAGE,X     ; Ladda ackumulatorn med nästa tecken från meddelandet
  BEQ DONE          ; Om nollterminatorn har nåtts, avsluta programmet
  JSR $FDED         ; Anropa ROM-funktionen för att skriva ut tecknet på skärmen
  INX               ; Öka indexregistret för att gå till nästa tecken i meddelandet
  JMP LOOP          ; Hoppa tillbaka till början av loopen

DONE:

  BRK               ; Avsluta programmet

MESSAGE:

  .text "Hello, World!",0  ; Meddelandet att skriva ut, avslutas med en nollterminator


Atari 8 Bitars

```assembly

"Hello, World!" program for Atari 800
Load address
$2000
       *= $2000    ; Load address

START LDX #0  ; Load X register with 0 LOOP LDA MESSAGE,X ; Load accumulator with the next character from the message

       BEQ DONE    ; If the null terminator is reached, exit the program
       JSR $E456   ; Call OS subroutine to print the character on the screen
       INX         ; Increment X to point to the next character in the message
       JMP LOOP    ; Jump back to the beginning of the loop

DONE SWI  ; Exit the program

MESSAGE .text "Hello, World!",0  ; The message to print, terminated with a null character

C64

```assembly

"Hello, World!" program for Commodore 64
Load address
$1000
       *= $1000    ; Load address

START LDX #0  ; Load X register with 0 LOOP LDA MESSAGE,X ; Load accumulator with the next character from the message

       BEQ DONE    ; If the null terminator is reached, exit the program
       JSR $FFD2   ; Call KERNAL subroutine to print the character on the screen
       INX         ; Increment X to point to the next character in the message
       JMP LOOP    ; Jump back to the beginning of the loop

DONE BRK  ; Exit the program

MESSAGE .text "Hello, World!",0  ; The message to print, terminated with a null character