Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Бейсик и плеер на прерываниях. (http://zx-pk.ru/showthread.php?t=17817)

NEO SPECTRUMAN 9th January 2012 20:27

Бейсик и плеер на прерываниях.
 
2 Attachment(s)
Столкнулся с проблемой вешания плеера на прерывания в программах на бейсике.

Компилю Вортексом http://bulba.untergrund.net/vortex.htm

Вот что у меня на обработчике прерываний
Quote:

EXX
PUSH AF
PUSH BC
PUSH DE
PUSH HL
EXX
PUSH AF
PUSH BC
PUSH DE
PUSH HL
PUSH IX
PUSH IY

LD (#B000),SP
LD SP,#A000

CALL #C005

LD SP,(#B000)

POP IY
POP IX
POP HL
POP DE
POP BC
POP AF
EXX
POP HL
POP DE
POP BC
POP AF
EXX
CALL #0038
RET
И вроде бы работает. Но...

Глюки вроде начинаются при работе графических подпрограмм ПЗУшки.

Пример зависона.
Attachment 32094

Исходник для EmuZwin-a.
Attachment 32093


Вместо плеера вешал Кучку LDIR-ов, Call-ов 0038, Out-ов по разным портам но глюков небыло.

newart 9th January 2012 20:33

Quote:

Originally Posted by NEO SPECTRUMAN (Post 453719)
Глюки вроде начинаются при работе графических подпрограмм ПЗУшки.

Может стек переполняется? Попробуй его подвинуть повыше.

---------- Post added at 19:33 ---------- Previous post was at 19:31 ----------

У меня все работало отменно: http://www.n-discovery.spb.ru/data/others/sokoban.zip

NEO SPECTRUMAN 9th January 2012 20:39

Quote:

Может стек переполняется? Попробуй его подвинуть повыше.
Да стек уже двигал. Вроде с ним всё ОК.
В придачу на время работы плеера указатель стека B000.
То есть у меня сейчас для стека по 4 Кб и в ту и в другую сторону.

Vitamin 9th January 2012 20:43

А кто будет сохранять альтернативный AF?

NEO SPECTRUMAN 9th January 2012 20:44

1 Attachment(s)
Quote:

А кто будет сохранять альтернативный AF?
А где видно что я его не сохранил?

Перепроверил. Вот тут видно что Push-ытся всё.
http://zx.pk.ru/attachment.php?attac...5&d=1326124045

John North 9th January 2012 20:54

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

NEO SPECTRUMAN 9th January 2012 20:55

Quote:

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

SAM style 9th January 2012 21:04

exx не меняет af и af'. Так что af' ты не сохранил.

NEO SPECTRUMAN 9th January 2012 21:14

Для этого EX af,af1

Сейчас испытаю.

---------- Post added at 18:14 ---------- Previous post was at 18:08 ----------

Поставил после каждого EXX
EX AF,AF'

Да вроде пока работает.

null_device 9th January 2012 21:37

NEO SPECTRUMAN, зачем переключать целых восемь раз наборы регистров, если можно только два (также, в конце можно заменить связку call n, ret на один jp n)?

Code:

push ix
push iy
push bc
push de
push hl
push af
exx
push bc
push de
push hl
ex af,af'
push af

call #C005

pop af
pop hl
pop de
pop bc
ex af,af'
pop af
exx
pop hl
pop de
pop bc
pop iy
pop ix
jp #0038



All times are GMT +4. The time now is 00:45.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.