Taken from the disk distributions archived at http://ftp.whtech.com/Geneve/9640 News disks v1-3/pc99 disks/

October 1990

!README

In one of the MDOS?-ARK archives, are two ‘demo’ test programs called TESTBPGM and TESTGPGM. TESTGPGM requires the use of the Mouse Driver shipped with WINDOWS 9640 and does not respond to the number keys on the display. Both of these programs, and INVOICE and SCROLL, require minimally WIN-DRIVE to be present or a future version of WINDOWS that will contain the enhancements that have been added to the WINDOW’S driver (WINDOWS will handle multiple programs, while the driver will only handle a single program). Enjoy for the time being. Also, 9640 News, Volume 2 #3 is being shipped at the same time. Many of the programs on this disk are IBM compatible files that must be unarchived with PKUNZIP on an IBM and will run only on an IBM. This is a full C compiler that will generate programs for the Geneve. This is a package of enhanced software by Al Beard that is also a Geneve User Project. Several libraries must be written (similar, but not identical to Clint Pulley’s libraries) before this is 100% complete. While this is happening, the final touches are being made to the Geneve compatible version and hopefully, the libraries written by many of the C programmer’s in the Geneve community will be ready at the same time as the MDOS version. A portion of this software to be completed depends upon you to complete and that is why it is being included here. It is to get it into as many people’s hands as quickly as possible and get it finished. This is close to being a group project. I apoligize to the people that may not be able to use it since it does require an IBM, but you should be reaping the benefits that it generates shortly by seeing MANY MANY new programs. C is one of the strongest languages in the IBM world and is fairly easy to port many programs over. I hope you enjoy.

NEWS7

9640 NEWS VOLUME 2 #2

(C) 1990 By Beery W. Miller and 9640 News.

After publishing the last issue of 9640 News, I received a call from Mike McCann of McCann software, author of TPA and TGA for the 9640, and 9640 Forth. Mike was rather upset. In my news section, I described the fix to TPA that allowed TPA to work with MDOS 0.97H. MBP Card for the Geneve

Mike claims, and rightfully so, that the fix was not in TPA, but with MDOS, as Paul changed MDOS to a different ‘spec’ than originally published. Paul meanwhile says that it was to his original documented specs, but not to released notes on the operating system that was made available on the networks, of which, there were several purported versions. This continues to be a problem that faces Myarc and will probably never die. MDOS changes, software doesn’t work. Who do you blame? If your Myarc, you say the programmer. If your the programmer, you say Myarc did it. Was Myarc trying to limit the people that develop software for this computer? If so, they are doing a good job. McCann Software has COMPLETELY STOPPED software development for the 4A/9640. Some due in part to Myarc, mostly due to Software Piracy with action soon to follow (count on it).

In my last issue, my last sentence appeared to cast blame toward Mike McCann for having the ‘buggy’ software. I was not trying to cast blame or say who was at fault. I am not sure, but I am sure of something Paul did say. More programs are going to break after the next release of MDOS. Most notably programs with sector I/O. Now were these programs buggy, or is MDOS buggy, or is Myarc driving software developers out of the market and away from the 9640. The choice is yours to decide. My decision is to blame Myarc….

Mike’s sentiment is following those of many others. The owners of the 9640 are diminishing. Sales have slowed to a trickle (if that much) and it has been ages since we have seen updates to either ABASIC or to MDOS. Myarc appears now to be only fulfilling repairs to their cards. Anyone selling hardware or software will be lucky to sell 100 items to the population. Either of two reasons can usually explain it, software piracy killing the Geneve market, or any cards that are Geneve specific have a price tag above $200 that limits the marketability. Nobody is going to get rich in the Geneve market. I’m not, Bud Mills isn’t, Mike McCann didn’t, and others are reporting the same results. For it’s design and capability, the Geneve is awesome. For it’s support, the Geneve is a nightmare. Myarc lacks the credibility and resources to turn the table. The only thing that can turn the table is finding a unique market that the 9640 can be promoted. Their isn’t software (not yet) that would promote it over an IBM/MAC/ etc., nor is their hardware (not yet) that could push it into such a market. If either came around, it would be a couple of years before results could be seen. In a couple of years, only people with a vested interest in the 9640 would still be programming for the 9640 with the current feelings that are being displayed by owners. And to top it off, negative feelings are beginning to become ‘large’ enough that lawsuits agains Myarc are almost inevitable. Unfortunately, the lawsuits will cost Myarc it’s business, and we will all be the losers. But who are the winners now??????????

Enough said.

The Chicago and Milwaukee Fair

By Beery Miller

Well, the Chicago Fair came and went this year. Myself, I am both happy and sad. In the Geneve world, the two ‘biggies’ did not make it, those being JP Software, and Myarc. Lou Phillips attributed his lack of presence due to a family gathering, but for JP Software, no reason was known.

This year, Geneve wise, not much was introduced that has not already been discussed. Tom Freeman was present with DISkASSEMBLER, The Bugger, and his new program, HARDBACK. All three are mighty fine products. The first two fit the programmer/hacker, the latter is a backup utility for the Myarc HFDC.

This year, Tom Freeman was sitting in for JP Software demonstrating GEN-TRI, the new ‘Geneve Triad’ program by Wayne Stith that has been expanded in capabilities and features a 100 fold. It will include a spelling checker, terminal emulator (support for the HFDC), disk manager, and word processor. The terminal emulator supports batch YMODEM, and the word processor capable of handling nine documents at the same time.

Again this year, I was present representing myself, 9640 News, and for those reading this, you will have in your hands a program I was demonstrating that was quite impressive to many folks. It was a program scrolling multiple Myart pictures in memory very RAPIDLY.

And to rap things up, Bud Mills was present demonstrating all of his wares and the MEMEX card. The MEMEX continues to be one of the most impressive cards to date. As time progresses, software will grow to take advantage of that extra memory, as will the next release of WINDOWS.

As you can see, not much ‘Geneve-Wise’ appeared on the market, and some of the big personalities were not present such as Paul Charlton, Peter Hoddie, Lou Phillips. To me, this was depressing looking back on the fair as last year when I left the fair, I was very excited and had enough notes collected to know that what I did with WINDOWS was possible. I don’t know what will happen next………….

MBP Card

By Beery Miller

While at the last Chicago Fair, I purchased the Willforth prototype board that included a schematic to build your own digital to analog circuit with Clock. A clock is already available on the Geneve, but one was needed for the analog circuit to work. I purchased the card and bought the parts local for under $100 and have the card built. I made one slight adjustment to the board to decode for the addional address lines (AMA,AMB,AMC) by adding a 74LS138. This additional chip was only necessary if you have an additional memory expansion card. At present, I have no source code to work with and would welcome the opportunity of receiving code that anyone has written to use the device. Your help would be appreciated.

Memory Expansion Card(s)

At present, there are two memory expansion cards that could be available to the 9640 and with either card, you may have an incompatible card sitting in your system causing infrequent lockups.

The two cards that are available are modified Myarc 512K expansion cards, or the MEMEX.

What happens if you have an incompatible card? Well, if you are using a MEMEX, no hardware will be hurt, only a lockup. If you are using a Myarc 512K card, you are sitting on a time bomb waiting to go off that could potentially blow chips in any of your cards.

The reason the MEMEX doesn’t blow the chips, is that includes additional circuits and chips to detect a problem arising and removes itself (essentially turning itself off) before the problem occurs, thus just a lockup.

On the Myarc 512K card, the card is not that smart and it is waiting for that right moment to blow something.

What happens is that cards (all CorComp cards, the Myarc FDC, Rave speech card, and unmodified Horizons) do not decode AMA, AMB, AMC on the 60 pin bus line (that big connector in the bottom of everyone’s PEBox) per TI Specifications. As a result, memory pages on a memory device and a card could both be active at the same time (on a Myarc 512K this means trouble) and you risk blowing at least the following chips on any/all cards in your system, 74LS244 and 74LS245 (bus transceivers… the most likely component to be replaced outside of a voltage regulator when any card fails).

If you own the Myarc 512K card, the DSR page is >BA, but since the lines are not decoded on many of the cards listed, they will respond at a ‘simulated’ DSR page of >3A, >7A, and >FA in addition to >BA. With the Myarc 512K card, we only need to worry about >7A as >3A is on the internal bus, not external to the system. If you are running code on page >7A that could open the DSR page >BA, both pages would conflict and result in problems, blown chips, etc. as both pages would want to respond and somebody would win, and somebody would lose.

It’s one of those problems where it is easier to decode the cards than to make all the changes (if possible) to the Myarc 512K to remove the risks. You may get lucky and not blow things when you hit these circumstances, but on the other hand, you may not be lucky.

That’s why I went with the MEMEX. It is safe, reliable, and if you goof as many of us do at times, then you are protected.

If you do own the Myarc 512K and have it modified and find yourself not wanting to take the risk, you can contact Bud Mills and check with him for making the modifications and cost of doing such.

If you own the MEMEX and have found yourself with a problem card, you have probably already made the modifications, and/or set a dip switch that would elimate those memory pages from being accessible to the computer.

EVEN if MEMTEST says there are no errors in memory, you are still subject to these problems if you have a card not following TI’s specifications. If you own the MEMEX, you CAN NOT damage other cards, but the MYARC card CAN and WILL eventually damage something.

Rave Speech

By Beery Miller

