forum speccy.pl

Komputery z Z80 => AMSTRAD => Wątek zaczęty przez: ZbyniuR w 2013.02.06, 01:27:04

Tytuł: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.06, 01:27:04
OVERSCAN

W tych nowszych grach obrazek startowy zajmujący także ramkę to nie taki rzadki widok, jest tez kilka pokazów slajdów z takimi większymi obrazkami.
Nie raz też ekranik się zmniejsza np do rozmiarów podobnych jak w Spectrum by łatwiej zrobić port gry na CPC, mamy wtedy szerokaśną ramkę. Za to procek się troszkę mniej męczy bo ma mniejszy obszar pamięci ekranu do "obrobienia". A np ARKANOID ma obraz bardziej wysoki niż szeroki.  Bo aby w CPC zmienić proporcje ekranu nie potrzeba przerwań ani kości z PLUSA, tylko trzeba zmienić zawartość kilku rejestrów w CRTC, a robi się to komendą OUT. OUT &BC00,(tu nr rejestru który chcesz zmienić):OUT &BD00,(tu wartość jaką chcesz tam wpisać). Overscan wymaga zmian w następujących rejestrach.

nr rejestru / co to zmienia / standardowa wartość / FullScreen
2 - pozycja lewej krawędzi ekranu - 46 - 50
1 - szerokość ekranu - 40 - 48
7 - pozycja górnej krawędzi ekranu - 30 - 35
6 - wysokość ekranu - 25 - 34

Pełny opis rejestrów http://www.cpcwiki.eu/index.php/CRTC#The_6845_Registers

Bawiąc się nimi można zmieniać na NTSC, włączać interlace, zmienić wygląd i mruganie kursora, zmieniać wysokość znaków w pikselach, zmieniać adres pamięci ekranu, rysować piórem świetlnym po ekranie.

Czyli OUT &BC00,2:OUT &BD00,50:OUT &BC00,1:OUT &BD00,48:OUT &BC00,7:OUT &BD00,35:OUT &BC00,6:OUT &BD00,34  daje FullScreen nie zostawiając ramki w rozdziałce 768x272 w 2kolorach, 384x272 w 4kol, lub 192x272 w 16. Ale jak łatwo policzyć taki ekran zajmuje dokładnie 25,5KB a jak widać w dolnych kilku linijkach powtarza się to co jest na górze ekranu. I tu się przydają przerwania, by w chwili gdy ma wyświetlić dolne linijki czytał je spod innego adresu, co trzeba przestawiać ileś tam razy na sekundę. ;)

Słyszałem że w dodatkowych niepublikowanych rejestrach można włączyć drugi obszar do wyświetlenia, (dzięki czemu np FullScreen nie wymagałoby przerwań) a widziałem to w paru gierkach. np w Prehistoric 2, ekran jest szerszy ale też niższy niż standardowo więc nie przekracza 16KB, ale kilka linijek odstępu pod nim jest jeszcze linijka z punktami i życiami, a pomiędzy nimi jest ramka.

Jako ciekawostkę podam że jedynym trybem ekranu w Amstradzie PCW który ma podobnego scalaka do grafy, jest 720x256 2kolory 22,5KB czyli zostawia wąziutką rameczkę.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.06, 01:35:35
Propo mrugania na ekranie po wpisaniu CAT na dyskietce z grą R-Type 2012.
Mrugające kolory w Amstradzie to nie czary. Dopisując po wyświetleniu się tej listy rekordów INK 2,10,20 słowo Ranking zacznie mrugać tak samo. Bo dodając trzeci zbędny parametr przy definiowaniu koloru zaczyna mrugać. Podobnie BORDER 6,18 a normalnie wystarcza jeden parametr. Ciekawsze jest to że po wpisaniu komendy CAT zamiast wyświetlać listę plików i ilość wolnego miejsca tworzą się cuda. hehe :)

Zanim podpowiem jak coś takiego umieścić na dyskietce. Wyjaśnię że gdy wyświetlimy na ekranie komendą PRINT znaczki o kodach 1 do 31 można robić fajne rzeczy które normalnie robimy takimi rozkazami jak MODE, INK, BORDER, LOCATE, SYMBOL i parę innych. By uzyskać te znaczki wciskamy litery z Controlem.

Klawisz - co robi (parametry jeśli konieczne)
Ctrl+D - MODE - zmienia tryb graficzny (0, 1 lub 2)
Ctrl+] - BORDER - kolor ramki (2 znaczki jeśli nie ma mrugać to takie same)
Ctrl+\ - INK - definiuje kolor w palecie - (nr kol i 2 znaczki tak jak wyżej)
Ctrl+O - PEN (1 znak)
Ctrl+N - PAPER (1 znak)
Ctrl+X - przełącza kolory na invers
Ctrl+G - brzęczyk
Ctrl+0 - LOCATE - zmienia współrzędne kursora (2 znaki)
Ctrl+L - CLS
Ctrl+U - wyłącza wyświetlanie znaków
Ctrl+F - przywraca wyświetlanie
Ctrl+V - zmienia tryb nakładania się znaków na siebie (cyfra 1 pozwala nakładać na siebie np L i / dając literkę Ł)
Ctrl+Y - SYMBOL - definiuje wygląd znaku (1szy znak to nr ASCII a kolejne 8 to wygląd znaku)
Ctrl+(jeden z HIJK) - to strzałeczki które przesuwają kursor

Można się tym troszkę pobawić by sprawdzić jak to działa. Stosowanie takich tricków bardzo skracają lisingi w Basicu. Bo pozwala wcisnąć w komendę PRINT szereg rozkazów definiujących wygląd ekranu, albo upchać wygląd wszystkich polskich znaków w jednej linijce.
A teraz jak to zastosować na dyskietce. Będzie potrzebny jakiś edytor dyskowy. Na zerowej ścieżce 2KB czyli sektory od C1 do C4 zawierają katalog dyskietki. By zrobić coś takiego jak na wspomnianej R-Type trzeba przygotować sobie szereg znaczków jakie chcemy aby się wykonały lub wyświetliły po wpisaniu komendy CAT a potem podzielić je na 6 znakowe fragmenty i wykorzystując puste pozycje w katalogu wpisywać zamiast 8 znaków nazwy pliku, znaczek Ctrl+F potem 6 znaczków jakie chcemy i Ctrl+U by zapobiec wyświetleniu się kropeczki w nazwie pliku oraz ilości KB do tego pliku. Nie zapomnijcie zrobić kopi dyskietki na której grzebiecie i nie uszkodźcie nazwy prawdziwych plików jakie chcecie by działały z tej dyskietki. Miłej zabawy.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: RafalM w 2013.02.06, 10:09:54
A może zechciałbyś napisać taki wstępny artykuł - jak w ogóle Amstrad generuje obraz, jak jest zorganizowana pamięć obrazu, jak ustawia się tryby graficzne, zmienia paletę, jak wyświetlić sprajta ?

