Autor Wątek: Pierwsze kroki w Pasmo  (Przeczytany 107017 razy)

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #60 dnia: 2015.04.20, 17:38:42 »
Ciekawe muszę to przemyśleć.

Właśnie po dodawaniu robi mi się błąd.
Chyba na debuggerze muszę spróbować zrobić test.

W spectaculatorze  chyba jest niezły, a może są inne sposoby
na krokową pracę i obserwowanie rejestrów ? 
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

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #61 dnia: 2015.04.25, 16:34:58 »
Nadszedł wreszcie czas żeby pokazać mój pierwszy program napisany w asemblerze Pasmo.
Dla starych wyjadaczy pewnie będzie to prościutki programik, ale mi zajął tydzień czasu.
Musiałem rozwiązać wiele problemów a teraz już widzę że drugi raz zupełnie inaczej bym go napisał.

Najgorszy jest pierwszy krok, trzeba przestawić się na inny tok myślenia niż w Basicu.
W miarę posuwania się pracy idzie coraz łatwiej.
Tak naprawdę to liznąłem zaledwie wierzchołek góry.

W każdym razie Pasmo to wdzięczny asembler, pokazuje miejsce popełnienia błędu i ku mojemu
zdziwieniu można pracować w układzie dziesiętnym.
(Chociaż przy adresowaniu ekranu, hex też się przydał)
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

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #62 dnia: 2015.04.25, 18:52:02 »
Bravo! Naprawdę jak na pierwszy program to jest coś.

I teraz mam do Ciebie WIELKĄ prośbę.

Ponieważ to Twój pierwszy program to na pewno wszedł Ci mocno za skórę i dobrze go pamiętasz.

Czy mógłbyś to rozpisać na składowe - w sensie na mnemoniki z komentarzem ?
Fajnie by było jakbyś napisał coś o problemach które się pojawiły po drodze i jak to omijałeś.

Byłby to wspaniały sposób na pozwolenie innym (początkującym) by odrobinę zbliżyli się do Twego poziomu   :D
Oczywiście to ostatnie zdanie jest troszkę "liżydupne" ale dla mnie jesteś MAESTRO!

 
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #63 dnia: 2015.04.25, 19:32:26 »
Byłby to chyba przykład jak nie należy programować.

Generalnie jest główna pętla z której wywoływane są podprogramy.
W głównej pętli testowany jest stan klawiszy i w zależności od nich uruchamiane są
różne podprogramy.

Pokazujący pozycje kropki.
Obliczający pozycje o jeden w lewo, prawo, góra,dół.
Ze względu na specyficzną organizację ekranu nie jest to proste.
Opóźnienie czasowe, żeby kropka za szybko nie latała.
Kasowanie kropki na starej pozycji.

A najwięcej czasu straciłem na podprogramie do kasowania kropki w starej pozycji.

Nie rozwiązałem do końca wypisywania tekstu.
Za diabła nie działa mi dyrektywa DEFB z której mają być pobierane teksty.
Napisy zrobiłem trochę na piechotę, bardzo nieelegancko.

A na samym starcie podprogram do kasowania ekranu, zamalowania na żółto, ustawienia kropki na środku.

Tak sobie myśle że można by z tego zrobić grę, przesuwanie kropki ze startu do mety, omijanie przeszkód i pomiar czasu.
Byłyby liczone kolizje i czas.
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

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #64 dnia: 2015.04.25, 19:42:37 »
Za diabła nie działa mi dyrektywa DEFB z której mają być pobierane teksty.

W GENS służyła do tego dyrektywa DEFS.

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #65 dnia: 2015.04.25, 22:24:29 »
Po przeczytaniu dokumentacji gensa i paru próbach
zadziałało mi coś takiego

tylko nie wiem czemu zamiast spacji wyświetla mi znak funta

ld hl,tekst
sko3
push af
call 16
pop af
inc hl
ld a,(hl)
cp 0
jp nz,sko3
ret

