Хм, я не использую в софте ничего из RT-11 после загрузки игрух, но если что-то не так то ну в этой-то игре код на гитхабе, в кракоуте и ривер рейде оно чего-то похожее. Может где-то и накосячил, вот уж не знаю точно. После считывания данных через ЕМТ больше не должно быть никаких обращений к дискам.
Весь код чтения с диска:
Тут некий код дурной
Код:READFL: mov #MSG001, MSGADR ; possible error: device error
.fetch #BUF001, #DKN001 ; test device
bcc 10$
return
10$: mov #MSG002, MSGADR ; possible error: channel is active
.looku #AREA01, #7, #DKN001 ; test file, return R0-file size in blocks
bcc 20$
tstb @#52 ; check what error
beq 12$ ; it's channel is active?
mov #MSG003, MSGADR ; file not found
12$: sec
return
20$: ; reading prepare
mov R0, MAXBLK ; file size
clr CURBLK ; block to read
mov #MSG005, MSGADR ; possible error: file read error
mov #176640, R4
mov #176642, R5
40$: ; reading cycle
.readw #AREA01, #7, #BUF002, #256., CURBLK
bcs 90$ ; C=1 is error
tst R0 ; R0=readed words count
beq 50$ ; nothing readed? (eof?)
; readed, data in BUF002
inc CURBLK
mov #BUF002, R0
mov FILNUM, R2
asl R2
call @WRITAB(R2) ; call per-file write proc
cmp CURBLK, MAXBLK
blt 40$
; eof
50$: .close #7
clc ; set no error
return
90$: ; read error
tstb @#52 ; error word addr
beq 50$ ; no error - it's what? eof again?
.close #7
sec
return
[свернуть]
На эмуляторе UKNCBTL и правда показывает что мотор дисковода работает. Хм. Интересно конечно. А как его остановить получается тогда? (у меня железка с загрузкой через rs-232 и даже не знаю чего там с дисководом, но видимо это нехорошо)
>Если обращение к дисководу больше не продполагается, то можно просто вызввать подпрограмму.
>Код: CALL @#07132
>Если двигатель был запущен, он будет остановлен.
Это вот в ЦП или в ПП надо вызвать? В ПП наверное да? (блин у меня конечно там сильно портится вся память при загрузке, ну чтож.. работающий мотор дисковода это плохо и так нельзя)
UPD: попробовал и там и сям вызвать, в ПП просто все зависло, в ЦП выдало веселящую надпись ***СТОП*** :) Короче нужны еще способы как остановить мотор у дисковода :)
- - - Добавлено - - -
А вот это вот в ПП заработало. Я не знаю что оно делает но вроде мотор отключился после загрузки игрухи как показывает UKNCBTL.. Спс Алекс :) Чудеса какие-т, но оно сработало! Алилуйя :) Реально не знаю что сделал код, но мотор он отключил вроде.
(надо будет встроить в ривер рейд и в кракоут если найду уже как их скомпилять)
Получилось как-то так :) Но работает ведь да? У меня нет дисковода, могу только по Никитиному эмулятору смотреть.
Еще один тупой код
Код:; //////////////////////////////////////////////////////////////////////////////
; // PPU second phase prepare
; //////////////////////////////////////////////////////////////////////////////
PPUST2:
CLR R0 ; I dunno what is here? Alex_K said DO THAT
CALL @7132(R0) ; and it's working! stopping FD motor
; set PSW (HP**TNZVC) = 110000000 (HP=11, disable interrupts, halt mode)
mtps #600
; 11 110 001 (all RAM banks of plane 0)
; WARNING !!! We can't read (and bit/tst so on..) from there, but CAN write
[свернуть]
Спасибо парни что заметили этот факап!

