01 August 1991

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/


NEWS Volume 2 #4

By Beery W. Miller

Well Folks, it seem I was just a tad bit slow in this issue in getting it out in the mail. I APOLOGIZE to each and every one of you that had to wait 'and wonder if you were missed on a mailing'. Two reasons are for my slowness. First has been work which kept me out of town on two different occasions for three weeks at a time requiring extensive preparation (in one month I had over 200 hours of overtime). Second, time was precious with my family and it being summer (and spring) slowed me down. Fall is approaching and I am back on the ball again.

I had promised to quite a few people that the next issue (this one) would contain the Full C-Compiler for MDOS on the Geneve 9640. It is nearly complete with all necessary utilities such as libraries, linkers, assemblers, compilers and so forth and will be release as a package on the next issue of 9640 News. There are some minor bugs (but bugs irregardless) that are in the C-Compiler that are not Geneve related, but related to program flaws in the original source code that Al Beard started to work with. It is like 'debugging MicroSoft C'. The bugs that exist are seen when more complicated C programming is written. The good news is that Al and Clint Pulley have been working together to complete the project. Clint appears to have an arsenal of C utilities for the C-Compiler to compile and check/debug. I suspect, but will not bet any money on it, that the next issue (perhaps a double mailing of issues) will be very very soon. As I had this issue ready, I did not want to hold things back.

Well, several things are required to be mentioned in this issue. First for successes on my part. The 9640 NEWS BBS is now online and serving as a huge data-base of programs for the 4A and/or Geneve 9640. There are special areas for 9640 News subscribers that contribute to the board ($12 per year) that will include advance notices on software, hardware, 'beta-software', and other sorts of goodies. NO PIRACY is enforced on this board. Presently, one of the areas that is available to paid subscribers is the "Geneve Delphi Messages". This is a collection of almost 5 megabytes of text pulled from Delphi and available for downloading to your system. Their is still extensive new information that can be picked up here from various personalities that include(d) Lou Phillips, Paul Charlton, Peter Hoddie, Mike Dodd, Al Beard, Clint Pulley, Ron Walters, Gary Bowser, Beery Miller, Myarc representatives, and many others almost too numerous to mention. The board number is 1-901-368-0112 and supports 300/1200/2400 baud, 8N1. If you want to browse the TI section, and the Geneve section (without access to the 9640 News area), you may call. There are over 30 megabytes (guessing) of programs that can be downloaded and made available to anyone. I would like to personally like to thank our local TI MidSouth TI-Users group, S. Affias, J. Miller, G. Lett, and D. Phelps for their initial donations to set the board up. There first to step up attitude will be rewarded.

In addition to being a 'normal' BBS, the board also contains the national TI-ECHO that accesses many BBS's across the U.S. and Canada. Barry Boone, Gary Bowser, Tony D'alfonso, and other personalities frequent the Echo from their local access points. Everyone is welcome to call the board. This is also an easy way to call in with a question, and have a response usually in 24 hours (unless work has me busy). If support is strong enough after all subscribers see the board in operation, I will consider installing a 9600 baud system or another IDE hard drive to provide greater flexibility and to meet your needs (donations of equipment are not refused, the system is a PC 386/SX with a 40 MB drive with the best of equipment.... another 40 meg drive has already been added). Don't be mistaken, I am still a Geneve man, it's just that they use PC's at work and I needed to sometimes bring my work home (sigh). I have also just added another area to the board that may peak your interest. I have added an area that contains my message base Log from Delphi of my most recent checkin. This would be updated daily (twice a day on weekend most likely). There is also 10+ megabytes of GIF's online for those that like Graphic files.

Well, in January saw the official release of WINDOWS 9640 V2.0. Version 2.0 now provides for nearly all programs to be controlled and swapped in/out of memory. Clint Pulley's Disk Manager, Tom Freemans DISkASSEMBLER, Peter Nuys EDITOR, are some programs that work flawlessly. Working at about 99% is Mike McCann's TPA with the only known requirement for one to toggle back into WINDOWS from a particular screen. Working at 99.5 % is Mike Dodd's Hyper-Copy with only the initial Welcome screen displayed funny. WINDOWS 9640 compatible tasks can multi-task. Those programs mentioned above, work best running one at a time. What WINDOWS 9640 does allow you to do as an example is to be working with Multiple copies of the EDITOR in memory, toggling back and forth between each document/source file, dropping to the MDOS WINDOW, and perhaps assembling the EDITOR files. If an error occured on the assembly process, one could easily toggle right back into memory into the editor WITHOUT reloading the editor program or the source file. Make the change and assemble again. WINDOWS 9640 Version 2 now supports complete screen restoration in almost all programs. Only a few that do everything completely non-standard to MDOS and graphic programming have problems (Picture Transfer is one, and was required since MDOS was not complete enough at it's release so it could run properly without playing some tricks).

      I will be the first to say that V1.x was limited in usefulness.
      Version 2.0 DEFINITELY breaks that barrier and opens many doors.
      In about a year (or when time prevails), unlimited swapping of tasks
      to memory/hard-drive will become a reality and hopefully solving
      the non-WINDOWS single task display option.  I think I know how it
      can be implemented, now it requires time (and learning some more).

Since the last release of 9640 News, a release of MDOS 1.15 and 0.98H was 'inadvertently' made available. Nearly all systems have removed them from their boards as this was not an 'unofficial' official release. I have looked over these files and can say I don't like these versions. Hopefully, as indicated by Paul Charlton, these are 'in-development' versions for their work on the P-System.

Regarding the P-System, I have seen and run it and it appears to be working without any major difficulty. I have been told that P-System programs that worked with the P-Code Card for the 4A works with no problems and are workable instantly. I have not tested it yet, but I have available some unreleased TI-Software designed to work the the P-Code card that should work.

At most TI-Fairs, I am asked about the future of Myarc. I can offer these observations after speaking with Lou and some fairly direct (indirect) information. Lou is still TI (Geneve) thru and thru. The computer is still his dream, but it is taking the back table to his job. His job makes money, the Geneve and/or other hardware that Myarc sells does not and will not and will not see it ever be profitable again. Even if Lou and others organized a major comeback, the Geneve 'in the eyes of the vast market', could not compete profitably with other machines ........ sad to say. Myarc and company will 'probably' release other software, but don't hold your breath on it. If they don't, I WILL.

Mike McCann has released HQ_Stacks for the Geneve 9640. The program boasts many capabilities, but will require user support. HQ_Stacks allows an individual 'essentially' to interface a command language at assembly speed in something near a basic enviroment. For the user that wants to program with something faster (and more reliable) than MyBasic, HQ_Stacks opens that door and also allows the user an interface between between the program and the MDOS command line interpreter. HQ_STACKS is available from McCann Software for $49.95.

