Autor Wątek: Kurs programowania w asm (dla ZX na początek)...  (Przeczytany 48441 razy)

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #45 dnia: 2019.06.06, 20:19:02 »
Zaglądnąłem do przerwań w Shock cz.2
Jest oczywiście IM2, I=#FE czyli tablica jest od #FE00, i jest wypełniona #FF. A pod #FFFF jest... RET
Czyli synchronizuje się przez HALT, po wyeliminowaniu wszystkich minusów tego rozwiązania!

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #46 dnia: 2019.06.06, 21:44:10 »
I otóż: ani joystick, ani floating bus, ani żaden inny port I/O żadnego interfejsu nie powinien wystawiać niczego innego, ponieważ linia /RD jest w stanie wysokim.

Otóż prawdą jest, że nie powinien. Ale jak coś jest słabo zaprojektowane to różnie z tym może być i głównie dlatego od zawsze tablica ma 257 bajtów ;)
Co ciekawe - kiedyś dawno temu czytałem artykuł na temat tego, że z adresem wektora coś jest tak, że ma mieć najmłodszy bit wyzerowany. Artykuł sprawdzał czy "ma mieć" oznacza, że nawet jak nie ma to pobiera z parzystego adresu. Nie pamiętam niestety konkluzji ;)

Czyli synchronizuje się przez HALT, po wyeliminowaniu wszystkich minusów tego rozwiązania!

HALT i EI - bez EI po kolejnym HALT nie przyjmie przerwania, bo IRQ wyłącza przerwania aż do wywołania RETI albo EI. Obsługa synchronizacji w taki sposób daje bardzo ładny i równy punkt w którym kod po HALT może zacząć rysować - jakoś tak 32+10+4+4 takty od wygenerowania przerwania (32 na procedurę przyjęcia przerwania, 10 - RET, 4 - HALT i 4 EI) i możemy zacząć szaleć po borderze ;)


Sir David

  • ****
  • Wiadomości: 391
  • Miejsce pobytu:
    Białystok
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #47 dnia: 2019.06.06, 22:04:37 »
bo IRQ wyłącza przerwania aż do wywołania RETI albo EI.

Coś mi się wydaje, że RETI nie włącza przerwań i trzeba dać EI tak czy siak.

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #48 dnia: 2019.06.06, 22:17:33 »
To miał być kurs dla początkujących a nie bredzenie starszych panów ;) Miejcie litość nad tymi którzy to czytają. Nie bez przyczyny napisałem że przerwania brzmią jak bełkot :D
Informacja dla chcących się czegoś nauczyć: Zapomnijcie o tym co przez blisko dwie strony było wypisywane i zapamiętajcie: EI by włączyć przerwania a potem HALT przed wyświetlaniem efektu dla synchronizacji ;)
ZX Spectrum +2 Grey | Just Speccy 128 | ZX Spectrum Next | ZX-Uno 2MB |  Murmulator | Amstrad 6128 | MSX2 Philips VG-8235 | Commodore 64 | Commodore +4 | Atari 520 STF | Amiga 1200

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #49 dnia: 2019.06.06, 22:23:47 »
Co ciekawe - kiedyś dawno temu czytałem artykuł na temat tego, że z adresem wektora coś jest tak, że ma mieć najmłodszy bit wyzerowany. Artykuł sprawdzał czy "ma mieć" oznacza, że nawet jak nie ma to pobiera z parzystego adresu. Nie pamiętam niestety konkluzji ;)


Na emulatorze na pewno odczytuje #FF. W innym przypadku Start s12 nie działałby na Spectrum 128, bo tam tablica jest skrócona do dwóch bajtów, a I=#3B

bo IRQ wyłącza przerwania aż do wywołania RETI albo EI.

Coś mi się wydaje, że RETI nie włącza przerwań i trzeba dać EI tak czy siak.


Sprawdzam... Tak, RETI nie włącza przerwań. EI musi być.

