NEW FEATURES:
SYSTEM options: 27 new ones added to 30 old ones. Many can install optional features. Typahead, for example. A program called PATCH/BAS leads you through painless prompts on most of the new ones, and also fixes certain utilities if present for NewDos86 changes. BASIC: 51 new keywords added to 127 old ones; ELE enhanced line editor. DOS has at least eight new commands plus many enhancements in ATTRIB, BOOT, CLEAR, DATE, COPY, DIR, FORMAT, FORMS, FREE, PDRIVE, and PURGE. There are a number of separate new utilities like HELP and a RAM drive.
Memory use: Like NEWDOS80, NEWDOS/86 reduces the RAM cost of add ons in part by disk overlays. However a configuration using most new features all at once did eat up nearly 4K in low RAM plus 4K in HIMEM vs ND80V2. HIMEM ones can all be temporarily cancelled by doing BOOT with SHIFT key depressed, getting HIMEM FFFFH.
DOS enhancements and additions
There is an optional editor for DOS commands. When you get an error message, the cursor comes on the incorrect command and can be changed. It works much like the old BASIC EDIT, but using the CLEAR key with EDIT keys like DELETE. A shifted BREAK key aborts the command. The CLEAR key no longer clears the screen unless used with SHIFT. The DOS command SLEEP will blank the screen completely, but not lose its contents.
DIR is vastly revised. It sorts alphabetically. Slow on a first pass if the directory is excessively large, it goes fast the next time. A utility SORTDIR permanently sorts, and can be used on many types of foreign disks like LDOS etc. DIR has a number of new letter options. For instance the unique DIR K lists only KILLED files. UNKILL restores them if possible! DIR X or OLDIR gives the old type of unsorted listing. Almost two manual pages describe partspecs to get or omit selective listings.
A foremost new feature is ADFR: automatic format and density recognition. It can without any warning read many alien formats including LDOS and any kind of TRSDOS or LSDOS. It can by and large even use those formats as data disks. TRSDOS 1.3 is limited to only DIR and FREE and COPY usage. ND80V2 had been COPY only for TRSDOS 1.3 and no access at all to the others. ND80V2 and NewDos86 allow changing of many parameters in their own format. For ND80V2 this can be a trap as it can’t read one not defined exactly right by change of PDRIVE table. NewDos86 makes this almost wholly automatic and convenient with PDRIVE rarely needed at all. A new LOGON command helps for problem cases to tell the system disks the number of sides to ask for.
NEW DOS COMMANDS:
ATTRIB myfile,PSF=Y helps arrange a pseudo system file that can be set up to load as an overlay like system files can. Users may need the (separate) technical package sold for NewDos86; there is also a separate hard drive package. DAY prints date on screen. LOGON, tells the system about drive capacities. OLDIR gives DIR in the old style. SETSYS with SYSRES and RAM can set up a system RAM disk. FORMAT 4 then RAM 4 set up a 64K RAM disk for any purpose on an 128K machine. SLEEP saves and blanks the video. UNKILL restores a killed file. VID sets up 80X24 displays if on a Model 4. SORTDIR alphabetically sorts entries on the DIR/SYS itself for alphabetic listings.
I used the M3 version on M4D mainly, but also tried the M1 version. It came in 35T SSSD format. To create a 39T DSDD version, the following commands were used: PDRIVE 0 9=0,A then PDRIVE 0 9 TI=CK TD=G TC=39 SPT=36,A then COPY 0 0,,DPDN=9. That did a one drive copy using table entry 9 for DPDN, destination PDRIVE number. A second drive if present would have made it easier. M4D on which I have several DS drives has never made a usable M1 39T format. It has however duplicated M1 disks when skipping a FORMAT step that the M1 already had done. This also worked on NewDos86, going from 35T source to 39T with prior format under NEWDOS/86 on M1. On the M4D I mounted the 35T source on :1 and a 39T with FORMAT already done by M1. A LOGON command was used with option to reset PDRIVE table specifics after successful disk IDs. COPY 0 1 and for no new format then made a working M1 disk with 39T. There was an alarming tail end message of DIRECTORY ERROR, but it meant nothing.
Enhanced BASIC:
NEWDOS/86 also made ENHANCED BASIC enhancements thanks to Warwick S. Sands and D.S. Sands. First developed some years ago as a tape patch, it is still available in PATCH versions for various systems.
EDIT works much as it always did, if you want it to. In its ELE EXTENDED LINE EDITOR mode there is a full screen editor with its own commands works well. You can even split a line into two new ones, or paste two together. Keys can be defined to type at least 26 keywords: eg shifted to type GOSUB. Linelength can be 255 bytes, not just 240. ND80 commands DU or DI to duplicate or move single lines will work for blocks of lines in ND86.
If you get NEWDOS/86, there’s more than enough new BASIC to keep you up all night. For starters, here is a simplified list of new keywords and commands. Arguments in most cases can be a constant or variable or expression:
- AND$(A$,B$) ‘Logical bit test on strings
- BASIC !300 ‘From DOS – reserve LOWMEM
- BEEP N1,N2 ‘Notes on miniamplifier
- CALL X USING A%(0) ‘USR call w/Z80 regs
- CASE … ENDCASE ‘Alternate to IF THEN
- CHR$(64) ‘Cancel CHR$(23) w/o CLS
- CMD ‘Same as CMD”S – GOTO DOS
- CMD”F=POPx” – ND80 stack purge improved
- DEC X ‘Same as X=X-1
- #DO A$ ‘A$ can be BASIC command
- DO … UNTIL ‘Type of looping
- #DRAW S X1,Y1 TO X2,Y2 [TO X3,Y3 TO ...
- #GOTO N 'Or #GOTO N*10 etc.
- EDIT 'New full screen processes
- ERR$(N) '=> Any ERROR #N
- ERROR N 'Ditto
- FIELD@6441,A$ LEN 5 'A$ =>"READY" on ROM
- FILL 6441,5,15360,64'=>READYREADY on vid
- X=FCB(1) 'X=ADDRESS(File buffer #1)
- INC X 'X=X+1
- INPUT @512,>"Enter name & age";N$,A
- INPUT TO @512,"Phone number";A$;USING B$
- INSTR(!A$,N,TF) 'Bit testing in string
- KTA=A$ 'Set typeahead status with flags
- $LET A$=UPCASE(A$) 'Convert letter case
- A$=LSTRIP(" A BC",32) '=> A$="A BC"
- LINE LET A$=HI, "SAM" 'A$ contains '"'
- X=MOD(8,3) 'X=2, remainder of 8/3
- #MOV &H3C00,&H3E00,512 'Duplicate bytes
- #PLOTS A%(0) @ (64,24) 'Array drawing
- PRINT @[16,32],A$ ‘@[row,column] works!
- A$=OR$(B$,C$) ‘Bitwise string logic
- #RESTORE N*10 ‘RESTORE at calc. line #
- #REV ‘Graphic pixel & blank inversion
- A$=ROT$(“ABCDE”,2) ‘Rotate 2 => “CDEAB”
- $=RSTRIP(“A BC “,32) ‘=> A$=”A BC”
- SETKEY G=GOSUB ‘Then key types GOSUB
- A#=SUM A!(0),10 ‘Add 11 array elements
- #SWP 15360,15872,512 ‘Swap 512 bytes A$=”12345″:$SWP A$,1,3,2 ‘A$=”45312″
- ?UPCASE$(“abcd”) ‘=>”ABCD”
- USR0= … Z80 program bytes …
- VID(80) ‘=> 80X24 screen
- WAIT @512,>”Hit ENTER”;CHR$(13)
- WHILE … WEND ‘Type of looping
- X=WPEEK(&H4001) ‘Two byte PEEK
- WPOKE &H4001,X ‘Two byte POKE
- N=XOR(8,24) ‘N=24, BOOLEAN XOR
- ?&O77 ‘=> 63, octal to decimal
- ?&1111 ‘=> 15, binary to decimal
- ?&D15360 ‘=> 3C00H decimal to hex
- A$=”3C00″:? &H(A$) => 15360
- ?&! -1 ‘=> 65535, unsigned INT
- ?&% 65535 ‘=> -1, signed INT
What’s the best thing here? That depends on your tastes. To many it may be new INPUT controls which the author explains in a dedicated chapter can save a lot of conventional INKEY$ logic. There is position control with @ position by count or by column and row. The ;USING B$ sets
maximum keying LENGTH.
There are many simple new tools: string operations, conversions of number bases, two byte PEEK and POKE, and others.
For debugging: no more UNDEFINED ERROR message – info is complete, and has new functions that PRINT can use. Not shown above is a programmed SETKEY usage that can define “hot keys”. The defined keys can work like a BREAK as an interrupt at any time, and can be set up for some error service subroutine you write using GOSUB via a hot key. The ND80 CMD”F=POPx”,line usage that purges GOSUB stacks has been extended to work on the new structures: CASE, WHILE, and DO … UNTIL. NOTE: DEBUG is entered in ND80 by pressing 123 keys together, and <G> exits. <M><address> to type until ENTER. <+> or <-> to page.
Positioning: Any usage such as PRINT @512 now also can be done in M4 fashion by column and row like PRINT @[8,0]. The braces must be SQUARE ones, unfortunately, the [] set, normally not typeable. I think it takes a special KBD driver or a word processor, or else I’ve missed some common knowledge. To test these in a program, I typed them via DEBUG.
80X24 Video: works if you install driver, via VID command when in DOS, the in BASIC execute VID(80). It works during a RUN after the VID(80), but reverts to 64X16 when you STOP or if stopped in command mode. VID(64) switches back while running.
80X24 support works for any PRINT or SET/RESET/POINT, or #DRAW,
#PLOT, or #REV … full support. Maximum @ coordinates go up to row 23, column 79 for row,column. However PRINT@ still is limited to 1024.
Graphics: #DRAW S 0,0 TO 159,0 TO 159,71 TO 0,71 TO 0,0 is an example that if in 80X24 mode almost instantly draws a pixel border on the video edge. MAX SET coordinates go from 127,47 to 159,71 when changing modes via VID(80). The same technique could be used to draw anything like the explicit way above, or with variable coordinates stored in arrays, etc. The flag letter “S” is for SET, R RESET or X for XOR (invert). #REV inverts the whole screen, including nongraphic blanks. PLOTS A%(0) @ (X,Y),size,rotation is a more elaborate and efficient tool. The array can be built with program PLOTMATH/BAS and uses 5 bits per pixel set: 5 bits sometimes for up to 32 pixels of same direction repeat. Size or rotation params if used can make the object larger, or turn it eight ways.
Memory manipulation: MOV, #FILL, and FIELD @ provide powerful tools. MOV handles overlapping moves, but #FILL does not. The string command FIELD @ defines a string anywhere in memory. You could for instance use it to point to ROM and then PRINT# to disk for a literal ROM image file.
Among the best additions for those of us who would use them are new USR tools. For the more advanced, an overlay file can be established from DOS, much like a system overlay. BASIC !n such as BASIC !500 on entry reserves the specified bytes below file buffer #1 for any purpose. Two other forms if used will eliminate need of DEFUSR. CALL X USING A%(0) calls address X and passes all 10 Z80 register pairs to and fro in the array. USR0= … Z80 code … on the end of a line when executed defines the byte after equals sign as USR0. How to get the untypeable bytes in place? Various methods could be used. You should type some typeable placeholder bytes first like “*** .. ” in place of Z80 code. In ND86 if you execute the USR line then type 123 for DEBUG, it lands on the start of the to-be USR literal. Then you could type the HEX there. to start typing, ENTER to stop, and to return to BASIC. If you have any line already in a form A$=” … Z80 code … then ND86 has a special CONVERT process to convert it for you.
|