Żeby rozmawiać o trickach trzeba najpierw orientować się w podstawach ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.06, 13:22:00
  To by pochłonęło masę czasu a z natury jestem leniwy. I obawiam się że mało kto by to chciał czytać i stosować. Nie za bardzo mi się chce uprawiać sztukę dla sztuki, wolałbym wiedzieć że konkretna osoba ma konkretne pytanie, to przynajmniej wiedział bym, że nie piszę do ściany.
  To co napisałem powyżej dla osoby która bawiła się kiedyś Basic-iem i to niekoniecznie na CPC, powinno być zrozumiałe. Jak komuś się bardzo zachce a umie używać Googla to sobie znajdzie dokładny opis komend Basica z parametrami, organizację pamięci, opis kernela (czyli wszystkich procedur maszynowych w ROMie), opis każdego pina na każdym złączu, czy też wspomniany wyżej opis rejestrów CRTC lub AY, Że o rozkazach Z80 nie wspomnę. Nawet jak materiał nie będzie w znanym mu języku Google przetłumaczy, a żyłka odkrywcy dopełni reszty. ;)
  Na sprajtach się nie znam, Basic standardowo komend do nich nie ma, a programy do ich tworzenia zwykle mają edytor i dodatkowe komendy by gotowych sobie w Basicu użyć, co dokładnie opisują w instrukcji. Sam jakoś nigdy się za żadne nie zabrałem. Gdy pisałem kiedyś coś a`la okienkowa nakładka na system, strzałeczkę nakładałem na tło w inversie tak by go nie naruszyć, a wyświetlałem jako zaprojektowane wcześniej znaki, wyświetlane w trybie graficznym by precyzję co do piksela umożliwić, a użyłem standardowych rozkazów Basica. Jeśli ktoś ma jakieś konkretne pytania a nie polegają na tym że znajdź mi to i to bo mi się nie chce Googla użyć. to mogę odpowiedzieć w tym wątku lub na gg. :)
  Zainteresowanym mogę udostępnić .dsk np z polskimi znakami w zaledwie 2óch linijkach Basica, albo wyjaśnienie jak używać wąskiej czcionki takiej o szerokości 4 pikseli tak aby mieć 40 znaków w wierszu w 16kolorowym trybie ekranu albo 80 znaków w tym 4kolorowym. To pierwsze pewnie nie raz w grach widzieliście nawet czcionki w paseczki, a to ostatnie to mój oryginalny pomysł. ;)

  Jeśli chodzi o artykuł wstępny to raczej by musiał wyjaśniać jak wogóle coś włączyć na Amstradzie z dyskietki lub taśmy. By chciało się komuś wyciągnąć maszynę z piwnicy kolegi albo pobawić się emulatorem. Nawet napisałem niedawno coś takiego na ppa.pl
To Amigowa stronka i jest tam także wątek o Amstradach ale martwy. Co mnie nie powstrzymało przed dodaniem swoich 3ech groszy.
http://www.ppa.pl/forum/hyde-park/13918/amstrad-cpc/2#m367884   <- tu i o jeden wpis powyżej też.
A także moje wynurzenia o retro kompach  http://www.ppa.pl/forum/hyde-park/24701/hej-byly-czasy-c64-i-atari/2#m350785

Jeśli ktoś tam zajrzy i chce skomentować to może tutaj, bo tam raczej nikt tego nie zauważy. ;)

PS.: Wiem że Overscan robi się podobnie jak pisałem w tym wątku wcześniej także na małym Atari 384x240, w ST 704x260 i w Amidze 704x576 OCS i 1440x580 AGA, a w Commodorku można wyświetlać duszki na ramce, ale czy można w nim robić Overscan to nie wiem. Podobnie nie wiem czy da się to w Spectrum zrobić. Nie śmiejcie się tylko mnie oświećcie. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: RafalM w 2013.02.06, 14:49:18
Rozumiem, też nie lubię pisać do ściany ;)

Więc mam konkretne pytanie:

W Spectrum mamy pamięć ekranu pod sztywnym adresem 16384 i żeby ten ekran wyświetlić nie trzeba robić nic, bo i tak 50 razy na sekundę zostanie on wysłany przez Ulę na telewizor, czy chcemy tego czy nie.

Jak jest w Amstradzie? Coś mi się kojarzy że tam trzeba napisać procedurę która wyśle grafikę na Spectrum za pomocą instrukcji OUT. Czy dobrze mi się kojarzy?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.06, 17:16:17
W Amstradzie można wyświetlić dowolny obszar pamięci. Zmienia się go modyfikując w CRTC rejestr 12 (starszy bajt adresu nowej pamięci ekranu) a w rej.13 młodszy bajt, który zwykle zostawiamy na zero. Wtedy wyświetla 16 KB pamięci poczynając od podanego adresu. Domyślna pamięć ekranu zaczyna się od szesnastkowo &C000, a np polecenia OUT &BC00,12:OUT &BD00,&10 przełączy obszar pamięci wysyłanej na ekran na &4000. Natomiast OUT &BC00,12:OUT &BD00,&30 przywróci stan normalny. A 2gi parametr się nie pokrywa z adresem pamięci z punktu widzenia procesora bo CRTC widzi bloki pamięci w jakiejś innej kolejności, nie wiem czemu.  Jeśli przygotujesz sobie odpowiednio dwa obrazki i umieścisz pod tymi adresami i dopiszesz procedurkę w kodzie maszynowym (ot raptem kilkanaście bajtów) która nimi "miga" to powstaną kolorowsze obrazki tzn 10 kolorowy w trybie 4 kolorowym lub 136kol w trybie 16kol. Skoro "zmieszanie" np koloru 4 z 7 da taki sam kolor pośredni co zmieszanie kol 7 z 4 to więcej kombinacji się nie da. ;) Basic raczej nie będzie migał dość szybko, no chyba że na emulatorze przestawionym na kilkaset % prędkości. Zresztą trudniej przygotować takie obrazki niż sprawić by tak mrugały. hehe :D

A skoro już mowa o dwóch ekranach wpisując w 6128 - POKE &B7C6,&40  komputer zaczyna wszystkie polecenia do rysowania linii i wyświetlania tekstów wykonywać na pamięci ekranu od &4000, wpisując tam &C0 przywraca standardowy obszar pamięci. (W modelu 464 adresem tego POKE jest &B1CB) Ten POKE w kombinacji z tymi OUT-ami powyżej, daje możliwość przełączania dwóch ekranów tak by w chwili gdy wyświetla jeden z nich rysował sobie klatkę animki na drugim z nich, po czym wyświetla nowo narysowaną a na poprzednim ekranie w czasie gdy tworzy już kolejną klatkę na ekranie w danej chwili schowanej. Był o tym artykuł ANIMACJA w Bajtku 5/6-1986 niestety z błędami. Może pewnego pięknego dnia zechce mi się go poprawić i tu wstawić .dsk
A gdyby do tego jeszcze dodać bloki ramdysku - oczopląs. :D

PS.: Chyba jednak można to jakoś modyfikować w Spectrumie bo czytałem coś o programowych trybach graficznych które mrugają ekranami by tworzyć wrażenie dodatkowych kolorów.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: RafalM w 2013.02.06, 21:13:54
Dzięki :)

Cytuj
PS.: Chyba jednak można to jakoś modyfikować w Spectrumie bo czytałem coś o programowych trybach graficznych które mrugają ekranami by tworzyć wrażenie dodatkowych kolorów.

To trochę inaczej działa. Istotnie w opisanym efekcie co drugą klatkę wysyłamy np raz czerwony atrybut, a raz żółty w efekcie dostając kolor pomarańczowy, mniej lub bardziej migający.

Ale piksele i kolory te są czytane przez ULĘ zawsze spod tych samych adresów pamięci. Czyli nie możemy sobie wskazać na inny obszar pamięci tylko musimy podmienić wartości w sztywno ustalonym obszarze.

Na Spectrum 48 nie ma bata, trzeba przekopiować bajty jeden po drugim, na co między odświeżeniami ekranu jest niestety mało czasu i zrobić cały ekran jest praktycznie niemożliwe

Na modelach ze 128 kB jest myk w postaci stronicowania (paging). Ponieważ procesor Z80 jest w stanie obsłużyć tylko 64 kB adresów to aby móc korzystać z większej pamięci wprowadzono strony. Pisze się instrukcję OUT i całe 16 kB czyli jedna strona zostaje zamieniona przez inną stronę. W ten sposób  możemy łatwo i natychmiast przełączać dwa ekrany ale formalnie w chwili wyświetlania każdy z nich jest pod adresem 16384 :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.07, 07:13:53
Ahaaa :) Ciekawe jest to że 16KB bloki ramdysku w CPC 6128 a także w Atari 130XE. Przełączają się pod ten sam adres co w Spectrum. Może mają podobny scalaczek do zarządzania pamięcią? Nie wiem jak to jest w C128. Tylko że niestety w CPC tak przełączone bloki ramdysku widzi tylko procek a CRTC nie. :(  Możesz sobie tam przełączać co chcesz i Z80 widzi tam ten blok który przełączysz ale CRTC potrafi wyświetlać obraz tylko z podstawowych 64KB.

Ale nie płaczmy, tylko się bawmy. :) Komenda która przełącza blok pamięci 16KB zaczynający się od &4000 (lub 16384 jak ktoś woli), to OUT &7F00,192  <- ten ostatni numerek to standardowy blok. A ramdysk w 6128 to 4 bloki o numerach od 204 do 207. Ot i tyle. :)

Aha po podłączeniu standardowego rozszerzenia o 64KB (często kupowanego przez posiadaczy CPC464) dodatkowe bloki są pod numerami od 196 do 199, czyli innymi niż ramdysk w 6128, jednak 6128 też je będzie widział pod tymi samymi nr co w 464. Niestety na tak rozszerzonym 464 nie pójdzie większość programów które wymagają 128KB ramu właśnie z powodu tych innych nr bloków.

Są też rozszerzenia o 256KB które oba kompy (tzn 464 i 6128) widzą tak samo, bo w tym drugim wewnętrzny ramdysk jest wtedy niewidoczny. Można podłączyć takie dwa, co w sumie da 572KB RAMu. W takiej pamięci część dalszych bloków ma takie same nr jak te wewnętrzne w 6128 więc w 464 wraz ze stacją dysków, większość softu z 6128 powinna chodzić z wyjątkiem Basiców które używają którąś z nowych komend ze 6128. Większe rozszerzenia np o 4MB wymagają innego scalaczka do zarządzania RAMem. Może trudno je kupić ale w emulatorze się je ustawia suwaczkiem ot tak. ;)

Wszystkie powyższe uwagi o 464 prócz wersji Basica dotyczą tak samo modelu 664 oraz 464+, a te o 6128 dotyczą też 6128+. Standardowy blok przywraca OUT &7F00,192  A nr banku (w rozszerzeniu o 512KB) liczone od 0 do 31 oblicza wzór: OUT &7F00,196+(nrbanku AND 3)+(nrbanku AND 28)*2: Z czego standardowe wewnętrzne w 6128 to banki od 4 do 7.

PS.: Najszybszą znaną mi metodą przenoszenia bloku pamięci jest rozkaz ldir w asemblerze Z80. Jeśli nie kojarzysz to mogę wyjaśnić. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2013.02.07, 07:22:08
LDIR nie jest w żadnym wypadku najszybszą metodą przenoszenia danych. Jest metodą najprostszą, ale ma na tyle duże narzuty, że choćby dobrze skonstruowana pętla z ciągiem kilkudziesięciu LDI będzie sporo szybsza.

Zresztą jak poprosisz to RafalM ci poopwiada więcej na ten temat ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Tygrys w 2013.02.07, 10:08:35
Jakbym bazował na LDI to Dziurak by nie powstał ;) Ale o tym, tzn o przenoszeniu blokow pamięci, będzie artykuł, tzn jest w moim TODO.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2013.02.07, 10:12:11
Wiem - dlatego napisałem choćby :P
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: RafalM w 2013.02.07, 10:16:35
Cytuj
PS.: Najszybszą znaną mi metodą przenoszenia bloku pamięci jest rozkaz ldir w asemblerze Z80.

Jedna z wolniejszych :)

Kilka metod :

LD A,(DE)
LD (HL),A
INC HL
INC DE - 25 taktów na bajt

LDIR - 21 taktów na bajt

LDI - 16 taktów na bajt
LDI
LDI
LDI
...

kopiowanie przez stos - można zejść do jakichś 12,5 takta na bajt, ale  o wiele trudniejsze do zrozumienia i napisania niż poprzednie metody

No i pamiętajmy że w programowaniu mamy coś za coś - albo krótki kod kopiujący i mniejsza szybkość, albo dłuższy kod i większa szybkość.

W skrajnym najszybszym przypadku aby skopiować dajmy 5 kB danych potrzebny jest kod długości... jakieś 7 kB :)

Dobrym kompromisowym rozwiązaniem jest wspomniana pętla a w niej dajmy na to 16,32 itp. instrukcje LDI
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.07, 13:40:09
Ja pisywałem tylko w Basicu a

LD HL
LD DE
LD BC
LDIR
RET

to najbardziej zaawansowany kawałek kodu jaki zdarzało mi się używać świadomym znaczenia każdego bajta. :)
Czy potraficie tak zmodyfikować powyższą metodę bym mógł ją wywoływać w Basicu podając jednocześnie parametry?
czyli CALL adrprocedury,adrźródła,adrdocelowy,ileprzesłać 
a nie jak teraz, że muszę POKE-ami ją modyfikować i wywołać prostym CALL adrprocedury

I skoro trafiłem na takich speców to zapytam, ile by zajął kod do przeniesienia 16KB tą metodą LDI?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Tygrys w 2013.02.07, 13:53:11
to zależy od tego ile razy to LDI byłoby powtórzone:

LD HL,zrodlo ; 3b
LD DE,del ; 3b
LD A,0 ;2b <-- 256 powtorzen
petla:
rept 64 ; 64x powtorzone to co jest miedzy rept i endm
  LDI ; 64 * 2bajty
endm
DEC A ; 1b
jp NZ,petla ; 2b
ret

co da 13+128 = 141 bajtow
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: pear w 2013.02.07, 13:59:13
Najszybsza metoda wymaga drobnej przeróbki http://velesoft.speccy.cz/data-gear/zxdma-interface2.jpg (http://velesoft.speccy.cz/data-gear/zxdma-interface2.jpg) :)
Ile wtedy będzie bajtów/takt ? (Max. speed of data transfer on ZX128+ is 17.3 kB(17727 bytes) / frame = 865.6 kB(886350 bytes) / second) :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2013.02.07, 14:45:09
Przy DMA to ciężko liczyć bajty na takt, bo ono zdaje się zatrzymuje procesor dając mu któreś -REQ. Ale tak - jeśli ktoś potrzebuje tak szybkich transferów i nie przejmuje się, że będzie jedynym użytkownikiem programów dla tego hardware'u to dodanie DMA jest niezłym rozwiązaniem ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.13, 18:36:04
Zmiana tematu. Dodaję dziś .dsk z kilkoma pchełkami w Basicu jako przykłady zastosowania pomysłów, które wcześniej tu opisywałem. Ale spokojnie nie podniecajcie się to nic szałowego. Oraz genialnie zrobiony przez francuzów mrugający fullscreen który sprawia wrażenie 16 kolorów w trybie który normalnie ma 4.
   Po kolei: 80OK.BAS - To mój patent na używanie wąskiej czcionki 4x8 pikseli, po to by w 4kolorowym trybie mieć 80 znaków w wierszu. Jakby ktoś chciał 40 znaków w 16 kolorach to trzeba inaczej przygotować fonta. Może do tego wrócę jakby ktoś był zainteresowany.
FAST.BAS - To zaczerpnięte z Bajtka nowe komendy pozwalające przyspieszyć stacje dysków o ok 20% oraz wyświetlanie na ekranie o jakieś 40%. Upchane przeze mnie do paru linijek. ;)
EKRANY.BAS - To przykładowe użycie kilku opisanych wcześniej w tym wątku pomysłów, oraz jak w Basicu narysować kółko oraz schować w ramdysku ekran kodem LDIR. ;)
KOLORY.BAS - To efekt nudy, jak drobna szachownica z pikseli daje złudzenie że mamy więcej niż 4kolory. Każda linijka to tam osobny programik. A propo świetnie ten trick wykorzystywała Jill Lawson która swojego czasu tworzyła na CPC obrazy i genialnie dobierała paletę. Zresztą sami spójrzcie co można zrobić w 4 kolorach. http://www.google.com/search?tbm=isch&q=Jill+Lawson+Amstrad+CPC
OVER2.BAS - Pozwala regulować rozmiar overscana strzałkami i podaje parametry do komend OUT oraz ile KB zajmuje taki ekran.
POL.BAS - To polskie znaki wg mojego pomysłu, wszystkie małe plus 3 najczęściej używane duże. Całość upchana w 2 linijki Basica. Niestety w żadnym sensownym standardzie, gdyż Latin2 oraz WindowsPL korzystają z kodów które CPC używa do sterowania strzałkami oraz definiowania klawiszy funkcyjnych. Reszta pliczków to jakieś bzdurki. ;)
   Ale największą gwiazdą jest na osobnej dyskietce obrazek KVETY zakoszony z Photoshopa. Rozbity na 2 obrazki jeden 16 kol a drugi 4, ale w lepszej rozdzielczości a całość wygląda jak 384x272 w 16 kol, co zajmuje w pamięci 51KB. Wygląda jak na STku. Emulator Caprice32 ustawiony na 100% prędkości mruga najmniej, a na 200% mruga tak że co parę sekund widać tylko jeden z tych obrazków. Gdzieś widziałem podobnie zrobionego Trola z Warcrafta, jak go znowu znajdę dam linka. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Pyza^Illusion w 2013.02.13, 19:28:38
Zresztą sami spójrzcie co można zrobić w 4 kolorach. http://www.google.com/search?tbm=isch&q=Jill+Lawson+Amstrad+CPC

Google po przeskalowaniu obrazków nieco przekłamuje ;)
Tutaj właściwy link: http://cpcrulez.fr/games_GFX-artist-jill_lawson.htm (http://cpcrulez.fr/games_GFX-artist-jill_lawson.htm)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Abrimaal w 2013.02.13, 20:34:05
Overscan - super, Ekrany - nie lepiej byłoby to rysować w MODE 1? Można by użyć kolorów i koła byłyby dokładniejsze (i szybszy LDIR).
Contiki - bardzo ciekawy dithering,
80W1 - font jest trochę nieczytelny, na Spectrum od dawna używa się pisma 3x6px (definiowane w kratce 4x8 lub 4x7) i wydaje mi się, że pismo jest czytelniejsze.

Najlepsze są Organy, czegoś takiego szukałem, aby zgrać sobie sample, choć nie wiem czym zmieniać obwiednię tonu.
Oktavy i Vibrato zmienia się kursorami, "Obwiednię Głośn." klawiszami numerycznymi, a czym Obwiednię Tonu?
Szukałem czegoś takiego od dawna na AY (choć szkoda, że nia ma arpeggio) i nadal poszukuję dla ZX 48 (beeper), C64 i Atari 8bit.
Choć absolutnie nie potrafię grać muzyki na klawiaturze PC, wrzuciłem to, śmiejcie się do woli :P
http://www.youtube.com/watch?v=-ocd9jW41MQ (http://www.youtube.com/watch?v=-ocd9jW41MQ)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.13, 20:49:29
Mój błąd, podałem złą nazwę pliku, przez co ta koszmarna czcionka którą pokazałeś to wersja beta, którą komp tworzy przerabiając standardową, używałem to do testowania POKEów w takim mieszanym trybie zanim przygotowałem właściwą czcionkę. :)

Powinno się to włączać plikiem  80ok.BAS  Wtedy wygląda przyzwoicie, choć poszczególne literki pewnie niejeden by poprawił.

Nie ja pierwszy wpadłem na pomysł że węższa czcionka da więcej znaków w wierszu, widziałem też podobne rzeczy na C64 a na Atari ładną 6x8. W CPC zdarza się taka na obrazkach, ale w działającym programie zobaczyłem to dopiero po latach. Za to często widać w grach taką wąską czcionkę w trybie z szerokimi pikselami, by mimo to mieścić 40 znaków w wierszu, podobnie na C64.

Te organy były w Bajtku ale ta wersja z reduksa miała błędy, nie jestem pewien czy wszystkie poprawiłem bo pamiętam że niektóre dźwięki były inne. Obwiednię tonu zmieniają cyfry w górnym rzędzie a szum znak = i Ł.

Są podobne organy na PC np TPIANO.EXE 24KB w jednym pliku a ma 100 instrumentów i nagrywa co grasz. ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: faustxxx w 2013.02.14, 23:37:13
Te organy były w Bajtku ale ta wersja z reduksa miała błędy, nie jestem pewien czy wszystkie poprawiłem bo pamiętam że niektóre dźwięki były inne. Obwiednię tonu zmieniają cyfry w górnym rzędzie a szum znak = i Ł.

Grrrr... a dać znać niełaska;)? Wrzuciłbym poprawkę:P
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Abrimaal w 2013.02.15, 00:25:12
Przydałaby się jeszcze jedna mała poprawka w organach - klawisz "n" jest podpisany 2 razy zamiast "n" i "m".

ZbyniuR, czy mógłbyś podrzucić TPiano w zip? Ja znalazłem z roku 2002 i ma tylko 9 instrumentów bez nagrywania.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.02.17, 23:02:20
Okazuje się że mi nie nagrywa, pomyliłem z inną pchełką jaką kiedyś miałem i mi wcięło. "mini piano download" w googlach namierza sporo podobnych, i niektóre nagrywają. Ta robi to z pewnością ale nie jest aż taka malutka.
http://www.dobreprogramy.pl/Little-Piano,Program,Windows,38282.html
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.03.02, 15:11:21

W CPC Basic zaczyna się od 368 do HIMEM który domyślnie jest na 42619 ale można go przestawiać a czasem nawet trzeba. Max w górę to 42747, by to zrobić trzeba wyłączyć możliwość zmieniania wyglądu znaków komendą SYMBOL AFTER 256. Zmiana parametru na niższy pozwala zmieniać wygląd od tego kodu ASCII w górę i obniża HIMEM o tyle by się te znaki tam zmieściły. Poniżej tego HIMEM jest równe 2KB na katalog dyskietki, a pod nimi jest już obszar Basica który od dołu zapełniają linijki programu a od góry używane w danej chwili zmienne. Więc można go obniżyć o tyle by te 3 rzeczy tam weszły. Inaczej zgłasza błąd. System nie pozwala wczytywać binarek poniżej HIMEM. poniżej adresu 368 jest część tablicy skoków do ROMu, podobnie jak gdzieś tam powyżej standardowego HIMEM gdzie jest dłuższa ta lista i tam też jest obszar ze znaczeniem klawiatury i paletą kolorów i kupa zmiennych systemowych dotycząca np trybu wyświetlania albo pozycji okien. Gdzieś powyżej &af00 jest jakieś ćwierć KB wolne gdzie można małe binarki wcisnąć a ten obszar nie jest kasowany po resecie, zresztą podobnie jak ramdysk. Jest tam też bufor edytowanej aktualnie linijki i inne cuda których adresów i tak nie pamiętam. :(
Standardowa pamięć ekranu w CPC zaczyna się od &C000 czyli 49151 i ma 16KB, nooo prawie. ;) Jednak w linijce Basica poniżej nie można tego wpisać w hexach bo Basic CPC ma błąd i liczby w Hex większe niż &7fff zamienione na decymalne widzi jako ujemne. Często używanym obszarem do tricków z 2im ekranem jest ten od &4000,
opisywałem to tu >> http://speccy.pl/forum/index.php/topic,844.msg9932.html#msg9932
Czyli jest to obszar na który wejdzie Basic jeśli ma więcej niż bodajże ok 12KB. Jak ktoś ma więcej niż 64KB pamięci to może mimo tego pisać nawet ze 30KB Basica i korzystać z drugiego ekranu, wystarczy przed wczytaniem tam długiego basica wpisać OUT &7F00,204 by basic się mieścił w bloku ramdysku, podczas gdy drugi ekran może być wyświetlany spod &4000 ze standardowych 64KB.

Jakby ktoś chciał się przyjrzeć obszarowi pomiędzy HIMEM a pamięcią ekranu, może wklepać:
10 MODE 2:INK 0,0:SYMBOL AFTER 256:FOR a=HIMEM TO 49151:PRINT CHR$(1);CHR$(PEEK(a));:NEXT
Uwaga dla tych co nie wiedzą: Oczywiście nie trzeba tego wpisywać dużymi literami. Ten CHR$(1) jest po to by nie wykonywał znaków sterujących jeśli na taki trafi tylko je wyświetlał. Można pauzować program klawiszem ESC a puszczać pauze dowolnym innym, ponowne wciśnięcie ESC w trakcie pauzy przerywa działanie programu które można wznowić rozkazem CONT. Najłatwiej zauważyć obszar gdzie są zdefiniowane klawisze, oraz tablicę skoków bo w tym co 3ci bajt to znak szachownicy 8x8. Najczęściej używaną funkcją z KERNELA jest chyba CALL &bb18 - to pauza czeka na wciśnięcie dowolnego klawisza. Ze zlokalizowaniem i skapnięciem reszty adresów jest więcej roboty można by np. znaleźć miejsce palety kolorów, np. pozmieniać kolory od 2 do 15 na takie same komendą INK a potem szukać w tym obszarze nastu takich samych bajtów, jednak by łatwo nie było nie są to te same wartości jak w tabelce z kolorami. Albo skopiować cały ten obszar gdzieś niżej, a potem np. zmienić tryb graficzny i porównać które komórki zmieniły wartość po czymś takim. Jest ich kilkanaście, choć część się zmieni z innego powodu niż zmiana trybu. Piszę to na wypadek gdyby ktoś nie miał co robić. ;)

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.10.22, 21:48:05
Niedawno Phonex wspominał o kolorowaniu Listingów w Spectrum, a jak się wam podoba coś takiego jak w obrazku poniżej? Niedługo wkleję tu dyskietkę z kilkoma wariacjami z kolorowymi czcionkami do użycia w Basicu CPC, oraz kolorowymi wykresami 3D.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.10.30, 07:11:02

Coś mi idzie jak po grudzie, dlatego wykresy 3D kiedy indziej. Póki co uznałem że nie dam wam dłużej czekać i zaprezentuję to co już mam.

GRUBE.BAS - to pchełka zza granicy drukowana też w Bajtku dająca nową funkcję pozwalającą jednym znaczkiem zmieniać grubość standardowej czcionki. Przykład w programie, podejrzyjcie listing. :) Niestety każde użycie tego znaczka przywraca standardowy wygląd wszystkim znakom jakie ewentualnie w międzyczasie zdefiniowaliśmy (np polskich). Co może być nieco kłopotliwe, ale można sobie z tym poradzić. Dajcie znać jak komuś by na tym zależało.

RD.BAS - to nowe RSX-y z francuskiej gazety (także były w Bajtku). Pozwala używać 64KB ramdysku jako dysk o nazwie |M, a dodatkowo daje komendy |COPY, |TYPE i |FORMAT. Zdaje się że ZX+3 ma takie coś już w ROMie. Zawartość Ramdysku potrafi przetrwać reset, trzeba tylko potem ponownie wczytać i aktywować te RSXy. Niestety zdaje się że nie obsługują większych rozszerzeń pamięci ani gęstych stacji.

Chodzi mi po głowie by kożystając z nich napisać na nowo takie coś co będzie puszczadłem wyświetladłem i uruchamiadłem do pliczków, by nie wklepywać rozkazów i parametrów na piechotę. Zrobiłem przed laty coś takiego, co prócz porządkowania plików (kopiowanie (zaznaczając wiele plików), zmiana nazw, kasowanie i odkasowywanie), wyświetlało też pliki tekstowe, czcionki, i obrazki z Art Studia (scr+pal), samorozkompresowujące się (csi) oraz obrazki nieskompresowane (17KB). Pozwalał też tworzyć i edytować krótkie pliki tekstowe i uruchamiać programy, a w rogu ekranu chodził sobie zegarek. To był najlepszy użytek jaki w życiu napisałem, który niestety zaginął. Ale jak jeszcze znajdę Bajtka w którym była procedura wyświetlająca obrazki z Art Studia to będę miał wszystko by to napisać ponownie. ;)

80OK.BAS - Już znacie. Teraz dodałem zmodyfikowaną wersję z czcionką w paski 80WPASKI.BAS, oraz 80W3KOL.BAS, to ta dziwna czcionka z obrazka z poprzedniego wpisu. Która w innym kolorze wyświetla cyfry, w innym duże litery a w innym resztę. Mam nadzieję że was to zaintrygowało. ;) Gdy przed laty odkryłem że można tworzyć taką kolorową czcionkę zacząłem pisać nakładkę ze strzałką i okienkami, bo łatwo z tego zrobić małe sprajty i gadżety jakie są na krawędziach okienek. Jednak przydały by się do tego RSXy do zachowywania i odtwarzania z pamięci zawartości okienek. A były dwie wersje, jedna zapisywała okienko o podanych współrzędnych jako ciąg znaków jakie zawierała, (takie okienko zajmowało mało miejsca w pamięci) a druga wersja pamiętała cały fragment ekranu co do piksela. Mam nadzieję że odkryje te RSXy w jakiejś gazecie ponownie i dokończę to co przed laty nie skończyłem bo przesiadłem się na Amigę. ;)

40OK.BAS - To coś podobnego jak 80OK tyle że tu mamy w MODE 0 (szerokie kolorowe piksele) wąską czcionkę z 40 znaków w wierszu w 16 kolorach. POKE 47043 zmienia szerokość czcionki na taką jaka jest w trybie którego wartość tam wpiszemy. POKE 46892 to parametr ile znaków ma się mieścić na ekranie, czyli 79 dla 80 lub 39 dla 40. Komenda PEN zmienia tu tylko 3 kolory jak w MODE 1, a inne są dostępne wpisując POKE &bf2f odpowiada komendzie pen a POKE &bf30 odpowiada komendzie PAPER. Tyle że wartość jaką trzeba podać jest strasznie dziwna wpisałem w tabelkę k(). Wartości 0,192,12,204,48,240,60,252,3,195,15,207,51,243,63,255  które odpowiadają kolorom pisaka od 0 do 15. Przy okazji we wcześniejszym 80OK, w ten sam POKE wartości 0,240,15,255 odpowiadają pisakom 0 do 3. A podanie innych wartości sprawia że literki mają tam pionowe (a nie poziome) kolorowe paski. :)

80.BAS - To wersja 80OK.BAS ale tu z czcionką która nie ma dwóch kopii znaku 4x8 w matrycy 8x8 co daje ciekawy efekt kursora w innym kolorze niż tekst w jakim piszemy, dość rzadkie i to nie tylko w CPC. Przy okazji ta czcionka ma polskie znaki. :)

40WPASKI.BAS - To modyfikacja tej czcionki tak by komenda PEN (1-3) dawała czcionkę w 3ech odcieniach. Inne kombinacje dostępne dzięki POKE.
Czcionka do obu trybów wygląda nieco inaczej. By się o tym przekonać wystarczy wpisać MODE 1 i sobie na nią popatrzeć. Ta do 80 znaków w 3 kolorach wygląda jakby w każdym znaku 8x8 pikseli zwężona czcionka występowała po 2 znaki 4x8 w jednym znaku. A ta do 40 znaków w 16 kolorach jest nieco bardziej skomplikowana (zwłaszcza gdy robimy wersję czcionki w paski), bo jedna kopia czcionki 4x8 musi się mieścić w bitach 11001100 a druga kopia w tej samej matrycy 8x8 ale na bitach 00110011, a różnice między jedną a drugą kopią dają inne kolorki. 2bity na piksel daje 4 kolory. Tak więc jak się komuś nie podoba moja czcionka np to że uparłem się by literki M i W były szerokie na 4 a nie na 3 piksele. Może się pobawić jakimś edytorem znaków np tym w Art Studio i Przygotować sobie inną czcionkę. W grach nie raz widziałem taką co inny bledszy kolorek miała w pikselach na rogach by udawać antyaliasing i by czcionka wydawała się mniej kanciasta. ;)

POL7.BAS - To wersja moich polskich znaków które już prezentowałem, nie mając za bardzo pojęcia w jakim standardzie je zrobić. Bo nie mam dostępu do polskiego Tasworda ani żadnych polskich tekstów pod CPC, a zdaje się że jego standard był najpopularniejszy wśród polskich Amstradowców/Schneiderowców. Choć może dla tych co korzystali ze CPM a w pracy z PC, woleli jakiś standard z ChiWritera czy coś. W necie polskiej wersji nie widać, ani nie znam nikogo komu by się zachowały na dyskietkach. Jak ktoś ma, to proszę niech się odezwie. :) Tym razem użyłem oficjalnego polskiego standardu kodowania w 7bitach (stąd nazwa), czyli polskie znaki zastępują znaki `~@|]}^{[\$# choć te dwa ostatnie to moja modyfikacja standardu dodająca duże litery Ś i Ż bo oficjalnie standard posiada prócz wszystkich 9 małych tylko jedną dużą Ł. Podobno niektóre drukarki z epoki miały tak zmienionego ROMa z czcionkami by wyświetlać polskie znaki nawet jak komputer miał tylko 7 bitowe kodowanie znaków. A także ponoć niektóre firmy używały go w telefonach do SMSów, a inne definiowały jeden polski znak w aż 3ech bajtach.

POL.BAS - To dopiero majstersztyk, jednocześnie mamy tu do dyspozycji polskie ąćęłńóśźżŁŚŻ, niemieckie AOU z dwoma kropkami nad znakiem plus to dziwne B czytane jako SS, oraz francuskie AEEU z kreseczkami nad i C z ogonkiem. Ponoć francuski język ma kilkanaście narodowych znaków ale klawiatury posiadają tylko te 5 znaków, bo inne są potrzebne tylko do starofrancuskich tekstów lub lokalnych dialektów.
Nieźle co? - 3 alfabety narodowe dostępne jednocześnie. ;) A wszystko w standardzie "prawie" takim jak Windows 1250 do PL i 1252 do zachodnich. Prawie - to przez to że Amstrad znaki od 240 do 251 i 224 używa do sterowania kursorem. A niestety w tym zakresie mieści się kilka ze znaków narodowych. Dlatego nieco zmodyfikowałem standard a mianowicie duże i małe litery zamieniłem miejscami w tych przypadkach które kolidowały z kodami do kursora. (polskie Ó i Ń, niemieckie A i O więc dla uproszczenia U zrobiłem też, i francuskie U) Tzn dużych znaków jeszcze w tej wersji nie dorobiłem ale jak zrobię to wprawdzie nie da się ich umieścić na klawiaturze jednak będzie je można wyświetlać a małymi także pisać. ;) Trzy znaczki kolidowały też z kodami do klawiszy funkcyjnych, ale dopisując drugą pętlę FOR NEXT w lini 30 ominąłem problem. :)
Po co to zrobiłem? Bo jak mi odbije to zrobię przeglądarkę tekstów, a niemieckim i francuskim posługuje się najwięcej wciąż aktywnych Amstradowców. Choć jak się dowiem że Amstradowcy używają innego standardu narodowych znaków to go zmodyfikuję. Ponoć w Hiszpanii też nie brak aktywnych fanów CPC ale jakoś trzymają się w swoim gronie i niewiele kontaktują z zagranicą. A propo do ich alfabetu potrzeba jedynie litery N z falką ponad znakiem o kodzie dokładnie takim samym jak polskie Ń oraz znaku zapytania odwróconego do góry nogami. (ich gramatyka wymaga by takim znakiem zaczynać zdanie pytające). Więc umieściłem go na klawiaturze w miejscu w jakim zwykle jest w Hiszpańskich choć kod dałem inny by nie kolidował z literką "ż". Niemieckie znaki są na tych klawiszach co normalnie w tym języku ma miejsce (nie zmieniałem jednak Z i Y niech się dostosują do reszty świata). A francuskie jedynie U przeniosłem na 8 bo zwykle jest na klawiszu co niemieckie U, reszta jest na typowo francuskich miejscach, tyle że tym razem znaki dostępne są z Ctrl a nie bezpośrednio. :) W edytorze Basica można komendą "KEY DEF nr klaw,kod ascii,kod ze shiftem,kod z ctrl" każdemu klawiszowi przypisać 3 znaczenia. Niestety trzymając CONTROL nie ważne czy SHIFT wciśniemy też czy nie. Jedynie pod SYMBOSem widziałem że w taki sposób klawisze mogą mieć 4te znaczenie. :)
Klawisze zdefiniowałem POKE-ami w pętli bo uznałem że tak będzie krócej i szybciej. Pamiętacie jak pisałem do czego można użyć znaczków sterujących wpisywanych z Ctrl? Parę z nich jest na tyle użyteczna że aby ich nie tracić wraz z dodaniem polskich znaków przeniosłem je pod inne klawisze. Można sobie obejrzeć aktualną czcionkę oraz fragment pamięci gdzie są zdefiniowane klawisze - uruchamiając pchełkę ALFABET.BAS.

PALETY.BAS - Uruchom najpierw CONTIKI.BAS i nie kasując ekranu zaraz po tym run"palety i wciskaj dowolny klawisz. ;)


A dla tych co doczytali aż do tego miejsca mam nadzieję że miła niespodzianka. W tym samym pliczku POL.BAS wzbogaciłem klawiaturę o kilka użytecznych funkcji, wszystkie dostępne po wciśnięciu pewnych klawiszy wraz z Controlem:

TAB -   uruchamia program Basica jaki mamy w pamięci.
Ctrl + TAB - wyświetla listing Basica w MODE 2.
Shift + TAB - save" - dopisz nazwę i zapisz Basic na dysku.

Ctrl + COPY - wyświetla katalog dyskietki.
A strzałki prawo i lewo z Ctrl - przeskakują na sąsiednią kolumnę w tak wyświetlanym katalogu.
Strzałki góra i dół - robią to co zawsze. ;)
Ctrl + ENTER (nie mylić z RETURN) - uruchomi plik na początek którego najedziemy kursorem.

i "." (kropka w bloku klawiszy funkcyjnych) - niespodzianka. ;)

Podobne klawisze są w pliku 0.BAS i od niego polecam zacząć przeglądanie dyskietki. Takie same funkcje dodałem w nim do Joysticka Fire2 wczytuje katalog, przechylanie go przeskakuje po nazwach plików a Fire1 uruchamia plik na którym jest kursor. Fajnie byłoby tak zmodyfikować ROM by takie funkcje działały zawsze prawda? ;)


I jeszcze wyjaśnienie dla tych co nie mają instrukcji obsługi do CPC. Edytor Basica w CPC dysponuje prócz normalnego kursora także drugim tzw. kopiującym. Zwykłym poruszamy się po ekranie strzałkami a ten drugi przesuwamy strzałki przytrzymując SHIFT, najeżdżamy nim na fragment tekstu który chcemy skopiować do miejsca gdzie mamy standardowy kursor i wciskamy klawisz COPY tyle razy aż skopiujemy co chcemy. Prawda że fajne? - można sobie zapożyczać fragmenty z innych linijek Basica niż ta którą właśnie edytujemy. Jak ktoś nie lubi wpisywać nazw plików do uruchomienia z wyświetlanego na ekranie katalogu można nawet bez takich dodanych funkcji w klawiaturze, najechać na początek nazwy pliku i kliknąć kilka razy klawisz COPY, kursor kopiujący jest w tym samym miejscu co normalny, więc nic się na ekranie nie zmienia prócz przesuwania kursora, ale to tak jakbyśmy wklepywali tą nazwę. Gdy dotrzemy do spacji lub kropki wystarczy przytrzymać CONTROL i wcisnąć po kolei strzałkę w lewo i nadal trzymając CONTROL wcisnąć ENTER, to wtedy nawet run" nie trzeba pisać bo samo się dopisze i uruchomi plik. I to by było na tyle. Jak dorobię jakieś istotne nowe funkcje do pokazanych tu rzeczy albo zabiorę się za zabawę z wykresami funkcji o których wspomniałem wcześniej. Dam znać. ;) Trzeba by w końcu kiedyś zaprezentować coś ruchomego, albo nawet reagującego na klawisze prawda? ;)

PS.: Obrazek poniżej prezentuje ładną wąską czcionkę, może kogoś to zainspiruje. :) I niech się ktoś odezwie, napiszcie chociaż że lamerskie głupoty prezentuję. ;) Komplementy mogłyby mnie zachęcić do częstszego dłubania w CPC. :)

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.10.30, 10:41:58
Wykryłem kilka drobnych błędów w pliczkach na dsk jaki dołączyłem, więc po poprawkach dodaję go znowu. :)

Dodałem też pliczek 00.BAS jest to MENU dysku, w którym należy zmodyfikować nazwy w DATA w linii 30, tak by zawierały właściwe nazwy dla konkretnego dysku. I nagrać go na nim pod nazwą 0.BAS To naprawdę ułatwia życie z Amstradem. :)

PS.: Jaki edytor mi polecacie na PC by zmodyfikować zawartość pliku binarnego. Mam zamiar tak zmodyfikować ROM do CPC aby zaraz po włączeniu emulatora jego klawiatura zawierała kilka użytecznych funkcji. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: pear w 2013.10.30, 18:22:26
POL7.BAS - To wersja moich polskich znaków które już prezentowałem, nie mając za bardzo pojęcia w jakim standardzie je zrobić. Bo nie mam dostępu do polskiego Tasworda ani żadnych polskich tekstów pod CPC, a zdaje się że jego standard był najpopularniejszy wśród polskich Amstradowców/Schneiderowców. Choć może dla tych co korzystali ze CPM a w pracy z PC, woleli jakiś standard z ChiWritera czy coś. W necie polskiej wersji nie widać, ani nie znam nikogo komu by się zachowały na dyskietkach. Jak ktoś ma, to proszę niech się odezwie. :)
Znalazłem tylko takie coś w swoich szpargałach
ą , ć , ę , ł , ń , ó , ś , ź , ż
Ą , Ć , Ę , Ł , Ń , Ó , Ś , Ź , Ż , zł
{Latin II - Code Page 852}
165,134,169,136,228,162,152,171,190
164,143,168,157,227,224,151,141,189,158
{Mazovia}
134,141,145,146,164,162,158,166,167
143,149,144,156,165,163,152,160,161,155
{Windows - Code Page 1250}
185,230,234,179,241,243,156,159,191
165,198,202,163,209,211,140,143,175,158
{DHN}
137,138,139,140,141,142,143,145,144
128,129,130,131,132,133,134,136,135,158
{Cyfromat}
144,145,146,147,148,149,150,152,151
128,129,130,131,132,133,134,136,135,158
{Microvex}
160,155,130,159,164,162,135,168,145
143,128,144,156,165,147,152,157,146,158
{CSK}
160,161,162,163,164,165,166,168,167
128,129,130,131,132,133,134,136,135,158
{ISOLatin - ISO-8859-2}
177,230,234,179,241,243,182,188,191
161,198,202,163,209,211,166,172,175,158
{IEA}
160,155,130,159,164,162,135,168,145
143,128,144,156,165,153,235,157,146,158
{Logic}
137,138,139,140,141,142,143,144,145
128,129,130,131,132,133,134,135,136,158
{KWK}
133,155,138,157,164,162,135,145,168
143,128,144,156,165,153,159,146,158,237
{XXX}
155,157,159,166,167,162,158,169,170
239,171,227,156,228,248,251,252,254,128
{Amiga PL}
226,234,235,238,239,243,244,250,251
194,202,203,206,207,211,212,218,214,142
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.10.30, 21:40:20
Część nazw tych standardów co podałeś z niczym mi się nie kojarzą. Wiki podaje spory zestaw też:
http://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w
Większość dałoby się zaimplementować w CPC bez problemu, a do innych trzeba by pisać własny program obsługi klawiatury i powyłączać przerwania by po naszemu a nie po swojemu reagował na odpowiedni zestaw znaków kontrolnych. Tylko że po co reanimować trupa z obcej platformy? Moim zdaniem albo użyć takiego standardu w jakim ludzie mieli/mają teksty na CPC, albo użyć współcześnie najpowszechniej używanego. Wprawdzie światek Amigowy czy Makówkowy mają swoje standardy (nie wiem jak w Linuksie), ale w PC używa się dwa. Windows 1250, oraz Latin 2. Ten drugi różni się od pierwszego tylko 6ma innymi kodami z 18 polskich liter, a powszechnie jest używany na stronach internetowych, a Winda tak sprytnie tym operuje że jak kopiujemy fragment tekstu ze strony do edytora to w locie są konwertowane i laicy nawet nie zdają sobie z tego sprawy. :) W obu też małe literki ó i ń mają kody które przypisane w CPC do klawisza będą po wciśnięciu przesuwać kursor a nie wyświetlać literę. :-|

Znalazłem w Bajtku z roku 89 listingi dodające polskie znaki pod CPM, ale nie podano jak się nazywają ani do jakiego są programu. Choć możliwe że Protekst i Tasword bo te dwa edytory były popularne, tylko nie wiem który jest który. Zresztą jeśli nie znajdę ich polskich wersji na CPC ani jakiś zachowanych tekstów, to myślę że lepiej skorzystać ze współczesnego. :) Bez problemu mogę zdefiniować taki zestaw znaków by Amstrad wyświetlał teksty w obu bez konwersji. :) Bo Win50 i Latin2 nie gryzą się wzajemnie, tzn nie ma przypadku by któryś z kodów w jednym był jedną literą a w drugim ten sam kod inną. :)

Jestem ciekaw jaki standard był/jest używany w ZXach, i jakie edytory się używało w czasach gdy się jeszcze pisywało na 8bit. I jakie było ograniczenie długości pliku. W CPC Tasword wieszał się po wczytaniu dłuższego niż ok 76KB. A Protekst buforował na dysku i był ograniczony jej pojemnością (178KB). Nie wiem czy potrafił korzystać też z gęstej stacji (800KB). A dziś mam na twardym kilka kilkuset kilobajtowych plików txt, wszystko wklepane przeze mnie. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.11.05, 04:30:49
Dziś krótko, pytano mnie o to jak zmienić nazwę pliku, jak go skasować i czy da się potem odkasować?

Da się, ale po kolei na przykładach.  |ren,"nowy.bas","stary.bas"  - zmieni nazwę stary.bas na nowy.bas

|era,"*.bak" - skasuje wszystkie pliki typu bak.  |era,"g*.*"  - skasuje wszystkie zaczynające się na literę G.
Oczywiście zamiast gwiazdek można podać nazwę pojedynczego pliku. :)

Teraz odkasowanie. Wklepcie sobie i zapiszcie takiego jednolinijkowca, np jako ODKASUJ.BAS

10 MODE 2:POKE &A701,229:CAT:INPUT"Nazwa pliku do odkasowania: ",n$:|REN,"0:"+n$,n$:|USER,0:CAT:PRINT"Gotowe :)"

To działa i nie będę tłumaczył jak. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.11.24, 00:31:41

Mapa bloków pamięci w CPC 6128. Każdy blok ma 16KB. Ale tylko 4 z nich można na raz podłączyć do procesora. Dlatego pod adresy podane w pierwszej kolumnie w razie potrzeby są podłączane inne bloki.
W CPC 664 nie ma Ramdysku a w CPC 464 nie ma także Amsdosa.

----------------------------    ------ - - -
| &ffff  |  ROM   |  ROM   |    | Tu się podłącza wszelkie inne zewnetrzne ROMy.
| &C000  | Basic  | Amsdos |    |         <- Tu w RAM od &C000 jest pamięć ekranu, ale można to zmienić.
----------------------------    ------ - - -
| &BFFF  |     <- Tu jest tablica skoków, stos, i dane systemowe które zawsze są w tym samym miejscu.
| &8000  |     <- Tu gdzieś jest HIMEM, granica między Basiciem a kodem maszynowym, ale można ją obniżać.
----------------------------------------------     ------ - - -
| &7FFF  | RamDysk| RamDysk| RamDysk| RamDysk|     | Tu się podłącza wszelkie
| &4000  |  204   |  205   |  206   |  207   |     | inne zewnetrzne RAMy.
----------------------------------------------     ------ - - -
| &3FFF  |  ROM   |
| &0000  | CPC OS |    <- Tu w RAM od &170 zaczyna się program w Basicu.
-------------------

A pewnego pięknego dnia dodam dokładniejsze informacje o tym gdzie co jest w pamięci. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.12.09, 20:36:48
Na jednym ze Spectrumowych wątków jest temat o przerabianiu gier z taśmowej na dyskietkową. To mnie skłoniło by naskrobać coś o tym jak to jest w CPC. Najpierw kilka podstawowych informacji. :)

Na dyskietce CPC stosuje się krótkie nazwy jak w MS-DOSie czyli 8 znaków + kropka + 3 znaki. System pozwala używać w nazwach plików jedynie duże litery, cyfry oraz znaki  #$&@`'^~{}  no i jedną kropkę we właściwym miejscu. Spacje mogą być pod koniec tych ośmiu lub pod koniec tych trzech znaków, i nie trzeba ich wtedy podawać ani przy zapisie ani przy wczytywaniu pliku. A przy uruchomieniu trzeba podać nazwę co do znaczka. No chyba że końcówka składa się z trzech spacji, .BAS lub .BIN
Natomiast na kasecie można nadawać plikom nazwy o długości do 256 znaków, z dowolnych znaków ASCII od kodu 1 do 255 z wyjątkiem cudzysłowu i wykrzyknika, w tym także zaczynać nazwę od spacji i używać wielu kropek, albo nagrać plik bez nazwy. Przy odczycie w ogóle nie trzeba podawać nazwy, wczyta wtedy pierwszy Basicowy lub Binarny plik jaki znajdzie na taśmie. A gdy nazwę podamy, to pominie inne pliki aż trafi na właściwy.

Co do loaderów. Starsze gry zwykle mają go w Basicu. Bywa że zabezpieczony przed wylistowaniem, ale jak to obejść, to już osobny temat. ;) Dla przykładu.:

10 MEMORY &5FFF:LOAD"NAZWA.SCR",&6000:CALL &6000  ' obrazek *1
20 LOAD"NAZWA1.BIN",45678  ' *2
20 LOAD"NAZWA2.BIN":CALL 45678  ' *3

   *1, jeśli nie jest skompresowany to ma 17KB i od razu wczytuje się pod &C000 i nie trzeba go wywoływać rozkazem CALL. 17KB a nie 16 dlatego że każdy plik w CPC ma nagłówek o długości 128 bajtów co system zaokrągla na dysku w górę do pełnego KB. Nagłówek zawiera w sobie adres spod jakiego został zapisany (np bejziki mają zawsze &0170), potem adres startowy (jeśli jest równy zero to uruchomienie takiego pliku rozkazem RUN" zresetuje kompa), oraz trzecią liczbę długość pliku co do bajta. Do tego jakieś sumy kontrolne i fragment końcówki pliku. (nie wiem po co) ;)
   *2, nie zawsze jest podany adres pod jaki ma się wczytać, wtedy wczyta go pod adres zawarty w nagłówku pliku. w zasadzie plik binarny z autostartem innym niż 0 zwykle daje się uruchomić bez bajzikowego loadera, choć ten bywa dodany by po wczytaniu binarki wpisać w nim jakieś nieśmiertelne POKEi.
   *3 czasem jest RUN" zamiast LOAD", czasem są jakieś POKEi przed komendą CALL

Jak widzimy taki prosty loader z krótkimi nazwami, to się cieszymy bo nic nie trzeba w nim zmieniać. A w przypadku przegrywania z dysku na taśmę wiadomo w jakiej kolejności nagrać pliki. :)
Gorzej gdy bejzikowy loader nie wczytuje wszystkich plików z których gra się składa, a ich nazwy nie podpowiadają w jakiej kolejności trzeba je nagrać na kasecie. Można wtedy pozmieniać ich nazwy w nadziei że próba uruchomienia wywali na ekran komunikat z nazwą brakującego pliku, i po kolei przywracamy im początkowe nazwy dedukując w jakiej kolejności powinny być na taśmie.