KWF

  • *****
  • Wiadomości: 6838
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • PCBway
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #50 dnia: 2019.06.06, 22:31:51 »
To miał być kurs dla początkujących a nie bredzenie starszych panów ;) Miejcie litość nad tymi którzy to czytają.

Za tą wypowiedź, masz u mnie piwo  :D
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

steev

  • *****
  • Wiadomości: 1366
  • Miejsce pobytu:
    inode 42
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #51 dnia: 2019.06.06, 22:34:07 »
To miał być kurs dla początkujących a nie bredzenie starszych panów ;) Miejcie litość nad tymi którzy to czytają.

Za tą wypowiedź, masz u mnie piwo  :D
Strach pomyśleć co by się działo przy dyskusji o contended memory...
Machines should work. People should think.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #52 dnia: 2019.06.06, 22:40:00 »
bo IRQ wyłącza przerwania aż do wywołania RETI albo EI.

Coś mi się wydaje, że RETI nie włącza przerwań i trzeba dać EI tak czy siak.

Faktycznie. Pamiętałem, że RETI czymś się różni od RETa - wyszło mi, że włączaniem przerwań. A różni się tym, że wystawia na szynę inny zestaw sygnałów sygnalizując, że jest powrotem z obsłui IRQ. To RETN włącza przerwania a dokładnie przywraca taki ich stan jaki był w momencie przyjęcia NMI.

Miejcie litość nad tymi którzy to czytają.

W asmie nie ma miejsca na litość ;)

Cytuj
Nie bez przyczyny napisałem że przerwania brzmią jak bełkot :D

Eeee tam. Obsługa przerwań jest bardzo prosta i całkowicie logiczna :P
Spectrum na szczęście nie pozwala wykorzystać tego, co tak na prawdę siedzi w Z80 i ewentualnie podłączonych do niego urządzeń - dopiero jakbyś zaczął tłumaczyć tryb IM 0 (zwłaszcza z wielobajtowymi rozkazami), chainowanie przerwań itp. zabawy to by się zrobiła jazda zmierzająca do bełkotu ;)
A tak masz dwa proste tryby z prostym obejściem ewentualnych problemów z urządzeniami zewnętrznymi i wszystko gra i buczy ;)

Edit : A tak na serio - zrobienie kursu assemblera dla początkujących jest możliwe tylko wtedy jeśli będzie to tekst pisany jako większa całość przez jedną osobę. Jak mamy dyskusję w której udział bierze kilku początkujących i stado "wiedzących" to efekty prędzej czy później stają się takie jak w tym wątku - zaczynamy się popisywać ;) A początkujący czują się zagubieni. Dlatego mam nadzieję, że Tygrysowi wyjdzie coś bardziej spójnego :) A i sam od dłuższego czasu noszę się z koncepcją, ale na razie czekam, żeby zobaczyć czy ma ona sens czy może to, co zaproponuje Tygrys będzie bardziej interesujące.
« Ostatnia zmiana: 2019.06.06, 22:47:50 wysłana przez matofesi »

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #53 dnia: 2019.06.06, 23:20:52 »
Podsumowujac, halt i ei i to na razie powiino wystarczyc.
A koledzy w tym czasie uzgodnia miedzy soba, jak to ma byc.
Chociaz wydaje sie maloprawdopodobne zeby poczatkujacy do tego poziomu doszli,
to jakis przepis jednoznaczny powinien byc.
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic SamCoupe QL CPC6128/N100 MSX-SVI738  MSX2-VG8235

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #54 dnia: 2019.06.06, 23:23:28 »
Podsumowujac, halt i ei i to na razie powiino wystarczyc.

A dokładnie EI i HALT. W odwrotnej kolejności ryzykujesz, że przed HALT przerwania będą wyłączone i HALT się po prostu zawiesi.

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #55 dnia: 2019.06.06, 23:28:51 »
A tak z ciekawosci, ile osob z poczatkujacych, ktore deklaruja tutaj chec nauki
przerobilo kurs asemblera w Tutorze ?

