┌────────────────────────────────────────┐
│ ПРОГРАММИСТАМ │
└────────────────────────────────────────┘
(C) JAGUAR
Сегодня в разделе 'ПРОГРАМ-
МИСТАМ' я подготовил для Вас
ряд различных подпрограмм, среди
которых вы сможете найти:
- быстрая процедура вычерчива-
ния окружности.
- ускоренный DECRUNCHER к па-
ковщику DATA_SQUEEZER v4.x.
- корректная обработка дисковых
ошибок, возникающих при обра-
щении к TR-DOS через #3D13.
- а также еще некоторые мелочи,
которые подготовлены специ-
ально для начинающих програм-
мистов, опытные же ...MAKERы
могут даже не заглядывать на
эти строки, вместо этого пре-
длагаю Вам, опытным, собрать-
ся, и написать нам какую-
нибудь свою хитрую подпро-
грамму, которую мы опубликуем
в следующем выпуске газеты.
Корректную обработку дисковых
ошибок я решил опубликовать в
этой газете несмотря на то,
что эта тема уже рассматривалась
в компьютерном издании РЭХО 3
(ECHO), но так как то, что напи-
сано по этому поводу там, вовсе
не является "корректной обработ-
кой" - это лишь корректный пере-
хват управления в случае возни-
кновения ошибки, попробуйте
во время чтения надавить на
BREAK и Ваша программа
моментально вылетит кое куда...
(например на адрес 12345 или
на 23456.
* * *
Начну, как и обещал, с про-
цедуры вычерчивания на экране
окружности. На входе в процедуру
необходимо задать три параметра:
в аккамуляторе-радиус, в старший
байт регистра IX (HX) - коорди-
нату центра окружности по оси Y,
а в младший (LX) - координату
центра по X. К примеру, чтобы
нарисовать окружность с радиусом
80 в центре экрана, обращение
к процедуре CIRCLE будет выгля-
деть так:
LD A,80
LD IX,#6080
CALL CIRCLE
RET
CIRCLE LD E,0
LD H,E
LD L,A
LD D,A
DEC D
SRL L
INC L
C1 PUSH DE
LD A,D
LD D,0
BIT 7,H
JR NZ,C2
SLI E
RL D
SBC HL,DE
POP DE
JR C3
C2 SUB E
DEC A
ADD A,A
RL D
LD E,A
ADD HL,DE
POP DE
DEC D
C3 PUSH HL
LD B,D
LD C,E
PUSH DE
CALL CIR1
LD A,B
LD B,C
LD C,A
CALL CIR1
POP DE
POP HL
INC E
LD A,E
CP D
JR C,C1
RET
CIR1 LD A,B
ADD A,XH
JR C,C4
LD D,A
LD A,C
ADD A,XL
JR C,C4
LD E,A
CALL CIR2
C4 LD A,XH
SUB B
JR C,C5
LD D,A
LD A,C
ADD A,XL
JR C,C5
LD E,A
CALL CIR2
C5 LD A,XH
SUB B
JR C,C6
LD D,A
LD A,XL
SUB C
JR C,C6
LD E,A
CALL CIR2
C6 LD A,B
ADD A,XH
RET C
LD D,A
LD A,XL
SUB C
RET C
LD E,A
CALL CIR2
RET
CIR2 LD A,D
CP 192
RET NC
LD A,E
CPL
AND 7
ADD A,A
ADD A,A
ADD A,A
ADD A,199
LD (BITNUM+1),A
SRL E
SRL E
SRL E
LD A,D
AND 56
RLCA
RLCA
OR E
LD L,A
LD A,D
AND 7
LD E,A
LD A,D
AND 192
RRA
SCF
RRA
RRA
OR E
LD H,A
XOR A
BITNUM SET 0,A
OR (HL)
LD (HL),A
RET
* * *