PDA

Просмотр полной версии : Прекрасный ассемблер КР580ВМ80А русские буквы



artyr_n
29.03.2014, 23:09
Пытаюсь компилировать с помощью онлайн ассемблера (http://asdasd.rpg.fi/~svo/i8080/)
столкнулся с проблемкой

0850 32 33 3A 30 string: db '23:05',0
. . .
0854 35 00
string2:
0856 13 20 10 24 db 'ГРАФИЧЕСКАЯ НАДСТРОЙКА НАД МИКРОДОС',0
. . .
0876 14 1E 21 00

Коды цифр правильные, а вод с русскими буквами какая то беда.



0850: 32 33 3A 30 35 00 13 20-10 24 18 27 15 21 1A 10 23:05....$.'.!..
0860: 2F 20 1D 10 14 21 22 20-1E 19 1A 10 20 1D 10 14 /....!".........
0870: 20 1C 18 1A 20 1E 14 1E-21 00 47 31 00 00 3E 00 ........!.G1..>.
0880: 01 00 80 02 03 02 03 B9-C2 83 08 B8 C2 83 08 21 ...............!

Никто не сталкивался?

Hacker VBI
30.03.2014, 00:22
artyr_n, у них с кодировкой страницы проблема :)
аŸб?аЕаКб?аАбаНаИаЙ аАбаЕаМаБаЛаЕб? аšа 580а’аœ80а

должен быть utf8
... нет, не получается)

artyr_n
30.03.2014, 00:46
должен быть utf8
я сижу под убунтой и у меня как бы по умолчанию utf

---------- Post added at 00:46 ---------- Previous post was at 00:44 ----------


с кодировкой страницы проблема
с кодировкой самой страницы у меня проблем нет

Tronix
30.03.2014, 11:19
Может взять нормальный ассемблер для 8080 просто?

artyr_n
30.03.2014, 15:26
А можете посоветовать?
Я попробовал asm8080, так он на половину строк выдал ошибки, хотя в онлайновском все компилится и думаю что с русскими там тоже будет проблема.

---------- Post added at 14:26 ---------- Previous post was at 14:17 ----------

В онлайновском натолкнулся на баг (а может фича)
написал
ora a,h строку красным ассемблер не выделил хотя синтаксис вроде как не правильный, ну и сделал конечно не то что задумывалось.

Viktor2312
30.03.2014, 16:36
ora a,h строку красным ассемблер не выделил хотя синтаксис вроде как не правильный, ну и сделал конечно не то что задумывалось.

По идее а не нужно было писать, так как команда итак подразумевает выполнение ИЛИ над аккумулятором.



Команда ORA S - реализует логическую операцию ИЛИ над содержимым аккумулятора и одним из РОН или ячейки памяти, косвенно адресуемой содержимым памяти HL.

Код: 10110sss

sss:
000 - B
001 - C
010 - D
011 - E
100 - H
101 - L
110 - M (HL)
111 - A

artyr_n
30.03.2014, 17:10
По идее а не нужно было писать
да A писать не нужно было но почему то наличие запятой и еще знака у ассемблера не вызвало ошибки

esl
30.03.2014, 20:53
По идее а не нужно было писать, так как команда итак подразумевает выполнение ИЛИ над аккумулятором.


ora a
это способ проверить что в аккум.
выставляются все флаги
обычно что-то вроде

ora a
jp nz,loop


p.s. не по теме, но уже поздно, удалить все равно нельзя

artyr_n
31.03.2014, 01:07
0103 19 26 23 1A db 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯ� �СМИТЬБЮйцукенгшщзхъфывап� �олджэячсмитьбю',0
. . .
0143 00




0100: C3 BC 08 19 26 23 1A 15-1D 13 28 29 17 25 2A 24 ....&#....().%*$
0110: 2B 12 10 1F 20 1E 1B 14-16 2D 2F 27 21 1C 18 22 +........-/'!.."
0120: 2C 11 2E 39 46 43 3A 35-3D 33 48 49 37 45 4A 44 ,..9FC:5=3HI7EJD
0130: 4B 32 30 3F 40 3E 3B 34-36 4D 4F 47 41 3C 38 42 K20?@>;46MOGA<8B
0140: 4C 31 4E 00 0E 11 13 15-19 11 0E 04 0C 14 04 04 L1N.............

SlashNet
31.03.2014, 02:41
Ошибка в кодировке кириллицы.
Как подсказывает http://www.artlebedev.ru/tools/decoder/ это 7-bit ASCII → ISO-8859-5

Скорее всего ошибка онлайн ассемблера (и того сервера, где он находится)

svofski
31.03.2014, 03:19
Привет, я — автор. Рад, что кто-то этим пользуется ;)

Русские буквы в Прекрасном ассемблере не поддерживаются. Потому, что никаких стандартов в этой области нет, и где-то это будет КОИ8, где-то вообще КОИ7, где-то вообще что-то свое — мне даже в голову не приходило, что кто-то захочет русские сообщения вставлять в ассемблерные коды.

Сейчас, пожалуй, проще всего сообщения по-русски кодировать заранее в хекс и вставлять в виде строк db.

artyr_n
31.03.2014, 03:39
Спасибо за Ваш Прекрасный ассемблер.

кодировать заранее в хекс
так и придется сделать.

---------- Post added at 02:39 ---------- Previous post was at 02:37 ----------

В онлайновском натолкнулся на баг (а может фича)
написал
ora a,h строку красным ассемблер не выделил хотя синтаксис вроде как не правильный, ну и сделал конечно не то что задумывалось.

svofski
31.03.2014, 03:42
В онлайновском натолкнулся на баг (а может фича)
написал
ora a,h строку красным ассемблер не выделил хотя синтаксис вроде как не правильный, ну и сделал конечно не то что задумывалось.

=) Это, конечно, баг. Может быть я доберусь поправить на днях.

svofski
31.03.2014, 20:23
Исправил ora a, h. Добавил поддержку кодировок. По-человчески не получилось, поэтому боюсь, что может подтормаживать. По умолчанию koi8-r, но можно задать .encoding koi8-r/koi8-u/cp866/latin1. Фактически мне все кодировки приходится добавлять вручную, так что все остальные -- по просьбам.

artyr_n
01.04.2014, 19:47
.encoding
.hexfile
.binfile
.download bin
.objcopy gobjcopy
.postbuild echo "Hooray!"
.nodump
.org 100h
а есть где то описание всех команд ассемблеру?

svofski
01.04.2014, 20:01
Да это и есть все команды.

artyr_n
01.04.2014, 20:12
Добавил поддержку кодировок
Вроде как ничего не изменилось, или я делаю что то не правильно



0850 32 33 3A 30 string: db '23:05',0
. . .
0854 35 00
0856 13 20 10 24 string2: db 'ГРАФИЧЕСКАЯ НАДСТРОЙКА НАД МИКРОДОС',0
. . .
0876 14 1E 21 00



0850: 32 33 3A 30 35 00 13 20-10 24 18 27 15 21 1A 10 23:05....$.'.!..
0860: 2F 20 1D 10 14 21 22 20-1E 19 1A 10 20 1D 10 14 /....!".........
0870: 20 1C 18 1A 20 1E 14 1E-21 00 31 00 00 3E 00 01 ........!.1..>..
0880: 00 80 02 03 02 03 B9 C2-82 08 B8 C2 82 08 21 03 ..............!.

