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 `[email protected]|]}^{[\$# 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