This library + the demo I created can help students studying Computer Architecture in their Coursework. You can use it jusr for reference or use all of the Graphics macros and functions I created for you.
It was created for the TASM
Assembler.
This is a simple demo, demonstrating the Usage of the Graphics and the Utilities Libraries. To compile and run it:
> tasm demo.asm
> tlink demo.obj
> demo.exe
- Adding line drawing function using Bresenham's line algorithm
- Adding circle drawing function using Bresenham's circle algorithm
- Border only / Filled shapes
The graphics library has some neat macros and functions.
Sets the video mode to whatever mode specified.
Note: This macro uses the AX
register.
Usage Example:
gx_set_video_mode 13h
Sets the video mode 13h
- 320x200 256 color graphics (MCGA,VGA).
Note: This macro uses the AX
and ES
registers.
Usage Example:
gx_set_video_mode_gx
Sets the video mode 03h
- 80x25 Monochrome text (MDA,HERC,EGA,VGA).
Note: This macro uses the AX
register.
Usage Example:
gx_set_video_mode_txt
Sets a pixel using Video Memory. Relies upon having the Video Memory star address set in the ES
register. Note that you don't have to do that if you initialised the Graphics mode using: gx_set_video_mode_gx
and you haven't changed the value in the ES
register.
_Note: This macro only works if you are using Graphics Mode 13h
and you've initialised the graphics mode with the: gx_set_video_mode_gx
macro.
Note: This macro uses the AX
, BX
and DI
registers and Video Memory.
Usage Example:
gx_pixel 10, 10, 47 ; X: 10, Y: 10, Color: 47 (Green)
Sets a pixel using the BIOS int 10h
API.
This function is slower than gx_pixel
so except in the cases where you must use a Graphics Mode different than 13h
the usage if gx_pixel
is recommended.
Note: This macro uses the AX
, CX
and DX
registers.
Usage Example:
gx_pixel_bios 10, 10, 47 ; X: 10, Y: 10, Color: 47 (Green)
Draws a filled rectange between (x1;y1) and (x2;y2) Parameters:
gx_x1
gx_y1
gx_x2
gx_y2
gx_color
Note: This function requires graphics mode 13h
initalised with: gx_set_video_mode_gx
.
Note: This function uses the AX
, BX
and DI
registers and Video Memory.
Usage Example:
; To draw a Green Square, 10 pixels wide.
mov gx_x1, 10 ; X1 = 10
mov gx_y1, 10 ; Y1 = 10
mov gx_x2, 20 ; X2 = 20
mov gx_y2, 20 ; Y2 = 20
mov gx_color, 47 ; Color = 10
call gx_rect
To move the content of one memory variable to another.
Usage Example:
movv gx_x1, gx_x2
Compares two memory variables using a register for temprary storage.
Usage Example:
cmpv gx_x1, gx_x2, ax ; Compares gx_x1 and gx_x2 using the AX register
Adds two memory variables.
Usage Example:
addv gx_x1, gx_x2, ax
Subtracts two memory variables.
Usage Example:
subv gx_x1, gx_x2, ax
Returns control to DOS returning the specified in the first argument code.
Usage Example:
return 0
Pushes AX
, BX
, CX
and DX
to the stack.
Can be later retrieved by: restore_registers
.
Usage Example:
mov ax, 10
mov bx, 20
save_registers
mov ax, 30
mov bx, 50
restore_registers
; AX is now 10 and BX is now 20
Pops AX
, BX
, CX
and DX
from the stack.
See: save_registers
.
Usage Example:
mov ax, 10
mov bx, 20
save_registers
mov ax, 30
mov bx, 50
restore_registers
; AX is now 10 and BX is now 20
Checks for a keypress. Sets ZF
if no keypress is available. Otherwise returns it's scan code into AH
and it's ASCII code into AL
. Removes the character from the Type Ahead Buffer
Note: This function uses the AX
register.
Usage Example:
start:
mainloop:
call check_keypress
jz render ; No keypress available - skip other instructions and render a frame
cmp al, 27 ; Check if ASCII code of the key is 27 (ESC)
je exit ; If so exit the program
render:
; Some Graphics code
jmp mainloop
exit:
return 0
This library and it's supporting documentation are released under The MIT License (MIT)
.