Autor Wątek: Moje STARTy / menu dyskowe.  (Przeczytany 2651 razy)

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Moje STARTy / menu dyskowe.
« dnia: 2018.08.10, 19:10:06 »
Już kilka razy obiecywałem, że wyślę moje starty (menu dyskowe). W końcu postanowiłem wysyłać je po jednym co jakiś czas, w miarę poprawiania. Jest ich kilkanaście, mając na początku kilka/kilkanaście dyskietek miałem chyba  ambicję by na każdej był inny ;) Niektóre mogą się spodobać, ale nie wiem czy komuś się przydadzą - na ogół nie są automatyczne. Czyli tytuły trzeba wpisać.
Powstały głównie na na stację OPUS Discovery, więc przewidują 10-znakowe nazwy, powstały dla standardowego napędu (178K), więc jest miejsce tylko na cztery lub pięć tytułów gier. Można to oczywiście zmienić: zmienić długość ładowanej nazwy i ilość tytułów - trzeba by zmienić rozmiary tablic, parametry PLOT, DRAW i pętle. Zmiana długości tablic nie jest konieczna, jest tylko zabiegiem estetycznym. Ja na początku po przejściu z Opusa na FDD3000 dopisywałem "TO 8" - LOAD a$(TO 8 ), ale niepotrzebnie - TOS ignoruje spacje za nazwą. Wpisując do startu prawdziwe nazwy z dyskietki nie spowodujemy błędu, o ile nazwy są bez rozszerzeń. Z rozszerzeniami mogą się nie zmieścić.
W części startów, żeby zmienić rozmiary okienka będzie potrzebna ingerencja w asembler. Jak będzie potrzeba, podam pod jakim adresem dokonać zmian.

Starty nie są automatyczne, bo tak jest szybciej, odczyt z dysku zabiera dodatkowy czas. Poza tym na początku założenie było takie, że raz nagrane na dysk gry zostną tam już na zawsze. Trzecim argumentem jest to, że można wpisać tylko część nazw i w wybranej kolejności.
Miejsca na dysku było mało, stąd kompresor obrazków, potem filecompressor, stąd też optymalizacja startów pod względem długości: liczby są zapisywane jako VAL "n", lub CODE "x", zero jako NOT PI, itd. W Opusie jednostka alokacji=sektor, a sektor ma 256 bajtów. Często udało się zmieścić start w 3 sektorach, a parę razy nawet w dwóch.
Ponieważ od czasów któregoś-tam-Apple jestem fanatykiem okienek, w każdym możliwym miejscu je stosuję :D
Napisałem nawet kiedyś "Windows Designer" - programik pod Beta Basic, który po podaniu rozmiaru i treści sam generował linie BASICa rysujące okienka.
Dlatego każdy mój start to okienko plus coś ;)
Teraz pewnie dopisałbym wybór klawiszami 1-4.

Starty będę prezentował w kolejności w miarę chronologicznej, widać w nich rosnący udział asemblera :D
Obsługa joystickiem Kempston (góra/dół/fire) lub klawiszami kursora (na gumiaku również same "5" i "6" bez shifta) i ENTER/"0". Obsługa joystickiem jest, bo Opus ma wbudowany interfejs Kempston ;)
Wysyłam je w trybie taśmowym, żeby wszyscy mogli obejrzeć bez komunikatu o błędzie. Przed nagraniem na dysk należy dopisać rozszerzenie dyskowe po LOAD (na ogół w przedostatniej linii). Dla FDD3000 ma być: "LOAD *", dla Opusa: "LOAD *1;".
Nagrywać na dysk SAVE *"START" LINE 1 dla FDD3000, lub SAVE *1;"RUN" LINE 1 dla Opusa.
W czasach gdy powstawały mało kto je widział, bo stację dysków miałem tylko ja, potem doszedł Bill Gilbert, następnie Kicia, itd. Oczywiście chwaliłem się stałym bywalcom giełdy ;) Mogło to mieć wpływ na wygląd starta, którego napisał Bzyk (i zdaje się jest dołączony do TOS A.4).
« Ostatnia zmiana: 2018.08.10, 19:23:19 wysłana przez Phonex »

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #1 dnia: 2018.08.10, 19:12:17 »
1. Gry s1

