Autor Wątek: Zagadki z wiedzy praktycznej o CPC.  (Przeczytany 3271 razy)

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #45 dnia: 2025.04.17, 08:13:13 »
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     

« Ostatnia zmiana: 2025.04.17, 20:30:58 wysłana przez McArti0 »

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #46 dnia: 2025.04.18, 22:01:24 »
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     

LechU

  • *
  • Wiadomości: 4
  • Miejsce pobytu:
    Kraków
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #47 dnia: 2025.04.20, 13:21:13 »
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.

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #48 dnia: 2025.04.20, 19:49:48 »
Tryb jest niby 80-io kolumnowy, ale BASIC wykorzystuje tylko 40 kolumn - lewą połówkę ekranu...

a weź napisz WINDOW 1,80,1,25

LechU

  • *
  • Wiadomości: 4
  • Miejsce pobytu:
    Kraków
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #49 dnia: 2025.04.20, 20:19:41 »
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  ;)

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2673
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #50 dnia: 2025.04.20, 20:25:45 »
Wtedy pozostaje jeszcze modyfikacja ekranu powitalnego kodami sterującymi aby uzyskać mode 2.
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #51 dnia: 2025.04.20, 20:52:39 »
Pewnie to CP/M+ Loader jest zaskoczony, że to nie mode 1

ZorrO

  • ****
  • Wiadomości: 292
  • Miejsce pobytu:
    UK
  • CPC AGA PSX
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #52 dnia: 2025.04.21, 05:33:58 »
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.
« Ostatnia zmiana: 2025.04.21, 06:00:00 wysłana przez ZorrO »

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #53 dnia: 2025.04.28, 05:28:52 »
Zagadka 6
Jak w Locomotive Basic użyć przerwań co 10ms?  :o

ZorrO

  • ****
  • Wiadomości: 292
  • Miejsce pobytu:
    UK
  • CPC AGA PSX
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #54 dnia: 2025.04.28, 12:13:27 »
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.

« Ostatnia zmiana: 2025.04.28, 12:24:11 wysłana przez ZorrO »

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #55 dnia: 2025.04.28, 13:14:10 »
Lepiej przeczytać jeszcze raz wszystkie komendy basica ...  :D

ZorrO

  • ****
  • Wiadomości: 292
  • Miejsce pobytu:
    UK
  • CPC AGA PSX
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #56 dnia: 2025.04.28, 15:47:20 »
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.

McArti0

  • Moderator
  • *****
  • Wiadomości: 263
Odp: Zagadki z wiedzy praktycznej o CPC.
« Odpowiedź #57 dnia: 2025.04.28, 18:12:30 »
nawet nie chce mi sie myśleć jak.
No bez myślenia to sie nie da ...  :P