Tymczasem pliki w grach na kasetach często mają dłuższe nazwy albo w loaderze nie są one podane. Trzeba je wtedy ponadawać i stosownie zmodyfikować basic, podając takie same jak im nadaliśmy. Raz się tylko spotkałem z grą która w binarce miała dłuuugą nazwę kolejnego pliku i choć po przegraniu na dysk zmieniłem tą nazwę na krótszą edytorem dyskowym a stosowny plik był też na dysku to uparcie domagał się by plik się wczytał z taśmy mimo że przyjął do wiadomości nową nazwę. wrrr

Takie metody działają na gry które zwykle mają 30 do 70KB i dające się zlokalizować pliki (krótsze gry zwykle są w jednym pliku), czyli na dysku informacje o położeniu każdego z nich są na Sektorach C1 do C4 na zerowej ścieżce. Choć bywa że część plików jest ukryta, co można zobaczyć i zmodyfikować lepszymi kopierami lub dowolnym edytorem dyskowym, ale to już wyjaśnię innym razem. A w przypadku taśmy są nagrane w standardowych blokach o długości maks 2KB. Innych kopiery nie łykną. A obszerniejsze gry takie na stronę dyskietki lub większe, czyli ponad 180KB, które doczytują sobie dalsze poziomy, łatwiej znaleźć na interesującym nas nośniku niż przerobić. (np. Lemmings) Natomiast te co są tak obszerne, a przy tym doczytują sobie wybraną przez nas postać, autko, poziom czy trasę, nie mają wersji kasetowych. (np. North&South)

No tak, nie wspomniałem jakim kopierem to przegrywać. Polecałem tu kiedyś Discology, ale on działa tylko na 6128 i to tylko na prawdziwym a nie emulowanym. A szczerze jakoś nie zadałem sobie trudu by znaleźć coś co tych wad nie ma. Z wyjątkiem RSXów jakie były na dsk jaki dodałem tu parę tygodni temu. Jednak trzeba tam wpisywać rozkazy na piechotę, można kopiować maks 63KB bo tyle się mieści w Ramdysku i nie odsługują taśmy. Na swoją obronę powiem że nic lepszego w ostatnich miesiącach potrzebne mi nie było, a wygodna nakładka na te rozkazy jest na liście moich rzeczy do zrobienia. Choć idzie mi jak po grudzie, bo mam zbyt liczne zainteresowania poza CPC.

Parę dni temu wklepałem z Bajtka (11-91) program do konwersji plików z Art Studio do wygodnego samo-rozkompresowującego się CSI, który wczytuje się tak jak w cytowanym dziś loaderze. A można nim pokompresować sobie obrazki startowe w starych grach zmniejszając ich objętość nawet o 10KB. :) Oczywiście przerobiłem go po swojemu. ;)  Ale trzeba by jeszcze parę pchełek dodać by dsk nie był taki pusty zanim go tutaj wstawię. ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2013.12.16, 04:55:03
Dopchałem tekstami i pusty nie jest. ;)

SCR2CSI.BAS - to wspomniany wcześniej konwerter obrazków z ArtStudio pal+scr(skompr) na CSI. :)
IKS.BAS - to coś podobnego, z IKSa 2-89. Używa własny format, nie zapamiętuje palety, ale procedurka jest krótsza i może się komuś do czegoś przyda. Trzeba wylistować bo w komentarzach pliku są info jak używać.
PLA2.BAS - to prowizoryczna animacja układu słonecznego. Nie śmiejcie się, straciłem wenę by to poprawić. ;)
POKA.BAS - wyświetla pliki txt, najpierw trzeba uruchomić RD.BAS bo korzysta z czcionek i komendy w nim zawartej. Choć na upartego można skasować linię 15 i poradzi sobie bez tego z plikami ASCII. Ale chyba nie na tym dsk bo innym programem tym razem txt do dsk dodawałem i nie rozpoznaje ich jako ASCII files. Późno jest i nie chce mi się z tym walczyć. Jakby ktoś potrzebował miejsca na tym dysku (np do zabawy w konwersje obrazków) może jakiś plik txt skasować. ;)

OKIENKA.BAS - to główny powód zamieszczenia przeze mnie tego DSK. Jest to wczesna wersja programiku udającego okienkowe GUI. Mam zamiar w przyszłości użyć go do paru planowanych użytków. I chciałem poznać waszą opinię, jakoś nie mogę się zdecydować czy bardziej ma być podobny do Windy czy Workbencha. Liczę na podpowiedzi jakich ikonek czy gadżetów jeszcze brakuje. Na razie program nic nie robi, a jedynie wygląda jak wygląda i można sobie strzałeczkę poruszać kursorami lub dżojem. :) 100% Basic. :D

Dodam że jak dotąd z wyjątkiem SymbOSa wszystkie inne GUI na CPC były czarno-białe i wzorowały się raczej na Maku lub Geosie czyli bez kolorowych ikonek. Tu są linki do tych lepszych.
http://cpcwiki.eu/index.php/Category:CPC_GUI

A co to jest ART.BIN skapniecie. ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2014.01.02, 05:02:57
Wiem że strasznie krzywo, ale nie miałem natchnienia do Basica a chciałem jak najszybciej zobaczyć czy w kolorach jakie sobie wymyśliłem będzie dobrze wyglądało. :D A takich kolorowych wykresów jeszcze na amstradzie nie widziałem. :D
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2014.03.12, 00:12:44
Normalnie CPC potrafi zapisywać pliki na kasecie z prędkościami 1000 lub 2000 bodów co zmieniamy poleceniem
SPEED WRITE 0 (lub 1 jeśli chcemy szybciej) A odczyt dostosowuje się automatycznie do tego jak szybko pliki są nagrane.
Ale wystarczy wpisać i uruchomić poniższą linijkę by zapisywał z prędkością 3000 bodów. :)

10 FOR a=&B700 TO &B709:READ n:POKE a,n:NEXT:CALL &B700:DATA 33,110,0,62,15,205,104,188,201,0


Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2014.05.01, 04:35:46
Abrimaal - kiedyś wspominałeś że chciałbyś mieć program do brzdąkania na klawiszach Specca. Nie wiem czy to spełni twoje oczekiwania ale jest coś takiego w IKSie nr4 z `88 str 27. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2014.09.12, 20:34:32
Jak rozpoznać z myślą o jakim kraju był wyprodukowany twój Amstrad?

Na wypadek pisania programów które same zgadują w jakim języku wyświetlać komunikaty.
Schneidery produkowane na rynek niemieckojęzyczny nie mają zmienionych ROMów, ale dzięki zworce na LK2 możemy to sprawdzić wpisując:     ?INP(&F500)   - I jeśli wynikiem będzie 90 to jest spora szansa że właściciel włada niemieckim. (albo polskim). ;)

Inne narodowe wersje miały zmienione ROMy a w nich wygląd paru znaczków i mapę klawiatury. A to ostatnie łatwo sprawdzić dzięki ?PEEK(&B502)  - Wynik oznacza następujące języki:
37 - francuski
43 - angielski
58 - hiszpański
92 - duński - (choć Norwedzy używają takiej samej mapy klawiatury)
91 - fiński - (choć Szwedzi mają taki sam alfabet mimo że język zupełnie inny)

Żeby to przetestować w emulatorze to Schneidera można sobie ustawić w opcjach, podobnie jak australijskiego Awa (wtedy INP daje 88), a pozostałe wymagają ściągnięcia sobie właściwego ROM-u zwanego Lower ROM lub OS. :)
np. stąd: http://www.cpcwiki.eu/index.php/ROM_List#Lower_ROMs

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.02.17, 01:38:31
"60 programów na Amstrada CPC 464" - to podobno pierwsza książka jaka się ukazała o Basicu CPC. A teraz cała jej treść dostępna w postaci elektronicznej. We wolnej chwili sobie obczaję. :)

http://cpcwiki.eu/index.php/Sixty_Programs_for_the_Amstrad_CPC_464

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.02.28, 18:14:08
Dość powszechnie wiadomo że program w Basicu wykonuje się nieco szybciej jeśli zmienne liczbowe mają status INTEGER zamiast REAL, (czyli liczb całkowitych zamiast naturalnych czy jak kto woli zmienno-przecinkowych).  Ale o ile szybciej?  I czy da się jakoś przyspieszyć wykonywanie działań także na liczbach naturalnych? :o

Po pierwsze domyślnie wszystkie zmienne liczbowe są naturalne czyli te wolniejsze, a by program zaczął je traktować jako całkowite trzeba albo dodawać na końcu ich nazw znak "%" albo zadeklarować je wcześniej jako integer poleceniem DEFINT. Zmierzymy to funkcją TIME, a żeby bardziej uwidocznić różnice wykonamy w pętli proste działanie tysiąckrotnie.

10 t=TIME:WHILE x<1000:x=x+1:WEND:t2=TIME:PRINT t2-t            - wynik to 973

Jeśli dodamy linię      5 DEFINT x    - wynikiem będzie 706, a im mniej tym lepiej. Czyli poprawa o 27%. :)

Skasujmy linię 5 a w linii 10 dodajmy do 1ki  .0  by było   x=x+1.0      - i wynik to 930. Czyli poprawa o ponad 4% przy zachowaniu liczb naturalnych. Kto wie dlaczego? ;)


To jeszcze jedna ciekawostka. Zamieńmy tą liczbę 1 na zmienną y. A na początku linii 10 dopiszmy y=1. I przywróćmy linię 5 dodając tam także y.

5 DEFINT x,y
10 y=1:t=TIME:WHILE x<1000:x=x+y:WEND:t2=TIME:PRINT t2-t

I teraz po wpisaniu RUN wyjdzie 754, a po wpisaniu RUN 10  - wyjdzie 960. Czyli w integer użycie zmiennej zamiast bezpośrednie podanie liczby spowolniło program, a w liczbach naturalnych przyspieszyło ale nie aż o tyle co dodanie .0   
Czary? ;)

PS.:  Jeśli testujesz to na CPC 464 to wszystkie wyniki będą nieco słabsze bo w Basicu 1.1 nieco poprawiono procedury matematyczne.

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: pear w 2015.02.28, 19:00:48
Nie ma żadnych czarów.
Ad. 1
Do zmiennej REAL dodajesz stałą INT.
Ad. 2
Do zmiennej  INT dodajesz stałą INT.
Ad. 3
Do zmiennej REAL dodajesz stałą REAL.
Ad. 4
Do zmiennej INT dodajesz zmienną INT.
Ad. 5
Do zmiennej REAL dodajesz zmienną REAL.

Najkrótszy czas będzie dla dodawania bezpośrednio dwóch stałych INT. Takiego przykładu nie dałeś, ale teoria wskazuje, że tak będzie.
Dodawanie dwóch zmiennych musi trwać dłużej niż zmiennej i stałej, bo adresowanie jest pośrednie.
Przy dodawaniu argumentów różnych typów musi zostać dokonana konwersja do typu wspólnego - stąd wydłużony czas.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.02.28, 20:31:36
"Dodawanie dwóch zmiennych musi trwać dłużej niż zmiennej i stałej, (...)"
noo chyba że ta stała wymaga konwersji jak w 1ym przykładzie. Wtedy zmiana stałej na zmienną przyspiesza wbrew tej cytowanej zasadzie. A wystarczy dodać przecinek by uniknąć tej konwersji jak przykładzie ostatnim. Mądrala z ciebie. :)
Ciekawe czy w ZX jest tak samo.

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: pear w 2015.02.28, 21:28:05
W ZX nie ma możliwości zdefiniowania typu.
Wszystkie zmienne są REAL (5 bajtów).
Nie jestem do końca pewien jak są przechowywane w pamięci zmienne pętli FOR TO, które są liczbami całkowitymi.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Tygrys w 2015.02.28, 22:10:28
w ZX Basic liczy całkowite typu 'integer' są przechowywane w postaci 2  bajtowej. Jeżeli są większe niż 65535, wtedy zmieniają postać na liczby z mantysą.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: pear w 2015.03.01, 08:09:02
Ale tylko liczby, czy zmienne też ?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Tygrys w 2015.03.01, 13:52:05
To się dotyczy również zmiennych.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.03.05, 00:37:01
Jak rozpoznać model na jakim się program uruchamia?

Można to sprawdzić za pomocą POKE w dziesiątkach różnych adresów, proponuję łatwy do zapamiętania:
 PEEK(&BB5B)   jeśli zawartość =0 to 464,  jeśli =250 to 664,  a =254 to 6128 lub Plus.

Niestety Plusa ani CRTC rozpoznać programowo jeszcze nie umiem. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Dr Piotr w 2015.05.22, 19:30:57
Na jednym ze Spectrumowych wątków jest temat o przerabianiu gier z taśmowej na dyskietkową. To mnie skłoniło by naskrobać coś o tym jak to jest w CPC. Najpierw kilka podstawowych informacji. :)

System pozwala używać w nazwach plików jedynie duże litery, cyfry oraz znaki  #$&@`'^~{}  no i jedną kropkę we właściwym miejscu. Spacje mogą być pod koniec tych ośmiu lub pod koniec tych trzech znaków, i nie trzeba ich wtedy podawać ani przy zapisie ani przy wczytywaniu pliku. A przy uruchomieniu trzeba podać nazwę co do znaczka. No chyba że końcówka składa się z trzech spacji, .BAS lub .BIN

A dokladniej  litery, cyfry i znaki dodatkowe !"#$&'+-^@}{~`
Litery moga byc male - zostana automatycznei skonwertowane do duzych.
Spacje moga byc uzyte na poczatku i na koncu glownej czesci nazwy oraz jej rozszerzenia, np nazwa " file  . a " jest ok i zostanie przeksztalcona na "file.a"

Cytuj
Natomiast na kasecie można nadawać plikom nazwy o długości do 256 znaków, z dowolnych znaków ASCII od kodu 1 do 255 z wyjątkiem cudzysłowu i wykrzyknika, w tym także zaczynać nazwę od spacji i używać wielu kropek, albo nagrać plik bez nazwy.

Nazwa pliku przy nagrywaniu na kasete moze miec max 16 dowolnych znakow - takie jest ograniczenie headera tasmowego.
Nie ma ograniczen co do znakow, uzywanych  w nazwie pliku (jesli nagrywa sie przez  firmware)

Cytuj
   *1, jeśli nie jest skompresowany to ma 17KB i od razu wczytuje się pod &C000 i nie trzeba go wywoływać rozkazem CALL. 17KB a nie 16 dlatego że każdy plik w CPC ma nagłówek o długości 128 bajtów co

Nie kazdy - np pliki tekstowe nie maja takiego naglowka.

Cytuj
system zaokrągla na dysku w górę do pełnego KB. Nagłówek zawiera w sobie adres spod jakiego został zapisany
(np bejziki mają zawsze &0170), potem adres startowy (jeśli jest równy zero to uruchomienie takiego pliku rozkazem RUN" zresetuje kompa), oraz trzecią liczbę długość pliku co do bajta. Do tego jakieś sumy kontrolne i fragment końcówki pliku. (nie wiem po co) ;)

Naglowek pliku zawiera: 64 bajty - kopia naglowka kasetowego (lub skonstruowanego na jego podobienstwo przy tworzeniu pliku) , 3 bajty - dlugosc pliku (24 bity!), oraz 2 bajtowa sume kontrolna. reszta jest inezdefiniowana i moga tam trafiac trozne rzeczy (np. kawalek kodu, sprawdzajacego zabezpieczenie :) 
Naglowke kasetowy to: nazwa pliku (max 16 znakow), nr bloku, znacznik ostatniego bloku (oba pola nieuzywane i =0), typ pliku, dlugosc bloku, adres ladowania bloku, znacznik pierwszego bloku, dlugosc pliku, adres startowy.

Warto zauwazyc, ze dzieki 24bitowemu polu dlugosci pliku, limit wielkosci pliku to w teorii 16 mega...

Cytuj
A w przypadku taśmy są nagrane w standardowych blokach o długości maks 2KB. Innych kopiery nie łykną.

To zalezy od kopiera, np. proton 6 jest w stanie kopiowac niestandardowo nagrane pliki a nawet wczytywac normalnie nagrane i zapisywac niestandardowo :)

Cytuj
No tak, nie wspomniałem jakim kopierem to przegrywać. Polecałem tu kiedyś Discology, ale on działa tylko na 6128 i to tylko na prawdziwym a nie emulowanym. A szczerze jakoś nie zadałem sobie trudu by znaleźć coś co tych wad

Discology dziala na emulatorze i calkiem sprawnie sobie radzi z kopiowaniem z kasety na dysk choc nie bezproblemowo. Np. proby relokacji kodu, ktory laduje sie na cpc 6128 w obszary amsdosu czesto sie nie udaja - lepiej wiec te opcje omijac.

Warto dodatkowo zaznaczyc, ze caly ten tekst dotyczy przenoszenia gier nagranych na tasmie standardowo, tzn z uzyciem funkcji zapisu z poziomu firmware czy basica. Skopiowanie oryginalnych gier, nagranych na tasmie w niestandardowy sposob to zupelnie inny temat :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.05.22, 23:25:39
W jaki sposób za pomocą SAVE i LOAD zapisać i wczytać plik binarny ponad 64KB ?
No chyba że te 24 bity długości pliku dotyczą tylko plików ASCII, no ale one podobno nie mają nagłówków, więc gdzie są te 3 bajty długości?

Jaka wersja Discology i na jakim emulatorze ci chodzi?
Bo chciałbym mieć, a mam lenia by sobie poszukać. ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Dr Piotr w 2015.05.23, 03:48:07
W jaki sposób za pomocą SAVE i LOAD zapisać i wczytać plik binarny ponad 64KB ?
nie napisalem, ze za pomoca save i load mozna taki plik utworzyc/odczytac.
Pliki >64kb mozesz z basica zrobic przez openout np: openout "file.bin" : for a=0 to 50000: write #9,"a": next: closeout ale beda one zawsze mialy typ tekstowy, wiec bez naglowka.
Mozna taki plik utworzyc z wykorzystaniem firmware:
org &4000
run &4000
ld hl, filename
ld de, buffer
ld b, 8
call &bc8c
jr nc, failed
ld bc,18
add hl, bc
ld (hl),2
ld hl, 0
ld b,2
loop:
ld a,32
call &bc95
inc hl
ld a,l
or h
jr nz, loop
djnz loop
call &bc8f
jr nz, failed
failed:
ret
filename:
db "file.bin",0
buffer

Kod powyzej utworzy plik typu binarnego o dlugosci 128kb z naglowkiem.

Cytuj
No chyba że te 24 bity długości pliku dotyczą tylko plików ASCII, no ale one podobno nie mają nagłówków, więc gdzie są te 3 bajty długości?

Nie podobno, tylko na pewno. A 3 bajty dlugosci sa w naglowku pod offsetem 64-66, poczytaj sobie w dokumentacji. Jak nie wierzysz, to sprawdz co jest w naglowku pliku wygenerowanego programem w asm powyzej. Znajdzeisz pod tym offsetem 00,00,02 czyli $20000 - 128kb.

Cytuj
Jaka wersja Discology i na jakim emulatorze ci chodzi?
Bo chciałbym mieć, a mam lenia by sobie poszukać. ;)

np discology 6.0 wersja odpalana prze |cpm (xor crack). Emulator WinAPE, ale pewnie pojdzie tez na innych.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.06.02, 07:17:36
Dziś proponuję pobawić się sprzętowym przewijaniem ekranu. :)
Poniższy programik pozwala przesuwać ekran za pomocą strzałek w dowolnym z ośmiu kierunków.

