Think #41
06 ноября 1999 |
|
NEOS - Description of a new operating system for the Spectrum.
NeOS - the new operating system for the Spectrum (C) 1999 Megus / Brainwave ^ X-Project. Error handler (RST # 8) If any serious error calls the error handler. In Depending on the type of error can occur: - Return after the place of call error (R); - Exit the program (call to Exit from program) (Q); - Restore the stack of ERR_SP, then transition to ERR_JP (E); - Return code and the interactive error Register A (O). Thus the error can not simply treat, but also to return some information program. These are error function when working with disk devices. The error handler is invoked as follows as follows: immediately after the command code RST # 8 must be followed by an error code. For example: RST # 8 DEFB 2; Out of text window Possible to use not only standard error handler, but any other. For this must pereustvanovit system variable HK_ERR. If it is not zero, when you call RST # 8 is a transition to address specified in it, otherwise If the standard handler. At the entrance to the outside handler (and also necessary for entrance into the built-handler!) in Register C is present the error code, and DE registry, he also multiplied by 2. Error Codes # 00. OK (R) Is not an error, an informant about success of any operation. # 01. No such library function (R) This error can occur when accessing the library in the absence of It called function. # 02. Out of text window (E) The error occurs when trying to install Print out the coordinates of the text box. # 03. Read error (O) Interactive error reading from disk device. At the exit of A register of issues: # 00 - Retry; # 01 - Abort; # 02 - Ignore. # 04. Not enough memory (Q) The error occurs when attempting to allocate memory. # 05. Write error (O) Interactive error writing to disk device. The output of a register A gives: # 00 - Retry; # 01 - Abort; # 02 - Ignore. # 06. No such driver function (E) The error occurs when calling non-existent driver functions. # 07. Fatal error (Q) Fatal error in the program. # 08. Unknown command (E) Occurs when a command input, unknown shell. # 09. Syntax error (E) The error occurs when incorrect specifying command parameters. # 0A. No such page (R) The error occurs when attempting to switch to non-existent page. # 0B. Unreleased function (R) The error occurs when calling non-existent library functions. # 0C. Read only (E) The error occurs when attempting to produce write to the disk device read-only. # 0D. No disk (E) The error occurs when there is no disk in the device. On the rest of the system error numbers responds string: Error Nmm. # 0E. Unknown file system (E) The error occurs when it is impossible determine the membership drive a file system. # 0F. Can't open file (E) The error occurs when it is impossible open the file, but not in its absence. # 10. No such disk drive (E) The error occurs when trying to choose non-existent disk device. # 11. No such file (E) The error occurs when you try to to a nonexistent file. # 12. Unable to delete file (E) The error occurs when it is impossible delete a file, for any reason. # 13. Unable to make directory (E) The error occurs when it is impossible create the directory. Entry point kernalya # 004B. System info # 004E. Wait for keypress # 0051. Wait for keypress + click # 0054. Click sound # 0057. Exit from program # 005A. Add driver # 005D. Remove driver # 0060. Add library # 0063. Remove library # 0066. NMI handler # 0069. Open driver # 006C. Open library # 006F. RAM info # 0072. Change page # 0075. Allocate high memory block # 0078. Allocate low memory block # 007B. Free high memory block # 007E. Free low memory block # 0081. Get max length of high memory block # 0084. Reallocate memory map # 0087. Get page status # 008A. Set page status # 008D. Select 4MB page # 0090. Change page in low memory # 0093. Clear screen # 0096. Clear window # 0099. Fill window with attribute # 009C. Call symbol-output driver # 009F. Put character # 00A2. Put string # 00A5. Messager # 00A8. Put byte-number # 00AB. Put word-number # 00AE. Put double-word-number # 00B1. Scroll window up # 00B4. Scroll window down # 00B7. Scroll text window up # 00BA. Scroll text window down # 00BD. Draw styled box # 00C0. Draw window # 00C3. Vertical menu # 00C6. Put sprite # 00C9. Recognize disk # 00CC. Change disk drive # 00CF. Open file # 00D2. File driver caller # 00D5. Read bytes from file # 00D8. Write bytes from file # 00DB. Read sectors # 00DE. Write sectors # 00E1. Go lower by pixel # 00E4. Go higher by pixel # 00A7. Go lower by cell # 00EA. Go lower at attributes # 00ED. Go higher at attributes # 00F0. Calculate screen address # 00F3. Calculate attribute address # 00F6. Convert screen address to attribute # 00F9. String comparision # 00FC. Input string # 00FF. Command interpreter # 0102. Read number # 0105. Shut AY # 0108. Change directory Function "Memory manager" This set of functions designed to Control paged memory. Options: # 006F. RAM info Function gives basic information about top (paging) memory. Log in: - Output: HL - обший amount of upper memory (In KB); DE - free upper memory (In KB); BC - number of pages in the upper memory. # 0072. Change page Function changes the page in # C000-# FFFF. Input: A - page number. Output: Z - OK; NZ - no such page. # 0075. Allocate high memory block The function allocates a block of upper memory. Input: C - unit volume. Output: Z - memory allocated; NZ - lack of continuous memory; HL - address of the block; BC - Home of the block. # 0078. Allocate low memory block The function allocates a block of low memory. Login: DE - volume in bytes; Output: HL - starting address of block memory. # 007B. Free high memory block Frees the block top memory. Log in: BC - page number; D - high byte address; E - the number of released kilobytes. Exit: - # 007E. Free low memory block Frees the block of low memory. Login: DE - amount to free memory bytes. Output: HL - address of the new limit lower memory. # 0081. Get max length of high memory block Function gives the size of the largest block free upper memory. Log in: - Output: A - unit volume in kilobytes. # 0084. Reallocate memory map Function moves the memory card. Login: DE - a new position map; BC - A new page map. Exit: - # 0087. Get page status Function gives information about the page. Log in: BC - page. Yield: DE - map Employment page. # 008A. Set page status Function sets information about the page. Log in: BC - page; DE - map Employment page. Exit: - # 008D. Select 4MB page In NeOS v1.0 is not implemented. # 0090. Change page in low memory In NeOS v1.0 is not implemented. Other features kernalya # 00E1. Go lower by pixel The function calculates the address of the next lines to the screen. Input: HL - address in the display area. Output: HL - address of the next line. # 00E4. Go higher by pixel The function calculates the address of the previous lines to the screen. Input: HL - address in the display area. Output: HL - address of the previous line. # 00E7. Go lower by cell The function calculates the address of the next familiarity on the screen. Input: HL - address in the display area. Output: HL - address of the next familiarity. # 00EA. Go lower at attributes The function calculates the address of the next familiarity in the attributes. Input: HL - address of the attributes. Output: HL - address of the next familiarity. # 00ED. Go higher at attributes The function calculates the address of the previous familiarity in the attributes. Input: HL - address of the attributes. Output: HL - address of previous familiarity. # 00F0. Calculate screen address The function calculates the address in the screen on coordinates in the familiarity. Log in: BC - coordinates in familiarity. Output: HL - address in the display area. # 00F3. Calculate attribute address The function calculates the address of the attributes the coordinates of familiarity. Log in: BC - coordinates in familiarity. Output: HL - address of the attributes. # 00F6. Convert screen address to attribute The function takes the address in the screen area addressed in the attributes. Input: HL - address in the display area. Output: HL - address of the attributes. # 00F9. String comparision The function compares 2 sequences bytes. Input: HL - address of a single line; DE - the address of another line; C - number of bytes to compare. Output: Z - strings are identical; NZ - lines are different. Variable registers: B. Options "Screen manager" This set of functions designed to perform basic actions with screen. It may be useful for organization of the user interface and etc. When you specify coordinates and sizes register pair, the most significant byte - coordinate Y, Jr. - coordinate X. All functions that use the driver symbol output (output characters, lines, messages, numbers, menus) are working in the current text window. Options: # 0093. Clear screen The function clears the screen and sets new current attributes. Input: C - attribute; B - border. Exit: - # 0096. Clear window The function clears the window without flooding it attributes. Log in: BC - the upper left corner of the window; DE - the size of the window. Exit: - # 0099. Fill window with attribute The function fills in the attribute window without changing the image in it. Log in: BC - the upper left corner of the window; DE - the size of the window; H - attribute. Exit: - # 009C. Call symbol-output driver Function causes the current driver character output. Input: A - number of driver functions. Exit: - Variable registers: - # 009F. Put character Function displays a single character. Input: C - code for the character. Exit: - Variable registers: - # 00A2. Put string The function outputs the string of characters. Marker for the end of the line is the code # FF. In line can meet the following control codes: db # 10, N - Set the color of ink N; db # 11, N - Set the color of paper N; db # 12, N - Installation bright N; db # 13, N - install flash N; db # 14, N - setting current attributes; db # 16, X, Y - coordinate the installation print. Input: HL - address of string. Exit: - # 00A5. Messager Display a message from the table. Message delimiter is the code # FF. To derive the function is used Put string, so you can use control codes. Input: HL - address of the table; C - line number (0 - first line). Exit: - # 00A8. Print byte-number Function displays the number in the range # 0 - # FF (8 bits). The output is in the system calculus, given 7 bit system variable flags1. Input: C - number. Exit: - # 00AB. Print Word-Number Function displays the number in the range # 0 - # FFFF (16 bit). Input: HL - number. Exit: - # 00AE. Print double-word-number Function displays the number in the range # 0 - # FFFFFFFF (32 bits). Input: HL - lower 16-bit numbers; IX - the older 16-bit numbers. Exit: - # 00B1. Scroll Window Up Function moves the window up on one familiarity with the attributes, clearing bottom line, and pouring its current attributes. Log in: BC - window coordinates; DE - the size of the window. Exit: - # 00B4. Scroll Window Down Function moves the window down to one familiarity with the attributes, clearing top line and pouring its current attributes. Log in: BC - window coordinates; DE - the size of the window. Exit: - # 00B7. Scroll Text Window Up The function shifts the current text box Up to one familiarity. Log in: - Exit: - Variable registers: - # 00BA. Scroll Text Window Down The function shifts the current text box down on one familiarity. Log in: - Exit: - Variable registers: - # 00BD. Draw Styled Box Function draws a rectangle stylized frame without having to install attributes. Address style specified in the variable styles. Style is is a set of characters that draws frame (total 8 characters). Log in: BC - the upper left corner of the frame; DE - the size of the window; A - identity (A = 0 - ROM). Exit: - # 00C0. Draw Window Function draws a window on the screen and clears him. Login: IX - a pointer to a window handle. Exit: - # 00C3. Vertical Menu The function displays a vertical menu (the menu text should be printed advance!). Menu selection is made cursor keys, Enter (choice points), Edit (exit from the menu). Coordinates menu in the descriptor are relative the current text window. Login: IX - pointer to handle the menu; E - the initial number of points. Output: E - item number, E = # FF - if clicked Edit. # 00C6. Put sprite The function displays a sprite. Input: HL - address of the sprite; DE - the size of a sprite; BC - the coordinates of the sprite (7 bits of C = 0 - black and white sprite 7-bit C = 1 - color sprite). Yield: DE - address after the withdrawal. Function "System manager" # 004B. System info Function gives basic information about system and computer. Log in: - Output: A - computer code; BC - version (vB.C); HL - address of the ID-Thong system. # 004E. Wait for keypress The function expects a keystroke. Log in: - Output: A - key code. Variable registers: - # 0051. Wait for keypress + click The function expects a pressing and produces a click when pressed. Log in: - Output: A - key code. Variable registers: - # 0054. Click sound Function produces a small click on Beeper. Log in: - Exit: - Variable registers: - # 0057. Exit from program Function makes emergency (Mostly) out of running program to restore the stack (STACK_P), interruptions and subsequent transition to address identified variable PROGRET. Log in: - Exit: - # 0066. NMI handler Immediately upon arrival nonmaskable interrupt jumps to the address HK_NMI, which should have a team transition to the interrupt handler. System variables NeOS Unmovable block of variables Name Address Len Description TEMPFA # 5B00 Time 512. Region HK_ERR # 5D00 2 Error manager HK_INT1 # 5D02 2 User INT 1 HK_INT2 # 5D04 2 User INT 2 HK_INT3 # 5D06 2 User INT 3 HK_INT4 # 5D08 2 User INT 4 HK_INT5 # 5D0A 2 User INT 5 HK_NMI # 5D0C 3 NMI handler STACK_P # 5D0F 2 The value of the stack before starting program PROGRET # 5D11 2 Address return from the program ERR_SP # 5D13 2 The value of the stack after error ERR_JP # 5D15 2 Address return by mistake DRV_BEG # 5D17 4 pointer to Home Tabley particle driver LIB_BEG # 5D1B 4 pointer to Home Tabley particle libraries RES_BEG # 5D1F 4 pointer to Home Tabley particle residents VARLEN # 5D23 1 Length of mixing schaemogo block variables F_DRV # 5D24 7 Fake-driver F_LIB # 5D2B 7 Fake-bibl. F_RES # 5D32 7 Fake-resident NEOSFD # 5D39 1946 FD file from rytogo NeOS TOTRRET # 5D67 2 Call TR-DOS TOTR # 5D69 ... Calling the TR-DOS Move blocks of variables At the beginning of this block indicates the register IY. This area can be moved arbitrary domain (preferably at the bottom memory). Accessing the variables is through the offset (index). The name of the Indus. Len Description scratr +0 1 Acre. Attributes atrf +1 a mask attribute scrcrd +2 2 Acre. coordinates fontadr +4 1 Address Font (High byte) border +5 a Border color styles +6 2 Address Table frame styles textwin +8 4 Parameters textbox (X, Y, W, H) limcrd +12 2 limit coordinates in text box symdrv +14 2 Address Driver serial-by-character O lastkey +16 1 Code last keystroke repwait +17 1 Pause before autorepeat reprate +18 1 Frequency of auto Repeat repcnt +19 1 inside. counter lastki1 +20 1 inside. Vac. pagemp +21 4 pointer to memory card ramtop +25 2 Top border lower memory curpage +27 2 Current. Home ports +29 4 Contents Port management of memory drive +33 1 Current disco Boc device drvnum +34 1 No. Devices drivdsc +35 2 Address Descriptor current drive Vågå device drivtab +37 2 Address Table Descriptors Devices curdbl +39 2 Number of the first unit current directory dskerr +41 1 Code last reactions to discrete kovuyu error pnt_x +42 2 Coordinates X pnt_y +44 2 Y coordinate brd_l +46 2 Left border brd_r +48 2 Right border brd_u +50 2 Top border brd_d +52 2 Lower bound buttons +54 1 Comp. Buttons: bit0: Right bit1: Left bit2: average sens_x +55 1 The sensitivity sequence of X sens_y +56 1 The sensitivity sequence of Y flags1 +57 1 flag (see below) flags2 +58 1 flag (see below) neos_r +59 4 pointer to slave. reg. NeOS neostmp +63 4 ext. change. scrbeg +64 1 st.bayt screen countrs +65 2 counters mouse interp +67 4 address of the external interpreter Description of the bits of flag variables. In parentheses indicate the state of bits 0 / 1. flags1: bit 0: Flag clicking on the button (no / yes); bit 1: click when you press the (Yes / no); bit 2: Output mode characters on the screen (Replace / XOR); bit 3: Reserve; bit 4: Language input lines (LAT / RUS); bit 5: Register set: 1-Caps Lock; bit 6: Office-bit drivers char output; bit 7: Base in the derivation numbers (10/16). flags2: bit 0: delay for promotion drive (No / yes); bit 1: using a driver file systems; bit 2: Use an interpreter batch files. The remaining bits are undefined and should be zero. Immediately after the system variables can walk description of disk devices. Description of different data formats Format Index The first 2 bytes - number of pages The following 2 bytes - address. Format descriptor unit Offset Length Description 0 1 Number of sectors per track January 1 code lengths sector Jan. 2 The number of sectors in the block March 2 address the device driver February 5 address the current driver filesystem July 2 Address buffer FAT September 1 Current sector FAT January 10 a flag byte January 11 Page buffer FAT January 12 Length FAT Total 13 bytes. Table format disk parameters Offset Length Description 0 1 Number of sectors per track (0 - end of table) January 1 Number of sections of the device February 2 Number of tracks on the disc ... ... (Continued) Since for the same size sector allowed several different formats, the parameters of the descriptors are one after another. Table ends a null byte. Disc Format Descriptor Offset Length Description 0 16 Disc name February 16 disk capacity in blocks February 18 number of free blocks February 20 Sector size in bytes January 22 block size in sectors Total 23 bytes. The format of the descriptor directory Offset Length Description 0 1 Number of Files January 1 Number of deleted files February 2nd volume in the blocks directory Total of 4 bytes. The format of the file descriptor Offset Length Description 0 16 Filename March 16 File Extension January 19 File attributes Bit 0 - Read Only Bit 1 - Hidden File bit 2 - System File Bit 3 - flag disklabel Bit 4 - title subdirectory Bit 5 - archive file Bit 6 - segmented / continuous February 20 Address File Download February 22 File creation time Feb. 24 Founded file April 26 The length of the file February 30 initial block file 32 1 Number of device file 33 2 The initial unit of its directory 35 1 Number of files in a directory 36 2 address the read buffer 38 2 Current Block file 40 1 Current sector in the block 41 4 position in the file 45 1 Flags file: Bit 0 - no title changed / unchanged bit 1 - the sector is not changed / unchanged bit 2 - the current sector do not read / read Total 46 bytes. The first 32 bytes of the file descriptor - directory entry, which gives the function Get catalogue cell. The format of the information stored in the CMOS Offset Length Description 0 1 Seconds January 1 Second Alarm January 2 Minutes January 3 Minutes alarm January 4 Hours May 1 Alarm Clock June 1 Day of the Week July 1 Number Aug. 1 Month September 1st Year April 10 System CMOS registers 63 1 boot disk The first 14 bytes of CMOS may not coincide for different circuits, data correct only for GLUK'ovskoy scheme. Therefore, do not read the time on bytes, use the special function. The format of the descriptor window Offset Length Description 0 1 X coordinate (7 bits = 0 - no shadows 7 bits = 1 - with a shadow) January 1 Y coordinate February 1 width of the window March 1 window height April 1 attribute window May 1 attribute shadow June 1 style of window frame Total 7 bytes. Format Descriptor menu Offset Length Description 0 1 X coordinate January 1 Y coordinate February 1 width of the strip separation January 3 Number of points April 1 attribute nevydel. item May 1 attribute apportionment. item Total 6 bytes. Table of types of computers Function System info shows the output type of computer. Here is the table of correspondence specific models and code layout ports for memory management system variables: 0 - Spectrum 128; ports +0 - # 7FFD; 1 - Pentagon 512; ports +0 - # 7FFD; 2 - Scorpion ZS 256; ports +0 - # 7FFD; ports +1 - # 1FFD; 3 - Scorpion + GMX ports +0 - # 7FFD; ports +1 - # 1FFD; ?? 4 - KAY 256; ports +0 - # 7FFD; ports +1 - # 1FFD; 5 - KAY 1024; ports +0 - # 7FFD; ports +1 - # 1FFD; ?? 6 - Profi; ports +0 - # 7FFD; ports +1 - # DFFD; 7 - Sam Coupe. ports +0 - # FA; ports +1 - # FB. System variable ports +3 always contains the state of the port # EFF7. In the appendix to this edition of the newspaper recorded three firmware NEOS - for 128, 256 and 512 kilobyte machines.
Other articles:
From the Author - In the school holidays ... |
News - In the city there were modems, finishes work on CD-ROM. |
NEOS - Description of a new operating system for the Spectrum. |
Overview of new products - Japan Crossword (demo). |
Congratulations - November 7! |
WANTED - Searching software ... |
Advertising - Advertisements and announcements ... |
Similar articles:
В этот день... 21 November