Olen päättänyt, että astun assemblyn maailmaan (konekieli, assy, mitä niitä nimiä nyt onkaan..). Tässä vain on yksi suuri este, en tajua tuosta yhtään mitään :D BASIC menee minulta hyvin ja täältä foorumilta löytyy hyviä ohjeita BASICillä koodamiseen/leikkimiseen, mutta assysta ei ole tietääkseni mitään. Olisi kivaa jos joku tekesi tähän jonkun tutoriaalin millä pääsee alkuun.
Assy ohjelma jota ehkä meinaan käyttää on sen niminen kuin Assembler. Löytyy NT Rautasen sivuilta. Siitä ihan ensimmäiseksi yksi kysymys, eli kun käynnistän sen ohjelman niin se kysyy tällaista: UUSI OSOITE ?. Tietääkseni tähän kuuluu laittaa jokin numero sarja, mutta valaiskaa minua hieman.
Toivoisin, että joku myös kirjoittaa tähän vaikka sellaisen koodin millä saa tuollaisen latausruudukon aikaiseksi, eli se missä vilkkuu sateenkaaren värit. Tietysti saa myös muita yksinkertaisia koodin pätkiä laittaa.
Kiitän jo etukäteen kaikkia vastanneita
okei kaivoin sivun esiin ja sanon heti että ei !!!
Assy ohjelma joka käyttää desimaali lukuja on ehdottomasti kuvasta pihalla!!!
hex koodin on ainoa oikea tapa lähestyä Assyä
muuten menee metsää niin että pää kolisee...
ensimmäisenä kannattaa ottaa selvää binääri luvuista
mitä ne on ja miten niillä muodostetaan numeroita
toiseksi tärkein on Hex numeriinen järjestelmä
nämä toimivat konekielessä parhaiten yhteen kuten tulet varmasti huomaamaan
kunnon softa käyttöön heti alusta alkaen
http://turbo.style64.org/tmp.php (http://turbo.style64.org/tmp.php)
ja noista TMP v1.2 (for plain c64)
väripalkki rutiini on tuolla jo jossain valmiina ja on todella yksin kertainen
http://www.com64.net/foorumi/index.php?topic=496.0 (http://www.com64.net/foorumi/index.php?topic=496.0)
yritän nyt selittää Binäärilukuja ja HExsoja...
decimaali ja Hexa lukujen erot
siinä missä decimaali luvut ovat 10 osaisia
0,1,2,3,4,5,6,7,8,9,"10"...
Hexsaluvut ovat 16 osaisia 0-F
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,"10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F"...
miksi HExat ovat parempia kuin decimaalit
konekielessä joutuu paljon käsitteleen binääreitä
C64 tapauksessa Binäärit ovat 8bittisiä lukuja
4bit luku Hex Dec
xxxx0000 = 00 00
xxxx0001 = 01 01
xxxx0010 = 02 02
xxxx0011 = 03 03
xxxx0100 = 04 04
xxxx0101 = 05 05
xxxx0110 = 06 06
xxxx0111 = 07 07
xxxx1000 = 08 08
xxxx1001 = 09 09
xxxx1010 = 0A 10
xxxx1011 = 0B 11
xxxx1100 = 0C 12
xxxx1101 = 0D 13
xxxx1110 = 0E 14
xxxx1111 = 0F 15
Edit: korjattu taulukko puuttui nolla ja yksi binääri luku:
ja niin edelleen aina bin %11111111 ,hex $FF ,dec 255 lukuihin asti
00000001 = 01 01
00000010 = 02 02
00000100 = 04 04
00001000 = 08 08
00010000 = 10 16
00100000 = 20 32
01000000 = 40 64
10000000 = 80 128
kuten yllä huomaat binäärinä Hex luku on paljon helpompi ymmärtää
Hexsa luku on kuin kaksi eri osaa ylimmät 4 bitti ja alimmat 4 bittiä
yhteen lasku tosin tekee hommasta ööö hieman vaikeampaa siksi
meillä on Hex taulukot tai laskukoneet Ubuntussa esim. laskin asetuksista "view"
ohjelmointi moodiin niin vaihtamalla bin,hex,dec moodia käännös ilmaantuu
Hex taulukko löytyy melkein jokaisesta ohjelmointia käsittelevästä kirjasta
eikä ole vaikea tehdä itsekkään suosittelen lämpimästi taulukon pitämistä esillä
kaikkea en tähän saa nyt mahdutettua mutta muutama sana vielä käskyistä
Basic
a=1
a=a+1
poke 53280,a
assy
LDA käskyllä annetaan arvo rekisterille A
"load a"
LDA #$01 ;lataamme A rekisteriin arvon 1
CLC ;C lippu on binääri rekisteri jolla voi olla arvo 0 tai 1
; arvo on 0 jos laskennassa ei ole syntynyt ylivuotoa A>256
ADC #01 ; lisäämme A rekisterin arvoa 1
STA $D020 ;tulostamme yhteenlaskun tuloksen A rekisteristä taustavärin arvoksi (53280)
X Y rekistereillä ei tälläisiä laskuihin kykeneviä käskyjä ole
INX lisää X arvoa yhdellä ja DEX vähentää yhdellä sama toimii Y rekisterillä
näille rekistereillä on omat "lataus ja tulostus käskyt" jotka ovat identtisiä A rekisterin käytöstä
LDX
LDY
STX
STY
Y ja X rekistereitä voidaan käyttää A rekisterin jatkona
LDA $1000,X ; A=4096+X
Rekistereitä voidaan myös siirtää keskenään
TAX ; X=A
TXA ; A=X
TAY ; Y=A
jos tarvitsee selittää pidemmälle niin kysy...
ahh..
nyt kun aamu koitti ja pääkin hieman enemmän toimii niin hokasin tuon raidoitus jutunkin xD
yksinkertaisin tapa tehdä lataus raidat... nyt olen ihan muistini varassa enkä tätä ehdi tarkistamaan
mutta joskun tuollaiset tein niin että lisäsin Brake rutiinin osoitetta
Nolla sivulla osoittamaan omaa rutiiniani ja sieltä oikeaan rutiiniin
BRAKE rutiinin hyppy osoite nollasivulla
0316-0317
jos oma rutiini on esim $C000 paikassa mikä on hyvä paikka assyohjelmille
olla Basic muuttujilta turvassa... niin
0316 =$00
0317 =$C0 "dec 192"
itse rutiini sijaitsee $FE66
itse raita ohjelma tässä pari eri versiota
VER.1
INC$ D020 ; sateenkaari raidat
JMP $FE66
VER.2
INC $D020 ; kaksivärinen raidoitus
DEC $D020
JMP $FE66
VER.3
LDA#6 ; sininen ja musta raidoitus
STA $D020
LDA#0
STA $D020
JMP $FE66
Kiitti, tulipa sinulte paljon tekstiä ;D Latasin tuon ohjelman tuolta, täytyy perehtyä siihen ja tähän ohjeeseen paremmin kun on aikaa. Enköhän mä tällä pääse alkuun 8)
Edit. Totanoin, mites mä saan ton ohjelman toimimaan kuusnepalla? LOAD"*",8 komennolla ilmoittaa vaa että FILE NOT FOUND. Listauksella tuohon tulee monta riviä tiedostoja, millä sen saa sitten käynnistettyä :-\
ohjelmasta sen verran että
<- näppäin on avain kaikkeen
ihan muutama esim.
<- L =Load Assy
<- S =Save Assy
<- * =dir
<- 3 =käännä Assy ohjelma muistiin
<- 5 =käännetään objekti file levylle
<- D = mikä tahansa disk komento esim. s:ohjelma
itse assy ohjelmassa seuraava ohjelman pätkä tekee elämästä helpompaa
CTRL nappulan painaminen palauttaa takaisin Assy ohjelmaan
loop lda#$ fb
cmp$dc01
bne loop
jmp $8000 ; Vanhassa v1.0 versiossa $9000
ohjelma käyttää Basic ohjelman muuttuja rutiinia
eli mitä pidempi koodi sinulla on sen alemmaksi se ylettää ohjelmana $8000 osoitteesta alaspäin
sen hetkinen kohde näkyy editorin alalaidassa
$c000 aluetta ei voi käyttää koska ohjelma itse käyttää sitä
turvallinen alue on $0300-$6000
tämän voi kiertää siten että kääntää ohjelman muistin sijasta suoraan levylle
<- 5 ja annamme objektille nimen ja ohjelma tallentaa käännetyn ohjelman suoraan levylle
ja koodin paikkahan muistissa määritellään
*=$1000 komennolla editorissa
.Byte 0,0,0,0... <= 8bit dec lukuja hexat vaativat $ etumerkin % binääreihin
.Byte $0A,$0F
.Byte %00001111,%10101010
.Byte "A","B"
Word 16bit lukujen lisäys
.Word $1000,$2000,$0801
textin lisäys tai grafiikkamerkkien lisäys ohjelmaan
.Text "diibadaapa.. kivaa on"
ohjelmassa lukujen ym anto käskyille
LDA #01 <=Dec
LDA #$ 0F <=Hex
LDA $02 <=nollasivu osoitus
LDA #"A" <= ASCI
LDA $1000+40 ;=$1000+16=$1010
LDA $1000+$40 ;=$1000+$40=$1040
LDA $1000*2 ;=$1000x2= $2000
ja niin edelleen kuten Basic kielessäkin
Muuttujien nimeäminenkin on melkein kuin Basicissa
ruutu = $0400
taustavari =$d020
lda #2 ;muutetaan taustaväri punaiseksi
sta taustavari
rts
simppeli sample ininä rutiini (ei ehkä toimi uusissa 6580 piireissä ?!?)
*=$1000
sei ;kielletään IRQ keskeytykset
cm lda $d418 ;volume rekisteri Sid A=Peek($d418)
eor #$0F ; kytketään volumi 15 tai nollaan yksinkertaisesti sanottuna käsky tekee invertin akun alimille 4 bitille
; jotka sattumalta ovat Sidin volume rekisterin bitit 15 eri asentoa jos Lda antaa arvoksi 0
; invertoidaan se 15 ja päin vastoin seuraavalla kerralla luvun ollessa 15 muutetaan se 0
sta $d418 ;asetetaan uusi arvo Poke $d418,A
jsr tauko ;hypätän pienelle loopille ja hidastetaan äänen taajuutta JSR = Gosub basikissa
lda #$fb ;A=$fb
cmp$dc01 ;tarkastetaan onko CTRL painettuna if peek($dc01)=A
bne cm ;ei ole jatketaan looppia Then cm
cli ;palautetaan IRQ keskeytykset
jmp$8000 ;hypätään takaisin assyyn =goto
tauko
ldx#0 ;x=0
de dex ;pyöritään ympyrää kunnes X=0 ;x=x-1 tulos $ff,$fe,$fd....
bne de ;a<>0 then de
rts ;palataan takaisin pää looppiin RTS=Return basicissa
jos jostain syystä lipsahdat takaisin basiciin
kirjoita SYS4096*8 ja palaat takaisin assyyn
Olisi kyllä ihan kiva jos vain saisi tuon ohleman toimimaan ensin. Kirjoitin tuon äsken tuohon edelliseen viestiin
Lainaus käyttäjältä: Jarskimo - tammikuu 13, 2012, 16:22
Edit. Totanoin, mites mä saan ton ohjelman toimimaan kuusnepalla? LOAD"*",8 komennolla ilmoittaa vaa että FILE NOT FOUND. Listauksella tuohon tulee monta riviä tiedostoja, millä sen saa sitten käynnistettyä :-\
pakko myöntää että itse operoin edelleen versiolla 1.0
ja nyt oli pakko hieman katsoa miten tuo uusi versio toimii ja heti havaitsin
tiedoissani aukon
ensimmäisessä levy imagessa on läjä ohjelmia
mutta vain yksi niistä on tarkoitettu plankolle C64 koneelle
ja se on se TMP 1.2 kuvassa punasin viivoin merkattu
muut versiot ovat joko kahdelle koneelle tai muille erikoisuuksille esim. REU
kahden koneen versio esim tarkoittaa että voit ohjelmoida toisella
ja tuupata sen jälkeen ohjelma testikoneeseen ja ajaa sen saman tien
ohjeet löytyvät web sivulta
tämän pitäisi myös tukea .include komentoa jolla saa esim. Grafiikka fileet kohilleen ennen käynnistystä
nämä Objekt fileet ladataan muistiin ennen ohjelman käynnistystä ( en ole vielä itse testannut )
toinen erikoisuus on ohjelman käynnistys osoite on siirtynyt kilon verran alemmaksi
eli
Sys 4096*8 käynnistää ohjelman Load"tmp *",8,1 jälkeen (muista väli TMP_)
Joo nyt sain pelittämään :) Nyt alkaa ankara opettelu ja ihmetteleminen
Miten etenee opiskelu ?