User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 21

Тема: ZX Spectrum BASIC в текстовом режиме

  1. #11

    Регистрация
    03.12.2021
    Адрес
    г. Санкт-Петербург
    Сообщений
    670
    Спасибо Благодарностей отдано 
    472
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    135 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Непонятное поведение. Есть идеи как это обойти?
    Такой вариант.

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

    ZXMAK(17.04.2025)

  2. #12

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вобщем после небольшого исследования, выяснилось, что в прошивке ROM 48 зачем-то наглухо прибиты гвоздями адреса процедур вывода для каналов S и K.

    Вот два места, где они перетираются:
    Код:
    ; This entry point is called from CL-ALL below to
    ; reset the system channel input and output addresses to normal.
    
    ;; CL-CHAN
    L0D94:  LD      A,$FD           ; select system channel 'K'
            CALL    L1601           ; routine CHAN-OPEN opens it.
            LD      HL,($5C51)      ; fetch CURCHL to HL to address current channel
            LD      DE,L09F4        ; set address to PRINT-OUT for first pass.
            AND     A               ; clear carry for first pass.
    
    ;; CL-CHAN-A
    L0DA0:  LD      (HL),E          ; insert output address first pass.
            INC     HL              ; or input address on second pass.
            LD      (HL),D          ;
    Код:
    ; ---------------------------
    ; Clearing whole display area
    ; ---------------------------
    ; This subroutine called from CLS, AUTO-LIST and MAIN-3
    ; clears 24 lines of the display and resets the relevant system variables
    ; and system channels.
    
    ;; CL-ALL
    L0DAF:  LD      HL,$0000        ; initialize plot coordinates.
            LD      ($5C7D),HL      ; set COORDS to 0,0.
            RES     0,(IY+$30)      ; update FLAGS2  - signal main screen is clear.
    
            CALL    L0D94           ; routine CL-CHAN makes channel 'K' 'normal'.
    
            LD      A,$FE           ; select system channel 'S'
            CALL    L1601           ; routine CHAN-OPEN opens it
            CALL    L0D4D           ; routine TEMPS picks up permanent values.
            LD      B,$18           ; There are 24 lines.
            CALL    L0E44           ; routine CL-LINE clears 24 text lines
                                    ; (and sets BC to $1821)
    
            LD      HL,($5C51)      ; fetch CURCHL make HL address current
                                    ; channel 'S'
            LD      DE,L09F4        ; address: PRINT-OUT
            LD      (HL),E          ; is made
            INC     HL              ; the normal
            LD      (HL),D          ; output address.
    Я попробовал сделать патч для ROM, для этого в образе ПЗУ нужно прописать нули по адресам: $0da0, $0da2, $0dcf, $0dd1.
    Можно использовать такой bash скрипт для патча ПЗУ:
    Код:
    #!/usr/bin/env bash
    
    cp 48-origin.rom 48.rom
    
    printf '\x00' | dd of=48.rom bs=1 seek=$((0x0da0)) conv=notrunc
    printf '\x00' | dd of=48.rom bs=1 seek=$((0x0da2)) conv=notrunc
    
    printf '\x00' | dd of=48.rom bs=1 seek=$((0x0dcf)) conv=notrunc
    printf '\x00' | dd of=48.rom bs=1 seek=$((0x0dd1)) conv=notrunc
    После этого можно спокойно ставить свой адрес вывода для канала S и он не перетирается:


    Непонятно - зачем было делать перетирание захардкожеными адресами процедур в оригинальной ПЗУ. Потестил с пропатченой версией ПЗУ - вроде все работает как в оригинале.

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

    Цитата Сообщение от Xela Посмотреть сообщение
    Такой вариант.
    это вероятно автор того BASIC-64, что выше приводили. Там точно те-же процедуры и IM 2 прерывание, которое постоянно переписывает процедуры каналов.Но это не работает стабильно, после перетирания и до прихода прерывания может напечаться какой-то текст через стандартную процедуру вывода, к тому-же прерывание может прийти когда первая половина адреса переписана из ПЗУ, а вторая нет, тогда после выхода из прерывания перепишется вторая часть адреса и адрес будет некорректный, что приведет к сбою или сбросу системы.

    В BASIC-64 там еще и графика стандартного шрифта уполовинена, поэтому кода такое проиходит то символы рисуются на стандартных 8x8 знакоместах, но в обрезаном виде.

    Оптимальнее всего как мне кажется просто пропатчить 4 байта в ПЗУ и спокойно юзать свои процедуры вывода.

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

    В TR-DOS чтото ломается в выводе заставки в режиме 64x24:



    Для полноценного терминала с большим текстовым разрешением есть проблема с тем как координаты хранятся: X хранится как 0x21-X, а Y хранится как 0x18-Y, в результате есть жесткая привязка к 32x24. Если для X это не критично, то с Y проблемка со скролами возникает.
    Последний раз редактировалось ZXMAK; 17.04.2025 в 15:08.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

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

    Chwe(25.04.2025), SoftLight(05.06.2025)

  3. #13

    Регистрация
    10.04.2005
    Адрес
    Сибирь
    Сообщений
    1,203
    Спасибо Благодарностей отдано 
    271
    Спасибо Благодарностей получено 
    397
    Поблагодарили
    171 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK
    ... зачем-то наглухо прибиты гвоздями адреса процедур вывода для каналов S и K.
    ... Непонятно - зачем было делать...
    Да, действительно, адреса в стандартных описателях каналов восстанавливаются после очистки экрана. Почему? Это неизвестно, но у авторов системы ZX Spectrum могли быть веские причины.
    Цитата Сообщение от ZXMAK
    Оптимальнее всего как мне кажется просто пропатчить 4 байта в ПЗУ...
    Тогда это не будет работать у всех остальных пользователей. С точки зрения ОС ZX Spectrum правильно создать свой канал, подключить его к потоку и выводить в него. Еще можно модифицировать описатель канала "P" (если не предполагается работа с принтером) - он не будет изменяться процедурами ПЗУ, и использовать команды для вывлда PRINT #3, LIST #3 (или LPRINT, LLIST, если нравится).

  4. #14

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вообще изначально идея была в том, чтобы сделать стандартный бейсик работающим в текстовой консоли. Например в текстовом режиме ATM/EVO.
    Такой режим конечно не у всех есть, а пропатченый образ ПЗУ можно разместить в странице ОЗУ замапленой вместо ПЗУ.

    Сам вывод вполне прикручивается с неболшим патчем, но как оказалось там еще довольно много жестко прибитых размеров экрана в коде, что затрудняет реализацию такой идеи, т.к. текстовая консоль предполагает большие размеры, например 80x25, чем 32x24
    Последний раз редактировалось ZXMAK; 19.04.2025 в 18:13.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

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

    Grand(20.04.2025)

  5. #15

    Регистрация
    10.04.2005
    Адрес
    Сибирь
    Сообщений
    1,203
    Спасибо Благодарностей отдано 
    271
    Спасибо Благодарностей получено 
    397
    Поблагодарили
    171 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK
    ... идея была в том, чтобы сделать стандартный бейсик работающим в текстовой консоли. ...а пропатченый образ ПЗУ можно разместить в странице ОЗУ ...но как оказалось там еще довольно много жестко прибитых размеров экрана в коде ...
    Да, переделка подучится глобальной. Поэтому, по моему мнению, лучше организовать (через новое или альтернативное ПЗУ) свой канал в/в, подключить к нему драйвер консоли, который бы управлялся Esc-последовательностями: переключения экранов, печать символов и куосора и т.д.

  6. #16

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,296
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,461
    Поблагодарили
    950 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    пропатченый образ ПЗУ можно разместить в странице ОЗУ замапленой вместо ПЗУ.
    на эти грабли мы уже наступали.
    поставь в отладчике перехват записи в диапазон #0000-#3FFF
    и попробуй набрать любую программу на бейсике.

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

  8. #17

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,296
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,461
    Поблагодарили
    950 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    нашлась какая-то Rom`ka на 64символа

    Вложения Вложения

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

    Xela(04.06.2025)

  9. #18

    Регистрация
    28.02.2005
    Адрес
    Москва
    Сообщений
    2,246
    Спасибо Благодарностей отдано 
    995
    Спасибо Благодарностей получено 
    620
    Поблагодарили
    336 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Velesoft такой rom делал для divmmc, вот пример



  10. #19

    Регистрация
    02.11.2007
    Адрес
    г. Краснодар
    Сообщений
    293
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вообще тема да, интересная, было бы прикольно с бейсика управлять расширенными режимами, 32x24, 40x20, 80x40, 256x192x8, 256x192x256, цвета на точку, 320x200 и т.д.
    Всю работу с потоками надо переделывать что бы и диски работали и флешка и прочее...................
    Мммммм com-порт из бейсика, передача и приём параметров из ассемблера.........

  11. #20

    Регистрация
    22.07.2021
    Адрес
    г. Москва
    Сообщений
    57
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Интересно, никто не пробовал сделать текстовый режим для стандартного ROM бейсика.
    На таймексе есть загружаемый бейсик-64 под расширенный экран 512х192.
    Zebra OS 64.
    Можно переделать под tr-dos.
    http://ibb.co/album/DVsYDS
    http://disk.yandex.ru/d/6D8k55Gptkx1LQ
    http://zx-pk.com/forum/viewtopic.php...art=90#p184005

    Лучше смотреть в сторону BBC бейсика.
    Оно уже есть готовое, вместо прошивки бейсика-128.
    http://mdfs.net/Software/Spectrum/BB...cs/Install.htm

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

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

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

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

Похожие темы

  1. Игры с конкурса ZX Spectrum BASIC Jam
    от michellekg в разделе Игры
    Ответов: 0
    Последнее: 16.06.2017, 15:25
  2. Ответов: 11
    Последнее: 24.05.2016, 02:33
  3. Ответов: 18
    Последнее: 01.11.2015, 00:41
  4. Beginning BASIC & Advanced Graphics with the ZX Spectrum (PDFCHM)
    от danner в разделе Пресса
    Ответов: 1
    Последнее: 23.09.2008, 16:35

Ваши права

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