20 t1=48+t\256:t2=t MOD 256:CALL &BD19:OUT &BC00,13:OUT &BD00,t2:OUT &BC00,12:OUT &BD00,t1
30 IF INKEY(1)=0 THEN t=t-1 ELSE IF INKEY(8 )=0 THEN t=t+1
40 IF INKEY(2)=0 THEN t=t-40 ELSE IF INKEY(0)=0 THEN t=t+40
50 IF t<0 THEN t=t+1024 ELSE IF t>1024 THEN t=t-1024
60 GOTO 20

W linii 10 można wpisać cokolwiek co chcemy aby się nam pojawiło na ekranie.
Polecam jakiś obrazek np z lasem. ;) A potem uruchomić powyższy listing od linii 20. :)

Zmienna 't' to offset który wpisując do właściwych rejestrów decyduje od jakiego miejsca pamięć ekranu ma być wyświetlana. Jeśli komuś scrolling wydaje się za wolny to można zwiększyć krok w poziomie w linii 30 i zamiast o 1 dodawać lub odejmować po 2, a krok w pionie w linii 40 zamiast o 40 zmieniać o 80. Jeśli zamiast strzałek wolicie dżojstik to trzeba zmienić numery klawiszy w nawiasach w INKEY-ach z (1,8,2,0) na (75,74,73,72).

Jak widać przesuw w bok o cały ekran przesuwa go także o krok w pionie, a przesuw w pionie o ekran pokazuje że wyłaniający się zza krawędzi obrazek jest przesunięty także o naście kroków w bok. Cóż skutek uboczny takiej a nie innej organizacji pamięci ekranu. Ale może kiedyś znajdziemy na to sposób i będzie się nam wyłaniało wszystko równiutko, nawet mapa większa niż ekran. ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2015.06.04, 03:27:24
Jak się komuś nie chce wklepać tego z poprzedniego posta, (choć w emulatorze JavaCPC lub WinAPE nie trzeba bo można użyć opcji 'auto type' by tekst się sam wklepał), to daję gotowy przykład  -BALL.BAS  :)

To ten sam DSK z Overscanami który niedawno wklejałem w innym wątku, teraz z drobnymi poprawkami w tym i ten plik wspomniany wyżej.
Po 15 sek gdy piłka już się narysuje i skacze, to dowolny klawisz przerywa skakanie, a zaczyna się możliwość ręcznego poruszania piłką. (strzałkami). Mam nadzieję że się podoba. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2016.03.25, 18:11:55
Idący Lemming w jednej linijce. :)

10 MODE 1:SYMBOL 244,60,56,60,24,24,24,56,24:SYMBOL 245,20,56,60,24,58,26,52,48:SYMBOL 246,0,40,56,60,24,24,60,102:SYMBOL 247,24,60,60,24,24,28,120,76:WHILE-1:FOR a=244 TO 247:PRINT CHR$(a)CHR$(8 );:FOR b=1 TO 80:NEXT:NEXT:WEND
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2016.03.25, 23:30:10
Zrobiłem poprawioną wersję Lemingów w 1ej linii.
Tym razem to cała banda, przesuwa się po ekranie i są kolorowe!!!  :D
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2016.04.17, 05:28:55
ZX+3 formatuje dyski tak samo jak w CPC tyle że o 2 dodatkowe ścieżki 40 i 41 więcej, co w CPC w niczym nie przeszkadza. Baaa nawet można to wykorzystać wpisując POKE &A8A8,255:POKE &A895,188  w przypadku stacji A, lub POKE &A8E8,255:POKE &A8D5,188 w przypadku stacji B.
Co sprawia że Amsdos widzi te 2 ścieżki czyli 9KB ekstra, jako dostępne dla komendy SAVE. Więc jeśli mamy już pełny dysk, a ilość nazw plików (64) jeszcze nie wykorzystaliśmy, to po sformatowaniu tych 2óch ścieżek i wpisaniu tych POKE-ów można wcisnąć na dysk jeszcze kilka KB. Aha najpierw trzeba wpisać CAT by rozpoznał format dyskietki, a potem te 2 POKE-i. Bo przed CAT nie będzie umiał rozpoznać że to dysk DATA.
Do odczytu nie potrzeba żadnych POKE, sam sobie znajdzie ten/te plik/i na dalszych ścieżkach.

Jeśli mamy gęsty napęd taki z 80 ścieżek, możemy pójść krok dalej i wykorzystać w identyczny sposób prawie 57 ścieżek, wpisując w 2go POKE 255 zamiast 188. Co da nam dysk DATA 254K. Nieźle co? ;)
Czemu tylko 57 i czemu ostatnia z nich nie jest wykorzystana w pełni?  Przez to że jednostka alokacji ma 1KB, a w katalogu jej numer jest jednobajtowy. Mamy 4,5K na ścieżce to łatwo policzyć.
Oczywiście wpierw te dalsze ścieżki muszą być sformatowane. Ale komenda SAVE tak średnio się nadaje do kopiowania plików innych niż Basicowe zwłaszcza gdy nie znamy ich numerów startowych. Można by się posiłkować komendami do kopiowania w RSX. Choć to ciągle nie to.

Ale skoro już mamy 80 ścieżek w stacji i Amsdosa, to można by zamiast zmieniać tego 2go POKE użyć taki POKE &A89D,40  To sprawi że ścieżki od 0 do 39 uzna za zarezerwowane, i od teraz katalog widzi na ścieżce 40 i kolejne jego sektory aż do ścieżki 79 to nasz nowy dysk 178K. Tak jakby drugi na tej samej stronie dyskietki. :)  W tym przypadku by widział katalog na ścieżce 40 trzeba wpisać POKE także do odczytu. Musiałbym napisać prosty program kopiujący pliki ze ścieżek 0-39 na te 40-79. Po czym te pierwsze kasujemy i mamy znowu wolne, a pliki z dalszych ścieżek mamy dostępne po POKE &A8A8,255:POKE &A89D,40  w przypadku stacji A, lub POKE &A8E8,255:POKE &A8DD,40 w stacji B. Natomiast sam ten pierwszy POKE gdy zamiast 255 wpiszemy 0, przywraca rozpoznawanie standardowych dysków czyli ścieżki 0-39.

Musiałbym kiedyś przysiąść i poszukać jeszcze POKE do programowego zmieniania strony dysku i zrobić elegancki programik co przerzuca pliki na te dalsze ścieżki, po czym wyświetla MENU z np 20ma grami na dysku 3.5" zamiast 5ma, które się zwykle maks mieszczą na stronie zwykłej 3". W zależności od tego w jakim rejonie dysku dana gra się mieści sam wpisuje właściwe POKE-i. Tak przygotowany dysk będzie się równie dobrze spisywał niezależnie od tego czy mamy zmienionego Amsdosa na coś innego czy nie.  Trzeba by kiedyś przygotować kilka takich dysków, bo fajnie by było mieć wszystkie lepsze samochodówki, nawalanki, platformowki... itd. itp. na jednym takim tematycznym dysku, prawda? 
Choć nie wszystkie gry, będą chodzić z tych dalszych ścieżek, a z demek to niemal żadne, ale mogą zostać na tych standardowych, a dalsze ścieżki na tych samych dyskach wykorzystać tak jak tu opisałem. :)

Natomiast by Amsdos widział dyski Paradosa (796K) lub PC-DOSa (720K), to trzeba wklepać aż kilkanaście POKE-ów, bo tam są inne numery sektorów, inna ich ilość, inne odstępy między nimi, oraz inna jednostka alokacji, ale o tym innym razem gdy znowu znajdę nieco słomy do mojego zapału. ;)

Pod tym postem: http://speccy.pl/forum/index.php/topic,844.msg14135.html#msg14135
- dodałem dsk na którym jest RD.BAS  który (łącznie z plikiem RAMDISK.BIN) daje dodatkowe komendy:
|FORMAT,  |COPY,  |TYPE,  oraz  |M   co umożliwi formatowanie i kopiowanie plików w Basicu.
Programik sam po polsku na przykładach podpowiada składnię tych komend. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Abrimaal w 2016.04.17, 07:23:09
Trochę poza tematem. Wrzuciłeś na stronie 2, pod tym postem który zlinkowałeś, obrazek z music disku. Gdzie takie programy można znaleźć?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2016.04.18, 03:00:09
Takie musicdiski polecają na pouet:
http://www.pouet.net/prodlist.php?type%5B%5D=musicdisk&platform%5B%5D=Amstrad+CPC&page=1
A tu są różne tego samego muzyka, w tym i ten z konikiem na końcu. :)
http://www.cpc-power.com/index.php?page=staff&lenom=SuTeKH
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Abrimaal w 2016.04.18, 20:03:00
Ó! To jest coś. Jeśli mi się uda choć jeden utworek wydłubać, to będzie super. Z gier na CPC jeszcze mi się nie udało. Dzięki. ;D
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2019.05.06, 21:46:27
Odświeżam wątek bo jak potrzebuję to za długo szukam. :D
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.02.11, 13:55:56
Zawsze drażniło mnie, że w basicu nie można napisać zwartego programu ze wstawkami w maszynowym. Te długie data albo poke, które zajmują 3x więcej miejsca. (dwa znaki na byte+miejsce docelowe w pamięci+loader) Postanowiłem użyć linii REM żeby umieścić tam żywy program w maszynowym Z80  :).

Ograniczeniem jest niemożliwość stosowania wartości baytów poniżej 32.

Załączam program scrcopy, który korzysta z tej wariackiej techniki. bez rsxów, loadowania, poke i cudowania.

program jest też testem szybkości kopiowania przez LDI w szyku 84x195+4=16384 z pętlą zrobioną na RET NZ

oraz LDIR.

Trochę zaskakujące porównanie szybkości ~28/300 LDI,    ~32/300 LDIR.

Trochę za wolno to LDI śmiga. Chciałbym też zapytać ZbyniuR jak oszacował te 12,5 taktu na byte przy kopiowaniu stosem, bo nijak mi to nie wychodzi. Pętle wychodzą bardzo "drogo"

Pozdrawiam
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.11, 14:09:42
POP+PUSH to w sumie 21 t-stateów czyli zasadniczo 10.5 na bajt. Możesz w ten sposób sensownie podnieść 6 bajtów potem musisz doliczyć 4 takty na EXX i następne 6. Kolejne 4 to IX/IY po 14/15 taktów. W efekcie masz 16 bajtów w rejestrach za 60+28+8 takty. Zmiana SP to 10 taktów a zrzucenie danych z powrotem 66+30+8 i kolejna zmiana SP to kolejne 10. Razem przerzucenie 16 bajtów to 220 taktów co daje średnio 13.75 na bajt. Oczywiście wszystko przy założeniu, że masz odpowiednio napisaną procedurę kopiującą, która nie wymaga pętli oraz, że nic cię nie zatrzyma przy kopiowaniu - nie wiem jak to wygląda na Amstradach, ale prawdopodobnie jeśli czytasz/piszesz do RAMu do którego odwołują się chipy graficzne to kod może się wykonywać wolniej.

A w ogóle to ja się nie znam i tak sobie tylko teoretyzuję ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.02.11, 22:33:32
Ale, że seryjnie 2x LD SP,nn na sztywno? przecież dla 16kb taki program, sie nie zmieści w pamięci  :o

Ale 12,5 ?  ???
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.12, 08:37:22
Ale ja nie mówię czy się zmieści czy nie. Podliczam tylko jak szybko można to zrobić używając stosu. I nie widzę w wyliczeniach 12.5 - moje 13.75 to teoretyczna maksymalna przepustowość. Można by ciut skrócić używając jeszcze AF. Dodając AF' już niekoniecznie, bo wtedy trzeba też robić EX AF,AF'. A... i można zrezygnować z drugiego EXX - nie ma znaczenia którego bloku rejestrów używamy w kolejnym cyklu.

Natomiast jeśli chcesz oszczędzić rozmiar kodu to musisz używać pętli i od razu cała prędkość idzie do śmieci ;)

Odpowiednio wyważony ciąg LDI i szybka pętla to najekonomiczniejsze rozwiązanie jeśli chodzi o w miarę szybkie przerzucanie dużych bloków danych.

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.02.13, 23:21:19
znowu do odwolania nie mam stacjonarnego neta, 1szy raz w zyciu korzystam z neta w tel, siedzac w chodzie pod sklepem bo tu jest net darmo.
ledwo rozumiem co piszesz ale powiem tylko ze po rem mozesz uzywac dowolne kody oprucz zero, bo to konczy linijke basica. Powodzenia
Kody od 1 do 31 za na klawiszach z CTRL, jedynie 13 trzeba najpierw wyswietlic w chr$ a potem skopiowac go drugim kursorem :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.15, 08:18:03
To w zapisie programu w BASICu Amstrada nie ma pola z długością linii? On naprawdę polega na tym, że w środku tekstu znajduje konkretny znak i to jest dla niego koniec linii? Dziwne...
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 12:00:44
a propos liczenia taktów - wyjadaczom to nie pomoże, ale ja jako laik używałem tego:

http://www.overtakenbyevents.com/tstates/ (http://www.overtakenbyevents.com/tstates/)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.15, 12:02:38
To odpowiem sam sobie... pierwsze dwa bajty zapisu linii BASICa to długość stokenizowanej linii z uwzględnieniem tej długości oraz numeru linii (następne 2 bajty) i znacznika końca linii. Nie wiem jak to się zachowa a praktyce, ale moim zdaniem tak jak na Spectrum - można zrobić linię REM z odpowiednią liczbą np. spacji, żeby się zmieścił nasz kod a potem zapisać właściwy kod przez POKE do tejże linii za znacznikiem REM a na koniec kod wywołać w kolejnej linii odpowiednim CALLem. I jeśli nie spaprzemy kodu i wstępnego przygotowania linii to moim zdaniem zawartość REMa nie ma znaczenia (znowu - nie wiem jak na Amstradzie, ale Spectrum BASIC po napotkaniu tokena REM od razu przeskakuje do następnej linii).
Jedyne ograniczenie jakie znalazłem to 255 znaków, które w jednej linii można wprowadzić z edytora - biorąc jednak pod uwagę fakt, że długość linii ma dwa bajty nic nie powinno stać na przeszkodzie, żeby dłuższą niż 255 znaków linię "wygenerować" odpowiednim POKE łącząc ze sobą dwie albo więcej linii.

a propos liczenia taktów - wyjadaczom to nie pomoże, ale ja jako laik używałem tego:

http://www.overtakenbyevents.com/tstates/ (http://www.overtakenbyevents.com/tstates/)

Przyjemne. Taki automatyczny przeglądacz do tabeli... Choć średnio użyteczny do bardziej skomplikowanych konstrukcji, bo nie sumuje całości oraz transferów blokowych, pętli warunkowych itp. Ale na pewno ułatwia przeliczenia jak komuś się nie chce jeździć po dokumentacji ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 16:00:51
matofesi, używałem tylko do liczenia małych fragmentów kodu, ale któryś debugger do z80 ma opcję licznika t-statów na bierząco z kodem, poszukam w wolnej chwili który.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: KWF w 2021.02.15, 17:11:43
ZASM coś takiego potrafi: https://k1.spdns.de/Develop/Projects/zasm/Documentation/z7.htm#A
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 17:22:07
nie, to co innego - to zlicza Tstaty tak jakby w linii asemblacji kodu, nie jego wykonywania. Nie poda Ci Tstatów z 32 pętli przepisywania jakiegoś powtórzenia. Ale któryś debugger to robił - puszczałem kod i leciał licznik Tstatów, jak ustawiałem breakpoint to miałem zliczone do danego miejsca z każdym wykonanym rozkazem. To mogł być jakiś plugin do VS Code nawet - postaram się przypomnieć sobie co to było.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 17:25:43
to chyba to, można nawet ustawić określoną liczbę Tstatów do wykonania.

http://www.zxspectrum4.net/help/debugger.php
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: KWF w 2021.02.15, 18:40:16
Chyba to samo, ZASM zlicza takty od początku danej etykiety kumulacyjnie.

Frament kodu zliczając stronką, która podałeś:

M   T1   T2   Code
3   17        call cls
3   10        ld de,banner
3   10        ld bc,banner_l
3   17        call print_str
3   10        ld de,text1
3   10        ld bc,text1_l
3   17        call print_str


Z pliku .lst wygenerowanego przez ZASM:

3E80: CD240A   [17]        call cls
3E83: 110000   [27]        ld de,banner
3E86: 010000   [37]        ld bc,banner_l
3E89: CD7F09   [54]        call print_str                       
3E8C: 110000   [64]        ld de,text1
3E8F: 010000   [74]        ld bc,text1_l
3E92: CD7F09   [91]        call print_str
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 18:45:29
Tak, ale jak zrobisz pętlę i ileś wywołań procki to ZASM nie zliczy wszystkiego, bo robi asemplację kodu, a nie jego emulację z tsatami.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: KWF w 2021.02.15, 18:48:39
Sorki za moją niewiedzę, ale chyba inaczej rozumiemy:

"Instructions with varying execution time are given with their run-through time in first place and the branching or repeating time as a second value."
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 18:59:26
Klaud nie sil się na złośliwość i zabawy w słówka tylko odpal jakiś kod z pętlami i zobacz, gdzie kod wyląduje po zadanej ilości t-statów przekraczających pętlę. Zliczyć t-staty z kodu potrafi arkusz Excela albo skrypt ze strony www, którą linkowałem wcześniej.

https://www.oshonsoft.com/z80.html#screenshot (https://www.oshonsoft.com/z80.html#screenshot)

to jeszcze mam zapisane pod hasem tstates :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: KWF w 2021.02.15, 19:06:23
Pytam, bo twierdzisz coś innego niż autor asemblera, skoro przy pętlach pierwsza wartość to czas wykonania a druga podaje czas dla ponownego wykonania lub przeskoku do innego wątku.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.15, 21:46:42
Pytania nie zauważyłem, ale chyba ja nie rozumiem dlaczego taki nacisk na to kładziesz, bo jest to dosyć oczywiste:

http://z80-heaven.wikidot.com/instructions-set:jr (http://z80-heaven.wikidot.com/instructions-set:jr)

weźmy skok warunkowy JR NZ, NN

jeżeli jest spełniony warunek to zajmuje to prockowi 12 tstatów, jeżeli nie jest - tylko 7. Dlatego dwa wyliczenia dla pętli. Ale czy policzy ile razy zrobi pętlę i jaka jest suma tsatów na wyjściu z pętli? Raczej nie, ale jestem otwarty na zmianę myślenia o ZASM jeżeli jest inaczej.

I teraz jeszcze raz - o czym pisałem - DEBUGGER, nie assembler, pozwala na śledzenie kodu wraz z przyrostem tstatów/rejestrów etc. Assembler może Ci w raporcie wyliczyć tabelkowe dane jak te powyżej, ale w praktyce - chcesz się zmieścić z czymśtam w 250 tstatach - albo zobaczyć gdzie wypada ta ilość tstatów w Twoim kodzie - wtedy ma sens narzędzie o którym pisałem. Kompletnie dwa różne zastosowania i potrzeby.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: KWF w 2021.02.16, 07:02:14
Chyba qmam. Dla mnie programowanie jest poza moim poziomem abstrakcji, dlatego nie jestem informatykiem lub programistą. Dzięki.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.16, 08:58:48
Problem statycznego vs dynamicznego zliczania czasów wykonania to stosunkowo skomplikowana kwestia. Bo z jednej strony jest to, czego nie zrozumiał Klaud - czyli proste statyczne choćby z warunkowymi wynikami zliczanie można zrobić choćby podczas assemblacji ale nie da się tego zrobić sensownie bez pełnej symulacji/emulacji wykonania kodu. Debuggery o których wspomina tooloud też nie do końca będą potrafiły to zrobić dobrze jeśli nie mają np. mechanizmów "podkładania" danych zewnętrznych. Dla "prostego" kodu liczącego jakieś rzeczy, przerzucającego dane itp. można policzyć czasy wykonania stosunkowo prosto. Ale co z kodem, który robi jakieś I/O i chcielibyśmy wiedzieć jak się czasowo zachowa zależnie od danych, które dostanie z zewnątrz?... Profilowanie wykonania kodu to cała szeroka gałąź i to o czym dyskutujemy to oczywiście tylko malutki jej wycinek :)

