Старье от Шаоса

Старый спектрумистский форум

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Старье от Шаоса

Post by Shaos »

Решил опубликовать несколько своих первых программ для спектрума,
которые я написал МНОГО лет назад (в 1992-1993) и оцифровал в 2001 году:

http://www.nedopc.org/nedopc/zx/soft-zx/zx-shaos.zip (24K)

Тогда у меня был спектрум-совместимый компьютер Урал-48 и все
тогдашние мои программы были ленточными. Одна из первых программ,
которые я набрал и потом слегка модифицировал - это бейсик-программа
для ввода машинных кодов из мини-книжки от Солона под незатейливым
названием "Ассемблер для ПК ZX SPECTRUM" (которую я кстати взял с
собой в США). Прогрмма находится в архиве под названием _hexloa2.tap:

Image

Затем все кодовые вставки я писал именно на ней. В ноябре 1992 года
я закончил программу LIFE-2 - в составе файла _life_2.tap можно найти
бейсиковскую часть, кодовую часть, а также музыкальное сопровождение,
созданное мною в музыкальном редакторе WHAM! Программа реализует
клеточную игру ЖИЗНЬ - управлять цифрами (движение "пера" - 5,6,7,8;
поставить точку - 9; стереть - 0; запустить жизнь - 1):

Image

В апреле 1993 после нескольких экспериментов я создал программу ZVUK-2,
которую можно найти в файле _zvuk2.tap. Программа позволяла записывать
в память компьютера звук и музыку с магнитофонного входа, воспроизводить
ее там же, а также совершать над сохраненным звуком некоторые действия,
как например блочное копирование и т.д. В программе использовался
русский шрифт, сделанный по рецепту из какой-то спектрумистской книжки
того времени, названия которой я уже не помню:

Image

В файле _z_demo1.tap содержится кодовый блок, записанный этой
программой в те далекие времена, который показывает что можно
было cделать со звуком путем блочных перемещений. Отличительной
особенностью программы ZVUK-2 является то, что кодовый блок ответственный
за запись и воспроизведение звука (кстати набранный с помощью всё
того же hexloadera) был встроен непосредственно в бейсик-код.
Last edited by Shaos on 18 Jun 2013 18:12, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
Shiru Otaku
Retired
Posts: 490
Joined: 16 Mar 2002 17:00

Post by Shiru Otaku »

Забавно - одним из первых моих шагов в программировании на низком уровне тоже была запись/воспроизведение звука на Спеке. Причём книжки по ассму Z80 у меня не было, а была книжка по РК86 (МРБ-шная), там было описание ВМ80. По Спеку была только Va-Print'овская книжка по бейсику (10 ошибок на каждой странице). И я в таких условиях разбирался, писал коды команд в бейсике POKE'ами. Даже заработало, хоть и не сразу. Только вот не сохранилось, вообще почти ничего с кассетных времён не сохранилось (как и самих кассет)...

Это было лет 10 назад, где-то 96 год. Офигеть, сколько времени прошло.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Хехе... я тоже и на Спеке и на Орионе прикалывался с однобитной записью звука.... Потом на Орионе я поставил 8бит ЦАП (на сопрушках лесенкой R-2R) и АЦП (на ЦАП R-2R и ИР17). Но это уже другая история...
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shiru Otaku wrote:Причём книжки по ассму Z80 у меня не было, а была книжка по РК86 (МРБ-шная), там было описание ВМ80.
Вообще-то я в те времена тоже знал только 8080 коды :) Потому как в 1991 я долго и упорно разбирался с "ПК-01 Львов" (жаль что ничего из этого не сохранилось) - поэтому все что я набирал в кодах на спектруме через hexload было до этого аккуратно написано в тетрадочке мнемоникой i8080 и вручную сассемблировано ;)

Image

Из чисто зилоговских команд я пробовал только LDIR - на большее меня не хватило...
Last edited by Shaos on 29 Jan 2006 09:19, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Старье от Шаоса

Post by Shaos »

Shaos wrote:музыкальное сопровождение, созданное мною в музыкальном редакторе WHAM!
Эта музычка из LIFE-2 была одним из первых моих экспериментов с WHAM! Music Box в конце 1992. От нее остался только скомпилированный бинaрник для встраивания в программное обеспечение. Вот как это звучит в MP3: wham-life.mp3 (357K).

