Вот вытащил из этого архива список новых команд 580ВМ1 - они подменяют "дырки" в таблице инструкций ВМ80 плюс код #28 и #38 является префиксами CS и RS, второй из которых заменяет в далее идущей команде H,L,M на H1,L1,M1:Shaos wrote: и ещё: http://sensi.org/scalar/ware/582/В архиве находится описание системы команд процессора КР580ВМ1 и краткая инструкция по его установке в Вектор от Masterpiece. На векторе есть по крайней мере одна программа, использующая возможности КР580ВМ1 — intro к игре Колобиха от SES. Дополнительная информация по программному определению типа процессора приведена в Scaner №5.
Процессор КР580ВМ1 поддерживается в Эмулятор «Virtual Vector» начиная с версии 5.58.
В архиве представлена таблица для ассемблера The Telemark Assembler (TASM) Version 3.2 (автор Thomas N. Anderson), позволяющая компилировать программы для процессора КР580ВМ1 (подготовил Иван Городецкий).
Cм. также:
«Точность эмуляции КР580ВМ1» http://zx.pk.ru/showthread.php?t=11062
«Загадочный проц КР580ВМ1» http://zx.pk.ru/showthread.php?t=310
Автор: Masterpiece
Имя файла: vm1
Файл: 580vm1.zip (806 Кб)
Code: Select all
ADC H1 8C38
ADC L1 8D38
ADC M1 8E38
ADD H1 8438
ADD L1 8538
ADD M1 8638
ANA H1 A438
ANA L1 A538
ANA M1 A638
ANX 10
CMP H1 BC38
CMP L1 BD38
CMP M1 BE38
CS 28 // PREFIX CS
DAD H1 2938
DCMP B CB
DCMP D DD
DCR H1 2538
DCR L1 2D38
DCR M1 3538
DCX H1 2B38
DSUB B 08
DSUB D 18
INR H1 2438
INR L1 2C38
INR M1 3438
INX H1 2338
JOF * FD
LH1L1D ** 2A38
LH1L1X ED38
LHLX ED
LXI H1,** 2138
MB 28 // PREFIX MB
MOV B,H1 4438
MOV B,L1 4538
MOV B,M1 4638
MOV C,H1 4C38
MOV C,L1 4D38
MOV C,M1 4E38
MOV D,H1 5438
MOV D,L1 5538
MOV D,M1 5638
MOV E,H1 5C38
MOV E,L1 5D38
MOV E,M1 5E38
MOV H1,B 6038
MOV H1,C 6138
MOV H1,D 6238
MOV H1,E 6338
MOV H1,H1 6438
MOV H1,L1 6538
MOV H1,M1 6638
MOV H1,A 6738
MOV L1,B 6838
MOV L1,C 6938
MOV L1,D 6A38
MOV L1,E 6B38
MOV L1,H1 6C38
MOV L1,L1 6D38
MOV L1,M1 6E38
MOV L1,A 6F38
MOV M1,B 7038
MOV M1,C 7138
MOV M1,D 7238
MOV M1,E 7338
MOV M1,H1 7438
MOV M1,L1 7538
MOV M1,A 7738
MOV A,H1 7C38
MOV A,L1 7D38
MOV A,M1 7E38
MVI H1,* 2638
MVI L1,* 2E38
MVI M1,* 3638
ORA H1 B438
ORA L1 B538
ORA M1 B638
ORX 20
PCH1L1 E938
POP H1 E138
PUSH H1 E538
RS 38 // PREFIX RS
SBB H1 9C38
SBB L1 9D38
SBB M1 9E38
SH1L1D ** 2238
SH1L1X D938
SHLX D9
SMF0 0028
SMF1 7F28
SPH1L1 F938
SUB H1 9438
SUB L1 9538
SUB M1 9638
XRA H1 AC38
XRA L1 AD38
XRA M1 AE38
XRX 30
XTH1L1 E338
Code: Select all
cs
dad h1 ;H1L1=H1L1+H1L1
rs\ dad b ;H1L1=H1L1+BC
rs\ dad d ;H1L1=H1L1+DE
rs\ dad sp ;H1L1=H1L1+SP
cs\ dad b ;HL=HL+BC+CY
cs\ dad d ;HL=HL+DE+CY
cs\ dad h1 ;H1L1=H1L1+H1L1+CY
cs\ dad sp ;HL=HL+SP+CY
cs\ rs\ dad b ;H1L1=H1L1+BC+CY
cs\ rs\ dad d ;H1L1=H1L1+DE+CY
cs\ rs\ dad sp ;H1L1=H1L1+SP+CY
dcmp b
rs\ dcmp b ;H1L1-BC
cs\ dcmp b ;HL-BC-CY
cs\ rs\ dcmp b ;H1L1-BC-CY
dcmp d
rs\ dcmp d ;H1L1-DE
cs\ dcmp d ;HL-DE-CY
cs\ rs\ dcmp d ;H1L1-DE-CY
dcr h1
dcr l1
dcr m1
dcx h1
dsub b ;HL=HL-BC
rs\ dsub b ;H1L1=H1L1-BC
cs\ rs\ dsub b ;H1L1=H1L1-DE-CY
dsub d ;HL=HL-DE
rs\ dsub d ;H1L1=H1L1-DE
cs\ rs\ dsub d ;H1L1=H1L1-DE-CY
P.P.S. Тут как-то странно - код #28 (префикс CS) ещё приписан опкоду MB, который судя по описанию является префиксом дополнительного адресного пространства - меняет бит MF (D3 во флагах) на противоположный на время выполнения следующей команды), а так MF можно установить командами SMF0 и SMF1. Также судя по описанию префикс CS воздействует только на команды DAD, DSUB и DCMP, т.е. во всех остальных случаях он определяется как префикс MB.
P.P.P.S. Судя по всему автор таблицы доп.инструкций Иван Городецкий неправильно указал M1 в наименованиях некоторых команд т.к. по коду там обращение к [H1L1], а по доке M1 это обращение в "теневую" память, т.е. по тому же самому адресу [HL], что и в случае M, но с инвертированным старшим адресом памяти MF - т.е. использование префикса MB (#28), а не префикса RS (#38)...