In addition, the TI-Chicago Fair should see a major software piece released for the TI/Geneve with the greatest potential for the Geneve. Barry Boone has written an emulator that uses the TI Sound chip and reproduces music/sound/data from the PC Soundblaster card. I was given a demo over the phone by Barry Boone and it was just like you were sitting in the middle of an orchestra. Now the software will not be able to record music, but it can play the music back through your monitor WITHOUT any additional hardware as required by a PC. I was VERY impressed with the software. A Geneve with 2 MB of ram could hold handily 10 minutes of speech (5 minutes of music) in memory, whereas a TI-99/4A would only hold at the most 15 seconds of sound. I have been told their is the potential of some vendor at the Chicago Fair that might just have a demo running with his picture on the screen...... We'll wait and see......

What other software lies in the future? I have spoken with several authors in the past 2 to 3 months. Software that is complete or nearly complete are things such as:)

1) MDOS Terminal Emulator supporting full XMODEM/YMODEM to HFDC
2) CADD Drawing package (modular)
3) Another Page making project, similar to Page Pro (80 columns, MDOS).
4) TETRIS (better than any copy anyone is currently selling) from MDOS
5) Hard drive backup utilities.

Recently, I finally tracked down information on the chips in the Myarc Hard and Floppy disk controller. I now have copies of this controller chip manual for $10(mail to: P.O. Box 752465, Memphis, TN 38175-2465). The manual gives extensive on everything necessary to use the chip and the schematics necessary to interface it to a hard drive. The only missing piece of schematic, was what Myarc developed to add their EPROM and interface the hardware to the Geneve Bus. As the hardware in the manual is public domain (schematics), one might have enough info with a little aid of looking at the Myarc HFDC to build their own. Myarc would only own the code in the EPROM and any PAL's that are on the card. Food for thought anyone?

I think I made mention on Delphi and other networks of a project I was working on. That was DIGITIZING with the Geneve with LIVE TIME video display on the monitor. The project is 85 % hardware complete as I got stuck (hopefully temporarily) at a point. The hardware mods/software/etc. involve currently replacing the 9938 with a 9958 chip, and adding the necessary hardware to take a NTSC signal from a camcorder, TV, VCR, and converting it to it's individual red, green, and blue components. The hard part is done. The easy part of replacing a 9938 with a 9958 chip has me stuck. My 9958 chip continuously scrolls the screen in the horizontal direction indicating the HSYNC is not in synchronization. If anyone has completed this mod, please ADVISE as I have just about pulled my hair out on this one. I am starting to suspect a bad 9958 chip, but I don't know for sure yet until I get my replacements in.

Speaking of digitizing, there is a package that has been available, but the majority of folks was not aware of it's existence. Joe Syzdek has released an Image Wise Digitizer software package. Included on this disk are two demo pictures and demo software along with information on where one can obtain the full fledged software and hardware. The hardware connects via RS232 interface and allows the 'dithering' effect for black and white pictures. When you see the files that are on here, you will be impressed.

On a last minute note, Randy Moore, author of SectorOne, has released SectorOne V3.0. V3.0 runs directly out of MDOS (0.97h) and allows full sector editing of the hard drive. Also included with this file is source code for loading My-Art pictures from MDOS, and a GPL program to permit formatting floppy drives to 1.44 MB. Please note that MDOS does not allege to support this high density. Thanks for the wonderful files Randy.

Also included in this issue is a collection of cMDOS source code and 9640 Fortran source in the package called PGMS-ARK. Some files contain docs, others will require you to look at the source to possibly see how they are used. For Example, I believe one program is called DIAL. To use it, from MDOS type DIAL 1-901-368-0112 (to call my BBS).

Anyways, I thank everyone that has contributed and "shortly", there should be another issue of 9640 News (or two).

P.S. Please look at your label on your mailer if you have not already discarded it. There should be a number in the lower left corner. The current issue # is "9". At issue # 10, most subscribers subscription will run out as this will complete Volume #2. Please subscribe early to help me consciounsly know that another volume will continue.



* 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: >1A8 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     *  certain space
       SWPB R1         *  characters will
       AI   R0,10      *  blink).
       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      *
       LI   R0,>8D0F   *  Stop
       BL   @SETADR    *  blinking
       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     *



Version 1.0

Copyright 1991 by Joseph M. Syzdek

IWD is a program that allows display of digitized video picture files obtained with the ImageWise video digitizer. The program runs in the native mode (MDOS) of the Myarc 9640 and permits display in both the 256 x 212 and 512 x 212 graphics modes. The program also allows you to adjust contrast, set a threshold level, and save images in either ImageWise or My-Art formats.

IWD requires a total of 12 pages of free memory to be available. If you get a memory allocation error you will have to reduce the size of the internal RAMDISK.

The program is run from the MDOS prompt:

         IWD [d:]filename

where "d" is the appropriate drive letter where the ImageWise picture "filename" is stored. If you omit the filename, you will be prompted for a filename after the program loads. As the picture file loads, it will be displayed line by line. Pressing the Function 4 key will bypass the display, if desired. The program defaults to 512 x 212 hi-res mode but can be set for 256 x 212 mode by specifying the /L option , such as: IWD A:PIC /L .


ImageWise picture files are in Display Fixed 128 format. This program will only accept UNCOMPRESSED ImageWise data files (246 sectors long). The data files contain brightness levels for a 256 x 244 image in 64 shades of grey, along with delimiters for start of file (>40), start of video line (>41) and end of file (>42).


Since the Geneve can only display eight "true" shades of grey in the 512 x 212 mode, the 16 color palette is made up of the shades of grey plus "tinted" shades of grey. This is aparrent when the palette is examined in My-Art after loading a converted picture. In the 512 x 212 graphics mode, two pixels are placed on the screen for every pixel in the original 256 pixel per line image. This allows a "dithering" process where the pixels are not the same color if their greyscale value is close to the value of the next palette color. To the eye, this appears as an intermediate color, and it looks like we are displaying 32 shades.

A red tint is provided when the file is loaded. The tint can be changed by pressing the R,G,B, or M keys for red, green, blue, or grey when the picture is displayed. The change in tint does not carry over into saving the picture in My-Art format. The My-Art picture will have the red tint.

In the low resolution mode (256 x 212) , 16 colors are assigned to the greyscale values in increments of 4. These colors can be modified by selecting M (Modify Color Table) from the menu while in the 256 x 212 mode.


IWD loads the picture file into memory. All modifications to the image and screen display are done by means of Look Up Tables (LUTs). The output LUTs control what color is displayed on the screen for the 64 grey scale values in the picture file and what colors are used when the image is stored in My-Art format. The output LUT can be modified in the 256 x 212 mode but cannot be altered in the 512 x 212 mode.

The input LUT performs all modifications to the picture data. Data for each pixel value is translated when a picture file is displayed or saved to a new file. The original picture data in memory is not changed.


