Author Topic: Trying to imitate TIS-100  (Read 7329 times)

0 Members and 1 Guest are viewing this topic.

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Re: Trying to imitate TIS-100
« Reply #30 on: September 10, 2020, 11:16:10 pm »
OK, i keep doing some nice advances: SUB textProccesor() works fine to input the instructions, but im having some troubles realizing how can i achieve the SUB IDE(). I did a horrible IF statement filled with ORs (very noob aproach), but didn't work. Any suggestions about this point? I can't figure out the logic for this, even with separeted IF statements



Code: QB64: [Select]
  1. '----------------------------------------------------------------------------------------------------------Û   SETUP   Û----------------------------------------------------------------------------------------------------------
  2.  
  3. CONST ScreenWidth = 1024 '                       ¿           ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  4. CONST ScreenHeight = 768 '                       ³           ³  1y,1x     ³
  5. '                                                ³ video     ³  TEXT       ³
  6. SCREEN _NEWIMAGE(ScreenWidth, ScreenHeight, 32) '³           ³    SCREEN   ³
  7. _FULLSCREEN '                                    ³           ³   48y,128x ³
  8. _MOUSEHIDE '                                     Ù           ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  9.  
  10. CONST WHITE = _RGB32(255, 255, 255) '            ¿
  11. CONST BLACK = _RGB32(0, 0, 0) '                  ³
  12. CONST MIDGRAY = _RGB32(127, 127, 127) '          ³
  13. CONST DARKGRAY = _RGB32(63, 63, 63) '            ³ colors
  14. CONST LIGHTGRAY = _RGB32(191, 191, 191) '        ³
  15. CONST RED = _RGB32(127, 0, 0) '                  ³
  16. CONST GREEN = _RGB32(0, 127, 0) '                ³
  17. CONST BLUE = _RGB32(0, 0, 127) '                 ³
  18. CONST YELLOW = _RGB32(255, 255, 0) '             Ù
  19.  
  20. '----------------------------------------------------------------------------------------------------------Û VARIABLES Û----------------------------------------------------------------------------------------------------------
  21.  
  22. DIM SHARED segmentState%(34) ' is segment NOMINAL(1) or ERROR(0)?   ¿
  23. DIM SHARED actualSegmentWorking% ' where are we?                    ³ SEGMENTS
  24. DIM SHARED segmentName$(34) ' names of the segments                 Ù
  25.  
  26. TYPE NODEv21 '                               ¿
  27.     y AS INTEGER '                           ³
  28.     x AS INTEGER '                           ³
  29.     acc AS INTEGER '                         ³
  30.     bak AS INTEGER '                         ³
  31.     mode AS STRING '                         ³
  32.     last AS STRING '                         ³ NODES
  33. END TYPE '                                   ³
  34. '                                            ³
  35. DIM SHARED nodeV21(34, 11) AS NODEv21 '      ³
  36. '          nodeV21(segment, node).type       ³
  37. '                                            ³
  38. DIM SHARED actualNodeWorking% ' where are we?³
  39. '                                            Ù
  40. DIM SHARED inst$(34, 11, 10) '               ¿
  41. '          inst$(segment, node, instruction) ³ INSTRUCTIONS
  42. DIM SHARED actualLineWorking% '              Ù
  43.  
  44. DIM SHARED IDEcomplains%
  45.  
  46. DIM SHARED menuHighlight% ' <----------------- MAIN MENU only
  47. DIM SHARED blink% ' <--------------------blinking CURSOR
  48. '---------------------------------------------------------------------------------------------------------Û PRE-PROGRAM Û----------------------------------------------------------------------------------------------------------
  49. FOR i% = 0 TO 33 '          ¿
  50.     segmentState%(i%) = 0 ' ³ SEGMENTS
  51. NEXT i% '                   Ù
  52. segmentState%(34) = -1 ' SANDBOX
  53.  
  54.  
  55. FOR i% = 0 TO 34 '                                  ¿
  56.     FOR j% = 0 TO 11 '                              ³
  57.         SELECT CASE j% '                            ³
  58.             CASE 0 TO 3: nodeV21(i%, j%).y = 4 '    ³
  59.             CASE 4 TO 7: nodeV21(i%, j%).y = 19 '   ³
  60.             CASE 8 TO 11: nodeV21(i%, j%).y = 34 '  ³
  61.         END SELECT '                                ³ NODES
  62.         SELECT CASE j% '                            ³ positions
  63.             CASE 0, 4, 8: nodeV21(i%, j%).x = 31 '  ³
  64.             CASE 1, 5, 9: nodeV21(i%, j%).x = 56 '  ³
  65.             CASE 2, 6, 10: nodeV21(i%, j%).x = 81 ' ³
  66.             CASE 3, 7, 11: nodeV21(i%, j%).x = 106
  67.         END SELECT '                                ³
  68.     NEXT j% '                                       ³
  69. NEXT i% '                                           Ù
  70.  
  71. FOR i% = 0 TO 34 '                                 ¿
  72.     FOR j% = 0 TO 11 '                             ³
  73.         nodeV21(i%, j%).acc = 0 '                  ³
  74.         nodeV21(i%, j%).bak = 0 '                  ³ NODES
  75.         nodeV21(i%, j%).mode = "IDLE" '            ³ registers
  76.         nodeV21(i%, j%).last = "NONE" '            ³
  77.     NEXT j% '                                      ³
  78. NEXT i% '                                          Ù
  79.  
  80. FOR i% = 0 TO 34 ' setear las instrucciones a null ¿
  81.     FOR j% = 0 TO 11 '                             ³
  82.         FOR k% = 0 TO 10 '                         ³
  83.             inst$(i%, j%, k%) = "" '               ³ INSTRUCTIONS
  84.         NEXT k% '                                  ³
  85.     NEXT j% '                                      ³
  86. NEXT i% '                                          Ù
  87.  
  88. 'infect                                                                ¿
  89. 'CLS _AUTODISPLAY                                                      ³
  90. 'systemCheck                                                           ³
  91. '                                                                      ³
  92. segmentName$(0) = "SYSTEM CLOCK" '                                     ³
  93. segmentName$(1) = "MULTIPLEXER" '                                      ³ INITIALIZE (at least for testing)
  94. segmentName$(34) = "SANDBOX" '                                         ³
  95. '                                                                      ³
  96. menuHighlight% = 0 '            segment 1 is index 0 on the array      ³
  97. actualSegmentWorking% = -1 '    main menu is -1                        ³
  98. actualNodeWorking% = -1 '       on main menu no node is being operated Ù
  99. actualLineWorking% = -1
  100. IDEcomplains% = 0
  101.  
  102. '---------------------------------------------------------------------------------------------------------Û   PROGRAM   Û----------------------------------------------------------------------------------------------------------
  103. mainMenu
  104.  
  105. '---------------------------------------------------------------------------------------------------------Û SUBROUTINES Û----------------------------------------------------------------------------------------------------------
  106. SUB mainMenu () ' draws main menu and instructions on the bottom
  107.  
  108.     DIM KeyPress$
  109.  
  110.     DO
  111.         DO
  112.             _LIMIT 20
  113.             CLS
  114.             SELECT CASE actualSegmentWorking%
  115.                 CASE -2: drawSegments: UsureToLeave
  116.                 CASE -1: drawSegments
  117.                 CASE 0: inSegment_1
  118.                 CASE 1: inSegment_2
  119.                 CASE 34: sandBox
  120.  
  121.             END SELECT
  122.  
  123.             KeyPress$ = INKEY$
  124.             _DISPLAY
  125.         LOOP UNTIL KeyPress$ <> ""
  126.  
  127.         IF actualSegmentWorking% = -1 THEN '                                                                                      ¿
  128.             IF KeyPress$ = CHR$(0) + CHR$(77) AND menuHighlight% <> 34 THEN menuHighlight% = menuHighlight% + 1 '  ¿             ³
  129.             IF KeyPress$ = CHR$(0) + CHR$(75) AND menuHighlight% <> 0 THEN menuHighlight% = menuHighlight% - 1 '   ³ ARROWS for  ³ only works
  130.             IF KeyPress$ = CHR$(0) + CHR$(80) AND menuHighlight% < 28 THEN menuHighlight% = menuHighlight% + 7 '   ³ navigation  ³ in the
  131.             IF KeyPress$ = CHR$(0) + CHR$(72) AND menuHighlight% > 6 THEN menuHighlight% = menuHighlight% - 7 '    Ù             ³ main menu
  132.             IF KeyPress$ = CHR$(13) THEN actualSegmentWorking% = menuHighlight% '                              ENTER to select    ³
  133.         END IF '                                                                                                                  Ù
  134.  
  135.         IF KeyPress$ = CHR$(0) + CHR$(68) THEN actualSegmentWorking% = -2 ' F10 to ask for leaving
  136.  
  137.         IF KeyPress$ = "y" AND actualSegmentWorking% = -2 THEN SYSTEM '                     Y ¿ YES  ¿
  138.         IF KeyPress$ = CHR$(13) AND actualSegmentWorking% = -2 THEN SYSTEM '            ENTER Ù      ³ when asked
  139.         '                                                                                            ³ to leave
  140.         IF KeyPress$ = "n" AND actualSegmentWorking% = -2 THEN actualSegmentWorking% = -1 ' N ¿ NO   ³
  141.         IF KeyPress$ = CHR$(27) THEN actualSegmentWorking% = -1 '-------------------------ESC Ù      Ù
  142.     LOOP
  143.  
  144. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  145. SUB UsureToLeave ()
  146.  
  147.     COLOR WHITE
  148.     drawASCIIbox 20, 46, 34, 2, " Are you sure you wan't to leave? ", 3
  149.     LOCATE 22, 47
  150.     PRINT "        <";
  151.     COLOR YELLOW
  152.     PRINT "Y";
  153.     COLOR WHITE
  154.     PRINT ">es         <";
  155.     COLOR YELLOW
  156.     PRINT "N";
  157.     COLOR WHITE
  158.     PRINT ">o        ";
  159.  
  160. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  161. SUB displayInstructions
  162.  
  163.     DIM i%
  164.     DIM ii%
  165.  
  166.     FOR i% = 0 TO 11
  167.         FOR ii% = 0 TO 10
  168.             LOCATE nodeV21(actualSegmentWorking%, i%).y + ii% + 1, nodeV21(actualSegmentWorking%, i%).x + 1
  169.             PRINT inst$(actualSegmentWorking%, i%, ii%)
  170.         NEXT ii%
  171.     NEXT i%
  172.  
  173. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  174. SUB IDE () ' checks the instructions spelling and warns if incorrect
  175.  
  176.     DIM i%
  177.     DIM j%
  178.     DIM analyzing$
  179.     DIM opCode$
  180.     DIM subComplaint%
  181.  
  182.     FOR i% = 0 TO 11 ' for all the nodes
  183.         FOR j% = 0 TO 10 ' for all the instructions
  184.  
  185.             analyzing$ = _TRIM$(inst$(actualSegmentWorking%, i%, j%))
  186.  
  187.             IF LEN(analyzing$) THEN ' cases that are not null
  188.                 opCode$ = LEFT$(analyzing$, 3)
  189.                 IF NOT opCode$ = "NOP"_
  190.                 OR NOT opCode$ = "MOV"_
  191.                 OR NOT opCode$ = "SWP"_
  192.                 OR NOT opCode$ = "SAV"_
  193.                 OR NOT opCode$ = "ADD"_
  194.                 OR NOT opCode$ = "SUB"_
  195.                 OR NOT opCode$ = "NEG"_
  196.                 OR NOT opCode$ = "JMP"_
  197.                 OR NOT opCode$ = "JEZ"_
  198.                 OR NOT opCode$ = "JNZ"_
  199.                 OR NOT opCode$ = "JGZ"_
  200.                 OR NOT opCode$ = "JLZ"_
  201.                 OR NOT opCode$ = "JRO" THEN
  202.                     IDEcomplains% = -1
  203.                 ELSE
  204.                     IDEcomplains% = 0
  205.                 END IF
  206.  
  207.                 IF IDEcomplains% THEN
  208.                     COLOR RED
  209.                     drawASCIIbox 46, 2, 27, 1, "      INVALID  OPCODE", 2
  210.                     COLOR MIDGRAY
  211.                 END IF
  212.  
  213.             END IF
  214.         NEXT j%
  215.     NEXT i%
  216.  
  217.     '       - INSTRUCTION SET QUICK REFERENCE -
  218.     '
  219.     'NOP                       NO OPERATION
  220.     'MOV <DST>, <SRC>       MOVE <SRC> TO <DST>
  221.     'SWP                    SWAP ACC AND BAK
  222.     'SAV                    SAVE ACC TO BAK
  223.     'ADD <SRC>              ADD <SRC> TO ACC
  224.     'SUB <SRC>              SUBSTRACT <SRC> FROM ACC
  225.     'NEG                    NEGATE ACC
  226.     'JMP <LABEL>            JUMP TO <LABEL>
  227.     'JEZ <LABEL>            JUMP TO <LABEL> IF ACC = 0
  228.     'JNZ <LABEL>            JUMP TO <LABEL> IF ACC != 0
  229.     'JGZ <LABEL>            JUMP TO <LABEL> IF ACC > 0
  230.     'JLZ <LABEL>            JUMP TO <LABEL> IF ACC < 0
  231.     'JRO <SRC>              JUMP TO RELATIVE OFFSET <SRC>
  232.  
  233.  
  234. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  235. SUB sandBox () ' subroutines for each segment has the name as the user sees it (practical purposes)
  236.  
  237.     DIM keyPress$
  238.  
  239.     actualNodeWorking% = 0
  240.     actualLineWorking% = 0
  241.     DO
  242.         _LIMIT 20
  243.         CLS
  244.         drawInsideSegment 1, 1
  245.         COLOR MIDGRAY
  246.         displayInstructions
  247.         textProccesor keyPress$
  248.         IDE
  249.         keyPress$ = UCASE$(INKEY$)
  250.         _DISPLAY
  251.     LOOP UNTIL keyPress$ = CHR$(27)
  252.     actualSegmentWorking% = -1
  253.     actualNodeWorking% = -1
  254.     actualLineWorking% = -1
  255.  
  256.  
  257. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  258. SUB inSegment_1 () ' subroutines for each segment has the name as the user sees it (practical purposes)
  259.  
  260.     DIM keyPress$
  261.  
  262.     actualNodeWorking% = 0
  263.     actualLineWorking% = 0
  264.     DO
  265.         _LIMIT 20
  266.         CLS
  267.         drawInsideSegment 1, 1
  268.         COLOR MIDGRAY
  269.         displayInstructions
  270.         textProccesor keyPress$
  271.         keyPress$ = UCASE$(INKEY$)
  272.         _DISPLAY
  273.     LOOP UNTIL keyPress$ = CHR$(27)
  274.     actualSegmentWorking% = -1
  275.     actualNodeWorking% = -1
  276.     actualLineWorking% = -1
  277.  
  278.  
  279. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  280. SUB inSegment_2 () ' subroutines for each segment has the name as the user sees it (practical purposes)
  281.  
  282.     DIM keyPress$
  283.  
  284.     DO
  285.         _LIMIT 20
  286.         CLS
  287.         drawInsideSegment 2, 1
  288.         keyPress$ = INKEY$
  289.         _DISPLAY
  290.     LOOP UNTIL keyPress$ = CHR$(27)
  291.     actualSegmentWorking% = -1
  292.     actualNodeWorking% = -1
  293.  
  294. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  295. SUB drawInsideSegment (ins%, outs%) ' when you get inside a segment you see this (pass in the number of inputs and outputs)
  296.  
  297.     DIM nY%
  298.     DIM nX%
  299.     DIM i%
  300.     DIM ii%
  301.     DIM j%
  302.     DIM k%
  303.  
  304.     IF ins% > 3 THEN EXIT SUB '  ¿                Ú REM if only 1 output, you can have up to 3 inputs
  305.     IF outs% < 1 THEN EXIT SUB ' ³ check if logic ³ for  2 outputs only 1 input... video thing really,
  306.     IF outs% > 2 THEN EXIT SUB ' Ù                À ELSE overprinting
  307.  
  308.     COLOR MIDGRAY '                                                      ¿
  309.     LOCATE 2, 9 '                                                        ³ title and
  310.     PRINT "- SEGMENT "; LTRIM$(STR$(actualSegmentWorking% + 1)); " -"; ' ³ segment name
  311.     LOCATE 3, 9 '                                                        ³                  °°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  312.     'PRINT "- "; segmentName$(actualSegmentWorking%); " -" ' ------------Ù---------------- °  UNCOMMENT AFTER TESTINGS °
  313.     '                                                                                       °°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  314.     drawASCIIbox 4, 2, 25, 6, "", 2 'draw the instructions box
  315.  
  316.     FOR nY% = 4 TO 34 STEP 15 '      ¿
  317.         FOR nX% = 31 TO 106 STEP 25 '³ draw nodes at
  318.             drawNodeV21 nY%, nX% '   ³ corresponding
  319.         NEXT nX% '                   ³ position
  320.     NEXT nY% '                       Ù
  321.  
  322.     IF NOT actualSegmentWorking% = 34 THEN ' <------ NOT the SANDBOX
  323.  
  324.         IF ins% > 0 THEN '                                                ¿
  325.             ii% = 2 '                               ¿                     ³
  326.             FOR i% = 1 TO ins% '                    ³ print as many       ³
  327.                 LOCATE 13, ii% + 1 '                ³ ASCII boxes as      ³
  328.                 PRINT "IN."; CHR$(96 + i%); '       ³ inputs needed and   ³
  329.                 drawASCIIbox 14, ii%, 4, 25, "", 2 '³ a title "IN" +      ³
  330.                 ii% = ii% + 5 '                     ³ a, b, c, d...       ³
  331.             NEXT i% '                               Ù                     ³
  332.             '                                                             ³
  333.             IF ins% > 1 THEN '             ¿                              ³
  334.                 ii% = 7 '                  ³                              ³ INPUTS
  335.                 FOR i% = 1 TO ins% - 1 '   ³ correct                      ³ table
  336.                     LOCATE 14, ii% '       ³ corners                      ³
  337.                     PRINT CHR$(203); ' Ë   ³ if                           ³
  338.                     LOCATE 40, ii% '       ³ needed                       ³
  339.                     PRINT CHR$(202); ' Ê   ³                              ³
  340.                     ii% = ii% + 5 '        ³                              ³
  341.                 NEXT i% '                  ³                              ³
  342.             END IF '                       Ù                              ³
  343.         END IF '                                                          Ù
  344.  
  345.         LOCATE 13, 21 '                     ¿            ¿
  346.         PRINT "OUT.x"; '                    ³ rightmost  ³
  347.         drawASCIIbox 14, 23, 4, 25, "", 2 ' ³            ³
  348.         drawASCIIbox 14, 18, 4, 25, "", 2 ' Ù            ³
  349.         '                                                ³
  350.         LOCATE 14, 23 '      ¿                           ³
  351.         PRINT CHR$(203); ' Ë ³ corner correction         ³
  352.         LOCATE 40, 23 '      ³ for rightmost             ³
  353.         PRINT CHR$(202); ' Ê Ù                           ³
  354.         '                                                ³
  355.         IF outs% = 2 THEN ' only if asked for            ³
  356.             LOCATE 13, 11 ' ¿                            ³
  357.             PRINT "OUT.x"; '³ "OUT.y" overprinted        ³
  358.             LOCATE 13, 21 ' ³ rightmost "OUT.x"          ³ OUTPUTS
  359.             PRINT "OUT.y"; 'Ù                            ³ table
  360.             drawASCIIbox 14, 13, 4, 25, "", 2 '          ³
  361.             drawASCIIbox 14, 8, 4, 25, "", 2 '           ³
  362.             '                                            ³
  363.             LOCATE 14, 18 '      ¿                       ³
  364.             PRINT CHR$(203); ' Ë ³                       ³
  365.             LOCATE 14, 13 '      ³ corner                ³
  366.             PRINT CHR$(203); ' Ë ³ correction            ³
  367.             LOCATE 40, 18 '      ³ for                   ³
  368.             PRINT CHR$(202); ' Ê ³ both                  ³
  369.             LOCATE 40, 13 '      ³                       ³
  370.             PRINT CHR$(202); ' Ê Ù                       ³
  371.         END IF '                                         Ù
  372.  
  373.     ELSE '                                          ¿
  374.         drawASCIIbox 12, 4, 7, 1, "CONSOLE", 2 '    ³
  375.         drawASCIIbox 14, 4, 7, 23, "", 2 '          ³
  376.         drawASCIIbox 38, 4, 7, 1, ">", 2 '          ³
  377.         LOCATE 14, 4 '                              ³
  378.         PRINT CHR$(204); ' Ì                        ³
  379.         LOCATE 14, 12 '                             ³ SANDBOX
  380.         PRINT CHR$(185); ' ¹                        ³ CONSOLE
  381.         LOCATE 38, 4 '                              ³
  382.         PRINT CHR$(204); ' Ì                        ³
  383.         LOCATE 38, 12 '                             ³
  384.         PRINT CHR$(185); ' ¹                        ³
  385.     END IF '                                        Ù
  386.  
  387.     FOR k% = 9 TO 39 STEP 15 ' Y        ¿            ¿
  388.         FOR j% = 53 TO 103 STEP 25 ' X  ³            ³
  389.             LOCATE k%, j% '             ³            ³
  390.             PRINT CHR$(26); '          ³ left/right ³
  391.             LOCATE k% + 2, j% + 1 '     ³ PORTS      ³
  392.             PRINT CHR$(27); '          ³            ³
  393.         NEXT j% '                       ³            ³ PORTS
  394.     NEXT k% '                           Ù            ³ between
  395.     '                                                ³ NODES
  396.     FOR k% = 18 TO 33 STEP 15 ' Y       ¿            ³
  397.         FOR j% = 38 TO 113 STEP 25 '    ³            ³
  398.             LOCATE k%, j% '             ³ up/down    ³
  399.             PRINT CHR$(24); '          ³ PORTS      ³
  400.             LOCATE k% - 1, j% + 4 '     ³            ³
  401.             PRINT CHR$(25); '          ³            ³
  402.         NEXT j% '                       ³            ³
  403.     NEXT k% '                           Ù            Ù
  404.  
  405.     IF ins% > 0 THEN LOCATE 3, 62: PRINT "IN.a"; CHR$(25); '   ¿
  406.     IF ins% > 1 THEN LOCATE 3, 87: PRINT "IN.b"; CHR$(25); '   ³
  407.     IF ins% > 2 THEN LOCATE 3, 112: PRINT "IN.c"; CHR$(25); '  ³
  408.     '                                                          ³
  409.     IF actualSegmentWorking% = 34 THEN '         ¿             ³
  410.         LOCATE 3, 61: PRINT "CNS.a"; CHR$(25); ' ³ SANDBOX     ³
  411.     END IF '                                     Ù             ³ IN/OUT
  412.     '                                                          ³ ports
  413.     LOCATE 47, 87 '                                            ³
  414.     IF NOT actualSegmentWorking% = 34 THEN '                   ³
  415.         PRINT "OUT.x"; CHR$(25); '                             ³
  416.     ELSE '                                                     ³
  417.         PRINT "CNS.x"; CHR$(25); ' <---------SANDBOX           ³
  418.     END IF '                                                   ³
  419.     IF outs% > 1 THEN LOCATE 47, 62: PRINT "OUT.y"; CHR$(25);
  420.  
  421.     drawASCIIbox 41, 4, 2, 1, (CHR$(16) + CHR$(16)), 1 '    ¿
  422.     drawASCIIbox 41, 14, 2, 1, (CHR$(124) + CHR$(16)), 1 '  ³
  423.     drawASCIIbox 41, 24, 2, 1, (CHR$(219) + CHR$(219)), 1 ' ³
  424.     LOCATE 44, 3 '                                          ³
  425.     PRINT "F5 Run"; '                                       ³
  426.     LOCATE 44, 12 '                                         ³ BUTTONS
  427.     PRINT "F6 Step"; '                                      ³
  428.     LOCATE 44, 22 '                                         ³
  429.     PRINT "F8 Stop"; '                                      ³
  430.     COLOR DARKGRAY '                                        ³
  431.     LOCATE 45, 9 '                                          ³
  432.     PRINT "ESC to go back"; '                               Ù
  433.  
  434. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  435. SUB textProccesor (key$)
  436.  
  437.     blink% = blink% - 16 '                                                                                                               ¿
  438.     IF blink% < 0 THEN blink% = 255 '                                                                                                    ³
  439.     COLOR _RGB32(blink%, blink%, blink%) '                                                                                               ³ CURSOR
  440.     LOCATE nodeV21(actualSegmentWorking%, actualNodeWorking%).y + actualLineWorking% + 1,_
  441.     nodeV21(actualSegmentWorking%, actualNodeWorking%).x + LEN(inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%)) + 1
  442.     PRINT CHR$(219) '                                                                                                                    Ù
  443.  
  444.     IF LEN(key$) THEN ' B+ avoided the null =)
  445.  
  446.         IF LEN(inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%)) < 13 THEN ' ¿ PRINTABLE
  447.             IF ASC(key$) > 31 AND ASC(key$) < 127 THEN '                                         ³ CHARACTERS
  448.                 inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%) =_
  449.                 inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%) + key$ '    ³ can't write more than
  450.             END IF '                                                                             ³ 13 characters
  451.         END IF '                                                                                 Ù
  452.  
  453.         IF ASC(key$) = 8 THEN '                                                                             ¿  BACKSPACE
  454.             inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%) =_
  455.             LEFT$(inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%),_
  456.             LEN(inst$(actualSegmentWorking%, actualNodeWorking%, actualLineWorking%)) - 1) '                ³
  457.         END IF '                                                                                            Ù
  458.  
  459.         IF ASC(key$) = 13 AND actualLineWorking% < 10 AND inst$(actualSegmentWorking%, actualNodeWorking%, 10) = "" THEN '¿
  460.             actualLineWorking% = actualLineWorking% + 1 '                                                                 ³ ENTER
  461.         END IF '                                                                                                          Ù
  462.  
  463.         IF ASC(key$) = 9 THEN '                               ¿
  464.             IF actualNodeWorking% < 11 THEN '                 ³
  465.                 actualNodeWorking% = actualNodeWorking% + 1 ' ³
  466.             ELSE '                                            ³ TAB
  467.                 actualNodeWorking% = 0 '                      ³
  468.             END IF '                                          ³
  469.             actualLineWorking% = 0 '                          ³
  470.         END IF '                                              Ù
  471.  
  472.     END IF ' B+ avoid null ; -) U2pro bro
  473.  
  474.     IF key$ = CHR$(0) + CHR$(72) AND actualLineWorking% > 0 THEN ' UP        ¿
  475.         actualLineWorking% = actualLineWorking% - 1 '                        ³
  476.     ELSEIF key$ = CHR$(0) + CHR$(80) AND actualLineWorking% < 10 THEN 'DOWN  ³ ARROWS
  477.         actualLineWorking% = actualLineWorking% + 1 '                        ³
  478.     END IF '                                                                 Ù
  479.  
  480.  
  481.  
  482. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  483. SUB infect () ' virus intro sketch... base under attack!
  484.  
  485.     DIM row%
  486.     DIM column%
  487.     DIM message1$
  488.     DIM message2$
  489.     DIM i%
  490.     DIM ii%
  491.     DIM loadingBar$
  492.  
  493.     row% = 20
  494.     column% = 52
  495.     message1$ = "I'm taking control..."
  496.     message2$ = "And you can't stop me"
  497.  
  498.     'sayHello
  499.     COLOR GREEN '                                    ¿ try to
  500.     PRINTslowly row% + 3, column% + 2, message1$, 1 '³ psychopatiate
  501.     PRINTslowly row% + 4, column% + 2, message2$, 1 'Ù the user
  502.     SLEEP 1
  503.  
  504.     'install
  505.     i% = 0
  506.     ii% = 0
  507.     loadingBar$ = CHR$(219)
  508.     DO
  509.         _LIMIT 500
  510.         i% = i% + 1
  511.         ii% = INT(i% / 100)
  512.  
  513.         COLOR MIDGRAY '                             ¿
  514.         LOCATE RND(1) * 47 + 1, RND(1) * 127 + 1 '  ³ random characthers on the back
  515.         PRINT CHR$(RND(1) * 222 + 32); '            Ù
  516.  
  517.         COLOR GREEN '    a virus is GREEN!       ¿
  518.         '                                         ³ draw box and
  519.         drawASCIIbox row%, column%, 23, 7, "", 2 '³ CLS inside it
  520.         '                                         ³ (don't erease back)
  521.         fakeCLS row% + 1, column% + 1, 22, 6 '    Ù
  522.  
  523.         IF ii% MOD 2 = 0 THEN '                   ¿
  524.             LOCATE row% + 1, column% + 2 '        ³ blink: title
  525.             PRINT "CV64 VIRUS V0.2  >:-["; '      ³ underline
  526.             LOCATE row% + 2, column% + 2 '        ³ message1$
  527.             PRINT STRING$(21, CHR$(223)); '       ³ and
  528.             '                                     ³ message2$
  529.             LOCATE row% + 3, column% + 2 '        ³
  530.             PRINT message1$; '                    ³
  531.             '                                     ³
  532.             LOCATE row% + 4, column% + 2 '        ³
  533.             PRINT message2$; '                    ³
  534.         END IF '                                  Ù
  535.  
  536.         LOCATE row% + 6, column% + 2 '                              ¿
  537.         IF ii% < 20 THEN PRINT "Overriding OS..."; '                ³
  538.         IF ii% < 40 AND ii% > 19 THEN PRINT "Accesing files..."; '  ³ loading messages
  539.         IF ii% < 60 AND ii% > 39 THEN PRINT "Infecting..."; '       ³
  540.         IF ii% < 80 AND ii% > 59 THEN PRINT "Replicating..."; '     ³
  541.         IF ii% < 100 AND ii% > 79 THEN PRINT "Ereasing nodes..."; ' ³
  542.         IF ii% = 100 THEN PRINT "Nodes killed "; '                 Ù
  543.  
  544.         ii$ = LTRIM$(STR$(ii%)) '                   ¿
  545.         LOCATE row% + 6, column% + 22 - LEN(ii$) '  ³ xx%
  546.         PRINT ii$ + "%"; '                          Ù
  547.  
  548.         IF i% MOD 500 = 0 THEN loadingBar$ = loadingBar$ + CHR$(219) ' ¿
  549.         LOCATE row% + 7, column% + 2 '                                 ³ loading bar
  550.         PRINT loadingBar$; '                                           Ù
  551.         _DISPLAY
  552.     LOOP UNTIL i% = 10000
  553.     SLEEP 2 '                                       infection complete XD
  554.  
  555.  
  556. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  557. SUB systemCheck () ' fake system check as excuse to go at main menu
  558.  
  559.     DIM i&
  560.  
  561.     COLOR LIGHTGRAY
  562.     PRINTslowly 2, 2, "Unexpected restart. Running system check...", 1
  563.     FOR i& = 0 TO 247483647 STEP 2048
  564.         _LIMIT 20000
  565.         LOCATE 4, 2
  566.         PRINT "CHECKSUM: ";: PRINT LTRIM$(STR$(i&));
  567.     NEXT i&
  568.     PRINT " OK"
  569.     PRINTslowly 6, 2, "Nodes have been corrupted...", 1
  570.     PRINTslowly 8, 2, "Reprogram them to recover access to OS...", 1
  571.     PRINTslowly 10, 2, "Please, don't shut down the equipment until reprogramming is over", 1
  572.     PRINTslowly 11, 2, "or all system data won't be able to recover...", 0
  573.     PRINTslowly 13, 2, "Starting debbuger", 1
  574.     SLEEP 2
  575.  
  576.  
  577. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  578. SUB drawSegments () ' draw the segment on the main menu
  579.  
  580.     DIM i%
  581.     DIM y%
  582.     DIM x%
  583.     DIM yy%
  584.     DIM xx%
  585.     DIM segmentNumber$
  586.  
  587.     i% = -1
  588.  
  589.     FOR y% = 3 TO 39 STEP 9
  590.         FOR x% = 4 TO 112 STEP 18
  591.  
  592.             i% = i% + 1 ' node index number, start -1 to make it 0 here for the array
  593.             '              we add another +1 later to make em look like start at 1
  594.             COLOR DARKGRAY '                                  ¿
  595.             FOR yy% = 2 TO 5 '                                ³
  596.                 FOR xx% = 1 TO 11 '                           ³ if node is broke
  597.                     LOCATE y% + yy%, x% + xx% '               ³ random characters
  598.                     IF NOT segmentState%(i%) THEN '           ³
  599.                         PRINT CHR$(RND(1) * 200 + 32); '      ³ if fixed by
  600.                     ELSE '                                    ³ user then
  601.                         PRINT LTRIM$(STR$(_ROUND(RND))); '    ³ plain 1's and 0's
  602.                     END IF '                                  ³
  603.                 NEXT xx% '                                    ³
  604.             NEXT yy% '                                        Ù
  605.  
  606.             IF i% > 8 THEN '                                  ¿ the shown number
  607.                 segmentNumber$ = LTRIM$(STR$(i% + 1)) '       ³ of the segment,
  608.             ELSE '                                            ³ avoiding the
  609.                 segmentNumber$ = " " + LTRIM$(STR$(i% + 1)) ' ³ spaces if
  610.             END IF '                                          Ù two digits
  611.  
  612.             IF menuHighlight% = i% THEN ' ¿
  613.                 COLOR WHITE '             ³ show WHITE if
  614.             ELSE '                        ³ selected, else
  615.                 COLOR MIDGRAY '           ³ is MIDGRAY
  616.             END IF '                      Ù
  617.  
  618.             drawASCIIbox y%, x%, 11, 5, " SEGMENT" + segmentNumber$, 1 ' draw the box
  619.  
  620.             LOCATE 40, 113: PRINT "  SANDBOX  "; ' <---------------SANDBOX CASE (overprinted over SEGMENT 35)
  621.  
  622.             LOCATE y% + 3, x% + 2 '     ¿
  623.             IF segmentState%(i%) THEN ' ³ accordingly to
  624.                 COLOR MIDGRAY, GREEN '  ³ segmentState%()
  625.                 PRINT "-NOMINAL-" '     ³ draw -NOMINAL-
  626.             ELSE '                      ³ or   - ERROR -
  627.                 COLOR BLACK, RED '      ³
  628.                 PRINT " -ERROR- " '     ³
  629.             END IF '                    Ù
  630.  
  631.             COLOR , BLACK '  don't conflictuate other stuff
  632.  
  633.         NEXT x%
  634.     NEXT y%
  635.  
  636.     drawMainInstructions
  637.  
  638.  
  639. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  640. SUB drawMainInstructions () ' draws a single blue line with some instruction on it at the bottom of the screen
  641.  
  642.     DIM ii%
  643.  
  644.     COLOR YELLOW, BLUE
  645.  
  646.     FOR ii% = 1 TO 127 '   ¿
  647.         LOCATE 48, ii% '   ³ blue background
  648.         PRINT " "; '       ³ line at bottom
  649.     NEXT ii% '             Ù
  650.  
  651.     LOCATE 48, 25 '             ¿
  652.     PRINT "F1 Help"; '          ³
  653.     LOCATE 48, 43 '             ³ options in
  654.     PRINT "ARROWS Navigate"; '  ³ the main menu
  655.     LOCATE 48, 71 '             ³
  656.     PRINT "ENTER Select"; '     ³
  657.     LOCATE 48, 92 '             ³
  658.     PRINT "F10 Save and Exit";
  659.  
  660.     COLOR , BLACK ' don't conflictuate with other things
  661.  
  662.  
  663. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  664. SUB drawNodeV21 (nodeY%, nodeX%)
  665.  
  666.     DIM i%
  667.  
  668.     FOR i% = 0 TO 11 '                                                                               ¿
  669.         COLOR DARKGRAY '                                                                             ³
  670.         LOCATE nodeV21(actualSegmentWorking%, i%).y + 2, nodeV21(actualSegmentWorking%, i%).x + 16 ' ³
  671.         PRINT nodeV21(actualSegmentWorking%, i%).acc; '                                              ³ show
  672.         LOCATE nodeV21(actualSegmentWorking%, i%).y + 5, nodeV21(actualSegmentWorking%, i%).x + 16 ' ³ information
  673.         PRINT nodeV21(actualSegmentWorking%, i%).bak; '                                              ³ of node
  674.         LOCATE nodeV21(actualSegmentWorking%, i%).y + 8, nodeV21(actualSegmentWorking%, i%).x + 16 ' ³ registers
  675.         PRINT nodeV21(actualSegmentWorking%, i%).mode; '                                             ³ (acc, bak,
  676.         LOCATE nodeV21(actualSegmentWorking%, i%).y + 11, nodeV21(actualSegmentWorking%, i%).x + 16 '³ mode, last)
  677.         PRINT nodeV21(actualSegmentWorking%, i%).last; '                                             ³
  678.     NEXT i% '                                                                                        Ù
  679.  
  680.     COLOR MIDGRAY
  681.  
  682.     drawASCIIbox nodeY%, nodeX%, 14, 11, "", 1 ' user input instructions box
  683.     drawASCIIbox nodeY%, nodeX% + 15, 4, 2, "ACC", 1 '     ¿
  684.     drawASCIIbox nodeY% + 3, nodeX% + 15, 4, 2, "BAK", 1 ' ³ box over
  685.     drawASCIIbox nodeY% + 6, nodeX% + 15, 4, 2, "MODE", 1 '³ box
  686.     drawASCIIbox nodeY% + 9, nodeX% + 15, 4, 2, "LAST", 1
  687.  
  688.     LOCATE nodeY%, nodeX% + 15 '            ¿
  689.     PRINT CHR$(194); ' Â                    ³
  690.     LOCATE nodeY% + 12, nodeX% + 15 '       ³
  691.     PRINT CHR$(193); ' Á                    ³
  692.     '                                       ³ then correct
  693.     FOR i% = 3 TO 9 STEP 3 '                ³ the corners
  694.         LOCATE nodeY% + i%, nodeX% + 15 '   ³ nedded
  695.         PRINT CHR$(195); ' Ã                ³
  696.     NEXT i% '                               ³ (the usual
  697.     '                                       ³ deciving)
  698.     FOR i% = 3 TO 9 STEP 3 '                ³
  699.         LOCATE nodeY% + i%, nodeX% + 20 '   ³
  700.         PRINT CHR$(180); ' ´                ³
  701.     NEXT i% '                               Ù
  702.  
  703.  
  704. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  705. SUB PRINTslowly (originY%, originX%, message$, preBlink%)
  706.  
  707.     DIM i%
  708.     DIM buildingMessage$
  709.  
  710.     IF originY% < 1 THEN EXIT SUB '     ¿ check if logic
  711.     IF originX% < 1 THEN EXIT SUB '     Ù
  712.  
  713.     IF preBlink% = 1 THEN PCthinking originY%, originX% ' wanna see some blinking before start writing?
  714.  
  715.     i% = 0 '                                                Ä¿
  716.     DO '                                                     ³
  717.         _DELAY .05 '                                         ³
  718.         i% = i% + 1 '                                        ³ print message$
  719.         buildingMessage$ = LEFT$(message$, i%) + CHR$(219) ' ³ character by character
  720.         LOCATE originY%, originX% '                          ³ and erease the cursor
  721.         PRINT buildingMessage$; '                            ³
  722.     LOOP UNTIL LEN(buildingMessage$) = LEN(message$) + 1 '  ÄÙ
  723.  
  724.     LOCATE CSRLIN, originX% + LEN(message$): PRINT " "; ' erease cursor
  725.  
  726.  
  727. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  728. SUB PCthinking (originY%, originX%)
  729.  
  730.     DIM i%
  731.  
  732.     IF originY% < 1 THEN EXIT SUB '     ¿ check if logic
  733.     IF originX% < 1 THEN EXIT SUB '     Ù
  734.  
  735.     FOR i% = 1 TO 11 '                  ¿
  736.         _LIMIT 5 '                      ³
  737.         LOCATE originY%, originX% '     ³
  738.         IF i% MOD 2 = 0 THEN '          ³ bliking cursor
  739.             PRINT CHR$(219); '          ³
  740.         ELSE '                          ³
  741.             PRINT " "; '                ³
  742.         END IF '                        ³
  743.     NEXT i% '                           Ù
  744.  
  745.  
  746. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  747. SUB fakeCLS (originY%, originX%, width%, height%)
  748.  
  749.     DIM y%
  750.     DIM x%
  751.  
  752.     IF originY% < 1 THEN EXIT SUB '               ¿
  753.     IF originX% < 1 THEN EXIT SUB '               ³ check if logic
  754.     IF width% < 1 THEN EXIT SUB '                 ³
  755.     IF height% < 1 THEN EXIT SUB '                Ù
  756.  
  757.     FOR x% = 0 TO width% '                        ¿
  758.         FOR y% = 0 TO height% '                   ³ print
  759.             LOCATE originY% + y%, originX% + x% ' ³ " " (space)
  760.             PRINT " "; '                          ³ repeatedly
  761.         NEXT y% '                                 ³
  762.     NEXT x% '                                     Ù
  763.  
  764.  
  765. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  766. SUB drawASCIIbox (originY%, originX%, width%, height%, message$, style%)
  767.  
  768.     DIM char%
  769.     DIM char1%
  770.     DIM char2%
  771.     DIM y%
  772.     DIM x%
  773.  
  774.     IF originY% < 1 OR originX% < 1 THEN EXIT SUB '     ÄÄÄ¿
  775.     IF width% < 1 OR height% < 1 THEN EXIT SUB '           ³ check if logic
  776.     IF style% < 1 OR style% > 3 THEN EXIT SUB '         ÄÄÄÙ
  777.  
  778.     LOCATE originY%, originX% '                         ÄÄÄ¿
  779.     IF style% = 1 THEN PRINT CHR$(218); 'Ú                 ³
  780.     IF style% = 2 THEN PRINT CHR$(201); ' É   up,left      ³
  781.     '                                                      ³
  782.     LOCATE originY% + height% + 1, originX% '              ³
  783.     IF style% = 1 THEN PRINT CHR$(192); ' À                ³
  784.     IF style% = 2 THEN PRINT CHR$(200); ' È  down, left    ³ corners
  785.     '                                                      ³
  786.     LOCATE originY%, originX% + width% + 1 '               ³
  787.     IF style% = 1 THEN PRINT CHR$(191); ' ¿                ³
  788.     IF style% = 2 THEN PRINT CHR$(187); ' » up, right      ³
  789.     '                                                      ³
  790.     LOCATE originY% + height% + 1, originX% + width% + 1 ' ³
  791.     IF style% = 1 THEN PRINT CHR$(217); ' Ù                ³
  792.     IF style% = 2 THEN PRINT CHR$(188); ' ¼ down, right ÄÄÄÙ
  793.  
  794.     IF style% = 1 THEN char% = 179 ' ³                  ÄÄÄ¿
  795.     IF style% = 2 THEN char% = 186 ' º  determinate style  ³
  796.     IF style% = 3 THEN char% = 219 ' Û                     ³
  797.     FOR y% = 1 TO height% '                                ³
  798.         LOCATE originY% + y%, originX% ' locate and print  ³ sides
  799.         PRINT CHR$(char%); '                               ³
  800.         LOCATE originY% + y%, originX% + width% + 1 '      ³
  801.         PRINT CHR$(char%); '                               ³
  802.     NEXT y% '                                           ÄÄÄÙ
  803.  
  804.     IF style% < 3 THEN ' styles 1 and 2                 ÄÄÄ¿
  805.         IF style% = 1 THEN char% = 196 ' Ä                 ³
  806.         IF style% = 2 THEN char% = 205 ' Í                 ³
  807.         FOR x% = 1 TO width% '                             ³
  808.             LOCATE originY%, originX% + x% '               ³
  809.             PRINT CHR$(char%); '                           ³
  810.             LOCATE originY% + height% + 1, originX% + x% ' ³
  811.             PRINT CHR$(char%); '                           ³ top &
  812.         NEXT x% '                                          ³ bottom
  813.     ELSE ' special case of style 3                         ³
  814.         char1% = 220 ' Ü                                   ³
  815.         char2% = 223 ' ß                                   ³
  816.         FOR x% = 0 TO width% + 1 '                         ³
  817.             LOCATE originY%, originX% + x% '               ³
  818.             PRINT CHR$(char1%); '                          ³
  819.             LOCATE originY% + height% + 1, originX% + x% ' ³
  820.             PRINT CHR$(char2%); '                          ³
  821.         NEXT x% '                                          ³
  822.     END IF '                                            ÄÄÄÙ
  823.  
  824.     LOCATE originY% + 1, originX% + 1 '                 ÄÄÄ¿ message
  825.     PRINT message$; '                                   ÄÄÄÙ
  826.  
  827.  
  828.  

textProccesor() could have some improvement, but for the moment it acomplish its work

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Trying to imitate TIS-100
« Reply #31 on: September 10, 2020, 11:38:24 pm »
String those 3 letter guys up with some char like * after each including the last.
 StrungUp3LetterGuys$ = "NOP*MOV*SWP*..... JRO*"

Match$ =  LEFT$(analyzing$, 3) + "*"

find = INSTR(StrungUp3LetterGuys$, Match$)

if find then no complaints else complain
« Last Edit: September 10, 2020, 11:41:25 pm by bplus »