Well, I have discovered a problem with the Rave Speech card, or at least my card when using it on an expanded system (above 512K). The speech card apparently in my case does not fully decode even the 16 bits, excluding the full 21 bits necessary to handle the larger memory capabilities. If you run MEMTEST and test with problems in the following pages >3C, >7C, >BC, then your Rave speech card is not fully decoded. I suspect I have an earlier card, so I am making no claims. I am just reporting my results. For the moment, my Rave speech card is sitting in an unexpanded system (I have two Geneve’s) so that it will not conflict with my ‘bigger’ system.

Scanners for the Geneve?

By Beery Miller

As many people already know, WINDOWS 9640 for MDOS has compatibility for the Logitech serial mouse. At the latest Chicago computer fair, several people approached me asking about the availability of interfacing the Logitech Scanner to the Geneve. It was a thought that had crossed my mind several times, but the price of a scanner ($150 to $200) kept me away from seeking the possibility. After the Chicago fair, as I told several people I would look into it, I have the following information to report.

I spoke with (via phone) several people from the Logitech Technical staff. In addition to the scanner, their is a Bus card that fits into a slot on a PC slot. At this point, things started to look dim and they would soon get dimmer. Further discussion yielded that all technology on the board was proprietary and no information was available (pop, the lightbulb blew).

At that point, I had learned that if one owned a Logitech scanner, they could get at no charge, a programmer’s manual detailing all aspects for interfacing to the scanner. All one needed to do was supply the serial numbers from two pieces of software that came with the scanner, and the scanner serial number. Logitech has a toll free number (call information at 1-800-555-1212) so if you own one and could send me the programmer’s package, I will look at it in more detail and return it back to you if you request.

All I can at this point is it looks bleak, unless you know of another scanner that might interface via the RS232 port (and a programmer’s manual is available). I tried and will continue to keep my eyes open.

The John Birdwell Saga

By Beery Miller

It is always sad to hear to hear when someone we are close to has passed away, be it family, friend, or someone in the TI Community. Many times, those that pass away aren’t recognized for their achievements until it is too late.

In our midst, we have a programmer that is suffering from liver cancer and the prospects do not look good for his recovery. He has devoted almost all of his time to his family now. Many people have wondered why this individual has disappeared from the TI/Geneve scene, and it wasn’t until a week after seeing him at the Chicago Fair did I realize he had problems. He was keeping the illness to himself, but via a friend I learned. In the past year, it looks like he has lost nearly 50 pounds. A year ago, he was a happy healthy man, today he is a man 50 pounds thinner, and several operations older.

Liver transplant is not possible. His time is running short. I doubt we will ever see updates in software from him again. He is well known for his work, and has a major piece of fairware in existence. Many people have never paid their fairware portion, even though they routinely use his program.

The program is Disk Utilities, the Author is John Birdwell.

For those that want to now anty up their fairware concept, John’s NEW address is as follows:

      John Birdwell
      1310 Kent Court
      Wheaton, IL 60187
      U.S.A.

Our local user group routinely takes in donations for fairware authors. This month, we have selected John Birdwell as our recipient. We regret it is under these circumstances, but it is about time that John is recognized for his contributions.

John’s other major contributions has been the work with the Myarc Disk Manager V for the Myarc HFDC (quite a bit of MDM5 was by Mike Dodd). John was planning on doing the streamer support for the Myarc HFDC, but that won’t come to be by him. John was also working on DISK-ONE. It’s status is uncertain, but it is doubtful it will be completed.

John’s future is not certain. What is certain, is that the higher the morale of the individual, the healthier the individual is and the longer the individual can be productive. Prayer’s are acceptable, the more the merrier. When I last spoke with John, he had the following comments…. “it won’t be 30 days, I don’t know if it will be two months or six months. The doctors said the weekly treatments were starting to hold the cancer. I have hope.”

Myself, I have only met John 2 or 3 times, but conversed thru mail/messages quite a bit. John has helped me out on quite a few problems over the past couple of years, of which he was always willing to give. Now, it is our time to repay John for what he has done for us. Many times we have wished we could have said something before it was too late. It is not too late now. Speak (and user groups act) to show your appreciation. You have the opportunity now.

John, I would like to personally say thank you for providing us Disk-Utilities and those other utilities that have straightened out my problems from time to time and those other utilities I am sure others have. It was very much appreciated. Hopefully, you will be blessed with the cancer going into recession, and a flow of gratitude demonstrated by the TI Community. You DESERVE it. Thanks.

Software Update

At present, no software by Myarc has been updated above the last issue. By a stroke of luck, the Pascal system may be nearly completed. It seems that GenASM (a MDOS assembler by Paul Charlton) identified several programming style errors that the TI assembler did not locate. Never index from R0…@TABLE(R0)… seems to have been the problem.

What’s New at 9640 News……..

Plenty is new here and more is happening. A new ABASIC game by Tony D’Alfonso has been released called GLOBAL WAR. It is has been updated to Version 2 rather quickly and if you already purchased the game at a TI Fair, you need to send in your update (no cost for Version 1 to Version 2). The game retails for $15 and is one of the most graphic intensive games to date. It uses quite a few My-Art overlays and is for multiple players with game save. Try it, you will like it.

Also new on the front, is a mouse driver for WINDOWS (and any other program written to use drivers) that support the Logitech Serial Mouse connected to the RS232 card. It functions just like the operation of the Myarc Mouse, and you won’t notice the difference. If you require the driver for WINDOWS (and have a Logitech serial mouse) and/or need the driver for the Mouse Development Package by Bruce Hellstrom for the Geneve, then send the necessary disks and $2 to cover postage and handling. No updates have been made to WINDOWS or the Myarc Mouse driver since V1.01. If you have Version 1.00 of WINDOWS, you need the later version at a $2 fee for shipping and handling.

Also to be released in the future and demonstrated in Chicago, was $ by Peter Nuys of Belgium. This is the most intensive stock analysis program exceeding many if not even in the MSDOS world. Peter’s father is a stock broker and tracks stocks every day and asked his son (Peter) to write a program that could track everything he needed to know… trends, statistical analysis, graphic plots, etc. This program will probably retail at an introductory price of $50, but I am not taking orders yet. Peter is in school and completing his degree and the english conversion is necessary before release. This program easily supercedes the capabilities of ANY MDOS program or any 4A program to date. Anything that would require plotting on a daily basis could also be used within this program.

Also being released in 9640 News as a Geneve user project is a Full C Compiler/Linker/ and Assembler for the MSDOS series of computers by Al Beard. This program must be UNARCHIVED on an IBM computer with ARC and must be transmitted via modem to the MSDOS machine. This software package will not run on a GENEVE, but WILL generate programs that DO run on a GENEVE. With the release of this package, we should see many many new programs both in 9640 News and the networks that quickly become available. Also to mention, I said this was a user project. Al has the compiler, most of the libraries are not written and must be written to be compatible with Clint Pulley’s small c source code.

Al is also actively working (and nearly finished) in having the full MDOS version of the compiler completed. When the program can compile itself, he will be satisfied. Presently, he has to compile it on an Amiga/IBM and then run it on a Geneve. It still has a few quirks, but they are almost solved. Al has included a README file in the package that includes most of the necessary information. I would also like to mention that Al’s Linker and Assembler is equivalent to Paul Charlton’s GenPROG (which seems to be difficult for anyone to get hold of) and I think at one point Al was requesting a fairware contribution.

Hopefully the next issue will include the MDOS version with libraries that you the programmer/user can make use of, and also programs from the IBM world that now run on a Geneve. The compiler will never run on a 4A…. requires too much memory and the 4A doesn’t have that much memory.

Also, coming along (but not finished yet) will be an update to WINDOWS 9640 . WINDOWS 9640 version 2 will change and will be attempting to work with all programs that do not write to video ports independent of the Geneve operating system. Also, doing this as many programs are written to use 80 column text mode, the next release will use 80 column text mode and will make use of pull down menu’s with highlighting options selected. This next version will be requiring two upgrade requirement at present, number 1 will be a mouse (myarc or logitech serial) and a monitor that can adequately support 80 columns. The next update will also include the Logitech Mouse driver for RS232 port as a standard.

All I can say at the moment with WINDOWS 9640 is that it will continue to expand. You have supported me, and I am trying to support you and I appreciate your support you have provided me so far. Thanks.

ABASIC World

Bob Sherburne has put together a nice collection of ABASIC programs, one of my favorite is a speed reading program that was excellently written. If you have a child or even yourself (although it’s harder for an adult to increase his/her speed) that needs to read faster, here is the opportunity.

Also included by Klaus Gebecke is HIMIX with updates. Much has taken place with this program and many bugs worked out from the previous release. You might want to give serious thought to using this program in any drawing/graphic/text work that you may desire. Due to the spanish/german to english problem, the docs are straight to the point and may require some testing to familiarize yourself with the program.

Also in this issue is an update to the EDITOR called EDIT that runs directly from MDOS. I can say that this program runs much cleaner with WINDOWS and does not require all of the tricks that the earlier version of WINDOWS required. Most of these changes have been with WINDOWS and not with the EDITOR or any other program. In the next couple of months, you should be seeing notice that WINDOWS has been updated and pricing structure for Version 1 owners (minimal probably), non owners but subscribers, and non owners and non subscribers. Rather complicated, but those that support, I support.

