By Lance Wolstrup

TRS-80 Model I & III password protection has always struck me as being annoying, at best. At worst, it is ridiculous and a complete waste of DOS programming space.

The more adventurous of us have overcome this 'feature', either by using ZAP programs, or by writing our own programs to strip individual files of its dreaded passwords. In the case of Model I & III LDOS, these grand efforts were all 'doing it the hard way'.

THE EASY LDOS WAY:

The people at LDOS were always generous, giving us the passwords to all system and related DOS files. They neglected to tell us, however, that a 'backdoor' password existed; that is, a universal password that unlocks ALL files.

Yes, Roy Soltoff played a little joke on us. He allows complete access to any and all files when this password is used: RS0LT0FF

(that is RSOLTOFF with the O's replaced by zeroes.)

Works on both Model I & III - but LDOS only jALSSCixi.l3l"yr 101 Z80 without tears.

by Lance Wolstrup

Note: ORG, DEFM & DEFB are commands to the assembler, they are NOT assembly language instructions.

More on the PRINT statement

Assuming that this is now perfectly clear, let's switch over to BASIC and look at the lowly (but very important) PRINT statement.

There are primarily two ways to display text with the PRINT statement:

1.) PRINT'HI, I AM YOUR TRS-80 COMPUTER"

The PRINT statement displays text beginning at the CURRENT CURSOR LOCATION. Example 1 prints the first character of the text at the current cursor location, the cursor is then moved one pixel to the right and the second character is displayed there, the cursor is again moved one pixel to the right, etc. When the last character has been displayed, the cursor is automatically moved down to the beginning of the next line.

Example 2 works identically to example 1, except when the end of the text has been displayed. Here the PRINT statement sees a semicolon. This means: Do not move the cursor to the beginning of the next line - LEAVE THE CURSOR WHERE IT IS.

Let's relate this information to our assembly language program above. We have primarily three ways to tell the Model III ROM subroutine at 21BH (or Model I DOS routine at 4467H) to handle the cursor at the end of out text:

1.) DEFB ODH - end of text, move cursor to beginning of next line.

2.) DEFB 03H - end of text, leave cursor where it is.

3.) DEFB OAH - NOT end of text, but move cursor to beginning of next line.

First, let's expand our program to display several lines

of text:

00100

ORG

7000H

00110 MSG1

DEFM

'HI, I AM YOUR TRS-80 COMPUTER'

00120

DEFB

ODH

00130 MSG2

DEFM

'I HOPE I CAN HELP YOU'

00140

DEFB

ODH

00150 MSG3

DEFM

'TO LEARN ASSEMBLY LANGUAGE'

00160

DEFB

ODH

00170BEGIN

LD

HL.MSG1

00180

CALL

21 BH ;Model I use 4467H

00190

LD

HL.MSG2

00200

CALL

21 BH ¡Model I use 4467H

00210

LD

HL.MSG3

00220

CALL

21 BH ;Model I use 4467H

00230

RET

00240

END

BEGIN

Last issue we got our feet wet, learning how to use EDTASM and, to a certain degree, how to display text on the screen. Let's do a recap:

00100

ORG

7000H

00110 MSG 1

DEFM

'HI, I AM YOUR TRS-80

COMPUTER'

00120

DEFB

ODH

00130 BEGIN

LD

HL.MSG1

00140

CALL

021 BH ;Model 1 use 4467H

00150

RET

00160

END

BEGIN

First, we must tell the assembler (EDTASM) where to assemble our program in memory. We do this by issuing the assembler command (pseudo opcode) ORG, followed by the desired address (7000H). This assembler command is mandatory.

Then, by using another assembler command, DEFM (DEFine Message), we set up our text inside of single quotes 'HI, I AM YOUR TRS-80 COMPUTER'. We give this text the label MSG1.

Using the assembler command DEFB (DEFine Byte), we add ODH to the end of our text. ODH is 13 decimal and, hopefully, we all know that CHR$(13) is the (ENTER) key. More specifically, CHR$(13) is a CR (carriage return).

We then point register HL to out text (by LoaDing HL with the address of MSG1). Since this is the actual start of our program, we label it BEGIN.