Cztery gry. Długość 752 bajty.
W asemblerze jest tu tylko odczyt klawiszy/joysticka i efekt. Cała reszta, łącznie z przesuwaniem paska, jest w BASICu. Oglądając teraz program w asemblerze zauważyłem, że program sprawdza więcej klawiszy: również Q, A, i M. Możliwe, że był przed tym jakiś inny start (bez efektu), a potem został zastąpiony. Możliwe że nie i od razu chciałem żeby wygląd był bardziej atrakcyjny, godny nowej stacji dysków ;)
Jeżeli chodzi o efekt, to tylko pomysł jest mój: przesuwać w lewo, potem w prawo. Sama procedura przesuwania nie jest moja, pochodzi prawdopodobnie z programu "Supercode" - skroll poziomy o 1 pixel.
Wtedy nic na ten temat nie wiedziałem, teraz prawdopodobnie dorobiłbym synchronizację z ramką. Spróbowałem - wygląda ładniej (drugi plik).
Ponieważ prawie cały jest w BASICu, nie ma problemu z przerobieniem np. na większą ilość gier. Z asemblera wychodzi jak naciśnie się istotny klawisz, może zwrócić trzy wartości: 1-naciśniety ENTER/fire, 0-w górę, 2-w dół. Widać że miałem wtedy szacunek dla programów w Asemblerze, bo potem z tych liczb obliczam przesunięcie d=2*(USR adr-1), zamiast zmienić wartości wyjściowe na 2, 0, 4 i uprościć obliczenie na d=USR adr-2.
« Ostatnia zmiana: 2018.08.10, 19:23:35 wysłana przez Phonex »

ZX Freeq

  • Forumowicz
  • *
  • Wiadomości: 1503
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #2 dnia: 2018.08.11, 19:40:14 »
Miejsca na dysku było mało, stąd kompresor obrazków, potem filecompressor, stąd też optymalizacja startów pod względem długości:

Normalka. Jak przenosiłem gry z taśm na FDD3000 też tak robiłem. A jak wmontowałem napęd 3.5 cala, nawyk i tak pozostał :)
Dzięki za starty, fajnie jest zobaczyć jak to robili inni ;)
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega|QL+QIDE|JS128|Timex 2048+2040 Printer|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #3 dnia: 2018.08.17, 09:22:20 »
2. Gry s5

Cztery gry. Długość 759 bajtów.
W asemblerze jest tu... nic. Może to był pierwszy start, pomimo nazwy?
Inna jest obsługa: dowolnym klawiszem zmiana na następną grę, ENTER - wybór. Nie ma możliwości cofania, trzeba przelecieć całą listę. Uruchomienie też wyjątkowo jest od linii 100 (SAVE "start" LINE 100), żeby kluczowa dla szybkości działania linia (linia 4) była blisko początku programu.
Zmiana kolorów napisu zrobiona jest jedną instrukcją PRINT z wpisanymi kodami kontrolnymi pozycji zamiast PRINT AT, tylko w celu oszczędności miejsca. Szybkości działania to nie zmienia. Dla wiersza 13 i 14 nie da się tak zrobić, bo powoduje błąd. Za to spowalniają wykonanie te wszystkie VAL "nn", więc w kluczowych miejscach ich nie ma.
Efekt powiększonego PRINTa jest zrobiony dzięki sztuczce - przestawienie adresu wydruku dla instrukcji LPRINT na ekran ;) A że linie na ekranie nie są kolejno - napis wychodzi rozstrzelony w pionie. Wystarczy teraz wykonać to 8 razy, z kolejnymi liniami.
Najłatwiej tu powiększyć ilość gier, wystarczy w ostatniej linii dopisać nowe, nie ma potrzeby zmieniania żadnych innych parametrów.

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #4 dnia: 2018.08.24, 10:56:02 »
3. Gry s2

Pięć gier. 699 bajtów.
W końcu pasek wyboru jest w asemblerze!
Działa szybko, jest krótszy, a po wyjściu do BASICa zwraca wybrany numer, bez konieczności dzielenia czy dodawania :) Cały łącznie z efektem jest napisany przeze mnie. I chyba już dowiedziałem się że część pamięci jest wolna, bo procedura od efektu jest przerzucana pod 50000. Albo pisałem pod ZEUSem.
Jak zwykle kod jest w REM, ale tu są dwie linie z kodem: w pierwszej jest odczyt klawiszy/joysticka i wyświetlanie paska, a w drugiej efekt. Dzięki temu łatwo zmienić efekt.
Oczywiście obecność kodu w REM, przez to że są niedrukowalne znaki, powoduje zawieszanie BASICa 128. Ponieważ nie miałem ZX 128K, widzę teraz, że dopiero w jednym z ostatnich startów - przypadkiem - wpadłem na rozwiązanie tego problemu. Można na 128 używać, ale edytować - tylko w BASIC 48.
Jeżeli nawet już wiedziałem o szybkiej i wolnej pamięci, to nie do końca: w linii 10 jest CLEAR 29000, więc obszar stosu znajduje się jednak w wolnej pamięci, a w programie jest kilka CALLi. Można łatwo zobaczyć wpływ tego na szybkość zmieniając na CLEAR 35000. Także na stodwudziestceósemce efekt chodzi szybciej.
Ponieważ nie dało się skrócić poniżej 512 bajtów (2 sektory na Opusie), nie było potrzeby optymalizacji długości. Wszystkie liczby są więc wpisane  normalnie, bez VAL.
Zdaje się, że byłem optymistą jeśli chodzi o powiększanie liczby gier. Tu też efekt obejmuje konkretną liczbę wierszy, dla innej liczby trzeba będzie dobierać opóźnienie, bo nie jest zsynchronizowany z ramką.
Przy okazji przyjrzałem się efektowi i doszedłem do wniosku że przypadkiem wyszedł mi multicolor :D

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #5 dnia: 2018.08.31, 12:18:52 »
4. Gry s3

