EN
Nmi menu 1.61
released: 5.3.2018
Bugfix: in 1.6 key B (jump to BASIC) did not work
Nmi menu 1.6
released: 28.2.2018
acknowledgements: Busy, Velesoft
installation: from BASIC command line use command NEW "nmi_menuRS", or NEW "nmi_menuZX", or just NEW+ nmi menu 1.6 file number
Dear MB-02+ users,
looking at my website, believe it or not that the last release of my nmi menu for MB-02+ (further reffered to as "nmi") took place in 2008. It's been ten years. And the very first nmi version had been released even in 2003, which is back 15 years from now. And it is just pure coincidence that I release a brand new version to this anniversaries now. And I am really happy about that because already back in 2008 I knew we would need a new version with new features and changes. And I worked on all of that throughout the years but far too discontinously that the work could hardly be presented. New versions had been emerging but since they were still kind of beta versions I was the only their user.
The new version 1.6 that you have just downloaded has still quite some things ahead to finish and work on but it is already good to use for the user and also contains lots of changes and bugfixes against the previous 1.35 fix. The time presses me these days so I am not planning further works on it in the near future, even though I am giving to-do list below in the text.
Before you venture into reading the news, the manual for 1.35 is still valid and you will be able to find it in zip for version 1.35 in the download section.
What's new in 1.6?
Well, let me start with cons first to sink at the very bottom and then only glimmering pros and social affirmations will follow, as the classics puts it.
1) it is newly dependent on MB02+ HW, say on its FDD controller
2) it was inevitable to create two versions, one for emulator RealSpec and the other for real ZXS
3) no more user partial configuration of nmi like in 1.35
And now the long awaited pros:
4) compatibility with BSROM140 and ZXROM added
5) freed up some space in BSROM and BSDOS by reorganising nmi routines
6) native Alasm as a development platform was replaced with Sjasm plus
7) compatibility with all existing patches
8) Profi Interface support- brings in lots of new features
9) new function: lightning fast reset "E", right away after nmi button press
10) new function: snap autoload
11) new screen and functions layout, auxiliary arrows added
12) new function: set current file
13) new function: disk catalogoue from current file
14) new keyboard routine by Busy
As you may see the pros overwhelm the cons as for quantity and later as you will see quality is concerned. Now, let's have a look on individual points already mentioned a bit closer.
ad 1) Why HW dependency of nmi on FDD controller? It increases reliability of return from nmi, or in other words, it currupts less memory. Each time nmi button is pressed the processor automatically puts two bytes on the current stock (no way avoiding it without a special hardware). Then you need to save A register because we need some paging in lower 16K and thus new A register value needs to be assigned. In the older nmi versions A register was also put on the stack with PUSH AF so the next two bytes of memory were corrupted. We found a way how to spare at least these two bytes on the stack with Velesoft. Ie. write them into one FDD port and then read them back at nmi quit. It results in non functional nmi on the MB02+ or other HW without FDD controller (yeah, but every MB-02+ has FDD controller, does'nt it?). Still good solution, I think, than corrupting the stack with another two bytes.
ad 2) Two nmi versions, one for RealSpec emulator, the other for real ZXS. And here it is when Velesoft's famous Profi Interface (further on reffered to as PI) enters the scene. Besides all, it is able to read values from port 23 which is SRAM paging port on MB-02+. If you do not know the port 23 value entering the nmi menu and you are in another page than 0 (which is the BSROM in standart circumstances) then there is no chance of good return from nmi, because nmi returns normally to SRAM page 0. The new nmi will read port 23, supposing that PI has been detected, and uses the value on nmi quit. Technically it was Velesoft's idea again, that MB-02+ can carry on paging on port 119 thanks to its incomplete addressing. So in the nmi code you will find just two places with OUT 119 instead of 23. RealSpec, the only emulator supporting MB-02+ cannot work with port 119 and that is the answer to the question why I made two versions. The RealSpec version remained port 23 and both nmi versions differ only in the two bytes. There is no limitation for RealSpec since it does not support PI anyway. You just have to pickup your version in the package.
ad 3) No more partial configuration of nmi like in 1.35. Alas, step back in user friendliness. In version 1.35 you could configure install pages and setup through BASIC. The new nmi configuration should be made differently taking into consideration enhanced user screens and new functions (see further in the text) so I left out the BASIC configuration, I am sorry.
ad 4) Compatibility with BSROM140 and ZXROM added. At the very long last. BSROM140 is here. I kept in my mind very long that my nmi should be able to work with the latest and the best ROM for MB-02+. All nmi routines were moved in a way they would be able to work with all ROMs for MB-02+. Not only nmi can work with BSROM140 but also BSROM118 and ZXROM. ROM type is being checked during nmi installation but not on every nmi entering. So if you load different ROM, you have to reinstall nmi menu (you would have to do that anyway since the ROM being loaded will have no routine connection with nmi). I wanted to be precised so as a bonus each nmi installation brings in three BSROM140 enhanced routines if BSROM118 or ZXROM had been detected. They are 128K reset (key "E"), jump to BASIC (key "B") and hardware reset (key "I"). Ie. also BSROM118 and ZXROM can use those three enhanced routines. Besides, there is a next bonus with ZXROM that you can fully use nmi with it. All nmi functions will be functional here. Of course, in ZXROM, from BASIC you will not be able to apply nmi functions like eg. "arrow up", "C in a circle" or two undocumented functions "!"= same as "I" in nmi, hw initialisation and "="= user defined routine call.
ad 5) Freed up some space in BSROM and BSDOS by reorganising nmi routines. In nmi 1.6 I lightened ROM and DOS, ie. nmi takes up less space in them, now. Current nmi has two pages and even here I reorganised routines from quite loaded page 1 to the page 2. From user's point of view it does not matter but for future I can work on nmi more easily.
ad 6) Native Alasm as a development platform was replaced with Sjasm plus. Finally, it caught me up too. I left ZX as a native development platform totally and plunged on PC. Advantage is huge. Notably, the first one means physical flexibility which Sjasmplus and PC brings me, I can code on my notebook sitting at the TV or elswhere. The second one means the translation protocol I get after code assembly. No other assembler on ZXS than the old MRS can offer this brilliant feature. I learned to work with it, consult it and together with the emulator's debugger it is an uncompetitive tool. Both mentioned features brings valuable time savings when every minute I, being nearly 44 and having a family, can invest my spare time for ZXS is perfect.
ad 7) Compatibility with all existing patches. This was painful in 1.35 and patches. They could not coexist, properly. I have repaired patches in the past already and now also nmi has been fixed. Nmi and all patches do not collide anymore.
ad 8) Profi Interface support- brings in lots of new features. We need to get into details a bit here. PI is a piece of hardware with my +2 Issue 3 and I never stop thanking for it to Velesoft. PI presence is detected in nmi and based on the detection result functions and parameters are being carried out and set. If PI is not detected some functions cannot be used at all, or their parameters will be limited.
PI info line
I wanted the user to have an immediate overview on PI state, so I added the third info line which is practically completely devoted to PI. Looks like this:
"PI:128K/no/R0/0/128/16/128"
now, let's rewrite this example to understand it better.
"PI:1/2/3/4/5/6/7"
Items 1-7 comprise complete PI settings.
Item 1= emulated machine, can be either 128K (128K)(this is the only mode where original register I raining is enabled), ZX Profi 1024 (Prof), Pentagon 1024 (Pent), Pentagon 128 (P128) or Scorpion 1024 (Scor). In all of these modes ZXS will not be raining.
Item 2= interface, can be either none (no), DivIde (Di), MB02 (MB) or TR-DOS (TR)
Item 3= ROM page (R0-R7)
From item 4 only numbers follow, ie. values read from ports:
Item 4= feature port
Item 5= memory port
Item 6= status port
Item 7= detect port
Such a way of display in items 4 and up has been criticised by Velesoft and I have to admit it could be clearer for the user, ie. use texts instead of numbers. But extra texts would take up precious space on the line so I left numbers there and redirect the user to the PI manual where they can study number and bits meanings.
If PI has not been detected, only "X" will be displayed instead.
PI and extra pages
Not only PI offers 1MB of memory divided into 64 pages but it also supports 4 Eastern clones, can turn on Divide mode, TRDOS, etc. I owed nmi compatibility with PI for long time, the old nmi could not work with all mentioned features. It worked only with 8 pages of ZXS 128 so it could not return well if you were in higher pages. New nmi can work with PI pages. There is a new function "set page" (you can still page with keys 0- 7), where you can enter page number of your wish. Newly linear page number 0- 7 or 0- 63 follows after "P" letter in the info line, it is separated from the #7FFD port value for better understanding. From 49152 you can page in any page and display it with the built-in Devastace monitor.
There is another problem of standart ZXS 128K linked to paging, ie. blocked paging. It might seem a trifle, that you can unblock the paging by reseting your machine, but you do not have to thanks to PI. Seemingly, PI can unblock blocked paging on #7FFD port. So I wrote a new function "unblock 7FFD" assigned to the key "J" on the main screen. If you happen to end up in the nmi or with the black screen, press SS. If you see a yellow border with a black stripe, it ensures you are in the nmi. But how about the black screen? Most probably, paging has been blocked. All you have to do is press J and the screen should appear again and paging has been unblocked.
PI and Esxdos
PE has solved me a problem of how to run Eastern soft on my trully Western machine. As an eager MB user I like Divide insofar it hosts Esxdos. But I even do not need Divide, since PI can emulate it 100%. Thanks to PI I can run Esxdos and enjoy and use quality Eastern software. There was a substantial problem with MB-02+ nim button and Esxdos. After it has been pressed while Esxdos was on I could have never return back to Esxdos. For those not familiar with PI, it has its own nmi button working only for PI. If you are in Esxdos and press PI nmi button you jump into Esxdos nmi menu. You jump off the nmi menu back to Esxdos. Nmi 1.6 can return to Esxdos even after MB-02+ nmi butten has been pressed. It required a special quit function, to be found under key "M". Trully, this quit is not 100% solved even with Velesoft. The jump back to Esxdos is quite complicated, PI needs to be set specially. Unfortunatelly, stack has to be used and the jump out routine takes up 19 bytes on it, which is horribly lot. There has been another quit in nmi, under key "H" which swicth off lower SRAM and page in ZX ROM. It is also placed on the stack and takes up only 9 bytes. This one is required eg. for game snaps which need to have 128K ROM for work. More info to be found in the original manual for 1.35.
Return from MB-02+ nmi to Esxdos will not be certain if it is BASIC to BASIC return, ie. from one ROM to another one. Let's realise, we return from BSROM to ZXROM and such a return does not have to be always reliable. The return from MB-02+ nmi will be correct in machone code, however. The main purpose of this new function, return to Esxdos, is, that it brings you the same nmi comfort for Esxdos programs like on MB-02+. There is another advantage also, that once Esxdos has been installed, you do not have to reinstall it each time you want to enter it but you just switch to it in MB-02+ nmi using key "M" (supposing esxdos has not been corrupted in the memory in the meantime). So if you want to swicth to Esxdos from MB-02+, just use nmi and quit under the key "M". As I already informed such quit in BASIC could be problematic under certain circumstances.
In the current firmware version PI supports 8 Divide machines. And the user can have Esxdos installed in any of these. Nmi supports manual setting to which Divide should the "M" key return (0- 7) in the setup where also with the key "M" you can set to which Divide you want to quit using the "M" key in the main menu.
PI and the port 23
There is another superb feature of PI. A value of port 23 will be read in on nmi entering and will be used on nmi quit. The user does not have to do anything, all neccessary steps are being made automatically. The last port 23 value is displayed on the third info line, too. Try to return from nmi back to eg. MB- Commander, it works without problems.
PI configuration
I wanted to make it but it has not been done at the end. I am speaking about PI configuration in nmi. I have thought it over but it's going to be rather lots of things involved so I may write PI configuration in the next nmi versions.
ad 9) New function: lightning fast reset "E", right away after nmi button press. I have owed this for years to Factor 6 who practically the only one in the whole nmi history expressed his wish for the new function. It is a tiny detail that you have to wait with key E until nmi displays the screen and menu starts to run. However, here it is. Now, you can use reset (key "E") right after several instructions after nmi button has been pressed, and the reset has become superfast.
ad 10) New function: snap autoload. Here is a super speciality. I supposed something like that could be written for nmi but it was only after this years's Speccy party we hold and my friend asked for it. The function tailor-made for ZX game addicts. The "G" key will load&run snap of your wish, be it Z80 or SNA. You are going to appreciate that especially during hours of gaming. But you need to know how to handle it. Another two settings in the setup are linked with it. These setting are precise and logical ones but in order to bring good functionality of snap autoload they are a bit sophisticated. The G snap autoload works basically in two modes. Automatic and manual. The automatic one sets the last saved snap as the current one for the autoload function. So if you save another snap it will become the current one. This automat can be levered in setup with key "K" to OFF by which manual method is levered to ON. In the manual mode using key "J" you can enter your own path to the desired snap file that you wish to become the current one for snap autoload function. It means with the manual mode you can autoload any snap placed on your disks. As already described, there is a lever between automatic and manual modes. Both of them cannot work together. Tha auto mode starts working only after any snap has been saved, otherwise manual mode is on. For both modes there works key "SS+J" in the setup where you can set types of nmi quit Q, H or M which are displayed at the end of the line. Those letters equal to quit types in the main menu. Q= standart quit with SRAM page 0 (or SRAM page detected by PI during nmi start), H= quit with switched of SRAM (eg. for programs working with 128K ROM only) and M= quit to Esxdos. Basically, press "G" and play the game. Summary: behaviour of the snap autoload key "G" can be influenced in the setup with certain keys. You enable automatic mode and disable manual (key "K"), then with key "J" for manual mode you input path (disk, dir, file) and as last you may select quit type with "SS+J".
ad 11) New screen and function layout, auxiliary arrows added. I realised it already in 1.35. New functions will come in the future and there is hardly space for them on one nmi screen. So I opened more pages for nmi menu in 1.6. The pages and their number and contents are well defined in the nmi code in the form of a table. One screen can have up to 28 functions. Nmi has currently 32 functions meaning some of them has been placed to the second screen, already. You move between pages with arrows left/ right. Such a new conception enables to reorganise individual screen items/ functions within the screen/s, you can have the same functions on more nmi screens, assign individual functions with your own letters/keys. Each nmi screen has its own centered heading where left or right from it you find arrows which guides you to which direction you may want to browse between screens. It has all been done and prepared. The only things that has not is that the user cannot normally reorganise this sctructure and make it user-friendly for themsleves. Nmi 1.6 has been internally prepared for it as opposed to 1.35. Yet some easy tool I need to code for the user to handle all of these nmi screen reorganisation. (But yes, it is not hard at all to do it already now in the nmi source code where you can read description of the simple structure and where you can create your own nmi screen structure. Look for the text SCREENS, or write me should you wish to organise nmi items and screens according to your wish).
ad 12) New function: set current file. You can choose current file number with key "T". It is useful for some games that need load cursor placed on the file being loaded during game position load.
ad 13) New function: disk catalogoue from current file. And you can also carry out disk catalogue starting from the current file. Equals to BASIC command "COPY."
ad 14) New keyboard routine by Busy. I cast the remnants of my creative genius on replacement of the keyboard routine. True, the old one was written from ROM, read the keys correctly, but autorepeat and sound were missing and the key had to be released first in order to display it (oddly weird, isn't it?) That's all gone now. The keyboard reading routine is the same as in MB Commander, has been written by Busy which itself is quality assurance and should work MRS alike. It can do autorepeat and also key echo was added, which can be turned off in setup. The cursor is still missing. Not that it is too hard to program it but I need to correct the PRINT routine taken from ZXM magazín first so that it can work properly with columns and lines and then I can add also cursor for input line. If you press SS in the main screen the border turns yellow with black stripe. I left this feature in the nmi just in case 128K paging has been blocked and you screen is black after nmi button is pressed. If after pressing SS your border turns yellow, you know your computer has not frozen but you find yourself in the nmi menu. And we already did spoke about unblocking blocked paging through PI.
So, what will be next in the nmi menu??
1) add write protect support also for EH 1.18
2) reorganise first three info lines->space savings can bring new information
3) ability to configure PI completely and enabling quit with new configuration
4) ability to change IM mode and registers and enabling quit with new IM mode and registers
5) PRINT routine- add columns (0- 41) and lines, now missing
6) keyboard routine- add cursor
7) mute the second AY chip
8) save setup+ possibility to arrange nmi menu for the user
9) setup and snap info screen move a line down
10) it will be necessary to add third SRAM page for nmi
ad 1) as you know, in the last version of MB-02+ IDE driver Easy Hdd 1.18 Busy and me created a new disk write protection system. You may now protect individual disks and write protection info does not vanish after your cumputer has been turned off. We could write protect always all master or slave disks in the older EH versions and we lost the write protect info after computer turn off. In nmi 1.6 write protect functionality for EH 1.18 is missing. I know how to do it, but no time.
ad 2) I would like to make upper three info lines more brief in order to get on them more info linked with planned new nmi features. I do not want introduce more then three info lines.
ad 3) if features and settings of PI have been changed then nmi would have to be able not only to quit with such changed PI parameters, but also backup the original PI settings, also be able to apply settings that PI has after computer start, also to solve info to the user that PI has been changed. It is quite a good portion of work.
ad 4) it is not big problem to change all of these. I would like to change registers using the built in Devastace monitor. But again it is neccessary to solve quit with the changed registers and interrupt mode, restore registers to original state piror to changes, let the user know somehow. After registers has been changed, which of them display in Devastace, old ones, or the noew ones? Again, all of these has to be thinked over and programmed.
ad 5) the PRINT routine for 41 characters a line is still the old one (and a good one) copied from ZXM. But the routine does not directly support printing into columns and lines. And I have to look for exact text placements which is rather complicated. Moreover to program the edit line cursor would be complicated too if the routine does not support columns directly. So I would like to add column/ lines support into the PRINT routine.
ad 6) see 5
ad 7) key "I" mutes the AY chip apart from others. But sometimes the second AY chip stays on and hearable in my ZXS fitted with Turbosound FM. AY switching is realised with OUT 65533,255 (which is the original AY) and 254 which is the second Turbosound or Turbosound FM AY. You cannot just switch in the second AY and mute it. First you have to find out which AY is active and then return to it. And it all also takes some time to invent the right way and code it.
ad 10) you find XLS file in the zip which schematically describes the nmi menu structure for my needs and for your interest. Here are print screens from it:
So that's all about the new version. I would love to have kind of snap management in it, or kind of pseudo multitasking on ZXS. Ie. you have number of various snaps on ZXS (user programs, games, etc.) and you switch between them using nmi menu. But will always 128K snaps do? We have extra SARM memory in MB-02+ and another 1MB of memory in PI. All of these could be solved and handled. The substantive obstacle preventing me from starting the snap management or task manager if you like it is unreliability of the NMI on the real ZXS. As you may know return from nmi is not possible if the stack pointer is under #4000, if the stack is used for data or if we reached stack's end on nmi button press. And the practical life shows it often that the return from nmi menu fails. What to do witch such a task manager if eg. one third of tasks/snaps won't run?
Ask you queries at your will, I am glad to help and answer. Your ideas are welcomed also although I do not guarantee they will become reality, at the end. I have already described what will be my next targets in future.
Several pictures of nmi 1.6 are here..
If you want to change nmi menu code by yourselves just kindly, inform me about it.
Yours Hood
P.S. it is unbelievable how much time is taken up by just writing manuals and readme files. English version of this manual is behind me, so, hooray...:))
CZ
Nmi menu 1.61
vydáno: 5.3.2018
Opraveno: v 1.6, nefungovala klávesa B- výskok do Basicu.
Nmi menu 1.6
vydáno: 28.2.2018
poděkování: Busy, Velesoft
instalace:z BASICového řádku příkazem NEW "nmi_menuRS", nebo NEW "nmi_menuZX", nebo NEW+ číslo souboru nmi menu 1.6
Vážení MBčkáři,
když se tak dívám na svůj web, tak tomu nemůžu uvěřit, ale v roce 2008 bylo poslední vydání mého nmi menu (dále jen nmi) pro MB-02+. To je deset let. A úplně první verze nmička byla vypuštěna dokonce již v roce 2003, což je už 15 let. A zcela náhodou se tedy stalo, že v těchto kulatých výročí vydávám další verzi. A jsem tomu velmi rád, protože v podstatě od roku 2008 jsem věděl, že je potřeba v nmi menu některé věci naprogramovat nebo změnit a pracoval jsem na tom, ovšem natolik přerušovaně, že nešlo nikdy o dílo hodné zveřejnění. Vznikaly další verze, které jsem však používal jen já, protože ve svém vývoji šlo v podstatě pořád o betaverze.
Nové verzi, kterou jste si nyní stáhli, s číslem 1.6, stále ještě jako autor dosti dlužím, ale uživatelsky již obstojí a protože obsahuje dost změn i oprav chyb oproti 1.35x, myslím, že si již zaslouží, aby byla uvěřejněna. V tuto chvíli mě začíná tlačit čas, takže další úpravy zatím neplánuji, i když o tom, co bych rád do nmička doplnil píšu níže.
Než začnete číst novinky, pořád v podstatě platí manuál pro verzi 1.35, který naleznete v zipu k verzi 1.35 v downloadu.
Co je nového ve verzi 1.6?
No, začnu spíše negativními věcmi, abychom se odpíchli ode dna, a následovat budou už jen samá pozitiva a sociální jistoty, řečeno ústy klasika.
1) nově je závislá na HW MBčka, resp. na jeho FDD řadiči
2) bylo třeba vytvořit dvě verze, jednu pro emulátor RealSpec, druhou pro reálné ZXS
3) není možnost částečné uživatelské konfigurace jako byla ve verzi 1.35
A teď ta pozitiva:
4) přidána kompatibilita s BSROM140 a se ZXROM
5) bylo uvolněno místo v BSROM i BSDOSu přeskládáním rutin nmička
6) jako vývojové prostředí byl opuštěn spektrácký Alasm, a zdroják byl upraven do Sjasmu plus
7) zprovozněna kompatibilita se všemi existujícími patchi
8) podpora Profi Interface- přináší celou řadu vymožeností
9) nová funkce rychlý reset "E" bezprostředně po stisku nmi tlačítka
10) nová funkce: autoload snapu
11) nové uspořádání položek/funkcí menu do obrazovek, svítí pomocné šipky
12) nová funkce: nastavení aktuálního souboru
13) nová funkce: katalog disku od aktuálního souboru
14) nové čtení klávesnice dle Busyho
Vidíte, že ta pozitiva co do kvantity a jak později uvidíte i kvality, převažují. Teď si vezmeme ony body popořadě a něco si k nim řekneme.
ad 1) Proč hardwarová závislost nmi na jeho FDD řadiči? Je to kvůli větší spolehlivosti návratu z nmi menu, neboli menší míře poškození paměti. Při stisku nmi tlačítka se automaticky (bez speciálního hw to nelze udělat jinak) dva bajty návratové adresy ukládají na zásobník. Dále je potřeba někam uklidit registr A, protože po stisku nmi tlačítka potřebujeme přestránkovat spodních 16K a zadat tedy novou hodnotu právě do registru A. Ve starších verzích nmi se reg. A ukládal znovu na zásobník pomocí PUSH AF, a byly tak zničeny další dva bajty paměti. Našli jsme s Velesoftem způsob, jak alespoň tyto dva bajty uchránit- registr A zapisujeme do jednoho z portů FDD řadiče a při návratu z nmi si jej odtud vyzvedáváme. Z toho plyne, že nmi vám nepojede na Mbčku nebo hw bez FDD řadiče (každé Mbčko má však FDD řadič, ne?). Podle mě ale stále lepší, než dva přepsané bajty na zásobníku.
ad 2) Dvě verze nmi, jedna pro emulátor RealSpec a druhá pro reálné ZXS. A tady nám do hry vstupuje již slavný Velesoftův Profi Interface (dále jen PI). Má, kromě jiného, i tu super vlastnost, že vám umožní číst poslední hodnotu portu 23, což je stránkovací port připínající od adresy 0 16KB stránky SRAMky Mbčka. Pokud tuto hodnotu neznáte a jste při vstupu do nmi v jiné stránce než 0 (což je při normálním provozu BSROM), tak nevykonáte správný návrat z nmi, které se běžně vrací do SRAM stránky 0. Nové nmi si na začátku vyčte hodnotu portu 23, pokud je samozřejmě detekován PI, a s touto hodnotou se pak vrací z nmi. Technicky to opět vymyslel Velesoft, díky neúplné adresaci portu 23 v MBčku lze outovat stejně úspěšně i na portu 119. Takže v kódu nmi jsou právě dvě místa s outem na port 119 místo 23. Jediný emulátor na PC podporující MBčko RealSpec, ale neumí s portem 119 pracovat a tedy proto vznikla druhá verze nmi právě pro RealSpec, ta má stále port 23, obě verze se liší tedy pouze ve dvou bajtech. Pro RealSpec to nepředstavuje žádné omezení, protože PI stejně nepodporuje. Akorát si v balíku musíte tu správnou verzi pro vás najít.
ad 3) Není možnost částečné konfigurace jako byla ve verzi 1.35. Tady trošku, bohužel, uživatelská přívětivost trpí. Ve verzi 1.35 jste si mohli přes Basic nakonfigurovat, kam se bude nmi instalovat a také nastavit setup. Protože však by se konfigurace nmi měla dělat jinak, i v návaznosti na vylepšení vzhledu nmi stránek s funkcemi (viz. dále), tak jsem od Basicové konfigurace v novém nmi upustil. Tak se nezlobte.
ad 4) Přidána kompatibilita s BSROM140 a se ZXROM. Konečně. BSROM140 je tady. To mi dlouho leželo v hlavě, že bych nmi měl naučit spolupracovat s touto vylepšenou a nejnovější a taky nejlepší ROM pro Mbčko. Rutiny nmi byly přesunuty tak, aby vyhověly všem ROM spolupracujícími s MBčkem, tedy zmíněnou BSROM140, ale rovněž s BSROM118 i ZXROM. Typ této ROM je kontrolován pouze při instalaci nmi, nikoliv při každém vstupu do nmi. Takže pokud si nahrajete jinou ROM, musíte nmi přeinstalovat (což byste museli tak jak tak, protože vaše ROM pravděpodobně nebude provázána s rutinami nmi). Protože jsem toto chtěl mít precizní, tak jako bonus se při detekci BSROM118 a ZXROM nainstalují i lépe napsané a opravené rutiny z BSROM140 a to pro 128K reset (klávesa "E"), skok do Basicu (klávesa "B") a reset hardware (klávesa "I"). Tzn. i BSROM a ZXROM budou moci tyto tři vylepšené rutiny používat. U ZXROM je zde navíc další bonus a to ten, že nmi můžete s touto ROM používat v plném rozsahu. Všechny nmi funkce budou i se ZXROM funkční. Samozřejmě z BASICu vám v ZXROM nepůjdou vyvolat nmi funkce, např. "šipka nahoru", "C v krouzku", nebo dvě nedokumentované funkce "!"= jako "I" v nmi menu, inicializace hw a "="= volání uživatelské rutiny.
ad 5) Bylo uvolněno místo v BSROM i BSDOSu přeskládáním rutin nmička. Ve verzi 1.6 jsem odlehčil ROM a BSDOSu, tzn. nmi nyní zabírá v ROM i BSDOSu méně místa. Současná verze nmi zabírá dvě stránky, a i zde jsem udělal přesuny kódu z přetížené stránky 1 do stránky 2. Užívatelsky je to všechno sice jedno, ale do budoucna se mi bude nmi o něco lépe programovat.
ad 6) Jako vývojové prostředí byl opuštěn spektrácký Alasm, a zdroják byl upraven do Sjasmu plus. Nakonec i mne to dostihlo a opustil jsem zcela vývojovou platformu ZXS a vrhnul se na PC. Výhody jsou samozřejmě nesporné a obrovské. Zmíním dvě největší: fyzickou flexibilitu, která prostě Sjasmplus a PC nabízí, kódovat můžu na notebooku, u televize nebo jinde na klíně. Tou druhou je zpětný překlad, kterou kromě stařičkého MRS žádný assembler na ZXS nenabízí. Naučil jsem se pracovat se zpětným překladem, nahlížet do něj, a ve spolupráci s debuggerem v emulátoru jde o bezkonkurenční nástroj. Obě dvě výhody přináší drahocennou časovou úsporu, kdy vzhledem k mému věku a rodině ja každá volná minuta, kterou můžu mimo rodiny investovat do vývoje na ZXS, dobrá.
ad 7) Zprovozněna kompatibilita se všemi existujícími patchi. Toto byla velká bolístka verze 1.35 a i patchů, neuměly koexistovat navzájem. Patche jsem již opravil v minulosti, a nyní je upraveno i nmi. Prostě užívejte všech patchů a nového nmi dosyta a bez kolizí.
ad 8) Podpora Profi Interface- přináší celou řadu vymožeností. Tady se potřebujeme zastavit déle. PI je prostě super kus hw k vaší +2, Issue 3 a nikdy za něj nepřestanu Velesoftovi děkovat. PI je v nmi detekováno a podle toho se nastaví funkce a hlídají parametry. Pokud není PI detekována, daná funkce nepůjde vyvolat, případně se omezí hodnoty parametrů.
Info o PI
chtěl jsem, aby měl uživatel okamžitý přehled o stavu PI, proto jsem přidal do nmi třetí info řádek, který je v podstatě celý věnován PI. Vypadá přibližně takto:
"PI:128K/no/R0/0/128/16/128"
přepišme si tento příklad tak, abychom si ho lépe vysvětlili.
"PI:1/2/3/4/5/6/7"
Položky 1-7 obsahují veškeré nastavení PI.
Položka 1= emulovaný stroj, může být buď 128K (128K)(v tomto módu jako jediném běží pršení registru I), ZX Profi 1024 (Prof), Pentagon 1024 (Pent), Pentagon 128 (P128) nebo Scorpion 1024 (Scor). V těchto všech módech vám už ZXS pršet nebude.
Položka 2= interface, může být buď žádný (no), DivIde (Di), MB02 (MB) nebo TR-DOS (TR)
Položka 3= číslo ROM sady (R0-R7)
A od položky 4 následují vždy jen čísla, čili hodnoty vyčtené z portů:
Položka 4= feature port
Položka 5= memory port
Položka 6= status port
Položka 7= detect port
Tento způsob výpisu u položek 4 a výše je Velesoftem kritizován a musím uznat, že by mohl být přehlednější, tzn. místo čísel textové vyjádření. Ale texty navíc by zabraly drahocenný prostor na řádku, tak jsem ponechal čísla a odkazuji váženého uživatele na manuál k PI, kde si význam čísel a bitů nastudujete.
Pokud není PI detekován, zobrazí se místo všech těchto informací jen "X".
PI a stránky navíc
Nejen, že vám PI nabízí 1MB paměti, rozdělených do 64 stránek, ale podporuje 4 východní klony, umí režimy Divide, TRDOS, a jiné. Kompatibilitu s PI jsem nmi dlužil dlouho, staré nmi si s tím vším neumělo poradit. Znalo jen 8 stránek stodvacetosmičky, takže se neumělo správně vrátit, když jste byli ve vyšších stránkách. Nové nmi umí pracovat se stránkami PI. Vznikla nová funkce "set page" (stále můžete měnit stránky 0-7 přes číslice), kde si zadáte libovolnou stránku. Nyní se vám zobrazuje v info řádku číslo stránky lineárně 0-7 nebo 0-63 za písmenem "P", tato informace je oddělena od hodnoty portu #7FFD, pro lepší přehlednost. Nastránkujete si takto co chcete a od 49152 si v zabudované Devastaci obsah prohlédnete.
Se stránkami se pojí ještě jeden poměrně častý problém klasického ZXS 128K, totiž zablokované stránkování. Je to sice drobnost, že když se vám stránkování zablokuje, musíte ZXS resetovat, ale díky PI tato nutnost odpadá. PI totiž umí odblokovat zablokované stránkování na portu #7FFD, takže jsem napsal novou funkci "unblock 7FFD", přidělená pod klávesu "J" na hlavním screenu. Když se vám stane, že skončíte v nmi a máte černý obraz, stiskněte SS. Pokud se vám objeví žlutý okraj s černým pruhem, ujistí vás to, že jste v nmi. Ale co ten černý obraz? Pravděpodobně máte zablokované stránkování. Nyní stiskněte J a obraz by se vám měl rozsvítit a stránkování odblokovat.
PI a Esxdos
PI mě vyřešil problém přístupu k východnímu softu. Jsem zarytý Mbčkář a Divide mám rád pouze proto, že na něm existuje Esxdos. Jenže díky PI Divide vůbec nepotřebuji, PI umí Divide 100% emulovat. Zkrátka díky PI mohu spouštět Esxdos a tedy se kochat a využívat východní kvalitní soft. Zásadní problém, který mi vadil byl ten, že když jsem byl v Esxdosu, tak jsem se po stisku nmi tlačítka na MBčku už nemohl zpět do Esxdosu vrátit. Kdo to neví, tak PI má svoje nmi tlačítko, fungující ovšem jen pro PI. Takže jste v Esxdosu, stisknete nmi na PI a dostanete se do nmi menu Esxdosu. Vyskočíte z nmi a jste v Esxdosu. Verze nmi 1.6 se umí při pobytu v Esxdosu po stisku nmi tlačítka na MBčku vrátit do Esxdosu. Musel se pro to napsat speciální výskok, který najdete pod klávesou "M". Po pravdě, toto stále nemám zcela dořešené i s Velesoftem. Výskok je poměrně komplikovaný, musíte pro něj PI speciálně nastavit. Bohužel nelze jinak, než to udělat přes zásobník a v aktuální verzi tak výskok na zásobníku zabere 19 bajtů, což je poměrně hodně. V nmi byl a je přítomen další výskok pod klávesou "H", který vám umožní odepnout SRAMku a dole nastránkovat ROM v ZX. Je také na zásobníku a zabírá 9 bajtů. Ten je nutný např. pro snapy her, které potřebují pro svůj běh 128K ROM. Více informací je v původním pdf manuálu k verzi 1.35.
Návrat z mbčkového nmi do Esxdosu však bude nejistý, pokud se jedná o návrat z BASICu do BASICu, tedy z jedné ROM do druhé. Uvědomme si, že se vracíme prakticky z BSROM do ZXROM a takový navrat nemusí být spolehlivý. V rámci strojáku je návrat do Esxdosu z mbčkového nmi v pořádku. Hlavním cílem této nové funkce, tedy návratu do Esxdosu, je ten, že i v programech spuštěných Esxdosem máte stejný nmi komfort, jako na MBčku. Jako další plus je ten, že když Esxdos jednou do PI nainstalujete, máte jej tam, pokud nedošlo k jeho poškození, a nemusíte jej instalovat znovu. Takže když se chcete přepnout do Esxdosu, neinstalujete ho znovu, ale použijte nmi 1.6 a výskok "M". Jak jsem již psal, tento výskok v rámci BASICu může být, za určitých okolností, problematický.
Protože PI podporuje v současné verzi hned 8 zařízení Divide, může mít uživatel nainstalován Esxdos ve kterémkoliv z nich. Toto nmi také podporuje, jde o manuální nastavení pořadového čísla Divide (0-7) v setupu. Zde si klávesou M nastavíte do jakého Divide chcete klávesou M z hlavního menu vyskakovat.
PI a port 23
Další vymoženost PI. Hodnota portu 23, tedy poslední připnutá SRAM stránka před vstupem do nmi, bude načtena a s touto hodnotou bude proveden i návrat z nmi. Uživatel se o nic nemusí starat, vše je provedeno automaticky. Poslední hodnota portu 23 je navíc zobrazena na třetím informačním řádku. Zkuste se s novým nmi nyní vrátit např. zpět do MB-Commanderu, jde to bez problémů.
Konfigurace PI
chtěl jsem, ale nakonec jsem to nezvládl. Mluvím o konfiguraci PI z nmi menu. Vše mám promyšleno, ale bude to poměrně obsáhlé, takže konfiguraci PI snad dopíšu do některé z dalších verzí nmi.
ad 9) Nová funkce rychlý reset "E" bezprostředně po stisku nmi tlačítka. Toto jsem dlouhá léta dlužil Factorovi 6, který prakticky jako jediný za celou historii nmi vyjádřil přání po nové funkcionalitě. Je to sice malý detail, ale vadilo mu, že nemůže resetovat spektráče pomocí klávesy E ihned, ale musí počkat, až se mu vykreslí obrazovka a nmi menu naběhne. Tak tedy, Factore, zde to máš. Věz, že reset klávesou E můžeš udělat pár instrukcí po stisku nmi tlačítka, tedy bleskurychle.
ad 10) Nová funkce autoload snapu. Tady máme jeden špek. Něco takového jsem tušil, že by bylo výhodné napsat, ale až kamarád mě letos na naší Speccy party k tomu ponoukl. Funkce na míru šitá pařanům. Klávesa "G" vám automaticky nahraje a spustí navolený snap, ať jde o Z80 nebo SNA. Oceníte to zejména při dlouhodobém paření her. Nutno vědět, jak s tím zacházet. S touto funkcí se pojí v setupu dvě další nastavení. Která jsou sice precizní a logická, nicméně mírně složitější v zájmu udržení dobré užitnosti autoloadu snapu klávesou G. Ten funguje v podstatě v jakémsi automatickém a manuálním módu. Automatický spočívá v tom, že po sejvnutí snapu se tento zapamatuje a po stisku klávesy G se vám bude vždy nahrávat. Sejvnete další snap, např. další pozici ve hře, a tento se opět bude nahrávat po stisku G. Tento automat ale můžete v setupu vypnout klávesou K do polohy OFF, čímž se přepnete do manuálního režimu, kde už si klávesou J navolíte cestu k vámi požadovanému snapu. Ten slouží pro případy, že chcete automaticky spustit jiný snap, než jste sejvli. Přepínač automat/manuál funguje buď a nebo, nikdy současně. Automat nabíhá až po sejvnutí prvního snapu, jinak funguje jen manuál. Pro automat i manuál si pomocí SS+J navolíte typ výskoku do snapu, Q, H nebo M, svítí na konci řádku. Tato písmena odpovídají i funkcím výskoků z hlavního nmi. Q= klasický výskok do stránky 0 (v případě PI do posledně detekované), H= výskok s odeplou BSROM (např. pro programy vyžadující 128K ROM) a M= výskok do Esxdosu. Prostě stisknete "G" a hned paříte. Shrnutí: chování autoloadu snapu "G" ovlivníte v setupu pomocí patřičných kláves. Buď povolíte autoload právě sejvnutého snapu a zároveň zakážete manuál, nebo povolíte manuál, čímž zakážete automat (vše klávesou K), dále si v setupu zvolíte klávesou J cestu k manuálu (disk, adresář, soubor) a jako poslední si volíte typ výskoku klávesami SS+J.
ad 11) Nové uspořádání položek/funkcí menu do obrazovek, svítí pomocné šipky. Toto jsem si uvědomil již ve verzi 1.35. Přibývá funkcí, které se už nevejdou na jednu stránku a proto jsem zavedl více stránek. Jejich definice a uspořádání jednotlivých funkcí je v kódu nmi ve formě tabulky. Jedna stránka může mít maximálně 28 funkcí. V současnosti jich má nmi 32. Tzn. některé jsou již umístěny v další stránce. Mezi stránkami se pohybujete šipkami vlevo/vpravo. Nová koncepce stránek umožní funkce přeskládat v rámci stránky i mezi stránkami, můžete mít stejné funkce na více stránkách, funkcím přiřadit různá písmena. Každá stránka má vycentrovaný nadpis, vedle kterého napravo a nalevo svítí šipky, abyste věděli, kde stránky končí a kam se dále šipkami vlevo/ vpravo pohnout. To vše je připravené. To co není hotové je, že běžně uživatel nemůže ovlivnit sestavení funkcí, jejich písmena, pořadí na stránce a pořadí stránek. Vnitřní uspořádání funkcí a stránek je na to v nmi 1.6 na rozdíl od nmi 1.35 vnitřně připraveno. Jen musím vymyslet a naprogramovat, jak nejjednodušeji to může uživatel měnit. (ano, je to hračka udělat přes zdrojový kód, kde je tato jednoduchá organizace popsána, a kde lze vytvořit strukturu položek nmi. Hledejte text SCREENS, nebo mi napište, pokud byste si chtěli položky a obrazovky přeskládat).
ad 12) Nová funkce nastavení aktuálního souboru. Nově si můžete zvolit pomocí klávesy "T" číslo aktuálního souboru. Hodí se to zejména pro některé hry, které při nahrávání pozice potřebují mít load kurzor na daném souboru.
ad 13) Nová funkce katalog disku od aktuálního souboru. A nově si též můžete provést katalog disku od aktuálního souboru. Shodné s Basicovým příkazem "COPY."
ad 14) Nové čtení klávesnice dle Busyho. Těsně před dokončením jsem poslední síly svého génia vrhnul na přepracování klávesnicové rutiny. Ta stará byla sice opsaná z ROM a četla spolehlivě, ale chyběl autorepeat, ozvučení a klávesa se musela nejprve pustit, aby se zobrazilo písmenko (divné, že?). A toto všechno je pryč. Klávesová rutina je stejná jako v MB Commanderu, je od Busyho, což je vždy záruka kvality a měla by fungovat stejně jako v MRS. Umí autorepeat, a přidal jsem ozvučení, které je opět vypnutelné v setupu. Stále chybí kurzor. Ne že by bylo složité jej naprogramovat, ale potřebuji v tiskové rutině ze ZXM dopsat pořádnou práci se sloupci a řádky, pak bude i kurzor. Pokud v základním menu stisknete SS, změní se okraj na žlutý s černým pruhem. To jsem v nmi ponechal pro případ, že se zablokuje 128K stránkování a máte po stisku nmi tlačítka jen černou obrazovku. Pokud stisknete SS, zežloutne vám okraj a vy víte, že vám nevytuhnul počítač, ale jste v nmi menu. O funkci odblokování stránkování pomocí PI jsme se bavili už výše.
Co dál s nmi menu?
1) přidat podporu write protectu pro EH 1.18
2) přeorganizovat výpis info textu v prvních třech řádcích->úspora místa= nové informace
3) možnost konfigurace všech vlastností PI a umožnit návrat s těmito novými vlastnostmi
4) umožnit změnit mód IM a registry a rovněž umožnit návrat se změněnými IM a registry
5) tisková rutina- doplnit sloupce tisku (0- 41) a řádku, nyní chybí
6) klávesnicová rutina- doplnit kurzor
7) ztišení druhého AY
8) save setupu+ možnost pro uživatele si menu uspořádat
9) obrazovky setupu a info o snapu posunout o řádek níže
10) bude již nutné přidat pro nmi menu třetí SRAM stránku
ad 1) jak jistě víte, v poslední verzi IDE driveru pro MBčko Easy Hdd 1.18 jsme s Busym vytvořili novou ochranu disků proti zápisu. Chránit lze i jednotlivé disky a tato informace je uložena v bootu každého disku, takže zůstává zachována i po vypnutí počítače. U starších verzí Easy Hdd jste mohli chránit vždy jen celou řadů disků master nebo slave a po vypnutí počítače jste o informaci o ochraně disků proti zápisu přišli. V nmi 1.6 chybí podpora ochrany proti zápisu pro EH 1.18. Vím jak na to, ale časově jsem to již nezvládl.
ad 2) chci první tři info řádky uskrovnit, aby se vešlo více informací spojené s plánovanými novými vlastnostmi nmi. Více než tři řádky zavádět nechci.
ad 3) pokud změníme vlastnosti či nastavení PI, pak je třeba umět s nimi vyskočit z nmi, také zálohovat ty původní, umět aplikovat vlastnosti PI, které má po resetu počítače, a vyřešit výpis o všech těchto změnách a nastaveních uživateli. Což není málo práce.
ad 4) změnit to vše není až takový problém. Registry bych chtěl měnit pomocí vestavěné Devastace. Ale opět je potřeba vyřešit návrat z nmi se změněnými registry a módem přerušení, obnovu registrů do původního stavu, dát uživateli vědět o statusu změn. Po změně registrů skákat do Devastace s jakými registry, novými, starými? Toto vše je potřeba promyslet a naprogramovat.
ad 5) tisková rutina pro 41 znaků na řádek je stále ta stará (a dobrá) opsaná ze ZXM. Ale tato rutina přímo nepodporuje tisk sloupců a řádků. A já musím poměrně složitě hledat pozice výpisů a ladit jejich přesné umístění. Navíc naprogramovat kurzor pro editaci by bylo za stávajícího stavu print rutiny zbytečně složité. Takže bych rád do tiskové rutiny přidal i sloupce a řádky.
ad 6) vychází z bodu 5
ad 7) klávesa "I" mimo jiné ztišuje AYčko. Ale občas mi v mém ZXS s Turbosoundem FM zůstane viset zvuk i u druhého AY. AYčka se přepínají pomocí OUT 65533,255 (což je původní AYčko ZXS) a 254 což je druhý AY TurboSoundu, případně TurboSoundu FM. Nejde jen přeoutovat na druhé AY a zvuk ztišit. Musíte nejprve zjistit, která AY je aktivní a do toho se pak vrátit. Taky to zabere nějaký čas to vymyslet a naprogramovat.
ad 10) v zipu najdete i XLS soubor, kde je schematicky popsána struktura nmi menu, pro moje potřeby a pro vás, pro zajímavost. Zde jsou výřezy z onoho XLS souboru:
To je tak v kostce vše o nové verzi. Moc by se mi líbil i jakýsi management snapů, neboli pseudo multitasking na ZXS. Tzn. měli byste x snapů s rozdělanou prací na ZXS (uživatelské programy, hry, atd.) a mezi nimi byste se přepínali pomocí nmi. Jenomže budou 128K snapy vždy stačit? Máme zde navíc SRAMku MBčka a u PI další 1MB paměti navíc. Toto vše by šlo ošetřit a vymyslet. Největší překážkou, pro kterou se do managementu snapů, chcete-li do task managera, pouštět nechci, je ale spolehlivost, resp. nespolehlivost nmi přerušení na reálném ZXS. Jak víme, návrat z nmi není možný, pokud je zásobník pod #4000, pokud se zásobník používá pro data, nebo pokud se v momentě stisku nmi tlačítka nacházíme na jeho okraji. A v praxi se mi dost často potvrzuje, že návrat z nmi se nepovede. Co si pak počít s takovým task managerem, když např. třetina snapů napůjde spustit?
Dotazy vznášejte dle libosti, rád pomohu a odpovím. Náměty rovněž vítány, i když nezaručuji jejich relizaci. Do čeho se chci v budoucnu pouštět, víte.
Pár obrázků nmi 1.6 máte tady..
Pokud budete kód nmi menu měnit, tak mě o tom laskavě informujte.
Váš Hood
P.S. je neuvěřitelné, kolik to psaní manuálů a readme souborů zabere času. A to mě čeká po korekci české verze ještě překlad do AJ:((