на АААфоруме увидел старенькую программу и решил посмотреть на код. Программа вы глядит замысловато, но она печатает текст на экране. А почему бы мне самому не написать программу? Запустил BasinC и после некоторых правок получилось нечто:
10 CLS : LET a$="Text out"
20 FOR i=1 TO LEN (a$): FOR y=0 TO 7: LET c= CODE (a$(i))*8
30 LET w=PEEK (15360+c+y): FOR j=7 TO 0 STEP -1
35 LET b=w-2*INT (w/2)
40 IF b THEN FOR k=0 TO 3: PLOT (i-1)*32+j*4,175-y*4-k: DRAW 3,0: NEXT k
50 LET w=INT (w/2): NEXT j
60 NEXT y
70 NEXT i
20 FOR i=1 TO LEN (a$): FOR y=0 TO 7: LET c= CODE (a$(i))*8
30 LET w=PEEK (15360+c+y): FOR j=7 TO 0 STEP -1
35 LET b=w-2*INT (w/2)
40 IF b THEN FOR k=0 TO 3: PLOT (i-1)*32+j*4,175-y*4-k: DRAW 3,0: NEXT k
50 LET w=INT (w/2): NEXT j
60 NEXT y
70 NEXT i
В программе самый сложный участок - это тестирование битов каждого байта. Кажется, я писал код на Atari Basic в 1990-1991 году, вернусь к другой версии.
10 CLS : LET a$="Text out"
20 FOR i=1 TO LEN (a$): FOR y=0 TO 7: LET c= CODE (a$(i))*8
30 LET b=128: LET w=PEEK (15360+c+y): FOR j=0 TO 7
40 IF b<=w THEN FOR k=0 TO 3: PLOT (i-1)*32+j*4,175-y*4-k: DRAW 3,0: NEXT k: LET w=w-b
50 LET b=INT (b/2): NEXT j
60 NEXT y
70 NEXT i
20 FOR i=1 TO LEN (a$): FOR y=0 TO 7: LET c= CODE (a$(i))*8
30 LET b=128: LET w=PEEK (15360+c+y): FOR j=0 TO 7
40 IF b<=w THEN FOR k=0 TO 3: PLOT (i-1)*32+j*4,175-y*4-k: DRAW 3,0: NEXT k: LET w=w-b
50 LET b=INT (b/2): NEXT j
60 NEXT y
70 NEXT i
Программа заработала не сразу: в строке 40 поставил сравнение <, а должно быть <=. После завершения кода BasinC перестал читать текстовый файл .BAS, пропуская строку 40. Причину обнаружил не сразу: автозамена LET w=w-b на LET w=w-BIN. И можно попытаться ускорить программу, но уже не хочется. .TAP+.BAS.
Комментарии
Отправить комментарий