01 October 1990

The content below is simply a reformatting of text as published decades ago by 9640 NEWS. The opinions and views expressed are not my (Jedimatt42) own. The content is published here to preserve and make accessible the technical data contained within.

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


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.


9640 NEWS

(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

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 $$$CRASH$$$ 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.


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


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.



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.



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



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.


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


[ 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



Michael Zapf
Homburger Str.2
D-6367 Karben 1

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

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


* 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'
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.
       MOVB R0,@>8C02
       SWPB R0
       MOVB R0,@>8C02
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     *


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.



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 *************************************


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.



WINDOW DRIVER Documentation

(c) 1990 Beery Miller and 9640 News


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..............



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.


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.


                    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


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