Program jest dostepny w archiwum i wiele rzeczy na poczatek może wyjasnic.
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic SamCoupe QL CPC6128/N100 MSX-SVI738  MSX2-VG8235

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2434
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #56 dnia: 2019.06.06, 23:57:57 »
Przydało by się tu coś tytułem wstępu teoretycznego związanego z tematem zanim zacznie się mieszać w przerwaniach czy innych ciekawych mechanizmach związanych ze specyficznym hardware czy firmware jeśli ma to być bardziej edukacyjne ;)
Wiem że wszystko można doczytać... ale przynajmniej może jakiś celny link by nie szukać materiału przygotowawczego.

Też bym chętnie poznał co tam w ZXie piszczy ciekawszego na poziomie assemblera, choć tam już coś kiedyś robiłem w kodzie maszyny na różne procki i platformy, jednak tutaj bardziej spodziewałem się czegoś bardziej w kontekście ZX Speca, może jakieś sprytne procedury, fragmenty kodu z opisem co to robi i dlaczego tak jest optymalnie ...

Puki co to brzmiało mi jakoś na bełkot ludzi na pewnym poziomie znajomości tematu i niekoniecznie wnoszącego coś do edukacji mniej zaawansowanych w specyfice Speca ;)

Bez urazy .... bo to bardzo ciekawy temat ....  :)
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

KWF

  • *****
  • Wiadomości: 6838
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • PCBway
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #57 dnia: 2019.06.07, 00:35:02 »
Dalthon zaczął bardzo fajnie, potem przyszli wyjadacze i podpuścili wodze fantazji. Jeśli tem „kurs” ma wyglądać tak, jak przez ostanie kilkanaście wypowiedzi, to ja pasuje. Jestem laikiem, idiotą pod względem programowania i raczej tak zostanie.  :-X
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #58 dnia: 2019.06.07, 00:59:58 »
... niekoniecznie wnoszącego coś do edukacji mniej zaawansowanych w specyfice Speca ;)

Dalthon zaczął bardzo fajnie, potem przyszli wyjadacze i podpuścili wodze fantazji. Jeśli tem „kurs” ma wyglądać tak, jak przez ostanie kilkanaście wypowiedzi, to ja pasuje. Jestem laikiem, idiotą pod względem programowania i raczej tak zostanie.  :-X

To nie tak. Padło pytanie "Drugi temat to synchronizacja z ramką, jak się za to zabrać ?"
I kilka odpowiedzi.
To nie jest element tego tytułowego kursu, tylko na dobrą sprawę osobny temat, tak częsty na forum off-topic.


tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #59 dnia: 2019.06.07, 14:09:20 »
Jeszcze o HALT.
Wyobrażam to sobie tak że zaraz po HALT, nastąpią wywołania kolejnych podprogramów
realizujących jakieś zadania.
Na koncu będzie JP z powrotem do początkowego HALT, tak aby uzyskać wykonywanie podprogramów w pętli.
Ramka występuje 50 razy na sek, czyli wszystkie podprogramy w pętli muszą się wykonać w czasie krótszym niż 20ms.

MAIN
    HALT
 
  CALL skok1
  CALL skok2
  CALL skok n

  JP   MAIN

I teraz jak sprawdzić czy obsługa podprogramów wyrobiła się w tym czasie.
Czy jest jakiś program który może to zmierzyć i ocenić jaki czas zajmuje każdy podprogram ?
Ile taktów czy też może cykli, wykonuje procesor w jednej ramce ?

W książce Z80 Karczmarczuka dla każdego rozkazu procesora, podana jest ilość cykli maszynowych i liczba taktów.
Nie wyobrażam sobie ręcznego liczenia taktów, żeby sprawdzić czy mieszcze się w ramce czy nie.
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic SamCoupe QL CPC6128/N100 MSX-SVI738  MSX2-VG8235