koi8-r (http://www.shtogrin.com/library/web/charsets/koi8-r/)
Г 0xe7
Р 0xf2
А 0xe1
Ф 0xe6
И 0xe9
Ч 0xfe

svofski
01.04.2014, 20:23
У меня правильные коды выходят. Что за браузер-ОС? Какую показывает кодировку собственно страницы? Должна быть UTF-8. Я только что проверил на Винде FF/Chrome, Mac - Сафари и Android - Chrome -- везде идентичное поведение.

artyr_n
01.04.2014, 20:39
Linux Suxoy 3.0.0-32-generic #51-Ubuntu SMP Thu Mar 21 15:50:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Броузер google chrom Версия 27.0.1453.110, кодировку показывает UTF-8

svofski
01.04.2014, 20:42
Ерунда какая-то. Он точно перегрузил страницу? Если написать .encoding abc, покажет красным строку? А потом если написать вместо этого .encoding koi8-r, строка побелеет?

artyr_n
01.04.2014, 20:57
Извиняюсь за панику видимо броузер загрузил страницу из кэша,нажал обновить и стало все хорошо.

0856 E7 F2 E1 E6 string2: db 'ГРАФИЧЕСКАЯ',0
. . .
085E EB E1 F1 00

svofski
01.04.2014, 22:40
Я так и подумал =) Рад, что заработало.

---------- Post added at 22:40 ---------- Previous post was at 20:58 ----------

artyr_n, у меня есть оффлайновая версия Прекрасного ассемблера, которая запускается из командной строки через SpiderMonkey. Интересно?

artyr_n
02.04.2014, 01:21
Конечно интересно.

svofski
04.04.2014, 01:32
Ок, кажется получилось выцарапать более-менее аккуратно.
http://code.google.com/p/svofski/source/browse/#hg%2Fprojects%2Fprettyasm
в подкаталоге sample лежит пример вместе с Makefile.

Из-за особенностей запуска js из командной строки, все устроено немного нетрадиционно. В Makefile надо поправить путь до SpiderMonkey-вского js shell-а, еще нужен путь до gobjcopy — скорее всего на большинстве линуксов он будет и так уже в PATH. При первом запуске make должен создать симлинки на .js файлы в текущем каталоге. На выхлопе — .rom файл и .lst.html с навигацией как в онлайновом Прекрасном ассемблере.

Да, собственно главная фича, ради которой я это делал — это директива .include

svofski
08.04.2014, 12:53
Переписал на Питоне.
http://code.google.com/p/svofski/source/browse/projects/prettyasm/pasm.py
Запуск pasm.py <source>.asm [--ihex=out.hex --lst=out.lst.html]

artyr_n
11.01.2015, 19:37
нашёл еще один баг или фичу в онлайн ассемблере (http://asdasd.rpg.fi/~svo/i8080/)

str_name: db 'ИМЯ',0
str_up_dir db '..',0
str_file_0 db 'crazy rom',0
str_file_1 db 'colboll rom',0
str_file_2 db '12345678 123',0



0100: E9 ED F1 00 2E 2E 00 63-72 61 7A 79 20 72 6F 6D .......crazy.rom
0110: 00 63 6F 6C 62 6F 6C 6C-20 72 6F 6D 00 31 32 33 .colboll.rom.123
0120: 34 35 36 37 38 20 31 32-33 00 45678.123.......


а где мои пробельчики? Кто то заменяет толпу пробелов одним пробелом. Причем убираются именно пробелы, точки если поставить остаюся.

str_name: db 'ИМЯ',0
str_up_dir db '..',0
str_file_0 db 'crazy....rom',0
str_file_1 db 'colboll rom',0
str_file_2 db '12345678 123',0



0100: E9 ED F1 00 2E 2E 00 63-72 61 7A 79 2E 2E 2E 2E .......crazy....
0110: 72 6F 6D 00 63 6F 6C 62-6F 6C 6C 20 72 6F 6D 00 rom.colboll.rom.
0120: 31 32 33 34 35 36 37 38-20 31 32 33 00 12345678.123....

CodeMaster
11.01.2015, 20:08
Кто то заменяет толпу пробелов одним пробелом.

html-движок? Они часто этим грешат.

svofski
12.01.2015, 13:45
Нет, это моя проблема. Учту, но пока не могу обещать быстро исправить. Советую до тех пор вставлять пробелы хексами.

artyr_n
13.01.2015, 10:06
Переписал на Питоне.
http://code.google.com/p/svofski/source/browse/projects/prettyasm/pasm.py
Запуск pasm.py <source>.asm [--ihex=out.hex --lst=out.lst.html]

Попробовал, небольшой файлик транслирует, а вот чуть побольше ругается


artyr2@suxoy:~/Загрузки/Vector/prettyasm$ ./pasm.py test.asm
Traceback (most recent call last):
File "./pasm.py", line 1003, in <module>
main(sys.argv[1:])
File "./pasm.py", line 986, in main
jsons() +
File "./pasm.py", line 892, in assemble
return listing(inputlines, linedata, regUsage, doHexDump)
File "./pasm.py", line 840, in listing
(listingLine(i, line, linedata, regUsage) for i,(line,linedata) in enumerate(zip(text,linedata))))
File "./pasm.py", line 840, in <genexpr>
(listingLine(i, line, linedata, regUsage) for i,(line,linedata) in enumerate(zip(text,linedata))))
File "./pasm.py", line 834, in listingLine
return listingLineUncond(i, line, linedata, regUsage)
File "./pasm.py", line 776, in listingLineUncond
labeltext = remainder[:remainder.index(textlabel) + len(textlabel)]
ValueError: substring not found
artyr2@suxoy:~/Загрузки/Vector/prettyasm$ ls -al test.asm
-rw-rw-r-- 1 artyr2 artyr2 50553 Янв 13 00:48 test.asm

svofski
13.01.2015, 22:19
artyr_n, можно мне на этот test.asm посмотреть? Дело не в размере. Что-то с метками не так, как ожидалось, и ситуация не обрабатывается.

artyr_n
13.01.2015, 23:23
Отправил в личку.

svofski
14.01.2015, 00:47
Залил исправленный вариант, дело было в метках. Но на пробелы пока не смотрел.

artyr_n
14.01.2015, 23:13
Но на пробелы пока не смотрел.
в версии на питоне с пробелами та же проблема.

artyr_n
14.01.2015, 23:46
Ещё одна непонятка. В питоновской версии появляется лабел 2400 +4, в онлайновской такого нет.

artyr_n
15.01.2015, 00:07
Еще баг или фича в питоновской версии


08A7 3E 66 mvi a,'F'
08A9 01 07 C0 lxi b,$C007
08AC CD FA 08 call print_simA
08B7 3E 68 mvi a,'H'
08B9 01 07 C3 lxi b,$C307
08BC CD FA 08 call print_simA


66 - это код маленькой f
68 - это код маленькой h

artyr_n
18.01.2015, 20:11
artyr2@suxoy:~/Загрузки/Vector/CART/my_prog/prettyasm$ ./pasm.py keyscan_test.asm
Traceback (most recent call last):
File "./pasm.py", line 1004, in <module>
main(sys.argv[1:])
File "./pasm.py", line 987, in main
jsons() +
File "./pasm.py", line 870, in assemble
size = parseInstruction(encodedLine, addr, line, regUsage)
File "./pasm.py", line 721, in parseInstruction
size = evaluateExpression(' '.join(parts[1:]), addr)
NameError: global name 'evaluateExpression' is not defined



; 8080 assembler code
.hexfile keyscan_test.hex
.binfile keyscan_test.r0m
; try "hex" for downloading in hex format
.download bin
.objcopy objcopy
.postbuild echo "Gotovo!"
;.nodump
.org $0
jmp start
.org $38
RST7:
jmp INTRPT


.org $100




STKEY: db 01000010b
;статус клавиатуры
NEWKEY: ds 9
OLDKEY: ds 9
KEYBUF: ds 16
RPTKEY: db 13
INTRPT: push h
push d
push b
push psw
lxi h,STKEY
mov a,m
xri 10000b
mov m,a
ani 10000b
;scan or code?
jz KEYWRK
in 3
sta SCRL+1
mvi a,8Ah
out 0
mov a,m
out 1
mov c,a
inx h
in 1
ori 11111b
mov m,a
mvi b,11111110b
int1: mov a,b
out 3
rlc
mov b,a
in 2
inx h
mov m,a
jc int1
mvi a,88h
out 0
mov a,c
out 1
mvi a,0 ;10000b
out 2
SCRL: mvi a,0 ;dummy
out 3
intf: pop psw
pop b
pop d
pop h
ei
ret


KEYWRK: lxi h,intf
push h
lxi h,0A6AEh
;'xra m, ana m
shld PRESS7 ;@PRESS
;seach for new pressed keys
call PRESS6 ;PRESS?
rnz
lxi h,RPTKEY
dcr m
rnz
inr m
lxi h,0B72Fh
;'cma, ora a
shld PRESS7 ;@PRESS
jmp pres5




PRESS6: lxi h,OLDKEY+8
lxi d,NEWKEY+8
mvi b,9
pres1: ldax d
cmp m
dcx h
dcx d
jnz pres2
dcr b
jnz pres1
MSXOB: lxi h,0
mov a,l
sub h
rat
pres2: mvi a,13
sta RPTKEY
pop h ;-1 ret
pres5: lxi h,OLDKEY+8
lxi d,NEWKEY+8
mvi c,64
pres3: ldax d
mov b,a
PRESS7: nop ;ana m cma
nop ;xra m ora a
mov m,b
jz nokey
;поиск бита
push h
push d
push b
mvi b,8
kcod1: dcr c
rlc
cc putbuf
dcr b
jnz kcod1
pop b
pop d
pop h
nokey: dcx h
dcx d
mov a,c
sui 8
mov c,a
jnz pres3
;else mode keys
ldax d
cmp m
rz
mov m,a
dcx d
cpi 10011111b
;US+SS?
mvi b,00100000b
;CAPS switch
jz ccod1
cpi 01011111b
;RUS+SS?
mvi b,01000000b
;QWER/JCUK switch
jz ccod1
ani 10000000b
;RUS?
rnz
mvi b,10001000b
;Rus & lamp switch
ccod1: ldax d
xra b
stax d
rat


putbuf: push psw
;push or don't modify BC!
lxi h,KBUF
push h
mov a,c
cpi 63 ;space?
mvi a,32
rz
;... ... etc.
mov a,c
cpi 11h ;1
mvi a,33
rz
mov a,c
cpi 07h ;DOWN
mvi a,07h
rz
mov a,c
cpi 05h ;UP
mvi a,05h
rz



KBUF: mov e,a
lhld MSXOB+1 ;Загрузить в HL содержимое ячейки с адресом a16
mov a,l
inr a ;инкрементировать A
ani 15 ;Логическое И непосредственные данные с A
cmp h ;Сравнить A с H
jz kbuf1
sta MSXOB+1 ;Записать A по адресу a16
mvi a,1
out 0
mov a,l
lxi h,KEYBUF
add l
mov l,a
jnc adhla
inr h
adhla: xra a
out 0
mov m,e
kbuf1: pop psw
rat


start:

ei


cicl:
nop
jmp cicl

онлайновский транслирует эту программу

artyr_n
20.01.2015, 00:57
A38SC2: STA DRS1+1
STA DRS2 + 1


0234 32 ?? ?? A38SC2: STA DRS1+1
0237 32 03 03 STA DRS2 + 1


A38SC2: STA DRS1 + 1
STA DRS2 + 1


0234 32 EC 02 A38SC2: STA DRS1 + 1
0237 32 03 03 STA DRS2 + 1

на питоне не понимает если нет пробелов, он лайновый транслирует правильно и без пробелов

svofski
20.01.2015, 01:01
artyr_n, посмотрю вскоре.

svofski
20.01.2015, 23:04
Поправил несколько проблем, эти примеры должны теперь проходить. Еще :)

artyr_n
22.01.2015, 19:42
Спасибо большое за обновление. Продолжу выступать бета тестером.
И в оффлайновом и в онлаоновом натолкнулся на следующее

test100:
nop
lxi h,DWWSS
ldax h
mvi a,0
stax h

jmp test100



test100:
01C8 00 nop
01C9 21 BC 03 lxi h,DWWSS
01CC 2A ldax h
01CD 3E 00 mvi a,0
01CF 22 stax h

01D0 C3 C8 01 jmp test100


ldax h - такой команды нет, подсветки в листинге что команда ошибочна не было,
вместо нее был подставлен код 2A команда LHLD a16 Загрузить в HL содержимое ячейки с адресом a16, эта команда трех байтовая байт команды и два байта адреса и как следствие следующая команда mvi a,0 превратилась в адрес для нее.

svofski
23.01.2015, 00:04
Спасибо за тестирование :) Залил исправленные версии.

artyr_n
06.02.2015, 18:36
пробельчики которые идут подряд удаляются

0130 A1 20 20 20 str1: db '║',0x20,0x20,0x20,0x20,0x20,'ИМЯ',0x20,0x20,0x 20,0x20,0x20,0x20,'║',0x20,0x20,0x20,0x20,0x20,'И МЯ',0x20,0x20,0x20,0x20,0x20,0x20,'║',0
. . .
014C 20 20 A1 00
0150 A1 20 A1 20 str2: db '║ ║ ║',0
0154 A1 00
0156 A1 20 A1 20 str3: db '║ ║ ║',0
015A A1 00

artyr_n
07.02.2015, 13:48
Столкнулся с еще одной проблемкой, вместо ret написал rem

032C C3 18 03 jmp print_str_loop

print_str_end:
rem



Labels:
897 +4 ????wywcol 0103wywstr 0104str40 0105
str0 0110str1 0130str2 0150str3 0170
str4 0190str5 01B0str6 01B3start 01BD
stop 0300moveekr 0304moveekr_loop 030Aprint_str 0315
print_str_loop 0318strkoltoadr 032Frem 032Fprint_str_end 032F
kodsimtoadrzg 033Fwiev_sim 0350wiev_sim_loop 0353mult 0360
la200@ 0376jmult1 0386wa200@ 0399cnhl 03A3
cnde 03ADcnbchl 03B7fonts8x8 03CE


rem превратился в метку. Может быть ввести более строгое объявление меток, обязательное двоеточие после метки?

---------- Post added at 14:48 ---------- Previous post was at 13:39 ----------


DO:
0000 00 nop
0001 00 nop


0002 32 01 00 STA DO + 1 ;
0005 32 09 00 STA POSLE + 1

POSLE:
0008 00 nop
0009 00 nop
Labels:
posle + 1 ????do + 1 ????do 0000posle 0008

Memory dump:
0000: 00 00 32 01 00 32 09 00-00 00 ..2..2....

:0A0000000000320100320900000088
:00000001FF

транслирует правильно, но в Labels ставит вопросы

artyr_n
04.03.2015, 01:43
Поймал еще один баг.
Когда метке с помощью EQU присваиваеш значение то все правильно, а вот если попытатся теперь это значение присвоить еще раз то берется не значение а адрес расположения метки.

org 100H

0100 00 21 DW BASEAD
0102 04 01 DW WPARM

BASEAD EQU 2100H
WPARM EQU BASEAD
WHOME EQU WPARM+2
WCURSR EQU WHOME+2
NUMWND EQU WCURSR+2
ADRSP EQU NUMWND+1
TXTCUR EQU ADRSP+2

0104 00 21 DW BASEAD
0106 04 01 DW WPARM
Labels:
wcursr 0104adrsp 0104txtcur 0104wparm 0104
numwnd 0104whome 0104basead 2100


и видимо там не ожидается что может быть плюс число, так как адрес для всех получился 104 а не 105 и 106

Stampmaker
19.09.2015, 19:44
не работает больше ассемблер
ошибка 500

svofski
19.09.2015, 21:32
Спасибо за сигнал. Починил.

scaraby
06.07.2016, 18:01
Во-первых, спасибо автору за отличный ассемблер! С удовольствием им пользуюсь уже несколько месяцев.

Но пишу по причине того, что сегодня он перестал откликаться. Пишет 504 Gateway Time-out.

svofski
06.07.2016, 22:02
Спасибо за отзыв и сигнал! Вырубалось электричество. Запустил.

