- Code: Select all
ZXKeyMap=acedit
и эмулятор падает с таким сообщением:
- Code: Select all
exception C0000005 at eip=004C5A46
eax=00000000 ebx=00000000 ecx=00002E25 edx=002A0000
esi=00000001 edi=00000003 ebp=0012F660 esp=00128650
ZXKeyMap=acedit
exception C0000005 at eip=004C5A46
eax=00000000 ebx=00000000 ecx=00002E25 edx=002A0000
esi=00000001 edi=00000003 ebp=0012F660 esp=00128650
в первом ZXMAK v0.285 работает нормально, но там движок ВГ93 навороченый. В ZXMAK.NET и ZXMAK2 движок ВГ93 на 70% от unreal (а машина состояний на все 90%), поэтому тоже не работает
проблема заключается в некорректной машине состояний для комманд позиционирования, а также наличию лишних задержек, которые явно не нужны. При отключении fast (wd93_delay), все эти задержки убираются и поэтому все начианает работать.
Суть в том что время выполнения команды SEEK занимает очень много времени. В то время как CHORDOUT уже через 656 тактов начинает выполнять следующую команду, т.к. дорожки назначения и в регистре track совпадают.
Но есть также проблема с машиной состояний. Даже если вставить проверку и уменьшить задержку до минимума, при включенном wd93_delay нужно несколько раз обратиться к ВГ93 чтобы позиционирование завершилось. А CHORDOUT не делает ни одного обращения между отправкой команды SEEK и следующими действиями.
Эту проблему я устранил в ZXMAK205, но машину состояния конечно нужно переделывать. В unreal она даже не соответствует документации на WD179x.
moroz1999 wrote:для успокоения совести перепроверил в новой версии, не пашет.
deathsoft wrote:Выложи сюда trd с программой, ну и посмотри флажки i: там поди 00
DEVICE ZXSPECTRUM128
ORG #0
START
INI
DI
JP INI_CONT+#8000
org #38
RST38 ;тут только счётчик прерываний
PUSH HL
ld hl,COUNTER
INC (HL)
JR NZ,.L1
INC HL
INC (HL)
JR NZ,.L1
INC HL
INC (HL)
JR NZ,.L1
INC HL
INC (HL)
.L1 POP HL
ei
ret
INI_CONT
ld a,1 ;открываю порты
out (#BF),a
LD BC,#3FF7 ;подключаю ОЗУ в нулевую банку
LD A,#40
OUT (C),A
LD hl,#8000 ;копирую себя в нулевую банку
ld de,#0000
ld bc,#4000
LDIR
LD SP,#4000
ld bc,#ff77 ;включаю текстмод
ld a,6
out (c),a
xor a ;закрываю порты
out (#BF),a
jp .l1
.l1 ei
halt ;а тут херня какая то "CPU HALTED", прерывания не срабатывают.
di
ld hl,COUNTER.HI+1 ;а это просто чтобы что то было
ld a,(hl)
or a
jr .l1
COUNTER
.LO WORD 0
.HI WORD 0
ENDPROG
Users browsing this forum: No registered users and 48 guests