Из моего WHAM-творчества в формате музыки для WHAM! Music Box удалось восстановить 3 музычки, написанные летом 1993 года - вот они: wham-shaos.zip (589 bytes). Если кому хочется послушать как оно звучит, но лень качать и разбираться с WHAM - вот MP3 варианты этих моих ранних музыкальных творений ;)
- wham-m0.mp3 (385K)
- wham-m1.mp3 (519K)
- wham-m2.mp3 (711K)

Примечательна судьба мелодии под кодовым названием M2 - я ее восстановил с кассеты весной 1997 года и перенабрал в музыкальном редкаторе Scream Tracker на PC. Вот MP3 того что из этого получилось: shaos-m2.mp3 (718K). Той же весной 1997 года я обработал эту мелодию и получил вот эту композицию: shaos-m2s.mp3 (2.7M). На мой дилетантский вкус - вполне удобоваримо получилось (если у кого-то из читающих вдруг случайно окажется музыкальное образование - большая просьба сильно не пинать, так как у меня такого образования нету)
:dj:
Last edited by Shaos on 28 Jan 2006 17:55, edited 9 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Старье от Шаоса

Post by Shaos »

Shaos wrote: В файле _z_demo1.tap содержится кодовый блок, записанный этой
программой в те далекие времена, который показывает что можно
было cделать со звуком путем блочных перемещений.
Эти 36 секунд однобитного звука влезли в 36 Кбайтный кодовый блок (т.е. это было равносильно скорости 8 килобит в секудну - неплохо ; ).

Если возникли трудности с воспроизведением, а послушать как записывал и воспроизводил ZVUK-2 хочется - вот MP3 (спасибо glukalka и mp3lame):
http://www.nedopc.org/nedopc/zx/soft-zx/zvuk-demo1.mp3 (155K).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Еще в продолжении темы - вот простейшая бейсик программа, которую я написал за 15 минут чтобы обеспечить цветовое сопровождение студенческой вечеринки в 1993 году: 1993show.zip (476 bytes):

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вторая волна моего увлечения спектрумом пришлась на 1996-1997 годы - когда у меня дома еще не было PC, а чего-то программировать сильно хотелось. Вот небольшой плод моего творчества того времени - говорящая программа для изучения английского языка: 1996engl.zip (3.6K):

Image

Программа написана на бейсике c русификатором (таким же как и в ZVUK-2) и в ней использовался кодовый блок - говорилка размером меньше килобайта, выдранная мной еще в 1993 году из какой-то восточно-европейской говорящей программы. Английские слова в исполнении этой говорилки звучали вот так: english.mp3 (135K).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:
Shaos wrote: В файле _z_demo1.tap содержится кодовый блок, записанный этой
программой в те далекие времена, который показывает что можно
было cделать со звуком путем блочных перемещений.
Эти 36 секунд однобитного звука влезли в 36 Кбайтный кодовый блок (т.е. это было равносильно скорости 8 килобит в секудну - неплохо ; ).

Если возникли трудности с воспроизведением, а послушать как записывал и воспроизводил ZVUK-2 хочется - вот MP3 (спасибо glukalka и mp3lame):
http://www.nedopc.org/nedopc/zx/soft-zx/zvuk-demo1.mp3 (155K).
Я тоже прикалывался над такой техникой "упаковки" - выявлял похожие блоки мелодии. Потом из них восстанавливал мелодию.

PS А куда мой пост с книжкой делся? :-?
Last edited by HardWareMan on 29 Jan 2006 09:21, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

HardWareMan wrote: Я тоже прикалывался над такой техникой "упаковки" - выявлял похожие блоки мелодии. Потом из них восстанавливал мелодию.
А мои эксперименты со сравнением кусков звука, а также надо попыткой вычислять частоту основной ноты (все на спектруме естественно) ни к чему не привели...
HardWareMan wrote:А куда мой пост с книжкой делся? :-?
Ушел в соседний топик ;)

viewtopic.php?t=8235

