BBC BASIC Host Interface Specification ====================================== Definitions =========== VDU Commands ============ BASIC MUST translate all VDU commands to the following sequences of characters sent to the VDU. BASIC does not know and is not able to know what interpretation the VDU driver may put on any particular VDU sequence. BASIC MUST NOT impose any interpretation on any commands and MUST NOT impose any expectations of what the VDU driver's actions may or may not be. It is SOLELY the responsibility of the VDU driver to determine if any particular VDU sequence is supported and what functions any sequences perform. VDU Command - Required Functionality ----------------------------------------------- CLS - VDU 12 CLG - VDU 16 GCOL n opt - VDU 18, 0, n GCOL m,n - VDU 18, m, n COLOUR n - VDU 17, n COLOUR l,p opt - VDU 19, l, p, 0, 0, 0 COLOUR l,r,g,b opt - VDU 19, l,16, r, g, b if l>=0 COLOUR l,r,g,b opt - VDU 19, l,24, r, g, b if l<0 MODE n - VDU 22, n DRAW x,y - VDU 25, 5, x AND 255, x DIV 256, y AND 255, y DIV 256 MOVE x,y - VDU 25, 4, x AND 255, x DIV 256, y AND 255, y DIV 256 PLOT x,y opt - VDU 25, 69,x AND 255, x DIV 256, y AND 255, y DIV 256 PLOT k,x,y - VDU 25, k, x AND 255, x DIV 256, y AND 255, y DIV 256 TAB(x,y) - VDU 31, x, y VDU arguments - VDU arguments Those listed as 'opt' are optional additional syntax, with their required functionality. If an implementation wishes to not pass any non-optional commands to the VDU driver it MUST parse all the parameters and then give an error. For example: PLOT 69,1/0,10 MUST give 'Divide by zero', MUST NOT give 'Unsupported command'. MODE is allowed to interrogate the VDU driver to check if program memory would be used by the new screen mode, and disallow it by generating the 'Bad MODE' (ERR 25) error instead of issuing the VDU sequence. Note, this is BASIC doing the enquiry and generating a local error, NOT the VDU driver. The VDU driver MUST select whatever MODE it has been instructed to, falling back to an alternative MODE if the requested MODE is unavailable. The VDU driver MUST NOT generate any errors. The following are optional commands that MUST be translated to the listed VDU sequences. VDU Command - Required Functionality ----------------------------------------------- ON - VDU 23, 1, 0, 0, 0, 0, 0, 0, 0, 0 OFF - VDU 23, 1, 1, 0, 0, 0, 0, 0, 0, 0 ORIGIN x,y - VDU 29, x AND 255, x DIV 256, y AND 255, y DIV 256 MOVE BY x,y - PLOT 0 ,x,y DRAW BY x,y - PLOT 1 ,x,y PLOT BY x,y - PLOT 65,x,y CIRCLE x,y,r - MOVE x,y:PLOT 145,r,0 CIRCLE FILL x,y,r - MOVE x,y:PLOT 153,r,0 ELLIPSE x,y,a,b - MOVE x,y:PLOT 0,a,0:PLOT 193,0,b ELLIPSE FILL - MOVE x,y:PLOT 0,a,0:PLOT 201,0,b FILL x,y - PLOT 133,x,y FILL BY x,y - PLOT 129,x,y LINE x1,y1,x2,y2 - MOVE x1,y1:DRAW x2,y2 RECTANGLE x,y,w - MOVE x,y:PLOT 13,x+w,y:PLOT 13,x+w,y+w:PLOT 13,x,y+w:PLOT 13,x,y RECTANGLE x,y,w,h - MOVE x,y:PLOT 13,x+w,y:PLOT 13,x+w,y+h:PLOT 13,x,y+h:PLOT 13,x,y RECTANGLE FILL x,y,w - MOVE x,y :PLOT 101,x+w,y+w RECTANGLE FILL x,y,w,h - MOVE x,y :PLOT 101,x+w,y+h RECTANGLE x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 190,x2,y2 - copy area RECTANGLE x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 190,x2,y2 - copy area RECTANGLE FILL x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 189,x2,y2 - move area RECTANGLE FILL x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 189,x2,y2 - move area RECTANGLE MOVE x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 189,x2,y2 - move area RECTANGLE MOVE x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 189,x2,y2 - move area RECTANGLE SWAP x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 191,x2,y2 - swap area RECTANGLE SWAP x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 191,x2,y2 - swap area TINT a,t - VDU 23,17,a,t,0,0,0,0,0,0 COLOUR c TINT t - VDU 17,c, 23,17,0+(c DIV 128),t,0,0,0,0,0,0 GCOL c TINT t - VDU 18,0,c,23,17,2+(c DIV 128),t,0,0,0,0,0,0 GCOL a,c TINT t - VDU 18,a,c,23,17,2+(c DIV 128),t,0,0,0,0,0,0 VDU Driver ========== It is SOLELY the responsibility of the VDU driver to determine what VDU sequences mean, what are supported, and to translate them into whatever is required for the host system to perform the required actions. BASIC does not impose any expectation on what any VDU sequences does, and has no ability to know. The expectations of particular actions are those of the programmer writing a BASIC program, NOT the BASIC interpreter itself. The VDU driver MUST NOT generate any errors. Anything unsupported MUST simply be swallowed and ignored. Fundamental core level ---------------------- VDU 10,13 MUST move the cursor to column zero of the next line VDU 13,10 MUST move the cursor to column zero of the next line CHR$32-CHR$95 MUST be standard ASCII printable characters Basic level ----------- VDU 0 MUST be ignored VDU 8 MUST move the text cursor backwards, unless at the start of the line. If at the start of the line it SHOULD wrap to the end of the next line above. If it wraps, if wrapping from the top line it SHOULD cause the display to scroll downwards. VDU 9 MUST move the text cursor forewards, unless at the end of the line. If at the end of the line it SHOULD wrap to the start of the next line below. If it wraps, if wrapping from the bottom line it MUST cause the display to scroll upwards. VDU 10 SHOULD cause the text cursor to move directly down to the next line without changing the text column. If doing so and moving down from the bottom line it MUST cause the display to scroll upwards. VDU 11 SHOULD cause the text cursor to move directly up to the previous line without changing the text column. If doing so and moving up from the top line it SHOULD cause the display to scroll downwards. VDU 12 SHOULD cause the display to clear and leave the cursor at (0,0) in the top lefthand corner. VDU 13 MUST move the cursor to column 0 of the current line. VDU 30 SHOULD move the cursor to (0,0) at the top lefthand corner. VDU 31,x,y SHOULD move the cursor to (x,y) counting from (0,0) at the top lefthand corner. VDU 127 SHOULD move the cursor left, removing the displayed character. Full text implementation ------------------------ VDU 0 MUST be ignored VDU 6 MUST enable all VDU actions VDU 8 MUST move cursor left VDU 9 MUST move cursor right VDU 10 MUST move cursor down VDU 11 MUST move cursor up VDU 12 MUST clear the display, leaving the curosr at (0,0) VDU 13 MUST move to column 0 on the same line VDU 17,n MUST select text colour n VDU 20 MUST select default colours VDU 21 MUST temporarily halt all VDU actions except VDU 6 VDU 22,n SHOULD select a new screen mode and MUST clear the display, reset colours, end paged mode VDU 26 MUST reset all windows if VDU 28 or VDU 24 are implemented VDU 28,l,b,r,t SHOULD define a text window VDU 30 MUST move the cursor to (0,0) VDU 31,x,y MUST move the cursor to (x,y) VDU 127 MUST move left, removing the displayed character Full graphics implementation ---------------------------- VDU 16 MUST clear the graphics window VDU 18,a,c MUST set the graphics colours VDU 19,l,p,r,g,b MUST set the palette if a palette exists VDU 24,xl,xh,bl,bh,rl,rh,tl,th SHOULD define a graphics window VDU 25,k,xl,xh,yl,yh MUST perform a PLOT action VDU 29,xl,xh,yl,yh MUST set the graphics origin Other ----- VDU 1,n Send n to the printer driver VDU 2 Start a print job VDU 3 End a print job VDU 4 Test is displayed at text cursor VDU 5 Text is displayed at graphics cursor VDU 7 Generate a BELL sound VDU 14 Start 'paged' mode VDU 15 End 'paged' mode VDU 23,n,a,b,c,d,e,f,g,h Define character or control functions Colours ------- If there is no palette, VDU 17 (COLOUR) and VDU 18 (GCOL) MUST select physical colours using physical colour numbers, and VDU 19 MUST be ignored. If there is a palette, VDU 17 and VDU 18 MUST select logical colours, and VDU 19 MUST be used to select the physical colours they displayed as. These notes do not cover colour selection in screen modes with 256 or more colours as they are difficult to control purely through the VDU stream. Physical colours are a 6-bit number which MUST be the closest match to RGB numbering. VDU 19 uses the 6-bit physical colour number and MUST ignore b6 and b7 of the passed value. VDU 17 (COLOUR) and VDU 18 (GCOL) use the 6-bit physical colour number with control values in bit 6 and bit 7. The 8-bit physical colour number is a bitmap which MUST be of the following format: +-+-+-+-+-+-+-+-+ |x|x|E|F|I|B|G|R| +-+-+-+-+-+-+-+-+ | | | | | | | +-Red | | | | | | +---Green | | | | | +-----Blue | | | | +-------Intensity or Flash | | | +---------Flash | | +-----------Extension 0 0-------------Select foreground colour 0 1-------------Extension 1 0-------------Select background colour 1 1-------------Select border colour where supported On systems where Bright is selectable, bit 3 is MUST select Intensity and bit 4 MUST select Flash (eg ANSI, ZX Spectrum). On systems with Flash but no Bright, bit 3 is Flash (eg BBC). MUST be: or: or: 00 01 02 03 04 05 06 07 <-- plain plain plain 08 09 10 11 12 13 14 15 <-- bright bright flash 16 17 18 19 20 21 22 23 <-- flashing plain plain 24 25 26 27 28 29 30 31 <-- bright and flashing bright flash BlackRedGrnYelBlueMagenCyanWhite Extensions are implementation specific. For examples, the ZX Spectrum uses bit 5 and 6 to independantly select Flash/Bright and RGB, and ANSI drivers select underline and inverse. On systems with Bright selectable (eg ANSI, ZX Spectrum), "Dim White" and "Bright Black" are types of grey, the greyscale colours MUST be: 0:Black, 8:Dim Gray, 7:Bright Grey, 15:White Where COLOUR 192+n is supported, that sets the border colour to n. PLOT numbers ------------ The PLOT action is a bitmap which MUST be of the following format: +-+-+-+-+-+-+-+-+ |7|6|5|4|3|2|1 0| +-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+---00 Move | | | | | | 01 Plot in foreground colour | | | | | | 10 Plot in inverse colour | | | | | | 11 Plot in background colour | | | | | +------- 0 Relative coordinates | | | | | 1 Absolute coordinates | | | | +--------- 0 Last point not omitted | | | | 1 Last point omitted | | | +----------- 0 Solid line | | | 1 Dot-dash line | | +------------- 0 First point not omitted | | 1 First point omitted +-+---------------00 Draw line 01 Plot points 1x Fill and other actions VDU 25 MUST implement PLOT &04 (MOVE), PLOT &05 (DRAW) and PLOT &45 (plot a point). Filing actions ~~~~~~~~~~~~~~ CHAIN string - OSBYTE &82, OSFILE A=&FF, HL=>control block LOAD string - OSBYTE &82, OSFILE A=&FF, HL=>control block SAVE string - OSBYTE &82, OSFILE A=&00, HL=>control block BPUT#channel,byte - OSPBUT A=byte, H=channel INPUT#channel - Multiple calls to OSBGET PRINT#channel - Multiple calls to OSBPUT CLOSE#channel - OSFIND &00, H=channel OSCLI string - OSCLI HL=>string EXT#channel=numeric - OSARGS &03, HL=>numeric, E=handle PTR#channel=numeric - OSARGS &01, HL=>numeric, E=handle numeric=BGET#channel - OSBGET H=channel returns A, Cy=EOF numeric=EOF#handle - OSBYTE &7F, L=handle returns L or OSARGS &05, HL=>data, E=handle returns data at HL numeric=EXT#handle - OSARGS &02, HL=>data, E=handle returns data at HL numeric=PTR#channel - OSARGS &00, HL=>data, E=handle returns data at HL numeric=OPENIN string - OSFIND &40, HL=>string returns value in A numeric=OPENOUT string - OSFIND &80, HL=>string returns value in A numeric=OPENUP string - OSFIND &C0, HL=>string returns value in A Later versions of BASIC add the following filing commands and functions: BPUT#channel,string - repeated calls to BPUT#channel, followed by BPUT#channel,10 BPUT#channel,string; - repeated calls to BPUT#channel, with nothing following. string=GET$#channel - multiple calls to BGET#channel until 10, 13 or EOF numeric=OSCLI string - OSCLI HL=>string returns value in A Some platforms allow use of channel 0 to write to VDU (eg the VDU) and read from OSRDCH (eg the keyboard). Platforms with 32-bit or larger registers pass OSFILE and OSARGS data directly in the registers. Other platforms point to the data in memory. For instance, on ARM: OSFILE R0=action, R1=>filename, R2,R3,R4,R5=control block contents OSARGS R0=action, R2=channel, R3=data Sound actions ~~~~~~~~~~~~~ ENVELOPE env,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13 - OSWORD 8 with HL=>14-byte parameter block SOUND chn,vol,pitch,dur - OSWORD 7 with HL=>8-byte parameter block SOUND ON - OSBYTE 210,0,0 SOUND OFF - OSBYTE 210,255,0 Time & Date actions ~~~~~~~~~~~~~~~~~~~ TIME=numeric - OSWORD &02, HL=>numeric TIME$=string - OSWORD &0F, HL=>LEN(string), HL+1=>string numeric=TIME - OSWORD &01, HL=>control block returns data at HL string=TIME$ - OSWORD &0E, HL=>0 If HL=>0, null string returned If HL=><>0, HL=>string Other actions ~~~~~~~~~~~~~ CALL address - Call MOS routine if &FF00-&FFFF numeric=USR address - Call MOS routine if &FF00-&FFFF returns Cy:H:L:A numeric=ADVAL channel - OSBYTE &80, HL=channel returns HL A%=0:X%=nonzero:Z%=((USR&FFF4)AND&FF00)DIV256 should return a bitmap that reflects the filing system structure: %000x0xxx Filenames are directory.filename/extension, eg BBC, RISC OS %000x1xxx Filenames are directory/filename.extension, eg Unix, CP/M %nnnxxxxx Filenames are directory\filename.extension, eg DOS, Windows See BeebWiki for allocated numbers. VDU Action MUST perform ----------------------------------------------------------------------------------------- CLS - VDU 12 CLG - VDU 16 GCOL n - VDU 18, 0, n GCOL m,n - MAY be implemented and if so MUST perform VDU 18, m, n COLOUR n - VDU 17, n COLOUR l,p - MAY be implemented and if so MUST perform VDU 19, l, p, 0, 0, 0 COLOUR l,r,g,b - MAY be implemented and if so MUST perform VDU 19, l,16, r, g, b if l>=0 COLOUR l,r,g,b - MAY be implemented and if so MUST perform VDU 19, l,24, r, g, b if l<0 MODE n - VDU 22, n ON - MAY be implemented and if so MUST perform VDU 23, 1, 0, 0, 0, 0, 0, 0, 0, 0 OFF - MAY be implemented and if so MUST perform 23, 1, 1, 0, 0, 0, 0, 0, 0, 0 DRAW x,y - VDU 25, 5, x AND 255, x DIV 256, y AND 255, y DIV 256 MOVE x,y - VDU 25, 4, x AND 255, x DIV 256, y AND 255, y DIV 256 PLOT x,y - MAY be implemented and if so MUST perform VDU 25, 69,x AND 255, x DIV 256, y AND 255, y DIV 256 PLOT k,x,y - VDU 25, k, x AND 255, x DIV 256, y AND 255, y DIV 256 TAB(x,y) - VDU 31, x, y VDU - VDU arguments Status messages - OSASCI numeric=GET - OSRDCH returns byte in A, Cy=Escape string=GET$ - OSRDCH returns byte in A, Cy=Escape numeric=INKEY delay - OSBYTE &81, HL=delay returns value in HL, Cy=Escape string=INKEY$ delay - OSBYTE &81, HL=delay returns value in L, Cy=Escape numeric=POS - OSBYTE &85 returns byte in L numeric=VPOS - OSBYTE &85 returns byte in H numeric=MODE - OSBYTE &87 returns value in H numeric=VDU offset - OSBYTE &A0, HL=offset returns word in HL numeric=POINT(x,y) - OSWORD 9, HL=>5-byte control block returns sign-extended byte at (HL+4) Later versions of BASIC add additional VDU commands which send sequences of VDU bytes. ORIGIN x,y - VDU 29, x AND 255, x DIV 256, y AND 255, y DIV 256 MOVE BY x,y - PLOT 0,x,y DRAW BY x,y - PLOT 1,x,y PLOT BY x,y - PLOT 65,x,y CIRCLE x,y,r - MOVE x,y:PLOT 145,r,0 CIRCLE FILL x,y,r - MOVE x,y:PLOT 153,r,0 ELLIPSE x,y,a,b - MOVE x,y:PLOT 0,a,0:PLOT 193,0,b ELLIPSE FILL - MOVE x,y:PLOT 0,a,0:PLOT 201,0,b FILL x,y - PLOT 133,x,y FILL BY x,y - PLOT 129,x,y LINE x1,y1,x2,y2 - MOVE x1,y1:DRAW x2,y2 RECTANGLE x,y,w - MOVE x,y:PLOT 13,x+w,y:PLOT 13,x+w,y+w:PLOT 13,x,y+w:PLOT 13,x,y RECTANGLE x,y,w,h - MOVE x,y:PLOT 13,x+w,y:PLOT 13,x+w,y+h:PLOT 13,x,y+h:PLOT 13,x,y RECTANGLE x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 190,x2,y2 RECTANGLE x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 190,x2,y2 RECTANGLE FILL x,y,w - MOVE x,y :PLOT 101,x+w,y+w RECTANGLE FILL x,y,w,h - MOVE x,y :PLOT 101,x+w,y+h RECTANGLE FILL x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 189,x2,y2 RECTANGLE FILL x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 189,x2,y2 RECTANGLE MOVE x1,y1,w TO x2,y2 - RECTANGLE MOVE x1,y1,w,h TO x2,y2 - RECTANGLE SWAP x1,y1,w TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+w:PLOT 191,x2,y2 RECTANGLE SWAP x1,y1,w,h TO x2,y2 - MOVE x1,y1:MOVE x1+w,y1+h:PLOT 191,x2,y2 TINT a,t - VDU 23,17,a,t,0,0,0,0,0,0 COLOUR c TINT t - VDU 17,c, 23,17,0+(c DIV 128),t,0,0,0,0,0,0 GCOL c TINT t - VDU 18,0,c,23,17,2+(c DIV 128),t,0,0,0,0,0,0 GCOL a,c TINT t - VDU 18,a,c,23,17,2+(c DIV 128),t,0,0,0,0,0,0 =TINT(x,y) - platform dependant Registers holding parameters: A - Action parameter in primary register, eg 6502 A, Z80 A, PDP-11 R0, 80x86 AX HL - Address or parameter in secondary register, eg 6502 YX, Z80 HL, PDP-11 R1, 80x86 BX E - Additional parameter in tertiary register, eg Z80 E, PDP-11 R2 The absolute minimum that BASIC requires to get up and running is: OSASCI/VDU - minimum of &0A, &0D, &20-&7F OSRDCH OSWORD 0 OSBYTE &83,&84 Every other call can simply return with registers unchanged. Housekeeping ~~~~~~~~~~~~ Initial PAGE - OSBYTE &83 returns value in HL and A.b7=1 or AHL and A.b7=0 Initial HIMEM - OSBYTE &84 returns value in HL and A.b7=1 or AHL and A.b7=0 Acknowledge Escape - OSBYTE &7E Clear VDU Queue - OSBYTE &DA Some platforms will need additional actions to "register" as the current foreground application and to claim errors, etc. VDU actions ~~~~~~~~~~~ Filing actions ~~~~~~~~~~~~~~ CHAIN string - OSBYTE &82, OSFILE A=&FF, HL=>control block LOAD string - OSBYTE &82, OSFILE A=&FF, HL=>control block SAVE string - OSBYTE &82, OSFILE A=&00, HL=>control block BPUT#channel,byte - OSPBUT A=byte, H=channel INPUT#channel - Multiple calls to OSBGET PRINT#channel - Multiple calls to OSBPUT CLOSE#channel - OSFIND &00, H=channel OSCLI string - OSCLI HL=>string EXT#channel=numeric - OSARGS &03, HL=>numeric, E=handle PTR#channel=numeric - OSARGS &01, HL=>numeric, E=handle numeric=BGET#channel - OSBGET H=channel returns A, Cy=EOF numeric=EOF#handle - OSBYTE &7F, L=handle returns L or OSARGS &05, HL=>data, E=handle returns data at HL numeric=EXT#handle - OSARGS &02, HL=>data, E=handle returns data at HL numeric=PTR#channel - OSARGS &00, HL=>data, E=handle returns data at HL numeric=OPENIN string - OSFIND &40, HL=>string returns value in A numeric=OPENOUT string - OSFIND &80, HL=>string returns value in A numeric=OPENUP string - OSFIND &C0, HL=>string returns value in A Later versions of BASIC add the following filing commands and functions: BPUT#channel,string - repeated calls to BPUT#channel, followed by BPUT#channel,10 BPUT#channel,string; - repeated calls to BPUT#channel, with nothing following. string=GET$#channel - multiple calls to BGET#channel until 10, 13 or EOF numeric=OSCLI string - OSCLI HL=>string returns value in A Some platforms allow use of channel 0 to write to VDU (eg the VDU) and read from OSRDCH (eg the keyboard). Platforms with 32-bit or larger registers pass OSFILE and OSARGS data directly in the registers. Other platforms point to the data in memory. For instance, on ARM: OSFILE R0=action, R1=>filename, R2,R3,R4,R5=control block contents OSARGS R0=action, R2=channel, R3=data Sound actions ~~~~~~~~~~~~~ ENVELOPE env,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13 - OSWORD 8 with HL=>14-byte parameter block SOUND chn,vol,pitch,dur - OSWORD 7 with HL=>8-byte parameter block SOUND ON - OSBYTE 210,0,0 SOUND OFF - OSBYTE 210,255,0 Time & Date actions ~~~~~~~~~~~~~~~~~~~ TIME=numeric - OSWORD &02, HL=>numeric TIME$=string - OSWORD &0F, HL=>LEN(string), HL+1=>string numeric=TIME - OSWORD &01, HL=>control block returns data at HL string=TIME$ - OSWORD &0E, HL=>0 If HL=>0, null string returned If HL=><>0, HL=>string Other actions ~~~~~~~~~~~~~ CALL address - Call MOS routine if &FF00-&FFFF numeric=USR address - Call MOS routine if &FF00-&FFFF returns Cy:H:L:A numeric=ADVAL channel - OSBYTE &80, HL=channel returns HL A%=0:X%=nonzero:Z%=((USR&FFF4)AND&FF00)DIV256 should return a bitmap that reflects the filing system structure: %000x0xxx Filenames are directory.filename/extension, eg BBC, RISC OS %000x1xxx Filenames are directory/filename.extension, eg Unix, CP/M %nnnxxxxx Filenames are directory\filename.extension, eg DOS, Windows See BeebWiki for allocated numbers. Definitions =========== MUST the implementation is required to do this, failure to do so is a broken implementaion MUST NOT the implementation is required to not do this, failure is a broken implementation MAY the implementation may optionally do this, neither implementing or no implementing the feature is not a failure. An optional requirement is usually bound by MUST and MUST NOT as to how the optional requirement must be implemented. PLOT &F0-&FF MUST ALWAYS be available for the user program, the VDU driver MUST NEVER do anything with it.