PDA

Просмотр полной версии : Инициализация TR-DOS



valker
23.03.2007, 12:00
Вплотную подошёл к тому, чтобы разрабатываемая программа считала наконец-таки что-то с диска. Пишу на IAR-C, компилирую в sna-формат, а посему вопрос:
Какие системные переменные нужно инициализировать, чтобы потом можно было вызывать TR-DOS через 0x3D13. В "ZX-Spectum и TR-DOS для пользователей и программистов 3-е издание, Питер, С-Петербург, 1994" на странице 179 написано:
Точка по адресу 15649 (прим. valker: 0x3D21)... её назначение - установка системы TR-DOS. При этом в памяти открывается область системных переменных и происходит её инициализация.Следователь о вопрос такой:
Какие переменные должны быть установлены ПЕРЕД вызовом 0x3D21?

Заранее спасибо.

Sonic
23.03.2007, 12:09
Логично предположить, что программу ты уже загрузил с диска. При этом TR-DOS уже была инициализирована и делать ничего не надо. Просто работаешь и все.
Это нужно только в том случае, если первым обращением было обращение к #3D13 после команды NEW или USR 0. Это возможно только если мы имеем резидент, оставшийся после NEW, или загрузили нашу программу с магнитофона. Это редкость.
Я сам никогда этим не пользовался. Можешь почитать дизассемблер - там я писал все параметры. Кажется ничего не надо (хотя подразумевается что бейсик-48 жив и здоров). Только тогда надо еще кучу всего делать - определять дисководы например.
В общем гемор. Если действительно не надо - не связывайся.

valker
23.03.2007, 12:16
Логично предположить, что программу ты уже загрузил с диска. При этом TR-DOS уже была инициализирована и делать ничего не надо. Просто работаешь и все.
Это нужно только в том случае, если первым обращением было обращение к #3D13 после команды NEW или USR 0. Это возможно только если мы имеем резидент, оставшийся после NEW, или загрузили нашу программу с магнитофона. Это редкость.
Я сам никогда этим не пользовался. Можешь почитать дизассемблер - там я писал все параметры. Кажется ничего не надо (хотя подразумевается что бейсик-48 жив и здоров). Только тогда надо еще кучу всего делать - определять дисководы например.
В общем гемор. Если действительно не надо - не связывайся.

Видимо, при загрузке на реальном спектруме так и будет. НО! Дело в том, что я работаю под эмулятором (unreal) и гружу подготовленный образ в sna-формате. В нём по всем адресам системных переменных и бейсика и TR-DOS лежат банальные нули.

Evgeny Muchkin
23.03.2007, 14:26
В нём по всем адресам системных переменных и бейсика и TR-DOS лежат банальные нули.
Проинициализируй все, сохрани все эти переменные. А потом запихивай их каждый раз в sna-файл.

Biland
06.01.2022, 20:34
Скиньте dump нужных инициализированных переменных системы и tr-dos, чтобы из .sna работать с tr-dos. Другое решение, тоже подойдёт.

Bedazzle
07.01.2022, 00:08
Скиньте dump нужных инициализированных переменных системы и tr-dos, чтобы из .sna работать с tr-dos. Другое решение, тоже подойдёт.

Если в лоб, то

1. Загрузить эмуль
2. Выполнить randomize usr 15619: rem: list
3. Сохранить область системных переменных

Raydac
07.01.2022, 13:38
вроде SNA формат ничего не знает про трдос и у него нет флага должна или нет быть активирована пзу трдоса, даже в 128к расширении там только добавлен PC счетчик и 7ffd

goodboy
07.01.2022, 14:33
вроде SNA формат ничего не знает про трдос и у него нет флага должна или нет быть активирована пзу трдоса, даже в 128к расширении
перечитай описание формата

Raydac
07.01.2022, 22:19
перечитай описание формата
и где там? (https://sinclair.wiki.zxnet.co.uk/wiki/SNA_format)

goodboy
07.01.2022, 23:48
Offset Size Description
------------------------------------------------------------------------
0 27 bytes SNA header (see above)
27 16Kb bytes RAM bank 5 \
16411 16Kb bytes RAM bank 2 } - as standard 48Kb SNA file
32795 16Kb bytes RAM bank n / (currently paged bank)
49179 2 word PC
49181 1 byte port 0x7ffd setting
49182 1 byte TR-DOS rom paged (1) or not (0)
49183 16Kb bytes remaining RAM banks in ascending order
...
------------------------------------------------------------------------
Total: 131103 or 147487 bytes

Raydac
08.01.2022, 00:00
49182 1 byte TR-DOS rom paged (1) or not (0)
да, точно, в спеккивики не написали просто