P.S. По поводу книжек - туда давайте писать
Last edited by Shaos on 29 Jan 2006 09:24, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:
HardWareMan wrote: Я тоже прикалывался над такой техникой "упаковки" - выявлял похожие блоки мелодии. Потом из них восстанавливал мелодию.
А мои эксперименты со сравнением кусков звука, а также надо попыткой вычислять частоту основной ноты (все на спектруме естественно) ни к чему не привели...
Да ты че? Какой анализ аналогового сигнала на Z80 (у меня на ВМ80)? Все в ручную: слушалось, отмечалось. Кусками записывалось, компилилось и все. За день реально было создать музу. Иногда удавалось до 4х минут впихнуть в 40кБ. При этом так сильно сжималась в основном только попса. =))) Ну, и иногда компьютерные/инструментальные мелодии.
+++ Для тех, кто соскучился по однобитовому звуку +++
Вот, пример 1 битной записи звука:
http://vis-image.narod.ru/lbitsnd/1bit.mp3 (470Кб)
Добавляем всего один бит, и уже лучше:
http://vis-image.narod.ru/lbitsnd/2bit.mp3 (470Кб)
Три бита звучан совсем неплохо:
http://vis-image.narod.ru/lbitsnd/3bit.mp3 (470Кб)
Ну а четыре бита - уже роскошь, но не для 8ми битных компов:
http://vis-image.narod.ru/lbitsnd/4bit.mp3 (470Кб)
Хотя, в наших АОНах "Русь" все на 4х битах... =)
Shiru Otaku
Retired
Posts: 490
Joined: 16 Mar 2002 17:00

Post by Shiru Otaku »

HardWareMan wrote:Ну а четыре бита - уже роскошь, но не для 8ми битных компов
Это ещё с чего-бы?;) Все оцифровки в оригинальных играх для 128к спека были именно в 4-х битах. И Digital Studio с 4-битными сэмплами работает. Про остальные трекеры, работающие с 8-ми битными сэмплами я и вообще молчу:)

Про 16-цветное почти полноэкранное видео одновременно с 8-битным звуком на ~16кгц (на ATM2, Z80@7mhz) здесь наверное лучше и не упоминать:)
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shiru Otaku wrote:Про 16-цветное почти полноэкранное видео одновременно с 8-битным звуком на ~16кгц (на ATM2, Z80@7mhz) здесь наверное лучше и не упоминать:)
Маньяки :no:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Старье от Шаоса

Post by Shaos »

Решил восстановить тексты программ из TAP-файлов с помощью утилиты listbasic из fuse-utils
Shaos wrote:Одна из первых программ,
которые я набрал и потом слегка модифицировал - это бейсик-программа
для ввода машинных кодов из мини-книжки от Солона под незатейливым
названием "Ассемблер для ПК ZX SPECTRUM" (которую я кстати взял с
собой в США). Прогрмма находится в архиве под названием _hexloa2.tap:

Image