The input LUT is a 64 byte table of values corresponding to the 64 grey scale values in an ImageWise picture file. When a picture file is loaded or displayed each pixel value is translated to the corresponding value in the table for that value. If the LUT is linear (has the values 0 thru 63), then the original data is unchanged. If the order of the data in the LUT were reversed (63 to 0) then an inverse video picture would result (dark areas would become white and vice versa). By simply altering the values in the LUT a number of useful functions can be accomplished.

If we put the value zero (black) in positions 0 thru 30 of the input LUT, and put the value 63 (white) in positions 31 thru 63, then we have created a THRESHOLD LUT. All pixels in our picture file with brightness values of 30 or less will be translated to brightness value 0 (black) and all pixels with brightness values of 31 to 63 will be translated to brightness value 63 (white).

Contrast enhancement can be done by "sliding" and "stretching" the values in the input LUT. This is useful when your digitized picture is too dark or has too little contrast and looks muddy.


The program menu is selected by pressing the Function 9 key when a picture is completely displayed. If you press Function 4 while a picture is being written to the screen, the menu will be displayed. The program uses the MDOS video XOPs to display the pictures and therefore is not optimized for speed. Each time you Display the picture it is re-written to the screen.


  L- Load another ImageWise picture file. Press Function 4 to skip the display. Press Control C to terminate program.

  D- Display the picture file in memory. Press Function 4 to return to the menu before the picture is completely displayed.

  H- Histogram of picture. Plots a histogram of the 64 greyscale values in the currently loaded picture using the Input Look Up Table.  This gives an idea of the amount of contrast, etc. in the picture and the effects of any adjustments you make. Pixel values run from 0 thru 63 at the bottom of the screen. The vertical lines are the (scaled) number of pixels at each intensity.  Press Function 9 to return to the menu.

  S- Save picture in My-Art format. Will save to the present graphics resolution.

  J- Save picture in ImageWise format.

  R- Change display resolution, 256 x 212 vs 512 x 212.

  # -Skip # of lines at top of picture. (212 lines displayed vs 244 in ImageWise data file)

  M -Modify Color table (256 x 212 mode only). Modifys the Low Resolution Output LUT that translates the grey scale values to colors on the screen and  in My-Art files. Use the left and right arrow keys to move to the color you want to change (no indicator is provided) and use the + and - keys to increment or decrement the color value. The values are displayed at the left of the display. Press Function 9 to return to the menu.

Look Up Table Operations

  N- Normalize input LUT. Resets the input Look Up Table to a linear 0 thru 63.

  I- Invert input LUT. Sets input LUT to an inverse linear 63 thru 0. If you wish to manipulate an inverse picture, it is suggested that you save it in ImageWise format and re-load it after using "N" to normalize the input LUT.

  T- Set threshold value where all pixels with a brightness level less than or equal to  the threshold are translated to black and those with a brightness level greater than the threshold are translated to white. Values 0 thru 63 are accepted. Try a value of 32 (midpoint) initially.

  +  Plus slide
  -  Minus slide - Adds or subtracts the number you enter from the normal values in the input LUT. Any values that result in numbers less than zero are set to zero and results higher than 63 are set to 63. The input LUT is generated from a normal LUT each time a new slide value is entered.  This is used to darken or lighten an image.

  *  Stretch - Multiply the current values in the input LUT by the value you enter. Typically, you will use small values such as 2,3,or 4. Use in conjunction with - (Minus slide) to expand contrast ratio of an image.

  C- Contour. Set the input LUT to translate the 64 greyscale values to a lesser number of values.

The IWD program is FAIRWARE. If you use it regularly please send what you think it is worth along with any comments or suggestions to:

                  Joseph M. Syzdek
                  99 Highland Ave
                  West Springfield, MA 01089-1017

Payments of $20 will entitle you to complete source code if you send a blank disk.

ImageWise is a trademark and copyright of CIRCUIT CELLAR INC. ,4 Park St. , Suite 12, Vernon, CT 06066


The ImageWise Video Digitizer first appeared in the May and June 1987 issues of BYTE magazine. The articles described the greyscale digitizer that connects to the RS 232 port of any computer provided there is software for the computer to communicate with it. Steve Langguth wrote several programs for the TI 99/4A to capture data and display/convert it to TI Artist format. The resulting TI Artist picture varied in quality depending on the scene and the lighting. A number of TI Artist pictures demonstrating the digitizer software made the rounds on the networks several years ago. With some prodding from the president of our user group, we each purchased an ImageWise Digitizer in kit form.

The kit was easy for any experienced electronics kit builder to put together. We opted for the partial kit (PC board and a number of hard-to- find components). We had to order the remaining components from several sources. Kits are available with all parts as are fully assembled units.

After experimenting with Steve Langguth's programs it became apparent that the Geneve had the capability to display the images in more detail than the resolution available in TI Artist format. All that was missing was the software to do the job.

The ImageWise Digitizer will "grab" a frame in one-sixtieth of a second and digitize it as a 256 X 244 image in 64 shades of grey. On command from the computer, it will transmit the digitized data via the RS 232 to the computer for storage or display.

I began by writing several programs for the Geneve to display and manipulate the ImageWise data file. Eventually these programs were combined into one program which became my ImageWise Display Program (V1.0, fairware version) and IWD Plus (V2.0, the complete version). The major difference between the fairware version and the IWD Plus version is the addition of the "Grab" function so that the Geneve can directly capture the data over the RS 232 port with the IWD Plus software at either 9600 or 19200 baud.

The faireware version functions as a demo or can be used if the user has a way to capture the ImageWise data file to disk. The IWD Plus software also has provisions for loading in external Look Up Tables (LUTs) for doing some custom image processing. Both programs allow some basic image processing functions such as contrast adjustment, thresholding, and inversion.

Sample ImageWise pictures are included on the IWD disk. The filenames are JOKER and SKELETONS. Load the JOKER picture per the instructions and note how it looks.

Press Function 9 to get to the main menu. Select 'H' for a histogram which is a plot of quantity of pixels at each intensity. You will note that the greatest quantity of pixels start at an intensity value of 22 (before the midpoint of the X axis).

Return to the main menu by pressing Function 9. Select '-' for a minus slide and enter a value of 22 (Press Enter). Select 'H' again to view the histogram. You will see that the plot has been shifted to the left. Return to the main menu (F 9) and select '*' (stretch). Enter a value of 4. View the histogram and see that the plot has expanded to cover the entire range 0 to 63. Return to the menu and select 'D' to display the picture. It should appear sharper than when originally loaded since we have adjusted the contrast ratio.

That was an example of the Image Processing capabilities of IWD. Always save your original image because you will always lose some detail when you manipulate the data.