Biland
09.01.2022, 20:32
Для Kay1024 получилось так, без оптимизации.


ld sp,#5fe8

org #5c00- 27
;1c00

db #00,#20,#00,#04,#00,#04,#00,#5b,#00,#00,#27,#1f,#f 7,#02,#e7,#3f
db #2b,#27,#e7,#3f,#7a,#26,#31,#0d,#67,#26,#c9,#ff,#0 0,#00,#00,#ff
db #00,#22,#0d,#0d,#23,#02,#00,#00,#00,#16,#07,#01,#0 0,#06,#00,#0b
db #00,#01,#00,#01,#00,#06,#00,#10,#00,#00,#00,#00,#0 0,#00,#00,#00
db #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#0 0,#00,#00,#00
db #00,#00,#3c,#40,#00,#ff,#dc,#01,#fc,#5f,#00,#00,#0 0,#0a,#00,#ff
db #1e,#00,#01,#38,#00,#00,#80,#5d,#00,#00,#26,#5d,#2 6,#5d,#3b,#5d
db #80,#5d,#3a,#5d,#81,#5d,#81,#5d,#7f,#5d,#00,#00,#8 3,#5d,#83,#5d
db #83,#5d,#2d,#92,#5c,#10,#02,#00,#00,#00,#00,#00,#0 0,#00,#00,#4a
db #17,#9a,#00,#9b,#00,#00,#58,#ff,#00,#00,#00,#00,#0 0,#21,#17,#00
db #40,#e0,#50,#21,#18,#21,#17,#01,#38,#00,#38,#00,#0 0,#af,#d3,#f7
db #db,#f7,#fe,#1e,#28,#03,#fe,#1f,#c0,#cf,#31,#3e,#0 1,#32,#ef,#5c
;1cc0
db #c9,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#0 0,#ff,#5f,#ff
db #ff,#f4,#09,#a8,#10,#4b,#f4,#09,#c4,#15,#53,#81,#0 f,#c9,#15,#52
db #34,#5b,#2f,#ff,#ff,#03,#ff,#00,#00,#00,#22,#31,#3 5,#36,#31,#36
db #22,#03,#4f,#5e,#00,#80,#c1,#02,#6d,#61,#69,#6e,#2 0,#20,#20,#20
db #43,#00,#00,#c1,#02,#03,#01,#01,#00,#00,#00,#00,#0 0,#00,#00,#04
db #01,#00,#00,#00,#00,#08,#ff,#1b,#ff,#80,#03,#25,#5 d,#6e,#5d,#8a
db #5d,#09,#00,#00,#00,#00,#00,#ff,#00,#00,#00,#ff,#6 0,#5d,#fc,#5f
db #ff,#2c,#aa,#00,#00,#01,#02,#e6,#5f,#01,#00,#f7,#2 2,#62,#00,#00
db #ff,#f4,#09,#a8,#10,#4b,#f4,#09,#c4,#15,#53,#81,#0 f,#c4,#15,#52
db #34,#5b,#2f,#5b,#50,#80,#00,#0a,#0d,#00,#fd,#32,#3 4,#35,#37,#34
db #0e,#00,#00,#ff,#5f,#00,#0d,#00,#14,#1e,#00,#f9,#c 0,#31,#35,#36
db #31,#39,#0e,#00,#00,#03,#3d,#00,#3a,#ea,#3a,#ef,#2 2,#6d,#61,#69
db #6e,#22,#af,#33,#32,#37,#36,#38,#0d,#00,#1e,#0e,#0 0,#f9,#c0,#33
db #32,#37,#36,#38,#0e,#00,#00,#00,#60,#00,#0d,#80,#0 d,#80,#00,#00
db #00,#60,#00,#00,#00,#63,#5e,#04,#00,#00,#00,#00,#8 0,#00,#00,#00

org #5fe8 ;стек
#2b,#2d,#65,#33,#58,#27,#ed,#10,#0d,#00,#1e,#00,#8 5
db #1c,#14,#5b,#fd,#17,#21,#18,#1d,#5b,#00,#3e

Dimon spb
04.04.2022, 15:40
Я делаю так, по всем известной книжке. Выбор дисковода удобен тем, что можно в Unreal по умолчанию в дисковод, например, B: установить образ .trd, чтобы пр запуске .sna он мог с ним работать

LD C,0 : CALL #3D13; Инициализация ВГшки (на всякий случай, не уверен, что надо)
CALL 15649; Инициализация TR-DOS
XOR A : LD C,1 : CALL #3D13; Выбор дисковода (0, 1, 2, 3 в A)
LD C,#18 : CALL #3D13; Настройка на дискету