The next instruction is CALL 21 BH. This is the Model III ROM routine that displays the text pointed to by register HL. It keeps on displaying until it encounters the byte 13. It then quits and returns to the calling program. (Model I users should substitute this with a call to the DOS routine at 4467H: CALL 4467H).

At this point we have displayed our text, so we issue the RET instruction to RETurn to DOS.

Lastly, also mandatory, we issue the assembler command END and point it to the beginning of our program (BEGIN).

If you do not understand this completely, please go back and read the previous installment (TRSTimes 2.1.) until you do.

The above could have been written somewhat shorter: 00100 ORG 7000H

00110 MSG1 DEFM 'HI, I AM YOUR TRS-80 COMPUTER'

00120 DEFB OAH

00130 DEFM 'I HOPE I CAN HELP YOU'

00140 DEFB OAH

00150 DEFM TO LEARN ASSEMBLY

LANGUAGE'

00160 DEFB ODH

00170 BEGIN LD HL.MSG1

00180 CALL 21BH ;Model I use 4467H

00190 RET

00200 END BEGIN

As you can see, we point HL to our text and then call the display subroutine. This routine displays the first line and then encounters the OAH byte. OAH is 10 In decimal. CHR$(10) is LF (linefeed), so the cursor moves to the beginning of the next line where it displays the next text. Again, at the end of the second text, the routine sees a OAH, so we get another linefeed and the third line of text is displayed. Here, however, the routine finds a ODH at the end of the text, so it quits and returns to our program.

Go ahead and type in both of these programs. (W)rite the source files to disk; then (A)ssemble them into CMD files. Of course, be sure to give them different names. You will notice that they execute identically.

Now, let's move on to the 03H ending byte. Type in, (W)rite and (A)ssemble the following program:

00100

00110 MSG1 00120

00130 MSG2 00140

00150 MSG3 00160

00170 BEGIN

00180

00190

00200

00210

00220

00230

00240

ORG DEFM

DEFB DEFM DEFB DEFM

DEFB LD

CALL LD

CALL LD

CALL

7000H

COMPUTER'

03 H

'TO LEARN ASSEMBLY

LANGUAGE'

HL.MSG1 21 BH HL.MSG2 21 BH HL,MSG3 21 BH

Model I use 4467H Model I use 4467H

Model I use 4467H

BEGIN

Because of the 03H end byte, the cursor did not move to the next line; instead it stayed immediately next to the text it just displayed, thus displaying the next text on the same line. This works exactly like this Basic program:

100 PRINT'HI, I AM YOUR TRS-80 COMPUTER";

110 PRINT'I HOPE I CAN HELP YOU";

120 PRINTTO LEARN ASSEMBLY LANGUAGE"

If you have typed in the examples, have gotten them to work and understand why, we will then move on to bigger and better things. If not, go back and keep plugging at it until you do (there is no other way).

PRINT®

I am sure that, when you first learned Basic, you proceded to write programs that consisted of nothing but PRINT statements. Fun, wasn't It? However, pretty soon you realized that all the good programs did not display the text flush left on the screen. These programs displayed the text on the screen wherever the programmer wanted it to be. Pretty fancy! You wanted to do that, so you learned the PRINT® command.

Today, you may use this command extensively, but do you really know what It does? "Sure", you say, "it prints the text at the specified screen location."

That is certainly the result of the command, but it is not the whole story. For example:

[email protected],"HI, I AM YOUR TRS-80 COMPUTER"

The first thing this command does is move the cursor to the specified screen location (160); then, and only then, does It display the text inside the quotes at the cursor location. The cursor is very important. Basic handles this for us, almost to the point where we don't have to think about it; Assembly language does not. If we want to display text at a particular screen location, we must place the cursor there first.

Both Model I and ill have memory-mapped screens; that is, a series of 1024 (64x16) memory locations have been set aside, each corresponding to a screen location. The screen memory begins at 15360 decimal (3C00H) and ends at 16383 decimal (3CFFH). Some people refer to these locations by their hexadecimal addresses; I prefer to address them in decimal. It just seems easier to do it in decimal, as [email protected] location 0 is now 15360, PRINT® location 384 is now 15360 + 384, PRINT® location 962 becomes 15360 + 962. EDTASM doesn't care if you use hex or decimal, or even octal (don't worry, no octal for us)!

So, now that we know where the screen is, let's learn how to position the cursor. As an example, we will position the cursor at the center of the third screen line. That would be PRINT®160 in Basic; in Assembly language it is memory location 15360 + 160 or, to be more specific, memory location 15520.

Since both Model I & III handle the cursor position through memory locations 4020H and 4021H, we must store the desired cursor location there.

As we know, a memory location can only hold numbers in the range 0 to 255. Our number is 15520, so we must put the LSB (Least Significant Byte) into 4020H and the MSB (most Significant Byte) into 4021H.

The code can be written this way:

LD LD

HL,15520 (4020H),HL

We LoaD register HL with the value 15520. The value, in this particular case, is our desired screen memory location. Then we LoaD the value of HL into the cursor-handling locations. As explained above, the value 15520 is a two-byte number in hexadecimal (3CA0H), thus we must enclose the cursor-handling address inside a parenthesis so it will know to place the LSB (AOH) at 4020H and the MSB (3CH) at 4021H.

We could do the same thing from Basic with the following program:

10 HL= 15520

20M = INT(HL7256): ' M = MSB 30 L=HL-M*256 : ' L=LSB 40 POKE &H4020.L: ' put LSB into 4020H 50 POKE &H4021 ,M: ' put MSB into 4021H

The cursor is placed at memory location 15520 but, since no PRINT statement was found, naturally it moves to the beginning of the next line.

Add this line: 60 PRINT'HI, I AM YOUR TRS-80 COMPUTER"

When you RUN the program, you'll see that you have managed to position your text without using the [email protected] statement.

Getting back to Assembly language, we'll perform the

above task as follows:

00100

ORG

7000H

00110 MSG1

DEFM

'Hi, I AM YOUR TRS-80

COMPUTER'

00120

DEFB

0DH

00130 BEGIN

LD

HL,15520

00140

LD

(4020H),HL

00150

LD

HL.MSG1

00160

CALL

21 BH ¡Model I use 4467H

00170

RET

00180

END

BEGIN

Now that you can place text anywhere on the screen, you might say something like: "If I could only erase the screen, I'd be in good shape!"

Amazingly enough, this is just what we will do next.

In Basic we would write a program like this: 10 CLS

20 [email protected],"HI, I AM YOUR TRS-80 COMPUTER" This program actually performs 4 individual step:

1. Erase the screen (CLS)

2. Position the cursor ([email protected],)

3. Display text at cursor position ("HI, I AM etc.")

4. Return to Basic (a Basic program will return to immediate mode when: 1. it encounters an END statement, or 2. it finishes executing the last line of the program.)

To write this program in Assembly language, we would need only to change step 4. Being an Assembly language program, we naturally want to return to DOS, rather than Basic. Thus, our concept would look like this:

1. Erase the screen

2. Position the cursor

3. Display text at cursor location

4. Return to DOS

Both Model I & III have a ROM routine that will erase the screen for us. It is located at adrees 1C9H. A simple CALL to that address will do the trick.

Type in, (W)rite and (A)ssemble this code:

00100

ORG

7000H

00110 MSG1

DEFM

'HI, I AM YOUR TRS-80

COMPUTER'

00120

DEFB

0DH

00130 BEGIN

CALL

1C9H

00140

LD

HL,15520

00150

LD

(4020H),HL

00160

LD

HL,MSG1

00170

CALL

21 BH ;Model I use 4467H

00180

RET

00190

END

BEGIN

Line 00130 makes the CALL to the clear screen ROM routine at 1C9H.

Line 00140 loads HL with our desired cursor position.

Line 00150 puts the cursor position into the cursor handling location (at this point the cursor is placed).

Line 00160 points HL to the text in MSG1

Line 00170 makes the CALL to the Model III ROM print routine at 21BH (or the Model I DOS routine at 4467H).

Line 00180 returns to DOS.

