как то странно стартует игрушка, стек зачемто из басик\переменных берёт, который в теле игры оказывается. потом в бейсик идет и возвращается на #6000
Вид для печати
как то странно стартует игрушка, стек зачемто из басик\переменных берёт, который в теле игры оказывается. потом в бейсик идет и возвращается на #6000
Там сделано выставление нового адреса RAMTop - для этого адрес системной процедуры обработки ошибки естественно берется с вершины стека, адрес которой и хранится в системных переменных, - иначе его не узнать. Если системные переменные выставлены не правильно запускающей программой, то будут проблемы, что и наблюдаем.Цитата:
Сообщение от DimkaM
Также определяется адрес загрузки кодового блока и, если он не рабочий, то блок переносится на рабочие адреса; таким образом кодовый блок можно грузить по любому разумному адресу, который и будет адресом запуска.
Корме того, проверяется контрольная сумма блока, чтобы убедиться, что загрузка прошла без ошибок.
Если загрузить FATALL с FAT-устройства средствами ERS, а потом из него мой Harrier Attack, то будут теже проблемы. Ошибка кроется где-то в ERS.
Никаких проблем нет, если загрузить кодовый блок моим бутом: http://grands.land.ru/creative.htm или из BASIC:Код:CLEAR адрес_загрузки-1 : RANDOMIZE USR 15619 : REM : LOAD...CODE адрес_загрузки
RANDOMIZE USR адрес_загрузки
В настроечной части управление Q/A/O/P/Space (один из вариантов) или мышью/джойстиком. Там можно выбрать управление для игры (ради этого мной и затевалась эта адаптация, поскольку в оригинале управление очень не удобное). Если ничего не менялось, то в игре задействованы клавиши: S/X/O/P, A - бомбы, Space - ракеты.Цитата:
Сообщение от DimkaM
Кажется, ничего не перепутал. :)
Если что-то заинтересовало, могу подробнее написать.
Нашел упоминание об этой проблеме в одной из тем на оффициальном форуме:Цитата:
Сообщение от Grand
http://forum.nedopc.com/viewtopic.ph...=1019&start=10
Пришлось написать специальный блок кодов с программой, которая печатает на экране значения системных переменных системы ZX Spectrum: CHANS, PROG, VARS, E_LINE, WORKSP, STKBOT, STKEND, ERR_SP и RAMTOP; для чистоты эксперимента не используется ни единый вызов из ПЗУ, а печать производится в текстовом режиме 80x25. Вот текст, кому интересно.Цитата:
Сообщение от DimkaM
Скрытый текст
Код:;Процедура печати значений системных переменных
;системы ZX Spectrum (только для ZX Evolution).
;
ORG #6000
;
DI
;
;/ПОДГОТОВКА ТЕКСТОВОГО ЭКРАНА
LD A,%00010011;Вкл. ROM1, RAM3
CALL CFG128
;
;Очистка страницы атрибутов
LD HL,#C1C0
LD DE,#C1C1
LD BC,#E7E7-#C1C0
LD (HL),7
LDIR
;
LD A,%00011111;Вкл. ROM1, RAM7,SCR7
CALL CFG128
;
;Очистка стр.текстового экр.
LD HL,#C1C0
LD DE,#C1C1
LD BC,#E7E7-#C1C0
LD (HL)," "
LDIR
;\КОНЕЦ ПОДГОТОВКИ ЭКРАНА
;
LD A,%00000110;Вкл.текст.видеорежим
CALL DOS
;
;/ЧТЕНИЕ И ПЕЧАТЬ ЗНАЧЕНИЙ СИСТЕМНЫХ ПЕРЕМЕННЫХ...
LD HL,(23631);...CHANS
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23635);...PROG
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23627);...VARS
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23641);...E_LINE
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23649);...WORKSP
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23651);...STKBOT
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23653);...STKEND
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23613);...ERR_SP
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;
LD HL,(23730);...RAMTOP
LD A,H
CALL PRHEXB
LD A,L
CALL PRHEXB
LD A,13
CALL PR_TXT
;\
;
;Задержка до нажатия клавиши
XOR A
IN A,(#FE)
CPL
AND %00011111
JR NZ,$-6
XOR A
IN A,(#FE)
CPL
AND %00011111
JR Z,$-6
;
;Восстановл. видеорежима и конф. памяти.
LD A,%00000011;Вкл. станд.ZX-видеореж.
CALL DOS
;
LD A,%00010000;Вкл. ROM1, RAM0
EI
CFG128 LD BC,#7FFD
LD (23388),A
OUT (C),A
RET
;
;---
DOS LD BC,10835
PUSH BC
LD BC,#FF77
JP 15663
;---
;Печать байта в HEX
PRHEXB PUSH HL
PUSH AF
RRCA
RRCA
RRCA
RRCA
AND #0F
CALL PR_HEX
POP AF
AND #0F
CALL PR_HEX
POP HL
RET
PR_HEX CP #0A;Печать HEX-числа
JR C,$+4
ADD A,7
ADD A,48
;
;Драйвер печати в текстовом режиме (c) Grand, 2012
;(без скролинга и атрибутов и только в
;страницу, включенную в диапазон адресов #C000...#FFFF).
PR_TXT CP 13
a_txt LD HL,#C1C0;Операнд - тек.адр.в текст.экране
JR Z,prt1
LD (HL),A
LD A,H
XOR %00100000
LD H,A
BIT 5,H
JR NZ,prt2
LD A,L;Приращ.X
INC A
LD L,A
AND %00111111
CP 40
JR Z,prt1
prt2 LD (a_txt+1),HL
RET
prt1 RES 5,H
LD A,L;Приращ.Y
AND %11000000
ADD A,#40
LD L,A
JR NC,prt2
LD A,H
INC A
LD H,A
AND %00000111
JR NZ,prt2
LD HL,#C1C0
JR prt2
;---
;
[свернуть]
Вот какие значения системных переменных при запуске этого кодового блока с SD-карты средствами FATALL0.25 и ERS0.5:Видим, что, во-первых, в момент запуска блока кодов в своей области присутствует какая-то BASIC-программа, а во-вторых (и это самое главное!) в ERS не верно установлена переменная ERR_SP!Код:Имя переменной FATALL ERS
-------------- ------ ------
CHANS 5D26 5D26
PROG 5D3B 5D3B
VARS 5D70 5DB4
E_LINE 5D71 5DB5
WORKSP 5D73 5DB7
STKBOT 5D73 5DB7
STKEND 5D73 5DB7
ERR_SP 5FFC 770E
RAMTOP 5FFF 5FFF
Когда-то давно я обращал внимание автора на некорректный запуск кодов в FATALL'е. Savelij потом там кое-что исправил (но не всё), а в ERS, похоже, исправить забыл...
На досуге проанализировал код EVO-DOS на предмет соответствия его частей важным частям (которые используются в существующем ПО) TR-DOS V5.03, и вот что обнаружил.
Процедуры, обслуживающие Magic, 12090 (позиционирование), 11636 (запись сектора) и 11608 (запись секторов) - отсутствуют (вместо них #FF...#FF).
Другие процедуры, имеющие отношение к Magic, оставлены - 12133 (команда восстановления), 12119 (выдача команды и ожидание ее завершения), 12059 (чтение сектора, используется также и с адресов 12060 и 12079).
Не тронуты еще несколько важных процедур: 12225 (прерывание работы микроконтроллера, используется также и с адреса 12227), [i]697[/i} (останов дисковода, если в нем нет диска) и 16314 и 16341 (запись и чтение данных).
Все упомянутые выше процедуры используются, например, в адаптированных к TR-DOS играх, когда в условиях недостатка свободной памяти требуется организовать отгрузку и загрузку состояни игры и т.д.
Вообще, я уже сообщал (http://www.zx.pk.ru/showpost.php?p=337325&postcount=41), что нельзя трогать процедуры в диапазонах адресов 11635...11665, 12039...12136, 16314...16367; с осторожностью следует что-либо менять в 16050...16313. Также код в адресах 12227...12229, 7738...7740, 8179...8181, 12044...12046 и 10835...10837 используется для записи данных в регистры микроконтроллера.
Кроме этого, "исторически сложилось", что байт по адресу в TR-DOS #19 считается "кодом версии" - в 5.03 он равен #07, в 5.01 - #BD, а в EVO-DOS 0.3 он сейчас равен (видимо случайно) #E0.
чтото у пентева моя стали сдвинуты атрибуты влево от графики...
вот такая хрень всегда.
http://imglink.ru/pictures/03-08-12/...d2d7117487.jpg
Сорри если не увидел, при чтении каталога выдает FN. Что делать?
Неподскажете никто не подключал не тестил монитор Samsung SyncMaster 740N ?
нет возможности проверить а кота в мешке нехочется