Recenze - Navigátor

12 Assembler
41 Encyklopedie
30 Hardware
15 Hra
12 Párty
7 Programování
12 Sofware

HRA

Lunar-Lander Game
Herní styl Space
Multiplayer Bez multiplayeru
Rok vydání 1985
Programátor David L. Heiserman
Grafik (Unknown)

INTRO

Assembler 3. část - Začínáme s příkazy (LDA,LDX,LDY,STA,STX,STY,RTS)

1. Registry

Strojový kod na Commodore 64 má pouze 3 registry. Nejpouživanější registr se nazývá AKUMULATOR neboli registr A. Základní použití registru A je toto : LDA #$10, což znamená, že do registru A načteme hodnotu 10 (hexadecimálně.) . V turboassembleru (dále jen tass.) můžeme použít ještě i syntax LDA #16 (hezadecimálně #$10) nebo LDA %00001000. (binárně).
Další registry jsou X a Y, kde syntax pro načítání hodnot do těchto registrů je podobný. LDX #$10 a LDY #$10.

Opačnou instrukcí je instrukce STA (STX,STY). Příkaz STA (Store Axxumulator) uloží obsah akumulátoru (LDA) na patřičné místo v paměti C64.
Příkaz STA,STX,STY pracují s adresami. LDA,LDX a LDY s hodnotami. Budeme li chtít uložit hodnotu , kterou máme cv akumulátoru například na obrazovku, použijeme následující zápis. Všechny programy budu psát následovně jako spustitelné v tass.

Tip 1

Standartně se obrazovka nachází na adresách $0400 - $07e7. Obrazovka má 40 znaků na řádku a 24 řádků. Schéma obrazovky znakové je v obrázku. Každý znak obrazovky má ale i svoji barevnou adresu. Barevná RAM video obrazovky se nachází od adres $d800 - $dbe7

Mapa obrazovky (VIDEO RAM)

Mapa barevné obrazovky (COLOR RAM)

Výše uvedený prográmek vypíše na obrazovku malé zelené "v". Pro následující pokusy si budeme hrát pouze s videoram, protože na té se naše hračičky okamžitě projeví a můžeme si výsledek okamžitě kontrolovat.
Načítat a ukládat do paměti můžeme samozřejmě i pomocí X a Y registru .... LDX #$16 , STX $0400 nebo LDY #$16 a STY $0400.

Barvy a jejich kódy
0 černá   8 světlě hnědá  
1 bílá   9 hnědá  
2 červená   10 růžová  
3 zelenomodrá   11 tmavě šedá  
4 fialová   12 šedá  
5 tmavě zelená   13 světle zelená  
6 modrá   14 světle modrá  
7 žlutá   15 světle šedá  

2. Ostatní způsoby načítání dat a adresace

Příkazy pro načítání a ukládání dat budeme probírat zároveň. První způsob načítání dat jsme probrali. Je to "natvrdo" ukládání hodnot do registrů. Když budeme chtít zjistit obsah určité adresy v paměti, použijeme příkaz LDA $adresa. Tento způsob je možný použít v tass i jako LDA adresa, kde "adresa" je ukazatel na label. Ukázka níže:

Program načte hodnotu z adresy $a000 a uloží na obrazovku. Druhá část programu načte hodnotu z "adresy" hodnota a uloží opět na obrazovku.
Výhoda používání dat v tass je v tom, že máme neustálý přehled o našich proměnných. Načítat hodnoty do registrů a ukládání může být praktikováno i na nultou stránku . Nultá stránka je místo v paměti počítače od adresy $00 - $ff. Pak vypadá program následovně.

LDA $05 Do A načteme hodnotu z adresy $05 v nulté stránce
STA $FA Uložíme akumulátor na adresu $FA opět v nulté stránce
RTS Ukončení programu. (Return to subroutine)

Další použití jak načítat data a ulkádat jsou následující:

Syntax LDA $adresa,X ... nebo LDA $adresa,Y funguje tak, že k adrese se přičte hodnota X (Y) a čte se z této adresy. Můžete si zkusit měnit hodnotu X ve zdrojovém kódu a uvidíte, co se děje. Tento samý syntax platí i pro nultou sránku.

LDX #3 do X hodnota 3
LDA $FA,x načteme do akumulátoru data z adresy $FD ($fa+3)

Není možno použít STX $adresa,X nebo STY $adresa,Y a obráceně. Příkaz s ,X nebo ,Y je možno použít jen pro STA !!

3. Nepřímé adresování

Nepřímé adresování je nesložitější co se týče pochopení, avšak neučínnější, co se týče programování. Někteří programátoři jiných platforem (ZX Spectrum, ATARI) dokonce chápou použití nulté stránky jako "satisfakci" za málop registrů. Díky nepřímému adresování má commodore 64 obrovské možnosti adresace. Důležité je, že tento způsob adresování je na málo "taktů" (později) ... tudíž rychlé.

Program pracuje následovně.

1. Na adresu $fa a $fb se uloží adresa $0400 v pořadí spodní bajt (LO-BYTE) a horní bajt (HI-BYTE) adresy. Důležité je pochopit, že používáme-li nepřímou adresaci s nultou stránkou, je nutnost mít adresu uloženou v paměti LO a pak HI byte. (výpis z monitoru)

.d $fa 00 lo-byte
.d $fb 04 hi-byte

příkaz STA ($fa),y uloží data tak, že z adresy FA a jedné po ní následující (FB) složí adresu a s touto poté pracuje.
I tam podobně se chová druhá částa programu.

lda #<test Zápis turboassembleru pro načtení LO-BYTE adresy
sta $a4 Uložit A na adresu $a4
lda #>test Zápis turboassembleru pro načtení HI-BYTE adresy
sta $a5 Uložit A na adresu $a5

Tímto získáme spodní a horní byte adresy "TEST" a pracujeme s ní podobně jako s STA ....
LDA ($a4),y provede opět to, že spodní bajt adresy TEST uloží na adresu A4 a vrchní bajt na A5.
Poté si příkaz složí adresu z adres A4 a A5 ve formátu nejdříve HI (A5) a poté LO (a4).

4.Tabulka možných zápisů příkazů

syntax
kod
cyklů bytů syntax
kod
cyklů bytů
LDA #$ xx
A9
2 2 na
   
LDA $ xxxx
AD
4 3 STA $ xxxx
8D
4 3
LDA $ xx
A5
3 2 STA $ xx
85
3 2
LDA ($ xx , x)
A1
6 2 STA ($ xx , x)
81
6 2
LDA ($ xx) , y
B1
5 2 STA ($ xx) , y
91
6 2
LDA $ xx , x
B5
4 2 STA $ xx , x
95
4 2
LDA $ xxxx , x
BD
4 3 STA $ xxxx , x
9D
5 3
LDA $ xxxx , y
B9
4 3 STA $ xxxx , y
99
5 3
 
   
   
LDX #$ xx
A2
2 2
na
   
LDX $ xxxx
AE
4 3 STX $ xxxx
8E
4 3
LDX $ xx
A6
3 2 STX $ xx
86
3 2
LDX $xxxx , y
BE
4 3 na
   
 
     
   
LDY #$ xx
A0
2 2 na
   
LDY $ xxxx
AC
4 3 STY $ xxxx
8C
4 3
LDY $ xx
A4
3 2 STY $ xx
84
3 2
LDY $ xx , x
B4
4 2 STY $ xx , x
94
4 2
LDY $ xxxx , y
BC
4 3 na
   

 

5. RTS - Return to subroutine

Příkaz RTS je zakončení programu nebo podprogramu. Použití je valmi jasné a jednoduché.

Nový příspěvek k článku

podpis :
První znak podpisu musí být vykřičník, jinak se příspěvek neodešle (ochrana proti spamu)

Advert

Programmed by PCH of UNREAL, Hardware support by RAY of UNREAL. Beta test and bugs guru SILLICON
Unreal 2014 - Czech republic