Na portali zive.cz sa objavil perfektny clanok o programovani na Atari.
Category: programovanie
Napiste program, ktory z dvoch zadanych cisiel vybere vacsie.
VSTUP: A, B
VYSTUP: C (vacsie cislo, nez A, B)
10 INPUT "A,B";A,B
20 IF A>B THEN C=A
30 IF B>A THEN C=B
40 PRINT C
V knizke bol uvedeny priklad s podmienenym prikazom a skokmi.
10 REM MAXIMUM Z DVOCH HODNOT
20 INPUT "A,B";A,B
30 IF A>B THEN GOTO 60
40 C=B
50 GOTO 70
60 C=A
70 REM
80 PRINT "MAX:";C
90 END
Nabuduce: Napiste program, ktory z troch zadanych cisiel vybere najvacsie.
Tento priklad je jednoduchy, v podstate nasobenie, ktore uz ovladam.
Priklad 0.2
Vypocitajte hrubu mzdu pracovnika na zaklade znalosti hodinovej mzdy a poctu odpracovanych hodin.
VSTUP – HOMZ, OH
VYSTUP – HM
10 REM HRUBA MZDA
20 INPUT "HODINOVA MZDA";HOMZ
30 INPUT "ODPRACOVANE HODINY";OH
40 HM=HOMZ*OH
50 PRINT "HRUBA MZDA=";HM
60 END
Dalej predpokladajme, ze pracovnik ma zrazky 5% z hrubej mzdy. Pouzijeme novu premennu SR. V nej bude vyska zrazky zo mzdy
10 REM CISTA MZDA - %5 ZRAZOK
20 INPUT "HODINOVA MZDA";HOMZ
30 INPUT "ODPRACOVANE HODINY";OH
40 HM=HOMZ*OH
50 SR=HM*0.05:REM VYPOCITANU HRUBU MZDU VYNASOBIME 5% A VYSLEDOK ULOZIME DO SR
60 CM=HM-SR:REM ODCITAME
70 PRINT "CISTA MZDA:";CM
80 END
V HM mame napr 12000 (48*250).. 12000*0.05 = 600, to uz je premenna SR.. Ked dalej odpocitame 12000 (HM) – 600 (SR), vide nam hodnota CM.
Program som si este skusil upravit:
10 REM VYPOCET CISTEJ MZDY SO ZVOLENYMI ZRAZKAMI V %
20 INPUT "HODINOVA MZDA";HOMZ
30 INPUT "ODPRACOVANE HODINY";OH
35 INPUT "ZRAZKY V % - 0.00 - 1.00";ZRAZKY
40 HM=HOMZ*OH:REM VYPOCET HRUBEJ MZDY
50 SR=HM*ZRAZKY:REM VYPOCET ZRAZOK
60 CM=HM-SR:REM CISTA MZDA
70 PRINT "CISTA MZDA:";CM
80 END
Je rok 2009 a je to smiesne. Ataricko som prvy krat pouzival niekedy v minulom storoci, mohol som sa ucit Basic, no nemal som na to chut, vlohy, atd. Dnes som si v Turcianskej kniznici v Martine pozical knizku Basic pro zacatecniky. Priklady mi pripadaju velmi jednoducho opisane, mam si konecne ako co precvicovat. Jednotlive priklady by som tu chcel opisat, aj mne samemu sa zidu v buducnosti. Budu usporiadane podla zlozitosti a napisem ich vzdy po tom, co ich sam pochopim.
Priklad 0.1
Jednou z najjednoduchsich uloh je zamena dvoch premennych. Ak je napriklad A=10 a B=15, tak po zamene bude A=15 a B=10. Cielom prikladu je uvedomit si, ako dochadza k priradeniu hodnoty premennej a ze po priradeni urcitej premennej je povodna hodnota premennej ztratena.
VSTUP: A, B
VYSTUP: A, B, C
10 REM ZAMENA
20 INPUT "A,B";A,B
30 C=A
40 A=B
50 B=C
60 PRINT "A=A";A,"B=";B
70 END
Dokonca aj na polskych forach stale zije debata o tomto programovacom jazyku. Z literatury, ktoru mam, citam len chvalu o rychlosti a jednoduchosti. A ano, programovaci jazyk ACTION! je naozaj slusne rychly, na moje zaciatocnicke ucely by to mohlo stacit. Niekedy v juni tohto roku som v Atari Basicu napisal jednoduchy program EUROKALKULACKA :), ktory prepocita staru, Slovensku menu na Eura. Pomaly robim prevod do Action, zaklad je hotovy, len som este nemal cas poriadne si prestudovat literaturu, ktoru mam doma, ale z rychleho prelistovania viem, ze to nebude problem.
Skusal som nejake priklady kompilovat v PC programe Effectus, no tam su jasne problemy, program nepozna urcite vyrazy z klasickeho Action! a pod a vsimol som si, ze je vyrazne pomalsi, ako originalny Action!. Zase klasicky Action!, aspon ten, co mam doma, nepozna sinus, cosinus.. Teda priklad opisany z knizky mi nesiel, zastavil sa pri funkcii cos, ktoru tam bola pouzita. Toto su klasicke priklady toho, preco ma vzdy programovanie odradi. Preto som sa v podstate vykaslal na Assembler, kedze nebolo za akychkolvek okolnosti mozne ucit sa krok za krokom postupy z literatury (3 papierove knizky), pretoze MAC65 mi nikdy nesiel, cartriidge verzia MACu65 fungovala inac, ako ta v knihe a MADS, ci XASM zase nechapali zapis opisany z knizky..
Hadam s Actionom taketo problemy nebudu, dokoncim programcek a mozno, ak to pojde, vytvorim nejaku textovku, demo alebo nieco podobne. Samozrejme, nie hned.
1. Ktory assembler na Atari mi umozni skocit do basicu, pouzit podprogram v strojovom kode a navrat spat do assembleru?
2. Dajme tomu, ze mam skusobny priklad.. (poke 710,10)
org $0600 sta #10 lda 710
Ako to vlozim cez prikaz USR(1536) do Atari Basicu? Konvertovat z roznych sustav cisla uz viem. Aj ako zapisat data, len potrebujem presny priklad, aby som sa pohol dalej. Vdaka.
Studujem, studujem a myslim, ze zacinam chapat. Ucim sa prakticky z kuskov kodu, nejakej literatury na internete a pod. Chyba mi pevna ucebnica, uz aby bola tlaciaren.
Vsetci vieme, ako funguju v Atari Basicu FOR..NEXT. S troskou pomoci som si to skusil v Assembleri. Hlavne som chcel pochopit, ako to funguje a pridal som este nejake efekty z druheho prikladu.
org $2000 ldx #0 ;tu zacina nieco ako for.. (zober 0 do x) lda #$61 ;vezmeme hex znaku a opakuj sta $bc40,x ;vloz hex a x na adresu inx ;zvys o jedno cpx #40 ;vypiseme 40 krat bne opakuj loop lda 20 sta 710 ;poke 710.. iny beq loop jmp *
Musim prist, ktory prikaz reaguje na stlacenie klavesy, resp. ako vlozit znak A napriklad do stredu prveho riadku..
Vdaka Fandalovi a Matosimi som sa vcera rozhodol pre pracu s Assemblerom, resp. s xasm. Osobne si myslim, ze som zvolil dobre, liteatury je dost a je teda z coho cerpat. Jednotlivym prikazom v podstate trosku rozumiem, klucove bude naucit sa, ako funguje ANTIC, DLI, kde v pamati su ulozene ake adresy, ako s nimi pracovat a pod. Jediny problem vidim v tom, ze nam v tlaciarni dosla farba a ja som klasik, lepsie sa mi cita a uci z papiera..
- ABC o počítačích Atari 600XL/800XL
- Atari kouzlí
- Mikroprocesor 6502 – Popis instrukcí
- Průvodce assemblerem 6502
- A Guide To Atari Assembly Language
- Mapping The Atari – Revised Edition
Matosimi mi vcera trosku povysvetloval par prikladov, zaujimalo ma, ako v ASM scitat napriklad 2+5. Nasledne s jeho pomocou vznikol kod (v podstate ho Matosimi cely vytvoril).
run $2000 org $2000 lda #5 ;vloz 5 do akumulatora clc adc #2 ;pripocitaj 2 k akumulatoru ora #$10 ;sucet sta $bc40 ;uloz obsah registru do pamati (adc+lda) jmp * ;opakuj
Nasledoval dalsi priklad, zobrazovanie znakov od 1 do posledneho Atari znaku.
;vypis znakov run $2000 ;zaciname na adrese org $2000 loop inx ;zvys index registru x o jedna stx $bc40 ;uloz obsah registru do pamate jmp loop ;skok na loop inx, opakovanie
Ak su moje komentare zle, mozte ma v poopravit. Myslim, ze nebude dobre pustat sa hned do VBI, prace s farbami, ale skor zacinat s jednoduchsimi vecami, napriklad, ako mi poradil Matosimi, zaplnit prvy riadok nejakym znakom alebo podobne veci. Na to ale este musim prist.
Ked som bol maly chlapec, chodil som na jeden pocitacovy kruzok. Ten boli rozdeleny na dve casti. 8 bity (pmd, zx-spectrum, atd) a PC. Ja som samozrejme chodil na Atari. Cielom kruzku bolo oboznamit uzivatela s Atarickom a zaucit do programovania v Basicu. Ovladanie Ataricka som vtedy vedel snad najlepsie zo vsetkych, cize prve styri kruzky som sa trosku nudil a na piaty som neprisiel. Dnes to lutujem, pretoze na tom stvrtom stretnuti sme sa zacali pomaly ucit Basic. Doma som mal desiatky kniziek – Basic, Turbo Basic, Deep Blue C, MAC/65, LISP, LOGO.. Neucil som sa. Vlastne som to nechapal. Matematika mi nikdy nesla a ako je zname, programovaci jazyk treba hlavne pochopit. Teraz sa to snazim dohnat, sporadicky pisem svoje prve graficke demo v Turbo Basicu XL, nepojde ale o nic zlozite, no chcel by som zacat programovat aj zlozitejsie veci, ale neviem, kde zacat. Bojim sa, ze taky Assembler pochopim vtedy, ked uz ani Polska Atari scena nebude..
Mam pocit, ze moje Atari posobenie ostane len pri pisani smiesnych clankov o tom, ako som uspesne zapojil SIO2PC kabel alebo pri podobnych ‘nezmysloch’.
Kde zacat? Pokracovat v TB? Ucit sa v Basicu DLI, PMG, pouzitie strojovych podprogramov, ci prejst rovno na C, ci na ASM?
Viem, znie to smiesne, ale ked som ho flakal v detstve, chcem to dohnat teraz. Nie je to zlozite a mam uz napisane prve tri, velmi kratke programiky. Ucim sa vacsinou uz z hotovych basicovskych programov, z Atari literaturi a ked nieco vytvaram, pisem uz sam, nepotrebujem ‘napovedu’. Kedze mi dobre nefunguje XC12, musim si vzdy fotakom cvaknut vylistovany program, pripadne zapisat. Chcem pisat viac a viac a pozliepat to do nejakeho amaterskeho Basicovskeho dema :)