Autor Wątek: Tricki na Amstradzie  (Przeczytany 31279 razy)

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #30 dnia: 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. :)
Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #31 dnia: 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ę. ;)
Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #32 dnia: 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. ;)
« Ostatnia zmiana: 2013.12.16, 05:05:19 wysłana przez ZbyniuR »
Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #33 dnia: 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
Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #34 dnia: 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


Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #35 dnia: 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. :)
Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #36 dnia: 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

« Ostatnia zmiana: 2014.09.12, 20:43:15 wysłana przez ZbyniuR »
Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #37 dnia: 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

Coś być musi do cholery za zakrętem.

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #38 dnia: 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.

« Ostatnia zmiana: 2015.02.28, 18:31:13 wysłana przez ZbyniuR »
Coś być musi do cholery za zakrętem.

pear

  • Administrator
  • *****
  • Wiadomości: 5231
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Tricki na Amstradzie
« Odpowiedź #39 dnia: 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.
ZX/Enterprise/CPC/Robotron/C128D

ZbyniuR

  • *****
  • Wiadomości: 2943
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #40 dnia: 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.

Coś być musi do cholery za zakrętem.

pear

  • Administrator
  • *****
  • Wiadomości: 5231
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Tricki na Amstradzie
« Odpowiedź #41 dnia: 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.
ZX/Enterprise/CPC/Robotron/C128D

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4205
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Tricki na Amstradzie
« Odpowiedź #42 dnia: 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ą.

pear

  • Administrator
  • *****
  • Wiadomości: 5231
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Tricki na Amstradzie
« Odpowiedź #43 dnia: 2015.03.01, 08:09:02 »
Ale tylko liczby, czy zmienne też ?
ZX/Enterprise/CPC/Robotron/C128D

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4205
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Tricki na Amstradzie
« Odpowiedź #44 dnia: 2015.03.01, 13:52:05 »
To się dotyczy również zmiennych.