S_V_B скомпилировал проигрыватель MOD/STM авторства RDC. Я запустил на эмуляторе, посмотрел что он пишет в LPT-порт 161032. Нужна поддержка Covox в эмуляторе! А то как же так? Софт под Covox есть, а послушать не на чем.
S_V_B скомпилировал проигрыватель MOD/STM авторства RDC. Я запустил на эмуляторе, посмотрел что он пишет в LPT-порт 161032. Нужна поддержка Covox в эмуляторе! А то как же так? Софт под Covox есть, а послушать не на чем.
manwe.pdp-11.ru
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
А на своем реале не пробовал?
Titus, пытаюсь дописать свой эмулятор Союз-Неона до хоть какого-то рабочего состояния. Сравниваю с твоим.
Вот такой вопрос - это бага эмулятора или так и задумано? Проверял на EmuStudio 0.15n.
Запускаем эмулятор, на проверке памяти выходим в отладчик - F8.
Доходим до 001000 (0x0200) в режиме USER:
Дальше как видим обращение к эмулируемому регистру -- как мы знаем, на NOP будет прерывание.Код:r200 HALT MMU: 000, 000, 000, 000, 002, 004, 000, 000 USER MMU: 006, 008, 00A, 00C, 002, 004, 000, 000 SNDC2R = 36458 PPIC = IH-0 PPIB = HI10 PIC_IRQM = --5----- PICMR = 76543210 R0=8202 R4=0000 PSW =0000 0200 15DF 0003 F86A MOV #$0003,(#$F86A) R1=0000 R5=0000 PSW'=0000 0206 00A0 NOP R2=0000 SP=0000 PC' =0200 0208 15C2 040E MOV #$040E,R2 R3=0000 PC=0200 Ctr=047188 020C 11C6 MOV PC,SP Flags = U-------- CPU (Main) 020E 09DF 0402 JSR (#$0402)
Делаем шаг:
Странно, что мы сразу провалились в прерывание, не дойдя до NOP.Код:m0 HALT MMU: 000, 000, 000, 000, 002, 004, 000, 000 USER MMU: 006, 008, 00A, 00C, 002, 004, 000, 000 SNDC2R = 36467 PPIC = IH-0 PPIB = HI10 PIC_IRQM = --5----- PICMR = 76543210 R0=8202 R4=0000 PSW =0180 0368 11BF 7CA2 MOV SP,@($800E) R1=0000 R5=0000 PSW'=0000 036C 17C6 800E MOV (#$800E),SP R2=0000 SP=0000 PC' =0200 0370 1166 PUSH R5 R3=0000 PC=0368 Ctr=047152 0372 1126 PUSH R4 Flags = HP------- CPU (Main) 0374 10E6 PUSH R3
Теперь пропустим всё прерывание:
Мы опять на адресе 0200.Код:r200 HALT MMU: 000, 000, 000, 000, 002, 004, 000, 000 USER MMU: 006, 008, 00A, 00C, 002, 004, 000, 000 SNDC2R = 320 PPIC = IH-0 PPIB = H-10 PIC_IRQM = -------- PICMR = 76543210 R0=8202 R4=0000 PSW =0000 0200 15DF 0003 F86A MOV #$0003,(#$F86A) R1=0000 R5=0000 PSW'=0000 0206 00A0 NOP R2=0000 SP=0000 PC' =0200 0208 15C2 040E MOV #$040E,R2 R3=0000 PC=0200 Ctr=045404 020C 11C6 MOV PC,SP Flags = U-------- CPU (Main) 020E 09DF 0402 JSR (#$0402)
Делаем два шага:
Теперь мы упали в прерывание на NOP, причём в PPIB по-другому выставлены EF0/EF1.Код:m0 HALT MMU: F86, 000, 000, 000, 002, 004, 000, 000 USER MMU: 006, 008, 00A, 00C, 002, 004, 000, 000 SNDC2R = 334 PPIC = IH-0 PPIB = H--0 PIC_IRQM = -------- PICMR = 76543210 R0=8202 R4=0000 PSW =0000 0206 00A0 NOP R1=0000 R5=0000 PSW'=0000 0208 15C2 040E MOV #$040E,R2 R2=0000 SP=0000 PC' =0200 020C 11C6 MOV PC,SP R3=0000 PC=0206 Ctr=045350 020E 09DF 0402 JSR (#$0402) Flags = U-------- CPU (Main) 0212 0A00 CLR R0 m0 HALT MMU: F86, 000, 000, 000, 002, 004, 000, 000 USER MMU: 006, 008, 00A, 00C, 002, 004, 000, 000 SNDC2R = 343 PPIC = IH-0 PPIB = H--0 PIC_IRQM = -------- PICMR = 76543210 R0=8202 R4=0000 PSW =0180 0368 11BF 7CA2 MOV SP,@($800E) R1=0000 R5=0000 PSW'=0000 036C 17C6 800E MOV (#$800E),SP R2=0000 SP=0000 PC' =0206 0370 1166 PUSH R5 R3=0000 PC=0368 Ctr=045314 0372 1126 PUSH R4 Flags = HP------- CPU (Main) 0374 10E6 PUSH R3
Это точно правильное поведение, что на одну запись в эмулируемый регистр мы отрабатываем прерывание дважды?
Возможно, первое прерывание здесь связано с выставленным INT5 в PIC, но там же маска его запрещает, нет?
@Alex_K, если радиальный сигнал HALT установлен до перехода в режим USER, то при переходе в USER сразу отрабатывает прерывание HALT, или сначала успевает отработать одна команда и только затем отрабатывает прерывание HALT?
Тут же ещё всё сложнее. Переход в режим USER тут выполняется командой STEP, после которой не происходит обработки прерываний до выполнения следующей команды. Тогда выглядит так, что Titus это не учитывает.
Последний раз редактировалось nzeemin; 25.12.2022 в 17:55.
nzeemin, собственно на этот вопрос вы сами и ответили. После STEP обязательно выполнится команда нового процесса. А вот после START ничего не выполнится и сразу же перейдём в режим HALT. Тут ещё надо учитывать, что у радиального прерывания HALT приоритет равен пяти и если есть более приоритетные прерывания, то выполнятся они. Ну при START прерываний TRAP4 и TRAP10 не будет, а вот T-разряд и ACLO могут быть.
Я думаю, что @Alex_K уже все прояснил)
- - - Добавлено - - -
Только почему ты делаешь шаг командой 'm0'? Шаг - это просто Enter. А m0 - это запись памяти в файл.
Titus, ещё вопрос про загрузку с дискеты.
У себя я вижу что загружается 512 байт первого сектора, но загрузчик выглядит довольно странно. Так и задумано? Или этот код вообще не предназначен для исполнения?
Код:001000 NOP 001002 BR 001036 001004 HALT 001006 HALT 001010 HALT 001012 HALT 001014 HALT 001016 HALT 001020 HALT 001022 HALT 001024 HALT 001026 HALT 001030 HALT 001032 BIC (R4), (R0)+ 001034 MOVB 000400(R0), (R0)+ 001040 JMP @#000574 001044 HALT 001046 HALT 001050 HALT 001052 HALT
Тоже не могу пояснить, потому что основательно подзабыл.
Думаю, @Alex_K и тут лучше меня подскажет.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)