HardWareMan
11.07.2017, 12:21
Не помогло, все еще 504 Gateway Time-out / nginx/1.10.3.

Вопрос автору: а можно зазеркалить сей ассемблер у себя?

svofski
11.07.2017, 17:10
HardWareMan, конечно можно!

У меня сейчас руки не доходят настроить связь, как перестану лениться, починю.

HardWareMan
11.07.2017, 17:55
HardWareMan, конечно можно!
Супер! А где можно взять файлы?

У меня сейчас руки не доходят настроить связь, как перестану лениться, починю.
Иногда надо сделать усилие и дать себе волшебного пенделя под зад, ага.

svofski
11.07.2017, 20:15
Супер! А где можно взять файлы?

Иногда надо сделать усилие и дать себе волшебного пенделя под зад, ага.

Согласен:
https://svofski.github.io/pretty-8080-assembler/

(Run пока не перетащил, остальное работает).

Если все еще хочется миррорить, то сорцы, соответственно, тут: https://github.com/svofski/pretty-8080-assembler.

HardWareMan
11.07.2017, 20:49
Ура! Теперь у меня есть свой собственный Прекрасный Ассемблер КР580ВМ80А (http://hwm.us.to/pretty-8080-assembler/)!

svofski
11.07.2017, 21:22
Поздравляю! =)

- - - Добавлено - - -


Run пока не перетащил
Run перетащил. HardWareMan, обновляй зеркало =)

tnt23
11.07.2017, 22:00
Оффтопик: а нет ли чего под linux, чтобы бинарь сконвертировать в аудио в формате РК/Микроши?

svofski
11.07.2017, 22:23
Я могу сделать, чтобы ассемблер поддерживал генерацию вавов :)

Ewgeny7
11.07.2017, 22:42
svofski, и от меня спасибо тебе. Периодически пользуюсь твоим ассемблнром, разместил на своей Скорпион-страничке.

svofski
11.07.2017, 23:32
Ewgeny7, рад, что пригодилось!

HardWareMan
12.07.2017, 06:33
Run перетащил. HardWareMan, обновляй зеркало =)
Сделано. Я предлагаю выводить версию и сборку в заголовке (на бордовой полосе, после названия), чтобы видеть различия.

Vladimir_S
12.07.2017, 14:37
Раньше в результате трансляции получался файл ограниченный адресами текста. Сейчас получается так - транслирую программу где указано ORG 0D000H, в результате получаю файл почти 60Кб, до D000 идут нули, а дальше нормальный код. Подскажите что нужно указать транслятору что бы не было ненужных нулей? Т.е. сделать как раньше.

tnt23
14.07.2017, 11:03
Я могу сделать, чтобы ассемблер поддерживал генерацию вавов :)

Ну как, готово уже?

svofski
14.07.2017, 12:04
Vladimir_S, учту, надо доработать.

- - - Добавлено - - -

tnt23, ты как-то не сказал, что надо? Уточни параметры вавов, Векторовские и Кристовские я умею, а вот РК совсем нет.

HardWareMan
14.07.2017, 12:26
svofski, а ты всешние сделай. Прямо с выбором чтобы. И чтобы браузером сразу гудело на карту. Ну и по поводу печати номера версии подумай, чтобы видеть че-кого.

tnt23
14.07.2017, 12:50
svofski, пытаюсь найти внятное описание. Нашел пока от "Микро-80" и не очень внятное, но как-то так:


00Н
00Н 256 байт 00Н (начальный пропуск)
.....
00Н
Е6Н - байт синхронизации
ADR1(Mл) - младший байт начального адреса
ADR1(Cт) - старший байт начального адреса
АDR2(Мл) - младший байт конечного адреса
ADR2(Cт) - старший байт конечного адреса области памяти
и далее информационные байты, число которых зависит
от размера заданной области памяти.
Я так понимаю, это заголовок. Собственно биты кодируются манчестером.

Во, снаряды ложатся все ближе:


Магнитофон
Предусмотрена возможность записи блока данных на магнитофон и чтения с него. Сигнал для магнитофона формируется при записи и декодируется при чтении программно, используется манчестерское кодирование. Скорость чтения и записи - около 1200 бит в секунду. Формат блока на магнитной ленте следующий:


Элемент Размер, байт
Ракорд (нулевые байты) 256
Синхробайт (E6h) 1
Начальный адрес в ОЗУ 2
Конечный адрес в ОЗУ 2
Данные (конечный адрес - начальный адрес + 1)
Ракорд (нулевые байты) 2
Синхробайт (E6h) 1
Контрольная сумма 2

HardWareMan
14.07.2017, 12:56
И про Специалист не забудь!

{================================================= ==========================}
{Загрузчик файлов с ленты разных форматов Специалиста }
{<ADR_BEG>,<ADR_END>,<CHECK_SUM>,<TEXT_SIZE> - 2 байта, младший первый }
{<ASCII_NAME>, <BIN_CODE> - N байт массив }
{<CHECK_SUM> накрывает только <BIN_CODE>, причем у ТХТ и MICRON она своя }
{---------------------------------------------------------------------------}
{Формат бэйсика с именем: }
{0E6H,0D4H,0D4H,<ASCII_NAME>,00H }
{0E6H,0D3H,0D3H,0D3H,<BIN_CODE>,00H,00H,00H,<CHECK_SUM> }
{---------------------------------------------------------------------------}
{Формат бэйсика MICRON (у блока данных раккорд пониженной частоты): }
{0E6H,0D3H,0D3H,0D3H,0D3H,<ASCII_NAME>,00H,00H,00H }
{0E6H,0D3H,0D3H,0D3H,<BIN_CODE>,00H,00H,00H,<CHECK_SUM> }
{---------------------------------------------------------------------------}
{Формат монитора с именем (и без него): }
{0E6H,0D9H,0D9H,0D9H,<ASCII_NAME>,00H }
{0E6H,<ADR_BEG>,<ADR_END>,<BIN_CODE>,<CHECK_SUM> }
{---------------------------------------------------------------------------}
{Формат текста с именем: }
{0E6H,0E6H,0E6H,0E6H,0E6H,<ASCII_NAME>,00H }
{0E6H,<TEXT_SIZE>,<BIN_CODE>,0FFH,<CHECK_SUM> }
{================================================= ==========================}

svofski
14.07.2017, 13:57
Вам палец в рот не клади!

Xrust
14.07.2017, 14:05
А простой .bin прекрасный умеет?

svofski
14.07.2017, 17:28
Теперь .org должен работать как надо. Хаку с типом файла оставил только для запуска в Векторе.

Простой .bin умеет.

Вавы это крутая фича, но не так быстро.

HardWareMan, я не вижу большого смысла печатать версию. Обновления случаются раз в 5 лет, зачем засорять экран. На http://svofski.github.io/pretty-8080-assembler все обновляется автоматом. Чтобы обновить зеркала достаточно просто сказать git pull, а на обновления репы можно подписаться на github-е.

Vladimir_S
14.07.2017, 18:30
svofski, Ну вот!

Ewgeny7
14.07.2017, 21:57
Чтобы обновить зеркала достаточно просто сказать git pull
А как это сказать?
Открыл я зеркало, и минут пять бубнил в монитор Гит Пулл! Гит Пулл!! Или это в мышку надо говорить? :)
Заранее спасибо!

svofski
14.07.2017, 23:39
Сам git: https://git-scm.com/download/

Чтобы склонировать себе репу с историей и ссылкой на сервер:


git clone https://github.com/svofski/pretty-8080-assembler.git

Чтобы обновить локальную копию:


git pull

Вот и вся премудрость. Но без автоматизации это, по-моему, скучно.

HardWareMan
15.07.2017, 07:31
Ewgeny7, очень смешно! Спасибо за хорошее настроение!

tnt23
15.07.2017, 10:45
Практически оффтопик: https://github.com/y-salnikov/esp_bk_downloader

Ewgeny7
15.07.2017, 12:38
Спасибо за хорошее настроение!
Таки не жалко для хорошего человека! :)