Myślałem kiedyś, żeby sobie spróbować zrobić taki "profiler" (ale raczej właśnie do dynamicznego zliczania taktów niż do analizy które gałęzie kodu jak się wykonują), ale po przemyśleniu uznałem, że ilość pracy jaką trzeba by w to włożyć żeby było zrobione dobrze przekracza użyteczność otrzymywanych wyników w zastosowaniach, do których chciałbym takiego narzędzia używać ;) Zadziałała więc klasyczna zasada "jeśli chcesz coś zrobić, to usiądź i przemyśl... przejdzie ci" ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: Gryzor w 2021.02.16, 11:05:17
Profiler zatrzymal sie w 2016 roku  :D
https://www.speccy.pl/forum/index.php?topic=2346.0

Warunki i dane mozna symulowac w roznych przebiegach, ale dodajac przerwania wszystko sie znacznie komplikuje.
Moim zdaniem dobry statyczny profiler jest wystarczajacy - reszte mozna analizowac w emulatorze podczas normalnego wykonania programu. Tu bardziej przydaja sie narzedzia analizy/prezentacji niz same Tstates. Np. co mi z tego ze w funkcja f zajmuje lacznie 20% czasu wykonania, jak nie wiem skad i ile razy do niej wchodze. Tyle, ze na 8bitach procedury to nie jest normalnosc, bo na call/ret traci sie czas. I zostaje nam caly piekny kod z naduzywaniem GOTO...
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.16, 11:08:56
Liczenie taktów ma w praktyce dwa zastosowania: porównywanie wydajności różnych algorytmów albo metod implementacji tego samego algorytmu oraz liczenie time-sensitive efektów graficznych. Do pierwszego przydać się może profiler albo debugger liczący dynamicznie, drugie zwykle trzeba jednak policzyć ręcznie ewentualnie posiłkując się maszynkami podobnymi do "kalkulatora" do którego link dał tooloud.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: tooloud w 2021.02.16, 19:05:04
Tzn. ten kalkulator to takie bardzo proste narzędzie (użyłem tylko do sprawdzenia paru prostych kodów) - wg mnie debuggerem z licznikiem tstatów robi się to lepiej i bardziej uniwersalnie typu limit tstatów do zbadania na żywym kodzie etc. czyli z obiema rzeczami, które wymieniłeś używałbym debuggera, a nie tego kalkulatora (to taka bardziej ciekawostka - mam gdzieś na dysku wspomniany arkusz do Excela, który generalnie robi to samo, wklejasz kod, a on generuje kolumnę obok tstaty) - chociażby z racji tego, co próbowałem Klaudowi wytłumaczyć.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: matofesi w 2021.02.17, 08:17:45
Ja wiem, że proste, ale na co dzień jak potrzebuję policzyć takty to otwieram PDFa z manualem Z80 (albo po prostu przywołuję otwarte okno - gdzieś tam prawie zawsze wisi ;)) i liczę na piechotę przewijając PDFa w te i we wte ;)
Co do zasady uważam, że takie liczenie ma sens w kilku dość ograniczonych przypadkach - głównie akademickich dyskusji oraz efektów na borderze na Spectrum - i w praktyce dotychczas właściwie nie odczuwałem potrzeby używania bardziej zaawansowanych narzędzi tego typu.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.02.17, 23:46:22
kopiowanie ekranu  &c000-&FFFF do banku 1 &4000-&7FFF

musimy mieć 3 linie rem wypełnione do końca

kopiowanie przez stos z prędkością 15,6 T/byte - szybszy od LDI ! ;-)

org #277
di

push AF
push hl ;11
push bc ;11
push de ;11
push iy ;15
push ix ;15
exx ;4
EX AF, AF' ;4
push AF
push hl ;11
push bc ;11
push de ;11

;-------------------

ld (#8002),SP
ld sp,#fff0      ;źródło

ld ix,#7fff       ;cel-1
inc ix
ld a,170          ;170*16*6+16*4=16384

petla:
EX AF, AF'  ;4

macro kopia            ;246T/16byte

pop af ;10
pop de ;10
pop bc ;10
pop hl ;10

exx ;4

pop iy ;14
pop de ;10
pop bc
pop hl

ld sp,ix ;10

push hl ;11
push bc ;11
push de ;11
push iy ;15

exx ;4

push hl ;11
push bc
push de
push af

ld hl,#7ff0 ;10
add hl,sp   ;11
ld sp,hl    ;6

ld de,#fff0 ;10
add ix,de ;15

mend

kopia
kopia

ost_4:
kopia
kopia
kopia
kopia

EX AF, AF' ;4
dec a ;4

jp nz,petla ;10    170*6*16 byte=16320

inc a

ex af,Af'

jp nz,ost_4 ;10  4*16 byte=64

ld sp,(#8002) ;20

jp linia_3

org #377

linia_3:
pop de
pop bc
pop hl
pop af

ex af,af'
exx

pop ix
pop iy
pop de
pop bc
pop hl
pop af

ei
koniec:
ret
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.02.19, 23:22:53
Ja pisywałem tylko w Basicu a

LD HL
LD DE
LD BC
LDIR
RET

to najbardziej zaawansowany kawałek kodu jaki zdarzało mi się używać świadomym znaczenia każdego bajta. :)
Czy potraficie tak zmodyfikować powyższą metodę bym mógł ją wywoływać w Basicu podając jednocześnie parametry?
czyli CALL adrprocedury,adrźródła,adrdocelowy,ileprzesłać 
a nie jak teraz, że muszę POKE-ami ją modyfikować i wywołać prostym CALL adrprocedury

I skoro trafiłem na takich speców to zapytam, ile by zajął kod do przeniesienia 16KB tą metodą LDI?

ostatni parametr jest od razu w DE jeżeli, skorzystać z tego to nie mógł by to być "ile przesłać", tylko adres docelowy.
można też skopiować DE do BC.

generalnie rejestr IX zawiera adres w pamięci gdzie znajduje się słowo (integer) z ostatnim (u nas trzecim) parametrem.

(IX+2) to adres przedostatniego parametru
(IX+4) to adres przed-przedostatniego parametru czyli pierwszego.

w rejestrze A jest ilość parametrów.

można by karmić rejestry długą sekwencją

LD C,(IX+0)
LD B,(IX+1)
LD E,(IX+2)
LD D,(IX+3)
LD L,(IX+4)
LD H,(IX+5)

;19*6=114 taktów

LDIR

RET

to przy założeniu, że na pewno są 3 parametry, bo nie sprawdzamy akumulatora.


Wersja przez stos

DI               ;4
LD IY, 00     ;14
ADD IY,SP   ;15

LD SP,IX     ;10

POP BC      ;10
POP DE      ;10
POP HL      ;10

LD SP,IY    ;10

EI             ;4

;  ^  87 taktów

LDIR

RET

ps. nie da się umieścić w rem niestety ;-), bo są zera w jednym i drugim.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.03.05, 21:49:13
Komenda LIST toleruje kod zero w miejscu gdy jest parametrem np jednym z bajtów liczby podanej jako parametr, ale w innych niespodziewanych miejscach sprawia że LIST kończy działanie i daje Ready. A jeśli to nie ostatnia linia to dalszy ciąg listingu można wyświetlić podając kolejny nr linii jako parametr np LIST 30-
Jest to też trick by ukryć możliwość wylistowania programu. Oczywiście takie zero można wstawić tylko za pomocą POKE.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.03.08, 14:47:49
To znaczy, że ma to być w środku linii? w zmiennej tekstowej np?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.03.09, 19:38:11
Wrzucam procedurę używającą, przerwań. Postarałem się podłączyć ją przed firmwarową obsługa przerwań żeby złapać je jak najszybciej. Wyszło na to, że CPC w większości skacze z &0038 do &B941 rozkazem z ROMu a nie RAMu. Dlatego rozkaz skoku do swojej procedury umieściłem pod &B942 a zniszczone w ten sposób rozkazy istniejące odtworzyłem na końcu swojej procedury, żeby procedura firmwarowa nie ucierpiała.

procedura przechowywana jest w rem. Potem kopiowana do miejsca gdzie działa czyli &9000.

Z ciekawostek to w rem kłopotliwe jest przechowywanie bajtów chr$(&80), bo wyglądają identycznie jak chr$(&20) czyli jest to spacja. Takiego bajtu nie da się skopiować klawiszem COPY. zatem postanowiłem unikać w REM  kodu 0 i 128 (&80).

Jestem zaskoczony jak wysoko zaczynają się przerwania. Przeważnie ekran krojony jest na 6 kawałków w tym bitmapa na 4. Tutaj po paskach bordera widać, że przerwaniami można np odkroić ostatnią 25 linię tekstu.

;oryginalna procedura CPC od #B941 do której skacze CPC z &0038
;di
;EX AF,AF'
;JR C,#B978
;--^-- czesc nadpisana
;B945:
;EXX
;...

;zmiana startu procedury przerwania
;org #B941
;DI
;JP int ;#9010

org #9000

set_:
di
ld HL,#B942

ld (HL),#C3 ;kod JP
inc hl
ld (hl),#10 ;kod adres L
inc hl
ld (hl),#90 ;kod adres H
ei
ret

org #900E
color0:
db #55

org #900F
color1:
db #54

org #9010
;nowa procedura przerwania
int:
push bc
push AF

ld b,#1  ;
;org #9013
;db #01
loop:
djnz loop

ld a,(color0)
ld c,#7F
inc c
ld b,a
and c
JR NZ,jedynka
zero:
ld a,b
or c
ld (color0),a
ld a,(color1)
jR omin

jedynka:
ld a,b
and #7F
ld (color0),a

omin:
ld bc, &7f10
out (c), c
out (c), a

pop AF
pop bc

;odtworzenie funkcjonalnosci czesci nadpisanej procedury oryginalnej.
EX AF,AF'
JP C,#B978
JP #B945

;oryginalna procedura CPC od #B941
;di
;EX AF,AF'
;JR C,#B978
;--^-- czesc nadpisana
;B945:
;EXX
;...

Procedura kopiująca z REM do &9000 bez zer i &80 wygląda tak:

org #260
xor a
ld b,a  ;#00
ld c,#B0
ld d,#90
ld e,a ;#00
ld hl,#017F
inc hl ;#0180
ldir
ret
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.03.09, 22:49:13
No to teraz prawdziwy TRICK.  :D

w kernelu jest wiele procedur, w których parametr trzeba podać w rejestrze akumulatora.

zróbmy to tak:

10 DIM kod%(2):kod%(0)=&CD7B:kod%(2)=&C9:DEF FNkernel=@kod%(0)

i teraz

20 kod%(1)=&BD1C : CALL FNkernel,2  : REM zmiana trybu wyświetlania na 2.

ps. w prostym przypadku można jeszcze sprytniej

call &BD1C,1,1  <dwa parametry oznaczają tryb 2
call &BD1C,1     <jeden parametr oznacza tryb 1
call &BD1C        <brak parametrów oznacza tryb 0

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.03.10, 00:42:06
Nie ogarniam tych czarów.
Dotąd takie coś robiłem dodając po CALL &bd1c tyle dowolnych parametrów jaki MODE chciałem.

PS.: Ten DIM jest zbędny bo w CPC trzeba to używać tylko gdy któryś z wymiarów tabelki ma mieć więcej niż 10.
PS2.: Żeby kursor kopiował kod 128, wpisz SYMBOL AFTER 128:SYMBOL 128,1  :)
PS3.:  A to widziałeś?  (tzn. obrazki pod tym postem)   https://www.speccy.pl/forum/index.php?topic=1363.msg21296#msg21296

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.03.10, 13:34:46
Nie ogarniam tych czarów.

Te czary dają możliwość napisać kawałek kodu w tablicy integer. i wywołać go call @tablica,akumulator

kod 7B to rozkaz kopiowania rejestru E do A. więc CD czyli call ma przygotowaną zawartość akumulatora zgodną z pierwszym parametrem. np. &C0. Nie podasz 192 parametrów basicowemu CALL, żeby przekazać taką wartość. 8)

PS2.: Żeby kursor kopiował kod 128, wpisz SYMBOL AFTER 128:SYMBOL 128,1  :)

czyli musze najpierw run a dopiero potem list. bo inaczej copy jest z błędem.

PS3.:  A to widziałeś?  (tzn. obrazki pod tym postem)   https://www.speccy.pl/forum/index.php?topic=1363.msg21296#msg21296

Dużo tego. W weekend ogarnę. :)

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.03.10, 14:08:31
Wspomniałeś wcześniej że przechowywanie kodu 128 jest kłopotliwe przez to że wygląda jak spacja.

W rzeczywistości kłopotliwe jest nie jego przechowywanie w REM, tylko jego wstawienie tam za pomocą kursora kopiującego, który rozpoznaje ten znak jako spację, i to ją wstawia.
Ale zmieniając wygląd znaku tak jak pokazałem zacznie sie różnić jednym pikselem od spacji i teraz kursor kopiujący prawidłowo go rozpozna i skopiuje kod 128 zamiast spację. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.03.23, 22:42:10
Procedura do 5 pasków. ostatni nr 1 to 25 linia.

Można sobie ustawiać mode dla 5 pasków, kolory Pen 0,Pen 1, i ramki border. Kolory mają numery Hardwarowe. https://www.cpcwiki.eu/index.php/CPC_Palette

Opis w remach basica.

Program w basicu pokazuje jak poke'ami ustawić np 27 kolorów na ekranie.
Kod maszynowy kopiowany z rem do &9000 procedurą z rema &260.

Ze względu na to, że procedura przerwania jest nie widoczna i zaskakująca dla systemu. To można
podłączać inne programy z obsługą przerwań. Powinno działać i dawać zaskakujące efekty :)

Pominąłem bajty &80 w kodzie. Zakładam, że trik z Symbolem który proponuje ZbyniuR dla kodu &80 byłby dla milionów użytkowników Amstradów w Polsce  :D mylący. Trik zadziałałby dopiero po wykonaniu linijki kodu, a mógłby być kopiowany z listingu przed wykonaniem kodu i już by nie działał. Dziesiątki tysięcy sfrustrowanych użytkowników. Tak nie można. ;)

;orginalna procedura CPC od #B941
;di
;EX AF,AF'
;JR C,#B978
;--^-- czesc nadpisana
;B945:
;EXX
;...

;zmiana startu procedury przerwania
;org #B941
;DI
;JP int ;#9010

org #9000

set_:
di
ld HL,#B942

ld (HL),#C3 ;kod JP
inc hl
ld (hl),#10 ;kod adres L
inc hl
ld (hl),#90 ;kod adres H
ei
ret

db #AF
db #AF

org #9010
;nowa procedura przerwania
int:
push bc
push AF

push hl
push de

ld hl,pasek 
ld C,(HL)    ;nr paska (od gory 6,5,4,3,2,1)
ld a,c
cp 6
jp nz,nvst

ld b,#f5
in a,(c) ;sprwdzenie czy pasek 6 jest w czasie synchronizacji pionowej
rra
jp c,vs

jp koniec

vs:

nvst:

;----------------

sla c
sla c
ld HL,dane
ld b,#ff
inc b
add HL,bc

ld a,(HL)

ld d,a ;color0

inc hl

ld a,(HL)

ld e,a ;color1

inc hl

ld a,(HL)

ld (color),a ;color_border

inc hl

ld a,(HL)

ld (tryb),a ;tryb

; ---------------------
ld hl,pasek
ld c,(hl)
dec c
jr nz,omin
ld c,6
omin:
ld (HL),c

ld b,#4  ; 7+  taka zaszlosc.
delay:
ld b,#1  ; 7+
loop:
djnz loop  ;+13xb+8 takty zamiast 18xNOP=72takty

;---------------- szybkie wlanczenie trybu tylko na jedna linie

ld bc,#7fff
inc c
ld a,(tryb)
or #8C
ld h,a
out (c),a

;---------------------------------
;ld bc,#7f00 ;pen 0
ld a,d

out (c), c
out (c), a

inc c    ;pen 1

ld a,e

out (c), c
out (c), a

ld c,#10    ;border
ld a,(color)

out (c), c
out (c), a

;---------------- wolne ale trwale wlonczenie trybu
ld a,h
and #3
call #BD1C
;--------------------------------------------------

koniec:
;ld a,#54

;ld bc, &7f10
;out (c), c
;out (c), a
pop de
pop hl
pop AF
pop bc

;odtworzenie funkcjonalnosci czesci nadpisanej procedury oryginalnej.
EX AF,AF'
JP C,#B978
JP #B945

;orginalna procedura CPC od #B941
;di
;EX AF,AF'
;JR C,#B978
;--^-- czesc nadpisana
;B945:
;EXX
;...

color:
db #78
tryb:
db #2
pasek:
db #1  ;nr paska+1 (od gory 6,5,4,3,2,1)

dane:
db #FF  ;pasek nr 0 nie istniejacy.
db #ff
db #FF
db #ff

color1t:  ;tło pen 0
db #54
color1p:  ;pen 1
db #53
color1b:   ;ramka  border
db #52
tryb1:
db #82

color2t:
db #4F
color2p:
db #4E
color2b:
db #4D
tryb2:
db #8c    ; MODE 0  - wartość wpisana tylko poto żeby nie było 0 w rem albo &80.

color3t:
db #4c
color3p:
db #4b
color3b:
db #4a
tryb3:
db #82

color4t:
db #47
color4p:
db #46
color4b:
db #45
tryb4:
db #82

color5t:
db #44
color5p:
db #43
color5b:
db #42
tryb5:
db #82

color6t:
db #42
color6p:
db #41
color6b:
db #40
tryb6:
db #81

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.07.23, 22:01:48
Tapeta na Amstradzie. Ekran główny pod adresem &c000 przełączany w przerwaniach 1/50 sek z ekranem w &4000.

Skorzystałem z licznika scrolla pod adresem &b72d

Tapeta nie jest scrollowana a ekran główny jest.

wrzuciłem na Youtuba filmik z efektem zobaczymy czy opublikują go w 60Hz
https://youtu.be/A0s2uqhhmoc .....narazie nie działa. klatki z tapetą nie widać.

Dorzucam 1sek spakowany zipem film jakby ktoś chciał zobaczyć.

Zrzut ekranu z JavaCPC przy włączonym DeInterleaced

I gif który ma migać 60Hz

Zalączam snapa.
na 60Hz monitorze najlepiej widać co się dzieje w Caprice32 ustawianym na custom turbo 121% i włączonym Turbo.

jestem zaskoczony, że na CRTC 0 nie można ustawić koloru dla INK 3 , w WinAPE działa dopiero na CRTC 2 , a w Caprice na CRTC 1.

Kod procedury asemblerowej wygląda tak.

;orginalna procedura CPC od #B941
;di
;EX AF,AF'
;JR C,#B978
;--^-- czesc nadpisana
;B945:
;EXX
;...

;zmiana startu procedury przerwania
;org #B941
;DI
;JP int ;#9010

org #9000

set_:
di
ld HL,#B942

ld (HL),#C3 ;kod JP
inc hl
ld (hl),#10 ;kod adres L
inc hl
ld (hl),#90 ;kod adres H
ei
ret

db #AF
db #AF

org #9010
;nowa procedura przerwania 300Hz
int:
push bc
push AF

push hl
push de

ld hl,pasek 
ld C,(HL)    ;nr paska (od gory 6,5,4,3,2,1)
ld a,c
cp 6
jp nz,nvst

ld b,#f5
in a,(c) ;sprwdzenie czy pasek 6 jest w czasie synchronizacji pionowej
rra
jp c,vs

jp koniec

