-
Посмотрел. Там только для формата CLOAD, то есть бейсик-программа во внутренних кодах.
Алгоритм запуска следующий:
1. Бейсик программа копируется на адрес 0x4000.
2. Настраивается дефолтное расположение памяти и экрана и устанавливается видеорежим 0. В данном случае это можно опустить.
3. Вызывается функция настройки внутренних переменных интерпритатора, по адресу 0x3A9.
4. Вызывается подпрограмма по адресу 0x1B63, передавая ей в регистре A ноль. не знаю что это, так что лучше повторить.
5. Вызывается функция по адресу 0xD93, которой в регистре HL передается адрес строки "Ok" (0x26D).
6. В переменную по адресу 0xF926 ложится значение 0xFFFF (работа в режиме командной строки).
7. Небольшая пауза, в виде 14 nop.
8. В переменные по адресам 0xF930, 0xF932 и 0xF934 ложится указатель на свободный блок памяти, который начинается сразу за загруженной бейсик-программой.
9. В буфер клавиатуры (адрес берется из 0xFA2C) ложится слово RUN (завершается символом 0x0D), и делается переход на адрес 0x30D. Да, адрес сразу за словом RUN заносится в переменную 0xFA2A. Если не ложить команду в буфер, то наверное произойдет просто переход в режим командной строки интерпритатора (не проверял).
Вот и все вроде.
Для запуска бейсик-программ непосредственно в текстовом виде наверное нужно копать загрузчик с магнитофона.
-
Еще одна утилита для конверсии с исходниками. Её элементарно поправить на тему цветов пк8000 вместо msxных, может в воскресенье найду в другом компьютере правленый вариант.
-
Вложений: 1
"Адаптация" вышеупомянутой утилиты для конверсии картинок для ПК8000. Коэффициенты для цветов взяты, насколько помню, из emu b2mа, возможно их стоит подправить, тут реальщикам виднее.
-
еще один тупой вопрос: для автостарта картридж обязательно должен начинаться с 4000h? или автостарт будет работать с 8000h, C000h?
-
-
как рассчитать адрес в видеопамяти msx screen 2 по координатам x,y?
-
Немного непонятен вопрос. Для ПК8000 объяснение пойдет? Вообще у точки нет адреса. Адрес есть у группы из 8 точек. И с этим связано куча проблем. В листинге вариант похожий на Басиковский. Конечно, он далеко не оптимален. До конца не удалось разобраться, в каких случаях какая маска должна накладывается, но общий принцип думаю ясен.
Код:
push h
mvi h, <координата Y>
mvi l, <координата X>
mov a, h
cpi 0C0h ; Сравниваем координату с 192
jnc loc_1876 ; Если Y больше 192, то сразу выходим
ani 0F8h
rrc
rrc
rrc
mov d, a ; в D - номер большой строки (высота большой строки = 8 пикселей).
; По сути это старший байт адреса, т. к. большая строка занимает 256 байт
mov a, h
ani 7
mov e, a ; в E - номер пикселя по вертикали в большой строке
mov a, l
ani 0F8h
ora e
mov e, a ; Тут почти готовый адрес байта, в который точку впечатать надо
mov a, l ; Вычислим, какой бит надо установить, чтобы получилась точка (остальные 7 битов не трогаем!)
call PSETBIT ; Обработка отдельного бита в команде PSET (в B )
lda PSETC ; Цвет точки у команды PSET
mov c, a
lhld GTBL1 ; Адрес таблицы точек изображения в режиме 2
dad d
mov d, h
mov e, l ; В DE и HL искомый адрес
cpi 10h ; Цветов всего 15
push d
call VRAMBTRD ; HL=адрес (A=байт: чтение байта из видео-ОЗУ VRAM).
mov d, a
mov a, b
jc loc_1867 ; Нужно сложить биты по маске OR
jz loc_1878 ; Складываем биты по маске XOR
cma
ana d ; Маска AND
mov m, a
jmp loc_1874
loc_1867:
ora d ; Маска OR
mov m, a
mov a, h
xri 20h
mov h, a
call VRAMBTRD ; HL=адрес (A=байт: чтение байта из видео-ОЗУ VRAM).
ani 0F0h
ora c
mov m, a
loc_1874:
mov a, d
pop d
loc_1876:
pop h
ret
loc_1878:
mov a, h
xri 20h ; Маска XOR
mov h, a
call VRAMBTRD ; HL=адрес (A=байт: чтение байта из видео-ОЗУ VRAM).
mov c, a
jmp loc_1874
BITS80: .db 10000000b
BITS40: .db 1000000b
BITS20: .db 100000b
BITS10: .db 10000b
BITS08: .db 1000b
BITS04: .db 100b
BITS02: .db 10b
BITS01: .db 1
---------- Post added at 11:03 ---------- Previous post was at 10:55 ----------
Если у Вас вариант упрощённый, адрес видеобуфера с 0x0000 и т .д., то Вам нужно только до слов "Тут почти готовый адрес байта".
-
да вроде корректный вопрос?:) именно что прибавить и на что умножить x и y, чтобы получить адрес в видеопамяти.
-
Ясно. MSX меня смутило. Тогда мой пример Вам подойдёт.
-
Комментарий у xri 20h стоит поменять на что-то вроде "Меняем адрес на область цвета"