Cztery gry. Długość 763 bajty.
Ten start jest rozwinięciem pomysłu z "Gry s1". Skoro już jest ładna procedura skrolująca co pixel, to może ją wykorzystać w pełni ;)
Okienko nie jest zamknięte z boków (tak samo jak w starcie s1), bo ramka wyjechałaby razem z tekstem. Jakbym sam pisał procedurę skrolującą, to bym napisał tak, żeby nie wysuwała ramki, ale wtedy jeszcze nie umiałem. Znowu jest procedura z "Supercode". A że to bliźniacza konstrukcja, to też reaguje na klawisze "Q", "A", "M". Inne jest pykanie paska, nie takie głuche jak w start s1, tylko typowo "klawiaturowe". I takie już będzie we wszystkich następnych.
Ciekawa jest konstrukcja w lini 9000, PLOT NOT PI, CODE"@~x/"(i). Indeksowanie zmiennej jest oczywiste, ale podanego na żywca łańcucha? Już zapomniałem że tak można. Musiałem się ucieszyć kiedy to pisałem, bo pewnie dzięki temu zmieściłem się poniżej 768 bajtów ;) A w linii 20 siedem spacji to miejsce po usuniętej przez kopiera Turbo Phantom instrukcji FORMAT "j";SGN PI - włączającej interfejs joysticka w Opusie.
Oczywiście uruchamianie tych wszystkich startów na komputerze (lub emulatorze) bez interfejsu Kempston spowoduje pewnie że pasek/kursor będzie szalał i gry "same się będą wybierały". Chcąc używać w takim przypadku, trzeba by zamienić IN A,(31) na np. LD A,31 (w tym starcie: POKE 23802,62).
Ciężko będzie zwiększyć ilość gier, bo chociaż tak samo jak w start s1, BASIC nie jest problemem, to procedura przesuwa tylko środkową tercję ekranu.

Zmniejszyłem dołączany obrazek, teraz powinien się ruszać bez konieczności powiększania (jak poprzednie).

ZbyniuR

  • Forumowicz
  • *
  • Wiadomości: 2297
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #6 dnia: 2018.08.31, 13:10:36 »
Pierwszy raz widzę tekst przewijany od lewej do prawej. :)
TREK is better than WARS.. ;)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 3815
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #7 dnia: 2018.08.31, 16:03:55 »
Fajne te STARTy ;)

trojacek

  • Forumowicz
  • *
  • Wiadomości: 4307
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #8 dnia: 2018.08.31, 17:32:29 »
Fiu, fiu, jakie bajery :)
Z innych tego typu atrakcji widziałem starta z dźwiękami na AY, które towarzyszyły każdemu ruchowi kursora.

A moje starty były bez żadnych tricków, tylko maksymalnie użyteczne. Taki PRL-owski, szary smutek ;)

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #9 dnia: 2018.09.01, 21:37:28 »
Nie pisałem scrolli, za to pisałem starty ;)

mariansss

  • Forumowicz
  • *
  • Wiadomości: 3783
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #10 dnia: 2018.09.01, 22:11:09 »
Pamiętam, ze był taki zestaw procedur w skompilowanych już do kodu wykonawczego.
Min. była tam procedura przesuwania ekranu w prawo.
Podawało się parametry przekazywane z BASIC-a i to działało.
Program zajmował niezbyt dużo i był relokowalny.
Można było go nawet wstawić w lini za REM.

Ja mając FDD 3000 pisałem minimalistyczne starty.
Ot, żeby mieściły się w jednej jednostce alokacji dyskietki.
"... są dwie szkoły, Falenicka i Otwocka."

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #11 dnia: 2018.09.02, 14:55:52 »
To i moje się mieszczą w jednej jednostce alokacji FDD3000 :)
Zawsze najważniejsza była mała długość. Tylko z raz się nie udało (Gry s7).
Większość jest nawet poniżej 768 - jednostka alokacji na Opusie jest 4 razy mniejsza.

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #12 dnia: 2018.09.07, 12:29:30 »
5. Gry 10

