Autor Wątek: Zmodyfikowany ROM do Timexa na stałe włączający tryb rozdzielczość 80x24.  (Przeczytany 18109 razy)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Zacytuję autora modyfikacji:

"This is a modified version of the standard ROM. The drawing commands don't do anything, there's no ZX Printer support, there's only about 34K of free RAM for your programs.

However, it provides a hi-res 80x24 text mode. It is fully integrated with the ROM and you can do almost anything you could in 32x24 mode (OVER, INVERSE, UDGs, block graphics, embedded control codes, etc).

Use the ROM file as an IF2 cartridge with a TC2048 or Spectrum SE, or use the DCK file as a cartridge with a TS2068/TC2068/UK2086. "

Plik do obrania: https://dl.dropbox.com/u/15659782/BASIC80.zip

URL do wątku na WoS: http://www.worldofspectrum.org/forums/showthread.php?t=40200
« Ostatnia zmiana: 2012.07.23, 14:11:02 wysłana przez Tygrys »

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
No, no, fajne :)
Choć nie rozumiem trochę tych ograniczeń. Ponad 20 lat temu powstała nakładka na Basic, dająca co prawda tylko 64 kolumny, ale za to również obsługę instrukcji graficznych HiRes. I zajmowało to raptem parę kilobajtów. Tak trudno by to było wcisnąć do ROM? Choć nadal nie widzę specjalnie sensu tracić kompatybilność dla czegoś, co łatwo wgrać z dysku czy z divide.
Poza tym 80 kolumn (w matrycy 6x8) oznacza, że część ekranu nie jest używana. Szkoda trochę. A dość fajnie wygląda 85 kolumn, sam kiedyś coś takiego napisałem. Przegrywało jednak z trybem 64 kolumn czasem wyświetlania.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Ja swego czasu używałem BASIC64 i mi wystarczył. 80x24 to już chyba lekka przesada, choć dla osób piszących długie programy w BASICu na TC może się przydać. A czy trudno to wcisnąć w ROM? Pewnie tak, bo w ROMie aż tak dużo miejsca nie zostało. Zobaczymy jak projekt będzie się rozwijać.

Aha, do 1-go postu dodałem adres wątku na WoS.

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
No, no, fajne :)
Choć nie rozumiem trochę tych ograniczeń. Ponad 20 lat temu powstała nakładka na Basic, dająca co prawda tylko 64 kolumny, ale za to również obsługę instrukcji graficznych HiRes. I zajmowało to raptem parę kilobajtów. Tak trudno by to było wcisnąć do ROM? Choć nadal nie widzę specjalnie sensu tracić kompatybilność dla czegoś, co łatwo wgrać z dysku czy z divide.
Poza tym 80 kolumn (w matrycy 6x8) oznacza, że część ekranu nie jest używana. Szkoda trochę. A dość fajnie wygląda 85 kolumn, sam kiedyś coś takiego napisałem. Przegrywało jednak z trybem 64 kolumn czasem wyświetlania.
To ograniczenie pamięci wynika z położenia obszaru drugiego ekranu zawierającego parzyste kolumny tekstu. Tak sądzę ...
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Chodziło mi głównie o to, dlaczego nie ma obsługi DRAW - bo to poważne ograniczenie. To, że RAM-u jest mniej, to oczywiste - ekran zajmuje 2x po 6 KB, a obszary atrybutów są mało użyteczne, bo nie są w obszarze ciągłym, więc strata wynosi 2x7 KB.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Zrobiłem szybką analizę porównawczą tego ROMu z oryginalnym 48.

Po pierwsze tracimy 6955 bajtów - początek BASICa musi zostać przeniesiony ponad drugą połówkę ekranu: 24576+6144=30720, normalnie początek to 23755 stąd 30720-23755=6965.  Dokładnie tracimy jeden bajt więcej, bo przenoszone jest CHANS (definicja - zwykle pusta - kanałów) a BASIC zaczyna się bajt wyżej.

Po drugie - procedura drukowania znaków w 80 kolumnach na pewno będzie bardziej rozbudowana niż standardowe 32 albo 64 kolumny - gdzieś trzeba wygospodarować miejsce na dodatkowy kod w tych 16 kilo. Zakładam, że w wolnym kawałku przed generatorem znaków. Nie jestem pewien, czy dałoby się podobnie przenieść (z powodu miejsca) pozostałe procedury - trzeba by zmienić obsługę stawiania punktu i wyliczania adresu na ekranie. Jako, że algorytmy musiałyby brać pod uwagę bankowanie ekranu byłyby dłuższe od swoich normalnych odpowiedników. Do tego dochodzi konieczność korekcji algorytmów rysowania koła i łuku, żeby dopasować się do zmienionego AR piksela. Ogólnie - nie jestem pewien, czy wszystko zmieściłoby się w 16 kilo.

A sama analiza też daje ciekawe rezultaty... Poniżej jej wyniki (wszystkie adresy w HEX, nazwy procedur wg The Complete Spectrum ROM Disassembly).

W całym ROMie zmienione zostały adresy następujących procedur:
PO-MSG 0C0A na 0B8F
PO-FETCH 0B03 na 0AE6
TEMPS 0D4D na 0CC2
CL-SET 0DD9 na 0D42
CL-ALL 0DAF na 0D1B
CLS-LOWER 0D6E na 0CE3
CL-LINE 0E44 na 0D95

Są to procedury drukowania tekstu, wyliczania adresu znaku, generowania atrybutu wg zmiennych systemowych i kasowania różnych fragmentów ekranu.

Zmieniona procedura PRINT-OUT (09F4) i cały blok procedur drukowania tekstów,
znaków, przesuwania kursora itp. aż do 0F2B

Od 0BF4 do 0F2B pusty obszar wypełniony FFami - tu być może można by przenieść część kodu dla grafiki.

Zmieniona procedura START/NEW (11CB) ustawia właściwy tryb graficzny.

Zmieniony kod inicjujący ekran pod 128B i dodane wywołanie kodu pod 39DE - znajduje się tam procedura przesuwająca początek BASICa (a dokładnie obszar definicji kanałów) pod adres 7800.

Usunięte odwołanie do COPY-BUFF pod 130C - Czyżby brak obsługi drukarki?

Zmieniony kod pod 18C1 (OUT-FLASH) drukujący znak z aktywnym FLASH - oczywiście nie ma FLASHa.

Zmieniona tabela interpretacji rozkazów
P-CLS - zmieniony adres 0D6B->0CE0
P-PLOT - zmieniony adres 22DC -> 1BB2
P-DRAW - zmieniony adres 2382 -> 1BB2
P-COPY - zmieniony adres 0EAC -> 1BB2
P-CIRCLE - zmieniony adres 2320 -> 1BB2

Wszystkie rozkazuy z adresem zmienionym na 1BB2 są obsługiwane jak REM -
poważny błąd, bo REM kończy interpretację linii i żadne kolejne rozkazy po
dwukropku nie są wykonywane.

Na przykład:
10 PRINT 1 : PLOT 0,0 : PRINT 2

Wyświetli tylko 1

Pod 20AA zmienione ld c,33 na ld c,81 - fragment procedury wyliczającej pozycję ekranu dla INPUT

Zmiana procedury generowania koloru dla wyświetlanego znaku od 2234
Zmiana procedury obsługi BORDER - zmienia parę INK/(PAPER+BORDER)

Ogólnie przestaje działać PRINT INK x;123 itp. konstrukcje - lokalna zmiana koloru zmienia dwukolorową parę dla całego ekranu.

Zmieniona końcówka procdedury PLOT (2304) - usunięte ustawianie atrybutów.

Od 386E ("wolny obszar") na oko sądząc procedura drukowania znaków o szerokości 6 pikseli i zmieniony generator znaków.

Myślę, że jakby się zaprzeć, to dałoby się dodać obsługę grafiki ;)

Gryzor

  • *****
  • Wiadomości: 2010
  • Miejsce pobytu:
    Warszawa
Ktos uruchomil to na real TC ? Wydaje mi sie, ze 80 znakow to juz przesada.

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Usunięte odwołanie do COPY-BUFF pod 130C - Czyżby brak obsługi drukarki?

Dokładnie. Cytuję oryginalny post: "there's no ZX Printer support".
Jestem pod wrażeniem Twojej analizy, kawał solidnej (...) roboty! :)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Z racji tego że link z plikiem przestał działać, dodaję plik jako załącznik.

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Gracias!
Jak miło, w zipie jest nie tylko plik .dck, ale również "czysty" ROM. Próbuję zrozumieć, czemu się różnią, oprócz oczywistego, 9-bajtowego nagłówka w .dck. Ale sam kod bootujący jest inny. Chciałbym na podstawie znalezionych różnic dopasować Zebra OS, bo mam tylko plik .dck :/

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Domyślam się, że tryb HiRes jest podpięty pod kanał drukarki (standardowo #3). Czy da się przełączać tryby graficzne przez OPEN# i CLOSE#, tego nie sprawdzałem, ale PRINT #3 na standardowym ekranie 256x192 powinien wyświetlać co drugi znak jeßli jest tak jak myślę.
AY Music, ULA plus.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
@Abrimaal Nie rozumiem twojego pytania... Ten konkretny ROM jest zmodyfikowany w ten sposób, że cały system pracuje w trybie hi-res i drukuje 80 kolumn w linii przy użyciu 6 pikselowych znaków. Wyświetlanie w tym trybie pracuje przez standardowe kanały #1 i #2.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Chciałbym mieć taki rom z przełącznikiem w moim TIMEXie.
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
@Abrimaal Nie rozumiem twojego pytania... Ten konkretny ROM jest zmodyfikowany w ten sposób, że cały system pracuje w trybie hi-res i drukuje 80 kolumn w linii przy użyciu 6 pikselowych znaków. Wyświetlanie w tym trybie pracuje przez standardowe kanały #1 i #2.
Zasugerowałem się programem sprzed wielu lat, który podpinał procedurę pisania w HiRes pod kanał #3. Nie spodziewałem się aż tak zaawansowanej modyfikacji ROM tylko dla samej przyjemności pisania i czytania tekstu :)

Chętnie bym go jeszcze poprawił, aby startował z czarnym lub niebieskim ekranem. Wie ktoś, którą wartość podmienić?

Teraz pojawia się problem z emulatorem FUSE. Nie spodziewałem się, że jeszcze istnieje jakiekolwiek oprogramowanie dla Windows, które swoją konfigurację zapisuje w Users czy innym systemowym folderze.
Specjalnie dla tego ROMu rozpakowałem FUSE (portable) do osobnego folderu, a tu niespodzianka jak za czasów Windows XP. Przestawiam jedną instancję FUSE na Timex 2048, to wszystkie pozostałe też uruchomią się z tymi ustawieniami, dlatego że plik fuse.cfg jest jeden jedyny niepowtarzalny, oczywiście w C:\Users\User
Tragedia.
AY Music, ULA plus.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Przestawiam jedną instancję FUSE na Timex 2048, to wszystkie pozostałe też uruchomią się z tymi ustawieniami, dlatego że plik fuse.cfg jest jeden jedyny niepowtarzalny, oczywiście w C:\Users\User
Wiele programów dopuszcza posiadanie ini/cfg w wielu folderach. Spróbuj dla konkretnej instancji fuse przenieść plik cfg do jego katalogu - jest wielce prawdopodobne że pomoże :)  .
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A