Почесал репу. Скачал Гит. Подозрительно посмотрел на мышку. Тяжко вздохнул. Обновляю вручную, по файликам. Зато не скучно! :)

svofski
15.07.2017, 15:10
Ewgeny7, ради трех файликов ассемблера водружать и осваивать такого монстра смысла и правда нет. Просто обычно он уже как-то и так неизбежно есть.

Ewgeny7
15.07.2017, 16:51
Всё завелось и радостно тарахтит. Воистину проще перезаписать несколько файлов, движок юкоза в этом плане вполне удобен.

svofski
15.07.2017, 17:45
Контрольная сумма 2
Вот это мне всегда больше всего нравится во всех таких великих описаниях. Контрольная сумма чего? Контрольная сумма куда? Как? Если бы не вот этот легкочитаемый исходничек (http://www.danbigras.ru/RK86/RK_PC/RrkpcTbl7.txt), который я чудом раскопал, никогда бы не догадался. Особенно умиляет последний байт.

Сделал поддержку генерации вавов, пока только для РК. Проверяйте.

tnt23
15.07.2017, 20:28
svofski, для выключения используйте Лаксианский Ключ.

Спасибо, кормилец! не прямо вот сейчас, но попробую.

HardWareMan
15.07.2017, 21:24
tnt23, доставлено!
http://savepic.ru/14887334.png

tnt23
16.07.2017, 00:28
Работает! С контролькой только не все понятно, но жить можно.

61658

svofski
16.07.2017, 01:08
Может быть Некроша считает ее не так же, как РК?

SegaBoy
16.07.2017, 01:49
Может быть Некроша считает ее не так же, как РК?
Похоже так и есть. Апогей умеет читать/писать в формате и РК, и Микроши - директивы I/O и A/B соответственно. При записи на ленту в разных форматах выводимая на экран контрольная сумма отличается.

Посмотрел чему равна контрольная сумма в формате Микроши и как её считает Апогей - это xor всех слов в блоке данных.

tnt23
16.07.2017, 08:42
Может быть Некроша считает ее не так же, как РК?

Скорее всего. В РК у меня по причине лени не распаян магнитофонный вход, проверить не могу.

Но все равно жить с этим можно. В те времена байты были очень ценными, и результаты даже неудачной попытки загрузить их не выбрасывались, а оставлялись в ОЗУ на всякий случай.

svofski
16.07.2017, 11:51
tnt23, ну уж нет. Придется тебе разобрать, как считается КС в Микроше.

За РК я более-менее уверен, потому что проверял в эмуляторе. Но я не знаю эмулятора РК и Микроши, который грузит ВАВ-ы. Поэтому я запускал эмулятор Вектора, в нем загружал монитор РК и в нем грузил. b2m в режиме РК-подобных открывает диалог для загрузки обычного файла.

- - - Добавлено - - -


Посмотрел чему равна контрольная сумма в формате Микроши и как её считает Апогей - это xor всех слов в блоке данных.
Вот! Спасибо, попробую сделать.

Vladimir_S
16.07.2017, 12:15
В РК у меня по причине лени не распаян магнитофонный вход
У меня и магнитофона нет, а со звуковухи достаточно кондера 100 - 200 Нф. Ни разу не было, что бы не прочиталось.

svofski
17.07.2017, 03:21
Оказалось, что Векторовский эмулятор РК (http://sensi.org/scalar/ware/548/) умеет и Микрошу. Очень удобно.

Сделал форматы Микроши, РК и Вектор-06ц. Заодно переделал WAV на 8-битный, чтобы можно было напрямую его засовывать в VirtualVector.


; rk-bin Радио-86РК
; microsha-bin Микроша
; v06c-rom Вектор-06ц ROM
.tape v06c-rom


Криста и Специалист на очереди.

svofski
17.07.2017, 12:46
HardWareMan, мне бы какой-нибудь креш-курс по Специалисту. Какой из этих форматов имеет смысл поддерживать в ассемблере, какой эмулятор умеет загружать вавы для Специалиста, нет ли примера маленького вава, который наверняка загружается, чтобы сравнивать если что.

И кстати, раз уж. А можно какой-нибудь хелло врот для РК, Микроши и Специалиста? Можно было бы забить разные рыбы для разных компьютеров. Просто напечатать строчку и благоразумно выйти в монитор, или элегантно подвиснуть.

HardWareMan
17.07.2017, 13:52
svofski, делай только под монитор и под адрес транляции:

<RAKK_256>,0E6H,0D9H,0D9H,0D9H,<ASCII_NAME>,<RAKK_768>,0E6H,<ADR_BEG>,<ADR_END>,<BIN_CODE>,<CHECK_SUM>
Раккорды из нулей, второй 3х для того, чтобы можно было загружать по сбросу (успевать нажать сброс, это стандарт). Начало и конец вычислять от ORG и размеру программы, а контролька считается как на РК/Орионе, но выгружается младшим вперед (как и оба адреса) и без дополнительной синхронизации в виде нулей и Е6. Правила кодировки имени такие же как и у РК/Ориона.

SegaBoy
17.07.2017, 16:29
...
И кстати, раз уж. А можно какой-нибудь хелло врот для РК, Микроши и Специалиста? Можно было бы забить разные рыбы для разных компьютеров. Просто напечатать строчку и благоразумно выйти в монитор, или элегантно подвиснуть.
Вот пример для РК (так же работает и на ЮТ). Пишет с новой строки HELLO WORLD и возвращает управление в Монитор:


PrintMsg equ $F818
RetToMon equ $F86C

Program:
lxi h, MsgHello
call PrintMsg
jmp RetToMon

MsgHello:
db 13,10,'HELLO WORLD',0

Для Апогея адрес возврата надо заменить на $F875, для Микроши - $F89D, для Партнёра - $F8C9, для Микро80 - $F82D.

svofski
17.07.2017, 17:40
SegaBoy, а какой типичный стартовый адрес будет? Одинаковый у Микроши, РК, Апогея?

И какой из форматов записи на ленту Апогею ближе-роднее, Микрошин или РК?

SegaBoy
17.07.2017, 17:54
SegaBoy, а какой типичный стартовый адрес будет? Одинаковый у Микроши, РК, Апогея?

И какой из форматов записи на ленту Апогею ближе-роднее, Микрошин или РК?

Насколько я понимаю, у всех подобных компьютеров (РК, ЮТ, Апогей, Микроша, Партнёр, Микро80) ОЗУ начинается с $0000 - наверное .org $0000 подойдёт для них всех. Если что, знатоки поправят, надеюсь.

По директиве I Апогей читает в формате РК - так что этот формат ему ближе.

svofski
17.07.2017, 18:02
Ясно, спасибо!

svofski
18.07.2017, 20:44
Добавил (https://svofski.github.io/pretty-8080-assembler/):


рыбы для РК, Микроши, Апогея, Партнера, Микро-80, Вектора-06ц
генерацию WAV-ов для Вектора-06ц

Для загрузки рыбы надо кликнуть на рыбу:
http://i.imgur.com/RsNpjWe.gif

tnt23
19.07.2017, 00:29
Притча о пяти рыбах

HardWareMan
19.07.2017, 07:02
; @ для Специалиста
.tape spec-bin ; формат ленты для wav
.binfile hello.spec ; имя файла
.download tape ; формат двоичного файла .spec
; .download bin ; формат двоичного файла .bin без заголовков
.org 0
prompt equ 0C800h
puts equ 0C818h

lxi hl, msg
call puts
jmp prompt

msg:
db 1fh,'priwet lunatikam!',0dh,0ah,0
Но я там видел отсутствие кейса в генерации для Спеца. И еще, отсутствует файл для Кристы - выдавало 404, пока я не создал файл-заглушку.

svofski
19.07.2017, 12:02
Спец и Криста потому что еще недоделаны. Спасибо за хелловорлдъ!

SegaBoy
19.07.2017, 18:13
...
рыбы для РК, Микроши, Апогея, Партнера, Микро-80, Вектора-06ц
...


Проверил на Апогее - WAV для РК загружается нормально, а вот с Микрошиным проблема. На слух выводится вроде тот же формат что и от РК. Если же на Апогее на запись вывести блок, то звук в формате РК и в формате Микроши будет разный.
В .rk файле для Микроши в конце три лишних байта записываются - $E6 и ещё два похожих на контрольную сумму в формате РК. Хотя для загрузки в эмуляторе это не мешает.

svofski
19.07.2017, 18:28
Про лишние байты, да, так и есть. Я думаю, что дело не в них - на настоящей пленке тоже в конце любой мусор может быть. Скорее дело в скорости. На Микроше звук повыше, или пониже? У меня в разных эмуляторах все вроде грузится.

SegaBoy
19.07.2017, 19:53
Да, байты ни при чём. Просто заметил их изучая .rk файл.
Звук ниже. В Руководстве к Апогею сказано что по директиве O (РК) скорость записи 1200 бит/с, а по директиве B (Микроша) - 600 бит/с. Константа записи в формате РК по умолчанию $1D, в формате Микроши $30.

- - - Добавлено - - -

Сравнил код в ПЗУ. Так и есть, при записи в формате Микроши загружается другая константа. Процедура записи байта используется общая. Отличия в конце. После блока данных в формате РК записывается пять байт - два байта $00, один байт $E6 и затем два байта контрольной суммы. В формате Микроши после блока данных записывается всего два байта контрольной суммы и всё.

- - - Добавлено - - -

При загрузке в эмуляторе, лишние байты в файле не мешают. Наоборот, такой файл можно загрузить и с конфигом Микроши, и с конфигом РК - в обоих случаях ругани на контрольную сумму нет.

- - - Добавлено - - -

Если указать константу чтения, то загрузка Микрошиного файла проходит успешно.

kolk
19.07.2017, 20:15
При загрузке в эмуляторе, лишние байты в файле не мешают. Наоборот, такой файл можно загрузить и с конфигом Микроши, и с конфигом РК - в обоих случаях ругани на контрольную сумму нет.


Пока в КС Микроши не встретится $E6, возможно инвертированный, возможно сдвинутый? ;)

HardWareMan
19.07.2017, 20:32
Я вам так скажу.

1. Скорости разные, причем у Ориона на слух явно ниже было чем у Специалиста. Я когда баловался, там было что-то между 1050 и 1100.

2. Есть особенность в выгрузке у советского манчестера. Это в отличии от двухтоналки Спектрума. Сейчас объясню. Вот типичный цикл загрузки и выгрузки:

LOOP: MOV A,M
CALL SAVE_BYTE
CALL CMP_HL_DE
JZ EXIT
INX H
JMP LOOP
EXIT:

Ничего не заметили? Хорошо, следите: внутри SAVE_BYTE биты выводятся с равномерным таймингом и он задается константой. А вот снаружи мы имеем несколько команд, которые затягивают последний сформировавшийся уровень. Отсюда каждые 8 бит имеем растягивание уровня во времени и "рваный" звук. Причем, чем выше частота, тем заметнее рваный (у Спеца например). И тональность кажется не чистой. И самое главное то, что когда достигнута синхронизация, эта задержка попадает на такой же набор команд в подпрограмме загрузки. Поэтому, она нивелируется. А если ее не добавить, на некотором бодрейте штатная функция откажется считывать, потому как будет пропускать перепады.

svofski
19.07.2017, 22:07
HardWareMan, то-то я думаю, почему такой хрюкочущий звук всегда получается.


Пока в КС Микроши не встретится $E6, возможно инвертированный, возможно сдвинутый?
КС Микроши не пишется в файл для РК, для РК на его месте нули. Только файлы для Микроши получают лишние байты. Но раз вам с ними никак, так уж и быть, отрежу три байта =)

- - - Добавлено - - -

Попробовал, у меня такая ситуация только в Апогее — то есть Апогей мои Микрошевские вавы не грузит. Сам Микроша при этом их грузит, а когда я делаю их тормозными — перестает. Поскольку Апогей умеет читать свои собственные файлы и даже имеет свою собственную рыбу, оставлю пока Микрошу как есть.

kolk
19.07.2017, 23:16
КС Микроши не пишется в файл для РК, для РК на его месте нули. Только файлы для Микроши получают лишние байты. Но раз вам с ними никак, так уж и быть, отрежу три байта =)