tekst DEFB ' ','P','r',"o","g","r","a","m",0
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

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #66 dnia: 2015.04.25, 22:34:26 »
Spacji? Jakiej spacji?
OK, już zauważyłem :) W akumulatorze masz na początku przypadkową zawartość, rozkaz LD A, (HL) powinien być przed callem.
Nie wiem natomiast, czemu używasz CALL 16 zamiast RST 16 oraz CP 0 zamiast OR A, jak również JP zamiast JR :)
« Ostatnia zmiana: 2015.04.25, 22:45:19 wysłana przez trojacek »

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #67 dnia: 2015.04.25, 23:05:29 »
Rzeczywiście przegapiłem ustawienie akumulatora, już działa.
CALL 16 bo gdzieś wyczytałem że tak trzeba, nie wiem co to za różnica.

A reszta zarzutów to kwestia mojego niedouczenia i potrzeba dalszej optymalizacji.
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

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #68 dnia: 2015.04.25, 23:12:16 »
Wspaniale! A jak już dojdziecie do wszystkiego to będzie można liczyć na jakieś "linia-po-linii" wytłumaczenie łopatologiczne
działania całego programu?  Wiem, że to nie jest kwestia kwadransa ale to by naprawdę dużo wniosło do tematu nauki
asemblera przez wielu naszych użytkowników.
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #69 dnia: 2015.04.25, 23:22:21 »
CALL 16 bo gdzieś wyczytałem że tak trzeba, nie wiem co to za różnica.

Serio? To chyba jednak korzystasz ze złych źródeł. Załączam stronę z "Przewodnika po ZX Spectrum".

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #70 dnia: 2015.04.25, 23:40:52 »
Tę książkę też mam.
Call 16 jest w ABC asemblera z 1988, Rolanda Wacławka,
no sam tego nie wymyśliłem.

On daje tam wtrącenia o CPM i procesorze 8080,
może to chodziło o pracę ZX po CPM.
Nie mam w tej chwili jej pod ręką żeby to sprawdzić.

Działa w każdym razie w obu opcjach, a jaka jest różnica
to muszę dopiero się wczytać.
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

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #71 dnia: 2015.04.26, 08:01:09 »
@tdu: jak na pierwszy raz to jest bardzo dobrze.

To co mogę zaproponować z optymalizacji programu to zamiana 'CP 0' na 'OR A'.
W tym przypadku robi dokładnie to samo, tj, jest 1 bajt krótsze oraz szybsze - 4 takty zamiast 7.


@ikci: uczysz się assemblera?

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #72 dnia: 2015.04.26, 11:07:14 »
Tę książkę też mam.
Call 16 jest w ABC asemblera z 1988, Rolanda Wacławka,
no sam tego nie wymyśliłem.

Być może chodziło o czytelność kodu, ale generalnie CALL16 nie ma sensu. RST 16 zajmuje jeden bajt zamiast trzech i wykonuje się szybciej.
Procesor 8080 też miał instrukcje restartów, tylko inaczej zapisywane w assemblerze (RST 0..7). Ale kody instrukcji były identyczne.

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #73 dnia: 2015.04.26, 12:03:25 »

@ikci: uczysz się assemblera?

Kilka razy już o tym pisałem na naszym forum, że się uczę.

Każdy kawałek wiedzy jaki tutaj uzyskam jest dla mnie cenny i dlatego naciskam na
kolegę tdu  aby to jakoś rozpisał dokładnie z wytłumaczeniem działania ponieważ
będzie to stanowiło niebywale przydatny podręcznik.  Jeśli coś jest pisane na ciepło
z uwzględnieniem emocji jakie towarzyszyły przy powstawaniu pierwszego programu
to jest to najlepsza szkoła.
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Pierwsze kroki w Pasmo
« Odpowiedź #74 dnia: 2015.04.26, 12:47:31 »
Ikci, a tak zapytam - jak się uczysz?

Odpaliłeś komplilator? Napisałeś SWÓJ pierwszy,drugi, trzeci i czwarty program? Jeśli nie to dlaczego?

Od czytania forum się nie nauczysz, tak jak nie nauczysz się tańczyć oglądając "Taniec z gwiazdami" czy grać w piłkę oglądając mecze. Można jedynie zostać teoretykiem - gawędziarzem.

Programować można się jedynie nauczyć poprzez... no właśnie, programowanie  :)