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

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #45 dnia: 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. :)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Dr Piotr

  • ***
  • Wiadomości: 196
Odp: Tricki na Amstradzie
« Odpowiedź #46 dnia: 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 :)

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #47 dnia: 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ć. ;)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Dr Piotr

  • ***
  • Wiadomości: 196
Odp: Tricki na Amstradzie
« Odpowiedź #48 dnia: 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.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #49 dnia: 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. ;)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #50 dnia: 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. :)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #51 dnia: 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
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #52 dnia: 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
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #53 dnia: 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. :)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Tricki na Amstradzie
« Odpowiedź #54 dnia: 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źć?
AY Music, ULA plus.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #55 dnia: 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
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Tricki na Amstradzie
« Odpowiedź #56 dnia: 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
AY Music, ULA plus.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #57 dnia: 2019.05.06, 21:46:27 »
Odświeżam wątek bo jak potrzebuję to za długo szukam. :D
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #58 dnia: 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

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tricki na Amstradzie
« Odpowiedź #59 dnia: 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ę ;)