Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- jmp EntryPoint
- ;__________________________________________________________________________________________________________________________________________
- Video.OldMode db ?
- Video.OldPage db ?
- Radius dw 55
- XC dw 160
- YC dw 100
- ;__________________________________________________________________________________________________________________________________________
- EntryPoint:
- mov ah, $0F
- int 10h
- mov [Video.OldMode], al
- mov [Video.OldPage], bh
- mov ax, $0013
- int 10h
- mov ax, $A000
- mov es, ax
- call WhiteFrame
- mov ax, [Radius]
- push ax
- mov ax, [XC]
- push ax
- mov ax, [YC]
- push ax
- call BresenhamCircle
- call PressAnyKey
- movzx ax, [Video.OldMode]
- int 10h
- mov ah, $05
- mov al, [Video.OldPage]
- int 10h
- ret
- PressAnyKey:
- mov ax, $0C08
- int 21h
- test al, al
- jnz @F
- mov ah, $08
- int 21h
- @@:
- ret
- ; Expects - Radius (+8), XCenter (+6), YCenter (+4)
- ; Local Params: X (-2), Y(-4), Delta (-6), Error(-8)
- BresenhamCircle:
- push bp
- mov bp, sp
- sub sp, 8
- push ax
- push bx
- push di
- mov word [bp - 8], 0
- mov word [bp - 2], 0
- mov ax, [bp + 8]
- mov word [bp - 4], ax
- mov bl, 2
- mul bl
- neg ax
- inc ax
- mov word [bp - 6], ax
- .LoopDraw:
- mov ax, word [bp - 2]
- push ax
- mov ax, word [bp - 4]
- push ax
- mov ax, word [bp + 6]
- push ax
- mov ax, word [bp + 4]
- push ax
- call DrawQ
- mov ax, [bp - 6]
- add ax, [bp - 4]
- mov bl, 2
- imul bl
- sub ax, 1
- mov word [bp - 8], ax
- cmp word [bp - 6], 0
- jge .skipIf1
- cmp word [bp - 8], 0
- jg .skipIf1
- add word [bp - 2], 1
- mov ax, word[bp - 2]
- shl ax, 1
- add ax, 1
- add word [bp - 6], ax
- jmp .EndLoop
- .skipIf1:
- mov ax, word [bp - 6]
- sub ax, word [bp - 2]
- mov bl, 2
- imul bl
- sub ax, 1
- mov word [bp - 8], ax
- cmp word [bp - 6], 0
- jle .skipIf2
- cmp word [bp - 8], 0
- jle .skipIf2
- sub word [bp - 4], 1
- mov ax, word [bp - 4]
- shl ax, 1
- neg ax
- add ax, 1
- add word [bp - 6], ax
- jmp .EndLoop
- .skipIf2:
- add word [bp - 2], 1
- mov ax, word [bp - 2]
- sub ax, word [bp - 4]
- shl ax, 1
- add [bp - 6], ax
- sub word [bp - 4], 1
- .EndLoop:
- cmp word [bp - 4], 0
- jge .LoopDraw
- pop di
- pop bx
- pop ax
- mov sp, bp
- pop bp
- ret 6
- ; Expects x(+10) Y(+8) XC(+6) YC(+4)
- DrawQ:
- push bp
- mov bp, sp
- sub sp, 2
- push ax
- push bx
- push cx
- mov ax, [bp + 6]
- sub ax, [bp + 10]
- mov word [bp - 2], ax
- mov cx, ax
- add cx, [bp + 10]
- add cx, [bp + 10]
- .LoopDraw:
- mov ax, [bp + 4]
- sub ax, [bp + 8]
- mov bx, 320
- mul bx
- add ax, [bp - 2]
- mov bx, ax
- mov byte [es:bx], 4
- mov ax, [bp + 4]
- add ax, [bp + 8]
- mov bx, 320
- mul bx
- add ax, [bp - 2]
- mov bx, ax
- mov byte [es:bx], 4
- inc word [bp - 2]
- cmp word [bp - 2], cx
- jna .LoopDraw
- pop cx
- pop bx
- pop ax
- mov sp, bp
- pop bp
- ret 8
- WhiteFrame:
- push bx
- lea bx, [320 * 200 - 1]
- .LoopDraw:
- mov byte [es:bx], 15
- sub bx, 1
- cmp bx, $FFFF
- jne .LoopDraw
- pop bx
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement