
Если лабиринт закодирован по 2 клетки на байт, то вот процедурки для чтения и записи по нужному адресу и полубайту. В них длина лабиринта по горизонтали 128 клеток, ширина по вертикали произвольная. Длину легко можно поменять.
Код:
BEGLAB EQU ... ; адрес начала лабиринта
; получение значения клетки по логическим координатам ; входные параметры: B = вертикальная координата в лабиринте, C = горизонтальная координата в лабиринте ; выходной параметр: A = элемент лабиринта (биты 0-3)
GETKL LD H,B ; расчет логического адреса клетки LD L,0 SRL H RR L LD B,0 ADD HL,BC
SRL H ; расчет физического адреса клетки в памяти RR L LD BC,BEGLAB JP C,GETKL1 ; если нечетный логический байт, то вторая половина физического байта
ADD HL,BC ; достаем клетку лабиринта LD A,(HL) RRCA RRCA RRCA RRCA AND #0F RET
GETKL1 ADD HL,BC LD A,(HL) AND #0F RET
; занесение в клетку заданного значения по логическим координатам ; входные параметры: B = вертикальная координата в лабиринте, C = горизонтальная координата в лабиринте, A = элемент лабиринта (биты 0-3) ; выходных параметров нет
PUTKL LD H,B ; расчет логического адреса клетки LD L,0 SRL H RR L LD B,0 ADD HL,BC
SRL H ; расчет физического адреса клетки в памяти RR L LD BC,BEGLAB JP C,PUTKL1 ; если нечетный логический байт, то вторая половина физического байта
ADD HL,BC ; достаем клетку лабиринта RLCA RLCA RLCA RLCA LD C,A LD A,(HL) AND #0F OR C LD (HL),A RET
PUTKL1 ADD HL,BC LD C,A LD A,(HL) AND #F0 OR C LD (HL),A RET
__________________
