Shaos wrote: В апреле 1993 после нескольких экспериментов я создал программу ZVUK-2,
которую можно найти в файле _zvuk2.tap. Программа позволяла записывать
в память компьютера звук и музыку с магнитофонного входа, воспроизводить
ее там же, а также совершать над сохраненным звуком некоторые действия,
как например блочное копирование и т.д. В программе использовался
русский шрифт, сделанный по рецепту из какой-то спектрумистской книжки
того времени, названия которой я уже не помню:
В файле _z_demo1.tap содержится кодовый блок, записанный этой
программой в те далекие времена, который показывает что можно
было cделать со звуком путем блочных перемещений. Отличительной
особенностью программы ZVUK-2 является то, что кодовый блок ответственный
за запись и воспроизведение звука (кстати набранный с помощью всё
того же hexloadera) был встроен непосредственно в бейсик-код.
Code: Select all
0 GO TO 9999: REM ZVUK-2 Ekaterinburg 8.4.1993 Shabarshin A. UPI NOT PIRATING!
80 DATA "b",0,126,64,124,66,66,124,0
81 DATA "g",0,126,64,64,64,64,64,0
82 DATA "d",0,28,36,36,36,36,126,66
83 DATA "j",0,65,73,62,73,73,65,0
84 DATA "i",0,66,70,74,82,98,66,0
85 DATA "l",0,30,34,34,34,34,98,0
86 DATA "p",0,126,66,66,66,66,66,0
87 DATA "o",0,66,66,36,24,16,96,0
88 DATA "c",0,68,68,68,68,68,126,2
89 DATA "h",0,66,66,66,126,2,2,0
90 DATA "n",0,65,73,73,73,73,127,0
91 DATA "m",0,65,73,73,73,73,127,1
92 DATA "e",0,60,66,30,2,66,60,0
93 DATA "u",0,76,82,114,82,82,76,0
94 DATA "a",0,62,66,66,62,34,66,0
95 DATA "s",24,66,70,74,82,98,66,0
96 DATA "r",0,64,64,124,66,66,124,0
97 DATA "t",0,192,64,124,66,66,124,0
98 DATA "f",0,127,73,73,73,127,8,0
99 DATA "q",0,66,66,114,74,74,114,0
100 GO SUB 8000
110 GO SUB 7000
120 INPUT I: GO TO 2000+I*500
2000 INPUT "CMEH\iT\r A\dPEC C\h\iT\qBAH\i\a ?";A$: IF A$="y" THEN INPUT ADL: GO TO 2020
2010 LET ADL=ADR
2020 PRINT AT 21,0;: LOAD ""CODE ADL: GO TO 100
2500 INPUT "A\dPEC:";ADR: GO TO 110
3000 INPUT "\d\l\iHA:";LEN: GO TO 110
3500 INPUT "3A\dEP\jKA:";TM: GO TO 110
4000 INPUT "KO\l-BO \pOBTOPEH\i\s:";QNT: PRINT AT 6,25;" "
4010 PRINT AT 6,25; FLASH 1;QNT: GO TO 110
4500 PRINT AT 21,0; FLASH 1;"3A\p\iC\r B \pAM\aT\r": RANDOMIZE USR 27000: GO TO 100
5000 PRINT AT 21,0; FLASH 1;"BOC\pPO\i3BE\dEH\iE \i3 \pAM\aT\i": FOR I=1 TO QNT: RANDOMIZE USR 27093: NEXT I: GO TO 100
5500 INPUT "K\o\dA \pEPEME\mAT\r ?";AEN: IF AEN<ADR+LEN AND AEN>=ADR THEN GO TO 5590
5510 IF AEN+LEN>AMAX THEN GO TO 5590
5511 LET A1=ADR: IF A1>AEN THEN LET A1=A1+LEN
5512 LET A2=LEN: LET A3=AEN: LET ADR=AMAX-LEN: LET LEN=ADR-AEN: LET AEN=AMAX: GO SUB 7030: POKE 27118,136: RANDOMIZE USR 27110: POKE 27118,176
5520 LET LEN=A2
5530 LET ADR=A1: LET AEN=A3: GO SUB 7000: RANDOMIZE USR 27110: GO TO 110
5590 PRINT AT 21,0; FLASH 1;"O\n\i\bKA": BEEP 1,1: GO SUB 8000: GO TO 120
6000 INPUT "CT\iPAT\r ?";A$: IF A$<>"y" THEN GO TO 110
6010 LET A1=ADR: LET A2=LEN: LET AEN=ADR: LET ADR=ADR+LEN: LET LEN=AMAX-ADR: GO SUB 7000: RANDOMIZE USR 27110
6020 LET ADR=AEN+LEN: LET LEN=AMAX-ADR: GO SUB 7000: RANDOMIZE USR 27121: LET ADR=A1: LET A2=LEN: GO SUB 7000: GO TO 110
6500 INPUT "\iM\a:";A$: IF A$="" THEN GO TO 110
6510 PRINT AT 21,0;: SAVE A$CODE ADR,LEN: GO TO 100
7000 IF ADR+LEN>AMAX THEN GO TO 5590
7003 LET A$="": FOR I=1 TO 5: LET A$=A$+CHR$ 8: NEXT I: LET B$=" ": IF ADR>=AMIN AND ADR<=AMAX THEN PRINT AT 3,26;B$;A$; FLASH 1;ADR: GO TO 7010
7005 GO TO 5590
7010 IF ADR+LEN<=AMAX THEN PRINT AT 4,15;B$;A$; FLASH 1;LEN: GO TO 7020
7015 GO TO 5590
7016 REM NOT STEP ix FOR To\Y FLASH RETURN NEW @\SCHR$ \^iWCHR$ \Viw#xATN CHR$ \RiyATN CHR$ \Ri<>~W NEW OPEN # RETURN zCHR$ LN iCHR$ POINT i#xATN CHR$ INKEY$iyATN CHR$ INKEY$i<> STEP INVERSE i STEP \Ri CLS <> STEP INVERSE i STEP INKEY$i CLS <>*{i GO SUB K\*i NEXT <> STEP INVERSE i GO SUB [}i GO SUB VAL CLS <> STEP INVERSE i6#xLEN CHR$ POKE i CLS <>2
7020 PRINT AT 5,20;B$;A$; FLASH 1;TM
7030 RANDOMIZE ADR: POKE 27003,PEEK 23670: POKE 27004,PEEK 23671
6971 RANDOMIZE AEN: POKE 27005,PEEK 23670: POKE 27006,PEEK 23671
7040 RANDOMIZE LEN: POKE 27007,PEEK 23670: POKE 27008,PEEK 23671
7050 POKE 27020,TM: POKE 27063,TM: RETURN
8000 CLS : PRINT AT 0,0; INK 4;"ZVUK-2"; INK 7;" \nA\bAP\n\iH A "; INK 6;" 2.04.1993"
8005 LET B$=" \b\lOKA "
8010 PRINT "________________________________"
8020 PRINT : PRINT "1.HA\hA\l\rH\q\s A\dPEC";B$;" "; FLASH 1;ADR
8030 PRINT "2.\d\l\iHA";B$;" "; FLASH 1;LEN; FLASH 0;" \bA\sT"
8040 PRINT "3.3A\dEP\jKA(1..40) "; FLASH 1;TM
8050 PRINT "4.KO\l\i\hECTBO \pOBTOPEH\i\s "; FLASH 1;QNT
8060 PRINT "5.3A\p\iC\r";B$
8070 PRINT "6.BOC\pPO\i3BE\dEH\iE";B$: PRINT "7.KO\p\iPOBAH\iE";B$;"C PA3\dB\i\jKO\s": PRINT "8.CT\iPAH\iE";B$: PRINT "9.B\q\gP\o3KA";B$;"HA MA\gH\iTO\fOH": PRINT "0.3A\gP\o3KA";B$;"C MA\gH\iTO\fOHA"
8080 PRINT : PRINT "M\iH\iMA\l\rH\q\s A\dPEC "; PAPER 6; INK 0;AMIN
8090 PRINT "MAKC\iMA\l\rH\q\s A\dPEC "; PAPER 6; INK 0;AMAX
8100 PRINT "MAKC\iMA\l\rHA\a \d\l\iHA "; PAPER 6; INK 0;LMAX
9000 RETURN
9010 INPUT INP: FOR I=INP TO 4E10: PRINT I,PEEK I;TAB 22;CHR$ (PEEK I*(PEEK I>=32)): NEXT I
9015 LET err=256*PEEK 23614+PEEK 23613: POKE err+1,0: BORDER 0: PAPER 0: INK 6: CLS : PRINT "ZVUK-2.EKATERINBURG"
9017 RESTORE 80: FOR z=1 TO 20: READ a$: FOR x=0 TO 7: READ y: POKE USR a$+x,y: NEXT x: NEXT z
9020 LET AMIN=28800: LET AMAX=65280: LET ADR=AMIN: LET LMAX=AMAX-AMIN: LET LEN=LMAX: LET AEN=40000: LET TM=20: LET QNT=1: RETURN
9999 GO SUB 9015: GO TO 100