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

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #105 dnia: 2021.09.13, 18:00:14 »
?2=2
-1
Ready

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #106 dnia: 2021.09.14, 09:24:21 »
Ok, potestowałem, i jeśli chcemy pętlę WHILE-WEND wykonywać w kółko bez warunków, to trzeba wpisać dowolną liczbę ze znakiem lub bez, byle nie zero.

A minus zamiast spacji jednak zajmuje tyle samo miejsca. :(
Za to przed takimi słowami kluczowymi przed którymi nie trzeba pisać dwukropka jak: TO, STEP, IF, THEN, ELSE, (i być może coś tam jeszcze), jeśli są poprzedzone liczbą, to pomiędzy tą liczbą a tym słowem nie trzeba pisać spacji, i to oszczędza bajt pamięci, mimo że potem listując tą linię widać tam spację choć jej nie ma. :)
Również jeśli te słowa są poprzedzone zmienną która ma w nazwie $ lub !, albo jest tam wyrażenie kończące sie zamkniętym nawiasem, to też nie trzeba pisać spacji i działa dobrze, choć tym razem po listowaniu spacji nie widać. Ot taka ciekawostka. :o
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #107 dnia: 2021.09.26, 01:47:17 »
POKE &B7C4,PEEK(&B7C4)+1

przesunięcie offsetu ekranu o 1 bajt dla mode 0 to 1/4 znaku, dla mode 1 to 1/2 znaku, po zmianie nadal działa locate z uwzględnieniem offsetu

roll ekranu anuluje poprawkę ustawienie.

w zasadzie trzeba by korygować jeszcze starszy bajt offsetu &B7C5. ale upraszczając ...

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #108 dnia: 2021.09.26, 12:08:54 »
A w 464 adres który robi to samo to &B1C9. :)

Ja to bym chciał wiedzieć czy po przestawieniu rejestrami szerokości ekranu da sie przez POKE zmienić miejsce do którego nam przeskakuje kursor w pionie, tak żeby nadal każda następna linia zaczynała sie pod początkiem poprzedniej linii.