Also available in this issue is a program called SCROLL that requires the WINDOWS driver enclosed (this driver only supports a single program, not multi-tasking, but allows the people that do not own WINDOWS to run programs that use WINDOWS. Distribution rights will be granted to individuals that wish to use the Driver if they develop programs written for WINDOWS. Also included in the SCROLL package are two programs that are in development. One loads and displays Myart Pictures (and I think prints them), and the other is a demo showing the speed of some routines incorporated into the driver that permit high speed CPU to VDP and VDP to CPU transfers faster than the VDP chip can do itself. These routines were written by Ron Walters and will be accessible by any programmer knowing how to use XOP’s. Information on access will be in the manual for Version 2 of WINDOWS 9640. As a test, the TESTBPGM with 0 wait capability can handle VDP reads/writes at 84 frames a second on a 64 by 64 pixel screen area. This is about 5 times faster than the eye can detect. We are close to animation on this ‘slow’ computer (grin).

Well, until later, I appreciate your patience on getting this issue out and hopefully the next one will come even quicker. But as always, it can only go out as quick as information comes in.

P.S. I also have some information I can’t pass around yet, but the Geneve will be seeing some additional software soon that will be VERY impressive, and it will also have an impressive price tag, but it will be worth it. Hopefully next issue I can make an announcement.

Thanks Again

Beery Miller

MOUSE DRIVERS

By Beery Miller

I was asked the other day to put together something that is relatively new to many people that Bruce Hellstrom and myself are trying to standardize. That is MOUSE DRIVERS.

Currently, the only mouse that works as is with the Geneve operating system is the Myarc Mouse. The possibility of buying one is very small if you can find it.

Mouse drivers solve or pass that problem as mice are all over the place (grin) for low prices. WINDOWS has adoped the Mouse driver as it’s standard interface to ANY mouse. Currently, other than test programs, it is the only program using drivers. What it means is that it can use other mice such as the Logitech Serial mouse which has a driver written for it. (At present, it has not been tested with the Asgard Mouse, but in the IBM world they use the same driver, and is suspected they can use the same driver in the Geneve world. If someone tests it and finds it to not work, let me know and the changes necessary could be completed rather quickly as the interface is already written.)

In the case of the mouse driver, it reports continuously the information back to your program in all video modes (text or graphics) along with some pointer on the screen. You do not need to track or worry about code moving the pointer. The driver does that itself independent of you. When you want to know where the mouse is, if a button has been pressed, or to control the speed of the mouse, all you need to do is either read/or write to a memory address that is constantly updated (60 times a second).

Presently, as I said earlier, programs written have to access the driver. WINDOWS can use the Logitech serial mouse, but no other program can until it is written to read the driver’s status. So at the present, the only program that can use a non-standard Geneve mouse, is WINDOWS. Hopefully the standard of using multiple mice will become standard.

DISPLAYDOC

MADISPLAY DOCS

Actually, the program is so simple that it needs no docs… However, I suppose some of you more curious types will have to list the program just to see what makes it tic, and when you do you will see some rather sloppy looking code that I feel needs a bit of explanation. This program was thrown together in less than 2 hours. If a multi-statement line did not work I simply placed the next statement on the next line and kept going. At one time during the writing of the program I had a prompt which asked if you wanted to change modes from hi to lo resolution (or vice-versa) and after some consideration I decided to try and make this feature automatic. It worked! Hence the ON ERROR statements… I was surprised to find that CALL FILES worked so well for the catalog on very first try, but I was more than disappointed that it wiped out some of my cute little border stars and had to rerun the program to put them back in. Are you getting the picture? It was just for fun, so don’t pick the programming apart. Just enjoy the pictures!

MADISPLAY loads from MAB (MYARC ADVANCED BASIC) and probably will only work with version 4/6/89 or higher. It will display only MYART pictures. Use GIF if you want GIF!

You will have 3 prompts to choose from: DISPLAY A PICTURE, CATALOG, QUIT. If you choose to show a picture, press 1 and enter the {drive}.[path].FILENAME.

Press 2 to catalog a drive. Choose hard or floppy and enter the floppy drive number from 1 to 9 or hard drive directory. That’s it.

Press 3 at dinner time.

Bob Sherburne - S.N.U.G.

DOODLEDOC

QUICK DOCS FOR DOODLEBUG

Three button mouse only.

Choose selection with right button on mouse. Selection will flash when pointer is over it. Press the right button and selection will turn color until you leave that mode by pressing middle button.

Left hand button is for drawing. Depress and hold while moving mouse.

Choices of mode:

[N] NEW clears sprites when pressed once and clears screen when pressed twice. [C] COLOR displays colors at bottom of screen. Pick a color from the display or from the screen by pressing the right button. Draw and pick another color or press middle button and to set one color and lose display. [SC] SCREEN color is chosen just as you would choose draw color. [MC] MOUSE color is chosen by running pointer down numbers. Press middle button when mouse turns desired color. [E] ERASE turn draw color the same as screen color. [BE] BOX erase by moving pointer to area to start erase. Press right button and move cursor. Surround area with box and press middle button to erase. [DC] DIAMETER circle can be drawn by moving pointer to area where circle is desired, press right button and dot appears. Move pointer to other edge of circle and press right button. Circle appears. Continues until middle button is pressed. [CR] CIRCLE can be drawn by moving pointer to where epicenter of circle is dBsired and pressing right button. Dot appears. Move cursor and circle follows. When circle is of desired size press right button again. Continue until middle button is pressed. [BX] BOX is formed same as circle. [R] RECTANGEL is formed same as box. [L] LINE is formed same as rectangel. [KL] KLINE works like line only last line point is start of new line. [LM] LOAD Myart load 256 color Myart pics only.

Have fun ****

Bob Sherburne

SPEED-DOC

SPEEDREAD DOCUMENTATION

This program can help! In fact, my own reading speed improved quite a bit while writing this program and testing the routines. The exact extent of the improvment will remain a mystery since the ‘speed test’ code was written last.

Although adults will benefit from using the program, the most impressive results will be noticed when young children use it. They have had the least time to form bad reading habits and become bogged down by them. If the words which are included in DATA are a bit too ‘adult’ for your child simply replace them with appropriate words of the same number of characters. Also, provisions have been made to ‘import text’ so fresh reading matter can be used for the ‘reading pacer’ or timed tests. If you have children, try writing a short story for your child using a word processor. In this way you can check the comprehension while the program gives you the words-per-minute times for the text.

The algorithm used for counting words is quite simple but accurate enough to compare favorably with several word-count programs which I tested. Avoid using text which contains TI-Writer formatter commands or text written in other than eighty column format.

HOW TO USE THIS PROGRAM

After viewing the title screen press any key to proceed to the main menu. This is what you will see:

** MAIN MENU **


PRESS
[ 1 ] to load or save defaults
[ 2 ] to import text
[ 3 ] to change default colors
[ 4 ] to improve speed
[ 5 ] to take speed test
[ 6 ] to catalog storage device
[ 7 ] to return to Basic

After you are familiar with the way the program operates you will probably want to load your defaults, but for now I’ll explain how the other parts of the program work. F8 or F9 will usually take you back to the main menu from anywhere in the program. Just follow the prompts.

OPTION 2 import text

If you have previously loaded defaults you can simply press ENTER, if not, you must follow the prompts and tell the program where to find the text to load. This text will be used for speed tests and pacing. Any DISPLAY VARIABLE 80 text may be used. If you have not loaded text, the default text in DATA will be used. You should read and understand this text as important ideas and information are disclosed here.

OPTION 3 change colors

In this section you can follow the prompts and choose the screen, text, highlight foreground and highlight background colors which are most pleasing to you. The ‘highlight’ colors will be used with the ‘reading pacer’ to help you move on to the next line. These colors will be saved as ‘default colors’ in OPTION 1.

OPTION 4 improve speed

In this section you will be presented with a sub-menu with four choices;

1 Tachistoscope 2 Fixation Exercise 3 Reading Pacer 4 Return to main menu

The tachistoscope flashes words or sentences on the screen for a short period of time. you will be asked whether you would like sentences or words, how long you want them, and how fast you would like them flashed. After entering your lengths and speed, you will hear a beep and a string will be flashed on the screen. You will then be asked to type in the word or sentence which was flashed. A running percentage score will be displayed after each answer along with a message telling you if you are correct or not. As you go along the words will become longer and be flashed faster if your score stays above 90 percent. Once words become too easy you will be moved into sentences which also are flashed faster and become longer. When you can read 10 word sentences (the longest) at a flash speed of 10 (the fastest) You will have completed the course.

The fixation exercise is designed to widen your field of vision. You should ‘fixate’ on the ‘dot’ at screen center while words are flashed around it. Try not to move your eyes away from the dot as this exercise is for improving your ‘side vision’. The words will become longer and split farther apart until a complete screen line is taken up. You can then move on to a faster speed if your score percentage stays high.

The reading pacer is designed to make your eyes move onto the next line of text even though you may have missed a word or phrase on the previous line. You should NEVER look back or ‘regress’ since this severely limits reading speed and breaks up blocks of text and ideas. If you have not loaded defaults the pacer line will be white on magenta, and the text will be the text in DATA. ARTIFICIAL READING PACERS SHOULD NOT BE USED. Your eyes and brain will see and understand more when rulers and fingers are kept off of the page.

All of the above exercises will require that you enter a ‘speed’ to work with. After a little experimentation you will find the speed which is comfortable for you. Start here and gradually increase it as your reading times improve. When reading text you will find that different subject matter requires different speeds for good comprehension. For instance, an article on sub-atomic particles will require you to read at a slower rate than one on washing your dog. Keep in mind however that the faster you read the better your comprehension will be since you will be reading block of text and gathering ideas instead of words.

OPTION 5 speed test

In this section you are simply asked to read. Press ENTER to start the test, press ENTER again each time it is necessary to turn the page, and ENTER again when you are finished. Your speed in words-per-minute will be displayed for you. If no text has been loaded the defalt text in DATA will be displayed. Make sure you read and understand this text.

OPTION 6 catalog a device

You will find this option convenient when searching for text to use with the speed tests and pacer. Simply tell the program if you are using a hard drive or floppy and follow the prompts. If you are using a hard drive just enter the directory you wish to catalog with or without a period. If you are using a ramdisk or floppy just enter the letter or number, with or without the colon or period, or DSK# with or without the period. The catalog will then be displayed for you. If you press ENTER with no parameters your default drive will be cataloged.

OPTION 1 load or save defaults

Now that you have some idea how the program operates you can save your defaults to disk and load them again the next time you use the program. Colors, default text, flash and pacer speeds can be saved to a short DISPLAY VARIABLE 80 file called ‘SRDEFAULTS’. Once loaded, most options can be entered by pressing ENTER. Just follow the prompts to save your defaults.

Bob Sherburne

GURU-DOCS

GURU MEDITATION for the GENEVE 9640

by: Michael Zapf Homburger Str.2 D-6367 Karben 1 FRG

This title may seem familiar to some of you who have already worked on an AMIGA. Yes, the GENEVE can detect errors in machine language programs, too! The TMS9995 microprocessor issues a non-maskable interrupt on level 2 every time it encounters an unknown operation code.

Looking into the interrupt routine in (former) ROM I found that this interrupt which also sets CRU >1FDA to one is ignored by resetting this flag. So the easiest way to implement a routine that display an error message is to modify the interrupt routine to branch to my routine. I placed it in a part of memory which was not available on the TI (addresses >8100 to >82FF). However, you may place this routine wherever you want, but it must not be overwritten by any other application. Another good position could be the cassette routines, but do not forget to delete CS1 and CS2 from GROM in order to prevent someone from calling these routines unintentionally.

After loading the routine using LOAD AND RUN or CALL LOAD, any other program may be loaded, and if the memory area at >8100 has not been modified, the guru routine still resides in memory. Now try this little demonstration: Enter the following lines and assemble them.

                DEF  SMASH
          SMASH DATA >0000
                END

Load it with LOAD AND RUN or CALL LOAD, then load GURU (if not already loaded.) Enter SMASH as program name, and watch the screen. The computer informs you that an error has occured at address >A000 while >20BA was the active workspace and >8400 the status register contents. Press the left mouse button, and the computer returns to the master title screen.

As you can imagine, this routine can never detect all errors. When the computer enters an endless loop, there will often be no illegal opcode which could be detected by the TMS9995. However, if there are bugs in the program, and the computer is sent into unknown regions of the memory (by the so-called JIW (jump in wood) instruction), it will most probably hit an illegal code and branch into the guru routine, thus saving your memory from being totally mixed up.

If you have no mouse (what is very unlikely with GENEVE users) you should modify my routine by replacing the mouse scan loop with a countdown loop (use a register, count it down, and BLWP to >0000 when reaching 0).

This routine is nearly one-to-one simulated from the guru meditation from the AMIGA. If you have both computers, and both of them are using the same monitor, check which one is actually turned on!

Michael Zapf

GURU-S

*** GURU MEDITATION for GENEVE ***
 
* by: Michael Zapf
*     Homburger Str.2
*     D-6367 Karben 1
*     FRG
 
* This utility is invoked by the non-
* maskable MID interrupt generated by
* the TMS9995 after it has encountered
* an illegal operation code.
* The workspace pointer, program counter
* (pointing to the invalid code), and
* status register are displayed after
* the # character.
 
 
* Code length: >1A0 bytes
 
       AORG >8100
 
TEXT1  TEXT 'Software failure.   Press'
       TEXT ' left mouse button to continue.'
TEXT2  TEXT 'Guru meditation  #'
HEXD   TEXT '0123456789ABCDEF'
POINT  TEXT '..'
VDPREG DATA >8004,>8170,>8203,>8347
       DATA >8401,>8506,>8600,>8761
       DATA >8C06,>8D66
 
START  LI   R12,>1FDA  * Check MID
       TB   0          * flag. If set,
       JEQ  START1     * continue, else
       B    @>035E     * return.
 
START1 SBZ  0          * Flag = 0
       LWPI >8300
       LI   R5,>8C00
       LI   R0,>4000   *
       BL   @SETADR    * Clear the
       LI   R2,1920    *
       LI   R1,>2000   *  screen
LOOP   MOVB R1,*R5     *
       DEC  R2         *
       JNE  LOOP
       LI   R0,>06B4   *  Load lower-
       MOVB R0,@>9C02  *  case and
       SWPB R0         *  upper-case
       MOVB R0,@>9C02  *  characters
       LI   R0,>4900   *  from GROM
       BL   @SETADR    *  into VDP RAM.
       LI   R3,96      *
       CLR  R1         *  Caution: These
JL     MOVB R1,*R5     *  chars only
       LI   R2,7       *  occupy 7 bytes
IL     MOVB @>9800,*R5 *  each! The
       DEC  R2         *  first byte
       JNE  IL         *  (00) must be
       DEC  R3         *  added.
       JNE  JL         *
 
       LI   R0,>5000   *  Clear blink
       BL   @SETADR    *  attribute
       LI   R2,270     *  table
       SWPB R1         *
CL1    MOVB R1,*R5     *
       DEC  R2         *
       JNE  CL1        *
       LI   R1,VDPREG  *  VDP registers
LOOP1  MOV  *R1+,R0    *
       BL   @SETADR    *
       CI   R1,START   *
       JL   LOOP1      *
       BL   @WRITE     *  Issue message
       DATA >40AC,TEXT1,56
       BL   @WRITE
       DATA >4158,TEXT2,18
 
       DECT @>83DC     *  correct R14
       LI   R3,>83DA   *
       LI   R6,3       *  Display WP,
DISP   MOV  *R3+,R4    *  PC, and ST as
       LI   R2,4       *  Guru med. #
LD     SRC  R4,12      *
       MOV  R4,R1      *
       ANDI R1,>000F   *
       MOVB @HEXD(R1),*R5
       DEC  R2
       JNE  LD
       DEC  R6
       JEQ  FRAME
       MOVB @POINT,*R5
       JMP  DISP
FRAME  LI   R2,6       *  Build frame.
       LI   R0,>5009   *  Set the blink
       LI   R1,>0180   *  attribute at
F1     BL   @SETADR    *  the character
       MOVB R1,*R5     *  postions of
       SWPB R1         *  the frame(thus
       MOVB R1,*R5     *  only certain
       SWPB R1         *  spaces will be
       AI   R0,10      *  blinking).
       DEC  R2         *
       JNE  F1
       LI   R2,10
       LI   R0,>5000
       SETO R1
       BL   @SETADR
F2     MOVB R1,*R5
       DEC  R2
       JNE  F2
       LI   R2,10
       LI   R0,>503C
       BL   @SETADR
F3     MOVB R1,*R5
       DEC  R2
       JNE  F3
MLOOP  LI   R12,>0038  *  Scan left
       TB   0          *  mouse button.
       JEQ  MLOOP      *
       BLWP @>0000     *  Get out.
 
SETADR SWPB R0
       MOVB R0,@>8C02
       SWPB R0
       MOVB R0,@>8C02
       RT
 
WRITE  MOV  *R11+,R0   * Write the
       MOV  *R11+,R1   * texts
       MOV  *R11+,R2   *
       MOV  R11,R10
       BL   @SETADR
WL     MOVB *R1+,*R5
       DEC  R2
       JNE  WL
       B    *R10
 
       AORG >035A      * Modify inter-
*                      * rupt routine
       B    @START     *
 
       END

README (HIMIX)

Buenos Aires, 19 oct 1990

Dear Beery

If you like, can pupliced in your news what I send on this disk. BASICTIPS is a file what have corrects of basiccomands for BASIC 2.99 With the basicprogram(2.99) PRINT33 can print screens in graphicmode(3,3) sample, double or x4 size. This program need the file “2” for a correct print. The source is named PRINT33S, it sets the VDPregister correct.

Thanks for the news 2 #1. I have not received the disk for GEN-ASS from JP software.

The program HIMIX V.4 work with DOS.97H. HIMIX V.03 is writed for DOS 1.14 With the HIMIX V.4 pressing ‘K’ you can print 16 diferent formats, multipl. rows (x 1-4) and/or columns (x 1-4) one or two screens simultaneos. Please escuse me for the long time, but I have much work and little time for the GENEVE.

KLAUS

BASICTIPS


FOR BASIC 2.99
                     What my manual not say

***********************************************

CALL BTIME(A,B)       MIN=1    MAX=15       blinktime

CALL CIRCLE(1,150,100,50)     correct sintax

CALL FILES("DSK1.")           correct sintax



CALL MKEY(A,B,C,D,E)     A=BUTTON 1    0-1         (MOUSE)
                         B=BUTTON 2    0-1
                         C=BUTTON 3    0-1
                         D=ROW
                         E=COLUMN


CALL CHAR(252,"FF......")   DEFINE MOUSE CURSOR

CALL SEEMOUSE(ROW,COLUMN,A)      A=  1-8


CALL GPOINT(ROW,COLUMN,COLOR)     read a point from screen



CALL PALETTE(A,B,C,D)        A=COLORNUM         colormix
                             B=COLOR  1-7
                             C=COLOR  1-7
                             D=COLOR  1-7


CALL MYART("DSKn.NAME")      Loads pictures(MYARTformat) prevois set
                             correct graphicmode



*********************************************************************



SCREENDUMP IN GRAPHICMODE(2,3)   pixel color white


3530 OPEN #2:"RS232.BA=2400.DA=8.CR.LF"
3540 PRINT #2:CHR$(27);CHR$(65);CHR$(8)
3550 !
3560 FOR E3=0 TO 256 STEP 8
3570 !
3580 PRINT #2:CHR$(10);CHR$(13);CHR$(27);CHR$(75);CHR$(192);CHR$(0);
3590 FOR E2=5888 TO 0 STEP -256
3600 !
3610 CALL PEEKV(E2+E3,K1,K2,K3,K4,K5,K6,K7,K8)
3620 PRINT #2:CHR$(K8);CHR$(K7);CHR$(K6);CHR$(K5);CHR$(K4);CHR$(K3);CHR$(K2);CHR
$(K1)
3630 !
3640 !
3650 NEXT E2
3660 NEXT E3
3670 !
3680 CLOSE #2


****************************************************

SREENDUMP IN GRAPHICMODE(3,3) but very slow      (pixels color 16)

110 DATA 1,2,4,8,16,32,64,128,0
120 FOR A=8 TO 0 STEP-1 :: READ AA(A,1) :: NEXT A


1900 ! IMPRESION
1901 OPEN #2:"RS232.BA=2400.DA=8.CR.LF" :: PRINT #2:CHR$(27);CHR$(65);CHR$(8)
1902 !
1903 FOR Q1=0 TO 192 STEP 8
1904 PRINT #2:CHR$(10);CHR$(13);CHR$(27);CHR$(76);CHR$(0);CHR$(2);
1905 FOR Q2=1 TO 512 :: FOR Q3=8 TO 1 STEP -1 :: CALL GPOINT(Q1+Q3,Q2,Q) :: DEC
=DEC+AA(Q3,Q/32) :: NEXT Q3 :: PRINT #2:CHR$(DEC) :: DEC=0 :: NEXT Q2
1906 NEXT Q1
1907 CLOSE #2

*************************************



SCROLLDOC

Scroll DOCS are inside of this MDOS program. This program requires either WINDOWS, or the WINDOWS Driver included in Volume 2 #2 of 9640 News. Preferably the driver should be used as a jittery motion will be seen when used with any other task that is multi-tasking due to the fact that while one program is running, the other program (SCROLL) can do nothing with the screen for that period of a microsecond.

Enjoy

WIN-DOC

WINDOW DRIVER Documentation

(c) 1990 Beery Miller and 9640 News

V1.1

The enclosed WINDOWS driver is a driver for individual tasks that have been written to support WINDOWS. The enclosed code will NOT properly support multi-tasking. You must purchase WINDOWS 9640 to obtain full support and obtain the WINDOWS mouse driver written by Bruce Hellstrom.

This driver may be freely distributed on any BBS provided all files in the original archive remain intact (WIN-DRIVE, WIN-DRIVF, WIN-DOC, BOXER, BOXER-DOCS, and BOXES)

Programmer’s wishing to obtain additional information on using the driver must purchase WINDOWS 9640 which will contain all necessary information for use of the full version of WINDOWS and supporting code (excluding mouse driver documentation which is sold separately).

It is the intention of this author (Beery Miller) to provide support for people writing WINDOW applications to accomodate those that have not purchased WINDOWS 9640 (as of yet (grin)) and not break the Geneve Community up into individual program segments.

To use this program, you must load WIN-DRIVE either from an AUTOEXEC file (recommended especially for HFDC users), or from any file. It should be noted that the enclosed driver will remain in memory on warm boot and not be destroyed and thus remains a part of the operating system until a cold boot is performed. If another WINDOW’s application is to be run after running an earlier WINDOW’s application, it may be necessary to reload the driver as this code was only provided as ‘support’ for one program use per one boot and nothing more.

If you have questions, orders, etc, please direct them to the following address:

      Beery Miller / 9640 News
      P.O. Box 752465
      Memphis, TN 38175-2465

WINDOWS 9640 may be purchased by subscribers of 9640 News for $15.00 and by non subscribers for $25.00

9640 News, containing 5 disks per volume, may be purchased for $25.00.

If any author’s wish to distribute the driver with any program they develop, please contact me to obtain permission first, which will be granted when asked.

Also included is a demo program using one of the routines that is available within WINDOWS for pop-down menu’s. Source code is provided that show’s how the demo is achieved.

As written, the driver has been tested to work properly under 80 column format, graphics mode. Preliminary testing indicates no problem associated with 40 column graphic modes, although no extensive testing has been performed. If bugs are identified, they will be corrected and an update released.

Enjoy, and PROGRAM…………..

INVOICEDOC

INVOICE

BY Beery W. Miller Copyright 1990

Welcome to INVOICE. INVOICE is a program runnable from MDOS that requires WINDOWS 9640 or a WINDOW’s Driver that I have made available.

The reason I created this program was to create a program that could tabulate orders that I might receive in the mail or at meetings. Once I had the screen layout to my desired parameters, and the ability to accept input as I wished, I decided to let MDOS start tabulating items across columns and down rows as I needed. This program is not designed to handle amounts above $1000 (but in some places it will be possible to handle it). This program uses the MDOS Math library routines that are not fixed and I don’t know what effect earlier or later versions of MDOS will have on it. I am using MDOS V0.97H at present. It is up to you to ‘double check’ the math until you feel comfortable with it’s use.

Features:

At present, when the program is first loaded, you are automatically asked for the shipping address of an individual. My address is used as the supplier. If you wish to change the address for yours, then use a sector editor and near the end of the file my address is located.

Each Line (there are 4 lines, 27 characters in length, followed by >0D,>0A… carriage return/linefeed). Simply insert any character with a sector editor and do not remove or adjust the >0D,>0A bytes. Moving these will cause adverse affects. At the end of the 4 lines, the >0D,>0A,>00 will terminate the field of 4 lines.

Once you have entered the shipping address, you are prompted for Order QTY (in Column 1, up to 99 is available, or maybe 999, not sure). The next field is the Item, the following field is the price and the next column reflects the actual amount shipped. Column 3 and Column 4 are multiplied and placed into Column 5. If the multiplaction of those two columns becomes too large, you will see ‘**’ in the field meaning it it too large to display, although the program knows the correct amount.

Next, you are dropped a line and permitted to enter more items that were ordered. You have three options when on this line.

You can enter a number (same as previous), or you can enter an X or a Y in this field.

Entering an ‘X’ results in everything in the entire INVOICE being added and totaling information supplied.

Entering a ‘Y’ results in the last item added being subtracted from the total and a re-entry of the previous line.

          CAUTION:  YOU CAN NOT REMOVE MULTIPLE LINES WITH 'Y' AND GET CORRECT
                    MATH.  ONLY THE LAST ITEM IN THE BUFFER IS SUBTRACTED.

                    YOU MUST ABORT THE INVOICE (USE 'X' AND START OVER AGAIN),
                    IF YOU NEED TO REMOVE MULTIPLE LINES!!!!

When you have used the X option and entered the PAID amount, everything is calculated. You are then prompted for a SCREEN DUMP of the INVOICE, with an option to reprint again in case you want to create another copy for yourself. After each selection of Y/y for Printing the INVOICE, wait until the printer is completed, hit the space bar, and the next menu will pop up. The reason for this is how the Geneve handles the interrupts within WINDOWS.

Pressing Control C at any keyboard input and following it with the ENTER will exit you from the program.

Pressing ALT-SHIFT (left ones on the side of the keyboard) will return you to WINDOWS if you are using it instead of the Driver.

Since INVOICE does a screen dump and requires the full screen, resizing the INVOICE Window could cause problems. Screen restoration is not provided (yet) from toggling back and forth between WINDOWS and INVOICE, but that will be the next feature to be added. The ‘hard part’ has been written and is already present in the of code of WINDOWS, but has not been implemented for lack of time.

Also, since INVOICE does do a screen dump, make sure you are in 80 column text mode before toggling back.

This program is being released thru 9640 News ONLY. No distribution rights are provided to any group or individual.

Enjoy and if you have any comments, or you decide to make additional enhancements to this program, please send those to me.

Beery Miller P.O. Box 752465 Memphis, TN 38175-2465 U.S.A.

INVOICE-S



SFIRST    B    @MAIN3       START OF MAIN PROGRAM
CLEARSCREEN DATA >0C00      CLEARSCREEN CODE
ELEVEN    DATA 11           WINDOW'S XOP
MAPPER    EQU  >F110        MAPPER ADDRESS
INKEYBUFF EQU  >E100        KEYIN BUFFER IN HIGH RAM
MDOS      EQU  >0000        blwp @mdos to return to mdos
DOSWSP    EQU  >F020        WORKSPACE AREA
HEX40     DATA 40           HEXADECIMAL 40 CREATED FOR US
CRLF      DATA >0D0A,0      CARRIAGE RETURN/LINEFEED, NULL TERMINATED
MATH      DATA 10           MATH XOP LIBRARY
FIVE
KBD       DATA 5            KEYBOARD LIBRARY AND NUMBER 5
MMG       DATA 7            MEMORY MANAGEMENT LIBRARY
VID                         VIDEO LIBRARY
SIX       DATA 6            AND NUMBER SIX
HEX0                        REFERENCES FOR 0
ZERO                        REFERENCES FOR 0
H00       DATA 0            HEXADECIMAL 0
THREE     DATA 3            NUMBER THREE
UTIL      DATA 9            UTILITY XOP FOR ACQUIRING DATE
SPACE     TEXT '    '       BLANK SPACES
          DATA 0            NULL TERMINATED
          EVEN
NOMEM  TEXT 'Not enough memory, task aborting...'          TEXT STRING
       BYTE >0D,>0A,0       NUL TERMINATED
NOMEMLN  EQU $-NOMEM
       EVEN
*                           STARTING POINT
MAIN1
MAIN3  LI   R0,1         *Begin setting up for extra memory
       LI   R1,7         *Request 7 pages
       LI   R2,1         *Local page #1
       CLR  R3           *Slow RAM is OK since we will end up printing
       XOP  @MMG,0       *Ask system for the RAM...
       ABS  R0           *Check for errors
       JEQ  GATMEM       *If none, then go to GOTMEM
       LI   R0,>27          If an error, then we will print this message
       LI   R1,NOMEM        pointer to string message
       CLR  R2              we will let MDOS calculate the string length
       XOP  @VID,0          call video library to display our error message
       BLWP @MDOS        *Warm Reboot of MDOS
GATMEM LI   R0,4         *Get mmgt page map.
       LI   R1,PGETBL    *Put it at pgetbl
       LI   R2,20        *Pgetbl is 10 words wide
       XOP  @MMG,0       *Get our page list of memory

STARTMEUP66
       MOVB @PGETBL+1,@>F111   lets map our memory in
       MOV  @PGETBL2,@>F112    lets map more of our memory in
       MOV  @PGETBL4,@>F114    lets map more of our memory in
       MOV  @PGETBL6,@>F116    lets map more of our memory in

       LI   R1,STOP         This is our control C breakpoint exit routine
       MOV  R1,@>00FE       with a pointer in ram that is executed on interrupts

       LI   R0,>FFFF        these are a couple of routines
TIMER  DEC  R0              to slow the program down so that windows
       JNE  TIMER           can gain control of it before it gets out of
       LI   R0,>FFFF        control.
TIMER1 DEC  R0
       JNE TIMER1

       LI   R0,>0           lets set text mode 80 within the video library
       LI   R1,1            'text mode 80
       XOP  @VID,0          call the library now to set it

       LI   R0,0            lets set up for use of WINDOWS
       CLR  R1              'future' enhancements.
       XOP  @ELEVEN,0       call the library now
REPEATROUTINES1
       MOV  @ROW,@ROWBUFFER   *STARTING AT TOP (HOME), clearing buffer and
*                              it is where we start on multiple invoices
       MOV  @ZERO,@TOTALINT   let's clear our math buffer
       MOV  @ZERO,@TOTALINT+2 more of our math buffer
       MOV  @ZERO,@TOTALINT+4 more of our math buffer
       MOV  @ZERO,@TOTALINT+6 more of our math buffer

       LI   R0,>03          lets use WINDOWS and set our screen positions
       LI   R1,0            top row
       LI   R2,0            left colum
       LI   R3,24           bottom row
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute our wishes

       LI   R0,4            lets grab the date
       LI   R1,DATE         and point to where we want to put it
       XOP  @UTIL,0         'remembering the first byte is string lenth'

       MOVB @CRLF,@DATE+8   let's place a CR/LF at the end of the string
       MOVB @CRLF+1,@DATE+9 so that we can display it later

       BL   @TTYOUT         that later is now and we are going to display it
       DATA DATE,0          using the TTYOUT especially for WINDOWS

       BL   @TTYOUT         let's display our header
       DATA HEADER,0        of who is sending this invoice

       BL   @TTYOUT         let's display our line of qty,description,etc
       DATA LINE1,0         and all of the underlining.

       LI   R0,>03          let's redefine our screen location
       LI   R1,1            top row
       LI   R2,30           left column
       LI   R3,24           bottom row
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute our wishes

       BL   @TTYOUT         display our shipto message
       DATA SHIPTO,0        pointer to the message for our TTYOUT routine


       LI   R0,>03          let's change out screen location to a tigher spot
       LI   R1,1            top row
       LI   R2,40           left column
       LI   R3,24           bottom row
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute our wishes

       LI   R0,>02          now let's call the WINDOWS keyboard input routine
       LI   R1,38           and limit ourselves to 38 characters
       CLR  R2              'future expansion'
       XOP  @ELEVEN,0       call the WINDOWS routines

       LI   R0,>02          this calls the second line of shipping to requested
       LI   R1,38           information with 38 characters
       CLR  R2              future expansion
       XOP  @ELEVEN,0       call the routine

       LI   R0,>02          this takes in the third line
       LI   R1,38           information with 38 characters
       CLR  R2              future expansion
       XOP  @ELEVEN,0       call the routine

       LI   R0,>02          this takes in the final and fourth line of input
       LI   R1,38           information with 38 characters
       CLR  R2              future expansion
       XOP  @ELEVEN,0       call the routine


*the below routines are executed on every loop of input in the invoice

REPEATROUTINES
       LI   R0,>03          lets set our screen position again
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL1,R2        left column      in this case our column 1
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              increment R3 (our bottom row) to give us a 2 line
       LI   R4,79           window to view
       XOP  @ELEVEN,0       execute the routine

       LI   R0,>02          let's get some keyboard input
       LI   R1,3            of 3 characters for column 1
       CLR  R2              future expansion
       XOP  @ELEVEN,0       and execute our wishes

       CB   @>E100,@EXITCHAR compare to see if we exit (total)
       JNE  $+6              if not equal, we see if we need to erase
       B    @CONDITIONFINISH if equal, we go to our finishing routine for adding
       CB   @>E100,@ERASELINE check to see if we need to erase previous line
       JNE  $+6              if not equal we go thru the next loop checking
       B    @CONDITIONERASE  the upper/lower cases alternatives

       CB   @>E100,@EXITCHAR+1   these are the same as above except we are
       JNE  $+6                  checking the opposite case of exiting routines
       B    @CONDITIONFINISH
       CB   @>E100,@ERASELINE+1
       JNE  $+6
       B    @CONDITIONERASE

       BL   @JUSTIFYCOL1    let's justify the column then for a column 1 entry

       LI   R0,>03          lets redefine the window to column 2
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL2,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row+1
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute our wishes

       LI   R0,>02          accept input from WINDOWS
       LI   R1,27           of 27 characters for column 2 (description) field
       CLR  R2              future expansion
       XOP  @ELEVEN,0       call our WINDOWS routine

       LI   R0,>03          let's redefine our window for column 3
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL3,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row+1
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute the routine


       LI   R0,>02          we will accept some keyboard input
       LI   R1,6            of 6 characters
       CLR  R2              future expansion
       XOP  @ELEVEN,0       execute the routine

       BL   @JUSTIFYCOL3    justify column 3
       BL   @PRICE          let's do some a math library routine while out
*                           input is still in our buffer and not contaminated

       LI   R0,>03          lets define our 4th column window
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL4,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row + 1
       LI   R4,79           right column
       XOP  @ELEVEN,0       let's call the windows routine

       LI   R0,>02          lets get our input for number of items shipped
       LI   R1,2            of 2 characters max
       CLR  R2              and this is for future expansion
       XOP  @ELEVEN,0       execute the routine

       BL   @QTY            and set up our entry buffer for the math later

       BL   @SUBTOTAL1      let's do our multiplaction of COL3 * COL 4
       BL   @RUNNINGTOTAL   and keep a running total to our COL5 totals


       INC  @ROWBUFFER      let's increment our row to work on

       B    @REPEATROUTINES let's repeat these entries again

*these routines will finish up this invoice
CONDITIONFINISH

       LI   R0,>03          let's make our working window to the new area
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL1,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row+1
       LI   R4,79           left column
       XOP  @ELEVEN,0       execute our wishes

       BL   @TTYOUT         let's fill our bottom row of underlining in
       DATA FILLBLANKS,0    pointer to the 'underlining' info

       INC  @ROWBUFFER      increment our row buffer now

       LI   R0,>03          lets redefine our window again
       MOV  @ROWBUFFER,R1   top row
       LI   R2,0            left column
       LI   R3,24           bottom row
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute our wishes

       BL   @TTYOUT         display another line of text
       DATA LINE2,0         pointer to the text

       INCT @ROWBUFFER      lets increment our row counter by 2

       LI   R0,>03          let's make our window to a new area
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL3,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INCT R3              bottom row+2
       INCT R3              bottom row+2+2
       LI   R4,79           left column
       XOP  @ELEVEN,0       execute the routine

       BL   @TTYOUT         display our options
       DATA OPTIONS,0       and the pointer to the text

       LI   R0,>03          let's move our window over for the proper numbers
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL5,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INCT R3              bottom row+2
       INCT R3              bottom row+2+2
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute the routine

       BL   @RUNNINGTOTALDISPLAY    execute the routine that tallies our lates
*                                   numbers and displays it

       LI   R0,>02          let's accept some input
       LI   R1,7            of 7 characters
       CLR  R2              future expansion
       XOP  @ELEVEN,0       execute the WINDOWS routines

       BL   @JUSTIFYPAID    and justify our input into column 5
       BL   @SUBTRACTPAID   and subtract what we have paid for a balance due

       LI   R0,>03          let's move our window to a spot where we can
       MOV  @ROWBUFFER,R1   top row          prompt for printing, etc.
       MOV  @COL1,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row+1
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute the routine


       BL   @TTYOUT         Prompt for Printing
       DATA PRINTJOB1,0     pointer to text

       LI   R0,>02          Keyboard input, a single key when R1=1
       CLR  R1              only a single key, no enter required
       CLR  R2              future expansion
       XOP  @ELEVEN,0       and execute the routine


       CB   @>E100,@YES     see if we want to print
       JNE  K1              and if not check the upper/lower case alternative
       BL   @PRINTSCREEN    and if yes, let's print it
K1     CB   @>E100,@YES+1   other case alternative
       JNE  K2              if not let's continue
       BL   @PRINTSCREEN    if so let's print it

K2

       LI   R0,>03          let's redefine our window to the same position
       MOV  @ROWBUFFER,R1   top row
       MOV  @COL1,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row+1
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute the routine


       BL   @TTYOUT         prompt for printing second time
       DATA PRINTJOB2,0     pointer to text

       LI   R0,>02          let's accept another input character
       CLR  R1              of only one key, no enter
       CLR  R2              future expansion
       XOP  @ELEVEN,0       and execute the windows routine


       CB   @>E100,@YES     check for yes to print
       JNE  K3              if not check other case
       BL   @PRINTSCREEN    print the routine
K3     CB   @>E100,@YES+1   if other case
       JNE  K4              not equal the go
       BL   @PRINTSCREEN    else print

       BL   @TTYOUT         if we did print, then let's pause
       DATA PAUSEMSG,0      pointer to pause message

       LI   R0,>02          single character input from windows
       CLR  R1              no enter required
       CLR  R2              future expansion
       XOP  @ELEVEN,0       execute the routine

K4
       LI   R0,>03          let's redefine our window
       MOV  @ROW,R1         and top row
       LI   R2,0            left column
       LI   R3,24           bottom row
       LI   R4,79           right column
       XOP  @ELEVEN,0       and execute the routine

       BL   @TTYOUT         now let's clear the screen
       DATA CLEARSCREEN,0   clearscreen pointer

       B    @REPEATROUTINES1   and now let's repeat for another invoice

PRINTSCREENRTN DATA 0         buffer to hold our pointer for proper return
PRINTSCREEN MOV R11,@PRINTSCREENRTN          let's store our return address

       LI   R0,>03          let's set up our window to clear our previous
       MOV  @ROWBUFFER,R1   prompt for PRINT?  TOP ROW
       MOV  @COL1,R2        left column
       MOV  @ROWBUFFER,R3   bottom row
       INC  R3              bottom row+1
       LI   R4,79           right column
       XOP  @ELEVEN,0       execute the routine

       BL   @TTYOUT         and fill in with blanks
       DATA FILLBLANK,0     pointer to the blanks

       LI   R0,>2B          let's call the routine for doing a screen dump
       LI   R1,1
       LI   R2,0
       XOP  @VID,0          and execute the routine

RESCANKBD
       CLR  R0               * USED AS INTERRUPTS ARE OFF WHILE IN XOP
       XOP  @KBD,0           *rescan normal MDOS way with interrupts on to
       JNE  RESCANKBD        *allow printing to continue

       MOV   @PRINTSCREENRTN,R11             restore our return address

       B    *R11            return

CONDITIONERASE
       BL   @ERASEENTRY

       LI   R0,>03
       MOV  @ROWBUFFER,R1
       MOV  @COL1,R2
       MOV  @ROWBUFFER,R3
       INC  R3
       LI   R4,79
       XOP  @ELEVEN,0


       BL   @TTYOUT
       DATA FILLBLANKS,0

       DEC  @ROWBUFFER
       LI   R0,>03
       MOV  @ROWBUFFER,R1
       MOV  @COL1,R2
       MOV  @ROWBUFFER,R3
       INC  R3
       LI   R4,79
       XOP  @ELEVEN,0

       BL   @TTYOUT
       DATA FILLBLANKS,0
       B    @REPEATROUTINES

PAIDBUFFER BSS 10
PAIDINT    BSS 10
BALANCEBUFFER DATA 0,0,0,0,0
BALANCEINT BSS 10
SUMBUFFER DATA 0,0,0,0,0
SUMINT    DATA 0,0,0,0,0
QTYBUFFER BSS 2
QTYINT    BSS 10
PRICEBUFFER BSS 6
PRICEINT  BSS 10
TOTALBUFFER DATA >0000,>0000,>0000,>0000,>0000
TOTALINT    DATA >0000,>0000,>0000,>0000,>0000
TEMPBUFFER  BSS 10
TEMPINT   BSS 10
TEMPINT1  BSS 10
SUBTOTALBUFFER BSS 10
SUBTOTALINT    BSS 10

PRICE  MOV @>E100,@PRICEBUFFER
       MOV @>E102,@PRICEBUFFER+2
       MOV @>E104,@PRICEBUFFER+4
       B    *R11
QTY    MOV @>E100,@QTYBUFFER
       B    *R11

SUBTOTALRTN DATA 0            *KEEPS TOTAL ACROSS HORIZONTAL ROWS
SUBTOTAL1  MOV R11,@SUBTOTALRTN
       CLR  R3
       LI   R0,PRICEBUFFER

SU1    INC  R3
       MOVB *R0+,R1
       JNE  SU1
       DEC  R3


       LI   R0,17
       LI   R1,PRICEINT
       LI   R2,PRICEBUFFER
       XOP  @MATH,0

       CLR  R3
       LI   R0,QTYBUFFER
SU2
       INC  R3
       MOVB *R0+,R1
       JNE  SU2
       DEC  R3

       LI   R0,17
       LI   R1,QTYINT
       LI   R2,QTYBUFFER
       XOP  @MATH,0

       LI   R0,3
       LI   R1,TEMPINT
       LI   R2,PRICEINT
       LI   R3,QTYINT
       XOP  @MATH,0

*CHECK FOR MATH ERROR
       MOV  @TEMPINT,@SUBTOTALINT
       MOV  @TEMPINT+2,@SUBTOTALINT+2
       MOV  @TEMPINT+4,@SUBTOTALINT+4
       MOV  @TEMPINT+6,@SUBTOTALINT+6

       LI   R0,18
       LI   R1,SUBTOTALBUFFER
       LI   R2,SUBTOTALINT
       LI   R3,1
       LI   R4,4
       LI   R5,3
       XOP  @MATH,0

       MOVB @ZERO,@SUBTOTALBUFFER+7

       LI   R0,>03
       MOV  @ROWBUFFER,R1
       MOV  @COL5,R2
       MOV  @ROWBUFFER,R3
       INC  R3
       LI   R4,79
       XOP  @ELEVEN,0

       BL   @TTYOUT
       DATA SUBTOTALBUFFER,0

       MOV   @SUBTOTALRTN,R11
       B    *R11

ERASEENTRYRTN DATA 0                         * REMOVES LAST ENTRY FROM MATH WITH
ERASEENTRY    MOV  R11,@ERASEENTRYRTN        * Y OPTION USED.



       LI   R0,1
       LI   R1,TEMPINT1
       LI   R2,TEMPINT
       LI   R3,TOTALINT
       XOP  @MATH,0

       MOV  @TEMPINT1,@TOTALINT
       MOV  @TEMPINT1+2,@TOTALINT+2
       MOV  @TEMPINT1+4,@TOTALINT+4
       MOV  @TEMPINT1+6,@TOTALINT+6

       MOV  @ERASEENTRYRTN,R11
       B    *R11


RUNNINGTOTALRTN DATA 0   *KEEPS TOTALS DOWN COLUMNS
RUNNINGTOTAL
       MOV  R11,@RUNNINGTOTALRTN

       LI   R0,>2
       LI   R1,TEMPINT1
       LI   R2,TEMPINT
       LI   R3,TOTALINT
       XOP  @MATH,0

       MOV  @TEMPINT1,@TOTALINT
       MOV  @TEMPINT1+2,@TOTALINT+2
       MOV  @TEMPINT1+4,@TOTALINT+4
       MOV  @TEMPINT1+6,@TOTALINT+6

       MOV  R11,@RUNNINGTOTALRTN
       B    *R11
RUNNINGTOTALDISPLAYRTN  DATA 0
RUNNINGTOTALDISPLAY
       MOV  R11,@RUNNINGTOTALDISPLAYRTN

       LI   R0,18
       LI   R1,TOTALBUFFER
       LI   R2,TOTALINT
       LI   R3,1
       LI   R4,4
       LI   R5,3
       XOP  @MATH,0
       MOVB @CRLF,@TOTALBUFFER+7
       MOVB @CRLF+1,@TOTALBUFFER+8
       MOVB @CRLF+2,@TOTALBUFFER+9

       BL   @TTYOUT
       DATA TOTALBUFFER,0

       MOV  @RUNNINGTOTALDISPLAYRTN,R11
       B    *R11

SUBTRACTPAIDRTN DATA 0
SUBTRACTPAID    MOV  R11,@SUBTRACTPAIDRTN

       MOV  @>E100,@PAIDBUFFER
       MOV  @>E102,@PAIDBUFFER+2
       MOV  @>E104,@PAIDBUFFER+4
       MOV  @>E106,@PAIDBUFFER+6

       CLR  R3
       LI   R0,PAIDBUFFER

SUB1   INC  R3
       MOVB *R0+,R1
       JNE  SUB1
       DEC  R3

       LI   R0,17
       LI   R1,PAIDINT
       LI   R2,PAIDBUFFER
       XOP  @MATH,0


       LI   R0,1
       LI   R1,BALANCEINT
       LI   R2,PAIDINT
       LI   R3,TOTALINT
       XOP  @MATH,0

       LI   R0,18
       LI   R1,BALANCEBUFFER
       LI   R2,BALANCEINT
       LI   R3,1
       LI   R4,4
       LI   R5,3
       XOP  @MATH,0

       MOVB @CRLF,@BALANCEBUFFER+7
       MOVB @CRLF+1,@BALANCEBUFFER+8
       MOVB @CRLF+2,@BALANCEBUFFER+9

       BL   @TTYOUT
       DATA BALANCEBUFFER,0

       MOV  @SUBTRACTPAIDRTN,R11
       B    *R11

JUSTIFYBUFFER BSS 10
JUSTIFYINT DATA 0,0,0,0,0
JUSTIFYRTN DATA 0
JUSTIFYCOL1
       MOV R11,@JUSTIFYRTN
       MOV @>E100,@JUSTIFYBUFFER
       MOV @>E102,@JUSTIFYBUFFER+2
       MOV @>E104,@JUSTIFYBUFFER+4
       MOV @>E106,@JUSTIFYBUFFER+6

       LI   R0,JUSTIFYBUFFER
       CLR  R3
JU1    INC  R3
       MOVB *R0+,R1
       JNE JU1

       LI   R0,17
       LI   R1,JUSTIFYINT
       LI   R2,JUSTIFYBUFFER
       XOP  @MATH,0

       LI   R0,18
       LI   R1,JUSTIFYBUFFER
       LI   R2,JUSTIFYINT
       LI   R3,1
       LI   R4,3
       CLR  R5
       XOP  @MATH,0

       MOVB @CRLF,@JUSTIFYBUFFER+3
       MOVB @CRLF+1,@JUSTIFYBUFFER+4
       MOVB @CRLF+2,@JUSTIFYBUFFER+5

       LI   R0,>03
       MOV  @ROWBUFFER,R1
       MOV  @COL1,R2
       MOV  @ROWBUFFER,R3
       INC  R3
       LI   R4,79
       XOP  @ELEVEN,0

       BL   @TTYOUT
       DATA JUSTIFYBUFFER,0

       MOV  @JUSTIFYRTN,R11
       B    *R11


JUSTIFYCOL3
       MOV R11,@JUSTIFYRTN
       MOV @>E100,@JUSTIFYBUFFER
       MOV @>E102,@JUSTIFYBUFFER+2
       MOV @>E104,@JUSTIFYBUFFER+4
       MOV @>E106,@JUSTIFYBUFFER+6

       LI   R0,JUSTIFYBUFFER
       CLR  R3
JU2    INC  R3
       MOVB *R0+,R1
       JNE JU2

       LI   R0,17
       LI   R1,JUSTIFYINT
       LI   R2,JUSTIFYBUFFER
       XOP  @MATH,0

       LI   R0,18
       LI   R1,JUSTIFYBUFFER
       LI   R2,JUSTIFYINT
       LI   R3,1
       LI   R4,3
       LI   R5,3
       XOP  @MATH,0

       MOVB @CRLF,@JUSTIFYBUFFER+6
       MOVB @CRLF+1,@JUSTIFYBUFFER+7
       MOVB @CRLF+2,@JUSTIFYBUFFER+8

       LI   R0,>03
       MOV  @ROWBUFFER,R1
       MOV  @COL3,R2
       MOV  @ROWBUFFER,R3
       INC  R3
       LI   R4,79
       XOP  @ELEVEN,0

       BL   @TTYOUT
       DATA JUSTIFYBUFFER,0

       MOV  @JUSTIFYRTN,R11
       B    *R11


JUSTIFYPAID
       MOV R11,@JUSTIFYRTN
       MOV @>E100,@JUSTIFYBUFFER
       MOV @>E102,@JUSTIFYBUFFER+2
       MOV @>E104,@JUSTIFYBUFFER+4
       MOV @>E106,@JUSTIFYBUFFER+6

       LI   R0,JUSTIFYBUFFER
       CLR  R3
JU3    INC  R3
       MOVB *R0+,R1
       JNE JU3

       LI   R0,17
       LI   R1,JUSTIFYINT
       LI   R2,JUSTIFYBUFFER
       XOP  @MATH,0

       LI   R0,18
       LI   R1,JUSTIFYBUFFER
       LI   R2,JUSTIFYINT
       LI   R3,1
       LI   R4,4
       LI   R5,3
       XOP  @MATH,0

       MOVB @CRLF,@JUSTIFYBUFFER+7
       MOVB @CRLF+1,@JUSTIFYBUFFER+8
       MOVB @CRLF+2,@JUSTIFYBUFFER+9

       LI   R0,>03
       MOV  @ROWBUFFER,R1
       INC  R1
       MOV  @COL5,R2
       MOV  @ROWBUFFER,R3
       INCT R3
       INC  R3
       LI   R4,79
       XOP  @ELEVEN,0

       BL   @TTYOUT
       DATA JUSTIFYBUFFER,0

       MOV  @JUSTIFYRTN,R11
       B    *R11

EXITCHAR TEXT 'Xx'
ERASELINE TEXT 'Yy'
       EVEN

COL1   DATA 1
COL2   DATA 8
COL3   DATA 40
COL4   DATA 52
COL5   DATA 61
STOP   BLWP @0


YES     TEXT 'Yy'
ROW     DATA 7           FIXED ROW
ROWBUFFER DATA 7
PGETBL  BYTE 0          Page 0 of task    not mapped out                >0000
PGETBL1 BYTE 0          Page 1 of XOP     not mapped out                >2000
PGETBL2 BYTE 0          Page 2 of task    not mapped out                >4000
PGETBL3 BYTE 0          Page 3 of task    not mapped out                >6000
PGETBL4 BYTE 0          Page 4 of task    not mapped out - most of time >8000
PGETBL5 BYTE 0          Page 5 of task    not mapped out                >A000
PGETBL6 BYTE 0          Page 6 of task    not mapped out                >C000
PGETBL7 BYTE 0          Page 7 of task    not mapped out   volatile RAM >E000
        EVEN
CPYSTRRTN DATA 0
TTYOUT NOP
CPYSTR
       LI   R1,>E400
       MOV  *R11+,R2
       MOV  *R11+,R3
       MOV  R11,@CPYSTRRTN
       MOV  R3,R3        *Null terminated string?
       JEQ  CPYS2        *Yes, copy until NULL is found
CPYS1  MOVB *R2+,*R1+    *Repeat  Move source byte to target
       DEC  R3           *Until R3 bytes have been moved
       JEQ  FCOPY        *When done, exit routine
       JMP  CPYS1        *Else continue
CPYS2
       CLR  R0           *R0 <- 0
CPYS3  MOVB *R2+,R0      *Move byte into r0
       MOV  R0,R0        *Is byte a NULL?
       JEQ  CPYS4        *If yes, jump to CPYS4
       MOVB R0,*R1+      *Else move byte to target & inc target address
       JMP  CPYS3        *Loop again
CPYS4  MOVB R0,*R1+      *Move the NULL char
       MOVB R0,*R1+
FCOPY
       LI   R0,>01       *Now call up the WINDOW's display routine
       XOP  @ELEVEN,0    *   the XOP call
       MOV  @CPYSTRRTN,R11   *set up for return
       B    *R11         * return


DATEH  BYTE 0
DATE   BYTE 0,0,0,0,0,0,0,0,0,0,0
       EVEN
HEADER TEXT '9640 NEWS & Beery W. Miller'
       BYTE >0D,>0A
       TEXT 'P.O. Box 752465            '
       BYTE >0D,>0A
       TEXT 'Memphis, TN 38175-2465     '
       BYTE >0D,>0A
       TEXT '                           '
       BYTE >0A,>0D,0
       EVEN
LINE1  TEXT ' Qty    Description                      Each     Shipped     Tota'
       BYTE 'l'
       BYTE >0D,>0A
LINE2  TEXT '____    ___________________________     ______    _______    _____'
       BYTE '_'
       BYTE '_'
       BYTE >0D,>0A,0
ERASECHAR  BYTE >08,>20,>08,0
ERASECHARS
       DATA >0808,>0808,>0808,>0808,>0808,>0808
       DATA >0808,>0808,>0808,>0808,>0808,>0808
       TEXT '                        '
       BYTE 0
       EVEN
SHIPTO TEXT 'Ship To: '
       BYTE 0
       EVEN
FILLBLANK TEXT '                               '
       BYTE >0D,>0A,0
FILLBLANKS
       TEXT '                                                                  '
       BYTE ' '
       BYTE ' '
       BYTE >0D,>0A,0
       EVEN
OPTIONS TEXT 'Total:'
        BYTE >0D,>0A
        TEXT 'Paid:'
        BYTE >0D,>0A
        TEXT 'Balance Due:'
        BYTE 0
        EVEN
PRINTJOB1
       TEXT 'Print Invoice #1? (Y/N) '
       BYTE 0
PRINTJOB2
       TEXT 'Print Invoice #2? (Y/N) '
       BYTE 0
       EVEN
PAUSEMSG
       TEXT 'Next Keystroke erases screen....'
       BYTE >0D,>0A,0
       EVEN
       END