5 gier. 757 bajtów.
Bez efektów specjalnych, za to powiększony.
Sposób na wyświetlanie powiększonych napisów jest bardzo prosty: procedurka w asemblerze kopiuje generator znaków w dwa obszary - w jednym podwojone górne połówki znaków, w drugim podwojone dolne połówki. Teraz w BASICu trzeba zrobić dwa razy PRINT tego samego w kolejnych wierszach, raz z pierwszym generatorem, raz z drugim. Sposób prosty, choć trochę niewygodny ;)
W związku z powiększeniem, liczba zwracana przez asembler zmienia się co 3. Widać że nie miałem pojęcia jak w asemblerze podzielić przez 3 i zepchnąłem ten problem do BASICa ;)
Oszczędzając jeden bajt dzielę wynik nie przez INT PI, a przez PI - interpreter zaokrągla sobie sam. W zasadzie trzeba by przed dzieleniem najpierw odjąć jeden, bo pozycje to: 4, 7, 10, itd, ale zaokrąglanie radzi sobie i z tym.
Tu definitywnie nie da się zwiększyć ilości gier, bo nie ma już miejsca na ekranie, nawet jakby się jakąś sztuczką wykorzystało dwie dolne linie (sztuczką - bo nie da się tam rysować).

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #13 dnia: 2018.09.14, 13:57:06 »
6. Gry 03

8 gier(!) 683 bajty.
Tyle programów weszło, bo część z nich to muzyczki wyciągnięte z gier. Moje ZERO MUSIC miało mieć kiedyś częściowo inną listę, tylko ktoś mnie ubiegł.
To jest start s5 z innym efektem. Nie podobał mi się tamten, bo był za wolny, więc postanowiłem przepisać go w asemblerze. Wyszło nie całkiem to samo, ale byłem zadowolony. Fajny efekt z multicolorem tylko w 63 bajtach :D I to pomimo tego że - jak teraz widzę - w wolnej pamięci, włączone przerwania i w ogóle bez żadnej optymalizacji.
Mam jeszcze jeden start z podobnym efektem, ale tylko dwoma kolorami zamiast tęczy: Gry 06. Nie będę go wysyłał, wystarczy wpisać POKE 23812,79 i POKE 23798,0

Ten efekt jest źle wyświetlany przez ZX Spin v0.666 - zła szybkość. Użyłem ZX Spin 0.7
« Ostatnia zmiana: 2018.09.14, 14:09:49 wysłana przez Phonex »

Phonex

  • Forumowicz
  • *
  • Wiadomości: 1043
  • Miejsce pobytu:
    Warszawa
Odp: Moje STARTy / menu dyskowe.
« Odpowiedź #14 dnia: 2018.09.21, 10:00:10 »
7. Gry 01

5 gier. 1007 bajtów.
Tym razem pomniejszone literki w minimalistycznym jednokolorowym okienku.
Ale BASIC jakiś taki krótki,... i nie ma CLS,... Oczywiście już nie pamiętam jak to jest napisane. Wszystko się wyjaśnia, jak się zajrzy do kodu - okienko nie jest rysowane, to jest skompresowany obrazek :o Wygląda na mój Fast Compressor 8) Ale żeby wsadzić skompresowany obrazek do REMa... Miałem kiedyś dużo entuzjazmu. Dodatkowe korzyści to bardzo szybkie wyświetlenie tego starta i możliwość wpisania dłuższych tytułów niż są na dysku.
Narysowany jest chyba Artistem. Po skompresowaniu długość to tylko 682 bajty. Kompresor się spisał, do 1024 zostało w zapasie tylko 17 bajtów.
Do tego standardowy moduł odczytu klawiszy/joysticka i wyświetlania paska, tym razem w kolejnych wierszach, a nie  w co drugim. Więc teoretycznie powinno się zmieścić 21 gier. Ping Pong w linii DATA nie jest wpisany wielkimi literami, bo jak już wspominałem te programy powstały na Opusa, a tam są rozróżniane małe i wielkie litery.
Ciekawostka: program nie działa bez rozkazu RESTORE 999. Nawet samo RESTORE bez argumentu powoduje błąd. Widocznie w tej długiej linii z obrazkiem interpreter widzi rozkaz DATA.
A jak wpisać linię dłuższą niż ekran? Ręcznie nie będzie łatwo. Pewnie w "Supercode" jest odpowiedni programik, ja jednak mam własny: nazywa się REMER, ma 76 bajtów i ładuje się do bufora drukarki. Tworzy na początku programu linię 1 REM #####... o żądanej długości. Obsługa: PRINT USR 23300,długość.