You can output to terminal or tape.
I've encoded low case as well as upper.
Hope you like.
- Code: Select all
10 REM ***PUNCH MESSAGE INCLUDING LOWER CASE***
20 REM ***FETCH DATA***
21 PRINT "PLEASE WAIT - DATA LOADING"
22 PRINT
25 DIM L$(30)
30 DIM C(91,5)
40 FOR X=1 TO 91
50 FOR Y=1 TO 5
60 READ C(X,Y)
70 NEXT Y
80 NEXT X
100 REM ***INPUT STRING***
110 PRINT "MESSAGE ON PAPER TAPE PUNCH"
120 PRINT "INPUT CHARACTERS FOLLOWED BY RETURN"
130 INPUT A$
200 REM ***STRING EXTRACTION***
210 L=LEN(A$)
230 FOR B=1 TO L
240 L$(B)=MID$(A$,B,1)
250 NEXT B
300 REM ***OUTPUT SELECTION***
310 PRINT "SELECT ACTION"
320 PRINT "1 - DISPLAY MESSAGE ON TERMINAL"
330 PRINT "2 - PUNCH MESSAGE ON PAPER TAPE"
335 PRINT "3 - ENTER NEW MESSAGE"
340 PRINT "4 - EXIT"
350 INPUT A
360 IF A<1 OR A>4 THEN GOTO 350
370 IF A=1 THEN GOTO 500
380 IF A=2 THEN GOTO 400
385 IF A=3 THEN GOTO 100
390 END
400 REM ***PUNCH TO TAPE***
410 FOR X=1 TO L
415 P=(ASC(L$(X)))-31
420 FOR Y=1 TO 5
430 WAIT 6,128,255
440 OUT 7,C(P,Y)
450 NEXT Y
451 WAIT 6,128,255
452 OUT 7,0
460 NEXT X
470 GOTO 300
500 REM ***DISPLAY ON TERMINAL***
510 FOR X=1 TO L
520 P=(ASC(L$(X)))-31
530 FOR Y=1 TO 5
540 D=256
550 A=C(P,Y)
555 FOR M=0 TO 6
560 D=D/2
570 IF INT(A/D)=1 THEN PRINT "*";
575 IF INT(A/D)<>1 THEN PRINT " ";
580 A=A-(INT(A/D)*D)
585 NEXT M
590 IF INT(A)=1 THEN PRINT "*";
592 IF INT(A)<>1 THEN PRINT " ";
595 PRINT
600 NEXT Y
610 PRINT
620 NEXT X
630 GOTO 300
790 REM ***DATA***
800 DATA 0,0,0,0,0,0,0,190,0,0,0,14,0,14,0,40,254,40,254,40
840 DATA 72,84,254,84,32,78,42,214,168,228,108,146,170,68,160
870 DATA 0,0,22,14,0,0,56,68,130,0,0,130,68,56,0
900 DATA 84,56,254,56,84,16,16,254,16,16,0,176,112,0,0
930 DATA 16,16,16,16,16,0,192,192,0,0,64,32,16,8,4
960 DATA 124,162,146,138,124,0,132,254,128,0,228,146,146,146,140
990 DATA 68,130,146,146,108,48,40,36,254,32,78,138,138,138,114
1020 DATA 120,148,146,146,96,2,226,18,10,6,108,146,146,146,108
1050 DATA 12,146,146,82,60,0,108,108,0,0,0,182,118,0,0
1080 DATA 16,40,68,130,0,40,40,40,40,40,0,130,68,40,16
1110 DATA 4,2,162,18,12,100,146,242,130,124,248,36,34,36,248
1140 DATA 130,254,146,146,108,124,130,130,130,68,130,254,130,130,124
1170 DATA 254,146,146,130,130,254,18,18,2,2,124,130,146,146,116
1200 DATA 254,16,16,16,254,0,130,254,130,0,64,128,130,126,2
1230 DATA 254,16,40,68,130,254,128,128,128,128,254,4,24,4,254
1260 DATA 254,8,16,32,254,124,130,130,130,124,254,18,18,18,12
1290 DATA 124,130,162,66,188,254,18,50,82,140,76,146,146,146,100
1320 DATA 2,2,254,2,2,126,128,128,128,126,14,48,192,48,14
1350 DATA 254,64,48,64,254,198,40,16,40,198,6,8,240,8,6
1380 DATA 194,162,146,138,134,0,254,130,130,0,4,8,16,32,64
1390 DATA 0,130,130,254,0,8,4,2,4,8,128,128,128,128,128
1400 DATA 0,0,7,11,0,64,168,168,168,112,254,80,136,136,112
1410 DATA 112,136,136,136,136,112,136,136,80,254,112,168,168,168,48
1420 DATA 16,252,18,18,4,16,168,168,168,120,254,16,8,8,240
1430 DATA 0,136,250,128,0,64,128,136,122,8,130,254,32,80,136
1440 DATA 0,130,254,128,0,248,8,240,8,240,248,16,8,8,240
1450 DATA 112,136,136,136,112,248,40,40,40,16,16,40,40,40,248
1460 DATA 248,16,8,8,16,144,168,168,168,72,8,8,126,136,136
1470 DATA 120,128,128,64,248,56,64,128,64,56,120,128,96,128,120
1480 DATA 136,80,32,80,136,24,160,160,160,120,136,200,168,152,136