Код:
;----------------------------------------;
_NULL EQU 0
;----------------------------------------;
ATTR_P EQU 23693 ;атрибуты экрана
;----------------------------------------;
;биты: 0 - over 0/1, 2 - inverse 0/1
; 4 - ink & paper 9 (прозрачные атр.)
P_FLAG EQU 23697
;----------------------------------------;
;----------------------------------------;
;Algorythm designed by SerzhSoft (c)1996
;рисование окружности
; HL=x, DE=y (-32768..+23767)
; A=радиус (0..255) ;при 0 - точка
CIRCLE
ld (X_CIRC),hl
ld (Y_CIRC),de
ld e,a
ld c,#00
ld b,c
ld d,c
srl a
LPCIR1 ex af,af'
LPCIR2 call PUT8PX
inc c
ex af,af'
sub c
jr nc,LPCIR1
dec e
add a,e
ex af,af'
ld a,e
cp c
jr nc,LPCIR2
ret
;
PUT8PX call PUT4PX
;
PUT4PX ld a,c
ld c,e
ld e,a
ld hl,_NULL
X_CIRC equ $-2
push hl
add hl,bc
call PUT2PX
pop hl
sbc hl,bc
;
PUT2PX inc h
dec h
ret nz
ld a,l
ld (X_NEW),a
ld hl,_NULL
Y_CIRC equ $-2
push hl
add hl,de
call PUT1PX
pop hl
sbc hl,de
;
PUT1PX inc h
dec h
ret nz
ld a,l
cp #C0
ret nc
push de
ld d,a
ld e,_NULL
X_NEW equ $-1
push bc
call PLOT
pop bc
pop de
ret
;----------------------------------------;
;----------------------------------------;
;выч. адреса и проверка состояния точки
POINT
LD B,#07
LD A,D
RRA
SCF
RRA
RRA
AND #5F
LD H,A
XOR E
AND B
XOR E
RRCA
RRCA
RRCA
LD L,A
LD A,D
XOR H
AND B
XOR H
LD H,A
LD A,E
AND B
LD B,A
LD A,#80
JR Z,GO_PNT
LP_PNT RRCA
DJNZ LP_PNT
GO_PNT LD C,A
AND (HL)
RET
;
POINTHL
PUSH HL
CALL POINT
POP HL
RET
;----------------------------------------;
;установка точки
PLOT
CALL POINT
LD A,(P_FLAG)
PUSH HL
LD HL,#A9A9 ;over 1, inv. 1
BIT 0,A
JR NZ,IF_PLT1
LD L,#B1 ;[or c] - over 0
IF_PLT1 BIT 2,A
JR NZ,IF_PLT2
LD H,#00 ;[nop] - inverse 1
IF_PLT2 LD (OVR_PLT),HL
POP HL
LD A,(HL)
OVR_PLT OR C
INV_PLT XOR C
;
TO_PLOT ;вход для пр-ры заливки и др.
LD (HL),A
LD A,(P_FLAG)
BIT 4,A
RET NZ
LD A,H
RRA
RRA
RRA
AND #03
OR #58
LD H,A
LD A,(ATTR_P)
LD (HL),A
RET
;----------------------------------------;
для over 1 добавляем: