Такой вариант.
Такой вариант.
ZXMAK(17.04.2025)
вобщем после небольшого исследования, выяснилось, что в прошивке 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 ;Я попробовал сделать патч для ROM, для этого в образе ПЗУ нужно прописать нули по адресам: $0da0, $0da2, $0dcf, $0dd1.Код:; --------------------------- ; 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.
Можно использовать такой bash скрипт для патча ПЗУ:
После этого можно спокойно ставить свой адрес вывода для канала S и он не перетирается:Код:#!/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
Непонятно - зачем было делать перетирание захардкожеными адресами процедур в оригинальной ПЗУ. Потестил с пропатченой версией ПЗУ - вроде все работает как в оригинале.
- - - Добавлено - - -
это вероятно автор того 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
Да, действительно, адреса в стандартных описателях каналов восстанавливаются после очистки экрана. Почему? Это неизвестно, но у авторов системы ZX Spectrum могли быть веские причины.Сообщение от ZXMAK
Тогда это не будет работать у всех остальных пользователей. С точки зрения ОС ZX Spectrum правильно создать свой канал, подключить его к потоку и выводить в него. Еще можно модифицировать описатель канала "P" (если не предполагается работа с принтером) - он не будет изменяться процедурами ПЗУ, и использовать команды для вывлда PRINT #3, LIST #3 (или LPRINT, LLIST, если нравится).Сообщение от ZXMAK
вообще изначально идея была в том, чтобы сделать стандартный бейсик работающим в текстовой консоли. Например в текстовом режиме 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
Grand(20.04.2025)
Да, переделка подучится глобальной. Поэтому, по моему мнению, лучше организовать (через новое или альтернативное ПЗУ) свой канал в/в, подключить к нему драйвер консоли, который бы управлялся Esc-последовательностями: переключения экранов, печать символов и куосора и т.д.Сообщение от ZXMAK
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Xela(04.06.2025)
Velesoft такой rom делал для divmmc, вот пример
![]()
Вообще тема да, интересная, было бы прикольно с бейсика управлять расширенными режимами, 32x24, 40x20, 80x40, 256x192x8, 256x192x256, цвета на точку, 320x200 и т.д.
Всю работу с потоками надо переделывать что бы и диски работали и флешка и прочее...................
Мммммм com-порт из бейсика, передача и приём параметров из ассемблера.........
На таймексе есть загружаемый бейсик-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
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)