I am rapidly reaching the end of my alloted space for this issue, so I will use the remaining few lines to tell you that in our next installment we will discuss how to POKE the screen from Assembly language; we will also learn how to accept information from the keyboard (INKEY$ and INPUT).

If space permits, we will begin writing a simple, but useful program that will let you type a name & address and then print a mailing label on the printer. Who knows, we may even expand the program, adding some bells & whistles, such as a mini-editor and other stuff. In any event, we will first write the program in Basic, and then translate it into Assembly language, line by line.

Until next issue, keep practicing!

TRSDOS 1.3 Corner

HUNTING FOR DOS WITHIN BASIC

_by Gary Edwin Campbeii_

When Basic sees a disk token, it calls an appropriate 4152H - 41E2H address, and control then jumps to one of the enhancement routines. The CMD command is referenced at 4174H. Any time Basic sees a CMD token, it calls 4174H.

The driver program, being loaded with DISK Basic itself,'routes two disk exit jumps to its own initialization routine. When DISK Basic thinks its all done with its stuff, it ends up executing a new install routine. This routine relocates the new CMD processing code to the beginning of the PST and places an appropriate hook into 4174H. It resets the PST pointer and sets up housekeeping. Return is then passed back to the normal DISK Basic exits. Basic is now enhanced! It's open season on DOS hunting!

When it comes to using DOS commands from within 1.3 Basic, the season is closed. Back in 1980, this feature was just not heard of.

The following program enables 1.3 Basic to support DOS command processing, while maintaining all variable storage.

**** IMPORTANT **** Follow instructions A) - H) carefully!

The utility published herein is similar to the SYSTEM 1.5 (tm) utility, with some subtle changes. Permission is hereby granted to the readers to replicate this software for their own use only. All other rights are retained by GRL Software (c) 1989.

About the program:

• The Basic program copies BASIC/CMD to LIBDVR/CMD.

• LIBDVR's end of file byte (EOF) is altered for append purposes.

• The data statements are processed, creating a file called LIB/APD.

• This file is appended to the end of the LIBDVR/CMD program.

LIBDVR is now enhanced Basic. To enter enhanced Basic, use LIBDVR instead of BASIC.

LIBDVR works with 99% of all basic programs. A limited number of programs alter their own program statement table (PST) text. If you have a program of this nature, it will undoubtedly cause syntax errors at the "alter" address.

DISK Basic is just an enhanced version of ROM Basic. The disk enhancements are enabled by placing jump instructions in memory locations 4152H - 41E2H.

Let us examine BASIC'S new hunting skills!

10 CMD"D:1"

20 CMD' IFREE"

Remember that 4174H hook? Well, its already baited, waiting patiently for a bite! When the Basic interpreter spots a CMD token, it calls 4174H, which jumps to the new driver. Bytes following the CMD token are examined for a "i sequence.

Line 10 fails this test, so processing jumps to the original CMD hook.

In line 20, the "I test passes, so the next bytes in the line are moved to 4225H, until the closing parentheses are found. A free memory check is then done, and a OM error is generated if less than 5220 bytes are free.

Next on the list is to examine 4225H +. If the 2nd or 3rd bytes of 4225h contain a $, the text is presumed to be a string variable, eg: A$, FS$, A$(9), etc. After a VARPTR search and some error checking, the text of the string itself is moved to 4225H. The string length must be greater than 0 or an error will be returned.

Unfortunately, most DOS commands will over write BASIC. So, those troublesome memory locations are copied to free space available in higher memories.

A few DOS vectors, such as the ABORT and ERROR vectors are patched with return 'traps". OUCH!

The traps ensure that if an abort (BREAK) or error happens while the DOS command is being processed, control will return to the "recover" routine. The high memory and clear pointers are saved, and reset to 6500H.

This is done for a number of reasons. The stack is now moved to it's usual DOS location at 409FH. 429CH is then called with the HL register pointing to the text. This call executes the DOS command as if you had typed it in from

DOS ready. After 429CH has finished its job, it returns, ready to start the recovery routine.

The recovery routine moves the stack to its previous location, and all of those 'troublesome" memory areas are moved back to their original locations. The "traps" are cleaned, and the high and clear pointers reset to previous conditions.

