Jump to content
IGNORED

VI99 TTY. Text editor over RS232


TheBF

Recommended Posts

I thought I would move this project into a separate topic since it lives on a different version of the Camel99 Kernel. (CAMELTTY) 

They are mostly the same, but the "TTY" version has no built-in KSCAN and VDP screen writing support is limited to writing strings to VDP RAM at a specified address.

 

The point of the project is to replicate the VI99 environment with a command line for some "unix" like commands and a mini VI editor to edit DV80 files.

It turns out I went down a bad path in the previous version in two ways:

 

  1. using the VDP screen as the line buffer. (Needless complexity)
  2. using the Forth interpreter to handle keystrokes. (Too slow on TI-99)

 

This time the editor will do the conventional EDITLINE() type function that copies the a line from storage to buffer and writes it back to storage.

And for key strokes I used a big CASE statement.  It seems to be way simpler and smaller. 

 

So now I have a functional command system running in 200 lines, plus my Camel99 libraries and a string storage library that is about 100 LOC) 

 

The next step will be to integrate the EDITLINE function and add ls, ls-l commands which should work as is. (I think) 

Source code for the curious is in the spoilers. 

 

The video shows how its working now and shows the single character editing commands that don't need EDITLINE. 

For the first time I am using the screen scroll functions of VT100 so that the whole screen does not update when you cursor at the top and bottom of the screen.

This is connecting to TI-99 with TERATERM at 19.2Kbps.

 

All the files are from floppy disk so the loading times are circa 1983. :) 

 

Spoiler
\ heapstr2.fth  loads dv80 into heap as strings Sept 2022 Brian Fox
\ Updated May 23 2023
\ added INSERTLN and DELETELN 

\ Loads file data as counted strings in low RAM.
\ Provides high density storage 
 
NEEDS READ-LINE FROM DSK1.ANSFILES
 
HERE
 
\ ===[ heap management ]====
\ low RAM is file TXTBUFFER
HEX
2000 CONSTANT TXTBUFFER  \ base address of the heap
2000 CONSTANT 8K      \ max size of the heap
TXTBUFFER 8K +  CONSTANT BUFFEND
 
DECIMAL
\ variable H is our memory management pointer
 
: HALLOT ( n --)  \ WITH memory protection
  H
  2DUP @ + BUFFEND TXTBUFFER WITHIN ABORT" HEAP error"
  +! ;
 
: HEAP   H @ ;
: HC,   ( c --)  HEAP C!  1 HALLOT ;  \ compile c into heap
 
\ purge sets the heap to use addr and then erases it
: ERASE  0 FILL ;
: PURGE    ( addr len -- ) OVER H !  ERASE  LINES OFF  ;
 
: FSIZE    ( -- n) HEAP TXTBUFFER - ;
 
