Formerly damned by many as well as me. We are speaking about 8x4 font or 64 characters a line that used to be not in such favour. Nowadays in time of VGA monitors connected to Speccy we can obtain a quality picture, monitors are large and well readable. And all of a sudden 8x4 fonts have become quite readable. If you look at small letters such as those in Word, Excel, websites or other PC applications, Speccy 4 bit (64 chars a line) font still looks pretty large and a good looking one.
I wrote a BASIC program the other day and thought the default 32 chars/line font is unnecessarily big, not economical and that it could be a good idea to have 64 chars/line font in BASIC which could bring as much as double information on the same screen. Thus the user does not have to scroll so often and programming in BASIC would become more convenient and pleasant. I could not ask nobody else then Busy who with joy in my heart accepted.
He started with a standart ZX ROM, which he adapted for 64 chars/line. Then he switched to MB-02+, where paging in lower memory was used and Busy could prepare two bank version. The greatest advantage of the two bank version to one bank one is the character display speed.
Before we got into closer description we have to say it was neccessarry to make some compromises. Time-wise (coding would last too long) and result-wise (the result would bring rather little fruits at a big effort). As for my assignment to Busy (if I may say so) the substantial goals to bring comfort to a BASIC programmer were met. Namely: LIST, autolist and edit line. So, we would like to ask a user to lessen their critics since several things remained unsoved. Things like placement of the 4 bit character inside 8x8 attribute field, the SCREEN command does not work in 64 chars mode, etc. On the other hand some goals were not planned, yet realised, such as AT and TAB commands are 64 characters compatible.
All patched ROMs, despite their minor imperfections and a little slowdown, are heavily usable in practical life. Let us focus on individual versions. Generally, you will not find ROMs that are prepared for 64 chars a line in the package. But you patch your own ROM in usage for 64 chars a line with enclosed programs instead. Such concept brings a major advantage- your ROM remains preserved in your configuration.
Detailed information about patches to be found in the package and written by Busy. Below you will find a quick survey over patch functions.
1) 1 bank ROM version (set64a2, set32a2, SetZxFnt)
2) 2 banks ROM version (m64a4, m32a4)
3) auxiliary program (MakePatcher1)
4) 64 character a line ROM usage
5) set of ROMs
Ad 1) 1 ROM version (programs "set64a2" and "set32a2")
This version is designed either for burning into ROM ie. for the hardware that is not able to page write enable low memory or for hardware that is able to do so (eg. MB-02+). "set64a2" will patch the ROM to 64 characters a line while "set32a2" will return ROM to its original state. You run the programs with LOAD""CODE: RANDOMIZE USR 16388. The ROM will be set to 4x8 characters and will not be able to display 8x8 characters anymore. At the same time the font will be rewritten so any application using the font will be displaying nonsence characters. If you try to apply "set64a2" to BSROM, it will not work. You need to run "SetZXFnt" first which will adjust the font in BSROM. Once you already have patched ROM for 64 chars/line never run "SetZxFnt" again or else the crash is inevitable. One page version is slower in character printing than the two page version. There is not enough space in ROM to optimise display speed.
Ad 2) 2 ROM version (m64a4, m32a4)
This version is designed for such a hardware that supports write enable lower memory switching of at least two memory banks (eg. MB-02+ again:). The two bank page version looks exactly the same as the one bank version. But this version uses also a second bank so the character display can be much faster than in one bank version. It is activated with running "m64a4". Unlike one bank version ("set64a2") the two bank version preserves compatibility with 32 chars/line mode just by using POKE 23611,204. POKE 23611,220 switches on 64 chars/line again. Yet there is another advantage of two bank version. The user can specify the state of the ROM directly after carrying out "m64a4" or after every reset or NEW command. You just enter the POKE before running "m64a4" which ensures that your system will always boots up in the desired character per line mode. If you need to return your ROM into its original state for whatever reason, run "m32a4" or reboot the computer.
Here are times of running the cursor from the beginning to the end of the experimental BASIC line:
standart ZX ROM:
20 seconds
1 bank version "set64a2" 64 characters:
32 seconds
2 bank version "m64a4" 64 characters:
22 seconds
2 bank version "m64a4" 32 characters:
21 seconds
Ad 3) Auxiliary program "MakePatcher1"
This is a general utility for ROM adaptations for MB-02+ users. It was used for creation of "set32a2" and "m32a4". It can be well used eg. for BSDOS implementation into any ROM.
Ad 4) 64 characters a line ROM usage
As stated earlier the main goal of this little project was to have more comfortable programming in BASIC. But at the same time, new patches for 64 chars a line can be used in BASIC applications because ROM will be able to use positions 0-63 in AT and TAB commands as well. So if we want to have such application and share it with other users it is advisible for its flawless functioning to place a test in its start which will detect if the ROM has been prepared for 64 chars mode. With PEEK 2597 your BASIC program can easily test if the ROM has been adapted for 64 chars and if so then it can be further detected wether the 64 mode is switchable with POKE 23611 or not.
LET a=PEEK 2597
IF a=34 THEN PRINT "64 chars/line not installed"
IF a=66 THEN PRINT "64 chars/line installed but not switchable to 32chars"
IF a=211 THEN PRINT "64 chars/line installed (2-bank version)"
IF a=32 THEN PRINT "64 chars/line installed (1-bank version)"
So all programs designed for 64 chars display should have this test at the start.
Ad 5) Set of ROMs
To make the package complete I added ROMs. Either designed for ZXS itself (to burn into ROM, use in emulator, etc.) or the same ROMs with BSDOS, which are designed for use with MB-02+. In the ROM directory you will find:
BSROM 118- ZX ROM adapted by Busy, besides new commands it fixes bugs of the original ZX ROM. More here.
BSROM 140- ZX ROM adapted by Busy, younger and more perfect sister of BSROM 118. More here.
ZX ROM- adapted for BSDOS by Busy.
All of these ROMs can be patched for 64 character a line mode.
CZ
ROM se 64 znaky na řádek
autor: Busy
vydáno: 24.5.2017
Dříve nemnohými, i mnou samotným, zatracovaný font 8x4 neboli 64 znaků na řádek nebyl příliš oblíben. V dnešní době však míváme ke speccy zapojen VGA monitor, což znamená kvalitní obraz. Monitory bývají velké a dobře čitelné. A rázem je i čitelnost fontu 8x4 mnohem lepší, či naopak vůbec nepřekáží. Když srovnáte, jaké blechy musíte většinou luštit na webech, ale i ve wordu, excelu a jinde, tak spektrácký 4 bitový font 64 znaků na řádek jsou oproti tomu objektivně velká dobře čitelná písmena.
Onehdy jsem psal nějaký program v Basicu a napadlo mě, že 32 znakový font je zbytečně vzhledově velký a neúsporný a že by bylo vynikající mít v Basicu 64 znakový font, jež by přinesl uživateli na stejně velkou obrazovku 2x více informací, tedy by nebylo nutné tak často scrollovat a programování v Basicu by se stalo mnohem přehlednější a příjemnější. Nemohl jsem neoslovit nikoho jiného než Busyho a ten se ctí a k mé radosti tuto výzvu přijal.
Nejprve začal klasickou ZX ROM, kterou takto upravil, potom, přešel na MBčko, kde využil stránkování spodní paměti a Busy mohl připravil dvoubankovou verzi této ROM. Výhoda druhé banky je v rychlejším výpisu znaků než u jednostránkové verze.
Než se pustíme do samotného popisu obou verzí, je nutno předeslat, že bylo nutno učinit některé kompromisy, ať už z hlediska času (kódování by trvalo neúměrně dlouho) nebo výsledku (výsledek by přinesl jen nepatrné ovoce). Z hlediska mého zadání Busymu (mohu-li to takto říci) však byly hlavní cíle splněny. A to přinést programátorovi v Basicu větší 64 znakový komfort v těchto bodech: LIST, autolist a editační řádek. Prosím tedy uživatele, aby přimhouřil oko nad takovými, takřka neřešitelnými věcmi jako umístění znaku uvnitř atributu, příkaz SCREEN nepracující v módu 64 znaků, a pod. Na druhou stranu cíle se podařilo překonat a nové ROM nabízí příkazy AT a TAB v režimu 64 znaků.
Ale všechny ROM s aplikovanými 64 znakovými patchi jsou přes tyto drobné nedostatky a i přes mírné zpomalení stále velmi dobře použitelné v praxi. Pojďme ke konkrétním verzím. Obecně tedy platí to, že v balíku nenajdete ROM připravené na 64 znaků, ale pomocí patchů si upravíte vaši konkrétní ROM, kterou používáte. Má to jednu velkou výhodu, ROM zůstane zachována ve vaší konfiguraci.
Zevrubné popisy většiny patchů najdete přiloženy přímo v balíku od Busyho, níže následuje rychlý přehled funkcí.
1) verze pro 1 bankovou ROM (set64a2, set32a2, SetZxFnt)
2) verze pro 2 bankovou ROM (m64a4,m32a4)
3) podpůrný program (MakePatcher1)
4) použití 64 znakové ROM v praxi
5) sada ROMek
Ad 1) verze pro 1 ROM (programy "set64a2" a "set32a2")
Tato verze je určena buď pro napálení do ROM a tedy pro hardware, který nemá možnost stránkovat do spodní paměti od adresy 0 s povoleným zápisem, nebo pro hardware, který toto dokáže (např. MB-02+). Program "set64a2" vám tuto ROM napatchuje na 64 znaků a program "set32a2" vám tuto ROM vrátí do původního stavu. Programy spouštíte klasicky LOAD""CODE: RANDOMIZE USR 16388. ROM se natvrdo přepne na znaky 4x8 a už vůbec neumí vypisovat znaky 8x8. Současně se přepíše i font 8x8, takže aplikace využívající font z romky budou zobrazovat nesmysly. Pokud aplikujete "set64a2" na BSROM, nebude fungovat. Musíte nejdříve spustit "SetZXFnt", který vám v BSROM upraví font. Pokud již máte ROM patchnutou pro 64 znaků, "SetZXFnt" znovu nespouštějte, dojde k pádu systému.
Jednostránková verze je ve výpisu znaků pomalejší než dvoustránková, protože volného místa v jedné ROM není dostatečné množství pro optimalizaci rychlosti výpisu.
Ad 2) verze pro 2 ROM (programy "m64a4", "m32a4")
Tato verze je určena pro hardware, který podporuje ve spodní paměti zápis a přepínání alespoň dvou ROM bank (opět např. MB-02+:). Dvoustránková verze je na první pohled stejná jako jednostránková. Ovšem ke své práci využívá i druhou banku. A tudíž výpis znaků je o mnoho rychlejší než v jednostránkové verzi. Aktivuje se spuštěním "m64a4". Na rozdíl od jednobankové verze ("set64a2"), tato dvojbanková verze zachovává zpětnou kompatibilitu s režimem 32 znaků na řádek a to pomocí POKE 23611,204. POKE 23611,220 opět zapne 64 znaků. Další výhodou dvoubankové verze je, že si můžete určit, v jakém stavu chcete mít ROM po spuštění "m64a4" nebo po každém resetu či po příkazu NEW. Uděláte to tak, že zmíněný POKE napíšete před spuštěním "m64a4". Systém vám pak vždy bude nabíhat v požadovaném režimu znaků. Pokud potřebujete vaši romku z nějakého důvodu vrátit do původního stavu, spusťte buď program "m32a4" nebo rebootujte počítač.
Pro zajímavost, zde jsou rychlosti. Je měřena doba od přejetí kurzoru ze začátku pokusného řádku na jeho konec:
standartní ZX ROM:
20 vteřin
jednostránková verze "set64a2" 64 znaků:
32 vteřin
dvoustránková verze "m64a4" 64 znaků:
22 vteřin
dvoustránková verze "m64a4" 32 znaků:
21 vteřin
Ad 3) podpůrný program "MakePatcher1"
Jde o obecnou utilitku pro MB-02+ na úpravu romek pro uživatele MB-02+. Byla použita pro vytvoření "set32a2" a "m32a4". Rovněž ji lze použít například pro rozšíření BSDOSu do libovolné jiné ROM.
Ad 4) použití 64 znakové ROM v praxi
Jak už jsem uvedl výše, hlavním cílem tohoto mini projektu byla pohodlnější editace a programování v BASICu. Ovšem nadto lze 64 znaků využít i přímo v BASICových aplikacích, protože ROM umí AT a TAB na sloupcích 0-63. Pokud tedy chceme napsat takovou aplikaci a chceme ji sdílet s více uživateli, je vhodné pro její bezproblémovou funkčnost na její začátek umístit test, zda je ROM připravena v režimu 64 znaků. Pomocí PEEK 2597 si váš BASIC může zjistit, zda má k dispozici rozšíření na 64 znaků na řádek a pokud ano tak zda je napevno nebo zda je konfigurovatelné pomocí POKE 23611.
LET a=PEEK 2597
IF a=34 THEN PRINT "Nie je nainstalovane ziadne rozsirenie 64zn/r"
IF a=66 THEN PRINT "Nainstalovane rozsirenie 64zn/r napevno bez rezimu 32zn/r"
IF a=211 THEN PRINT "Nainstalovane rozsirenie 64zn/r (2-bankova verzia)"
IF a=32 THEN PRINT "Nainstalovane rozsirenie 64zn/r (1-bankova verzia)"
Tedy programy psané pro 64 znaků na řádek by měly obsahovat tento test.
Ad 5) Sada ROMek
Aby byl balíček kompletní, přidal jsem i sady ROMek a to jak ve verzích pro samotné ZXS (k napálení do ROM, pro emulátor, apod.), tak i ve verzích pro MB-02+ s přidaným BSDOSem. V adresáři s ROMkami najdete:
BSROM 118- Busym upravená ZX ROM, kromě nových speciálních příkazů opravuje i chyby ZX ROM. Více zde.
BSROM 140- Busym upravená ZX ROM, mladší a dokonalejší sestra BSROM 118. Více zde.
ZX ROM- upravená Busym pro BSDOS.
Všechny tyto ROMky si samozřejmě můžete patchnout na 64 znaků.