Execute Brain****: Difference between revisions
Content added Content deleted
(→{{header|BASIC}}: Add TRS-80 BASIC) |
(→{{header|Commodore BASIC}}: Add implementation) |
||
Line 2,442: | Line 2,442: | ||
{{out}} |
{{out}} |
||
<pre>Hello World!</pre> |
<pre>Hello World!</pre> |
||
==={{header|Commodore BASIC}}=== |
|||
{{trans|TRS-80 BASIC}} |
|||
Changed hello-world text to all-caps to avoid re-coding it all for PETSCII. |
|||
<syntaxhighlight lang="gwbasic>100 REM BRAINF*CK FOR COMMODORE BASIC |
|||
110 DB=0:REM SET TO 1 FOR DEBUGGING |
|||
120 P$="" |
|||
130 READ C$ |
|||
140 P$=P$+C$ |
|||
150 IF LEN(C$)<>0 THEN 130 |
|||
160 REM PAIR UP BRACKETS INTO B% |
|||
170 DIM B%(LEN(P$)) |
|||
180 REM TRACK OPEN BRACKETS IN O% |
|||
190 DIM O%(INT(LEN(P$)/2)):O=0 |
|||
200 FOR I=1 TO LEN(P$) |
|||
210 : I$=MID$(P$,I,1) |
|||
220 : IF I$="[" THEN O%(O)=I:O=O+1 |
|||
230 : IF I$<>"]" THEN 270 |
|||
240 : IF O=0 THEN PRINT "UNMATCHED BRACKET AT"I". ABORTING.":END |
|||
250 : O=O-1:M=O%(O) |
|||
260 : B%(I)=M:B%(M)=I |
|||
270 NEXT I |
|||
280 IF O THEN PRINT "UNMATCHED BRACKETS AT EOF. ABORTING.":END |
|||
290 REM SET MS TO NUMBER OF MEMORY CELLS NEEDED |
|||
300 REM THE BF SPEC REQUIRES 30000, WHICH DOES WORK ON A SYSTEM WITH 48K RAM. |
|||
310 REM THE DEMO HELLO-WORLD PROGRAM ONLY REQUIRES 4 CELLS. |
|||
320 MS=4:DIM M%(MS/2-1):MP=0 |
|||
330 REM FUNCTION TO READ BYTE AT CELL N |
|||
340 DEF FNMP(N)=INT(M%(INT(N/2)) / (1+255*(N AND 1))) AND 255 |
|||
350 FOR I=1 TO LEN(P$) |
|||
360 : IF MP<0 OR MP>=MS THEN PRINT "ERROR: MP OUT OF RANGE AT"I:END |
|||
370 : IF DB THEN PRINT "IP:"I"("I$") MP: "MP"("FNMP(MP)")" |
|||
380 : I$=MID$(P$,I,1) |
|||
390 : IF I$<>"[" THEN 420 |
|||
400 : IF FNMP(MP)=0 THEN I=B%(I) |
|||
410 : GOTO 530 |
|||
420 : IF I$<>"]" THEN 450 |
|||
430 : IF FNMP(MP) THEN I=B%(I) |
|||
440 : GOTO 530 |
|||
450 : IF I$="<" THEN MP=MP-1:GOTO 530 |
|||
460 : IF I$=">" THEN MP=MP+1:GOTO 530 |
|||
470 : IF I$="-" THEN V=FNMP(MP)-1:GOTO 560 |
|||
480 : IF I$="+" THEN V=FNMP(MP)+1:GOTO 560 |
|||
490 : IF I$="." THEN PRINTCHR$(FNMP(MP));:GOTO 530 |
|||
500 : IF I$<>"," THEN 530 |
|||
510 : GET K$:IF K$="" THEN 510 |
|||
520 : V=ASC(K$):GOTO 560 |
|||
530 NEXT I |
|||
540 END |
|||
550 REM UPDATE CELL AT MP WITH VALUE IN V |
|||
560 M=INT(MP/2):O=M%(M):V=V AND 255 |
|||
570 N0=(O AND -256)+V |
|||
580 N1=(V*256+(O AND 255)) |
|||
590 M%(M) = (MP AND 1)*N1 - ((MP AND 1)=0)*N0 |
|||
600 GOTO 530 |
|||
610 REM HELLO, WORLD PROGRAM |
|||
620 DATA "+++++++++[>++++++++<-]>." |
|||
630 DATA "---." |
|||
640 DATA "+++++++..+++." |
|||
650 DATA ">>++++[<+++++++++++>-]<." |
|||
660 DATA ">++++[<--->-]<." |
|||
670 DATA "<++++++++." |
|||
680 DATA "--------." |
|||
690 DATA "+++." |
|||
700 DATA "------." |
|||
710 DATA "--------." |
|||
720 DATA ">>[++][<+++++++>-]<+." |
|||
730 DATA ">++++++++++." |
|||
740 DATA ""</syntaxhighlight> |
|||
{{Out}} |
|||
<pre>HELLO, WORLD!</pre> |
|||
==={{header|FreeBASIC}}=== |
==={{header|FreeBASIC}}=== |