Category: programovanie

Ach, to PMG

Posledny mesiac som sa sporadicky pokusal naucit a pochopit PMG. Pochopit sa mi to asi aj podarilo, no budem si to musiet opakovat. Problem je s casom. Prestahovali sme sa z Martina do Ziliny. V obyvacke je velky stol, idealny pre Atari, dotrepal som z Martina kvoli tomu aj televizor, lebo ten, co tu bol, nemal svideo vystup. Pokusal som sa prepisat svoj PMG program do ACTIONu!, no bude to chciet trpezlivost a pokusy, pokusy a zase pokusy. Ale ako som spominal, problem je s casom.. Niekedy ma chyti modelarcenie, cize cely vecer lepim, tmelim a farbim, cez vikendy vacsinou chodime von, niekde mimo mesto, do prirody, clovek pride domov, pozrie spravy, zahra dostihy a sazky a den je prec..

Budem sa musiet viac donutit, po veceroch citat, citat a citat literaturu, ktoru mam a rano vstat, sadnut za to a skusat. V prvom rade sa chcem naucit zaklady PMG v Basicu. Problem mi robi vyhradenie hracej plochy, strely som este ani neskusal. Vytvorenie hraca chapem, aj rezervovanie pamati, aj vsetko s tym spojene. O pomaly pohyb hraca sa zatial nestaram, prepisem to potom do Actionu!, tam to bude rychlejsie. S nametom hry som si tiez nie isty, co to ma vlastne byt.. Strielacka? Raketka, ktora musi zburat co najviac budov (z ascii)? Bude to vyuzivat VBI? Ako? Dobre, dam si ciel.. Vytvorit panacika s vymedzenou hracou plochou, ktory bude schopny strielat, aspon jednym smerom. Mam nutkanie sa do toho pustit aj teraz, ale moja milovana schovala Atari do skrine.. Tak snad sa pmg zmesti uz do tak nabiteho programu cez vikend.

PS. tak som to predsa len skusil.. Problem cislo 1: Problem s horizontalnym vymedzenim pohybu hraca, viz riadok 112.. Preco to nefunguje?

Programovanie na Atari

Na portali zive.cz sa objavil perfektny clanok o programovani na Atari.

Kurz Atari Basicu 0.3

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.

Kurz Atari Basicu 0.2

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

Kurz Atari Basicu 0.1

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

Zacinam sa ucit Action!

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.

Otazky pre skusenych

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.

FOR..NEXT v ASM

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..

Stiahnut 1 priklad (znak a)

Stiahnut 2 priklad (40 znakov a)

Stiahnut 3 priklad (plus zmena farieb pozadia)

Zvolil som Atari Assembler

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..

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.

Ucim sa Atari Basic

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 :)