Autor Wątek: mój pierwszy programik  (Przeczytany 36456 razy)

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: mój pierwszy programik
« Odpowiedź #30 dnia: 2018.08.07, 13:34:13 »
Już naliczylem dwa: pasmo i emulator :P. A ZXa podpinam pod monitor i działa z BASIC :P

gorgh: :) plynny efekt wizualny pod EightyOne.
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: mój pierwszy programik
« Odpowiedź #31 dnia: 2018.08.07, 13:37:49 »
Już naliczylem dwa: pasmo i emulator :P. A ZXa podpinam pod monitor i działa z BASIC :P

Chciałeś przejść z kodu ASM do TAP/TZX - do tego wystarczy jedno narzędzie :P

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #32 dnia: 2018.08.07, 15:17:26 »
Już naliczylem dwa: pasmo i emulator :P
Ke? a spojrzałeś na link który podałem? Potem działasz tylko na ConTEXT - F9 kompilujesz, F10 uruchamiasz. Wszystko dzieje się samo :P
« Ostatnia zmiana: 2018.08.07, 16:21:48 wysłana przez Dalthon »
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

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: mój pierwszy programik
« Odpowiedź #33 dnia: 2018.08.07, 16:09:59 »
Cytuje:

Cytuj
When I develop Machine Code games for the Sinclair ZX Spectrum, I use the following Development Tools:
•ConText Text Editor (http://www.contexteditor.org/)
•Pasmo Assembler (Pasmo)
•Spectaculator Emulator (http://www.spectaculator.com/)

Az trzy (3) programy potrzebne i pod Winzgroza :P

Ale Panowie, spokojnie, programisty ze mnie nie zrobicie. Nie ten wiek, nie te umiejetnosci, nie te zainteresowania, ale kibicuje nowemu forumowiczowi.
« Ostatnia zmiana: 2018.08.07, 16:33:23 wysłana przez Klaud »
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #34 dnia: 2018.08.07, 23:23:08 »
dzisiaj znowu powalczyłem, zrobiłem okręgi xorowane, działa na razie wolno, trochę wolniej od plazmy, ale jeszcze będę apelował
edit: wykorzystałem tą samą procedurę rysowania, tylko, że teraz nie są liczone odrębnie pixele, tylko w procedurze stawiającej je od razu pobierane są wartości z tablicy (dwukrotnie, bo to ta sama bitmapa tylko z przesunięciem), dlatego też można było podwoić ilość pixeli.
« Ostatnia zmiana: 2018.08.07, 23:39:10 wysłana przez gorgh »

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #35 dnia: 2018.08.08, 17:32:06 »
po krótkiej zabawie w efekty postanowiłem zabrać się za coś większego- planuję zrobić port Yoompa na ZX 128. Algorytm jest bajecznie prosty, tylko kod trzeba rozpętlić na jakieś 50 kb :)

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: mój pierwszy programik
« Odpowiedź #36 dnia: 2018.08.08, 20:39:00 »
Wszystkie dywagacje o timingach wydzieliłem do nowego wątku.

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #37 dnia: 2018.08.09, 14:15:35 »
szanowni koledzy, proszę o optymalizację tej procedury:
ld a,($ffff) ;13
 and %11000000 ;7
 ld c,a ;      ;4
 ld a,($ffff) ;13
 and %00110000 ;7
 ld d,a        ;4
 ld a,($ffff) ;13
 and %00001100 ;7
 ld e,a        ;4
 ld a,($ffff)  ;13
 and b         ;4 
add1
 add a,c       ;4
add2
 add a,d       ;4
add3
 add a,e       ;4

 ld l,a        ;4

 ld a,(hl)     ;7
 ld ($ffff),a ;13
 inc h         ;4
 ld a,(hl)     ;7
 ld ($ffff),a ;13
 dec h         ;4
Procedura ma na celu postawienie 2 bajtów (jeden pod drugim) i jest rozpętlona. Rozmiar pixela- 2 x 2. Procedura generująca hektar kodu podstawia na sztywno miejsca w tablicy z których ma się brać pixel (każdy pixel zajmuje 2 bity i jest powtórzony 4 razy w bajcie) - to rozkazy
ld a,($ffff)
rejestry c,d i e służą do przechowywania wartości danych pixli do późniejszego dodawania, rejestr b przechowuje wartość "%00000011" dla oszczędzenia 3 cykli przy rozkazie "and".
Algorytm wykonuje się w 153 T stanach, nie za bardzo mam pomysł jak to dalej optymalizować.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: mój pierwszy programik
« Odpowiedź #38 dnia: 2018.08.09, 14:40:10 »
Tak na szybko i zakładając, że to jest kod samomodyfikujący i w miejsce tych wszystkich FFów coś z zewnątrz ładuje odpowiednie adresy to nie specjalnie widzę tu miejsce do optymalizacji. Jakbym nie oglądał to brakuje rejestrów ;)

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #39 dnia: 2018.08.09, 16:01:23 »
Skoro b trzyma tylko wartość dla oszczędności and'owania to może...
ld a,($ffff) ;13
 ld b,a        ;4
 and %11000000 ;7
 ld c,a        ;4
 ld a,b        ;4
 and %00110000 ;7
 ld d,a        ;4
 ld a,b        ;4
 and %00001100 ;7
 ld e,a        ;4
 ld a,b        ;4
 and %00000011 ;7 