The recovery is now complete, and control is passed back to the 4174H caller.

It may be interesting to note that even DEBUG can be hunted. To exit back to Basic, type G. Debug responds with address?? Just hit < ENTER > , and presto! Back in Basic! Exiting to DOS is achieved by typing the usual Q. DEBUG baits its own traps, so if you do exit to DOS, remember the recovery routine has not been activated, so 4411H & 4415H will contain 6500h.

This utility cannot be used to execute any routine or program that alters the high memory pointer. Such programs that install type ahead utilities, filters, etc. would be installed lower than 6500h, and will be wiped out by the recovery process!

As a final note, the hunting license granted here is not limited to one species only! Any small /CMD critters that use memory between 5200H - 6500H are mighty tasty too!

A) Backup a system disk with BASIC/CMD on it.

B) Enter the following patch to bypass password protection, so that BASIC/CMD may be copied:

C) At Dos ready, enter COPY BASIC/CMD TO LIBDVR/CMD

D) Enter the above patch reversing the FIND and CHG bytes.

E) Enter BASIC, pressing < ENTER > at the "How many files prompt"

F) Enter the following program, saving it intermittently.

G) RUN line 100 to check for data entry errors.

H) SAVE the basic program before running it!

1 ' Lines 10-16 adjust some DCB (device control block)

2 ' information about LIDVR/CMD so it may be appended.

3 ' Remember! Just hit < ENTER > at the files prompt! 4'

10 CLEAR 1000:DEFINT A-Z:RESTORE

11 C$ = CHR$(2) + CHR$(2) + CHR$(&H4D) + CHR$(&H61)

12 OPEN"R",1,"LIBDVR/CMD": FIELD 1,255 ASA$,1 AS B$

13 J = PEEK(VARPTR(A$) +1 ) + PEEK(VARPTR(A$) +2)*256

15 POKE J +1,40:POKE J + 8,K: POKE J + 12,PEEK(J +12)-1 :CLOSE 16'

17 'Lines 19-24 create the append data file. 18'

21 FORK=1T03:F0RJ =OTOl : LSETB$(J) = STRING$(128,0)

22 FOR I = 1 TO 128:READ C:IF C< >-1 THEN MID$(B$(J),I,1) = CHR$(C):NEXT I,J

23 FOR J=0 TO 1 :LSET A$(J) = B$(J):NEXT J:PUT 1 ,K

26 ' Now we append the LIB/APD file to the end of

LIBDVR/CMD

28 CLOSE:CMD"l","APPEND LIB/APD TO

LIBDVR/CMD"

50 DATA 1,5,148,98,195,0,128,1,5,217,100,195,8, 128,1,130,0

51 DATA 128,245,62,1,50,67,128,24,6,245,62, 2,50,67,128,241

52 DATA 245,197,213,229,221,229,253,229,42, 164,64,34,180,128

53 DATA 229,35,1,73,1,9,34,164,64,42,116, 65,34,190,128,225

54 DATA 34,116,65,205,83,128,58,67,128,254, 1,204,77,27,253

55 DATA 225,221,225,225,209,193,62,0,254,1, 40,7,241,33,240

56 DATA 99,195,179,91,241,195,25,26,33,182, 128,237,75,180,128

57 DATA 175,237,66,229,193,221,33,146,128, 221,110,0,221,102

58 DATA 1,124,183,40,24,229,253,225,253,110, 0,253,102,1,175

59 DATA 237,66,253,117,0,253,116,1,221,1, 130,128,128,35,221

60 DATA 35,24,222,33,182,128,237,91,180,128,1, 73,1,237,176

61 DATA 201,242,128,58,129,64,129,68,129, 71,129,80,129,111

62 DATA 129,134,129,140,129,166,129,170, 129,176,129,182,129

63 DATA 210,129,227,129,232,129,0,0,0,0,245, 126,254,34,40,4

64 DATA 241,195,0,0,35,126,254,33,40,3,43, 24,243,241,229,42

65 DATA 232,64,237,91,253,64,175,237,82,17, 100,20,223,225,218

66 DATA 122,25,17,37,66,35,6,60,126,254,34,40, 8,18,35,19,16

