Announcement

Collapse
No announcement yet.

Visi and Serial communication not working

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hi P, Hope you are well and staying safe where ever you are. Have you had a chance / any joy with the serial solution? I've been trying but had no joy. I'd be grateful if you would respond to let me know if you can do any more or not. Thanks, Simon.

    Comment


    • Hi Simon,

      I wasn't able to get this working in the Serial environment as it is so it would mean extra work in modifying / adding routines to accept the data and scroll up & down. I will continue to find a solution for this and update you as soon as possible.

      Best regards

      Paul

      Comment


      • Paul, great news that you're still working on it. I am extremely grateful and look forward to seeing what you come up with. Stay safe

        Comment


        • Hi ,I will return to the fact that it is possible to change SPE programs for example SPE programs text for L SK-GEN4-43D

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

          platform "Gen4-uLCD-43D"

          // manargs could be reduced from 32*9 (288 bytes) to 32*4 (128 bytes)
          // by placing the 0 arg commands after 'button' and letting the args run into them
          // 2016/02/22 1.2 fixed PeekM and PokeM commands, they were not working
          // 2018/09/28 1.3 Added ability to use a Workshop defined com port. This requires Workshop 4.6.0.0 or above

          #inherit "4DGL_16bitColours.fnc"

          #CONST
          ACK 6
          NAK 21
          ArgStart 14
          StringStart 24
          #END

          //#inherit "SPE2FUNCCONSTS.INC"
          #CONST
          maxcmds 569
          maxmancmds 41
          maxmanargs 9
          file_CallFunction 1
          sys_GetModel 2
          sys_GetVersion 3
          sys_GetPmmC 4
          writeString 5
          readString 6
          blitComtoDisplay 7
          file_FindFirstRet 8
          file_FindNextRet 9
          setbaudWait 10
          peekM 11
          pokeM 12
          #END

          #DATA
          byte funcArgs // all 1 higher
          255, 255, 2, 255, 255, 255, 255, 255, 255, 0, 255, 0, 0, 255, 255, 255,
          3, 3, 2, 2, 2, 2, 2, 2, 2, 255, 2, 2, 2, 2, 2, 2,
          2, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0,
          255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 0, 0, 255, 255,
          255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0,
          3, 2, 2, 255, 2, 0, 0, 0, 0, 2, 1, 0, 0, 3, 1, 3,
          255, 3, 255, 6, 255, 255, 6, 6, 5, 5, 4, 3, 8, 255, 0, 0,
          0, 255, 255, 255, 255, 255, 5, 3, 1, 6, 6, 0, 255, 255, 255, 255,
          255, 7, 9, 7, 255, 255, 255, 8, 0, 255, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 255, 255, 255, 2, 255, 2, 255, 2, 2, 2, 2, 2, 2,
          2, 2, 255, 2, 2, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 3,
          4, 3, 3, 0, 0, 1, 1, 2, 2, 3, 1, 1, 0, 0, 0, 0,
          255, 255, 255, 0, 0, 255, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255,
          255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0,
          255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0,
          255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 255, 0, 255, 0, 0, 255,
          0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0,
          0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0,
          255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 0, 0, 0, 0,
          255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 255, 0, 0, 5, 3, 3, 3, 3, 5, 4, 3, 4, 4,
          3, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 2, 255, 255, 5, 2, 2, 255, 255, 0, 0, 255, 255, 255,
          255, 2, 1, 255, 255, 255, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2,
          0, 4, 5, 0, 0, 0, 4, 6, 0, 2, 3, 2, 0, 0, 0, 2,
          0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1,
          1, 1, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255,
          255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0,
          255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 0, 0, 0, 0, 0, 0,
          0, 0, 255, 255, 255, 0, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255,
          255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0
          byte funcRet
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
          1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1,
          1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
          0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,
          0, 1, 1, 0, 0, 0, 1, 1, 0, 7, 1, 1, 0, 0, 0, 1,
          0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
          0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0
          #END
          #DATA

          Comment


          • byte manArgs
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            'G', 'I', 'X', 0, 0, 0, 0, 0, 0,
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            '2', 'I', 'I', 0, 0, 0, 0, 0, 0,
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            'G', 'G', 'I', 0, 0, 0, 0, 0, 0,
            'G', 'A', 0, 0, 0, 0, 0, 0, 0,
            'G', 0, 0, 0, 0, 0, 0, 0, 0,
            '2', 'I', 'I', 0, 0, 0, 0, 0, 0,
            'G', 'I', 'X', 0, 0, 0, 0, 0, 0,
            'I', '3', '3', 0, 0, 0, 0, 0, 0,
            'I', '3', '3', 0, 0, 0, 0, 0, 0,
            'I', 'V', 'I', 0, 0, 0, 0, 0, 0,
            'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'G',
            'I', 'I', 0, 0, 0, 0, 0, 0, 0,
            'I', 'Y', 'Y', 'I', 0, 0, 0, 0, 0,
            'I', 'Y', 'Y', 'I', 0, 0, 0, 0, 0,
            'I', 'Y', 'Y', 'I', 0, 0, 0, 0, 0,
            '2', 0, 0, 0, 0, 0, 0, 0, 0,
            '7', 0, 0, 0, 0, 0, 0, 0, 0,
            'U', 0, 0, 0, 0, 0, 0, 0, 0,
            'I', 'I', 'X', 0, 0, 0, 0, 0, 0,
            '2', 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0,
            'A', 0, 0, 0, 0, 0, 0, 0, 0,
            'A', 0, 0, 0, 0, 0, 0, 0, 0,
            'A', 'I', 0, 0, 0, 0, 0, 0, 0,
            'U', 'I', 0, 0, 0, 0, 0, 0, 0,
            'I', 'J', 0, 0, 0, 0, 0, 0, 0,
            'I', '2', 0, 0, 0, 0, 0, 0, 0,
            'I', 'I', 'I', 'I', 'K', 0, 0, 0, 0,
            'G', '2', 0, 0, 0, 0, 0, 0, 0,
            '2', 0, 0, 0, 0, 0, 0, 0, 0,
            'I', 0, 0, 0, 0, 0, 0, 0, 0,
            'I', 0, 0, 0, 0, 0, 0, 0, 0,
            'I', 'I', 0, 0, 0, 0, 0, 0, 0
            byte manArgC
            1, 1, 1, 3, 1, 1, 3, 1, 3, 2, 1, 3, 3, 3, 3, 3,
            9, 2, 4, 4, 4, 1, 1, 1, 3, 1, 0, 0, 1, 1, 2, 2,
            2, 2, 5, 2, 1, 1, 1, 2
            byte manRet
            1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 3, 3, 1,
            0, 5, 0, 0, 0, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
            1, 2, 0, 2, 2, 0, 1, 0
            word manFunc
            file_Count, file_Dir, file_Erase, file_Exec, file_Exists, file_FindFirst, file_GetS, file_LoadFunction, file_LoadImageControl, file_Open, file_PlayWAV, file_Read, file_Run, file_Size, file_Tell, file_Write,
            gfx_Button, gfx_Orbit, gfx_Polygon, gfx_PolygonFilled, gfx_Polyline, media_RdSector, media_WrSector, putstr, file_CallFunction, sys_GetModel, sys_GetVersion, sys_GetPmmC, charheight, charwidth, file_PutC, file_PutS,
            writeString, readString, blitComtoDisplay, file_FindFirstRet, file_FindNextRet, setbaudWait, peekM, pokeM
            #END
            //end inherit "SPE2FUNCCONSTS.INC"

            #DATA
            byte model
            "Gen4-uLCD-43D\0"
            #END

            #CONST
            version 0x0103
            #END

            func timer0timer()
            if ( (stuff[0] == 0) // suppress splash display if already accessed
            && (stuff[1] == 0) )
            txt_FontID(FONT3) ;
            txt_MoveCursor(2, 26);
            txt_FGcolour(WHITE);
            putstr("4D Systems") ;
            txt_MoveCursor(4, 27);
            txt_FontID(FONT2) ;
            txt_Height(2) ;
            txt_Width(2) ;
            txt_FGcolour(GRAY);
            putstr("gen") ;
            txt_FGcolour(RED);
            putch('4') ;
            txt_Height(1) ;
            txt_Width(1) ;
            txt_FontID(FONT3) ;
            txt_MoveCursor(7, 24);
            txt_FGcolour(WHITE);
            putstr("gen4-u") ;
            txt_FGcolour(RED);
            putch('L') ;
            txt_FGcolour(LIME) ;
            putch('C') ;
            txt_FGcolour(BLUE);
            putch('D') ;
            txt_FGcolour(WHITE);
            putstr("-43D") ;
            txt_FontID(FONT2) ;
            txt_MoveCursor(15, 24) ;
            print("SPE2 rev ", version >> 8, ".", version & 0x0F) ;
            txt_MoveCursor(17, 24) ;
            print("PmmC rev ", pmmcversion >> 8, ".", pmmcversion & 0x0F) ;
            txt_MoveCursor(19, 24) ;
            print("Comms 9600") ;
            txt_MoveCursor(23, 21);
            putstr("4D Systems (c)2015") ;

            txt_MoveCursor(24, 20);
            txt_FontID(FONT3) ;
            txt_FGcolour(RED);
            putstr("www.4dsystems.com.au") ;

            gfx_Panel(0, 105, 205, 275, 67, DARKGRAY);

            txt_Opacity(TRANSPARENT);
            txt_MoveCursor(18, 17);
            txt_FGcolour(DARKBLUE);
            putstr(" Getting Started:") ;

            txt_MoveCursor(19, 14);
            putstr(" Please refer to the\n Quick Start Guide\n included with the display.") ;

            txt_FontID(FONT3) ; // reset everything we changed
            txt_FGcolour(LIME);
            txt_MoveCursor(0, 0);
            endif
            endfunc

            var stuff[10] ; // maxargs+1
            var combuff[100] ;
            var strbuff[256], pmmcversion ;

            func serinw()
            var i ;
            while ((i := serin()) < 0) ;
            return i ;
            endfunc

            func main()
            var i, j, k, l, m, cmd, strp, t, fv[2], fr[2] ;
            to(strbuff) ;
            print(sys_PmmC());
            k := str_Ptr(strbuff) ;
            k := str_Find(&k, "\n");
            k++ ;
            flt_VAL(fr, k) ;
            flt_FLOOR(fv, fr);
            flt_SUB(fr,fr,fv) ;
            flt_MUL(fr,fr,"10") ;
            k := flt_FTOI(fv);
            m := flt_FTOI(fr);
            pmmcversion := k << 8 + m ;

            sys_SetTimer(TIMER0, 5000) ;
            sys_SetTimerEvent(TIMER0, timer0timer) ;

            com_Init(combuff,200,0); // set up a interrupt driven ring buffer for comms 20, not enough, 100 ok
            com_SetBaud(COM0,960);
            gfx_OrbitInit(&strbuff[0], &strbuff[1]); // set result holders for orbit command, if used
            repeat
            if (com_Count() > 1) // outer loop
            j := serin() << 8 + serin() ;
            if (j > 0) // 'manual' command?
            // manual commands will be 1..nn
            if (j >= maxmancmds)
            serout(NAK) ;
            else
            cmd := j-1 ;
            stuff[i++] := manFunc[cmd] ;
            k := cmd * maxmanargs ;
            strp := str_Ptr(strbuff) ;
            for (j := 0; j < manArgC[cmd]; j++)
            switch (manArgs[j+k])
            case 'K' :
            break ;
            case 'G' :
            stuff[i++] := strp ;
            repeat
            l := serinw() ;
            str_PutByte(strp++, l) ;
            until (l == 0) ;
            if (strp & 1) strp++ ;
            break ;
            case 'A' :
            stuff[i++] := serinw() ;
            break ;
            case 'J' : // writestring
            if (stuff[1])
            strp := stuff[1] ;
            l := str_Length(strp) ;
            strp += l ;
            if (strp & 1)
            strp++ ;
            else
            strp += 2 ;
            endif
            else
            strp += StringStart*2 ;
            endif
            stuff[i++] := strp ; // save for return
            repeat
            l := serinw() ;
            str_PutByte(strp++, l) ;
            until (l == 0) ;
            break ;
            case 'U' : // putstr
            stuff[i++] := strbuff ;
            repeat
            l := serinw() ;
            str_PutByte(strp++, l) ;
            until (l == 0) ;
            break ;
            case 'V' : // file_Write
            stuff[i] := stuff[i-1] ; // second parm is really length
            stuff[i-1] := strp ; // first parm is really strbuf is this correct?
            i++ ;
            for (m := 0; m < stuff[2]; m++)
            l := serinw() ;
            str_PutByte(strp++, l) ;
            next
            break ;
            case '2' : // also '4' and '6'
            stuff[i++] := strbuff ; // media_RdSector, file_ReadString and file_GetS need word address
            break ;
            case '3' : // file_Size,tell, 2 args
            stuff[i] := strbuff+i-2 ;
            i++ ;
            break ;
            case '7' : // media_WrSector
            stuff[i++] := strbuff ; // first parm is really strbuf is this correct?
            for (m := 0; m < 512; m++)
            l := serinw() ;
            str_PutByte(strp++, l) ;
            next
            break ;
            case 'I' : // also 'H', 'E', 'C', 'F', 'T' and 'R'
            stuff[i++] := serinw() << 8 + serinw() ;
            break ;
            case 'X' : // array of args for file_run/exec /call
            if (stuff[0] == file_CallFunction)
            m := stuff[2] ;
            k := stuff + 2 ;
            i := m ;
            else
            m := stuff[2] ;
            k := strbuff + ArgStart ;
            stuff[2] := k ;
            *(k++) := m ;
            endif

            for (l := 0; l < m; l++)
            *(k++) := serinw() << 8 + serinw() ;
            next
            break ;
            case 'Y' : // array of args for Polyxxxx
            if (i == 2) // x parms
            stuff[i] := strbuff ;
            else
            stuff[i] := strbuff+128 ;
            endif
            for (l := 0; l < stuff[1]; l++)
            *(stuff[i]+l) := serinw() << 8 + serinw() ;
            next
            i++ ;
            break ;
            default :
            print("Missing Parameter handler ", [CHR] manArgs[j+k], "\n") ;
            pause(5000) ;
            endswitch
            next
            if (stuff[0] >= 0)
            switch (stuff[0])
            case file_CallFunction :
            k := stuff[1](@&stuff[2], i);
            break ;
            case sys_GetModel :
            to (strbuff) ;
            // print("uLCD-???PT\0") ;
            putstr(model) ;
            k := strlen(strbuff) ;
            break ;
            case sys_GetVersion :
            k := version ;
            break ;
            case sys_GetPmmC :
            k := pmmcversion ;
            break ;
            case writeString :
            k := stuff[2] ;
            break ;
            case readString :
            strp := stuff[1] ;
            k := str_Length(strp) ;
            break ;
            case blitComtoDisplay :
            disp_setGRAM(stuff[1],stuff[2],stuff[1]+stuff[3]-1,stuff[2]+stuff[4]-1);
            disp_BlitPixelsFromCOM0();
            break ;
            case file_FindFirstRet :
            to (strbuff) ;
            if (!file_FindFirst(stuff[1])) strbuff[0] := 0 ;
            k := strlen(strbuff) ;
            strp := str_Ptr(strbuff) ;
            break ;
            case file_FindNextRet :
            to (strbuff) ;
            if (!file_FindNext()) strbuff[0] := 0 ;
            k := strlen(strbuff) ;
            break ;
            case setbaudWait :
            setbaud(stuff[1]);
            pause(100) ;
            break ;
            case peekM :
            k := peekW(stuff[1]) ;
            break ;
            case pokeM :
            pokeW(stuff[1], stuff[2]) ;
            break ;
            default :
            print("Missing internal function ", stuff[0], "\n") ;
            pause(5000) ;
            endswitch
            else
            k := stuff[0](@&stuff[1], manArgC[cmd]);
            endif
            serout(ACK) ;
            switch (manRet[cmd])
            case 0 : break ;
            case 1 :
            serout(k >> 8) ;
            serout(k) ;
            break ;
            case 2 : // Result + String (file_Gets, file_Read) and 6 : // Result + String (readstring)
            serout(k >> 8) ;
            serout(k) ;
            for (i:= 0; i < k; i++)
            serout(str_GetByte(strp++)) ; // strp should be valid from before command was issued
            next
            break ;
            case 3 : // Result + 2Words (file_Size, file_Tell)
            serout(k >> 8) ;
            serout(k) ;
            serout(strbuff[0] >> 8) ;
            serout(strbuff[0]) ;
            serout(strbuff[1] >> 8) ;
            serout(strbuff[1]) ;
            break ;
            case 4 : // result + 512bytes (media_rdSector)
            serout(k >> 8) ;
            serout(k) ;
            for (i:= 0; i < 512; i++)
            serout(str_GetByte(strp++)) ; // strp should be valid from before command was issued
            next
            break ;
            case 5 : // 2words (gfx_Orbit)
            serout(strbuff[0] >> 8) ;
            serout(strbuff[0]) ;
            serout(strbuff[1] >> 8) ;
            serout(strbuff[1]) ;
            break ;
            default :
            print("Missing Return handler ", manRet[cmd], "\n") ;
            pause(5000) ;
            endswitch
            i := 0 ;
            endif
            else // 'auto' command
            cmd := -j ;
            if ((cmd > maxcmds) || (cmd < 0)) cmd := 0 ; // if out of range then invalidate
            stuff[i++] := j ;
            if (funcArgs[cmd] == 0xff) // invalid command nakit now
            serout(NAK) ;
            i := 0 ;
            else
            repeat
            if (funcArgs[cmd] == i) // everything ready, time to execute
            k := stuff[0](@&stuff[1], funcArgs[cmd]-1);
            serout(ACK) ;
            if (funcRet[cmd])
            serout(k >> 8) ;
            serout(k) ;
            endif
            i := 0 ;
            else
            if (com_Count() > 1) // outer loop
            j := serin() << 8 + serin() ;
            stuff[i++] := j ;
            endif
            endif
            until (i == 0) ;
            endif
            endif
            endif
            forever
            endfunc

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

            Comment


            • here file with program for sk-gen4-43d
              Attached Files

              Comment

              Working...
              X