The ImageWise Plus program is available for $14.95 plus $1.50 shipping ($16.45 total) from Joseph M. Syzdek, 99 Highland Ave., West Springfield, MA 01089-1017.

The ImageWise Video Digitizer kits are available from Circuit Cellar Inc., 4 Park St.- Suite 12 , Vernon , CT 06066 (203-875-2751).

-README (Sector One)

                              ARCHIVE OF SECTOR ONE
                                   Version 3.0
                                     7 Aug 91

Files included in this archive is

       1  -README        this file
       2  SODOC          SECTOR ONE docs
       3  SEC1           program file 1
       4  SEC2           program file 2
       6  SECTORONE      a batch file that loads TITLE then SECONE
       7  DISP           a Myart picture loader
       8  DISP_S         source code for DISP
       9  TITLE          Myart File
       10 FORMATIT       a formatter I wrote that verifies 1.44m floppies
                             (use with .97 MDOS or higher only)

                                 *   WARNING   *

       I will not be held responsable for any loss or damage of data stored on
       any floppy or hard drive storage device! I can not control the use of
       this program so I must make this statement! I have tested this program
       on my and two other computers and have found it to be error free. As
       you know there is no program that is totally free of errors because
       the programmer can't simulate all conditions so if you discover any
       bugs please let me know so the bug can be corrected and a new version

                                                           Randy Moore....


This is another game originally for the TI-99/4A that I have modified for use with the Geneve 9640. This program is run from ABASIC. Type "BASIC1" at the "A>" prompt to enter ABASIC. Then enter "RUN DSKx.3DTTT_M" to execute the program.

At the beginning of the program, you will be asked a few questions. Move the mouse over the answer you wish to enter and press the left mouse button. To play the game, move the mouse where you wish to place your "X" or "O" and again press the left mouse button. This Geneve version is best suited for player vs. computer since it is set up for use with the mouse. If this is distributed, PLEASE distribute it with the original TI-based program so that credit will go to those who originally authored it.

Jeffrey A. Kuhlmann
1510 Live Oak, Drive
Temple, TX 76504-6469


C   JEFFREY A. KUHLMANN 12/18/90, 09:20
       INTEGER *1 COMMAND(81)
       INTEGER *2 CTR,A
       INTEGER *2 SOUND1(10)
       INTEGER *2 SOUND2(10)
       DATA SOUND1/941,697,697,697,770,770,770,852,852,852/
       DATA SOUND2/1336,1209,1336,1447,1209,1336,1447,1209,1336,1447/
       IF (IERROR.NE.0) WRITE(6,9100) IERROR        !SEE IF MDOS ERROR
9100   FORMAT (' INPUT ERROR: ',I6)
       CTR=2                                        !SKIP LENGTH CHARACTER
      DO WHILE (CTR-1.LE.COMMAND(1))                !DO LOOP FOR EACH NUMBER
       A=COMMAND(CTR)-47                            !USE MOD. # AS SUBSCRIPT
       IF ((A.LE.10).AND.(A.GE.1)) THEN             !IS IT LEGAL (0-9)?
      CALL SOUND(150,SOUND1(A),0,SOUND2(A),0)       !YES
      ELSE IF (COMMAND(CTR).NE.45) THEN             !IS IT THE '-'?
      PRINT ,'ERROR IN PHONE #'                     !NO
      CALL EXIT                                     !GET OUT OF HERE
       CTR=CTR+1                                    !INCREMENT COUNTER
       CALL DELAY(2)                                !WAIT FOR SOUND
       ENDDO                                        !REDO LOOP
       END                                          !END OF PROGRAM