i wtedy oszczędzasz 24 T...
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

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #40 dnia: 2018.08.09, 16:48:03 »
fajnie by tak było, tylko, że ($ffff) to za każdym razem inna wartość

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #41 dnia: 2018.08.09, 17:01:16 »
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

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #42 dnia: 2018.08.10, 02:54:22 »
ha! po dwóch dniach bojów udało się!
gra będzie chodzić w 4 ramkach, niestety mniej raczej jest niemożliwe, jutro to zanimuję

Dr Piotr

  • ***
  • Wiadomości: 196
Odp: mój pierwszy programik
« Odpowiedź #43 dnia: 2018.08.10, 06:07:51 »
szanowni koledzy, proszę o optymalizację tej procedury:
ld a,($ffff) ;13
 and %11000000 ;7
 ld c,a ;      ;4
 ld a,($ffff) ;13
 and %00110000 ;7
 ld d,a        ;4
 ld a,($ffff) ;13
 and %00001100 ;7
 ld e,a        ;4
 ld a,($ffff)  ;13
 and b         ;4 
add1
 add a,c       ;4
add2
 add a,d       ;4
add3
 add a,e       ;4

 ld l,a        ;4

 ld a,(hl)     ;7
 ld ($ffff),a ;13
 inc h         ;4
 ld a,(hl)     ;7
 ld ($ffff),a ;13
 dec h         ;4
Procedura ma na celu postawienie 2 bajtów (jeden pod drugim) i jest rozpętlona. Rozmiar pixela- 2 x 2. Procedura generująca hektar kodu podstawia na sztywno miejsca w tablicy z których ma się brać pixel (każdy pixel zajmuje 2 bity i jest powtórzony 4 razy w bajcie) - to rozkazy
ld a,($ffff)
rejestry c,d i e służą do przechowywania wartości danych pixli do późniejszego dodawania, rejestr b przechowuje wartość "%00000011" dla oszczędzenia 3 cykli przy rozkazie "and".
Algorytm wykonuje się w 153 T stanach, nie za bardzo mam pomysł jak to dalej optymalizować.

To samo w 129 taktach:
ld hl, $ffff  ; 10

ld a,(hl) ; 7
and 0xc0 ; 7
ld c,a ; 4

ld a, (hl) ; 7
and 48 ; 7
or c ; 4
ld c,a ; 4

ld a, (hl) ; 7
and 12 ; 7
or c ; 4
ld c,a ; 4

ld a, (hl) ; 7
and b ; 4
or c ; 4

ld e, a ; 4

ld a, (de) ; 7
ld (hl), a ; 7
inc d ; 4
ld a, (de) ; 7
ld (hl), a ; 7
dec d ; 4

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: mój pierwszy programik
« Odpowiedź #44 dnia: 2018.08.10, 11:16:48 »
@Dr Piotr Robisz ten sam błąd co Dalthon. $ffff to nie jest $ffff tylko miejsce, w które inny kod wstawia adresy. Każdy może być inny.