- - - Добавлено - - -

Попробовал, у меня такая ситуация только в Апогее — то есть Апогей мои Микрошевские вавы не грузит. Сам Микроша при этом их грузит, а когда я делаю их тормозными — перестает. Поскольку Апогей умеет читать свои собственные файлы и даже имеет свою собственную рыбу, оставлю пока Микрошу как есть.

В теории, в файле с обеими КС может неправильно прочитаться только КС РК на читалке РК, и то при наличии в КС Микроши битовой последовательности 11100110 или 00011001.

svofski
19.07.2017, 23:36
В теории, в файле с обеими КС может неправильно прочитаться только КС РК на читалке РК, и то при наличии в КС Микроши битовой последовательности 11100110 или 00011001.
Когда я генерирую файл для РК, в позиции Микрошных контрольных сумм записываются нули.

svofski
20.07.2017, 13:14
HardWareMan, у меня получается загружать файлы без заголовка с именем (фактически .rks засунутый в WAV). А с именем нет. Оно ему вообще нужно? Может быть я что-то неправильно делаю? У меня эмулятор b2m. Что надо сделать, чтобы загрузить файл с именем?

И кстати, ракорд в 768 нулей, это как-то очень много по-моему.

HardWareMan
20.07.2017, 14:59
svofski, я привел данные только по Специалисту. Должно работать по директиве I и он загрузит с именем, как я сказал. Без имени можно загрузить по сбросу, тогда после загрузки и сверки КС произойдет автозапуск. Тот же результат если нажать сброс на втором раккорде, пропустив имя. Ну не 768, сделай 512 хотя-бы тогда, но в оригинале 768.
http://savepic.ru/14954636.png

svofski
20.07.2017, 15:29
HardWareMan, а, тогда все работает. Я процедуру со сбросом и дополнительной директивой не осознал. .tape spec-mon для монитора, .spec-rks для загрузки без имени.

HardWareMan
20.07.2017, 15:56
svofski, я не помню как в РК, но в Орионе КС идет после микрораккорда и синхробайта, к тому же старшим вперед. В спеце КС идет сразу за последним байтом данных и младшим вперед. Сама же формула КС такая же как и в РК и Орионе. Она вообще стандарт, т.к. журнал Радио использовал ее в распечатках, хоть и имеет серьезный баг в реализации, который исправить нельзя - порушится математика.

svofski
20.07.2017, 16:09
HardWareMan, у меня получилось, как ты сказал: RK выдавливает адреса и КС big endian, Спец наоборот. Алгоритм КС тот же самый. По крайней мере эмулятор в таком режиме грузит и доволен, у меня сейчас лучше критериев нет.

Надо бы потом сбацать подробное описание всех этих форматов в одном хорошо организованном месте. У меня уже есть просто программа, которая печатает декодированный дамп произвольного манчестерокодированного WAV-а, потому что иначе понять не всегда получалось. Для Кристы вообще пришлось дизассемблировать загрузчик, потому что нигде не написано, что же именно она записывает. Похоже на Вектор, но совсем не то же самое.

barsik
20.07.2017, 17:34
Ничего не заметили? Хорошо, следите: внутри SAVE_BYTE биты выводятся с равномерным таймингом и он задается константой. А вот снаружи мы имеем несколько команд, которые затягивают последний сформировавшийся уровень. Отсюда каждые 8 бит имеем растягивание уровня во времени и "рваный" звук. Причем, чем выше частота, тем заметнее рваный

