Просмотр полной версии : Бейсик и плеер на прерываниях.
NEO SPECTRUMAN
09.01.2012, 19:27
Столкнулся с проблемой вешания плеера на прерывания в программах на бейсике.
Компилю Вортексом http://bulba.untergrund.net/vortex.htm
Вот что у меня на обработчике прерываний
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И вроде бы работает. Но...
Глюки вроде начинаются при работе графических подпрограмм ПЗУшки.
Пример зависона.
32094
Исходник для EmuZwin-a.
32093
Вместо плеера вешал Кучку LDIR-ов, Call-ов 0038, Out-ов по разным портам но глюков небыло.
Глюки вроде начинаются при работе графических подпрограмм ПЗУшки.
Может стек переполняется? Попробуй его подвинуть повыше.
---------- Post added at 19:33 ---------- Previous post was at 19:31 ----------
У меня все работало отменно: http://www.n-discovery.spb.ru/data/others/sokoban.zip
NEO SPECTRUMAN
09.01.2012, 19:39
Может стек переполняется? Попробуй его подвинуть повыше.
Да стек уже двигал. Вроде с ним всё ОК.
В придачу на время работы плеера указатель стека B000.
То есть у меня сейчас для стека по 4 Кб и в ту и в другую сторону.
А кто будет сохранять альтернативный AF?
NEO SPECTRUMAN
09.01.2012, 19:44
А кто будет сохранять альтернативный AF?
А где видно что я его не сохранил?
Перепроверил. Вот тут видно что Push-ытся всё.
http://zx.pk.ru/attachment.php?attachmentid=32095&d=1326124045
John North
09.01.2012, 19:54
А зачем стек переставляешь внутри обработчика прерываний?
NEO SPECTRUMAN
09.01.2012, 19:55
А зачем стек переставляешь внутри обработчика прерываний?
Пытался избавиться от этого глюка. Изначально указатель стека не трогал.
Плеер юзает стек. Решил что возможно глюк из за него.
SAM style
09.01.2012, 20:04
exx не меняет af и af'. Так что af' ты не сохранил.
NEO SPECTRUMAN
09.01.2012, 20:14
Для этого EX af,af1
Сейчас испытаю.
---------- Post added at 18:14 ---------- Previous post was at 18:08 ----------
Поставил после каждого EXX
EX AF,AF'
Да вроде пока работает.
null_device
09.01.2012, 20:37
NEO SPECTRUMAN, зачем переключать целых восемь раз наборы регистров, если можно только два (также, в конце можно заменить связку call n, ret на один jp n)?
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
John North
09.01.2012, 21:00
null_device, я вот именно так и пользовал всегда) ну тока количество call менялось.
Хотел написать про это, но с тела это набрать нереально долго)
NEO SPECTRUMAN
10.01.2012, 00:01
также, в конце можно заменить связку call n, ret на один jp n
В этом месте вообще прекрасно подходит RST 38.
зачем переключать целых восемь раз наборы регистров
Первоначально у меня было как вы описали (только без ex af,af'). Но после зависания я написал такой вариант как в 1м посте.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot