C-Net Week #24
28 июня 2007 |
|
Doors kick start - A new OS for the Spectrum - DoorsAQUA 7.1, or not to be? Breeze razyasnyaet.
So we have reached the final, so to speak, the final Part of our small Publication CWEEK # 24. And lastly, I left a bit tasty;) so say writing for the mind: D So meet ... DoorsAQUA 7.1 Many have probably lost all faith and hope in anticipation of such a miracle as "Doors OS". Yes, it is really the biggest unfinished platform zx-spectrum. Not want Of course, excuses but development was delayed due to number of reasons: it's corny lack of knowledge at the time but the number of new ideas, and more another. Taken together, starting since 1995, forcing more than once revise the core, yes and the whole system from scratch, and the time-it took ... Recent developments differ koordinalno way from all earlier. Previously, the main goal pursued GUI - Windows. No, I'm not going abandon this idea quite simply it's a bit goes by the wayside. But about all under the lock of. It all started not so long ago, To be more exact, somewhere 1-May:) when I AlCo wrote the question did not lying around under the driver HDST ATM, I would like to source new drivers under HDST ". HDST - this is my softinkoy (HardDist Search'Test) which by means of a connected Driver tries to HDD find attached HardDisk and CD-Rom, if The operation is successful, you are Factory information parameters of the device. So, finding the last sortsy Version HDST and drivers I have a few prifigel of code :) And to be honest not quite like this "Miracle" to give to the masses, so in such a dump code and procedures to understand something very difficult : (And furthermore did not managed to collect this miracle in sjasmplus. Therefore it was decided to bring it in more or less divine form (Equipping a certain number of comments), however, were some restrictions by maturity, as AlCo planned to insert this product InfoGuide # 10. As you already realized in time I still failed to meet ... But do not let the bad news. What nevertheless forced to tighten with the release of HDST 0.10? As you might guess, I decided Translate HDST on a new track - Namely, the use of engine Doors, as HDST enough a simple application that uses multiple drivers for their work. So the idea to append the kernel DOORS, it is a little different from initial ideas 7th of implementation, and therefore marked as 7.1. Doors 7.1 kernel is a modular structure and is located in the main memory address # 8000. From version 7 was only memory manager - memManager. Which has several Functions: initMemory (Initialize and built the memory card), memAllocate (Ask for the free memory) memFree (vacate memory), memSetBank (Set the current bank memory). Generally memManager to the end and did not finish in the build of (build) is not used. The main emphasis in this build, was made specifically to work devices, so principal and principal component Device Manager - devManager. Starting at address # 5B00 stored map drivers, which initialized with Team initDrvMap. Map Driver takes 256 bytes and is divided into blocks of 3 bytes. The first 2 bytes of address of the driver in memory, the third byte - number memory bank. Total possible address 85 devices if is this at some stage project will not be enough You can change the size of the map and its location (DrvMapSize and drvMap), though will have to recompile kernel. With teams addDrv and you can add delDrv and therefore remove device from the card drivers. Team statDrv returns 0 If the operation was successful. When installing driver, he was awarded the number (ID - two bytes) which can be accessed, driver who compiled into the kernel are static ID and do not change. With a team lastDrv You can see the number of devices installed in the system. Appeal to driver device is Online Tools team callDrv. In the accumulator (A), we pass command unit, they can be: -InitDev - Initialization device; -ReadDev - get data from the device; -SendDev - send data to the device; -StatDev - get the state device (statOK-device ready to go, statErrorustroystvo completed operation with an error statBusyustroystvo busy statTimeout-device stuck and went to timeout, statNoDevice-device absent); -InfoDevDrv - get driver information device; -StatDevAdv - get Extended error data (More detailed data that occurred, for example, Error reading from disk here can be specified track and the sector where the failure occurred); -ReadDevPorts - get state of the device ports (Done for IDE) if device does not support this functionality return error; -SelMaster and selSlave - Allow to switch between multiple devices on the same bus (done for IDE). If the device does not support this functionality, will return error. -InfoDevice - get description of the device; That such a principle, while functionality will give here small example: ; Initialize manager ; Drivers ld a, initDrvMap call devManager ; Install the console driver ld hl, drvConcole ld a, addDrv call devManager , Installation of driver ; Keyboard ld hl, drvKeyboard ld a, addDrv call devManager In principle, all (Initialize manager driver, the driver console keyboard driver) is not necessary, as it happens automatically at startup system initialization and kernalya, and is given here as an example. To send a data block the console (in HL-ID device, B-command Driver, DE - block address data, A - Team Manager drivers): ld hl, # 0000 ld b, sendDev ld de, dataBlock ld a, callDrv call devManager dataBlock dw dataBlock2-dataBlock db "Hello World!" dataBlock2 In the first two bytes dataBlock stored data block length. Use the end mark (Like # 00 or # FF) basically I did not, so how data can be any anything (not just text) and accordingly send they can also go anywhere, any device, and not only in the console. Another example of reading data using the keyboard driver (In HL-ID device B-team of the driver, DE - The address of the data block, A - Team manager drivers): ld hl, # 0001 ld b, readDev ld de, buffer; temporary buffer ld a, callDrv call devManager buffer dw # 01 db # 00 As is the case with the record data when reading a buffer - The first two bytes indicate the length of the block. While this functionality is implemented Not all drivers, so data may not be relevant. However, the real data always come with shift buffer +2. Well, until all of the manager devices. As I wrote above, some drivers built into the nucleus and have a static ID, here they are: # 0000 - console driver # 0001 - keyboard driver # 0002 - IDE driver # 0003 - ATAPI driver Of course, you can change them recompiling the kernel. However, do it's not worth it, because some of these drivers several interconnected and clearly know that # 0000 - is console # 0001 - is keyboard. For example, for display the same error Use the console, and when withdrawal of a large number of text, the console can be expected Pressing any key (similar to "SCROLL?" in BASIC). True, no problem to kill address of the driver for ID # 0000 and thereby send output data to another location, For example, if loaded GUI in a separate window. In general, a modular system kernel allows you to easily collect nucleus under different modifications Spectrum. For example, for Console can be used Not only Spectrum standard screen, but and a variety of advanced (384x304, 512x192), but instead standard keyboard can be use extensions from ATM-Turbo. Too true and for drivers and IDE ATAPI, important to adhere to Some standards are I laid into the structure drivers. Included so far are Driver: Console Driver (Standart ZX Screen), Keyboard Driver (Standart ZX Keys), IDE Driver (NEMO / KAY), ATAPI Driver (NEMO / KAY). Several later I'll add other variation in the meantime if there is Wish you could write your own. This can be done looking sortsy already written Drivers, however, be amended: In the console driver and the driver keyboard similar functionality, so it is important to realize functionality - initDev, readDev, sendDev, statDev, infoDrv, statDevAdv, for example: _drvConsole ld a, b ; Device initialization cp initDev jr z, _initCon ; To get data from ; Device cp readDev jp z, _readCon ; To send the unit block ; Data cp sendDev jp z, _sendCon ; Get the state ; Device cp statDev jp z, _statCon ; Information ; About a device driver cp infoDrv jp z, _infoCon ; Get extended , The error data cp statDevAdv jp z, _statConAdv ; Not known to the team ld a, statError ; Install error! ld (conStatus), a ret In the driver IDE and ATAPI Several extended functionality - _drvIde ld a, b ; Device initialization cp initDev jr z, _initIde , To obtain data ; From the device cp readDev jp z, _readIde ; Sent to the device ; Data block cp sendDev jp z, _sendIde ; Get the state ; Device cp statDev jp z, _statIde ; Information ; About a device driver cp infoDevDrv jp z, _infoIde ; Get extended , The error data cp statDevAdv jp z, _statIdeAdv ; Get sosotoyanie ; Device ports cp readDevPorts jp z, _readIdePorts ; Select master device cp selMaster jp z, _sel_master ; Select the slave device cp selSlave jp z, _sel_slave , To obtain information on HDD cp infoDevice jp z, _infoHardDisk ; Not known to the team ld a, statError ; Install error! ld (ideStatus), a ret In the next build of certain functions selMaster and selSlave will replaced by a function selBusDev (Select Bus Device) that is the input is the number device on the bus (in this case 0 - master, one-slave) and choose. I think it will ideologically correct, as, for example, on devices type of SCSI can be much more devices than 2. Who knows;) can Spectrum to be connected and the SCSI in the near future ... The annex to this number You will find a small, but functional application HDST (HardDisk Search 'Test). For those who do not vkurse Recall, this program detects the presence of hard drive and cd-rom. If they present, the output engineering information on these devices. This version (0.10) is practically different in functionality from the previous one. The basic idea was the use this nucleus Doors 7.1. As an example, there are three compiled kernel version with support for HDD controllers - For NemoKAY, ScrorpionSMUC and ATM-2 +. Tell immediately that I was very hurried with the release of cweek (so was delayed for 4 weeks) and therefore the driver a little did not finish, and core functionality (such as You might have noticed) minimal. For the same why has not spread sortsov. In the near future (I hope) dopishutsya before the end of the driver, but for now, I hope this version will work on real Spectrum, as all tested in the emulator Unreal Speccy. At this perhaps I will finish story of the Doors 7.1, recall just more information can be found the official website Project - DoorsAQUA Project twilight.org.ru / doors_aqua /
Other articles:
Similar articles:
В этот день... 23 November