vs:

push bc

xor a
ld b,a
ld h,a
ld A,(#b72D) ;firmwarowy licznik scrolla
neg
ld l,a
sla l
rl h
sla l
rl h
sla l
rl h
ld c,l ;Ax8
ld b,h
sla l
rl h
sla l
rl h   ;Ax32

add hl,bc  ;A*(32+8)
ld a,#03
and h
ld h,a     ;wyliczony w HL offset scrolla 0-1023

ld bc,#bc00
ld a,12
out (c),a ; bc00,12

tu:
jr first
first:
ld a,tam-first
ld (tu+1),A
ld A,#10
ld l,0
;or h
jr tim
tam:
xor a
ld (tu+1),A
ld A,#30
or h
tim:
inc b

out (c),a ;bd00,(12)<- #10, #30 + $offset H  <-#10 - &4000,  #30 - &C000

dec b

ld a,13
out (c),a ;bc00,13

inc b
ld a,l
out (c),l ;bd00,(13)<- $offset L
pop bc

nvst:

;----------------

po_pasku_nr6:
sla c
sla c
ld HL,dane
ld b,#ff
inc b
add HL,bc

ld a,(HL)

ld d,a ;color0

inc hl

ld a,(HL)

ld e,a ;color1

inc hl

ld a,(HL)

ld (color),a ;color_border

inc hl

ld a,(HL)

ld (tryb),a ;tryb

; ---------------------
ld hl,pasek
ld c,(hl)
dec c
jr nz,omin
ld c,6
omin:
ld (HL),c

delay:
ld b,#1 
loop:
djnz loop

;---------------- szybkie wlanczenie trybu tylko na jedna linie

ld bc,#7fff
inc c
;ld a,(tryb)
or #8C
ld h,a
out (c),a

;---------------------------------

ld a,d

out (c), c
out (c), a

inc c    ;pen 1

ld a,e

out (c), c
out (c), a

ld c,#10    ;border
ld a,(color)

out (c), c
out (c), a

;---------------- wolne ale trwale wlonczenie trybu
ld a,h
and #3
call #BD1C
;--------------------------------------------------

koniec:

pop de
pop hl
pop AF
pop bc

;odtworzenie funkcjonalnosci czesci nadpisanej procedury oryginalnej.
EX AF,AF'
JP C,#B978
JP #B945

;orginalna procedura CPC od #B941
;di
;EX AF,AF'
;JR C,#B978
;--^-- czesc nadpisana
;B945:
;EXX
;...

color:
db #78
tryb:
db #2
pasek:
db #1  ;nr paska (od gory 6,5,4,3,2,1)

dane:
db #FF  ;pasek nr 0 nie istniejacy.
db #ff
db #FF
db #ff

color1t:
db #47   ;&90D9
color1p:
db #43   ;&90DA
color1b:
db #52   ;&90DB
tryb1:
db #81   ;&90DC

color2t:
db #47   ;&90DD
color2p:
db #43   ;&90DE
color2b:
db #4D   ;&90DF
tryb2:
db #81   ;&90E0

color3t:
db #47   ;&90E1
color3p:
db #43
color3b:
db #4a
tryb3:
db #81

color4t:
db #47   ;&90E5
color4p:
db #43
color4b:
db #45
tryb4:
db #81

color5t:
db #47   ;&90E9
color5p:
db #43
color5b:
db #42
tryb5:
db #81

color6t:
db #47   ;&90ED
color6p:
db #43
color6b:
db #40
tryb6:
db #81   ;&90F0

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.07.24, 00:41:07
Teraz dopiero załapałem co ty próbowałeś zrobić. Jest poprawa bo tapetka sie nie skroluje mimo scrola na ekranie głównym. Ale mam poważne wątpliwości co to estetyki tej pstrokacizny.

Mi kiedyś chodziło po głowie co zrobić aby po każdym resecie zamiast tego nudnego tekstu witał jakiś pocieszny obrazek, (nie szkodzi że zniknie przy pisaniu na nim lub przewinięciu ekranu), do tego kilka użytecznych funkcji przypisanych do paru klawiszy i podpowiedź co wcisnąć by coś ruszyć, ot tak dla zielonych. Taki obrazek by sie pewnie kopiował z ekstra 16KB ROMu ze 2 sek. Ale utknąłem na rozgryzieniu jak ROM po resecie definiuje klawisze funkcyjne. Sam jestem na to za głupi, a na pytania o pomoc nie było odpowiedzi ani tu ani na cpcwiki.

Co ty masz za wersję Caprice że ma Turbo i możliwość ustawiania prędkości z dokładnością do 1%, mój ma co 25%, i obsługuje tyko CRTC1.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.07.24, 08:03:58
Ale mam poważne wątpliwości co to estetyki tej pstrokacizny.
O gustach sie nie dyskutuje  ;D :P :o.
To jest zajawka techniczna nie artystyczna. A poważnie to paski zostały z poprzedniej wersji. Można je sobie poustawiać. Na końcu kodu asemblera są adresy dla hardwarowych kolorów tła, pisaka 0, bordera i modów kolejnych pasków. Cztery bajty dla każdego paska poczynając od &90D9. Niestety nie każde kolory się dobrze mieszają. Wybrałem takie, które nie zmieniają tego żółtego za bardzo i nie migają za mocno.

Mi kiedyś chodziło po głowie co zrobić aby po każdym resecie zamiast tego nudnego tekstu witał jakiś pocieszny obrazek
Mi przychodzi do głowy napisać to w basicu i umieścić kawałek pamięci z programem w odpowiednim miejscu i uruchomić nawet ręcznie ładując bufor klawiatury. procedure odpalić gdzieś z romu dodtkowego.

Co ty masz za wersję Caprice że ma Turbo i możliwość ustawiania prędkości z dokładnością do 1%, mój ma co 25%, i obsługuje tyko CRTC1.

Caprice32 ver 21.4
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.07.24, 13:41:22
Nie wiedziałem że Caprice32 zmienił nazwę na Caprice Forever, instalkę znalazłem, potem sie pobawię bo niedługo idę do roboty.

Ja w ROMie CPC umiem tylko zmienić wygląd znaków, mapę klawiatury i napis powitalny. Wiem gdzie i w jakiej postaci trzyma definicje klawiszy funkcyjnych w RAM, ale w ROMie ma to zupełnie inną postać, wygląda to raczej na procedurę która modyfikuje kolejne klawisze.

Pisałem o tym tu:
https://www.speccy.pl/forum/index.php?topic=2392.msg32369#msg32369

PS.: Większość rozmów jakie ludzie prowadzą dotyczą ich gustów. :P

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.07.31, 17:03:03
Miks mode 2 i mode 0 i podprowadzony bomb jack

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.09, 16:18:52
Nowa wersja  Hello World.   1 linia czystego Basica. :)

10 MODE 0:BORDER 0:l=1:s=1:FOR i=0 TO 15:INK i,ASC(MID$("@YXOFCDHQTKBAIRV",i+1,1))-64:NEXT:WHILE-1:FOR p=1 TO 15 STEP 0.5:PEN p:LOCATE VAL(MID$("112345678998765432",s+1,1)),1:s=(s+1)MOD 18:PRINT"Hello World!":LOCATE 1,1:PRINT CHR$(11):NEXT:WEND

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: m0b w 2021.09.09, 16:47:27
Niezoptymalizowany! Zmienna l nigdzie nie używana ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.10, 01:39:47
Faktycznie po zmianie koncepcji przestała być potrzebna. :)

Wypraszam sobie brak optymalizacji, wiesz ile przy tym siedziałem?

Podaj przykład jak to przyspieszyć albo skrócić.
np można by   DEFINT i,s   dopisać, i tak było zanim uznałem że zmieszczę się w jednej linii, a "fala" miała wtedy dłuższy ciąg cyferek i sie nie mieściło. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.10, 04:07:04
Tak właściwie to jeśli zmienną s będziemy modyfikować przed Locate a nie po, to jej definiowanie na początku jako 1 też jest zbędne. I jeszcze drugie Locate można by kodem zapisać, przez co drugi Print nie jest potrzebny. I teraz listing w MODE 2 nie przekracza 3ech linijek, więc spokojnie można by dodać to DEFINT by ciut przyspieszyć. :)

10 MODE 0:BORDER 0:FOR i=0 TO 15:INK i,ASC(MID$("@YXOFCDHQTKBAIRV",i+1,1))-64:NEXT:WHILE-1:FOR p=1 TO 15 STEP 0.5:PEN p:s=(s+1)MOD 18:LOCATE VAL(MID$("112345678998765432",s+1,1)),1:PRINT"Hello World!"CHR$(30)CHR$(11):NEXT:WEND

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.11, 19:30:54
WHILE-1 ???
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.12, 17:40:49
Normalnie przy While podaje sie warunek dopóki pętla ma sie wykonywać, ale jak chcemy by sie po prostu wykonywała bez końca to zamiast równania można podać dowolną (chyba) liczbę, a zwyczajowo podaje się -1, minus po to aby tam nawet spacji między While a liczbą nie było.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: trojacek w 2021.09.13, 10:28:37
zamiast równania można podać dowolną (chyba) liczbę, a zwyczajowo podaje się -1, minus po to aby tam nawet spacji między While a liczbą nie było.

Nie wiem jak na Amstradzie, ale w implementacjach, które ja znam, liczba musi być różna od zera, bo zero = false. Podejrzewam, że na Amstradzie jest podobnie.

Ale ten minus to nie rozumiem w sumie, po co. "WHILE-1" i "WHILE 1" to tyle samo znaków (jako string), nie podejrzewam, by wewnętrzna reprezentacja integera miała różną długość dla -1 i 1. Przy czym "WHILE 1" jest notacją elegancką, bo przejrzystą (zrozumiałą), a WHILE-1 kompletnie nie. No ale jakby wszystko było oczywiste, to by się ten wątek nie rozwijał ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.13, 16:30:53
Przed minusem nie trzeba po While pisać spacji i w pamięci program zajmuje o jeden bajt mniej.  :)

Ziarnko do ziarnka...
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.13, 18:00:14
?2=2
-1
Ready
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.14, 09:24:21
Ok, potestowałem, i jeśli chcemy pętlę WHILE-WEND wykonywać w kółko bez warunków, to trzeba wpisać dowolną liczbę ze znakiem lub bez, byle nie zero.

A minus zamiast spacji jednak zajmuje tyle samo miejsca. :(
Za to przed takimi słowami kluczowymi przed którymi nie trzeba pisać dwukropka jak: TO, STEP, IF, THEN, ELSE, (i być może coś tam jeszcze), jeśli są poprzedzone liczbą, to pomiędzy tą liczbą a tym słowem nie trzeba pisać spacji, i to oszczędza bajt pamięci, mimo że potem listując tą linię widać tam spację choć jej nie ma. :)
Również jeśli te słowa są poprzedzone zmienną która ma w nazwie $ lub !, albo jest tam wyrażenie kończące sie zamkniętym nawiasem, to też nie trzeba pisać spacji i działa dobrze, choć tym razem po listowaniu spacji nie widać. Ot taka ciekawostka. :o
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.26, 01:47:17
POKE &B7C4,PEEK(&B7C4)+1

przesunięcie offsetu ekranu o 1 bajt dla mode 0 to 1/4 znaku, dla mode 1 to 1/2 znaku, po zmianie nadal działa locate z uwzględnieniem offsetu

roll ekranu anuluje poprawkę ustawienie.

w zasadzie trzeba by korygować jeszcze starszy bajt offsetu &B7C5. ale upraszczając ...
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.26, 12:08:54
A w 464 adres który robi to samo to &B1C9. :)

Ja to bym chciał wiedzieć czy po przestawieniu rejestrami szerokości ekranu da sie przez POKE zmienić miejsce do którego nam przeskakuje kursor w pionie, tak żeby nadal każda następna linia zaczynała sie pod początkiem poprzedniej linii.

np. BORDER 0 (żeby było widać gdzie jest ramka), OUT &BC00,1:OUT &BD00,41  (zwiększamy szerokość ekranu o dwie kolumny)
I teraz każdy enter, albo strzałki góra dół to kursor nie trzyma pionu tylko przeskakując linijkę przesuwa sie także o dwa znaki w bok. :(

Czy jest jakiś POKE który to prostuje, czy trzeba by całą procedurę z ROMu przenieść w inne miejsce i ją zmodyfikować?

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.26, 17:51:15
Prześledziłem proces wciskania entera i doczłapałem się do sekwencji liczenia adresu na ekranie dla znaku o współrzędnych X,Y.

bardzo sztywno liczy linie razy 80, potem dodaje współrzędną X liczoną x2 albo 4 w zależności od moda. Na końcu dodaje offset z adresu &B7C4(C5)

ale w innych miejscach występuje też liczba 79 i 39. więc sprawdzanie jest z silnym założeniem, że linia ma 80 bajtów oraz 80, 40 lub 20 znaków.

przy rysowaniu graficznym pewnie będą kolejne zasieki.

Moge zrobić moda na modyfikację mnożnika ale chyba najprościej będzie zmodyfikować procedurę chr$(10) ale wtedy locate nie bedzie działać.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.26, 19:51:27
Owszem po zmianie szerokości ekranu w rysowaniu linii albo wyświetlaniu liter spod kursora graficznego też sie robi sieczka. Ale to wyższa szkoła jazdy i ucieszyłbym sie gdyby chociaż tryb tekstowy umiał korzystać z innej szerokości ekranu.

Niedawno wspominałem na innym wątku że Amstradowi programiści nie raz modyfikowali procedurę wyświetlania liter aby je przyspieszyć, i jedna z nich była w Bajtku 9/92s18, ale też w Komputerze 12/88s28 przy okazji dodano w niej możliwość pisma Italic (w 4/89s24 Errata), a skoro już wywleczono procedurę drukowania z ROMu by ją modyfikować, to może ten fragment w którym jest ten sztywny przeskok linii o te 80 bajtów też tam jest. I może wystarczy jedno POKE. Chwila sprawdzę ... No nie, nie ma tam bajta o wartości 80. Czyli to tylko zmienia matrycę znaku na odpowiednie zapikselowanie pamięci ekranu przy wyświetlaniu literki, a procedura do ustalenia gdzie ta literka ma być nadal jest w ROMie choć te FastPrinty pewnie sie do niej odwołują.

Pewnie jest kilka miejsc gdzie to sztywne 80 się pojawia, A przynajmniej dwa przy LOCATE i przy ustalaniu gdzie wyświetlić kursor.
Zazdroszczę Ci że jesteś taki oblatany, a ja nie dość że nie jestem to jeszcze z 80% entuzjazmu jaki miałem do bawienia sie Amstradem sprzed paru lat mi wyparował.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.26, 23:22:26
Na szybko zmiana 4 bajtów daje niezły efekt.

Zmiana ograniczników window ustawiona na 95 i 47 komórki w LowRom

oraz mnożnik bajtów na linie na 96  (((((((HL*2)+HL)*2)*2)*2)*2)*2)

teraz można dać WINDOW 1,96,1,21

oraz
OUT&BC00,2:OUT&Bd00,50
OUT&BC00,1:OUT&BD00,48
OUT&BC00,6:OUT&BD00,21

i tylko jeszcze scroll nie kuma o co chodzi i locate sie gubi.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.27, 01:27:34
Ograniczenia WINDOW to nie problem bo można w POKE &B72C  wpisać prawą kolumnę do strumienia zero jakiej ustawa nie przewiduje. :)  Liczone od zero, a nie od jeden jak w komendzie WINDOW.

LOCATE jest dobrze. Wyświetlanie i kursory są oki dopóki ekran sie nie przewinie po dojściu do dolnej krawędzi, wtedy wszystko sie chrzani do czasu wydania komendy MODE.

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.27, 11:16:32
Jest problem, bo bez zmiany ogranicznika w bajcie &0B68 (normalnie jest tam 79) system łamie linie tekstu na 80 znaku mimo, że jest już overscan i w &B72C wpisałem 95
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.27, 22:47:07
Pozmieniałem wszystko co widziałem. Nie znalazłem tylko kasowania nowej dolnej linii niestety zawija się 16 znaków. czyli szykuje nową linie 80 znaków w wierszu a nie 96.

łacznie z ustawieniem, że komp ma 21 linii textu.

scroll sprzętowy raczej działa.

wyszedł textowy Amstrad 21:9  8) ;)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.28, 14:12:47
Normalnie ekran to 40x25 czyli 1000 znaków i widocznych 16000 bajtów, a taki poszerzony to 48x21 czyli 1008 znaków i 16128 widocznych bajtów. Może taką wartość gdzieś sprawdza.

Wiesz że lepiej byłoby skopiować te modyfikowane procedury z ROMu do pliku, aby można je było wczytać, do RAM, potem zmodyfikować wektory którymi sie odwołuje do tych z ROMu na takie aby zadziałały te nowe i wtedy to będzie działało na każdym 6128 a przy dobrze zmienionych wektorach także na 464. No i wtedy opublikować to na angielskim forum i niech Cię chwała nie omija. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.28, 14:44:04
to jest dośc daleko od typowych wywołań &BXXX. Trzeba by przenieść wszystko co leci od ASCII 1-31 i wywołania &BXXX i w jakis sposób modyfikuje ekran, windowy, locaty, bada XY znaków. przepisac kernela.

1008 (2016 bajtów) nie wystepuje wprost. Kernel jest mocno zorientowany na XY znaków i końcówki. (80, 96 (16384-16000)/8 itp.) żaden LDIR mi nie podpasował, że może zamazywać kolejną linię.

Obaczym.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.09.28, 17:18:41
Skoro to jest takie złożone że aż tyle procedur trzeba zmienić to by tłumaczyło czemu jeszcze nikt tego nie zrobił.

A może on tam spacje drukuje, w tych wyłaniających sie linijkach, i tej samej procedury używa na window które nie są całymi ekranami. Można by prześledzić działanie kodów sterujących góra dół i do czego się odwołują w przypadku dojścia do krawędzi okna.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.09.28, 22:09:40
Dokładnie tak to robię, śledzę gdzie on skacze po zwykłym scrollu. Lece od &1523
ASCII 10 czyli:
&B781 3byte     ASCII 10: &80, &1523: Linefeed

W zasadzie wszystko jest dobrze. (chyba), troche na czuja to zrobiłem.

zsynchronizowałem to z nową resztą  z 16kB , 256 (32znaki) zamiast 384 (48znaków).

ps. spacji nie drukuje, jest LDIR, który kopiuje zera.

na Holle screen używa scrolla hardwarowego. na małym window, scroll jest softwarowy strasznie wolny jak wiadomo.

ta procedura skacze po LowROM jak gupia nawet przechodzi przez &BXXX włącz, wyłącz kursor i takie tam.

najprościej to by było wsadzić LowRom do RAMu relokować cały kod na to miejsce. (Call ze sztywnymi adresami jest jak naprał) a potem okrawać żeby zostało tylko to co musi być.

W załączeniu Chyba już gotowy mod LowRomu.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.10.08, 21:05:44
po wojnie z relokowaniem overscanowego moda LowRomu. fundamenty są, ale pozostało wychwycić co działa źle.

z rzeczy oczywistych:
następuje reset przy operacjach dyskowych cat, save.
podwójny kursor liczy się przez ROM więc nie widzi overscanu.

co jeszcze? Może Zbyniu pomożesz i może ktoś jeszcze. zapraszam do testów.

program Ovrscan.bas
ROM-RAM.bin zrelokowany ROM do obszaru &4000

ps. OK. linię 80 basica należy zamienić na wpis 80 POKE &B995,&F2 i cat działa.

to fragment procedury obliczania adresu w ROM do jakiego należy skoczyć.

Adres pobrany np z tablicy skoków BB4E 36*3 TextVDU Jumpblock