67 DATA 246,195,151,25,35,34,242,129,175,18,6, 3,33,37,66,126

13.18.24.46.33

69 DATA 37,66,205,13,38,213,221,225,26,254,0, 40,9,254,60,56

70 DATA 9,30,28,195,162,25,30,8,24,249,79, 221,35,221,110,0

18.42.17.68.34

72 DATA 236,129,42,21,68,34,238,129,237, 115,240,129,42,240

73 DATA 129,17,100,20,175,237,82,34,244,129, 235,33,128,64,1

74 DATA 32,0,237,176,33,0,65,1,0,1,237,176,33,0, 82,1,1,19,237

75 DATA 176,33,48,64,17,246,129,14,3,237,176,33, 9,68,14,4,237

76 DATA 176,62,195,243,50,1,129,128,129,48,64, 50,9,68,33,234

77 DATA 129,34,49,64,33,231,129,34,10,68,33, 0,101,34,17,68

78 DATA 34,21,68,33,159,64,249,33,37,66,251, 205,156,66,42,240

79 DATA 129,249,42,236,129,34,17,68,42,238, 129,34,21,68,42

80 DATA 244,129,243,17,128,64,1,32,0,237,176,17, 0,65,1,0,1

81 DATA 237,176,17,0,82,1,1,19,237,176,33, 246,129,17,48,64

82 DATA 14,3,237,176,17,9,68,14,4,237,176,42, 242,129,251,201

83 DATA 205,249,129,24,185,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0

87' check your data file entry, run line 100 88'

100 PRINT'Your checksums:":RESTORE:T! =0: FOR K=1TO 100:J=0

101 FOR I = 1 TO 30:READ C:IF C = -1 THEN 103 ELSE J=J + C:NEXT I

102 PRINT USING" ######";J;:T! =T! +J:NEXT K

103 PRINT'Total:'T!:PRINT: PRINT'Correct checksums:"

104 PRINTUSING" ######";2430;3731 ;3905;4287; 3947;3561 ;3741;

105 PRINTUSING" ######";3769;2395;2399;2549; 3245"2490"2684"

106 PRINTUSING" ######";2644;3114;2092;2070: PR I NT'Total:55053"

107 STOP

The usual BASIC parameters are supported by LIBDRV. eg:

LIBDVR -F:3V -M:60000 PROGRAM/BAS

LIBDVR PROGRAM/BAS

LIBDVR

The command LIBDVR * should not be used, as the new appendage will overlay any basic program in memory. Besides, if you need to enter a DOS command, use the new CMD"! enhancement!

Please note that BASIC * is ok, but the enhancement will not work.

Examples below show a few ways to skin a DOS. CMD"!FREE:2" - text method

A$="DIR :0 (INV,SYS)":CMD"IA$" - string method LINE INPUT A$:CMDiA$" - user input

READ C$:J4$(I) = C$:NEXT:INPUT K:CMD"!J4$(K)"

- string select

Until next issue, have fun bagging your limit!

Your comments, ideas or questions regarding TRSDOS 1.3 may be sent to Gary Campbell, Suite 209, 1051KLO Road, Kelowna, British Columbia, Canada. V1Y4X6

Editors note: The Basic program should be used only on BASIC/CMD revision 1.3. dated May 1980 or later. Revision 1.2.~of BASIC/CMD is full of bugs and will not work properly.

ATTENTION TRSDOS 1.3 USERS!

GRL SOFTWARE PROUDLY ANNOUNCES "SYSTEM 1.5", THE MOST COMPREHENSIVE 1.3 UPGRADE EVER OFFERED!

MORE SPEED!! MORE POWER!! MORE PUNCH!!

While maintaining 100% compatibility to TrsDos 1.3, this DOS upgrade advances TrsDos 1.3 to 1989! SYSTEM 1.5 supports 16k-32k bank data storage and 4 MGHZ clock speed (4/4P/4D). DOUBLE SIDED DRIVES ARE NQW 100% UTILIZED! (all models).

C0NFI6=Y/N

CREATES CONFIG BOOT UP FILE

DATE=Y/N

DATE BOOT UP PROMPT ON ar OFF