Ошибка на обычных константах невелика. После каждого 8-го бита добавляется не более 2-х процентов периода. Коэффициент детонации у магнитофона 4-го класса 5%. Так что это нормально и к проблемам не ведёт, т.к ошибка будет только при задержке на полпериода, т.е на 50%. Строго говоря это ошибка Попова, Зеленко и Горшкова, авторов МИКРО-80, откуда все МГ-подпрограммы и происходят. Не составляло проблемы программно выровнять паузы между фронтами.

И очень сомневаюсь, чтобы у кого-то был настолько музыкальный слух, чтобы заметить "рванность" звука. И это легко выяснить. Достаточно написать программку выдающую длинную цепочку нулевых битов. А затем дать тому, кто претендует на музыкальный слух такой же, как у Моцарта, послушать эту запись и запись пилотона СПЕЦИАЛИСТА. Пусть попробует отличить, где "рваный" тон, а где чистый.

HardWareMan, в приведенном фрагменте ошибка:



.
LOOP: LD A,(HL)
CALL SVBYTE
INC HL
DEC BC
OR A
JP NZ,LOOP


Вообще-то, для организации цикла в МГ-подпрограммах ОРИОНА, СПЕЦИАЛИСТА и РК86 в подпрограммах SV_massiv и LD_massiv используется не задание числа байтов в BC, а сравнение текущего адреса с адресом конца блока. Для чего вызывается п/п-мма CMPDH, сравнение HL и DE, выставляющая флаг Z. Это конечно сути примера не меняет, но всё же лучше реальный текст. А ошибку исправьте и я отредактирую этот пост.

А если цикл по счётчику, то чтобы не ошибаться и не вводить больше строк лучше пользоваться макрокомандой



.
LOOP MACRO ADDR
DEC BC
LD A,B
OR C
JP NZ,ADDR ; JR для Z80
ENDM

HardWareMan
20.07.2017, 18:02
barsik, уйди, постылый. Да, я в примере забыл MOV A,B (MOV а не LD!!!), и написал A вместо C в команде ORA. Да только вот это синтезированный пример. Хотите увидеть реальный? Вот:
http://savepic.ru/15004860.png
И он реально рваный. В отличие от Спектрумских трелей. Так что сгинь, тебя сюда никто не звал.

barsik
20.07.2017, 18:21
barsik, уйди, постылый... Так что сгинь, тебя сюда никто не звал
Это уже перебор. Это неспровоциорованное хамство. Официально прошу модератора сделать HardWareMan-у очередное китайское предупреждение за нарушение правил форума.

Позавчера Вы обнаружили мою ошибку в методе адресации 6502, но я же не хамил из-за этого. Зачем так раздражаться из-за пустяков? Хамить просто глупо, Вы же не становитесь счастливее, когда портите мне настроение?


это синтезированный пример. Хотите увидеть реальный?
С чего Вы взяли, что я этого хочу? Зачем лишнее подтверждение того, что я писал? Я имел полноценный исходник ROM-BIOS-ов СПЕЦИАЛИСТА и РК, причём с осмысленными названиями меток и комментариями 30 лет назад.

Кстати, если бы в п/п-мме вывода массива использовали не сравнение адресов, а цикл по счётчику как в Вашем примере, то колебания периодов на границе байтов были бы меньше и звук был бы более чистым. Из-за разницы в кодах на слух пилотон выдаваемый специалистовским SP-Copy и ленинградским монитором отличаются от пилотона волковского монитора. Это происходит оттого, что в мониторе для отсчёта полу-периода (при выдаче бита) не используется тупая задержка в цикле, а во время задержки процессор выводит на экран адрес куда грузится считываемый (или откуда записываемый) байт. А в SP-Copy в паузе между фронтами процессор вообще гоняет по экрану ксониксных жориков. Т.к за 40% периода вывода бита процессор не успевает вывести даже одну цифру в графический экран, то за это время выводится только часть цифры.

А зачем с помощью IDA дизассемблировать в LST-файл, зачем нужны адреса, только загромождают ? Если дизассемблировать в исходник, то этих ненужных адресов не будет.

HardWareMan
20.07.2017, 18:23
Это уже перебор. Это неспровоциорованное хамство. Официально прошу модератора сделать HardWareMan-у очередное китайское предупреждение за нарушение правил форума.

Доносчику первый кнут.

Позавчера Вы обнаружили мою ошибку в методе адресации 6502, но я же не хамил из-за этого. Зачем так раздражаться из-за пустяков? Хамить просто глупо, Вы же не становитесь счастливее, когда портите мне настроение?
Вы там корректировали цитату. Цитату, Карл!

tnt23
21.07.2017, 01:47
"Достаточно написать программку выдающую длинную цепочку нулевых битов. А затем дать тому, кто претендует на музыкальный слух такой же, как у Моцарта, послушать эту запись и запись пилотона СПЕЦИАЛИСТА. Пусть попробует отличить, где "рваный" тон, а где чистый."

Вопреки расхожему мнению, что Моцарта отравил Сальери, достоверно установлено, что смерть наступила в результате прослушивания записи СПЕЦИАЛИСТА. (Бетховен после Ориона-128 выжил, хотя и оглох)

svofski
12.12.2018, 11:59
Обновил ассемблер.

https://svofski.github.io/pretty-8080-assembler/