Code: Select all

  100 REM MONITOR PROGRAM
  110 DIM z(4): LET z(1)=4096: LET z(2)=256: LET z(3)=16: LET z(4)=1
  120 LET ze=0: LET on=1: LET tw=2
  121 LET qk=256: LET mr=140
  122 LET wl=340
  123 LET l$="6C00"
  125 LET n$=l$: GO SUB 3000: LET lm=d
  130 GO SUB 2000
  140 CLS : PAPER 3: INK 7: PRINT "HEXLOAD-2 1982,1992  Shabarshin "
  145 PAPER 7: INK 0: PRINT "Start of,machin code area=";l$
  150 PRINT "MENU": PRINT : PRINT "     Write machin code.........1"
  160 PRINT : PRINT "     Save  machin code.........2"
  170 PRINT : PRINT "     Load  machin code.........3"
  180 PRINT : PRINT "     List  machin code.........4"
  190 PRINT : PRINT "     Move  machin code.........5"
  195 PRINT : PRINT "     Work  of  program.........6"
  200 PRINT : PRINT "Please press appropriate key. "
  210 LET g$=INKEY$
  220 IF g$=" " THEN STOP 
  230 IF g$="" OR g$<"1" OR g$>"6" THEN GO TO 210
  240 CLS : PRINT "Start of machin code area=";l$
  250 GO TO 300*VAL g$
  300 REM ***WRITE***
  310 INPUT "WRITE to address:";n$: GO SUB 3000
  320 IF d>mm OR d<lm THEN BEEP 1,10: GO TO 310
  325 PRINT : PRINT "to RETURN to!MENU ENTER""m"""
  330 INK 2: PRINT "WRITE address:";n$
  331 PAPER 6: PRINT "0 1 2 3 4 5 6 7 8 9 A B C D E F ": PAPER 7: INK 0
  335 LET c=32*(d/16-INT (d/16)): PRINT AT 5,c;
  340 LET a$=""
  350 IF a$="" THEN INPUT "ENTER hex. CODE: ";a$
  360 IF a$(on)=" " OR a$(on)="m" THEN GO TO mr
  370 IF LEN a$/tw<>INT (LEN a$/tw) THEN BEEP 1,10: GO TO wl
  380 LET c=ze
  390 FOR f=16 TO on STEP -15
  400 LET a=CODE a$((f=16)+tw*(f=on))
  410 IF a<48 OR a>102 OR (a>57 AND a<65) OR (a>70 AND a<97) THEN BEEP 1,10: GO TO wl
  420 LET c=c+f*((a<58)*(a-48)+(a>64 AND a<71)*(a-55)+(a>96)*(a-87))
  430 NEXT f: POKE d,c: LET d=d+on
  440 PAPER 7-2*(d/2-INT (d/2)): PRINT a$;: PAPER 7
  450 LET a$=a$(3 TO )
  460 IF d=UDG THEN PRINT "WARNING:YOU ARE NOW IN the USER GRAPHICS AREA!": BEEP 1,0: GO TO wl
  470 IF d=UDG-20 THEN PRINT "WARNING:YOU ARE NOW IN ROUTINES MEMORY AREA!": BEEP 1,0: GO TO wl
  480 GO TO wl+on
  600 REM ***SAVE***
  610 INPUT "SAVE m/C. FROM ADDRESS: ",n$: GO SUB 3000: LET a=d
  620 INPUT "NUMBER OF BYTES to be SAVED: ",n
  630 INPUT "NAME OF the ROUTINE: ";a$
  640 SAVE a$CODE a,n
  650 PRINT "DO YOU WISH to VERITY?"
  660 INPUT v$
  670 IF v$<>"y" THEN GO TO mr
  680 PRINT "REWIND tape AND PRESS""PLAY""."
  690 VERIFY a$CODE a,n
  700 PRINT "O.K. ": PAUSE 50
  710 GO TO mr
  900 REM ***LOAD***
  910 INPUT "LOAD m.C. TO ADDRESS STARTING: ";n$: GO SUB 3000: LET a=d
  920 IF a>mm OR a<lm THEN GO TO 910
  930 INPUT "Program NAME: ";a$
  940 PRINT "Press ""PLAY"" ON tape. "
  950 LOAD a$CODE : GO TO mr
 1200 REM ***LIST***
 1210 LET a$="0123456789ABCDEF"
 1220 INPUT "LIST ADDRESS: ";n$: GO SUB 3000
 1230 PRINT "Press ""m"" to RETURN to MENU. "
 1240 LET c=PEEK d: LET a=INT (c/16): LET b=c-16*a
 1241 LET a1=INT (d/4096): LET a2=INT ((d-a1*4096)/356)
 1242 LET a3=INT ((d-a1*4096-a2*256)/16): LET a4=d-a1*4096-a2*256-a3*16
 1245 LET q$="": LET co=PEEK d: IF co>31 AND co<165 THEN LET q$=CHR$ co
 1250 PRINT a$(a1+on);a$(a2+on);a$(a3+on);a$(a4+on);"  ";a$(a+on);a$(b+on);"   ";q$
 1260 LET d=d+on
 1270 IF INKEY$="m" THEN GO TO mr
 1280 GO TO 1240
 1500 REM ***MOVE***
 1510 INPUT "MOVE from memory: ";n$: GO SUB 3000: LET fm=d
 1520 INPUT "MOVE until memory: ";n$: GO SUB 3000: LET um=d
 1530 INPUT "MOVE to memory: ";n$: GO SUB 3000: LET tm=d
 1540 IF tm>fm THEN GO TO 1610
 1550 LET mo=tm
 1560 FOR i=fm TO um
 1570 POKE mp,PEEK i
 1580 LET mp=mp+on
 1590 NEXT i
 1600 GO TO mr
 1610 LET mp=um+tm-fm
 1620 FOR i=um TO fm STEP -on
 1630 POKE mp,PEEK i
 1640 LET mp=mp-on
 1650 NEXT i
 1660 GO TO mr
 1800 REM ***WORK***
 1810 INPUT "Address of start: ";n$: GO SUB 3000: CLS 
 1820 RANDOMIZE USR d: GO TO mr
 2000 LET rt=PEEK 23732+qk*PEEK 23733
 2010 IF rt=65535 THEN LET mm=65347: LET UDG=65367
 2020 IF rt=32777 THEN LET mm=32579: LET UDG=32599
 2030 LET n1=INT (UDG/qk)
 2040 POKE 23675,UDG-n1*qk: POKE 23676,n1
 2050 RETURN 
 3000 REM sub***TRANS***
 3005 IF LEN n$<>4 THEN GO TO mr
 3010 LET d=ze: FOR i=1 TO 4: LET a=CODE n$(i)
 3020 IF a<48 OR a>102 OR (a>57 AND a<65) OR (a>70 AND a<97) THEN GO TO mr
 3030 LET d=d+z(i)*((a<58)*(a-48)+(a>64 AND a<71)*(a-55)+(a>96)*(a-87))
 3040 NEXT i: RETURN 
