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

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #15 dnia: 2019.05.13, 02:08:10 »
Jeśli komuś angielski nie straszny to tu jest jakiś kurs asemblera w artykułach i filmikach.
http://www.chibiakumas.com/z80
https://www.youtube.com/watch?v=LpQCEwk2U9w&list=PLp_QNRIYljFq-9nFiAUiAkRzAXfcZTBR_
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

selur

  • *
  • Wiadomości: 10
  • Miejsce pobytu:
    Poznań
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #16 dnia: 2019.05.15, 02:42:02 »
troche pozno ale rowniez jestem chetny do zadawania pytan itp.

Gryzor

  • *****
  • Wiadomości: 2009
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #17 dnia: 2019.05.23, 22:02:05 »
Nie tylko angielski:
https://wiki.speccy.org/programacion/indice

a zwlaszcza:

https://wiki.speccy.org/cursos/ensamblador/indice

Na szczescie kod Z80 w kazdym jezyku brzmi tak samo  :D

LaPi

  • *
  • Wiadomości: 24
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #18 dnia: 2019.05.29, 21:37:29 »
Witam. Ja też poproszę o materiały z kursu. Z góry dziękuję i pozdrawiam.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #19 dnia: 2019.06.06, 09:09:35 »
Program demonstacyjny jest już napisany, niestety zabrakło czasu na opis słowny i wytlumaczenie w jaki sposób to działa.
Jak tylko będę mieć w miarę napisany opis, podeślę kilku osobom do przejrzenia i podzielenia się uwagami.

Gotowiec ukaże się w najnowszym numerze Zin80.

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #20 dnia: 2019.06.06, 12:40:49 »
Ciesze się że temat asemblera powrócił.

Mam taki problem, potrzebna jest procedura
czekania na na wcisniecie dowolnego klawisza ,
takie PAUSE 0

Przy okazji podzielę się ściągą którą kiedyś na swoje potrzeby wykonałem
mozna by do nie jeszcze wiele rzeczy dopisać.
Wpisałem tylko to co sam przetestowałem i sprawdziłem.
Musialem zmienic rozszerzenie na txt, bo rtf nie mozna przeslac, prosze zmienic u siebie na rtf.

Piszę w pasmo, środowisko można tak skonfigurować, że generacja kodu i sprawdzenie działa bardzo szybko.
Wystarczy zrobić sobie skrót do cmd i skojarzyc tap z emulatorem.
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: 6831
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #21 dnia: 2019.06.06, 12:48:27 »
Ja to robię tak:

GETKEY LD HL, 23611
RES 5, (HL)
GK1 PUSH HL
CALL 703
POP HL
BIT 5, (HL)
JR Z, GK1
...
« Ostatnia zmiana: 2019.06.06, 12:59:44 wysłana przez trojacek »

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #22 dnia: 2019.06.06, 13:06:33 »
Dzięki działa

tali prosty programik prezentujący dostepne kolory

org 50000

call kas_ekr

ld hl,22528
ld a,0
ld b,0

loop1 ld (hl),b
    inc b
    inc b
    inc b
    inc b

         inc hl    ;zwieksz
         inc a         ;zwieksz
         cp 32         ;porownuje akumulator z liczba 32
         jp nz,loop1      ;jesli flaga zero skasowana wykonaj skok do loop1

call GETKEY

;=================================
kas_ekr            ;kasowanie ekranu
   ld hl,16383
   ld bc,2048
   
sko1   dec bc
   inc hl
   ld (hl),0
   ld a,b
   or c
   jp nz,sko1

   ret

;=================================

GETKEY            ; czekanie na dowony klawisz


      LD   HL, 23611
      RES   5, (HL)
GK1      PUSH   HL
      CALL   703
      POP   HL
      BIT   5, (HL)
      JR   Z, GK1

      ret



end 50000




kasowanie ekranu może jakoś prościej by się dało ?
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

KWF

  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #23 dnia: 2019.06.06, 13:13:07 »
Ja to robię tak:

GETKEY LD HL, 23611
RES 5, (HL)
GK1 PUSH HL
CALL 703
POP HL
BIT 5, (HL)
JR Z, GK1
...

No fajnie, ale komentarze, tak jak Dalthon napisal w sasiednim watku, bylyby pomocne poczatkujacym takim jak ja. Zeskanowany opis malo mi mowi jak to zapisac w asm. Prosze, traktowac mnie jak idiote, ktoremu trzeba kawa na lawe.
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

steev

  • *****
  • Wiadomości: 1362
  • Miejsce pobytu:
    inode 42
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #24 dnia: 2019.06.06, 13:14:34 »
Cytuj
kasowanie ekranu może jakoś prościej by się dało ?
kas_ekr            ;kasowanie ekranu
   ld hl,16384
   ld de,16384+1
   ld bc,2047
   ld (hl),l
   ldir
   ret
Machines should work. People should think.

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #25 dnia: 2019.06.06, 13:57:53 »
Też działa

tylko pytanie co robi     ld (hl),l   ?


Drugi temat to synchronizacja z ramką, jak się za to zabrać ?
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: 6831
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #26 dnia: 2019.06.06, 14:14:03 »
L=0.
Co do synchronizacji z ramką, to trzeba napisać swoją obsługę INT.

tdu

  • *****
  • Wiadomości: 926
  • Miejsce pobytu:
    Gdansk
    • Nasze Wędrowanie
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #27 dnia: 2019.06.06, 14:21:56 »
wyglada mi na to ze ta procedura kasuje 1/3 ekranu bez atrybutow.




co do INT są jakies przyklady ?
chyba wszystkie gry mają taką synchronizacje
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

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #28 dnia: 2019.06.06, 14:55:22 »
wyglada mi na to ze ta procedura kasuje 1/3 ekranu bez atrybutow.
Wystarczy zwiększyć ilość "kasowanych" bajtów by mieć cały ekran: grafika - 6144, atrybuty 768
   ld hl,16384 ; adres początku ekranu
   ld de,16384+1 ; adres początku ekranu + 1
   ld bc,6911 ; ilość kopiowanych bajtów
   ld (hl),l ; wstaw zero do zawartości pamięci o adresie w HL (czemu zero? Bo 16384 to 64 w H i 0 w L)
   ldir ; skopiuj zawartość pamięci z adresu HL do pamięci o adresie DE, zwiększ o 1 HL oraz DE, zmniejsz o 1 BC <- wykonuj aż BC=0
   ret

co do INT są jakies przyklady ?
Są ale to temat dla zaawansowanych - w sumie to proste ale dla początkujących będzie wyglądało jak bełkot ew. czary-mary ;)

chyba wszystkie gry mają taką synchronizacje
Synchronizację co ramkę można też uzyskać przez:

halt ; czekaj na kolejne przerwanie
Pamiętać jednak trzeba by włączyć przerwanie - inaczej będzie czekać w nieskończoność :D

ei ; włącz przerwania
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: 1260
  • Miejsce pobytu:
    Warszawa
Odp: Kurs programowania w asm (dla ZX na początek)...
« Odpowiedź #29 dnia: 2019.06.06, 14:57:34 »
Co do synchronizacji z ramką, to trzeba napisać swoją obsługę INT.

Często wystarczy przed efektem dać HALT - poczeka do przerwania czyli początku wyświetlania ramki.
Da się to nawet zrobić w BASIC https://www.speccy.pl/forum/index.php?topic=1006.msg11966#msg11966
PAUSE n wykonuje właśnie n razy HALT :)