This is a program I wrote to aid in finding the length of text files on disk. I was looking through my disks printing some documentation that I had neglected for some time. Rather than load these into QDE (Clint Pulley's Editor from MDOS), I wanted a quick way of finding the length of these files. I wanted this information to determine if I needed to format the text with ROFF (a formatter from C). If examining a file on the default drive, the drive letter is not needed. Other than that, the accompanying 'C' code is pretty much self- explanatory. Hope this comes in handy!!

Jeffrey A. Kuhlmann
1510 Live Oak Drive
Temple, TX 76504
(817) 773-7290


/* This is useful if you have typed something & are wondering if it is   */
/* over 66 lines (a normal page).  I use this when looking back at text  */
/* file I have on disk.                                                  */

#include "a:stdio_h"                            /* So I have access to "fopen"*/
int c,counter;
char line[81];
FILE df;                                        /* Space for file name        */

main(argc,argv) int argc;char *argv[];          /* Input parameters           */
{ if(argc<2)                                    /* Oops, no file name         */
  { puts("Usage : DV80LENGTH {file name} \n");
puts("MDOS FILE LENGTH REPORTER\n");            /* Title                      */
puts("Jeffrey A. Kuhlmann 12/89\n\n");
if(!(df=fopen(argv[1],"r")))                    /* Can I open file?           */
{ puts("ERROR - Unable to open file\n");        /* Nope                       */
c=1;                                            /* Status of file (if c=1 then*/
counter=0;                                      /* I am not at the end of file*/
 {c=fgets(line,81,df);counter++;}               /* Input line         */
counter--;                                      /* Counter is one too big     */
printf("The number of lines in the file is %d",counter);    /* Print results  */


/* THIS PROGRAM WILL COMPARE TWO D/V 80 FILES                            */
/* This is useful if you wish to compare two files which you have saved  */
/* on disk.                                                              */

#include "a:stdio_h"                         /* So I have access to "fopen"*/
#include "b:string_h"                        /* So I have access to "strcmp*/
int c,d,cifeq,countr;
char line[81],line1[81];

FILE inf1;                                   /* Space for file name1       */
FILE inf2;                                   /* Space for file name2       */
main(argc,argv) int argc;char *argv[];       /* Input parameters           */
{ if(argc<2)                                 /* Oops, no file name         */
  { puts("Usage : FCOMPARE   {file name} {file name}\n");
puts("MDOS FILE COMPARE PROGRAM\n");         /* Title                      */
puts("Jeffrey A. Kuhlmann 4/90\n\n");
if(!(inf1=fopen(argv[1],"r")))               /* Can I open file1?          */
{ printf("ERROR - Unable to open %s\n",argv[1]);/*Nope                     */
if(!(inf2=fopen(argv[2],"r")))               /* Can I open file2?          */
{ printf("ERROR - Unable to open %s\n",argv[2]);/* Nope                    */
countr=0;                                    /* Reset counter              */
c=1;d=1;                                     /* 'c' and 'd' are file status*/
 {c=fgets(line,81,inf1);                     /* Input line from file1 */
  d=fgets(line1,81,inf2);                    /* Input line from file2 */
  cifeq=strcmp(line,line1);countr++;         /* Equal?                */
  if (cifeq!=0){puts("Files differ in content and/or length--\n");
  printf("They differ in line %d",countr);exit(7);}}
puts("The files are equal both in content and length");    /* Print results  */


*       PROGRAM KT                              !KNIGHT'S TOUR

*       AUTHOR:               JEFFREY A. KUHLMANN
*       DATE:                 MARCH 31,1991
*                             HOLLOW SQUARE AT TOP IS HELP (PRESS LEFT BUTTON)
*                             IT.
*                             ATTN: JEFFREY A. KUHLMANN
*                             SFTS DET, CASSD
*                             APO , NEW YORK 09165
*                             USA
*                             or       ..
*                             JEFFREY KuHLMANN
*                             ZIEGELSTR. 15
*                             D-6452
*                             HAINBURG, DEUTSCHLAND
*                                               !under help
        INTEGER *2 X,Y,SPEED,C,XV,YV,CV,PX,PY   !misc variables
        INTEGER *1 AR(801)                      !array to hold video information

        INTEGER *2 OX(50)                       !array for old x position
        INTEGER *2 OY(50)                       !array for old y position
        INTEGER *2 OP                           !old position pointer
        LOGICAL *2 L,M,R                        !mouse buttons
        INTEGER *1 H                            !help mode
        INTEGER *1 NSL                          !# of squares left
100     CALL SETMOD(0)                          !40 column screen
        CALL SETMSE(10,10,3)                    !set up mouse
        CALL CHAR(1 ,'007E7E7E7E7E7E00'X)       !my cursor definition
        CALL CHAR(88,'FF848484848484FF'X)       !dialog box definition
        CALL CHAR(90,'FF00FF00FF00FF00'X)       !top of screen character
        CALL CHAR(97, '000000FF00000000'X)      !horizontal line - a
        CALL CHAR(98, '000000FF80808080'X)      !upper left      - b
        CALL CHAR(99, '000000FF04040404'X)      !upper right     - c
        CALL CHAR(100,'0404040404040404'X)      !vertical line R - d
        CALL CHAR(101,'808080FF00000000'X)      !lower left      - e
        CALL CHAR(102,'040404FF00000000'X)      !lower right     - f
        CALL CHAR(103,'8080808080808080'X)      !vertical line L - g
        CALL CHAR(34, '1818100000000000'X)      !redefine quote (")
        CALL CHAR(107,'FF81A9B4A9A584FF'X)      !knight character
        CALL CHAR(118,'FFFFFFFFFFFFFFFF'X)      !'already visited' character
4       DO 1    I=8,15                          !build playing area
1       CALL HCHAR(I,17,88,8)
        OP=1                                    !initialize old position pointer

        NSL=63                                  !63 squares left
        CALL SETPOS(0,0)                        !place cursor in upper left
        PX=IRAND(8)+17                          !supposedly choose random #
        PY=IRAND(8)+8                           !ditto
        CALL HCHAR(PY,PX,107)                   !place knight there
        OX(OP)=PX                               !save starting locations
2       CALL GETMSE(X,Y,L,M,R)                  !read mouse
        IF((Y.GT.0).AND.(X.GT.0).AND.(X.LT.40).AND.(Y.LT.24)) THEN  !display
        CALL GCHAR(Y,X,C)                                           !cursor?
        CALL VCHAR(Y,X,1 )                                          !cursor
        CALL VCHAR(Y,X,C)                                           !old char.
        IF (.NOT.(L.OR.M.OR.R)) THEN            !no mouse button pressed
        GOTO 2                                  !so jump up and wait
        CALL SETPOS(3,20)                       !show how many squares left
        PRINT ,NSL
        IF (M) THEN                             !restart game
        GOTO 4
        IF (R.AND.(OP.GT.1)) THEN               !erase move
5       IF (R) THEN                             !debounce button
        CALL GETMSE(X,Y,L,M,R)
        GOTO 5
        OP=OP-1                                 !one less move saved
        NSL=NSL+1                               !one more square to fill
        CALL VCHAR(OY(OP),OX(OP),107)           !move knight to new spot
        CALL VCHAR(PY,PX,88 )                   !old spot is now open
        PY=OY(OP)                               !change present position
        IF (L.AND.(Y.EQ.1).AND.(X.EQ.2)) THEN   !user wants help
        CALL VMBR(0,AR,800)
        CALL SETPOS(1,0)                        !display help screen
        PRINT,'g                                     d'
        PRINT,'g                                     d'
        PRINT,'gMARCH 31, 1991                       d'
        PRINT,'g                                     d'
        PRINT,'g        WITHOUT REVISITING IT.       d'
        PRINT,'g                                     d'
        PRINT,'gCONTROL: LEFT   BUTTON - MOVE        d'
        PRINT,'g         MIDDLE BUTTON - START AGAIN d'
        PRINT,'g         RIGHT  BUTTON - ERASE MOVE  d'
        PRINT,'g<<<<<PRESS RIGHT BUTTON TO CONT.>>>>>d'
3       CALL GETMSE(X,Y,L,M,R)                  !wait for left button
        IF (M) THEN
        CALL EXIT
        IF (.NOT.R) THEN                        !wait for user
        GOTO 3
        CALL VMBW(0,AR,800)                     !write back screen
*is user trying to place knight somewhere?
        IF((X.GE.17).AND.(X.LE.24).AND.(Y.GE.8).AND.(Y.LE.15).AND.L) THEN
        CALL GCHAR(Y,X,C)
*is he in a legal spot?
     +.AND.(ABS(PY-Y).EQ.2))) THEN
        CALL VCHAR(PY,PX,118)                   !close space
        CALL VCHAR(Y,X,107)                     !move knight
        NSL=NSL-1                               !one less space to fill
        PX=X                                    !update pointers
        FLAG=0                                  !check for end of game
        DO 200 I=8,15                           !what the hey, do for whole
        DO 210 J=17,24                          !game board
        CALL GCHAR(I,J,C)
     +.AND.(ABS(PY-I).EQ.2))) THEN              !the above lines look familiar?
        FLAG=1                                  !vacant square
210     CONTINUE
200     CONTINUE
        IF (FLAG.EQ.0) CALL EXIT
*       CALL CLEAR
*       PRINT ,'G A M E      O V E R'
*       PRINT ,' '
* 8     CALL GETMSE(X,Y,L,M,R)
*       IF(.NOT.(L.OR.M.OR.R)) THEN
*       GOTO 8
*       ENDIF
*       GOTO 7
*       CALL EXIT
*       ENDIF
        GOTO 2


/* This is an include file for the equivalents of LEFT$, MID$, and RIGHT$ */
/* Jeffrey A. Kuhlmann 4/90 */
#include "a:stdio_h"
#include "a:stdlib_h"
#include "a:string_h"
char c,line[81],left[20],right[20],mid[20];

puts("Please enter a string...\n");
mids(line,5,ft );p
intf("%s\n",left);printf("%s\n",right);printf("%s\n", );exit(7);}lefts(line,len,left) char *line,*left;	 i
t len; {  int b;�  c=0;&  for(b=0;b<len;b++){left[b]=line[b];}  return(left); }rights(line,len,right
 char *line,*right;	 int len; {  int t
mp,b;  c=0;  temp=strlen(line);1  for(b=temp-len;b<temp;b++){right[c++]=line[b];}  return(right);
} mids(line,s,e, )�  char *l
  int s,e;  {	   int b;   c=0;*   for(b=s-1;b<e-1;b++){mid[c++]=line[b];}   return( );  }�



Sector One, Sector Editor.

Version 3.0

Written by Randy Moore

13 Mar. 1989


7 Aug. 1991

To start with I want to say that you'll have to bare with me on this 'cause I haven't written any docs before. What I want to do here is give you a brief explination of how to use "Sector One" and then I will give a short explination of the hard drive O.S.

In this version I have added support for all possable floppy drive sizes up to 1.44meg. I have also included support for the use of sub directories with floppy drives.

Upon loading of the program it will read all hard drives you have hooked up so it will know the sector/allocation unit ( this veries depending on the size of drive ). Then it will display the main screen with all the commands in a window at the bottom. This window will remain on the screen at all times so you won't have to learn any key commands. At the bottom there will be a status line with the current drive, current sector, cursor location ( used while in alter sector mode ), and the current command status. This area is also where any error messages will be placed. I have also added a line which tells what the active keys are in the verious command modes. Here is a sample of what the screen looks like.

|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                          This is the sector data window.                     |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
| |--------------------------------------------------------------------------| |
| | (A) Alter Sector Data   (B) Full Disk Map     (C) Compare Sector(s)     | |
| | (D) Dump Screen         (F) Find File Data    (I) Re-Display Buffer     | |
| | (M) Move Sector(s)      (N) Set Sector Number (O) Output Device         | |
| | (P) Print Sector(s)     (Q) Quit Program      (R) Read Sector           | |
| | (S) Search String       (T) Asc Display       (W) Write Sector          | |
| |  F6 Map File Sector     ( ) Forward Sector    ( ) Back Sector           | |
| |  F8 Hard Select                               1-9 Select Drive #        | |
| |              This is where the active keys are diplayed.                 | |
| |                                                                          | |
| | DSK1 Sector >000000 Cursor >00 Status: Selected function.                | |
| ---------------------------------------------------------------------------- |

Next I will describe the commands one at a time.

(A) Alter Sector:

When you select the alter sector key (A) the cursor is placed in the upper left corner of the sector data window. You have free movement of the cursor with the use of the arrow keys. You can either enter Hex or ascII valuse depending on which you have selected prior to entering the alter mode. If you wish to change the mode just press F7 and the screen will be toggled to the mode selected. Both upper and lower case ascII characters can be entered in ascII mode. In Hex mode only upper case will be displayed.

*** WARNING *** Befor you use this mode make sure you know what you are doing. One bit entered wrong could cost you all the data on your drive, and if it as a hard drive that could be very expensive if the data isn't backed up!

(B) Full Disk Map:

When this command is selected for the first time and no printer functions have been prevousely used the program asks you for the output device name. You can use any valid name I.E. PIO, RS232, DSK1.LISTING. Yes you can have your output go to a disk file. It will be a standard DV/80 text file. Next it will ask if you want a print out. If you select No the listing will only go to the monitor. This function will give you a full MAP of your drive including the sectors where the directories are at (Disk Discriptor Records) and the sectors where all the files are at (File Discriptor Records). It also gives a list of all sectors used by a file. In the case of floppy disks it supports subdirectories also. At the end of each dir list it will have a total and at the end of the map will have a total of dir's and files.

(C) Compare Sector:

When this is selected the sector window will be cleared and you will be asked if you want the first device to be DSK or HDS. The active keys are also dislayed. Next you will be asked for the drive #. For floppys 1-9 are avalable and for hard drives 1-3 are avalable. You will then be prompted for the first sector. After the sector is entered the program will read in the selected sector on the selected device. It will go through the same prompts for the second sector to compare. After it reads in the second sector it will display all bytes that are different on the second sector. You can toggle it between the ascii and Hex display modes.

(D) Dump Screen:

If an output device has already been entered it will send the sector window data the outupt device. If a devide hasn't been entered it will first prompt you for devide name. Any valid I/O device will be accepted. I.E. DSK1.FILENAME, HDS1.FILENAME, PIO, RS232.PARAMETERS.

(F) Find File Data:

This Function will search the active drive for the file you input. If the file is found it will give you a data and sector map of the file. It will then prompt you if you want to search for another occurance of the same name. With the use of Sub-Directories there may be more than one file of the same name. I.E. "LOAD" If there were no matches it will end the search.

(I) Re-Display Buffer:

This will return the sector display if a command was selected that cleared the sector window.

(M) Move sectors:

When this command is selected you will first be prompted for the devide. (DSK or HDS). It will then ask you for the source devide # and then the starting sector. It will then ask the same thing for the target device. Last it will ask for the number of sectors to copy. If the same device is to be the source and target and the same sectors are selected it will prompt you to put the target disk in the selected device and then press enter. This isn't realy a move sector it is a copy sector. It won't erase the source sectors.

(N) Set Sector Number:

With this command you can input any valid sector number in the current sector count.

(O) Output device Set:

You can enter any valid output device name.

(P) Print Sectors:

To use this command you first select the drive and number from the command line ( F8 to toggle between floppy and hard, 1-9 to select drive # ) then press "P". The program will ask for output device if it hasn't already been input. It will next ask for the starting and ending sectors. After you have entered the sectors it will begin to print. It will place the hex code on the first line and the ascII code under it. It will print two sectors per page. I have added a ruled line at the top and left side so you can locate byte numbers more easely.

(Q) Quit Program:

Just what it says!

(R) Read Sector:

This command will update the sector data window with data on the currently selected sector count of the currently selected drive.

(S) Search String:

This function will first ask if you want Turbo search? This weather the screens are displayed during the search. If no is selected it will speed up the search, but if you are looking for a key word and don't really know what it is then select no and use some obscure string that probably won't be found. You can search for any ascII or hex string of up to 40 charactors in length. If the string is found the sector it is on will be displayed in the sector data window.

(T) Toggle AscII/Hex:

This toggles the sector data window between AscII and Hex modes of disaplay.

(W) Write Sector:

This command is used if you have altered the sector data in the sector data window and wish to update the disk with the new data. I have added to new safety features to this function. First it will ask for a Y or N prompt befor writing over the old data. Also if for some reason you changed the sector count and the data isn't for that count it will issue a warning.

**** WARNING ****

Use this command at your own risk. If the data is incorrect it could cause you to crash your disk. Please use a trash disk to practice on before using this command on good disks. Floppys are easer to rebuild than a HARD DISK. IE. 1440 sectors verses 78720 sectors!!!!

(F6) Map Sector:

To use this you have to select and read in the desired sector befor you can map a sector. If the desired sector is sector 0 it will give you all data about the disk. If you have a File discripter record sector selected it will give you all info about the file. I will go into what the data is and where it is on the sector later.

(1-9) Select Drive #:

You can select 1 to 9 for floppys or 1 to 3 for hard drives.

(F8) Hard/Floppy Select:

This command will toggle the current drive on the status line.

That is about it for the program. I think that after playing with it for just a short wile you will get use to it. I have tried to make it as simple as I can. With version 3.0 I have also tried to make it a nicer looking program also. I used the blink function in 80 column mode to get the four colors and then, didn't have it blink. Pretty neet ha? I'm hoping this will encurage other programmers to make there utility programs more plessent also.

Now for some info in the setup of the hard drive sectors. It is almost the same as with floppys. So I will only describe the diferances. Also don't take this as gospel. This info is what I have learned on my own and might not be the same on all drives. I have a 20 meg so all the sector dumps are from my drive and might be slightly different on your drive. I will try to point out

First lets take a look at sector 0.

the #'s are for the foot notes

    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
00- 48 44 31 20 20 20 20 20 20 20 99 C0 20 20 00 00 13 12 A6 E4 B2 68 29 11
     H  D  1                                                        h  )
   |            1               |   2  | 3|    4   |  5  |    6      | 7| 8|

18- 00 20 00 00 00 4A 00 79 00 C6 00 EC 01 0B 01 14 01 82 01 AD 01 CF 01 DC
   |  9  |  10 |  11 |  11 | 11  | 11  | 11  | 11  | 11  | 11  | 11  | 11  |

30- 3B 47 01 E9 01 EE 13 26 3B 3F 3B 49 3B 43 00 00 00 00 00 00 00 00 00 00
   | 11  | 11  | 11  | 11  | 11  | 11  | 11  |

1 - Disk volume name

2 - Total # of allocation units ( to fine the total sector count you have to multiply this number times the sector per Au, found in footnote #5.

3 - Sectors per track

4 - Should be an asc "WIN" here. I don't know what for

5 - Hard disk paramaters. This has to be broken down to binary I will use my pramaters as an example.

          Hex 1312       Bin 0001 0011 0 0010010

         a - This is the # of sectors per allocation unit -1 so i would multiply >99C0 by Bin 0001 + 1 or >99C0 * 2 for a total sector count of >13380

         b - # of heads -1. so i have 4 heads on my drive.

         c - Buffered head step. If it is a 1 then when tou formatted t disk you selected buffered head step.

         d - Write precomp track. The track that you specified as to start compensating at when you formatted thr disk.

6 - Time and date stamp

7 - The number of files unter the root directory.

8 - The number of sub-directories under the root. (won't show subs under subs)

9 - Pointer to the Root directory data sector ( for a 20 meg it is always at sector >20 on a 10 meg this points to the sector map for the root directory.

10 - Pointer to the directory data sector of your DSK1 emulation file. You can only have one if the HFDC is at CRU >1100.

11 - Sector pointers to subdirectories under the root directory. You have to multiply this value by the sector per AU to get the real sector value.

Now for the root directory ( sector # >20 )

    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
00- 48 44 31 20 20 20 20 20 20 20 99 C0 20 20 00 00 13 12 A6 E4 B2 68 00 00
     H  D  1                                                        h
   |                 All this info is the same as in sector 0              |

18- 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

   |  1  |

1 - This is the sector of your root directory sector map * the
sector/AU. I.E. >0020 * 2 (for my drive) = >0040

Now let's look at the map sector >0040

    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
00- 00 21 00 22 00 23 00 24 00 25 00 26 00 27 00 28 00 29 00 2A 00 2B 00 2C
   |     |     |     |     |     | and so on
18- 00 2D 00 2E 00 2F 00 30 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00 38

30- 00 39 00 3A 00 3B 00 3C 00 3D 00 3E 00 3F 00 40 00 41 00 42 00 43 00 44

48- 00 45 00 46 00 47 00 48 00 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00

The 2 byte valuse are the sectors of the files under this directory.

All valuse must be multiplied by the sector per AU value.

Lets look at the first sector >0021 * 2 = >0042

    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
00- 41 53 4D 20 20 20 20 20 20 20 00 00 11 00 00 08 16 00 00 00 AA BD B2 68
     A  S  M                                                              h
   |       File Name             |  1  | 2| 3|  4  | 5| 6|  7  |     8     |

18- AA BD B2 68 46 49 00 00 00 00 00 04 00 20 00 00 02 00 02 03 00 00 00 00
              h  F  I
   |     9     |  A  |  B  |  C  |  D  |  E  |  F  |  a  |  b  |    c

1 - Extended record length (if the file is over 255 bytes long)

2 - File status flag ( same as DSK )

3 - Number of records per sector ( same as DSK )

4 - Number of sectors used ( same as DSK )

5- End of file offset ( same as DSK )

6 - Record length ( same as DSK )

7 - Number of level 3 records used ( In the case of fixed or variable files this is the number of sectors actually used at this time )

8 - Date and time of creation

9 - Date and time of last update

A - "FI" stands for file

B - I have no idea?

C - " " ?

D - Number of AU allocated for this FDR

E - Pointer to the Directoty map from which this file is listed

F - Extended Info about file

a - First sector of the file ( must be multiplied by sector per AU )

b - end sector for this block or last sector if not a fractured file

Well that's about it. I hope that this will give you some insight into the workings of the hard drive os. As I already stated this is what I found out throu a lot of trial and error.

About ME, the author.

I am not a profressional programmer I just do this as a hobby. I am in the Air Force and repair Air Traffic Control Radar. I have had my TI since 1983 and have had no formal programming training. I learned it all on my own. I now have a Geneve and 2 5 1/2 half higths, a 3 1/2 1.44meg floppy and a miniscribe 20 meg hard drive. All my cards are Myarc and my monitor is a Commodore 1084.

Trialware Info.

This program has been released as Trialware. To me that meens that you try it out and if you like it you send me $15.00. If you don't you send me nothing. I am also a dreamer. I know that I can't force anyone to pay for this program and I won't tell you that if I don't receive any money I'll quit programming, 'cause I won't! I love to program and will contenue to. Then why should I expect to get any money? If I don't pay for my hobby I can't expand it and can't program for other hardware devices and can't afford to use P.C. Pursuit to distribute my programs. Simple as that.

Randy Moore....

Send $15.00 to; (Money orders prefered )

Randall W. Moore
PSC Box 2824
George AFB, Ca. 92349


* This Myart file loader will load any "Mode 6" (16 color) file from dos
* version .97h or higher. It is placed in the public domain by me the author
* Randy Moore. I give the right of anyone to use this source in any way and to
* modify it as seen fit.
       DEF  START


       LI   R0,1         SET UP FOR MEMORY MANAGER
       LI   R1,7
       MOV  R0,R2
       CLR  R3
       SYSC @MMG         ACQUIRE 7 PAGES
       LI   R0,4
       LI   R1,MMB
       LI   R2,10
       MOV  @MMB+2,@>F112
       MOV  @MMB+4,@>F114
       MOV  @MMB+6,@>F116
       B    @START1


MMB    BSS  10           MEMORY MAP

PDATA  DATA >0005,>0000,>2000,>0000,>0080,>0000,>0080
       BYTE 0
DEVNAM TEXT 'DSK1.TITLE                      '

       LIMI 0
       LI   R0,>0000
       LI   R1,8
       SYSC @VID
       LI   R0,PDATA          -
       CLR  R1                | open title file
       MOVB R1,@PDATA+2       |
       SYSC @SIO              -
       LI   R4,>0080
RDLP   MOVB @READ,@PDATA      * read rec.
       LI   R0,PDATA          * point to pab
       CLR  R1                *
       MOVB R1,@PDATA+2       * Clear pab status byte
       SYSC @SIO              * Do the DSR request
       A    R4,@PDATA+4       * add 128 to buffer
       MOVB @PDATA+2,R1
       JEQ  RDLP              * are we finished reading ?
       MOVB @CLOSE,@PDATA     -
       LI   R0,PDATA          |
       CLR  @PDATA+2          | close file
       SYSC @SIO              -
       LI   R9,>2000          * start buffer
       MOV  *R9+,R1           * get screen color
       ANDI R1,>0F00          * mask color byte
       MOVB R1,@SCREEN
       SWPB R1                * make it lsb
       LI   R0,>000C
       SYSC @VID              * set it
       LI   R4,16             * 16 colors to set
SETCP  MOV  *R9+,R2           * get color data for pallet
       LI   R0,>1000          * set pallet reg
       BLWP @VWTR             *
       MOVB R2,@VDPWD2        - pass data to it
       SWPB R2                |
       MOVB R2,@VDPWD2        -
       INC  R0                * next color
       DEC  R4                * are we done ?
       JNE  SETCP             *
       LI   R0,>0010
       LI   R1,0
       LI   R2,0
       LI   R3,511
       LI   R4,0
       MOVB @SCREEN,R5
       LI   R6,0
       INC  R2
       INC  R4
       CI   R4,212
       JNE  CLEAR
       LI   R0,>000E
       CLR  R1                * pixel X loc
       CLR  R2                * pixel Y loc
       CLR  R3
       CLR  R4
       MOVB R8,R3
       SRL  R3,4
       ANDI R8,>03FF
       JEQ  DISPLR
       SYSC @VID
       CI   R1,512
       JNE  STILX
       CLR  R1
       INC  R2
       JNE  DISPLQ
       CI   R2,212
       JNE  DISPLP
KEYLP  LI   R0,4
       SYSC @KEY
       JNE  KEYLP
       LI   R1,1
       SYSC @VID
RESET  LI   R4,16             * 16 colors to set
       LI   R9,CTBL
RESLP  MOV  *R9+,R2           * get color data for pallet
       LI   R0,>1000          * set pallet reg
       BLWP @VWTR             *
       MOVB R2,@VDPWD2        - pass data to it
       SWPB R2                |
       MOVB R2,@VDPWD2        -
       INC  R0                * next color
       DEC  R4                * are we done ?
       JNE  RESLP             *
       BLWP @0

CTBL   DATA >0000,>0000,>1106,>3307
       DATA >1701,>2703,>5101,>2706
       DATA >7101,>7303,>6106,>6406
       DATA >1104,>6502,>5505,>7707

VWTR1  MOV  *R13,R0
       ORI  R0,>8000
       LIMI 0
       MOVB R0,@VDPWA
       SWPB R0
       MOVB R0,@VDPWA



MY-BASIC 2.99a Version

SOKOBAN is the well known game of the computer world.I see it first on a PC and later on Atari and Commondore systems. But I was really surprised as I get a disk from Alexander Hulpke which cointain a TI-Version of the SOKOBAN game.I play it a longer time and find out that it would be very amuse.So I decide me to transfer the program in MY-BASIC.After a week of work the program was ready to run and you find the result of my work on this disk.

To run the game correctly you need the 3 files SOKOMY,SOKO_SCR and SOKO_SCORE on one disk.Take a look at the first programline of the code and set the DEV$-Variable to the loading PATH you like to use.If you run SOKOBAN out of "DSK1." no change is need.

Because the most computer freaks want know how to play SOKOBAN I only wnat describe some special points of the programm:

You can only play with the keyboard.

If you move the box one step to far press FCTN-2 and you can take the last move back.

If you see no chance to slove the problem you can press the FCTN-1 key and the level is restart.

Press FCTN-10 when you like to quit the game.You can press this key any time while you play in a level.

Alexander find tthe idea of this game on an unix system in the universty where he is study and he write that it is public domain software. So there is NO PAYMENT awaited by the author of the programm.But when you enjoy it,like I do,write an information to Alexander Hulpke.

If you have special information in combination with the MY-BASIC 2.99A program version of the game please drop a line to my home adress.My adress is the following:

Martin Zeddies
Hauptstrasse 26
DW-3180 Wolfsburg 22
======= ------------
G e r m a n y


OLDDSR is a EA#3 file that pages in the Myarc Hard and Floppy Disk Controller (HFDC) so that it can be used with MDOS 0.97H when the HFDC is present (alone, or in conjunction with another controller card).

If the HFDC is the only controller card, you have FULL access to the hard drive from MDM5 and other such programs EXCEPT you can not access any RAMDISK.

If the HFDC is used in conjunction with another controller card, then using OLDDSR will allow ONLY access to the hard drives.

TO USE OLDDSR: (when using anything other than 1.14)

   1) Load MDOS 0.97H
   2) Load GPL (EXEC will NOT work)
   3) Load Editor/Assembler
   4) Using E/A #3 option, load OLDDSR
   5) OLDDSR will except and IMMEDIATELY select OPTION #5 for the loading of a program image file.
   6) Select load path for MDM5 (or other utility)
   7) If you have questions, and/or problems, please feel free to call me at 1-901-368-1169 (after 6pm EST) or 1-901-368-0112 (BBS)

P.S. I Have found it BEST and EASIEST to load and run those program that need OLDDSR from the HDS1.DSK1. directory. Anywhere else, lots of tricks will need to be played. My suggestion is to move them all to that directory and make sure that any paths those program have have been changed.

Later and Enjoy