\ : NEXT$    ( addr -- addr' ) COUNT + ;
HEX
CODE NEXT$ ( addr -- addr' )
     C044 , \   TOS R1 MOV,
     0584 , \      TOS INC,
     D051 , \ R1 ** R1 MOVB,
     0981 , \    R1  8 SRL,
     A101 , \   R1 TOS ADD,
     NEXT,
ENDCODE
 
: LEN  ( $adrr -- n)  POSTPONE C@ ; IMMEDIATE  \ syntax sugar
 
: NTH ( addr n -- Caddr)  0 ?DO NEXT$ LOOP ; \ seek to nth line
 
DECIMAL
: V$,  ( Vaddr u -- ) \ compile VDP stack string as counted string in HEAP
      1 MAX               \ smallest string we store is 1 byte
      TUCK                \ tuck a copy of length under Vaddr
      DUP HC,             \ compile the length in heap
      HEAP SWAP VREAD     \ copy VRAM to RAM
      HALLOT ;            \ Allocate the heap space
 
: FDATA  ( -- Vaddr len ) [PAB FBUFF] V@  [PAB CHARS] VC@ ;
 

\ seek to the address of the LINE#
: SEEKLN  ( line# -- $addr) TXTBUFFER SWAP NTH ;

\ open space for a string in HEAP, return the HEAP address
: MAKEROOM ( len line# -- addr)
  OVER 1+ HALLOT
  SEEKLN DUP>R     ( len $ )   ( r: $addr)
  OVER R@ + 1+     ( len $ $+len+1 )
  HEAP R@ - 0 MAX  ( len $ $' size )
  MOVE R> ;

: DELLN ( lnaddr-- len )
  DUP NEXT$ SWAP  ( $2 $1)
  DUP C@ 1+ DUP>R ( $2 $1 len)
  FSIZE SWAP -  MOVE R> ;

: DEALLOT ( n -- )
  HEAP OVER - C/L@ ERASE
  HEAP SWAP - TXTBUFFER MAX H ! ;

: $DELETE ( heap$ -- ) DELLN  DEALLOT ;

\ ----------------------------
\ use API ...

\ usage:  S" DSK1.MYFILE" READ-FILE
: READ-FILE ( addr len -- )
        TXTBUFFER 8K PURGE
        DV80 R/O OPEN-FILE ?FILERR >R
        LINES OFF
        BEGIN
           R@ SELECT 2 FILEOP 0= \ faster than ANS read-line
        WHILE
           FDATA V$,
           LINES 1+!
        REPEAT
        R> CLOSE-FILE DROP
;
 
\ usage:  S" DSK1.MYFILE" WRITE-FILE
: WRITE-FILE ( addr len -- )
        DV80 W/O  OPEN-FILE ?FILERR >R
        TXTBUFFER ( caddr )
        BEGIN
          DUP LEN
        WHILE
          DUP COUNT R@ WRITE-LINE ?FILERR
          NEXT$
        REPEAT
        DROP
        R> CLOSE-FILE DROP ;

: INSERTLN ( addr len line# --) MAKEROOM PLACE ;
: DELETELN ( line# --) SEEKLN $DELETE ;
 
DECIMAL HERE SWAP - CR . .( bytes)
 
\ test code
\ : TESTSEEK  TMR@   TXTBUFFER 10 NTH TMR@ NIP - . ;
\ : PRINT ( $ -- ) COUNT ( C/L@ 1- MIN)  CR TYPE ;
\ : .HEAP ( -- ) TXTBUFFER BEGIN  DUP LEN WHILE   DUP PRINT NEXT$   REPEAT ;
  

 

 

 

Spoiler
\ VITTY COMMAND MODE PLATFORM                    June 2 2023, Brian Fox 

\ VI Editing commands
\ i – Insert at cursor (goes into insert mode)
\ a – Write after cursor (goes into insert mode)
\ A – Write at the end of line (goes into insert mode)
\ ESC – Terminate insert mode
\ u – Undo last change
\ U – Undo all changes to the entire line
\ o – Open a new line (goes into insert mode)
\ dd – Delete line
\ 3dd – Delete 3 lines.
\ D – Delete contents of line after the cursor
\ C – Delete contents of a line after the cursor and insert new text.
\     Press ESC key to end insertion.
\ dw – Delete word
\ 4dw – Delete 4 words
\ cw – Change word
\ x – Delete character at the cursor
\ r – Replace character
\ R – Overwrite characters from cursor onward
\ s – Substitute one character under cursor continue to insert
\ S – Substitute line and begin to insert at the beginning of the line         
\ ~ – Change case of individual character

\ :w – Save the file but keep it open
\ :q! – Quit vi and do not save changes 
\ :wq – Save the file and quit

\ save all this as a binary image to speed up compilation 
NEEDS DUMP        FROM DSK1.TOOLS
NEEDS READ-LINE   FROM DSK1.ANSFILES
NEEDS CASE        FROM DSK1.CASE
NEEDS -TRAILING   FROM DSK1.TRAILING
NEEDS MARKER      FROM DSK1.MARKER
NEEDS READ-FILE   FROM DSK2.HEAPSTR2
NEEDS <ERASELINE> FROM DSK1.VT100+


NEEDS WORDLIST   FROM DSK1.WORDLISTS
ONLY FORTH DEFINITIONS

VOCABULARY EDITOR 
ALSO EDITOR DEFINITIONS 

HERE

\ data ...
DECIMAL

VARIABLE INSERTING
VARIABLE MODE
VARIABLE LINESTK
VARIABLE TOPLINE

C/L@ 1- CONSTANT WIDTH
24 CONSTANT 1SCR
12 CONSTANT 1/2SCR
27 CONSTANT ESC

\ editor cursor variables
CREATE ROW ( -- addr) 0 , 0 ,
ROW CELL+ CONSTANT COL  \ access COL separately if needed

CREATE FILENAME  16 ALLOT   FILENAME OFF

\ ========================
\ Helpers
: ROW/COL  ( -- row col)  ROW 2@ ;
: BETWEEN  ( n lo hi -- ?) 1+ WITHIN ;
: CLIP     ( n lo hi -- n) ROT MIN MAX ;
: ERASE    ( addr len -- )  0 FILL ;
: BLANK    ( addr len -- )  BL FILL ;
: INFILE?  ( line# -- ?) 0  LINES @ BETWEEN ;  

\ line# of the cursor in the _editor window_
: ELINE#   ( -- n ) TOPLINE @  ROW @ + ;
: LINE$    ( n -- $addr)  TXTBUFFER SWAP NTH ;
: LEN     POSTPONE C@ ; IMMEDIATE 

: EOL     ( -- n) ELINE# LINE$ LEN  WIDTH MIN ;  
: 'CURSOR ( -- addr) ELINE# LINE$ COL @ + 1+  ;

: GETXY   VROW 2@  ;
: PROMPT  0 23 AT-XY <ERASELINE> ;

\ more escape codes 
: <SCRDN>   ESC (EMIT) [CHAR] M (EMIT) ;
: <SCRUP>   0 0 AT-XY  <ESC>[  [CHAR] M (EMIT) ;
: <EL0>     <ESC>[ ." [K" ;  \ Clear line from cursor right 
: <BELL>    7 (EMIT) ;

HEX
: ^ ( c -- ) \ compile ctrl char
  ?COMP  CHAR  1F AND
  POSTPONE LITERAL ; IMMEDIATE

DECIMAL
: TOPLINE+! ( n --) 
  TOPLINE @ +   0 LINES @ 2+  CLIP  TOPLINE ! ;

\ dec to zero but never less
: DECR!  ( addr -- ) DUP @ 1- 0 MAX  SWAP ! ;

HEX
: LOWER? ( c -- ?) [CHAR] a [CHAR] z BETWEEN ;
: UPPER? ( c -- ?) [CHAR] A [CHAR] Z BETWEEN ; 

: UPCASE ( c -- c') 05F AND ;
: LOCASE ( c -- c') 060 OR  ;

: TOGGLE-CASE ( c -- c') 
  DUP LOWER? IF UPCASE EXIT THEN 
  DUP UPPER? IF LOCASE THEN 
;

: TOLOWER
  2DUP BOUNDS 
  ?DO  I C@ DUP UPPER? IF LOCASE THEN I C!  LOOP ;

: TOUPPER ( addr len -- addr len)
  2DUP BOUNDS 
  ?DO  I C@ DUP LOWER? IF UPCASE THEN I C!  LOOP ;

DECIMAL 
: GETFILE  
    PARSE-NAME DUP 
    IF TOUPPER READ-FILE 
    ELSE 2DROP 
    THEN ;

: .LINE ( $addr -- )
    DUP LEN 
    IF   COUNT TYPE 
    ELSE DROP  [CHAR] ~ EMIT 
    THEN   
;

: LIST  ( -- )
  PAGE 
  TXTBUFFER TOPLINE @ NTH ( -- $addr)
  23 0 DO  DUP .LINE CR NEXT$  LOOP DROP ;

\ redraw the line the cursor is at
: RELINE ( row -- ) 
  0 SWAP 2DUP 
  AT-XY <ERASELINE>
  AT-XY ELINE# LINE$ .LINE 
;  


: GODOWN 
  ROW @ 1+ 22 > 
  IF  <SCRUP>  1 TOPLINE+!  
      ROW @ RELINE
  ELSE <DOWN> ROW 1+! 
  THEN ;

: GOUP 
  TOPLINE @ 0= IF  EXIT THEN 

  ROW @ 0=
  IF  <SCRDN>  -1 TOPLINE+! 
  ELSE <UP>  ROW DECR!
  THEN  ROW @ RELINE  ;

: GOLEFT     COL DECR! COL @ 0> IF <LEFT>  THEN ;

: GORIGHT    
  COL @ 1+  
  EOL 1- DUP>R MIN COL ! 
  COL @ R> <> IF <RIGHT> ELSE  <BELL>  THEN ; 

: MOVESCR    ( n -- )  TOPLINE+! LIST ;
: CHAR!      ( c --) 'CURSOR C!  ROW @ RELINE ; 
: CHANGE-CASE   'CURSOR C@ TOGGLE-CASE CHAR! ; 
: DELETE-CHAR   BL DUP EMIT CHAR! ;
: REPLACE-CHAR  BL EMIT   ROW/COL AT-XY KEY  CHAR! ;
: COMMAND-LINE  PROMPT ." :"  PAD DUP 80 ACCEPT EVALUATE ;

\ -- STUB --
: DOINSERT  
    PROMPT ." -- INSERT --"
    ROW/COL AT-XY 
    BEGIN 
       KEY ESC =
    UNTIL 
;


\  ==========[ VI COMMANDS ]===========
\ vi commands are lower case 

: new   TXTBUFFER 8K PURGE ;
: q!    PAGE ." Forth" ABORT ;
: w     PARSE-NAME TOUPPER WRITE-FILE ;
: G     0  LINES @ CLIP TOPLINE !  LIST ;
: clear  PAGE  ;

\ command mode loop 
DECIMAL
: vi ( -- )
  TOPLINE OFF
  GETFILE 
  LIST   0 0 ROW 2! 
  BEGIN
    PROMPT .S 
    ROW/COL AT-XY KEY 
    DUP ESC <>
  WHILE 
    CASE
    \ control keys
    ^ F OF  1SCR          MOVESCR  ENDOF
    ^ B OF  1SCR NEGATE   MOVESCR  ENDOF
    ^ D OF  1/2SCR        MOVESCR  ENDOF
    ^ U OF  1/2SCR NEGATE MOVESCR  ENDOF
    
    ^ L OF  LIST                   ENDOF
    ^ M OF  GODOWN  COL OFF        ENDOF
    ^ Z OF  q!                     ENDOF
    
    \ alpha keys      
       BL OF GORIGHT               ENDOF 
 [CHAR] h OF GOLEFT                ENDOF 
 [CHAR] i OF DOINSERT              ENDOF 
 [CHAR] j OF GODOWN                ENDOF 
 [CHAR] k OF GOUP                  ENDOF 
 [CHAR] l OF GORIGHT               ENDOF 
 [CHAR] 0 OF COL OFF               ENDOF 
 [CHAR] $ OF EOL COL !             ENDOF 
 [CHAR] : OF COMMAND-LINE          ENDOF 
 [CHAR] ~ OF CHANGE-CASE           ENDOF 
 [CHAR] x OF DELETE-CHAR           ENDOF 
 [CHAR] r OF REPLACE-CHAR          ENDOF 
    ENDCASE
  REPEAT
  DROP 
  PROMPT ." ok"  CR
;

HERE SWAP -  DECIMAL . .( bytes)  

 

 

  • Like 6
Link to comment
Share on other sites

6 hours ago, TheMole said:

This is really, really cool stuff! I love the idea of using the TI as a low-end UNIX style machine, and this tickles my fancy in all kinds of ways... :)

Mine too. 

 

My ultimate goal is to have a TTY console and the main console running together in little multi-user version of Forth. :)

Another thing that would be cool would be file pipes. I have some ideas on how to do that but it could take me a while.

 

 

  • Like 2
Link to comment
Share on other sites

Making some progress. I think I have correctly emulated the basic editing features.

Now I have to add multi-line deletes, word skipping, copying and pasting which I should be able to borrow from the VDP version. 

(he said optimistically) :)

 

 

<removed old video>

  • Like 1
Link to comment
Share on other sites

3 hours ago, TheBF said:

Making some progress. I think I have correctly emulated the basic editing features.

Now I have to add multi-line deletes, word skipping, copying and pasting which I should be able to borrow from the VDP version. 

(he said optimistically) :)

 

 

Bravo! Bravo!

 

vi is my preferred editor

 

  • Like 1
Link to comment
Share on other sites

While working on this editor, I thought it would be nice to put debug info over on the VDP screen.

But that means I need a VDP driver.  Fortunately in the TTY kernel I had to have a minimal number of VDP words.

For this I need a way to write a byte to VDP RAM. I call that VC!  (vdp character store) 

 

So here is what it took to add a simple, not ultra fast, VDP driver to print text strings and numbers to VDP. 

This one has no scrolling. It just wraps to the top of the screen. 

 

I changed the Camel Forth kernel to separate the signed number conversion to a string, from the output in the word  (.) 

(.) does Forth 'dot' but returns an (address, length) string pair.

Then you can TYPE it or add spaces for right justification as required. 

 

DECIMAL
CREATE VDP.ROW  0 , 0 ,     VDP.ROW CELL+ CONSTANT VDP.COL

: VDP.AT-XY  ( col row -- ) VDP.ROW 2! ;
: VDP.CURS   ( -- Vaddr) VDP.ROW 2@  5 LSHIFT +  ;
: VDP.PAGE   ( -- )  0 768 BL VFILL  0 0 VDP.AT-XY ;

: VDP.WRAP   VDP.CURS 767 > IF  0 0 VDP.AT-XY  THEN ; 
: VDP.COL+!  ( n)   VDP.COL +!  VDP.WRAP ;

: VDP.EMIT   ( c -- )  VDP.CURS VC!  1 VDP.COL+! ;
: VDP.TYPE   ( addr n ) 0 DO COUNT VDP.EMIT LOOP DROP ; 
: VDP.SPACES ( n -- ) 0 MAX  0 DO  BL VDP.EMIT  LOOP ;
: VDP.CR     ( -- )   VDP.ROW 1+!  VDP.COL OFF ;

\ single number printing 
: VDP.   ( n -- ) (.) VDP.TYPE  BL VDP.EMIT ;
: VDP.R    ( n n -- ) >R (.) R> OVER - VDP.SPACES VDP.TYPE ;

\ unsigned double number printing, right justified 
: VDP.UD.R ( ud n --) >R  <# #S #>  R> OVER -  VDP.SPACES VDP.TYPE ;

\ usigned single number printing, right justified
: VDP.U.R   ( u n -- )  0 SWAP  VDP.UD.R  ;

 

  • Like 2
Link to comment
Share on other sites

37 minutes ago, Vorticon said:

Super cool! Any chance you could post a disk image to try? I have a little side demo project in mind that might be a good fit for vi-TTY.

I will but I need to add deletions. I got sidetracked because I joined a community orchestra a month ago and I have to practice.

(because I have not played a string instrument for 30 years and Viola was not one of the ones I played) :) 

 

I need to add line deletion from my old version into this new code. Now that I have a victim I mean customer, I will get on it for you. :) 

At the moment it only has 8K for data space but the strings are stored end to end with byte counts so it's very dense. 

If that's no enough for your project I will need to look into SAMS. 

  • Like 2
  • Haha 1
Link to comment
Share on other sites

  • 2 weeks later...

* UPDATE *

 

I have had a few other matters to attend to but when I get a bit of time I have been integrating the features from VI99 shell into this TTY version. 

They way the program works now is very different and so I have some bugs to kill around cutting and pasting but I am slowly making progress.

 

I hope I will have a version some folks can try and beat-up in a week or so. 

 

Side-note: 

It's a little slower building software on floppy disks :)  but Forth's "incremental compiling" features has proved invaluable. 

What this means is that as I add features I save off the system with the working code in it, essentially making a new Forth compiler, that has more of the working code pre-compiled. 

The game then is to keep doing that until you have compiled and tested everything and that's the final program. 

 

Back to the trench...

 

 

  • Like 6
Link to comment
Share on other sites

Making some progress.  The editor itself seems pretty solid. 

A few more features to add before I release it but here is a video that demonstrates how it looks and feels with an audio commentary explaining what I am doing at the keyboard. 

 

Note: The commentator made a confusing statement. (I gotta hire better talent) 

       CPU RAM is used to hold the file data. 

       VDP RAM is used for the cut/paste buffer. 

 

 

Edited by TheBF
Clarication
  • Like 5
  • Thanks 1
Link to comment
Share on other sites

Very impressive! I like the vi editor features you have in place already. Also like how fast it responds. Do you have plans on making use of SAMS for the editor buffer? 

This got me thinking on a fast storage device (TIPI, HDR) you could also have the editor buffer on permanent storage swapping accordingly.

  • Like 1
Link to comment
Share on other sites

8 hours ago, retroclouds said:

Very impressive! I like the vi editor features you have in place already. Also like how fast it responds. Do you have plans on making use of SAMS for the editor buffer? 

This got me thinking on a fast storage device (TIPI, HDR) you could also have the editor buffer on permanent storage swapping accordingly.

Thanks.  I am just adding the 'w' and 'b' commands now to skip along the text word by word. After these and little more testing I can release a Beta version for people to find the real problems. :) 

 

I have considered an expanded version using SAMS. The challenge there is the  current memory organization assumes contiguos memory.

The file is read into memory as byte counted strings end-to-end.

It's pretty fast to skip along the byte counts like a poor-mans linked list.  I have functions called INSERTLN, DELETELN and REPLACELN. 

Moving that to "block" oriented SAMS memory might mean requiring a call to a virtualization routine on every byte access which would be much slower.  I could also just go back to chopping SAMS up into 80 byte records which would be the fastest. (?) Maybe that's still the best way to handle SAMS for editing, even though it wastes a lot of space. ??

 

What data structure do you prefer for the memory buffer in SAMS?

 

 

  • Like 2
Link to comment
Share on other sites

Ropes are an extension of strings, linking non contiguous regions of memory as needed. 
 

I don't see how you avoid overhead but I think of:

 

4K blocks, each with an index of its counted strings. A small file. Many small files in memory.
 

Lines may get cut/copied out of or pasted/added into a block.  Rebalance small blocks so that only two blocks are visible on screen. 

 

With a block, I imagine like TI writer. An Index by line order grows downward; line storage grows upward. Store lines as offset within segment, length. Good for swapping lines. Garbage collect as needed. 
 

Keep it so two blocks always cover the screen.(rebalance short block or combine short blocks.) 


Just my 2 bytes. 

  • Like 4
  • Thanks 1
Link to comment
Share on other sites

Yes.  The port is configurable.  I have defined BA=9600  BA=4800  BA=19200 .  I will add a word BA=1200.

Then I will try it and post a video for you to see.  Listing a page might be painful but hey we cut our teeth on TI-BASIC. :)

 

I think you are making me add a config file to set the baud rate at startup.

If only I could get that autobaud code to work .... 

 

 

 

  • Thanks 1
Link to comment
Share on other sites

Well that was interesting.  I can see that I have to re-think where I place the "RELINE" function.

Drawing the line every time through the editing loop is not practical with a low speed connection. 

I think I can improve that.

 

@VORTICON  what are you planning to connect the TI to at 1200bps?

 

Link to comment
Share on other sites

Changed the line redraw function to only write the "right side" of the buffer string on refresh.

This is probably as good as I can make it for 1200 baud but it also makes things better at all baud rates.

 

Thanks @Vorticon for forcing me to test at slow speed. 

 

However inserting text into a line is still painful because more of the line is redrawn each time. But... it works.

  • Like 1
Link to comment
Share on other sites

On 7/6/2023 at 10:17 AM, TheBF said:

Well that was interesting.  I can see that I have to re-think where I place the "RELINE" function.

Drawing the line every time through the editing loop is not practical with a low speed connection. 

I think I can improve that.

 

@VORTICON  what are you planning to connect the TI to at 1200bps?

 

Yes I am, hence my initial inquiry :) 

Link to comment
Share on other sites

What I want to try is connect a Brother EP-44 word processor with terminal capabilities and try to use vi99 on it. Not sure how it's going to work out on such a set up but it will be a throwback to the old days of paper based terminals. Not really what you had in mind for vi99 I suspect but hey it's all in the name of science :lol:

 

  • Haha 1
Link to comment
Share on other sites

11 minutes ago, Vorticon said:

What I want to try is connect a Brother EP-44 word processor with terminal capabilities and try to use vi99 on it. Not sure how it's going to work out on such a set up but it will be a throwback to the old days of paper based terminals. Not really what you had in mind for vi99 I suspect but hey it's all in the name of science :lol:

 

I have just built a repository and I am getting the binary files from my TI just now.

 

I am not sure if VI99 is going to help you there. It assumes the file is loaded into low RAM on the TI-99.  

The serial port is used to control the TI-99 either in the shell section or the editor section.

It is not a terminal emulator but rather it turns the TI-99 into "mini-computer" type thing, that requires an external terminal emulator

 

I am at a loss as to what we can do with a connection between VI99 and EP-44. 

I will do some reading on the EP-44. Maybe we need a module that can accept a file from EP-44 and save it to a DV80 FILE. ??

I have something like that in my library.

 

 

 

  • Like 1
Link to comment
Share on other sites

So here is what I suppose is best called an Alpha version.

 

bfox9900/VI99TTY: VI style editor over RS232 for TI-99 computer (github.com)

 

The bin folder has the program files but I attached them here as well.

Run with E/A 5  VI99TTY1 

If you put VIMANPAGE on the program disk, the help command will let you view it in read-only mode. 

 

Set your terminal emulator to:  19200, 8,n,1 VT100 emulation. 

I have used Putty and Teraterm

 

There be warts here so let me know what you find. 

 

VI99TTY1 VI99TTY2 VI99TTY3 VIMANPAGE

  • Like 3
Link to comment
Share on other sites

9 hours ago, Vorticon said:

What I want to try is connect a Brother EP-44 word processor with terminal capabilities and try to use vi99 on it. Not sure how it's going to work out on such a set up but it will be a throwback to the old days of paper based terminals. Not really what you had in mind for vi99 I suspect but hey it's all in the name of science :lol:

 

Ok from what I read the EP-44 can work like a terminal. So in theory you could connect it to the VI-99 shell and pull a directory or delete a file and that's about it for now.

If you enter the vi99 editor it assumes an 80x24 screen so that would not work so well I suspect. 

 

I think I would need to make a different kind of "line" editor to work with EP-44 where you list the file, select a line number, then edit that one line and save it back. 

I never used it but I think the EDLIN program in DOS worked like this. 

 

Link to comment
Share on other sites

1 hour ago, TheBF said:

Ok from what I read the EP-44 can work like a terminal. So in theory you could connect it to the VI-99 shell and pull a directory or delete a file and that's about it for now.

If you enter the vi99 editor it assumes an 80x24 screen so that would not work so well I suspect. 

 

I think I would need to make a different kind of "line" editor to work with EP-44 where you list the file, select a line number, then edit that one line and save it back. 

I never used it but I think the EDLIN program in DOS worked like this. 

 

I'll test it out this week and let you know. I wouldn't put too much effort into making vi-99 compatible with a line terminal as no one is going to use it that way. How do you set 1200 bps?

Link to comment
Share on other sites

2 hours ago, Vorticon said:

I'll test it out this week and let you know. I wouldn't put too much effort into making vi-99 compatible with a line terminal as no one is going to use it that way. How do you set 1200 bps?

Start up with a terminal emulator at 19200 8,n,1

 

At the command prompt type:   BA=1200 OPEN-TTY 

The plug into your EP-44 and see what happens. :)

Thank's for giving it a spin. 

 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...