C64Power Forum

Software => Programowanie => Wątek zaczęty przez: siudym w 23 Października 2017, 11:16

Tytuł: zapalanie bitow w okreslonych odstepach czasu (klatek) - asm 6502
Wiadomość wysłana przez: siudym w 23 Października 2017, 11:16
Witam.

Moze ktos poradzi w temacie asemblera 6502 - potrzebowalbym mozliwie najprostrzy kod (aktualizowany w petli nonstop), ktory ustawialby bity w pewnej okreslonej czestotliwosci, a dokladnie takiej:

Jedna zmienna (bajt) np. nazwana "bits", 1 to bit zapalony, 0 to bit zgaszony w danej klatce:

bit0= 1,0,1,0,1,0,1,0... (co dwie klatki)
bit1= 1,0,0,1,0,0,1,0,0,1,0,0... (co trzy klatki)
bit2= 1,0,0,0,1,0,0,0,1,0,0,0... (co cztery)
bit3= 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0... (co piec)
bit4= 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0... (co szesc)
bit5= 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0... (co siedem)
bit6= 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0... (co osiem)
bit7= 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0... (co dziewiec klatek)

To kod (nizej), ktory robi to na podobnej zasadzie, ale kazdy wyzszy bit zapala sie z czestotliwoscia dwukrotnie mniejsza od poprzedniego, a ja chce aby ten skok byl jedynie o jedna klatke (jak wyzej pokazane) :

lda counter ;get old state
inc counter ;advance to the next state
eor #$ff ;invert the old state so that bits that were not set before become 1
and counter ;and with the new state causing only bits that were clear before but are set now to become 1
sta bits ;save the result


Ten kod ustawia bity w zmiennej "bits" w ten sposob:

bit0= 1,0,1,0,1,0,1,0...
bit1= 1,0,0,0,1,0,0,0...
bit2= 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0.....
bit3= 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
itd(...)
Tytuł: Re: zapalanie bitow w okreslonych odstepach czasu (klatek) - asm 6502
Wiadomość wysłana przez: retrozbych w 29 Października 2017, 09:15
Hmmm co dziewięć klatek ? Czy aby na pewno chodzi o zapis 8-mio bitowy ? W tym miejscu " bit7= 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0... (co dziewiec klatek) ", to wygląda jak zapis 32 bitowy . Myślę, że najprościej było by w pętli kopiować dane z tablicy