a shadow :D
parent
94e293ab0f
commit
20e2e1a88c
Binary file not shown.
@ -1,34 +1,74 @@
|
|||||||
[org 0x1000]
|
[org 0x1000]
|
||||||
|
|
||||||
|
start:
|
||||||
|
mov ah, 01h ;make cursor invisible
|
||||||
|
mov cx, 2607h
|
||||||
|
int 10h
|
||||||
|
|
||||||
jmp start
|
mov ah, 06h ; Scroll up function
|
||||||
data:
|
xor al, al ; Clear entire screen
|
||||||
msg db ' POETIC SOFTWARE',0
|
xor cx, cx ; Upper left corner CH=row, CL=column
|
||||||
|
mov dx, 184FH ; lower right corner DH=row, DL=column
|
||||||
|
mov bh, 1Eh ; YellowOnBlue
|
||||||
|
int 10H ; execute interrupt
|
||||||
|
|
||||||
start:
|
mov ah, 06h ;draw rect on background
|
||||||
mov dl,7h
|
mov cx, 0101h
|
||||||
mov ah,2
|
mov dx, 164Dh
|
||||||
int 21h
|
mov bh, 3Eh
|
||||||
|
int 10h
|
||||||
MOV AH, 06h ; Scroll up function
|
|
||||||
XOR AL, AL ; Clear entire screen
|
mov ah, 06h ;draw shadow
|
||||||
XOR CX, CX ; Upper left corner CH=row, CL=column
|
mov cx, 1702h
|
||||||
MOV DX, 184FH ; lower right corner DH=row, DL=column
|
mov dx, 174Eh
|
||||||
MOV BH, 1Eh ; YellowOnBlue
|
mov bh, 0Eh
|
||||||
INT 10H
|
int 10h
|
||||||
|
mov ah, 06h ;draw shadow
|
||||||
mov si, msg
|
mov cx, 024Eh
|
||||||
call print ; print is a function, use CALL instead of JMP
|
mov dx, 174Eh
|
||||||
|
mov bh, 0Eh
|
||||||
cli
|
int 10h
|
||||||
hlt
|
|
||||||
print:
|
|
||||||
lodsb
|
mov ah, 02h ;sets cursor to top to write
|
||||||
or al, al
|
mov bh, 0h
|
||||||
jz exit
|
mov dh, 1h
|
||||||
mov ah,0x0e
|
mov dl, 1h
|
||||||
int 10h
|
int 10h
|
||||||
jmp print
|
|
||||||
exit:
|
mov al, 0xC9 ;draw border
|
||||||
ret
|
mov bl, 0x03
|
||||||
|
mov ah,0x0e
|
||||||
|
int 10h
|
||||||
|
mov al, 0xCD
|
||||||
|
mov bl, 0x03
|
||||||
|
mov ah,0x0e
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
mov ah, 02h ;sets cursor to top to write
|
||||||
|
mov bh, 0h
|
||||||
|
mov dh, 4h
|
||||||
|
mov dl, 4h
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
mov si, msg1
|
||||||
|
call print
|
||||||
|
mov si, msg2
|
||||||
|
|
||||||
|
|
||||||
|
print:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz exit
|
||||||
|
mov bl, 0x03
|
||||||
|
mov ah,0x0e
|
||||||
|
int 10h
|
||||||
|
jmp print
|
||||||
|
exit:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
msg1 db " X P U B",0x0A,0
|
||||||
|
msg2 db " NOT MY DEFAULT",0x0D,0x0A,0
|
||||||
|
|
||||||
|
Binary file not shown.
@ -0,0 +1,37 @@
|
|||||||
|
[org 0x1000]
|
||||||
|
|
||||||
|
mov ah, 0x00
|
||||||
|
mov al, 0x13
|
||||||
|
int 0x10
|
||||||
|
|
||||||
|
|
||||||
|
jmp start
|
||||||
|
|
||||||
|
data:
|
||||||
|
msg db ' POETIC SOFTWARE',0
|
||||||
|
|
||||||
|
start:
|
||||||
|
MOV AH, 06h ; Scroll up function
|
||||||
|
XOR AL, AL ; Clear entire screen
|
||||||
|
XOR CX, CX ; Upper left corner CH=row, CL=column
|
||||||
|
MOV DX, 184FH ; lower right corner DH=row, DL=column
|
||||||
|
MOV BH, 1Eh ; YellowOnBlue
|
||||||
|
INT 10H
|
||||||
|
|
||||||
|
mov si, msg
|
||||||
|
call print ; print is a function, use CALL instead of JMP
|
||||||
|
|
||||||
|
cli
|
||||||
|
hlt
|
||||||
|
print:
|
||||||
|
lodsb
|
||||||
|
or al, al
|
||||||
|
jz exit
|
||||||
|
mov ah,0x0e
|
||||||
|
mov bh, 0x00
|
||||||
|
mov bl, 0x07
|
||||||
|
int 10h
|
||||||
|
jmp print
|
||||||
|
exit:
|
||||||
|
ret
|
||||||
|
|
@ -0,0 +1,190 @@
|
|||||||
|
[org 0x1000]
|
||||||
|
|
||||||
|
push 0a000h ;Video memory graphics segment
|
||||||
|
pop es
|
||||||
|
|
||||||
|
mov ax, 0012h ;320x200@8bpp
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
|
||||||
|
push 0Eh ;Blue
|
||||||
|
push 10 ;cX
|
||||||
|
push 10 ;cY
|
||||||
|
push 10 ;Radius
|
||||||
|
call drawFilledCircle
|
||||||
|
|
||||||
|
push 02h ;Blue
|
||||||
|
push 40 ;cX
|
||||||
|
push 40 ;cY
|
||||||
|
push 30 ;Radius
|
||||||
|
call drawFilledCircle
|
||||||
|
|
||||||
|
push 06h ;Blue
|
||||||
|
push 140 ;cX
|
||||||
|
push 100 ;cY
|
||||||
|
push 70 ;Radius
|
||||||
|
call drawFilledCircle
|
||||||
|
|
||||||
|
main: ; Label for the start of the main program
|
||||||
|
|
||||||
|
mov ax,0x0000 ; Setup the Data Segment register
|
||||||
|
; Location of data is DS:Offset
|
||||||
|
mov ds,ax ; This can not be loaded directly it has to be in two steps.
|
||||||
|
; 'mov ds, 0x0000' will NOT work due to limitations on the CPU
|
||||||
|
|
||||||
|
mov si, HelloWorld ; Load the string into position for the procedure.
|
||||||
|
call PutStr ; Call/start the procedure
|
||||||
|
|
||||||
|
mov dx, 0C14h ;DH=12 row, DL=20 column
|
||||||
|
mov bh, 0 ;BH=0 display page
|
||||||
|
mov ah, 02h ;AH=02h set cursor position function
|
||||||
|
int 10h ;video BIOS interrupt
|
||||||
|
|
||||||
|
mov bx, 000Ch ;BH=0 display page, BL=12 red
|
||||||
|
mov ax, 0E42h ;AH=0Eh teletype function, AL=66 capital B
|
||||||
|
int 10h ;video BIOS interrupt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Procedures
|
||||||
|
PutStr: ; Procedure label/start
|
||||||
|
; Set up the registers for the interrupt call
|
||||||
|
mov ah,0x0E ; The function to display a chacter (teletype)
|
||||||
|
mov bh,0x00 ; Page number
|
||||||
|
mov bl,0x0C ; Normal text attribute
|
||||||
|
|
||||||
|
.nextchar ; Internal label (needed to loop round for the next character)
|
||||||
|
lodsb ; I think of this as LOaD String Block
|
||||||
|
; (Not sure if thats the real meaning though)
|
||||||
|
; Loads [SI] into AL and increases SI by one
|
||||||
|
; Check for end of string '0'
|
||||||
|
or al,al ; Sets the zero flag if al = 0
|
||||||
|
; (OR outputs 0's where there is a zero bit in the register)
|
||||||
|
jz .return ; If the zero flag has been set go to the end of the procedure.
|
||||||
|
; Zero flag gets set when an instruction returns 0 as the answer.
|
||||||
|
int 0x10 ; Run the BIOS video interrupt
|
||||||
|
jmp .nextchar ; Loop back round tothe top
|
||||||
|
.return ; Label at the end to jump to when complete
|
||||||
|
ret ; Return to main program
|
||||||
|
|
||||||
|
|
||||||
|
;Color
|
||||||
|
;cX
|
||||||
|
;cY
|
||||||
|
;R
|
||||||
|
drawFilledCircle:
|
||||||
|
push bp
|
||||||
|
mov bp, sp
|
||||||
|
|
||||||
|
sub sp, 02h
|
||||||
|
|
||||||
|
mov cx, WORD [bp+04h] ;R
|
||||||
|
|
||||||
|
mov ax, cx
|
||||||
|
mul ax ;AX = R^2
|
||||||
|
mov WORD [bp-02h], ax ;[bp-02h] = R^2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mov ax, WORD [bp+06h]
|
||||||
|
sub ax, cx ;i = cY-R
|
||||||
|
mov bx, WORD [bp+08h]
|
||||||
|
sub bx, cx ;j = cX-R
|
||||||
|
|
||||||
|
shl cx, 1
|
||||||
|
mov dx, cx ;DX = Copy of 2R
|
||||||
|
|
||||||
|
.advance_v:
|
||||||
|
push cx
|
||||||
|
push bx
|
||||||
|
|
||||||
|
mov cx, dx
|
||||||
|
|
||||||
|
.advance_h:
|
||||||
|
;Save values
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
push dx
|
||||||
|
|
||||||
|
;Compute (i-y) and (j-x)
|
||||||
|
sub ax, WORD [bp+06h]
|
||||||
|
sub bx, WORD [bp+08h]
|
||||||
|
|
||||||
|
mul ax ;Compute (i-y)^2
|
||||||
|
|
||||||
|
push ax
|
||||||
|
mov ax, bx
|
||||||
|
mul ax
|
||||||
|
pop bx ;Compute (j-x)^2 in ax, (i-y)^2 is in bx now
|
||||||
|
|
||||||
|
add ax, bx ;(j-x)^2 + (i-y)^2
|
||||||
|
cmp ax, WORD [bp-02h] ;;(j-x)^2 + (i-y)^2 <= R^2
|
||||||
|
|
||||||
|
;Restore values before jump
|
||||||
|
pop dx
|
||||||
|
pop ax
|
||||||
|
pop bx
|
||||||
|
|
||||||
|
ja .continue ;Skip pixel if (j-x)^2 + (i-y)^2 > R^2
|
||||||
|
|
||||||
|
;Write pixel
|
||||||
|
push WORD [bp+0ah]
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
call writePx
|
||||||
|
|
||||||
|
|
||||||
|
.continue:
|
||||||
|
|
||||||
|
;Advance j
|
||||||
|
inc bx
|
||||||
|
loop .advance_h
|
||||||
|
|
||||||
|
;Advance i
|
||||||
|
inc ax
|
||||||
|
|
||||||
|
|
||||||
|
pop bx ;Restore j
|
||||||
|
pop cx ;Restore counter
|
||||||
|
|
||||||
|
loop .advance_v
|
||||||
|
|
||||||
|
add sp, 02h
|
||||||
|
|
||||||
|
|
||||||
|
pop bp
|
||||||
|
ret 08h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;Color
|
||||||
|
;X
|
||||||
|
;Y
|
||||||
|
writePx:
|
||||||
|
push bp
|
||||||
|
mov bp, sp
|
||||||
|
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
|
||||||
|
mov bx, WORD [bp+04h]
|
||||||
|
mov ax, bx
|
||||||
|
shl bx, 6
|
||||||
|
shl ax, 8
|
||||||
|
add bx, ax ;320 = 256 + 64
|
||||||
|
|
||||||
|
add bx, WORD [bp+06h]
|
||||||
|
mov ax, WORD [bp+08h]
|
||||||
|
|
||||||
|
;TODO: Clip
|
||||||
|
|
||||||
|
mov BYTE [es:bx], al
|
||||||
|
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
|
||||||
|
pop bp
|
||||||
|
ret 06h
|
||||||
|
|
||||||
|
|
||||||
|
HelloWorld db ' Not My Default Bootloader',0x0D,0x0A,0
|
Loading…
Reference in New Issue