![]() |
|
:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №31 (04.07.2007) Просмотров: 4986
Рубрика: Этюды. Номер: №31 (04.07.2007). Этюды(c) Алексей ЧервовПроцедура печати 85 символов в строке. Печать происходит на двух экранах при помощи стандартного линейного двухкилобайтного шрифта на 64 символа в строке, прижатого к правому краю. Весь код занимает 256 байт. font EQU #60;Старший байт адреса шрифта.
ORG #8000
LD A,23
LD BC,#7ffd
OUT (C),A
;Очистка двух экранов (c) tiboh
LD HL,#4000
LD D,L
LD E,L
cls LD (HL),D
SET 7,H
LD (HL),E
RES 7,H
INC HL
LD A,H
CP #58
JR C,cls
LD DE,#4445;Атрибуты
CP #5b
JR NZ,cls
LD DE,text; Адрес текста, в конце 0
LD HL,#4000;Адрес экрана
CALL print
key LD A,23
HALT
XOR 8
LD (key+1),A
LD BC,#7ffd
OUT (C),A
LD A,#7f
IN A,(#fe)
RRA
JR C,key
RET
print LD B,font+1
PUSH DE,HL,HL
EXX
POP HL
SET 7,H
EXX
CALL pr
POP HL,DE
INC H
LD A,H
AND 7
JR NZ,$+11
LD A,L
SUB #e0
LD L,A
SBC A,A
AND #f8
ADD A,H
LD H,A
INC B
LD A,B
CP font+8
JR C,print+2
RET
pr LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
RLCA
LD C,A
AND 96
LD (HL),A
LD A,C
EXX
AND 128
LD (HL),A
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
RLCA
RLCA
LD C,A
AND 12
OR (HL)
LD (HL),A
LD A,C
EXX
AND 16
OR (HL)
LD (HL),A
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
RRCA
LD C,A
AND 1
OR (HL)
LD (HL),A
LD A,C
AND 128
INC L
LD (HL),A
LD A,C
EXX
AND 2
OR (HL)
LD (HL),A
INC L
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
AND 48
OR (HL)
LD (HL),A
LD A,(BC)
EXX
AND 64
LD (HL),A
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
RLCA
LD C,A
AND 6
OR (HL)
LD (HL),A
LD A,C
EXX
AND 8
OR (HL)
LD (HL),A
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
RLCA
RLCA
LD C,A
AND 192
INC L
LD (HL),A
LD A,C
EXX
AND 1
OR (HL)
LD (HL),A
INC L
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
RRCA
LD C,A
AND 24
OR (HL)
LD (HL),A
LD A,C
EXX
AND 32
LD (HL),A
EXX
INC DE
LD A,(DE)
OR A
RET Z
LD C,A
LD A,(BC)
AND 3
OR (HL)
LD (HL),A
LD A,(BC)
EXX
AND 4
OR (HL)
LD (HL),A
INC L
EXX
INC L
INC DE
JP prПечать десятичных чисел без нуля. 59 байт. LD IX,Буфер 5 байт
LD HL,Число
LD BC,0
LD DE,0-10000
CALL num
LD DE,0-1000
CALL num
LD DE,0-100
CALL num
LD DE,0-10
CALL num
LD A,L
JR num2
num ADD HL,DE
INC B
JR C,$-2
DEC B
SBC HL,DE
LD A,B
OR C
RET Z
LD C,A
LD A,B
num2 ADD A,48
LD (IX),A
INC IX
LD B,0
RET(c) 2k by groove^tnl На 0...240 секторов вперед. IN: DE,текущий_трек/сектор B,количество_перепрыгиваемых_секторов OUT: DE = новые_трек/сектор LD A,B
ADD A,E
LD B,A
AND #F
LD E,A
LD A,D
DUP 4 ;Повторить
SRL B ;блок 4 раза
EDUP
ADD A,B
LD D,A
RETНа 0...65520 секторов вперед. IN: DE,текущий_трек/сектор HL,количество_перепрыгиваемых_секторов OUT: DE = новые_трек/сектор LD B,0
LD C,E
ADD HL,BC
LD A,L
AND #F
LD E,A
DUP 4 ;Повторить
RR H ;блок 4 раза
RR L
EDUP
LD A,L
ADD A,D
LD D,A
RET(c) SAM style На 0...256 секторов назад. ld de,track_sector
ld b,delta
ld a,e
sub b
ld e,a
ret nc
lab1 dec d
add a,16
jr nc,lab1
ld e,a
retНа 0...65520 секторов назад. ld de,track_sector
ld hl,delta
ld a,l
and 15
rr h
rr l
sra h
rr l
sra h
rr l
sra h
rr l
ld h,l
ld l,a
ld a,e
sub l
jr nc,lab1
dec d
lab1 and 15
ld e,a
ld a,d
sub h
ld d,a
ret |