ma kasowane bity 7 i 6 żeby napewno trafił w LowRom.

Cytuj
org #b98b
exx
pop hl
ld e,(hl)
inc hl
ld d,(hl)
ex af,af'
ld a,d
res 7,d
set 6,d  ;<-------zamieniamy z RES 6,d na SET 6,d żeby na pewno trafił w drugie 16kB (bank 1 RAM)
rlca
rlca
rlca
rlca
xor c
and #0c
xor c
push bc
call lb9b0
di
exx
ex af,af'
ld a,c
pop bc
and #03
res 1,c
res 0,c
or c
jr lb9b1
.lb9b0
push de    ;<----------rejestr DE z adresem kładziony na stos.
.lb9b1
ld c,a
out (c),c
or a
ex af,af'
exx
ei
ret      ;<------------- skok z adresu na stosie.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.10.09, 00:12:21
Działa rewelacyjnie! :)

Teraz by trzeba wyodrębnić z całego ROMu te procedury które rzeczywiście zostały zmodyfikowane i w jednej binarce umieścić powiedzmy pod &8000, aby 16K od &4000 zostawić do dyspozycji na przełączane ekrany czy coś. I zmodyfikować tylko te poprawiane wektory.

W pośpiechu by wypróbować jak działają co niektóre programy na tak zmienionym ekranie przypadkiem nagrałem na dysku z moimi ostatnimi bajziczkami obraz twojego dsk z tym poprawionym poke. I mam teraz żałobę po utraconych pliczkach. :(
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.10.09, 21:03:40
overscan8.bas

i relokacja niecałych 8kb do banku 2.

Teraz wgrywamy plik RAM8-ROM.bin.

ustawiłem też symbol after 0 i zmieściło się na styk.

wywołania z B992 są liczone czy mają iść do dolnej czy górnej części LowRom.

do górnego 8k lecą do ROMu (&2000-3FFF), do dolnego 8k (&0000-&1EEF) lecą do RAMu (&8000-7EEF).

oczywiście BASIC i przerwania korzystają z tego co chcą.

Tablica skoków ASCII i Tablica skoków Firmware Indirection poprawiona na adresy od &8000.

ps. łącze się w bólu po stracie dyskietki. I pasem po d... powinieneś dostać, że nie robisz backupu chociażby zipa całego katalogu.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.10.11, 10:30:03
CLS i CLG działa źle.

zrobiłem wersje 16k w banku 1 gdzie działa copiowanie i shiftcursor.

problem jest taki, że działa to na codzie między 8 a 12 kb LowRom które jest wycięte w wersji 8kB.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.10.11, 14:34:45
Po tym jak wiele widziałem skrolaków i sprajtów latających po szerokich ekranach, nie wierzę żeby nikt wcześniej nie myślał aby przygotować takiego działającego gotowca. A że o tym nie słyszałem mogę tłumaczyć tylko tym o czym mówisz, że tych procedur które korzystają z grafy jest aż tyle i są rozsiane po tylu miejscach że sie odechciewa. I prościej jest napisać np kilobajt kodu który przesuwa po tych giętych ekranach coś ruchomego a przy tym wyższego niż linijka tekstu, niż modyfikować wszystkie odwołania które korzystają ze standardowych ustawień. No cóż gdyby to było łatwiejsze to już wcześniej ktoś by to zmienił.

Powiedz czy musiałeś gdzieś ingerować w same procedury czy tylko zmieniałeś w nich parametry co by dostosować ich działanie do innej szerokości/wysokości ekranu?
Zaczynasz mieć tego dość czy się dobrze bawisz rozkminiając jak to zrobić? :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.10.11, 17:12:25
Zabawa z relokacją jest niebanalna. Trzeba przypilnować które wartości w rejestrach są przyszłymi adresami skoku a które nie.
Wiadomo że wszystkie wywołania prowadzą do romu a nie ramu więc trzeba wyczekać moment gdzie procedury przechodzą przez ram żeby cokolwiek móc zmodyfikować. Znalazłem dwie takie luki. Procedura licząca adresy wejścia do romu, leci przed adresem &b999. Tamtejsze RET nie wraca z procedury tylko jest skokiem do LowRom z policzonego adresu położonego na stosie. Druga luka to procedury &bdcd i &bdd0 zapalające i gaszące kursor. Myk jest taki że one nie używają rejestru DE a Rom skacze do nich akurat trzymając w DE adres przyszłego skoku do rom. Na stosie leży też adres skoku z rom do procedury kursorów. Jak sie napisze procedure modyfikującą ten adres to wtedy wraca do ramu a nie do romu.
Zabawa jest niezła. Ale rozkładu procedur w pamięci nie zmieniam, bo zawsze jakaś inna procedur może w nią wtedy nie trafić. Życia zabraknie na rozkminienie całych 16kB. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.10.25, 23:24:12
działa Shift Copy na 8kb.

Nie działa dobrze przewijanie w WINDOW softowym. źle się zamazuje. i źle działa CLS.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.11.12, 23:08:54
Działa Shift Copy

Działa Window

Działa CLS

Działa pisanie programu. linie są przyjmowane.

dokładnie podzieliłem Rom na adresie 1FE9 (pierwszy rozkaz użwany w LowRom)

Fragmenty Kodu oryginalnego, które na pewno są niepotrzebne wyzerowałem (może być ich więcej) . Wyzerowane też są tablice np KeyUser, tablica klawiszy. Teksty standardowe wyzerowałem również.

ZbyniuR zapraszam do testów.

ps. źle działa CLG.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.12.03, 22:33:15
6381 bajtów rekompilowanego i relokowanego LowRom

do wyboru rozdzielczości textu w mode 2

62x33 źle działa CLS ze względu na przekroczenie rozdzielczości pionowej 256 (a jest 264)
64x32 źle działa przewijanie ze względu na brak reszty z 2048-(64*32)=0
66x31 śmiesznie działa mode 0 ze względu na nie podzielność bez reszty liczby 66 na 4. (zawija się ostatni znak)
68x30 pierwszy pełnowartościowy tryb
80x25
84x24
96x21

tryby wybiera się przez run (lub goto) i liczba znaków w wierszu.

wrzuciłem materiał na Youtuba jak to działa... https://youtu.be/_Msqr9RCSRE (do obejrzenia jak sie załaduje)

konkurs, w którym można wygrać nowy tryb.

Pytanie brzmi jak zrobić nowy tryb?  :D ;D :o 8) :P

Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.12.11, 23:37:12
Kolejny przełom, działa grafika!

11 trybów w tym 5 nowych obsługujących poprawnie grafikę.

Załączam plik ASM można sobie popatrzeć co i gdzie się pozmieniało.

DSK można sobie używać. i JPG można sobie pooglądać.

Można by teraz zacząć optymalizować prędkość. Ale mi się już nie chce.  ;D
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2021.12.12, 11:14:14
Na youtubie prezentacja  8) https://youtu.be/K_3XLb6vaf4
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2021.12.27, 12:32:24
Czy próbowałeś sie już reklamować na zagranicznym forum albo amstradowej grupie na FB?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2022.01.01, 01:01:24
nie. nie mam czasu. :o 8) rozkminiałem AY. efekty samplowe są rachityczne.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2022.01.05, 12:53:26
A w ilu bitach próbujesz sample?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2022.01.07, 11:10:31
Docelowo chciałem na niepełnych 6bitach. mieszając wszystkie 3 kanały. Ale utknąłem na CZYSTYM odtworzeniu fali prostokątnej niskich częstotliwości. Mam jakieś artefakty i harmoniczne. Nie wiem też, który emulator robi najlepszego AY.

;*********************** SAMPLER ********************
org #a050

di

ld b,#f4
out (c),e

ld bc,#f6c0
out (c),c

ld bc,#f600
out (c),c

xor a
DL equ $+1
ld hl,23000 ; dlugosc sampla
ld b,#f4
exx
push hl
start equ $+1
ld hl, #2000 ; start
ld a,(hl)
push bc
ld bc,#f680
push de
wait_time equ $+1
ld e,10 ; opoznienie

exx

nop
nop
nop
.petla

out (c),a  ;----- Dana -------
exx ;ld bc,#f680

out (c),c
;--------------------
ld b,e
.wait2
djnz wait2
;--------------------
ld b,#f6
ld a,(hl)
inc hl
exx  ;ld b,#f4

dec l

jp NZ,petla-3
dec h

jp NZ,petla

ld bc,#f600
out (c),c

exx
pop de
pop bc
pop hl
exx

ret
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2022.01.07, 12:10:24
Z tego co wiem to sampla w AY odtwarza się manipulując rejestrem głośności który jest 4bitowy (starsze bity wysłane tam są ignorowane). W CPC dzięki temu że ma wyjście stereo da sie na upartego 5bit puścić w ten sposób że ze sampla 8bit starsze 4 puszcza sie jednocześnie w kanale lewym i prawym, a 5bit (ten nieco młodszy) puszcza sie jako 1 najmłodszy bit w kanale środkowym. Dzięki temu że środkowy kanał jest słyszalny w obu głośnikach ale o połowę ciszej niż kanały lewy+prawy puszczone razem. Czyli sporo roboty z tym 5ym bitem a niewielka różnica w jakości dźwięku. Większy wpływ na jakość ma częstotliwość próbkowania, choć tą nie można za bardzo szastać bo mamy mało pamięci. 4bitowy sampel upchniesz po 2ie wartości w bajcie, a 5go tak łatwo nie wciśniesz, chyba że trzymasz próbkę jako 8bit. Choć skoro już mamy taką próbkę to można to puścić przez port drukarki. Jest 7bitowy ale 8bit puszczamy na pinie sygnału strobe. Tylko nie jestem pewien czy to bit najstarszy czy najmłodszy. Z jednej strony normalnie te 7bit są młodsze, ale jak źle zesynchronizujesz ten starszy 8bit to wyjdzie kicha. A z drugiej strony jeśli w tych 7bit puścisz starsze bity to trzeba każdą wartość przesuwać, co zużywa moc procka, ale ewentualne nieprecyzyjne zesynchronizowanie 8go tym razem najmłodszego bitu nie będzie aż tak zniekształcało dźwięku. Takie puszczanie przez port drukarki wymaga podłączonego Digiblaster-a (to taki Covox do CPC który sobie bierze ten 8bit ze strobe). Z emulatorów na pewno dobrze go emuluje JavaCPC, jego autor lubił sie tym bawić, co do pozostałych to nie mam pojęcia czy jakiś ma taką opcję. Bo jeśli chodzi o emulacje AY-ka to nie sądzę aby był skomplikowany i pewnie każdy emulator robi to równie dobrze.

Z obu tych metod tzn tej 5bit na AY-ku oraz tej 8bit na drukarce korzystają programy DigiTracker oraz Protracker. Drugim sie mało bawiłem i nie pamiętam, ale 1szy ma dodany programik do konwertowania Amigowych modułków, byle sie mieściły w 64K ramdysku.

Skąd bierzesz sampelki?
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2022.01.08, 00:42:53
sample nagrywam z polskiego radia. W epoce zrobiłem sobie przetwornik ADC i puszczłałem 16kHz z 80kb na zrobionym covoxie

teraz czas na wojne z AY, do którego wtedy nie miałem żadnej dokumentacji.
do mieszania kanałów tylko nadaje się mono. tam wszystkie kanały są równouprawnione. problem jest też w błyskawicznym załadowaniu wszystkich trzech kanałów.

no i nie da sie na emulatorach odtworzyć środkowego położenia napięcia przy 62,5kHz, bo one dają 44,1kHz
 jako wynik emulacji.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2022.02.10, 16:04:28
Ale przypomniał mi się trick !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Nie do powtórzenia na żadnym emulatorze.

Ze względu na to, że w latach 90 nie miałem żadnej dokumentacji poza bajtkiem, to moje kombinacje z kopiowaniem danych z PC do Amstrada były trochę kuriozalne.
Mamy rok 94... więc jak kopiowałem teksty i pliki z PC do Basica? mam stacje 3" podłączoną do PC. sformatowaną w FAT12.

Na amstradzie włączałem CPM+ potem przez DISCKIT3 ładowałem pierwszą część NIBY KOPII do RAMu .

NASTĘPNIE WYŁĄCZAŁEM NA UŁAMEK SEKUNDY AMSTARDA. :o  W pamięci DRAM przeżywała zawartość obrazu CPM.

W pamięci banku 4 zostawała zawartość pierwszych 16kb CPM+ z wczytanym ładnym kawałkiem dyskietki.

Czułem się jak HAKER.  :D

Oczywiście potem się okazało, że zamiast WYŁĄCZANIA Amstrada wystarczy CTRL+SHIFT+ECS.
Ale to dochodzenie do perfekcji na OFF/ON poniżej 0.1sekundy było ekscytujące. 8)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2023.01.18, 01:03:42
Ale z ciebie kombinator. :)

Pamiętam jaki byłem zdziwiony gdy kiedyś zresetowałem po bawieniu sie Art Studiem, a potem bawiłem sie programem do przerzucania ekranów w ramdysku i zdziwiłem sie że w jednym z bloków jest ostatni obrazek jaki miałem w Art Studiu.

Była też taka procedura wyświetlająca w rogu ekranu godzinę, umieszczona w obszarze między danymi systemowymi a ekranem. I dłubałem w Basicu który ją tam wrzucał, ale wpierw sprawdzał PEEK czy już tam jest, jeśli tak to od razu aktywował CALL. I można było zresetować kompa i szybko uruchomić to z dysku, to czas różnił sie tylko o kilka sekund, potrzebnych na wpisanie nazwy i uruchomienie. Bo ten obszar sie nie czyści po resecie i miał tam godzinę jakby na pauzie. Można było spędzić kilka godzin bawiąc sie Bejziczkami, i jeśli po każdym resecie to włączałeś to ustawiona na początku godzina po całym dniu zabawy i wielokrotnych resetach różniła sie tylko o 2-3 minutki. :)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2023.03.19, 13:41:02
Obsługa w Amsdos dysków 360kb SS80 zgodnie z formatowaniem jakie robi emulator WinAPE 2.0beta

jednostka alokacji 2kB

5 |DIR,"a:"
10 POKE &A8A8,255
20 POKE &A892,4
30 POKE &A893,15
40 |DIR,"a:"

dla stacji B

5 |DIR,"b:"
10 POKE &A8E8,255
20 POKE &A8D2,4
30 POKE &A8D3,15
40  |DIR,"b:"
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2023.03.20, 07:44:15
Mi od dawna chodziło po głowie tzn odkąd przeczytałem ponownie po latach tekst w Bajtku 4/89 s22, o tym jakie POKE wpisać by czytać na CPC dyski 208K, gdzie jest wyjaśnione który POKE co robi, by zrobić taką dyskietkę. Z taką wiedzą można ustawić zerową ścieżkę na standardową, a na niej wiadomo 2K katalog i 2K na plik w którym może być jakieś menu czy GUI ale przede wszystkim te naście POKE by zerową ścieżkę ustawić jako zarezerwowaną, a resztę ścieżek najlepiej w stacji 3.5' na 820K (-4K na katalog na ścieżce 1). Ścieżki od 1 do 82 po 5K na ścieżce dla każdej głowicy. Do użytku dla każdego bez potrzeby posiadania zamiennika Amsdosa, albo startowania sterownika z innej dyskietki niż ta z której korzystamy. A katalog na zerowej ścieżce można użyć do fikuśnego obrazka z ASCII-ART wyświetlającego sie po wpisaniu CAT, a drugą stronę zerowej ścieżki na programik kopiujący pliki (5K powinno starczyć), między normalnymi 178K (+3 187K), tymi dziwnymi świeżo wymyślonymi 816K, Paradosami 796K, popularnym w Niemczech Varadosem 704K, i oczywiście MS-DOS 720K. Każdy z tych formatów to tylko naście POKE, a kopier to tylko procedura czytaj/zapisz sektor. Takie rzeczy też już były w Bajtku. Plus skopiuj sam siebie na nową dyskietkę 816K. Czyli kopier pod ręką na niemal każdej dyskietce jaką używasz. Rzecz jest do zrobienia, tylko żeby mi sie chciało równie mocno jak mi sie nie chce. ;)
A bez tego jak nie masz Paradosa to max wyciśniesz 256K na stronie 3.5', opcją overdrive czy jak to sie tam nazywało w Discology, to nagrywanie na więcej ścieżek na standardowym formacie DATA.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2023.03.20, 14:52:48
No włąśnie inaczej jak piszesz. WinAPE uważa, że sformatowana Single Side 80 Tracks to jednostka alokacji 2kB a reszta to samo. Dlatego Amsdos pokazuje 358kB a Winape w oknie EDIT Disk widzi ładnie te pliki i jest pełna obsługa DSK w dwie strony.

Kopia z https://www.cpcwiki.eu/imgs/e/e1/The_Amstrad_CPC_Firmware_Guide.txt
     6128  ł 464   ł Size ł Comments on the memory locations
     ÄÄÄÄÄÄĹÄÄÄÄÄÄÄĹÄÄÄÄÄÄĹÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     &A890 ł &A890 ł &19  ł Drive A Extended Disc Parameter Block
           ł       ł      ł   (XDPB):
     &A890 ł &A890 ł 2    ł number of 128 byte records per track
     &A892 ł &A892 ł 1    ł log2(Block size)-7 (&03=1024 bytes; &04=2048 bytes)
     &A893 ł &A893 ł 1    ł (Block size)/128-1 (&07=1024 bytes; &0F=2048 bytes)
     &A894 ł &A894 ł 1    ł (Block size)/1024 (if total of blocks<256, else /2048)-1
     &A895 ł &A895 ł 2    ł number of blocks per disc side (excluding reserved tracks)
     &A897 ł &A897 ł 2    ł number of (directory entries)-1
     &A899 ł &A899 ł 2    ł bit signiflcant value of number of blocks for directory (&0080=1; &00C0=2)
     &A89B ł &A89B ł 2    ł number of bits in checksum =((&A894)+ 1)/4
     &A89D ł &A89D ł 2    ł number of reserved tracks (&00=Data; &01=IBM; &02=System)
     &A89F ł &A89F ł 1    ł number of first sector (&01=IBM; &41=System; &C1=Data)
     &A8A0 ł &A8A0 ł 1    ł number of sectors per track (Data=9; System=9; IBM=8)
     &A8A1 ł &A8Al ł 1    ł gap length (Read/Write)
     &A8A2 ł &A8A2 ł 1    ł gap length (Format)
     &A8A3 ł &A8A3 ł 1    ł format filler byte (&E5)
     &A8A4 ł &A8A4 ł 1    ł log2(sector size)-7 (&02=512; &03=1024)
     &A8A5 ł &A8A5 ł 1    ł records per sector
     &A8A6 ł &A8A6 ł 1    ł current track (not for use)
     &A8A7 ł &A8A7 ł 1    ł 0=not aligned (not for use)
     &A8A8 ł &A8A8 ł 1    ł Auto select flag (&00=Auto select; &FF= don't alter)
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: ZbyniuR w 2023.03.20, 18:44:04
Ależ ja nic nie pisałem o tym co napisałeś, tylko na marginesie wspomniałem o moich rozkminach co można zrobić z taką wiedzą.

Nie napisałeś nic o tym jakim programem to formatowałeś, ani jakiego ROMa masz w tym emulatorze, a to drugie pewnie różni sie od tego co masz w realu, stąd inne działanie obu konfigów.
Nie bardzo też rozumiem po co ci taki format. CPC to nie MSX by korzystał ze stacji 80ścieżek i jedna głowica.
Tytuł: Odp: Tricki na Amstradzie
Wiadomość wysłana przez: McArti0 w 2023.03.20, 22:55:36
Wszystko standard. chce mieć duże DSK do zdjęć BMP z PCta.które poleci na goteku i prawdziwym CPC bez wielkich kombinacji.