Если лабиринт закодирован по 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