TIME=Y,N

TIME BOOT UP PROMPT ON ar OFF

CURSOR—XX'

DEFINE BOOT UP CURSOR CHAR

BLINK=Y.N

SET CURSOR BOOT UP DEFAULT

CAPS=Y/N

SET KEY CAPS BOOT UP DEFAULT

L1NES='XX'

SET *PR LINES BOOT UP DEFAULT

WP=tY/N (WP)

WRITE PROTECT ANY ar ALL DRIVES

AUVE=Y/N

GRAPHIC MONITOR ON ar OFF

TRACE=Y/N

TURN (SP) MONITOR ON ar OFF

TR0N=Y/N

ADDS IR IMPROVED BASIC "TRON"

MEMORY=Y/N

BASIC FREE MEMORY DISPLAY MONITOR

TYPE=B/H/Y/N

HIGH/BANK TYPE AHEAD ON ar OFF

FAST

4 MGHZ SPEED (MODEL 4's)

SLOW

2 MGHZ SPEED (MODEL Ill's)

BASIC2

ENTER ROM BASIC (NON-DISK)

CPY (pimping)

COPY/UST/CAT LDOS TYPE DISKS

SYSRES=H/B, XX'

MOVE /SYS OVERLAY(s) to HI/BANK MEMORY

SYSRES=Y/N

DISABLE/ENABLE SYSRES OPTION

MACRO—XX',TEXT STRING + (??)

DEFINE ANY KEY TO MACRO

SP00L=H/B,SIZE='XX'

SPOOL ta HIGH ar BANK MEMORY

SPOOL=D,SIZE—XX'

LINK MEM SPOOLING ta DISK FILE

SP00L=N

TEMPORARILY DISABLE SPOOLER

SPOOL=Y

REACTIVATE DISABLED SPOOLER

SP00L=RESET

RESET (NIM SPOOL BUFFER

SPOOL=OPEN

OPENS, REACTIVATES DISK SP00LIN6

SP00L=CL0SE

CLOSES SPOOL DISK FILE

FILTER *PR,ADLF=Y/N

ADD LINE FEEDS BEFORE PRINTING ODb

FILTER *PR,IGLF=Y/N

IGNORES "EXTRA" LINE FEEDS

FILTER *PR,HARD=Y/N

SEND OCh ta PRINTER (FASTEST TOF)

FILTER *PR. FILTER

ADDS 256 BYTE PRINTER FILTER

FILTER *PR,ORIG='XX',CHNG—XX'

TRANSLATE PRINTER BYTE ta CHN6

FILTER *PR,FIND='XX',CHN6='XX'

TRANSUTE PRINTER BYTE ta CHN6

FILTER *PR,RESET

RESET PRINTER FILTER TABLE

FILTER *PR,LINES='XX'

DEFINE NUMBER LINES PER PAGE

FILTER *PR,WIDTH—XX'

DEFINE PRINTER LINE WIDTH

FILTER *PR,TMAR6='XX'

ADDS TOP MARGIN ta PRINTOUTS

FILTER *PR,BMARG—XX'

ADDS BOTTOM MARGIN ta PRINTOUTS

FILTER *PR,PAGE=Y/N Br XX'

NUMBER PAGES, SET PAGE NUMBER

FILTER *PR.ROUTE=Y/N

SETS PRINTER ROUTING ON ar OFF

FILTER *PR,R0UTE=*D0

ROUTE PRINTER ta VIDEO if en

FILTER *PR,ROUTE=*RO

ROUTE PRINTER ta RS-232 if en

FILTER *PR,T0F

MOVES PAPER ta TOP OF FORM

FILTER *PR,NEWPG

SET DCB LINE COUNT ta 1

FILTER *PR,SPEC=Y/N

ADDS LPRINT CHR$(1-7) CONTROLS

FILTER *KI,EXTKBD=Y/N

ENTER GRAPHICS FROM KEYBOARD

FILTER *KLCLICK=Y/N

"CLICK" KEYBOARD SOUND a«/aff

FILTER *KI,TONE—XX'

SETS KEYBOARD "CLICK" TONE

FILTER *KI.LEN6TH='XX"

SETS KEYBOARD "CLICK" LENGTH

FILTER *KI,PORT='XX'

SEND "CLICK" SOUND TO PORT XX

FILTER *KI,ECH0=Y/N

ECHO KEYS ta the PRINTER

FILTER *KI,MACRO=Y/N

TURN MACRO KEYS ON ar OFF

FILTER *KI,FILTER

ADDS 256 BYTE KEYBOARD FILTER

FILTER *KI,ORIG—XX'.CHNG—XX'

TRANSLATE KEYBOARD BYTE to CHNG

FILTER *KI,FIND—XX'.CHNG—XX'

TRANSLATE KEYBOARD BYTE ta CHNG

FILTER *KI,RESET

RESET *KI FILTER TABLE

FILTER *KI,DVORAK

GOODBYE QWERTY, HELLO DVORAK!

FILTER *KI,SPEC=Y/N

ADDS SPECIAL CODES Call 1-7

ATTRIB:4,NAME="DISKNAME"

RENAME DRIVE:d DISKETTE

ATTRIB:d, DATE—'00/00/00"

REDATE DRIVEN DISKETTE

ATTRIB:!, PASSWORD

CHAN6E ORIVE d MASTER PASSWORD

DEVICE

DISPLAYS CURRENT CONFIG INFO

All parms above are installed using a new LIBRARY command SYSTEM (parm,parm). Other new LIB options include DBSIDE (enables double sided drive use by treating the "other side" as new independent drive, drives 0 - 7 supported) and SWAP (swap drive code table #'s). Previous PATCHER/CMD (DBSIDE) customers may upgrade to SYSTEM 1.5 for only $9.95 US funds, original PATCHER disk must be returned Dump (CONFIG) all current high and/or bank memory data/routines and other current config data, to a disk data file. If your type ahead is active, you can (optional) store text in the type buffer, which is saved. During a boot, the config file is loaded back into high/bank memory, and interrupts are recognized. After executing any active auto command, any stored type ahead data will be output FANTASTIC! Convert your QWERTY keyboard to a DVORAK! Route printer output to the screen or your RS-232. Macro any key, even F1, F2 or F3. Load *01 - *15 overlay(s) into high/bank memory for a memory only DOS! Enter data faster with the 256 byte type ahead option. Run 4 MGHZ error free as clock, disk I/O routines are properly corrected! Spool printing to high/bank memory. Link spooling to disk. (Spooling updates DCB upon entering storage) Install up to 4 different debugging monitors. Print MS-DOS text files ignoring those unwanted line feeds Copy, Lprint, List, or CATalog DOSPLUS, LS-DOS, LDOS or TRSDOS 6.xx files & disks. Add top/bottom margins and/or page numbers to your hard copy. Rename/Redate disks. Use special printers codes eg: LPRINT CHR$(3); toggles printer output to the ROUTE device. Special keyboard codes add even more versatility. This upgrade improves date file stamping MM/DD/YY instead of just MM/YY. Adds optional verify on/off formatting, enables users to examine *01 -*15, DIR, and BOOT sectors using debug, and corrects all known TrsDos 1.3 DOS errors. Upgrade includes LIB/DVR, a /CMD driver that enables LIBRARY commands, such as DIR, COPY, DEBUG, FREE, PURGE, or even small /CMD programs to be used within a running basic program, without variable or data loss!

ORDER TODAY!

FREE The first 50 customers will receive 2 Disks Full of Choice Model III Public Domain Programs. FREE

WITH YOUR 32k 48k Model Ill's, 48k 64k 128k Model 4 4P4D's. Send $39.95 US funds, plus $4.00 postage/handling to: WITH YOUR ORDER! grl Software, Suite 209, 1051 KLO Road, Kelowna, British Columbia, Canada V1Y 4X6 ORDER!

Attention SYSTEM 1.5.

CP/M - The Alternate DOS for Model 4

DISK AND

uirfEZV# I unT

FORMATS

+1 0

Responses

  • Lucrezia
    What is odh in assembly language?
    6 years ago
  • Sauli
    What is the meaning of aoh,odh in assembly language?
    5 years ago

Post a comment