Shop OBEX P1 Docs P2 Docs Learn Events
TriBlade Prop PCB: Uses 3 Propeller ICs for a Single Board Computer (SBC) - Page 22 — Parallax Forums

TriBlade Prop PCB: Uses 3 Propeller ICs for a Single Board Computer (SBC)

1192022242532

Comments

  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-08 07:52
    Fantastic news smile.gif

    Tied up for a couple of days :-(

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • Dr_AculaDr_Acula Posts: 5,484
    edited 2009-10-08 08:23
    Great news. Where were we up to - was it adding code so floppy drive images could be read directly? Certainly my triblade seems stable enough to call a v1.0

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    www.smarthome.viviti.com/build
  • BradCBradC Posts: 2,601
    edited 2009-10-08 08:38
    heater said...
    PANIC OVER!

    My TriBlade has propelled it's way back to me. Courtesy of the wonderful people of the Concordia bus company and Finland's Found Property Service. www.loytotavara.net/indexe.htm

    Among all the bad news in the paper each day, it's little things like that which remind me perhaps the world is not so crappy after all.

    Glad to have you back among the propellers [noparse]:)[/noparse]

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-14 23:43
    Second Propfest & TriBlade/ZiCog meeting in Adelaide at Drac's place.

    His TriBlade is now running latest code including SD files. It was nice to see Wordstart running (using TeraTerm on the PC as the VT100). We also compiled a small program on the TriBlade under CPM.

    Also discussed the upcoming RamBlade and made a few decisions - I will update that thread soon.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • Dr_AculaDr_Acula Posts: 5,484
    edited 2009-10-15 00:04
    Yes, it was a great followup Conference and Propfest. Pity Heater wasn't here but I guess he is still exhausted after searching every bus in Finland *grin*

    I had some code from 3 weeks ago that would not load the hard drives sometimes, but with a quick update directly from Cluso's laptop it is all running very smoothly now.

    We got Pacman working too (though this does need a Wyse terminal program). I've written a terminal program that can handle the necessary VT100 and Wyse Escape sequences. They are about 30 lines of VB.Net code and maybe down the track possibly could find their way into the BST terminal program??

    And we compiled a "Hello World" on the Zicog itself.

    I've very excited about the upcoming tiny ramblade addon board that sits above the standard protoboard. Cluso will no doubt keep us posted as it comes together.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    www.smarthome.viviti.com/build
  • BradCBradC Posts: 2,601
    edited 2009-10-15 06:30
    Dr_Acula said...

    We got Pacman working too (though this does need a Wyse terminal program). I've written a terminal program that can handle the necessary VT100 and Wyse Escape sequences. They are about 30 lines of VB.Net code and maybe down the track possibly could find their way into the BST terminal program??

    I have been giving VT100 a cursory look over the last month or so, but I've not made any start on implementing it yet. Let me know what you need (hopefully only a subset of the VT100 controls) and I'll see what I can do.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • heaterheater Posts: 3,370
    edited 2009-10-15 10:01
    BradC: That would be great.

    Anyone got a VT100 VGA terminal running on Blade #1 yet?

    How is the new SD driver installation coming along ?

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    For me, the past is not over yet.
  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-15 10:26
    Brad: I am sure Drac can post you the section of VB.net code which does the emulation required. He showed me that yesterday and it was not that long, and it is running so that would be a quick start.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • BradCBradC Posts: 2,601
    edited 2009-10-15 11:21
    Cluso99 said...
    Brad: I am sure Drac can post you the section of VB.net code which does the emulation required. He showed me that yesterday and it was not that long, and it is running so that would be a quick start.

    I'm not too worried about the VT100 emulation end of things. What is slightly more difficult is building a multi-platform component that allows the flexibility required to work as a terminal emulator. The way I'm doing it at the moment was built as a scrolling edit window with no requirements for cursor positioning, in-place editing or attributes (font size/bold/underline/colour). So it's a re-write of the terminal emulator from the ground up.

    To be honest it _has_ been on my todo list for a long time now, I've just never needed it myself so I never got around to it. Now there seems to be some more people wanting VT100 emulation I'll get into it a bit further.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • heaterheater Posts: 3,370
    edited 2009-10-15 11:42
    Yep, and we want the authentic green screen look with "dotty" characters, slowly fading phosphor and burn in [noparse]:)[/noparse]

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    For me, the past is not over yet.
  • BradCBradC Posts: 2,601
    edited 2009-10-15 11:52
    heater said...
    Yep, and we want the authentic green screen look with "dotty" characters, slowly fading phosphor and burn in [noparse]:)[/noparse]

    I've still got my green screen somewhere, and my amber. I preferred the latter. I had a B/W once also, but it was pretty average.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-15 12:05
    Yeah... We want the A> prompt well and truly burnt in LOL

    Chucked my screens away some years ago. Recently put a 17" VGA (monitor) out for council collection and a sign saying "works" and noone was took it. Most other junk went, but not the VGA !!

    Brad, would it be possible/simpler to have an extra terminal window that just does VT100 ?? I wouldn't want to lose the scrolling back feature when not in VT100 mode.

    I am noticing that it is not so friendly in swapping between edit/compile and terminal windows .... Not sure what to suggest yet.

    HOWEVER, I am really loving bst and particularly it's #define feature !!! I now use that for debugging, etc. I have a lot of options in my code, such as putting out "+" when reading and "." when writing sectors, xtal speed, etc, etc, etc.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • BradCBradC Posts: 2,601
    edited 2009-10-15 12:29
    Cluso99 said...

    Brad, would it be possible/simpler to have an extra terminal window that just does VT100 ?? I wouldn't want to lose the scrolling back feature when not in VT100 mode.

    No, what I'm going to do is have it so the cursor positioning works wherever the current display window is, but maintain the scrollback. So in theory you could dump 1000 lines out then use VT100 mode for a bit and then pump out more lines. The whole lot will be fairly seamless.
    Cluso99 said...

    I am noticing that it is not so friendly in swapping between edit/compile and terminal windows .... Not sure what to suggest yet.

    Yeah, I've got some forced scope changes in there. It started to bug me a little too, but I'm not entirely sure of the best way to tackle it yet.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • Dr_AculaDr_Acula Posts: 5,484
    edited 2009-10-15 13:09
    No, what I'm going to do is have it so the cursor positioning works wherever the current display window is, but maintain the scrollback.

    That would work fine. Programs that move the cursor round (eg wordstar) would stay in the screen area automatically. Programs that scroll would scroll.

    I've been using Teraterm and you have to remember to close it down when downloading a new propeller program as the ports conflict. I think there was a similar issue with BST, but it ought to be easy to shut down the terminal when downloading a new program. Or, if you don't want to lose the user's text, maybe keep the terminal open but close the serial port, download doing the reset etc, then reopen the serial port to the terminal. Or even just keep it open but redirect it?

    Yes, there are only a few VT100 and Wyse codes. Though it helps to have a program outputting them so you can test it as you go. Either a spare triblade, or cluso's nifty new 1.3" ramblade...

    Anyway, below is the code in vb.net, and for those that prefer reading spin, the code to do the same thing copied from Vince Briel's Pocketerm. We were building both at the same time, and just kept adding instructions till all the CP/M programs we could find were working ok.

        Sub DisplayCharacter(ByRef CharacterChanged As String)
            ' receives a character from serial port and updates the display
            Dim x As Integer
            Dim y As Integer
            Dim a As Integer
            Dim i As Integer
            Dim DisplayString As String
            Dim asciichar As Integer
            Dim LineOfText As String
            If CursX > 79 Then CursX = 0 ' when listening to lots of ^ characters can error
            Static VT100 As String ' build vt100 string 
            asciichar = Strings.Asc(CharacterChanged)
            Select Case asciichar
                Case 13 ' carriage return - back to the left side but don't scroll
                    CursX = 0
                Case 10 ' scroll up one line if on bottom line, otherwise just move down one
                    If CursY < 24 Then
                        CursY = CursY + 1
                    Else
                        For x = 0 To 79
                            Display(x, 25) = " " ' clear hidden line
                        Next
                        For y = 1 To 25
                            For x = 0 To 79
                                Display(x, y - 1) = Display(x, y)
                            Next
                        Next
                        CursY = 24
                    End If
                Case 8 ' backspace
                    CursX = CursX - 1
                    If CursX < 0 Then CursX = 0
                    Display(CursX, CursY) = " "
                    If CursX < 0 Then CursX = 0
                Case 0, 28 To 31, 128 To 255 ' display binary values in curly braces
                    DisplayString = "{" + Trim(Strings.Str(asciichar)) + "}"
                    If CursX > 74 Then ' near end of line so new line
                        Call Scroll()
                    End If
                    For i = 1 To Len(DisplayString)
                        Display(CursX, CursY) = Strings.Mid(DisplayString, i, 1)
                        CursX = CursX + 1
                    Next
                Case 1 To 7, 9, 11, 12, 14 To 26 ' display values 0 to 26 as ^
                    If CursX > 74 Then ' near end of line so new line
                        Call Scroll()
                    End If
                    DisplayString = "^" + Strings.Chr(64 + asciichar) ' 1=^A 2=^B etc
                    For i = 1 To Len(DisplayString)
                        Display(CursX, CursY) = Strings.Mid(DisplayString, i, 1)
                        CursX = CursX + 1
                    Next
                Case 27 ' escape sequence
                    VT100 = "]" ' start building vt100 string
            End Select
            ' no need to print character if >128 or a control character as already printed above
            If asciichar >= 32 And VT100 = "" And asciichar < 128 Then  ' ignore other characters under 32
                Display(CursX, CursY) = CharacterChanged
                CursX = CursX + 1 ' add one to the cursor
                If CursX > 79 Then
                    CursX = 0
                    CursY = CursY + 1 ' move to next line
                End If
                If CursY > 24 Then
                    ' scroll up
                    For x = 0 To 79
                        Display(x, 25) = " " ' clear hidden line
                    Next
                    For y = 1 To 25
                        For x = 0 To 79
                            Display(x, y - 1) = Display(x, y)
                        Next
                    Next
                    CursY = 24 ' beginning of last line
                    CursX = 0
                End If
            End If
            ' vt100 escape codes - all start with ] which stands for escape (easier to match string)
            If VT100 <> "" And asciichar >= 32 Then
                VT100 = VT100 + CharacterChanged ' add new ones on
            End If
            If Strings.Len(VT100) > 40 Then ' some {instructions} can be at least 33 char
                VT100 = "" ' cancel it but this should never happen. Just gets it out of a potential hang
            End If
            If VT100 = "][noparse][[/noparse]H" Then
                ' home position
                CursX = 0
                CursY = 0
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]J" Then
                ' erase from current line to the bottom of the screen
                For y = CursY To 24
                    For x = 0 To 79
                        Display(x, y) = " "
                    Next
                Next
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]0m" Then
                ' reset all attributes - ignore
                VT100 = "" ' reset it must do this for every command
            End If
            If Strings.Len(VT100) >= 6 And Strings.Len(VT100) <= 8 And Strings.Right(VT100, 1) = "H" Then
                ' a cursor move instruction can be ][noparse][[/noparse]03;04H or ][noparse][[/noparse]3;4H or ][noparse][[/noparse]03;4H
                i = Strings.InStr(VT100, ";")
                If i <> 0 Then
                    LineOfText = Strings.Left(VT100, i - 1)
                    LineOfText = Strings.Mid(LineOfText, 3) ' strip off escape and [noparse][[/noparse]
                    a = Val(LineOfText) ' row
                    CursY = a - 1 ' I use origin of 0,0 and vt100 uses 1,1
                    LineOfText = Strings.Mid(VT100, i + 1)
                    LineOfText = Strings.Left(LineOfText, Strings.Len(LineOfText) - 1) ' strip off H
                    a = Val(LineOfText) ' column
                    CursX = a - 1
                    Call RedrawDisplay()
                End If
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]0;1m" Then ' highlight text
                ' highlight text but I'm not sure how to do this in a textbox (? a rich text box) 
                ' plus need to store this attribute in the array
                ' so just ignore for the moment
                VT100 = ""
            End If
            If VT100 = "][noparse][[/noparse]K" Or VT100 = "][noparse][[/noparse]0K" Then ' delete to the end of the line
                For x = CursX To 79
                    Display(x, CursY) = " "
                Next
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]D" Then ' backspace ? a non documented vt100 code (escD is left arrow)
                'Only happens when opening a file and changing the name. 
                ' wordstar sends <esc>[noparse][[/noparse]D then a space then <esc>[noparse][[/noparse]D again
                CursX = CursX - 1
                If CursX < 0 Then CursX = 0
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]M" Then
                ' deletes the line with the cursor on it
                ' scrolls all lines below this up one
                For x = 0 To 79
                    Display(x, y) = " "
                Next
                y = 25 ' delete hidden line
                For x = 0 To 79
                    Display(x, y) = " "
                Next
                For y = CursY To 24
                    For x = 0 To 79
                        Display(x, y) = Display(x, y + 1)
                    Next
                Next
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]L" Then
                ' everything moves down one line from the current cursor line
                ' and delete the cursor line
                For y = 23 To CursY Step -1
                    For x = 0 To 79
                        Display(x, y + 1) = Display(x, y)
                    Next
                Next
                For x = 0 To 79
                    Display(x, CursY) = " "
                Next
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            If VT100 = "][noparse][[/noparse]2J" Then
                ' clear the whole display and move cursor to home
                For y = 0 To 25
                    For x = 0 To 79
                        Display(x, y) = " "
                    Next
                Next
                CursX = 0
                CursY = 0
                Call RedrawDisplay()
                VT100 = "" 'reset it must do this for every command
            End If
            ' Televideo and Wyse commands for Pacman and tetris
            If VT100 = "];" Or VT100 = "]*" Then
                ' Televideo/Wyse60 command to clear screen ESC; or ESC*
                For y = 0 To 25
                    For x = 0 To 79
                        Display(x, y) = " "
                    Next
                Next
                CursX = 0
                CursY = 0
                Call RedrawDisplay()
                VT100 = "" 'reset it must do this for every command
            End If
            ' move cursor
            If Strings.Len(VT100) = 4 And Strings.Left(VT100, 2) = "]=" Then
                ' a cursor move instruction is ESC=RC,4 bytes 32 offset
                CursY = Strings.Asc(Strings.Mid(VT100, 3, 1)) - 32
                CursX = Strings.Asc(Strings.Mid(VT100, 4, 1)) - 32
                Call RedrawDisplay()
                VT100 = "" ' reset it must do this for every command
            End If
            ' cursor off
            If Strings.Len(VT100) > 2 And Strings.Left(VT100, 1) = "]" And Strings.Mid(VT100, 3, 1) <> "[noparse][[/noparse]" Then
                ' not a VT100 message as second character is not [noparse][[/noparse]
                If VT100 = "].0" Then
                    ' cursor off
                    VT100 = "" ' reset it must do this for every command
                End If
                If VT100 = "].1" Then
                    ' cursor on
                    VT100 = "" ' reset it must do this for every command
                End If
            End If
            ' don't forget to set vt100 to "" after every if vt100 statement
        End Sub
    
    



    And in Spin
    'Start of VT100 code
          if remote == 27                                                                                   'vt100 ESC code is being sent
             vt100:=1
             byte1:=0
             byte2:=0
             byte3:=0
             byte4:=0
             byte5:=0
             byte6:=0
             byte7:=0
             remote:=0
             temp2:=0
             wyse:=0
             w1:=0
             w2:=0
             w3:=0
             
               ' removed the skip for esc= and put it further down
          'if remote==61
           ' vt100:=0
           ' remote:=0
                                                                                                 'Don't display the ESC code
          if remote == 99 and vt100 == 1                                                                    'ESC c
             remote:=0
             vt100:=0
             text.inv(0)
             text.cls(Baud,termcolor,pcport,ascii,CR)
             text.home
    
          ' wyse command to clear screen = Esc;
          if remote==59 and vt100==1 and wyse==0
              vt100:=0
              remote:=0                  
              text.cls(Baud,termcolor,pcport,ascii,CR)
              text.home    
          ' another wyse command to clear the screen is Esc*
          if remote==42 and vt100==1 and wyse==0
              vt100:=0
              remote:=0
              text.cls(Baud,termcolor,pcport,ascii,CR)
              text.home
    
          
              'put ESC D and ESC M here
          if remote == 77 and vt100 == 1 'AKA ESC M
             text.scrollM
             vt100 := 0
          if remote == 68 and vt100 == 1 'AKA ESC D
             if byte2 <> 91 and byte3 <> 91 and byte4 <> 91  'not esc[noparse][[/noparse]D   
                'text.scrollD
                vt100 := 0
          if remote == 76 and vt100 == 1 'AKA ESC L
          if remote == 91 and vt100 == 1 ' [noparse][[/noparse]                                                                   'look for open bracket [noparse][[/noparse]
             vt100:=2
            ' begin wyse
          if remote==61 and vt100==1 and wyse==0   ' wyse command for Esc=
             wyse:=61
          if remote==46 and vt100==1 and wyse==0    ' wyse command for Esc.
             wyse:=46
          if wyse==61 or wyse==46
            w3:=w2    ' wyse mini buffer , only needs a few characters as codes are short
            w2:=w1
            w1:=remote
            remote:=0 ' so doesn't print character
          if w3==61 and wyse==61  ' an Esc=RC
            col:=w1-32
            row:=w2-32
            text.cursloc(col,row)
            vt100:=0 ' clear pointer
            wyse:=0 ' clear vt100 pointer too
            remote:=0 ' hide character from output
          if w2==46 and w1==49 and wyse==46      ' Esc.1 
            vt100:=0       ' do nothing but do need to trap these (cursor on and off)
            wyse:=0
            remote:=0 ' hide character from output
          if w2==46 and w1==48 and wyse==46      ' Esc.0
            vt100:=0
            wyse:=0
            remote:=0 ' hide character from output   
             ' end wyse                                                                                                 'start recording code
          if remote == 62 and vt100 == 1 or remote == 60 and vt100 == 1                                     'look for < & >
             vt100:=0 ' not sure why this is coming up, can't find in spec.
          if vt100==2 ''Check checking for VT100 emulation codes  
             if remote > 10
               byte7:=byte6
               byte6:=byte5                                                                                 ' My VTCode Mini Buffer
               byte5:=byte4
               byte4:=byte3
               byte3:=byte2                                                                                 'Record the last 7 bytes
               byte2:=byte1
               byte1:=remote
                       
             if remote == 109                                                                               'look for lowercase m
                if byte2 == 91                                                                              'if [noparse][[/noparse]m turn off to normal set
                   text.inv(0)
                   vt100:=0
                if byte2 == 49 and vt100 > 0                                                                              'is it ESC[noparse][[/noparse]1m BOLD
                   'text.inv(1)
                   vt100 := 0
                if byte2  == 55 and vt100 > 0                                                                             'is it ESC[noparse][[/noparse]7m?
                   text.inv(1)
                   vt100 := 0
                if byte2  == 48 and vt100 > 0                                                                             '0 is back to normal
                   text.inv(0)
                   vt100:=0
                if byte2 == 52 and vt100 > 0                                                                'is it ESC[noparse][[/noparse]4m underline?
                   vt100:=0                                                                                 'yes ignore
                if byte2 == 50 and vt100 >0                                                                 'is it ESC[noparse][[/noparse]2m dim text
                   vt100:=0
                                                                                                           'yes ignore  
             if remote == 64                                                                                'look for ESC[noparse][[/noparse]value@ @=64   insert value spaces
                if byte4 == 91 'two digit value
                   byte3:=byte3-48                                                                         'Grab 10's
                   byte2:=byte2-48                                                                         'Grab 1's
                   byte3:=byte3*10                                                                         'Multiply 10's
                   byte3:=byte3+byte2                                                                      'Add 1's
                   text.insertat(byte3)
                if byte3 == 91 'single digit value
                   byte2:=byte2-48
                   text.insertat(byte2)
                vt100 :=0   
             if remote == 80                                                                                'look for ESC[noparse][[/noparse]valueP P=64   delete value spaces
                if byte4 == 91 'two digit value
                   byte3:=byte3-48                                                                         'Grab 10's
                   byte2:=byte2-48                                                                         'Grab 1's
                   byte3:=byte3*10                                                                         'Multiply 10's
                   byte3:=byte3+byte2                                                                      'Add 1's
                   text.delp(byte3)
                if byte3 == 91 'single digit value
                   byte2:=byte2-48
                   text.delp(byte2)
                vt100 :=0
             if remote == 104                                                                               'look for lowercase h set CR/LF mode
                if byte2 == 48 'if character before h is 0 maybe command is 20h
                   if byte3 == 50 'if byte3 then it is for sure 20h
                     LNM := 0        
                vt100:=0
    
             if remote == 61                                                                                'lool for =
                vt100:=0
    
             if remote == 114                                                                               'look for lowercase r
                vt100:=0
    
             if remote == 108                                                                               'look for lowercase l
                if byte2 == 48 'if character before l is 0 maybe command is 20l
                   if byte3 == 50 'if byte3 then it is for sure 20l
                     LNM := 1  '0 means CR/LF in CR mode only 
                vt100:=0
    
             if remote == 62  'look for >
                vt100:=0
             if remote == 77                                                                                'ESC M look for obscure scroll window code
                text.scrollM 
                vt100:=0
             if remote == 68 or remote == 76 ' look for ESC D  or ESC L
                text.scrollD
                vt100:=0
             if remote == 72 or remote == 102                                                             ' HOME CURSOR (uppercase H or lowercase f) 
                if byte2==91 or byte2==59                                                                   'look for [noparse][[/noparse]H or [noparse][[/noparse];f
                   text.home
                   vt100:=0
                '' Check for X & Y with [noparse][[/noparse]H or ;f   -   Esc[noparse][[/noparse]Line;ColumnH
    
                else                                                                                        'here remote is either H or f       
                  if byte4 == 59                                                                            'is col is greater than 9     ; ALWAYS if byte4=59
                    byte3:=byte3-48                                                                         'Grab 10's
                    byte2:=byte2-48                                                                         'Grab 1's
                    byte3:=byte3*10                                                                         'Multiply 10's
                    byte3:=byte3+byte2                                                                      'Add 1's
                    col:=byte3                                                                              'Set cols
                                       
                    if byte7 == 91                                                                          'Assume row number is greater than 9  if ; at byte 4 and [noparse][[/noparse] at byte 7 greater than 9
                       byte6:=byte6-48                                                                      'Grab 10's
                       byte5:=byte5-48                                                                      'Grab 1's
                       byte6:=byte6*10                                                                      'Multiply 10's
                       byte6:=byte6+byte5                                                                   'Add 1's
                       row:=byte6
    
                    if byte6 == 91                                                                          'Assume row number is less than 10
                       byte5:=byte5 - 48                                                                    'Grab 1's
                       row:=byte5
    
                  if byte3 == 59                                                                            ' Assume that col is less an 10
                    byte2:=byte2-48                                                                         'Grab 1's
                    col:=byte2                                                                              'set cols
    
                    if byte6 == 91                                                                          'Assume row number is greater than 9
                       byte5:=byte5-48                                                                      'Grab 10's
                       byte4:=byte4-48                                                                      'Grab 1's
                       byte5:=byte5*10                                                                      'Multiply 10's
                       byte5:=byte5+byte4                                                                   'Add 1's
                       row:=byte5
                    if byte5 == 91                                                                          'Assume that col is greater than 10
                       byte4:=byte4-48                                                                       'Grab 1's
                       row:=byte4
    
                  col:=col-1
                  if row == -459
                     row:=1
                  if col == -40    ' Patches a bug I havn't found.  *yet*
                     col := 58     ' A Microsoft approach to the problem. :)
                  if row == -449
                     row := 2      ' Appears to be an issue with reading
                  if row == -439   ' single digit rows.
                     row := 3
                  if row == -429   ' This patch checks for the bug and replaces
                     row := 4      ' the faulty calculation.
                  if row == -419
                     row := 5      ' Add to list to find the source of bug later.
                  if row == -409
                     row := 6
                  if row == -399
                     row := 7
                  if row == -389
                     row := 8
                  if row == -379
                     row := 9
                  row--
    
                  
                  if row < 0
                     row:=0
                  if col < 0
                     col:=0
                  if row > 35
                     row :=35
                  if col > 79
                     col := 79
                  text.cursloc(col,row)
                vt100:=0
             if remote == 114       'ESCr 
                
                   text.out(126)
             if remote == 74    '' CLEAR SCREEN
                if byte2==91    '' look for [noparse][[/noparse]J  '' clear screen from cursor to 25
                   text.clsfromcursordown 
                'vt100:=0
                if byte2==50    '' look for [noparse][[/noparse]2J '' clear screen
                   text.cls(Baud,termcolor,pcport,ascii,CR)
                if byte2==49     'look for [noparse][[/noparse]1J
                   text.clstocursor
                if byte2==48     'look for [noparse][[/noparse]0J
                   text.clsfromcursordown
                vt100:=0
             if remote == 66    '' CURSOR DOWN    Esc[noparse][[/noparse]ValueB
                if byte4 == 91 '' Assume number over 10
                  byte3:=byte3-48
                  byte2:=byte2-48
                  byte3:=byte3*10
                  byte3:=byte3+byte2
                  var1:=byte3
                if byte3 == 91 '' Assume number is less 10
                  byte2:=byte2-48
                  var1:=byte2
                if byte2 == 91 ''ESC[noparse][[/noparse]B no numbers move down one
                  'text.out($C3)
                  var1 := 1
                loop:=0
                repeat until loop == var1
                   loop++
                   text.out($C3)
    
                vt100:=0
    
    
             if remote == 65    '' CURSOR UP   Esc[noparse][[/noparse]ValueA
                if byte4 == 91 '' Assume number over 10
                  byte3:=byte3-48
                  byte2:=byte2-48
                  byte3:=byte3*10
                  byte3:=byte3+byte2
                  var1:=byte3
                if byte3 == 91 '' Assume number is less 10
                  byte2:=byte2-48
                  var1:=byte2
                if byte2 == 91 ''ESC[noparse][[/noparse]A no numbers move down one
                
                  var1 := 1
                loop:=0
                repeat until loop == var1
                   text.out($C2)
                   loop++
                vt100:=0
    
    
             if remote == 67    '' CURSOR RIGHT   Esc[noparse][[/noparse]ValueC
                if byte4 == 91 '' Assume number over 10
                  byte3:=byte3-48
                  byte2:=byte2-48
                  byte3:=byte3*10
                  byte3:=byte3+byte2
                  var1:=byte3
                if byte3 == 91 '' Assume number is less 10
                  byte2:=byte2-48
                  var1:=byte2
                if byte2 == 91 ''ESC[noparse][[/noparse]C no numbers move RIGHT one
                
                  var1 := 1
                loop:=0
                repeat until loop == var1
                   text.out($C1)
                   loop++
                vt100:=0
    
             if remote == 68    '' CURSOR LEFT   Esc[noparse][[/noparse]ValueD  OR ESC[noparse][[/noparse]D
                if byte4 == 91 '' Assume number over 10
                  byte3:=byte3-48
                  byte2:=byte2-48
                  byte3:=byte3*10
                  byte3:=byte3+byte2
                  var1:=byte3
                if byte3 == 91 '' Assume number is less 10
                  byte2:=byte2-48
                  var1:=byte2
                if byte2 == 91 ''ESC[noparse][[/noparse]D no numbers move LEFT one
                
                  var1 := 1
                loop:=0
                repeat until loop == var1
                   text.out($C0)   'was $C0
                   loop++
                vt100:=0  
                
             if remote == 75   '' Clear line  Esc[noparse][[/noparse]K
               if byte2 == 91 '' Look for [noparse][[/noparse]
                 text.clearlinefromcursor
                 
                 vt100:=0
               if byte2  == 48 ' look for [noparse][[/noparse]0K
                  if byte3 == 91
                     text.clearlinefromcursor
                     
                     vt100:=0
               if byte2 == 49  ' look for [noparse][[/noparse]1K
                  if byte3 == 91
                     text.clearlinetocursor
                     vt100 := 0
               if byte2 == 50 ' look for [noparse][[/noparse]2K
                  if byte3 == 91
                     text.clearline
                     
                     vt100 := 0  
    
             if remote == 99 ' look for [noparse][[/noparse]0c or [noparse][[/noparse]c           ESC [noparse][[/noparse] ? 1 ; Ps c Ps=0 for VT-100 no options
               if byte2 == 91 '' Look for [noparse][[/noparse]
                    ser2.str(string(27,"[noparse][[/noparse]?1;0c"))
                    vt100 := 0
               if byte2 == 48
                    if byte3 == 91
                         ser2.str(string(27,"[noparse][[/noparse]?1;0c"))
                         vt100 := 0
             remote:=0 '' hide all codes from the VGA output.
    
    

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    www.smarthome.viviti.com/build
  • Oldbitcollector (Jeff)Oldbitcollector (Jeff) Posts: 8,091
    edited 2009-10-15 13:23
    Gee that code looks familiar..

    (I'm a little embarrassed about that "Microsoft" style bug fix in the middle.
    Perhaps I should get that fixed when I port it over to Doug's 8x8 driver.)


    Are you guys nearing a 1.0 release yet?


    OBC

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    New to the Propeller?

    Visit the: The Propeller Pages @ Warranty Void.
  • YodaYoda Posts: 132
    edited 2009-10-15 14:44
    @Heater - I have had VT100 running on blade #1 since the very beginning. I modified that code that came on my PocketTerm that was a derivative of code I believe from OBC. Basically I just had it set to 115K baud and applied the cross jumpers that were a patch to the TriBlade that Cluso posted long ago. Works great. I have rewritten that code for the N8VEM to be a little easier to follow and I think I have removed the microsoft problems that OBC mentioned above. Have to finish up disk read and write for N8VEM and then I will dust of the TriBlade and get back in the game.

    Dave
  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-16 02:56
    OBC: I thought you had something to do with the VT100 code *grin*.

    There is just soo many community projects going on here, it is hard to follow who did what unless the code contains the proper credits at the top, which I love to do where possible.

    The projects now underway/released in the last 6 months has exploded smile.gif The prop truly has now grown up - just waiting for a killer app to really launch it into real commercial
    to get the volume up.

    Yoda: you have been quiet lately. nice to see you are still lurking smile.gif

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • Oldbitcollector (Jeff)Oldbitcollector (Jeff) Posts: 8,091
    edited 2009-10-16 03:04
    @Yoda:

    I'm pleased to hear that you patched that stupid bug! Please post some code when you get a chance!

    OBC

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    New to the Propeller?

    Visit the: The Propeller Pages @ Warranty Void.
  • heaterheater Posts: 3,370
    edited 2009-10-16 09:55
    Ouch, that code gives me headache.
    We probably don't need to speed up the terminal interface but couldn't it use some "else" clauses to save executing all the "if"s all the time. Or perhaps "case" statements.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    For me, the past is not over yet.
  • Toby SeckshundToby Seckshund Posts: 2,027
    edited 2009-10-16 13:02
    Heater

    I've just read about your prop kits trip around the city, unatended. Thank your lucky stars that you live in a country that didn't invoke a city shutdown, followed by a controlled explosion.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Style and grace : Nil point
  • Oldbitcollector (Jeff)Oldbitcollector (Jeff) Posts: 8,091
    edited 2009-10-16 13:15
    @Heater,

    Yeah, I went through a bottom of asprin when writing that.. It gets the job done, and proof of how wonderful
    the Propeller is under really poor coding conditions... [noparse];)[/noparse]

    OBC

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    New to the Propeller?

    Visit the: The Propeller Pages @ Warranty Void.
  • YodaYoda Posts: 132
    edited 2009-10-16 14:35
    @Heater

    When I wrote the code for the N8VEM and propIO it is all done by case statements now. I think it is much easier to read and understand now. I will post a version of the vt100 decode parts here. There is no serial interface in it now as I use the I/O ports on the N8VEM to communicate with the terminal.

    Dave
  • BradCBradC Posts: 2,601
    edited 2009-10-16 14:46
    heater said...
    Ouch, that code gives me headache.
    We probably don't need to speed up the terminal interface but couldn't it use some "else" clauses to save executing all the "if"s all the time. Or perhaps "case" statements.

    I could have sworn I saw Mike Green post a VGA object recently that appeared (I only gave it a very quick look over) to have quite a neat implementation of a VT100 parser in it. I am completely unable to find it however.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • potatoheadpotatohead Posts: 10,261
    edited 2009-10-16 14:50
    It's in my NTSC thread, and it was ANSI. Do those share codes?

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Propeller Wiki: Share the coolness!
    Chat in real time with other Propellerheads on IRC #propeller @ freenode.net
    Safety Tip: Life is as good as YOU think it is!
  • BradCBradC Posts: 2,601
    edited 2009-10-16 15:04
    Well, a cursory look says that they are almost identical to the VT100 I've had my head in all day, so I'd say yes.

    In any case, if it came to modifying Mikes driver it would be a doddle. What a simple and elegant piece of code.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    lt's not particularly silly, is it?
  • Mike GreenMike Green Posts: 23,101
    edited 2009-10-16 15:39
    Here's the link: http://forums.parallax.com/showthread.php?p=840574

    Thanks for the praise.

    The VT100 control sequences went through a standardization process to become the ANSI standard control sequences.
  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-17 01:44
    Could you please add links to the VT100 & ANSI·threads (by the authors for recognition) to the thread index below...

    Emulators: Micros eg Altair, and Terminals eg VT100 (Index)
    http://forums.parallax.com/showthread.php?p=778427

    There is a link in my thread to this so it is easily found.

    I think potatoheads code should be here too.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • Toby SeckshundToby Seckshund Posts: 2,027
    edited 2009-10-17 15:48
    Is the latest, favoured, rig a Blade 2 with one 512Kb ram, no latch, and SD card?

    Just thinking of knocking up a board to take to work that doesn't have all the Z80 stuff underneath it.

    (I almost got one the other day, off a bus)

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Style and grace : Nil point
  • Cluso99Cluso99 Posts: 18,069
    edited 2009-10-18 01:24
    Hahaha - nice one Toby LOL

    Toby: what do you want to do with it? I have not written a latchless driver since no-one is using Blade #2 without the latch.

    My latest RamBlade is pretty bare - Blade #2 has prop+512KB+uSD+eeprom+latch+xtal(now 6MHz). I also built the power supply section and the PropPlug section.

    Recently I added the TV connector and 3 resistors and added temporary jumpers to test potatohead's code with Blade #2.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Links to other interesting threads:

    · Home of the MultiBladeProps: TriBlade,·RamBlade, RetroBlade,·TwinBlade,·SixBlade, website
    · Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
    · Prop Tools under Development or Completed (Index)
    · Emulators: CPUs Z80 etc; Micros Altair etc;· Terminals·VT100 etc; (Index) ZiCog (Z80) , MoCog (6809)
    · Search the Propeller forums·(uses advanced Google search)
    My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
  • potatoheadpotatohead Posts: 10,261
    edited 2009-10-18 07:52
    I'll link the display driver. It's nearing a core release, but for Baggers and a toy...

    That's gonna happen sans mouse pointer. Everything else is a go. All that is needed is some core routine debug at this point. I've got scroll, print a single char, and maybe one or two others on that list. Other things can be written to those, or write to the display buffer.

    Oh, and a mono only build, for small size. You know, "dotty" characters are totally possible! What you do is pick a color, say blue, crank the brightness up on it, then disable color burst and interlace. On your display, up the contrast, lower brightness and there's your dots. They won't be exactly the same dots, because of the signal timing. If somebody really, really wants those dots... PM me.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Propeller Wiki: Share the coolness!
    Chat in real time with other Propellerheads on IRC #propeller @ freenode.net
    Safety Tip: Life is as good as YOU think it is!
Sign In or Register to comment.