forum speccy.pl
Komputery z Z80 => AMSTRAD => Wątek zaczęty przez: McArti0 w 2025.04.02, 11:01:10
-
Zagadka 1 :o
Jak pokazać 5 odcieni szarości na ekranie CPC.
-
Chyba najprościej to podłączyć czarno-biały monitor lub ustawić minimum nasycenia kolorów w barwnym jeśli jest taka możliwość. ;)
Wtedy będzie nawet więcej niż 5 odcieni szarości.
Chyba że chodzi o dithering z użyciem czarnych i białych pikseli np w MODE 2 dla lepszego efektu.
-
Ani CTM640 ani CTM644 nie ma gałki nasycenia kolorów a GT64/65 są zielone. ::)
-
Zawsze można monitor/TV B&W połączyć poprzez moduł MP1/2/3, np takie moduły w wersji francuskiej mają złącza Euro/Scart.
Można też na tradycyjnym kolorowym monitorze zewrzeć sygnały RGB i będzie czarno-biały obraz z odcieniami szarości.
-
Można też olejną pociągnąć szkło monitora.
Skupmy się na ditheringu. 8)
-
To akurat proste, układamy piksele na przemian biały z czarnym co 1, 2 lub 3 itd w poziomie i pionie i z pewnej odległości zobaczymy odcień w zależności od proporcji jednych do drugich tak w uproszczeniu.
W ten sposób można też mieszać inne kolory by uzyskać większą paletę barw.
Taką techniką posługuje się wiele różnych gier gdzie można dostrzec barwy niedostępne w paletach.
Najlepiej to wygląda przy większej rozdzielczości i bardziej rozjechanej ostrości monitora lub z pewnej odległości podczas oglądania.
Pytanie nie było zbyt precyzyjne i można to zrobić na klika sposobów które wcześniej opisałem.
Czy były przewidziane jakieś nagrody za rozwiązanie zagadki ? 😉
-
Liść laurowy .... do herbaty :P
Ps. Narazie mamy test na epilepsje zamiast rozwiązania.
-
Szału nie ma ale dobre i to. ;D
Epilepsja groziłaby gdyby to miało mrygać, a tutaj jest statycznie.
No w sumie można by też chyba zamigać tylko bardzo szybko nakładając czarny na biały ale to już jest niebezpieczne dla zdrowia.
-
Rozumiem że biały i czarny też sie liczą jako odcienie szarego bo inaczej to nie wiem.
Można mrugadłem, wtedy fiolet i zieleń powinny sie zlewać w szarość, a mają zbliżoną jasność więc mniej trzepią po oczach niż bardziej kontrasowe szary z bielą lub czernią. Raz mieszamy ze sobą ich ciemne a raz ich jasne wersje uzyskując szarości o jasności 25% i 75%. Nie mam prawdziwego kineskopu pod ręką więc nie jestem pewien czy lepiej mrugać 1,1 czy 2,2.
10 SPEED INK 1,1:BORDER 0:INK 0,4,9:INK 1,26:INK 2,17,22:INK 3,13:PEN 2:PAPER 3:?" MAMY CIE! "
Drugi sposób to siateczka pikseli którą uzyskujemy PRINT STRING$(20,207) można próbować te fiolety i zielenie to tylko w MODE 0, bo potrzebujemy na nie w palecie 4 kolory plus biały szary i czarny. Albo w MODE 1 wykorzystamy tylko te 3 kolory. Im bardziej rozmyty obraz tym lepiej np przez oryginalny Amstradowy modulator. :)
10 MODE 1:BORDER 0:INK 0,0:INK 1,26:INK 2,13:FOR a=0 TO 2:FOR b=2 TO 0 STEP-1:PEN a:PAPER b:?STRING$(20,207):NEXT:NEXT
Albo ditheringiem najlepiej w MODE 2. Trzeba sobie zdefiniować znaczek
5 MODE 2:SYMBOL 240,17,68,17,68,17,68,17,68 ' a potem:
10 ?SPACE$(20):?STRING$(20,240):?STRING$(20,207):?CHR$(24)STRING$(20,240)CHR$(24):?STRING$(20,143)
Można łączyć technikę 1ą i 2ą razem aby uzyskać więcej odcieni, albo w tej 3ej zdefiniować sobie więcej znaczków o dodatkowych zagęszczeniach pikseli.
-
10 SPEED INK 1,1:BORDER 0:INK 0,4,9:INK 1,26:INK 2,17,22:INK 3,13:PEN 2:PAPER 3:?" MAMY CIE! "
ZorrO wygrywa i może sobie zrobić herbatę. ;)
Ps. Oczywiście migamy najszybciej jak się da czyli 1,1.
-
Składam protest! :P
Byłem pierwszy, podałem algorytm/metodę czyli jak to zrobić, warunki konkursu nie wymagały napisania programu w BASICu.
Baaa, podałem nawet kilka sposobów, a warunki konkursu nie określały nawet czy to ma być rozwiązanie programowe czy sprzętowe.
Ja się tak nie bawię... ;)
-
Ależ Wodzu, co Wódz .... ;D
-
Zagadka 2
Jesteś na wystawie RETRO z CPC. przestają działać klawisze R,U,N, CONTROL, COPY.
Jak włączyć grę, demo, cokolwiek.
-
[SHIFT] + mały [ENTER]
-
Skoro nawet Ctrl nie działa to na 464 bez stacji nic nie wymyślimy, na Plusie można coś z Cartridga włączyć, a do 6128 trzeba by mieć śrubokręt i lutownicę, i zewrzeć piny na zworce LK7 na płycie głównej (między GA i FDC) które włączają autoboot CPMu. A wtedy jeśli mamy tak uruchamiane produkcje to będzie kolorowo. :)
Bez Ctrl resetu z klawiatury nie zrobimy, więc jeśli nie mamy tego przycisku w jakimś rozszerzeniu to można kompa wyłączyć i włączyć a CPM czy coś tam innego odpalanego w taki sam sposób ruszy. :)
Mając śrubokręt i lutownice można szukać przyczyn niedziałania tych klawiszy, może pogięta taśma klawiatury, a może skopany AY3. Jeśli to pierwsze to może choć jeden z Ctrl lub Copy zacznie działać a każda z tych opcji otwiera nowe możliwości. A jeśli to drugie to może jakiś Spectrumowiec poratuje, ale bez odsysacza trzeba by AYka na baranka dolutować. ;)
-
Podpowiedź bez rozkręcania....
-
W sumie to gdy nie działają te klawisze co podałeś to nadal można by normalnie wpisać |cpm i enter wcisnąć. Niepotrzebnie to tak przekombinowałem. :D
Choć literki R U N też by sie dało uzyskać. Pamiętam że parę razy zauważyłem że wciskając wiele klawiszy jednocześnie ukazuje sie na ekranie wiele literek na raz, w tym także takie których nie wciskaliśmy. Albo przytrzymując kolejno coraz więcej klawiszy, przy kolejnych będą sie pojawiały już nie pojedyncze literki ale po 2 czy więcej na raz. Nigdy tego do końca nie rozgryzłem, co z czym by trzeba wcisnąć aby coś tam innego uzyskać. Ale patrząc na ten schemat jeśli dobrze kombinuję to wydaje mi sie że wciskając jednocześnie WET powinno sie także pojawić R.
Nie mam prawdziwego pod ręką a emulatory nie naśladują tego poprawnie, wiec nie sprawdzę.
Albo zamiast sie bawić w takie dochodzenie po literce co wcisnąć, to od razu całą łapą przycisnąć z połowę liter na raz i zobaczyć czy ukazały sie te brakujące RUN pośród innych znaków, jeśli tak to resztę skasować i już. I taką czołgową metodą można wklepać wszystko. A Copy i Ctrl nie będą potrzebne do CAT i run"name 8)
-
wciskając jednocześnie WET powinno sie także pojawić R.
-
Domyślam się że w mojej odpowiedzi był błąd bo chodziło o CTRL który nie działa ale przy okazji chyba znalazłem błąd na CPC Wiki.😉
Cytuję:
On a CPC464 system you can press SHIFT and the small ENTER key (on the keypad) together instead of typing RUN".
Źródło:
https://www.cpcwiki.eu/index.php/A_guide_to_running_software_on_a_real_Amstrad_CPC/CPC_Plus_computer
W sekcji „tips”
-
Faktycznie jest błąd i to w dwóch linijkach. :)
Już zgłosiłem że mają błąd. :)
https://www.cpcwiki.eu/forum/cpcwiki-discussion/cpc-wiki-vs-cpcwiki-the-amstrad-cpc-encyclopedia!/msg249528/#msg249528
A wracając do zagadki to idąc dalej tym tropem, WEY daje U, a JKM daje N. :)
Mam nadzieję że to jest rozwiązanie. Choć myślę że wpisanie |cpm też nim jest, nawet jeśli McArti0 miał na myśli inne.
-
To po herbatce dla wszystkich... 8)
-
Tak w zasadzie to powinno być:
On a CPC464 system you can press and hold CTRL and the small ENTER key (on the keypad) together instead of typing RUN".
Bo trzeba wpierw nacisnąć i przytrzymać CTRL a dopiero potem (mały) ENTER
-
Każdy prawdziwy Amstradowiec ma to w instrukcji obsługi.
Albo jakiś kolega przekaże mu tą nietajemną wiedzę. :)
Jestem ciekaw jaka będzie kolejna zagadka.
-
Zagadka 3.
Co robi program?
OUT &BCFF,12
WAIT &B5FF,0
-
Uuu tu mnie masz. Teraz mi została szklana kula. Ten OUT to coś z wyświetlaniem, a WAIT to chyba czekanie albo na jakieś odświeżanie ekranu albo na zgłoszenie sie dodatkowego ROMu, ale jeśli to drugie to po co byłby ten OUT? ??? Czary mary i wizja zniknęła. ::)
-
Może oczekiwanie na koniec ramki obrazu?
-
INP A,(&B5FF) = nRD, &x1011 0101 xxxx xxxx <- A14=0, A11=0, A9=0, A8=1
WAIT odczytując PPI PB jednocześnie zapisuje wartość odczytaną do CRTC R12
Dzieje się tak, bo CRTC nie odróżnia zapisu i odczytu przez procesor.
-
Tak wyjaśniłeś że prawie nic nie rozumiem.
2ga i 3ia linijka ma sens, ale nie wiem co to jest PB, co ma wspólnego PPI z CRTC?
Myślałem że on tylko steruje AY3, klawą, joyem, drukarką i chyba też sterowaniem magnetu.
Z górnej linijki wiem tylko że INP jest odwrotnością OUT, reszty nie rozumiem, podobnie jak do czego służy ten przykład ze zagadki.
Experymentowałem z tym WAIT, i inne liczby nic nie robią a 0 wiesza kompa. :-\
I jeszcze muszę policzyć ile herbatek ci wiszę za wyjaśnienia. ;)
-
PB to port B PPI
użyj emulatora ACE-DL.
i spróbuj np inny rejestr CRTC z użyciem magnetofonu.
OUT &BC00,13
WAIT &B5FF,0
-
I co obraz będzie sie krzaczył w rytmie pisków z magnetu? ???
-
:o
-
Zagadka 4
Gra GrandPrix 3D, w którym wyścigu pierwszy raz jedzie się nocą.
-
Na trasie 4ej Jarama i 7ej Kyalami jest ciemniejsze niebo, ale nie wiem czy to brzydsza pogoda czy wieczorek, bo dopiero na 8ej Mosport jest dość ciemno by nazwać to nocą, bo ciemnieje asfalt a nawet kokpit.
-
(https://img.wprost.pl/img/zalej-nia-liscie-laurowe-i-zagotuj-ten-napoj-dziala-lepiej-niz-nie-jedno-lekarstwo/ed/ab/d4850b3dbab20c6a048ec58c7d7b.webp)
-
Zagadka 4
Chip 74LS145 jest układem skanującym klawiaturę. Firmware 50x na sekundę ustawia minus na każdej z 10 linii wyjściowych chipa. Ale na jednej minus jest przez cały czas pomiędzy kolejnymi skanami klawiatury.
Która to linia?
-
Pewnie na ostatniej która była ustawiona, dokładniej odpowiem jak już będę na etapie uruchomienia klona CPC ITX, bo właśnie kończę go montować. 😉
Dopiero wtedy będę miał okazję sprawdzić to oscyloskopem.
-
Można poczytać kod firmware.... I sie zdziwić ;)
-
Pewnie że można, ale kto ma czas by to robić. 😉
-
Sądząc po mapie swichy jaką kiedyś wstawiłeś w tym wątku, zgaduję że to może być linia 2.
Bo nie ma na nim klawiszy, tzn niby jest Del ale mam wrażenie że jest w złym miejscu, sądząc po numeracji klawiszy raczej powinien być nad Z. No chyba że obrazek ma inną numerację linii.
-
Linia Q6 (czyli wyjście 7 układu 74LS145) jest stale w stanie niskim między kolejnymi skanami klawiatury.
-
Zagadka 5
Apropos kodu firmware to i ja mam zagadkę. 😉
Jak zmodyfikować firmware (jednym bajtem) aby nasz CPC 6128 startował zawsze w mode2 ?
-
W emulatorze Java jest taki edytor ROMów i tam można sobie MODE zmienić.
Ja sobie przygotowałem kiedyś ROMa pod Emulaca z inną czcionką, mapą klawiszy, kolorami i trybem. I te dwa ostatnie modyfikowałem kodami kontrolnymi we wyświetlanym komunikacie powitalnym. Ale taką metodą tryb sie zmienia 2ma bajtami. :)
-
Mała podpowiedź, chodzi o modyfikację tylko jednego bajtu w OS-ROM i nie polega ona na zmianie treści komunikatów powitalnych.
-
Należy zmienić bajt na adresie 0x12B z 01 na 02.
-
Ok, odpowiem...
Wartość bajtu u kolegi JLS się zgadza, ale adres nie do końca. ;)
Chodzi o adres w OS-ROM_CPC6128 0x0B13 i tam trzeba zmienić wartość z 1 na 2.
Natomiast w przypadku OS-ROM_CPC464 adres jest nieco inny 0x0AF3.
W ten sposób nasz CPC zacznie się zgłaszać w MODE 2, możemy potem zaprogramować sobie EPROM z taką modyfikacją i wstawić go do komputera. 8)
Ja akurat zrobię to w moim klonie, bo start w MODE 2 wraz z kartą dodatkowych ROM'ów jest wtedy dla mnie bardziej czytelny. <- zastosowanie praktyczne ;D
Lista plików z dyskietki też lepiej wtedy wygląda.
-
Zagadka 4
Chip 74LS145 jest układem skanującym klawiaturę. Firmware 50x na sekundę ustawia minus na każdej z 10 linii wyjściowych chipa. Ale na jednej minus jest przez cały czas pomiędzy kolejnymi skanami klawiatury.
Która to linia?
;; scan keyboard
0883 010ef4 ld bc,&f40e ;
0886 ed49 out (c),c ;
0888 06f6 ld b,&f6 ;
088a ed78 in a,(c) ;
088c e630 and &30
088e 4f ld c,a
088f f6c0 or &c0
0891 ed79 out (c),a ;
0893 ed49 out (c),c
0895 04 inc b ;
0896 3e92 ld a,&92 ;
0898 ed79 out (c),a ;
089a c5 push bc
089b cbf1 set 6,c ;
089d 06f6 ld b,&f6 ;
089f ed49 out (c),c
08a1 06f4 ld b,&f4 ;
08a3 ed78 in a,(c) ;
08a5 46 ld b,(hl) ;
08a6 77 ld (hl),a
08a7 a0 and b
08a8 2f cpl
08a9 12 ld (de),a
08aa 23 inc hl
08ab 13 inc de
08ac 0c inc c
08ad 79 ld a,c
08ae e60f and &0f
08b0 fe0a cp &0a
08b2 20e9 jr nz,&089d
08b4 c1 pop bc
08b5 3e82 ld a,&82 ;
08b7 ed79 out (c),a
08b9 05 dec b
08ba ed49 out (c),c
08bc c9 ret
-
Podsumowując trudną zagadkę 4.
Ostatni zapis w proc skanowania klawiatury to OUT &F600,0
Czyli PIN1 74LS145 jest prawie zawsze zero.
Linia ta dotyczy klawiszy: Cur.Up, Cur.Right, Cur.Down, F9, F6, F3, Enter, NumPadDot.
historia ostatniego OUT w Firmware 6128
;; scan keyboard
0888 06f6 ld b,&f6 ;
088c e630 and &30
088e 4f ld c,a
0895 04 inc b ;
089a c5 push bc
08b4 c1 pop bc
08b9 05 dec b
08ba ed49 out (c),c ; ostatni zapis w proc skanowania klawiatury
08bc c9 ret
-
Ok, odpowiem...
Wartość bajtu u kolegi JLS się zgadza, ale adres nie do końca. ;)
Chodzi o adres w OS-ROM_CPC6128 0x0B13 i tam trzeba zmienić wartość z 1 na 2.
Natomiast w przypadku OS-ROM_CPC464 adres jest nieco inny 0x0AF3.
W ten sposób nasz CPC zacznie się zgłaszać w MODE 2, możemy potem zaprogramować sobie EPROM z taką modyfikacją i wstawić go do komputera. 8)
Ja akurat zrobię to w moim klonie, bo start w MODE 2 wraz z kartą dodatkowych ROM'ów jest wtedy dla mnie bardziej czytelny. <- zastosowanie praktyczne ;D
Lista plików z dyskietki też lepiej wtedy wygląda.
Niestety, jeżeli w dodatkowym ROM-ie umieścimy "CP/M+ Loader" firmy Graduate Software, dzieje się coś niedobrego... Tryb jest niby 80-io kolumnowy, ale BASIC wykorzystuje tylko 40 kolumn - lewą połówkę ekranu...
Oczywiście po uruchomieniu CP/M-u wszystko jest OK! Również "MODE 2" naprawia błąd ale fajnie było by mieć całe 80 kolumn bezpośrednio po starcie systemu.
-
Tryb jest niby 80-io kolumnowy, ale BASIC wykorzystuje tylko 40 kolumn - lewą połówkę ekranu...
a weź napisz WINDOW 1,80,1,25
-
Tryb jest niby 80-io kolumnowy, ale BASIC wykorzystuje tylko 40 kolumn - lewą połówkę ekranu...
a weź napisz WINDOW 1,80,1,25
Tak, wiem, że to będzie działało, ale... szukałbym jakiejś modyfikacji ROM-ów z loaderem aby nie psuł on ekranu ;)
-
Wtedy pozostaje jeszcze modyfikacja ekranu powitalnego kodami sterującymi aby uzyskać mode 2.
-
Pewnie to CP/M+ Loader jest zaskoczony, że to nie mode 1
-
Ja sie lubiłem bawić w takie modyfikacje ROMu pod emulator, edytując tryb i kolory w napisie powitalnym oraz wygląd znaków i mapę klawiatury. Przykłady poniżej.
Najpierw tylko nieznacznie zmieniony font na tzw bezszeryfowy czyli bez tych ozdobień na końcach kresek przez co bardziej przypomina font z ST, kolejny obrazek pokazuje znaczki narodowe o kodach takich jak w starym DOSie z języków gdzie sprzedano dużo CPC, Francja Niemcy Hiszpania i Skandynawia, dodałem też komplet Greckich liter których nie ma w Łacińskich, oraz jak wyglądają rameczki dostępne na klawiszach funkcyjnych. 3ci obrazek pokazuje mapę klawiszy i wszystkie znaczki z tej wersji ROMu.
Najpierw sie bawiłem z Logiem Amstrada w 4ech kolorach zrobionym ze standardowych znaczków, co wyglądało ślicznie, ale górę wzięła użyteczność a w dwóch kolorach już nie wygląda równie dobrze no i musiałem dodać ekstra znaczki by ten ukośny pasek sie pojawiał. :)
Drugi font ma obniżone literki zarówno duże jak i małe o jeden piksel. Taki font bardziej mi sie podoba i nie sklejają sie w nim sąsiednie linijki tekstu. W komunikacie powitalnym jest też linijka która skopiowana pozwala szybko wyświetlić wszystkie znaki. Minusem tego fonta jest że moje programiki które dodają polskie znaczki które są wyższe o ten piksel, i musiałem robić je w dwóch wersjach, jedną dla innych i drugą z PL niższymi na własny użytek. :)
A w razie jakby sie ten offtop o modyfikacji ROMów przeciągał to może by go przenieść na nowy wątek.
-
Zagadka 6
Jak w Locomotive Basic użyć przerwań co 10ms? :o
-
ms to milisekunda czyli 1/1000 sekundy. Pytasz o 10ms czyli o 1/100 sekundy. To jest kłopot, bo komendy AFTER i EVERY pozwalają na przerwania z dokładnością do 1/50 sekundy czyli 2x za mało aby uzyskać nimi to o co pytasz. Gdyby chodziło o 1/10 sekundy to by było np tak:
10 EVERY 5 GOSUB 30
20 GOTO 20
30 ?"1";:RETURN
Oczywiście linia 20 może być zastąpiona dowolnym programem który robi cokolwiek.
Pozostaje kombinować ze zmienną TIME, bo ta sie zmienia aż 300 razy na sekundę. np:
10 IF (TIME-t)<3THEN 10
20 ?"1";:t=TIME:GOTO 10
Ale to właściwie nie jest przerwanie tylko pauza 1/100 sekundy (czyli te 10ms) pomiędzy printami. A nawet nie mam pewności czy ten warunek potrafi sie wykonać więcej niż raz w tym czasie, ale chyba tak bo gdy zmienię na <2 to mam wrażenie że jedynki pojawiają sie szybciej.
Gdyby to miało działać jak przerwanie to ten IF i tak by musiał być dodany do głównego programu najlepiej zapętlonego i to niezbyt długiego bo musiałby sprawdzać warunek przynajmniej raz na 10ms. A i tak te "przerwania" zapewne nie byłyby zbyt precyzyjne.
-
Lepiej przeczytać jeszcze raz wszystkie komendy basica ... :D
-
Nie wiem o co ci chodzi. Pętla WHILE WEND ma w sobie warunek więc można nią zrobić to samo co IF + GOTO. Ale to niczego nie poprawia.
Może tym ON SQ GOSUB by sie dało jakieś maskowane ciche dźwięki robić które by liczyły czas, ale nawet nie chce mi sie myśleć jak.
Jedyna komenda jaka jeszcze została a ma coś wspólnego z czasem to SPEED, ale ta służy do kilku konkretnych zastosowań a nie do dowolnych.
Może WAIT, ale nie mam pojęcia na jakim porcie sie coś dzieje aż tak regularnie, a zresztą byłoby to mierzenie pauzy a nie przerwanie.
Przykład przy komendzie DEF FN w instrukcji coś miesza z przerwaniami, ale przełomu nie widzę. Można by inaczej warunek przy IF sformułować a nawet precyzyjniej mierzyć odstępy czasowe, tzn odległości między tymi "przerwaniami" mogłyby nie być równe ale mimo to w określonym odcinku czasu byłaby ich prawidłowa ilość. Ale niemal to samo można by uzyskać tak jak opisałem tu niżej.
Bo jeszcze mi przyszło do głowy że przykład z mojego wcześniejszego posta z EVERY można zrobić tak by przy każdym przerwaniu z maksymalną ale i tak o połowę za małą częstotliwością, wykonywał podprogram dwa razy od razu. Hehe Innych pomysłów nie mam.
-
nawet nie chce mi sie myśleć jak.
No bez myślenia to sie nie da ... :P