Сделал то, что вообще хотел сделать с самого начала, но тогда это было сложнее реализовать. Теперь листинга как такового нет, или можно сказать, что редактируется прямо листинг. Текстовый редактор сильно отличается от затычки, что была раньше. Это Ace, по ощущениям примерно как Sublime Text или Atom. Нормально работает поиск, есть множественные курсоры. Полный список клавиатурных команд (https://github.com/ajaxorg/ace/wiki/Default-Keyboard-Shortcuts).

Фичи навигации с попап-менюшками я не стал делать, оставил только подстветку кросс-референсов и тултип с адресом метки. Из собственного 10-летнего опыта пользования прекрасмом, попапы для навигации оказались не очень полезными даже при работе с внушительного размера сорцами.

Сам ассемблер практически не менялся. Чуть-чуть, надеюсь, улучшил подсветку ошибок. Убрал лишние служебные директивы. Теперь только .project и .tape. Если нужен hex, есть кнопка hex итд.

P.S. Поскольку пользователи ассемблера для 8080 по определению консервативны, старый ассемблер не пропал, а переехал на https://svofski.github.io/pretty-old-8080-assembler/

HardWareMan
12.12.2018, 20:20
svofski, Сырки можно для зазеркаливания? Напомню, он у меня здесь (http://hwm.us.to/pretty-8080-assembler/).

svofski
12.12.2018, 20:23
HardWareMan, одноименная репа на гитхабе: https://github.com/svofski/pretty-8080-assembler

А ты как зеркалишь, вручную? Потому что я же меняю все время что-то, а зеркало получается отстает.

HardWareMan
12.12.2018, 21:59
А ты как зеркалишь, вручную? Потому что я же меняю все время что-то, а зеркало получается отстает.
Да всё никак руки не доходят автоматизировать. А того что есть хватало.

svofski
13.12.2018, 02:58
Пока руки чешутся:
* исправил склеивающиеся пробелы в db: "a b" генерировала "a b" (вот точь в точь как на этом форуме =)
* сделал поддержку ivagor-синтаксиса с разделением инструкций через \ и добавил в честь этого рыбу фугу
* многоточие в сточной канаве открывает попап с дампом, что неплохо сочетается с предыдущим пунктом

ivagor
13.12.2018, 06:47
ivagor-синтаксиса
Все же tasm-синтаксиса, просто я сравнительно активно использую эту возможность.

svofski
17.12.2018, 14:48
Переделал вычисление меток. Внутри изменилось много, снаружи, надеюсь, заметно только хорошее. Из заметных эффектов:
* EQU стали более полноценными, могут ссылаться друг на друга, использовать отрицательные числа итд
* то же самое с обычными выражениями
* показываются перекрестные ссылки в тултипах. Если перед меткой есть блочный комментарий, он приклеивается к тултипу

И заодно рыбные плюшки:
* можно давать ссылки на внешние сорцы. Они должны быть на сервере, который способен отдавать их по прямой ссылке в виде простого текста. Прикольно полистать, например, CP/M 2.2 (https://svofski.github.io/pretty-8080-assembler/?https://raw.githubusercontent.com/svofski/pretty-8080-assembler/master/test/tests/cpm22.asm)
* можно шарить через pastebin (https://svofski.github.io/pretty-8080-assembler/?https://pastebin.com/raw/LcHRGmvH), хотя pastebin против такого использования и это наверное ненадолго
* небольшие примеры можно запихнуть прямо в data url (https://svofski.github.io/pretty-8080-assembler/?data:application/octet-stream;base64,ICAgICAgICAucHJvamVjdCB1cmwuY29tDQog ICAgICAgIG9yZyAkMTAwDQoJbXZpIGMsIDkNCglseGkgZCwgbW Vzc2FnZQ0KICAgICAgICBjYWxsIDUNCiAgICAgICAgcmV0DQpt ZXNzYWdlIGRiICdoZWxsbyBmcm9tIGRhdGEgdXJpJywkZCwkYS wnJCc=), такая ссылка будет независимой от внешних ресурсов, но размер ограничен

HardWareMan
18.12.2018, 13:01
Ну, вот и всё. Дошли руки - запилил скрипт автоматического обновления прекрасного ассемблера прямо из гитхаба. Поставил раз в сутки в 0 по гринвичу (3 утра по МСК). Хотя, там можно и ручным методом сделать.

svofski
18.12.2018, 13:20
HardWareMan, теоретически обновление зеркала можно настроить как автоматическую билд процедуру ;)

HardWareMan
18.12.2018, 13:26
Ну можно, но и так работает. Я еще сделал архивирование текущего варианта в бэкап устройство. Так что еще и архив версий будет. Так что норм.
https://jpegshare.net/images/96/ef/96efedf0a01b6369417abd546a6576d9.png

HardWareMan
20.12.2018, 16:41
Фигачит, аж пиджак заворачивается!
https://jpegshare.net/images/29/62/29628a423a0b586612e884f1d85e03ef.png

tnt23
18.04.2019, 23:42
svofski, а сложно будет добавить в ПрекрАсм псевды dup и edup?

svofski
20.04.2019, 03:11
tnt23, смотря что ты имеешь ввиду.

tnt23
20.04.2019, 07:23
tnt23, смотря что ты имеешь ввиду.

Что-то типа такого - https://k1.spdns.de/Develop/Projects/zasm/Documentation/z65.htm

HardWareMan
20.04.2019, 07:44
tnt23, эти дупы совсем не каноничные дупы, хотя и логичные. Обычно dup (8) означало 8 байт данных значения предыдущего db xx. А тут можно еще и код дупить. И, поди, если локальную метку @@ использовать можно?

svofski
20.04.2019, 09:57
tnt23, ты в завуалированной форме предлагаешь мне сделать макроассемблер.

tnt23
20.04.2019, 14:31
tnt23, эти дупы совсем не каноничные дупы, хотя и логичные. Обычно dup (8) означало 8 байт данных значения предыдущего db xx. А тут можно еще и код дупить. И, поди, если локальную метку @@ использовать можно?

Да локальная метка мне не нужна (пока), а вот спрятать унылую копипасту хочется.

- - - Добавлено - - -


tnt23, ты в завуалированной форме предлагаешь мне сделать макроассемблер.

Лишь малую его часть.

svofski
20.04.2019, 14:44
Это наверное со стороны так кажется.

tnt23
20.04.2019, 15:09
Ладно, я же просто спросил.

HardWareMan
20.04.2019, 15:43
tnt23,
https://jpegshare.net/images/d8/15/d815b2ac6601830cca16ce75f20434ed.jpg
http://samoeveseloe.ru/media/k2/items/cache/31776f6e6bf414b76f4b8377969aab66_XL.jpg

ivagor
08.05.2019, 17:13
Похоже тема переросла свое название и стала более общей, поэтому спрошу здесь.
Скачал этот (https://github.com/svofski/prettyasm) вариант прекрасма. До этого скачал и установил node.js. Инстальнул pasm (npm install -g). И что-то pasm ругается

b2m
08.05.2019, 17:44
Windows Script Host? :)
У тебя что с .js ассоциировано?

ivagor
08.05.2019, 17:51
Windows Script Host?
Да, он. А что нужно установить/ассоциировать?

HardWareMan
08.05.2019, 17:55
Ну это же жабаскрипт (не путать с жабой), разве нет?

b2m
08.05.2019, 19:50
Жабаскрипт жабаскрипту рознь. В зависимости от того, кем выполняется, будут ньюансы. Браузер, WSH или Node.JS.


А что нужно установить/ассоциировать?
Я бы не стал. Консоль - наше всё: node index.js file.asm file.lst.html file.hex

- - - Добавлено - - -

Есть предположение, почему не работает как написано. Командный файл для запуска устанавливается в %user%/AppData/Roaming/npm, а у нас с тобой PATH туда не установлен. К тому-же файл pasm.js совпадает с именем пакета, поэтому происходит попытка открыть его с помощью ассоциации при подаче команды pasm в каталоге с проектом. Вообще-то, после npm install -g этот каталог уже не нужен (только если для деинсталляции). Запуск из другого каталога проясняет проблему.

ivagor
08.05.2019, 20:06
node index.js file.asm file.lst.html file.hex
Спасибо, получилось!

- - - Добавлено - - -


Запуск из другого каталога проясняет проблему.
Да, из другого каталога сработало как написал svofski в readme

- - - Добавлено - - -

Самое неприятное, что похоже онлайн и стендэлон версии прекрасма разъехались и в стендэлоне ark.asm выдает ошибки unresolved label и error (это похоже из-за \), жалко.

svofski
08.05.2019, 23:32
Рад, что вы без меня разобрались. Значит я более-менее нормально все выложил =)

+1 к тому, что написал b2m. Это не npm-овый проект, поэтому его не получается установить с помощью npm -g. Но его можно запускать node, что и было продемонстрировано. Я вообще запускал его через v8, что по крайней мере мне в далеком каком-то там году было просто проще технически. Ну и вообще это больше не столько проект как проект, сколько просто инструментарий для сборки Рива Рейда.

Версии правда разъехались, но их нетрудно склеить обратно. Потому что ассемблер сам по себе в онлайн-версии на самом деле тоже отдельный (https://github.com/svofski/pretty-8080-assembler/blob/master/assembler.js) и фактически его можно так же запускать. Правда, не хватает include. Постараюсь найти силы съехать их обратно в ближайшее время.

svofski
09.05.2019, 03:58
P.S. ох. вспомнил, что я же делал его именно под npm. Во даю =)

ivagor, у тебя ошибка эта вылезает из-за того, что винда пытается исполнить pasm.js из текущего каталога вместо того, что npm установил в свое чрево. Запусти pasm откуда-нибудь еще и все будет ок.

ivagor
09.05.2019, 07:37
Запусти pasm откуда-нибудь еще и все будет ок.
Дык под чутким руководством b2mа уже

Да, из другого каталога сработало как написал svofski в readme


Постараюсь найти силы съехать их обратно в ближайшее время.
Было бы здорово.
Наверно еще надо RR попробовать собрать.

- - - Добавлено - - -

RR получилось собрать, но я только собрал бинарник из incursion.asm (питон и эксомизер не трогал), и он даже заработал.

Vladimir_S
19.01.2022, 17:41
svofski. привет! Длинные файлы неудобно проверять на синтаксические ошибки.
Пришлось малость покопаться. Не против?

svofski
20.01.2022, 12:49
svofski. привет! Длинные файлы неудобно проверять на синтаксические ошибки.
Пришлось малость покопаться. Не против?

Дело хорошее. Можно diff хоть сюда приаттачить, если на гитхабе лень.

Vladimir_S
21.01.2022, 03:48
svofski, поместил в предыдущий пост.