User Tag List

Показано с 1 по 10 из 336

Тема: Эмулятор Союз-Неон ПК-11/16 - EmuStudio

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,434
    Спасибо Благодарностей отдано 
    1,721
    Спасибо Благодарностей получено 
    2,258
    Поблагодарили
    888 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Нужна поддержка Covox в эмуляторе! А то как же так? Софт под Covox есть, а послушать не на чем.
    Для поддержки ковокса нужна в принципе поддержка звука в эмуляторе, а ее пока нет.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    1,144
    Спасибо Благодарностей получено 
    1,480
    Поблагодарили
    528 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, пытаюсь дописать свой эмулятор Союз-Неона до хоть какого-то рабочего состояния. Сравниваю с твоим.

    Вот такой вопрос - это бага эмулятора или так и задумано? Проверял на EmuStudio 0.15n.
    Запускаем эмулятор, на проверке памяти выходим в отладчик - F8.

    Доходим до 001000 (0x0200) в режиме USER:
    Код:
    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
    Странно, что мы сразу провалились в прерывание, не дойдя до NOP.

    Теперь пропустим всё прерывание:
    Код:
    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)
    Мы опять на адресе 0200.
    Делаем два шага:
    Код:
    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
    Теперь мы упали в прерывание на NOP, причём в PPIB по-другому выставлены EF0/EF1.

    Это точно правильное поведение, что на одну запись в эмулируемый регистр мы отрабатываем прерывание дважды?

    Возможно, первое прерывание здесь связано с выставленным INT5 в PIC, но там же маска его запрещает, нет?

    @Alex_K, если радиальный сигнал HALT установлен до перехода в режим USER, то при переходе в USER сразу отрабатывает прерывание HALT, или сначала успевает отработать одна команда и только затем отрабатывает прерывание HALT?

    Тут же ещё всё сложнее. Переход в режим USER тут выполняется командой STEP, после которой не происходит обработки прерываний до выполнения следующей команды. Тогда выглядит так, что Titus это не учитывает.
    Последний раз редактировалось nzeemin; 25.12.2022 в 17:55.

  4. #3

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    @Alex_K, если радиальный сигнал HALT установлен до перехода в режим USER, то при переходе в USER сразу отрабатывает прерывание HALT, или сначала успевает отработать одна команда и только затем отрабатывает прерывание HALT?

    Тут же ещё всё сложнее. Переход в режим USER тут выполняется командой STEP, после которой не происходит обработки прерываний до выполнения следующей команды. Тогда выглядит так, что Titus это не учитывает.
    nzeemin, собственно на этот вопрос вы сами и ответили. После STEP обязательно выполнится команда нового процесса. А вот после START ничего не выполнится и сразу же перейдём в режим HALT. Тут ещё надо учитывать, что у радиального прерывания HALT приоритет равен пяти и если есть более приоритетные прерывания, то выполнятся они. Ну при START прерываний TRAP4 и TRAP10 не будет, а вот T-разряд и ACLO могут быть.

    Эти 3 пользователя(ей) поблагодарили Alex_K за это полезное сообщение:

    nzeemin(25.12.2022), shapipovo(27.12.2022), Titus(26.12.2022)

  5. #4

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Я думаю, что @Alex_K уже все прояснил)
    Alex_K прояснил про то, как работает команда STEP, а не почему прерывание возникает дважды.

  6. #5

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,434
    Спасибо Благодарностей отдано 
    1,721
    Спасибо Благодарностей получено 
    2,258
    Поблагодарили
    888 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Alex_K прояснил про то, как работает команда STEP, а не почему прерывание возникает дважды.
    Не могу так сказать. Возможно, это связано с особенностями отладчика, и без него все работает как надо. Давно не занимался ПК11, не помню.

  7. #6

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    1,144
    Спасибо Благодарностей получено 
    1,480
    Поблагодарили
    528 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    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

  8. #7

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,434
    Спасибо Благодарностей отдано 
    1,721
    Спасибо Благодарностей получено 
    2,258
    Поблагодарили
    888 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Titus, ещё вопрос про загрузку с дискеты.
    У себя я вижу что загружается 512 байт первого сектора, но загрузчик выглядит довольно странно. Так и задумано? Или этот код вообще не предназначен для исполнения?
    Тоже не могу пояснить, потому что основательно подзабыл.
    Думаю, @Alex_K и тут лучше меня подскажет.

  9. #8

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    У себя я вижу что загружается 512 байт первого сектора, но загрузчик выглядит довольно странно. Так и задумано?
    В первичном загрузчике в трёх словах перед точкой входа записаны слова конфигурации - на какой шине используется (QBUS, UNIBUS и т.д. и т.п.), сколько сторон. При этом третье слово может быть командой 400(BR ENTRY) - одна сторона, либо 100400(BMI ENTRY) - две стороны. Вот на это третье слово и осуществляется переход.

    - - - Добавлено - - -

    Вдогонку, а как у СОЮЗ-НЕОН буфер считывается? Он маппируется в память или последовательно считывается через какой-то регистр? Если считывается через регистр, то как сбрасывается счетчик буфера?

    Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    nzeemin(31.12.2022)

  10. #9

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,434
    Спасибо Благодарностей отдано 
    1,721
    Спасибо Благодарностей получено 
    2,258
    Поблагодарили
    888 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Это точно правильное поведение, что на одну запись в эмулируемый регистр мы отрабатываем прерывание дважды?
    Я думаю, что @Alex_K уже все прояснил)

    - - - Добавлено - - -

    Только почему ты делаешь шаг командой 'm0'? Шаг - это просто Enter. А m0 - это запись памяти в файл.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. EmuStudio-ZX
    от Titus в разделе Эмуляторы
    Ответов: 731
    Последнее: 02.01.2026, 00:34
  2. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1199
    Последнее: 29.12.2025, 05:26
  3. Эмулятор ТИА-МЦ-1 EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 107
    Последнее: 20.09.2024, 21:03
  4. Эмулятор МС-0515 - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 143
    Последнее: 09.02.2023, 10:44
  5. ПК-11 'Союз-Неон'
    от Keeper в разделе ДВК, УКНЦ
    Ответов: 12
    Последнее: 16.10.2013, 05:07

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •