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
