Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 26

Тема: #3Dxx vs Soft

  1. #1
    Master Аватар для Keeper
    Регистрация
    15.11.2007
    Адрес
    Харьков
    Сообщений
    873
    Благодарностей: 372
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question #3Dxx vs Soft

    Какие подпрограммы в окне #3Dxx использует софт? Кроме:
    #3D00,#3D03,#3D13,#3D21,#3D2F

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

  3. #2
    Member Аватар для Faster
    Регистрация
    21.06.2005
    Адрес
    Ульяновск
    Сообщений
    160
    Благодарностей: 47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, собственно, любые может использовать, которые расположены в диапазоне #3d00 - #3dff. Если адрес подпрограммы лежит непосредственно в пределах этого окна, можно просто передать на нее управление, например, обычным CALL NN. А если речь о точках входа, то их полно: #3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  4. Этот пользователь поблагодарил Faster за это полезное сообщение:
    Keeper (28.09.2010)

  5. #3
    Master Аватар для Keeper
    Регистрация
    15.11.2007
    Адрес
    Харьков
    Сообщений
    873
    Благодарностей: 372
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Faster Посмотреть сообщение
    #3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.
    #3d2c - RET
    #3d4b - RET
    #3d7f - RET
    #3d93 - RET
    #3d96 - кусок DW #0010
    #3d97 - RET
    #3dac - RET

    Это же шутка, да?

  6. #4
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,481
    Благодарностей: 776
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Keeper Посмотреть сообщение
    Какие подпрограммы в окне #3Dxx использует софт? Кроме:
    #3D00,#3D03,#3D13,#3D21,#3D2F
    Есть же диззассемблерный текст TRDOS:
    Код:
    ;Адрес #3D00. Вход в TR-DOS. Переключает ПЗУ.
    
    x3D00       NOP
                JR      x3D31
    
    ;Адрес #3D03. Выполнение команд TR-DOS из бейсика. Установите CH_ADD на префикс :REM: перед командой. Возвращает в BC код ошибки. Переключает ПЗУ.
    
    x3D03       NOP
                JR      x3D1A
    
    ;Адрес #3D06. Подпрограмма ввода из файла данных. Переключает ПЗУ. При вызове из редактора вводит всю строку и производит выход из редактора, иначе возвращает в A символ из файла.
    
    x3D06       NOP
                JP      x25EF
    
    ;Адрес #3D0A. То же, что и #3D0D, но не переключает ПЗУ.
    
    x3D0A       JP      x244A
    
    ;Адрес #3D0D. Подпрограмма вывода в файл данных. Символ поместите в аккумулятор. Используется также с адреса #3D0E. Обе точки входа переключают ПЗУ.
    
    x3D0D       NOP
    x3D0E       JR      x3D0A
    
    ;Адрес #3D10. То же, что и #20F1. Переключает ПЗУ.
    
    x3D10       NOP
                JR      x3CFA
    
    ;Адрес #3D13. Переход на подпрограмму вызова подпрограмм TR-DOS из машинного кода. Адрес является переключателем.
    
    x3D13       NOP
                JR      x3CFD
    
    ;Адрес #3D16. Переход на подпрограмму обработки ошибок. Адрес является переключателем.
    
    x3D16       NOP
                JP      OBROSH      ;#3449
    
    ;Адрес #3D1A. То же, что и #3D03, но не переключает ПЗУ.
    
    x3D1A       CALL    x3D21       ;создание системных переменных TR-DOS
                PUSH    HL          ;помещение на стек адреса переключателя ПЗУ на бейсик
                JP      x016C       ;выполнение команды
    
    ;Адрес #3D21. Создание области системных переменных TR-DOS, если ее нет. В HL помещается #5CC2.
    
    x3D21       CALL    x31F3       ;проверка наличия области системных переменных
                NOP
                NOP
                CALL    C,x3D4C     ;если ее нет, то создание ее
                LD      HL,#5CC2    ;загрузка в HL адреса переключателя ПЗУ на бейсик
                RET                 ;возврат
    
                NOP
                NOP
    
    ;Адрес #3D2F. Переключение пзу на TR-DOS и переход на любой адрес. Адрес поместите на стек.
    
    x3D2F       NOP
    x3D30       RET
    
    ;Адрес #3D31. Вход в TR-DOS.
    
    x3D31       CALL    x3D21       ;создание области системных переменных
                PUSH    HL          ;помещение на стек адреса переключателя ПЗУ на бейсик
                JP      WHOD        ;#3BF0 ;вход в TR-DOS
    
    ;Адрес #3D38. Проверка наличия интерфейса-1. В случае его обнаружения происходит создание его системных переменных и в #5CF1 помещается 1. Для работы подпрограмма должна быть перемещена в любое место ОЗУ.
    
    x3D38       XOR     A           ;интерфейс-1 есть?
                OUT     (#F7),A
                IN      A,(#F7)
                CP      #1E
                JR      Z,x3D44     ;если да, то создание его системных переменных
                CP      #1F
                RET     NZ          ;если нет, то возврат
    x3D44       RST     8           ;создание системных переменных интерфейса-1
                DB      #31
                LD      A,1         ;по команде SAVE записывать 1 копию
                LD      (#5CEF),A
                RET                 ;возврат
    
    ;Адрес #3D4C. Создание системных переменных TR-DOS. При наличии интерфейса-1 перед созданием переменных TR-DOS создаются его переменные и в #5CEF помещается 1. В переменные TR-DOS помещаются: в #5CFA - #5CFC, #5CC8 - #5CCA, #5C3A, #5D16 и #5D0C - #FF; в #5D17, #5D19, #5D18, #5D0F и #5D1F - 0; в #5CC2 - #C9. Также в системный регистр помещается #FF, а на ВГ93 выдается команда прерывания. Подпрограмма портит ячейки памяти калькулятора.
    
    x3D4C       XOR     A           ;выбор дисковода A: и сброс ВГ93
                OUT     (#FF),A
                IN      A,(#F6)     ;это ничего не дает
                LD      HL,x3D38    ;адрес подпрограммы проверки наличия интерфейса-1
                LD      DE,#5C92    ;любой свободный адрес, ОЗУ
                LD      BC,#14      ;длина подпрограммы
                LDIR                ;перенос подпрограммы в ОЗУ
                LD      HL,x3D67    ;адрес возврата из подпрограммы
                PUSH    HL          ;помещение его на стек
                LD      HL,x3D2F    ;адрес переключателя ПЗУ на TR-DOS
                PUSH    HL          ;помещение его на стек
                JP      #5C92       ;запуск подпрограммы
    
    ;Адрес #3D67. Создание системных переменных TR-DOS. В переменные помещаются: в #5CFA - #5CFD, #5CC8 - #5CCB, #5C3A, #5D16 и #5D0C - #FF; в #5D17, #5D19, #5D18, #5D0F и #5D1F - 0; в #5CC2 - #C9. Также в системный регистр помещается #FF, а на ВГ93 выдается команда прерывания.
    
    x3D67       LD      HL,x2F90    ;адрес возврата из пзу бейсика
                PUSH    HL          ;помещение его на стек
                LD      HL,x3D2F    ;адрес переключателя ПЗУ на TR-DOS
                PUSH    HL          ;помещение его на стек
                LD      HL,#1655    ;адрес подпрограммы MAKE_ROOM из ПЗУ бейсика
                PUSH    HL          ;помещение его на стек
                LD      HL,#5BFF    ;адрес переключателя ПЗУ на бейсик
                PUSH    HL          ;помещение его на стек
                LD      (HL),#C9    ;помещение в озу команды RET
                LD      HL,#5CB5    ;начальный адрес области системных переменных
                LD      BC,#70      ;длина ее
                RET                 ;запуск подпрограммы MAKE_ROOM
    
    ;Адрес #3D80. Перевод строки. Используется также с адреса #3D82 (печать символа из аккумулятора). Также эта подпрограмма ошибочно используется с адреса #3D8B подпрограммой #4F6.
    
    x3D80       LD      A,#D        ;символ ENTER
    x3D82       JP      DOSSYM      ;#805
    
                DS      9,#FF
                DB      #FF,0,0,#FF,#FF,#FF
    
    ;Адрес #3D94. Печать символа без изменения памяти. Символ поместите в аккумулятор.
    
    x3D94       RST     #20
                DW      #0010
                RET
    
    ;Адрес #3D98. Восстановление с ожиданием INTRQ. Используется также с адреса #3D9A (отдача команды из рег.A с ожиданием INTRQ).
    
    x3D98       LD      A,8         ;восстановление
    x3D9A       OUT     (#1F),A
    x3D9C       PUSH    HL          ;сохранение HL
                RST     #20         ;проверка нажатия BREAK
                DW      #1F54
                JR      C,x3DA5     ;если нажато, то сообщение *BREAK*
                RST     #20
                DW      #1B7B
    x3DA5       POP     HL          ;восстановление HL
                IN      A,(#FF)     ;INTRQ поступил?
                AND     #80
                JR      Z,x3D9C     ;если нет, то повтор
                RET                 ;возврат
    
    ;Адрес #3DAD. Проверка наличия диска в дисководе. Никаких установок не требуется.
    
    x3DAD       LD      A,8         ;команда восстановления
                CALL    x3D9A       ;выдача команды и ожидание INTRQ
                LD      DE,0        ;за #10000 проходов индексный сигнал должен измениться
                IN      A,(#1F)     ;берем индексный сигнал для образца
                AND     2
                LD      B,A         ;запоминаем его
    x3DBA       IN      A,(#1F)     ;берем его снова
                AND     2
                CP      B           ;он изменился?
                RET     NZ          ;если да, то возврат
                INC     DE          ;следующая попытка
                LD      A,E         ;попытки кончились
                OR      D
                JR      NZ,x3DBA    ;если нет, то повтор
                JP      x3EE7       ;обработка ошибки NO DISC
    
    ;Адрес #3DC8. Выбор дисковода, определенного по умолчанию. Вход: можно установить время перемещения головки и режим дисковода согласно описанию команды #01. Выход: эти переменные могут быть изменены согласно этому описанию. Используется также с адресов:
    ;#3DCB - выбор дисковода. Номер задайте в рег.A, остальное как и для предыдущей подпрограммы.
    ;#3DFD - задержка в 725779 тактов.
    ;#3DFF - задержка любой нужной длительности. В рег.A установите число, определяющее длительность задержки.
    
    x3DC8       LD      A,(#5D19)   ;берем номер дисковода по умолчанию
    x3DCB       JP      TCH2        ;перехват выбора дисковода
    TCH2Q       LD      HL,#5D16    ;выбор дисковода
                LD      C,A
                LD      A,#3C
                OR      C
                OUT     (#FF),A
                LD      (HL),A
                CALL    x3E08       ;берем время перемещения головки дисковода
                AND     #80         ;бит 7 выключен?
                JR      Z,x3DFA     ;если да, то инициализацию не проводим
                CALL    x3DAD       ;проверка наличия диска в дисководе
                CALL    x3E16       ;определение времени перемещения головки дисковода
                CALL    x3E11       ;берем тип дисковода
                CP      #FF         ;в этой переменной #FF?
                JR      NZ,x3DFA    ;если да, то не определяем его
                PUSH    HL          ;сохраняем адрес переменной с типом дисковода
                CALL    x1FCA       ;определение количества дорожек дисковода
                POP     HL          ;восстановление адреса переменной типа
                CP      #50         ;установка этой переменной
                LD      A,0
                JR      NZ,x3DF9
                LD      A,#80
    x3DF9       LD      (HL),A
    
    ;Внимание, ошибка!!! Не проверяется количество сторон дисковода и предполагается, что он односторонний.
    
    x3DFA       CALL    x1E36       ;проверка индексной области диска
    x3DFD       LD      A,#50       ;задержка в 327842 тактов
    x3DFF       LD      C,#FF
    x3E01       DEC     C
                JR      NZ,x3E01
                DEC     A
                JR      NZ,x3DFF
                RET                 ;возврат

  7. Эти 2 пользователя(ей) поблагодарили caro за это полезное сообщение:
    John North (28.09.2010), valeron (28.09.2010)

  8. #5
    Master Аватар для Keeper
    Регистрация
    15.11.2007
    Адрес
    Харьков
    Сообщений
    873
    Благодарностей: 372
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, есть, но меня интересует какие точки использует софт, кроме тех что в первом посте.

    ---------- Post added at 09:19 ---------- Previous post was at 09:18 ----------

    Это еще и кусок исходника под sjasmplus который я делал, а сразу и не заметил

  9. #6
    Member Аватар для Faster
    Регистрация
    21.06.2005
    Адрес
    Ульяновск
    Сообщений
    160
    Благодарностей: 47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Keeper Посмотреть сообщение
    #3d96 - кусок DW #0010
    #3d97 - RET

    Это же шутка, да?
    Смотри внимательнее код!! Там по адресу #3d95 DB #10,#00,#C9

    Код:
    #3d96 NOP
    #3d97 RET
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  10. #7
    Master Аватар для Keeper
    Регистрация
    15.11.2007
    Адрес
    Харьков
    Сообщений
    873
    Благодарностей: 372
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Faster Посмотреть сообщение
    Смотри внимательнее код!!
    Это типа альтернатива #3D2F? Остальные RETы тоже альтернатива? В каком софте используются?

  11. #8
    Member Аватар для Faster
    Регистрация
    21.06.2005
    Адрес
    Ульяновск
    Сообщений
    160
    Благодарностей: 47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Keeper Посмотреть сообщение
    Это типа альтернатива #3D2F? Остальные RETы тоже альтернатива? В каком софте используются?
    Типа да. Остальные RETы тоже альтернатива. Ну лично я юзал #3d96 и #3d97 в отличие от других, что юзали #3d2f (#3d30). Да и какая разница какие адреса использует софт? Там хоть RET NZ, к примеру, можно заюзать... Всё зависит от изощренного мозга кодера!
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  12. #9
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,083
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.

  13. #10
    Member Аватар для Faster
    Регистрация
    21.06.2005
    Адрес
    Ульяновск
    Сообщений
    160
    Благодарностей: 47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.
    а вот для этого надо, чтобы железо 100% эмулировало ВГ93, а не только на уровне #3d13. Это лично мое мнение.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. С Днюхой, (R)-Soft!!!
    от Activator в разделе Поздравления
    Ответов: 1
    Последнее: 12.07.2009, 08:25
  2. Ответов: 22
    Последнее: 06.10.2008, 13:17
  3. MAGIC-SOFT
    от White_Hunter в разделе Люди
    Ответов: 1
    Последнее: 22.08.2008, 06:56
  4. soft dt
    от roxx в разделе Софт
    Ответов: 4
    Последнее: 30.01.2008, 18:41

Ваши права

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