Задумал я одну диверсию, и вернулся к коду на БК0010. Нашел описание печати текста через вызов EMT и тут же обломался: текст не печатает, как и должно быть. Мне стало грустно, ведь залумка не получилась. Спросил в Телеграмчике, ребята подсказали, что удобнее использовать CLR R2. Заработало, причина в том, что я неверно вызывал функцию:
;Вход R1 — адрес строки символов
;Вход R2 — длина строки (мл. байт), символ-ограничитель (ст. байт)
А дальше начались приключения - из-за высоты символов 10 пикселей текст не умещается. Написал другую процедуру печати текста, уместив текст с высотой 8 точек. Manwe предложил использовать пакер программы, но есть проблема - адрес программы должен быть другим. Указанный адрес понимает ассемблер PDPy11. Возиться с установкой Python3 мне не хотелось, стал читать доки BKTurbo8.
Компиляция изменилась:
del %nam%.bin
BKTurbo8.exe -l -o cl %nam%.asm
BKTurbo8.exe -l -o li -s 1042 %nam% %nam%.obj
del %nam%.obj
del %nam%.lst
rem ren %nam%.bin %nam%.bin
pause
Пакер сработал, программа уменьшилась в размере. Но мне показалось мало, я решил разобраться с еще одним вопросом - как строить точки. Чтение описания подсказало, какие функции вызвать.
;Вход R0: 1 — запись точки, 0 — стирание точки
;Вход R1 — координата х
;Вход R2 — координата y
И еще один облом - точки рисуются, но похоже, что координата Х делится на 2. На галерке подсказали, что причина в режиме "32 символа в строке". Похоже, что этот режим устанавливает монитор. Стал читать дизассемблер процедуры EMT 30, запись данных в ячейки ни к чему не привела.
Опять читаю доки, помогла печать кода 233o через функцию EMT 16. Заработало! Только с цветом не решено до конца. Еще одна попытка печати управляющих кодов ни к чему не привела. Решение уже подсказали в Телеграмчике: MOV #125252,@#214 запись маски цвета.
Вышла короткая программа
;
;Вход R0: 1 — запись точки, 0 — стирание точки
;Вход R1 — координата х
;Вход R2 — координата y
;; MOV #1001,@#162
MOV #233,R0
EMT 16
O:
ADD R3,R1
ADD R4,R3
INC R4
ADD R4,R2
MOV R1,-(SP)
CLRB R1
SWAB R1
MOV R2,-(SP)
CLRB R2
SWAB R2
;color
MOV R4,R0
; BIC #0b1111111111111000,R0
BIC #0b1111111111111100,R0
MOVB mask(R0),@#214
; MOV #125252,@#214
MOV #1,R0
EMT 30
MOV (SP)+,R2
MOV (SP)+,R1
BR O
mask:
;.word 0,0xaaaa,0x5555,0xffff
.byte 0,0xaa,0x55,0xff
.EVEN
.END
Комментарии
Отправить комментарий