Мелочи жизни... .BIG BRAIN
CRAZY ALEX & ANDY Inc.
Hi наши дорогие читатели, как известно из мелочей состоит наша
жизнь. Опишем мы, как работают разные мелочи, которые постоянно
вылетают из башки.
----------------------------------------------------------------
; запись значения в порт.
LD ВС, адрес порта (полный)
LD А, данные
0UT (С),А
----------------------------------------------------------------
; переброска кусков памяти
LD HL, откуда (адрес)
LD DE, куда (адрес)
LD ВС, сколько (длинна)
LDIR
----------------------------------------------------------------
; переключение сегментов памяти
LD А, номер сегмента + 1б
LD ВС,327б5
0UT (С),А
сегментов всего в SPECCY - 8, каждый по 1б кб.
2 - сегмент - это область с адреса 327б8 длинной в 1б384
5 - сегмент - это область с адреса 1б384 длинной в 1б384
все сегменты подключаются с адреса 49152.
желательно щелкать сегменты полной адресацией порта (как
написано здесь) иначе вас могут закидать кирпичами владельцы
SC0RPI0N'ов.
----------------------------------------------------------------
; чтение группы секторов с диска
LD В, количество секторов
LD HL, адрес загрузки в память
LD С,05 ; команда "чтение группы секторов"
LD DE,(#5CF4) ; текущий трек/сектор, в данном варианте
; берется из системной переменной TR-DOS.
CALL #3D13
----------------------------------------------------------------
; карта памяти
ПЗУ - с адреса 00000 по 1б383
дисплей высокого разрешения - с 1б384 по 22527
атрибутный экран - с 22528 по 23295
буфер принтера - с 2329б по 23551
системные переменные бейсика - с 23552 по 23733
системные переменные TR-DOS - с 23734 по 238бб
начало бейсик программы - 238б7
----------------------------------------------------------------
; опрос клавиш
раскладка клавиатуры SPECCY
┌───────────────────────────────────────┐
│ сброшенный бит │▒▒
├───┬───┬───┬───┬───╖───┬───┬───┬───┬───┤▒▒
│D0 │D1 │D2 │D3 │D4 ║D4 │D3 │D2 │D1 │D0 │▒▒
╔═╦═════╪═══╪═══╪═══╪═══╪═══╬═══╪═══╪═══╪═══╪═══╪═════╦═╗
║П║#F7FE│ 1 │ 2 │ 3 │ 4 │ 5 ║ б │ 7 │ 8 │ 9 │ 0 │#EFFE║П║▒▒
║ ║─────┼───┼───┼───┼───┼───╫───┼───┼───┼───┼───┼─────╢ ║▒▒
║0║#FBFE│ Q │ W │ E │ R │ Т ║ Y │ U │ I │ 0 │ P │#DFFE║0║▒▒
║ ║─────┼───┼───┼───┼───┼───╫───┼───┼───┼───┼───┼─────╢ ║▒▒
║P║#FDFE│ А │ S │ D │ F │ G ║ Н │ J │ К │ L │ EN│#BFFE║P║▒▒
║ ║─────┼───┼───┼───┼───┼───╫───┼───┼───┼───┼───┼─────╢ ║▒▒
║Т║#FEFE│ CS│ Z │ Х │ С │ V ║ В │ N │ М │ SS│ SP│#7FFE║Т║▒▒
╚═╩═════╧═══╧═══╧═══╧═══╧═══╩═══╧═══╧═══╧═══╧═══╧═════╩═╝▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Если кнопка находится в отжатом состоянии, то бит установлен в
еденицу, а если нажата, то соответственно - в ноль.
опрос
LD ВС,#7FFE
IN А,(С)
BIT 0,А
JP Z, адрес, на который перейдет программа по нажатию
на пробел.
; нажатие любой клавиши (включая CAPS и SYMB0L SHIFT)
М1 X0R А
IN А,(#FE)
CPL
AND 31
JR Z,М1
......... КЛАВИША НАЖАТА
----------------------------------------------------------------
; очистка экрана
LD HL,1б384 ИЛИ LD HL,23295
LD DE,1б385 LD DE,23294
LD ВС,б911 LD ВС,б911
LD (HL),0 LD (HL),0
LDIR LDDR
----------------------------------------------------------------
; перевод адреса пикселов в адрес атрибутов
LD HL, адрес в экране
LD А,Н
AND #18
RRCA
RRCA
RRCA
0R #58
LD Н,А
на выходе в HL - адрес в атрибутах
; перевод адреса атрибутов в адрес пикселов
LD HL, адрес атрибутов
LD А,Н
RRCA
RRCA
RRCA
AND #18
0R #40
LD Н,А
на выходе в HL - адрес в экране
----------------------------------------------------------------
; получение адреса в экране по заданному столбцу и ряду
LD В, столбец
LD С, ряд
LD А,С
AND #18
0R #40
LD Н,А
LD А,С
AND 7
0R А
RRA
RRA
RRA
RRA
ADD А,В
LD L,А
на выходе в HL - адрес в экране
----------------------------------------------------------------
; адрес нижней линии в экране
на входе в HL - адрес в экране
на выходе в HL - адрес следующей линии
INCH INC Н
LD А,Н
AND 7
RET NZ
LD А,L
ADD А,32
LD L,А
RET С
LD А,Н
SUB 8
LD Н,А
RET
; адрес верхней линии в экране
на входе в HL - адрес в экране
на выходе в HL - адрес следующей линии
DECH LD А,Н
DEC Н
AND 7
RET NZ
LD А,L
SUB 32
LD L,А
RET С
LD А,Н
ADD А,8
LD Н,А
RET
----------------------------------------------------------------
; процедура вычисления трека/сектора по смещению в секторах от-
носительно заданных трека/сектора
на входе: DE - текущий трек/сектор
HL - количество пропускаемых секторов
на выходе: DE - результат вычисления
на входе: DE - текущий трек/сектор
HL - количество пропускаемых секторов
на выходе: DE - результат вычисления
CALC LD ВС,#10
LD А,D
ADD HL,DE
LD D,А
М1 AND А
SBC HL,ВС
JR С,М2
INC D
JR М1
М2 ADD HL,ВС
LD E,L
RET
----------------------------------------------------------------
P.S: Надеемся, что эти мелочи облегчат кому-нибудь жизнь...
****************************************************************
Other articles: