┌────────────────────────────────────────┐ │ ПРОГРАММИСТАМ │ └────────────────────────────────────────┘ (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 * * *