np. BORDER 0 (żeby było widać gdzie jest ramka), OUT &BC00,1:OUT &BD00,41  (zwiększamy szerokość ekranu o dwie kolumny)
I teraz każdy enter, albo strzałki góra dół to kursor nie trzyma pionu tylko przeskakując linijkę przesuwa sie także o dwa znaki w bok. :(

Czy jest jakiś POKE który to prostuje, czy trzeba by całą procedurę z ROMu przenieść w inne miejsce i ją zmodyfikować?

« Ostatnia zmiana: 2021.09.26, 12:27:46 wysłana przez ZbyniuR »
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #109 dnia: 2021.09.26, 17:51:15 »
Prześledziłem proces wciskania entera i doczłapałem się do sekwencji liczenia adresu na ekranie dla znaku o współrzędnych X,Y.

bardzo sztywno liczy linie razy 80, potem dodaje współrzędną X liczoną x2 albo 4 w zależności od moda. Na końcu dodaje offset z adresu &B7C4(C5)

ale w innych miejscach występuje też liczba 79 i 39. więc sprawdzanie jest z silnym założeniem, że linia ma 80 bajtów oraz 80, 40 lub 20 znaków.

przy rysowaniu graficznym pewnie będą kolejne zasieki.

Moge zrobić moda na modyfikację mnożnika ale chyba najprościej będzie zmodyfikować procedurę chr$(10) ale wtedy locate nie bedzie działać.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #110 dnia: 2021.09.26, 19:51:27 »
Owszem po zmianie szerokości ekranu w rysowaniu linii albo wyświetlaniu liter spod kursora graficznego też sie robi sieczka. Ale to wyższa szkoła jazdy i ucieszyłbym sie gdyby chociaż tryb tekstowy umiał korzystać z innej szerokości ekranu.

Niedawno wspominałem na innym wątku że Amstradowi programiści nie raz modyfikowali procedurę wyświetlania liter aby je przyspieszyć, i jedna z nich była w Bajtku 9/92s18, ale też w Komputerze 12/88s28 przy okazji dodano w niej możliwość pisma Italic (w 4/89s24 Errata), a skoro już wywleczono procedurę drukowania z ROMu by ją modyfikować, to może ten fragment w którym jest ten sztywny przeskok linii o te 80 bajtów też tam jest. I może wystarczy jedno POKE. Chwila sprawdzę ... No nie, nie ma tam bajta o wartości 80. Czyli to tylko zmienia matrycę znaku na odpowiednie zapikselowanie pamięci ekranu przy wyświetlaniu literki, a procedura do ustalenia gdzie ta literka ma być nadal jest w ROMie choć te FastPrinty pewnie sie do niej odwołują.

Pewnie jest kilka miejsc gdzie to sztywne 80 się pojawia, A przynajmniej dwa przy LOCATE i przy ustalaniu gdzie wyświetlić kursor.
Zazdroszczę Ci że jesteś taki oblatany, a ja nie dość że nie jestem to jeszcze z 80% entuzjazmu jaki miałem do bawienia sie Amstradem sprzed paru lat mi wyparował.
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #111 dnia: 2021.09.26, 23:22:26 »
Na szybko zmiana 4 bajtów daje niezły efekt.

Zmiana ograniczników window ustawiona na 95 i 47 komórki w LowRom

oraz mnożnik bajtów na linie na 96  (((((((HL*2)+HL)*2)*2)*2)*2)*2)

teraz można dać WINDOW 1,96,1,21

oraz
OUT&BC00,2:OUT&Bd00,50
OUT&BC00,1:OUT&BD00,48
OUT&BC00,6:OUT&BD00,21

i tylko jeszcze scroll nie kuma o co chodzi i locate sie gubi.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #112 dnia: 2021.09.27, 01:27:34 »
Ograniczenia WINDOW to nie problem bo można w POKE &B72C  wpisać prawą kolumnę do strumienia zero jakiej ustawa nie przewiduje. :)  Liczone od zero, a nie od jeden jak w komendzie WINDOW.

LOCATE jest dobrze. Wyświetlanie i kursory są oki dopóki ekran sie nie przewinie po dojściu do dolnej krawędzi, wtedy wszystko sie chrzani do czasu wydania komendy MODE.

« Ostatnia zmiana: 2021.09.27, 02:09:51 wysłana przez ZbyniuR »
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #113 dnia: 2021.09.27, 11:16:32 »
Jest problem, bo bez zmiany ogranicznika w bajcie &0B68 (normalnie jest tam 79) system łamie linie tekstu na 80 znaku mimo, że jest już overscan i w &B72C wpisałem 95

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #114 dnia: 2021.09.27, 22:47:07 »
Pozmieniałem wszystko co widziałem. Nie znalazłem tylko kasowania nowej dolnej linii niestety zawija się 16 znaków. czyli szykuje nową linie 80 znaków w wierszu a nie 96.

łacznie z ustawieniem, że komp ma 21 linii textu.

scroll sprzętowy raczej działa.

wyszedł textowy Amstrad 21:9  8) ;)

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #115 dnia: 2021.09.28, 14:12:47 »
Normalnie ekran to 40x25 czyli 1000 znaków i widocznych 16000 bajtów, a taki poszerzony to 48x21 czyli 1008 znaków i 16128 widocznych bajtów. Może taką wartość gdzieś sprawdza.

Wiesz że lepiej byłoby skopiować te modyfikowane procedury z ROMu do pliku, aby można je było wczytać, do RAM, potem zmodyfikować wektory którymi sie odwołuje do tych z ROMu na takie aby zadziałały te nowe i wtedy to będzie działało na każdym 6128 a przy dobrze zmienionych wektorach także na 464. No i wtedy opublikować to na angielskim forum i niech Cię chwała nie omija. :)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #116 dnia: 2021.09.28, 14:44:04 »
to jest dośc daleko od typowych wywołań &BXXX. Trzeba by przenieść wszystko co leci od ASCII 1-31 i wywołania &BXXX i w jakis sposób modyfikuje ekran, windowy, locaty, bada XY znaków. przepisac kernela.

1008 (2016 bajtów) nie wystepuje wprost. Kernel jest mocno zorientowany na XY znaków i końcówki. (80, 96 (16384-16000)/8 itp.) żaden LDIR mi nie podpasował, że może zamazywać kolejną linię.

Obaczym.
« Ostatnia zmiana: 2021.09.28, 15:47:59 wysłana przez McArti0 »

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Tricki na Amstradzie
« Odpowiedź #117 dnia: 2021.09.28, 17:18:41 »
Skoro to jest takie złożone że aż tyle procedur trzeba zmienić to by tłumaczyło czemu jeszcze nikt tego nie zrobił.

A może on tam spacje drukuje, w tych wyłaniających sie linijkach, i tej samej procedury używa na window które nie są całymi ekranami. Można by prześledzić działanie kodów sterujących góra dół i do czego się odwołują w przypadku dojścia do krawędzi okna.
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #118 dnia: 2021.09.28, 22:09:40 »
Dokładnie tak to robię, śledzę gdzie on skacze po zwykłym scrollu. Lece od &1523
ASCII 10 czyli:
&B781 3byte     ASCII 10: &80, &1523: Linefeed

W zasadzie wszystko jest dobrze. (chyba), troche na czuja to zrobiłem.

zsynchronizowałem to z nową resztą  z 16kB , 256 (32znaki) zamiast 384 (48znaków).

ps. spacji nie drukuje, jest LDIR, który kopiuje zera.

na Holle screen używa scrolla hardwarowego. na małym window, scroll jest softwarowy strasznie wolny jak wiadomo.

ta procedura skacze po LowROM jak gupia nawet przechodzi przez &BXXX włącz, wyłącz kursor i takie tam.

najprościej to by było wsadzić LowRom do RAMu relokować cały kod na to miejsce. (Call ze sztywnymi adresami jest jak naprał) a potem okrawać żeby zostało tylko to co musi być.

W załączeniu Chyba już gotowy mod LowRomu.
« Ostatnia zmiana: 2021.09.28, 22:33:58 wysłana przez McArti0 »

McArti0

  • ***
  • Wiadomości: 113
Odp: Tricki na Amstradzie
« Odpowiedź #119 dnia: 2021.10.08, 21:05:44 »
po wojnie z relokowaniem overscanowego moda LowRomu. fundamenty są, ale pozostało wychwycić co działa źle.

z rzeczy oczywistych:
następuje reset przy operacjach dyskowych cat, save.
podwójny kursor liczy się przez ROM więc nie widzi overscanu.

co jeszcze? Może Zbyniu pomożesz i może ktoś jeszcze. zapraszam do testów.

program Ovrscan.bas
ROM-RAM.bin zrelokowany ROM do obszaru &4000

ps. OK. linię 80 basica należy zamienić na wpis 80 POKE &B995,&F2 i cat działa.

to fragment procedury obliczania adresu w ROM do jakiego należy skoczyć.

Adres pobrany np z tablicy skoków BB4E 36*3 TextVDU Jumpblock

ma kasowane bity 7 i 6 żeby napewno trafił w LowRom.

Cytuj
org #b98b
exx
pop hl
ld e,(hl)
inc hl
ld d,(hl)
ex af,af'
ld a,d
res 7,d
set 6,d  ;<-------zamieniamy z RES 6,d na SET 6,d żeby na pewno trafił w drugie 16kB (bank 1 RAM)
rlca
rlca
rlca
rlca
xor c
and #0c
xor c
push bc
call lb9b0
di
exx
ex af,af'
ld a,c
pop bc
and #03
res 1,c
res 0,c
or c
jr lb9b1
.lb9b0
push de    ;<----------rejestr DE z adresem kładziony na stos.
.lb9b1
ld c,a
out (c),c
or a
ex af,af'
exx
ei
ret      ;<------------- skok z adresu na stosie.
« Ostatnia zmiana: 2021.10.08, 22:33:57 wysłana przez McArti0 »