P.S. Как я уже писал выше, я взял эту бейсик-программу (и слегка модифицировал) из мини-книжки от Солона под незатейливым названием "Ассемблер для ПК ZX SPECTRUM":

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote: Затем все кодовые вставки я писал именно на ней. В ноябре 1992 года
я закончил программу LIFE-2 - в составе файла _life_2.tap можно найти
бейсиковскую часть, кодовую часть, а также музыкальное сопровождение,
созданное мною в музыкальном редакторе WHAM! Программа реализует
клеточную игру ЖИЗНЬ - управлять цифрами (движение "пера" - 5,6,7,8;
поставить точку - 9; стереть - 0; запустить жизнь - 1):

Image

Code: Select all

   10 LOAD "life"CODE 27648,256: LOAD "LIFE"CODE 50000
   15 BORDER 1: PAPER 1: INK 7: POKE 50026,1: POKE 50035,235
   20 LET n=0: DIM p(5)
   25 CLS : PRINT INK 2;"  LIFE-2 15.11.1992";: RANDOMIZE USR 50000
   30 LET x=1: LET y=166: LET x1=x: LET y1=y
   40 FOR i=1 TO 5: LET p(i)=POINT (x,y+i): PLOT x,y+i: NEXT i
   50 LET a$=INKEY$: IF a$="" THEN GO TO 50
   55 IF a$="q" THEN GO TO 25
   60 IF a$="0" THEN PLOT INVERSE 1;x,y: GO TO 50
   70 IF a$="9" THEN PLOT x,y: GO TO 50
   80 IF a$="8" THEN IF x<>254 THEN LET x1=x+1
   90 IF a$="7" THEN IF y<>166 THEN LET y1=y+1
  100 IF a$="6" THEN IF y<>0 THEN LET y1=y-1
  110 IF a$="5" THEN IF x<>1 THEN LET x1=x-1
  120 IF a$="1" THEN GO TO 150
  130 GO SUB 500: LET x=x1: LET y=y1: GO TO 40
  150 GO SUB 500: RANDOMIZE USR 27873
  160 LET n=n+1: PRINT AT 0,23;n;
  170 LET a$=INKEY$: IF a$="q" THEN GO TO 30
  180 RANDOMIZE USR 27728: GO TO 160
  500 FOR i=1 TO 5: IF p(i)=0 THEN PLOT INVERSE 1;x,y+i
  510 NEXT i: RETURN 
Я тут за главного - если что шлите мыло на me собака shaos точка net