1

Gdzies czytalem, ze 6502 pobiera nastepny rozkaz jeszcze w czasie wykonywania poprzedniego - w ostatnim cyklu.

Jesli to prawda to rozkazy skoku warunkowego pewnie maja to jakos rozwiazane ale mnie interesuje co sie stanie jesli kod programu znajduje sie w obszarze ktory wlasnie wykonywany rozkaz zmieni.

wykonujemy przykladowo rozkaz
A000: sta $d500
A003: lda #0

a po sta mamy pod adresem to:

A003: ldx #0

jaki bedzie efekt ?

http://atari.pl/hsc/ad.php?i=1.

2

Sprawdź i napisz.

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

3

Opowieść z cyklu, że na Placu Czerwonym rozdają rowery...

Typowy XXL jest typowy :) Spróbuj, proszę, podchodzić trochę mniej bezkrytycznie do tego, co przeczytasz gdzieś w internecie, gdyż nie trzeba ostrego jak brzytwa umysłu, żeby zorientować się, że następny rozkaz nie może być czytany w cyklu zapisującym wynik działania poprzedniego rozkazu.

To o czym czytałeś tyczy się tylko niektórych instrukcji modyfikujących rejestry, w których owa modyfikacja następuje podczas czytania opcode'u następnego rozkazu. Np. lda #0 w pierwszym cyklu czyta opcode, w drugim operand, który jest ładowany do akumulatora właśnie w tym trzecim cyklu, w którym czytany jest opcode następnego rozkazu.

4

xxl napisał/a:

Gdzies czytalem, ze 6502 pobiera nastepny rozkaz jeszcze w czasie wykonywania poprzedniego - w ostatnim cyklu.

temat znany od dawna i dobrze opisany
szukaj w google "6502 pipeline"

Poza tym tak jak laoo napisał

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

5 Ostatnio edytowany przez xxl (2021-01-26 22:49:06)

czyli caly ten pipeline to sciema, nawet jak mamy 1 bajtowy rozkaz w drugim cyklu czyta kolejny bajt to po wykonaniu tego rozkazu i tak przeczyta jeszcze raz kolejny bajt...

---
raczej chodzilo mi o ten dokument: http://visual6502.org/wiki/index.php?ti … ing_States

a konkretnie:

When T1 is displayed inside the seventh (bracketed) field, the external SYNC pin is also being driven high (by the node tested for T1) to indicate that the current memory read operation is for an instruction opcode.

a konkretnie:

Last cycle of all(*) opcodes

*-oprocz skokow...

http://atari.pl/hsc/ad.php?i=1.

6 Ostatnio edytowany przez laoo/ng (2021-01-27 08:40:49)

Bardzo fajny dokument. Nie znałem go.
Zawiłości wewnętrznej pracy procesora nie są łatwe do zrozumienia. To wymaga sporo przetrawienia. Po prostu ostatni cykl rozkazu w rozważaniach na tej stronie nie jest tym, czym myślisz, że jest. Nawet poświęcili trzy paragrafy na uzasadnienie tego. Zastosowali konwencję, że pierwszym cyklem jest cykl, w którym rejestr rozkazu ma już załadowany opcode i procesor już może go wykonywać i wykonuje go aż do ostatniego cyklu, w którym ładuje opcode następnego rozkazu. Więc przykład lda #0 w ich konwencji wygląda tak:

1. przeczytanie operandu z pamięci
2. załadowanie operandu do akumulatora ORAZ przeczytanie opcode'u następnego rozkazu.

I tutaj ostatni cykl ma w sobie ten "pipelining", jak dla wszystkich rozkazów, w których przedostatni cykl (w tej nomenklaturze) nie jest cyklem zapisu, bo jego fizycznie nie można połączyć z fetchem następnego opcode'u.




W ogóle fajna rzecz. Wg tego dokumentu przerwanie nie może wskoczyć po instrukcji skoku względnego nie przekraczającego strony. To warto byłoby sprawdzić, bo teoretycznie sekwencji

  clc
l bcc l

nie można przerwać. Nie wiedziałem tego.

7

no ciekawe, ciekawe :-)

i to ze tylko nielegalse moga miec 8 cykli...

http://atari.pl/hsc/ad.php?i=1.

8 Ostatnio edytowany przez Fox (2021-01-27 22:07:38)

Ciekawe. Wczytałbym się w ten tekst, gdybym chciał zaprojektować swoje 6502. Ciekawe, co na to mój management? ;)

laoo/ng napisał/a:

Wg tego dokumentu przerwanie nie może wskoczyć po instrukcji skoku względnego nie przekraczającego strony.

W jednym akapicie jest to napisane w trybie przypuszczającym, ale już w następnym jest plot twist. A już wymyśliłem dwa zastosowania: 1. Zakończenie 256-ki z blokadą trybu przyciągania uwagi. 2. Blokada klawisza RESET w 400/800.

xxl napisał/a:

i to ze tylko nielegalse moga miec 8 cykli...

To akurat wynika z każdej tabelki z rozkazami 6502.

Edit:

Co do ankiety, to mogę sobie wyobrazić cartridge przełączający banki z opóźnieniem.
W ogóle dlaczego rozpatrywać cartridge, jak wystarczy zwykły samomodyfikujący kod?

https://www.youtube.com/watch?v=jofNR_WkoCE

9

Fox napisał/a:
laoo/ng napisał/a:

Wg tego dokumentu przerwanie nie może wskoczyć po instrukcji skoku względnego nie przekraczającego strony.

W jednym akapicie jest to napisane w trybie przypuszczającym, ale już w następnym jest plot twist.

Eh... dopiero teraz doczytałem ten drugi akapit.
Wygląda zatem, że jedyną taką sekwencja są jednobajtowe NOPy w 65C02.

10

tu jest fajnie opisane: https://en.wikipedia.org/wiki/CSG_65CE02


czytany bajt nigdy nie jest interpretowany jako rozkaz, zawsze jeszcze raz jest czytany i interpretowany

(swoja droga ten cpu z linku wykonuje niektore rozkazy w 1 cykl)

http://atari.pl/hsc/ad.php?i=1.

11

Ja akurat pisałem o jednobajtowych nopach, których sekwencji nie da się przerwać. 65CE02 nie ma tych nopów. On działa zupełnie inaczej.

12

Nie odnosilem sie do Twojego posta :)

http://atari.pl/hsc/ad.php?i=1.