26

(29 odpowiedzi, napisanych Programowanie - 8 bit)

Witam,
po oglądaniu dem i graniu w gry na Atari postanowiłem że trzeba coś własnego stworzyć.  Zrobiłem już parę programów w Basicu i 2 gry wykorzystujące procedury napisane kodem maszynowym (1 niedokończona).  Jednak kod maszynowy sprawia mi dużo problemów a Basic jak wiadomo jest niezadawalający.  W nadzieji chciałem spróbować Quick Assemblera, że w miarę swobodnie będę mógł napisać jakiś najprostrzy program.  Jednak okazało się innaczej. 

Chciałem napisać program który zmienia tryb graficzny na 0(gr.0), ale wynikiem tego programu nie powinien być chyba kompletnie czarny ekran.  Więc zwracam się do Was z prośbą czy moglibyście przeanalizować kod i powiedzieć co źle zrobiłem albo czy popełniłem jeden z grzechów głównych i to jest cud że komputer jeszcze działa? Byłbym wdzięczny za jakąkolwiek pomoc.

list             equ   %00000101                     ;  Żeby podczas kompilacji był listing tylko errorów
mem_copy         equ   %00010000                     ;  i żeby kod był umieszczany do pamięci komputera
                 opt    list+mem_copy          

                 org   $9000                         ;####program dla CPU#####
                 lda   $00                           ;
                 brk                                   ;żeby sprawdzić stan akumulatora*
                 sta   560                           ; Poke 560,00
                 lda   $9A                           ;
                 brk                                   ;żeby sprawdzić stan akumulatora*
                 sta   561                           ;Poke  561,$9A 
joystic          lda   644                           ;Pobieram stan przycisku Joy'a
                 cmp  0                              ;Sprawdzam czy wciśnięty
                 bne   joystic                       ;Jeśli nie to skok do joystick
                 rts                                 ;powrót do QA (o ile dobrze wiem)

                 org   $9A00                         ;####program dla ANTIC####
                 dta   b($70)                        ;
                 dta   b($70)                        ;3x8 pustych linii
                 dta   b($70)                        ;
                 dta   b($42)                        ;linia w trybie 0(gr.0) i określenie nowego adresu obrazu
                 dta   b($00)                        ;LSB adresu
                 dta   b($90)                        ;MSB adresu
                 dta   c(' 11 razy znak o wartości 2 w ASCII ')  ;11 linijek w trybie 0
                 dta   b($41)                        ;skok i synchronizacja 
                 dta   b($00)                        ;LBS adresu programu Antica
                 dta   b($9A)                        ;MBS -||-
                 end

*Wartości wogóle się nie zgadzają, byłbym też wdzięczny za wytłumaczenie tego zjawiska.
Mam nadzieję że napisałem kod w dość przejrzysty sposób