144 lines
3.7 KiB
NASM
144 lines
3.7 KiB
NASM
|
label draw_char_pixels:
|
||
|
|
||
|
shift 5 2 1; Shift 5 by count in R(2)
|
||
|
|
||
|
loadi 6 1;
|
||
|
and 1 6 1; Mask with 0x01
|
||
|
|
||
|
loadi 6 $FFFFFF
|
||
|
mul 1 6 1;
|
||
|
|
||
|
rstore 1 $B; Transfer RAX to the Address Stored in R11
|
||
|
|
||
|
inc $B; Increment VBuf Pointer
|
||
|
|
||
|
inc 2; INC Scratch Pixel
|
||
|
loadi 1 8; For Every Pixel in this Row of 8
|
||
|
jneq draw_char_pixels
|
||
|
ret
|
||
|
|
||
|
label draw_char:
|
||
|
ldstore 4 3; Load Arg 1 in 3
|
||
|
|
||
|
loadi 6 $18;
|
||
|
shift 3 6 5; Shift To First Byte
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
loadi 6 $10;
|
||
|
shift 3 6 5; Shift To Second Byte
|
||
|
loadi 6 $0000FF;
|
||
|
and 6 5 5; Mask Off
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
loadi 6 $8;
|
||
|
shift 3 6 5; Shift To Third Byte
|
||
|
loadi 6 $0000FF;
|
||
|
and 6 5 5;
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
loadi 6 $0;
|
||
|
shift 3 6 5; Shift To 4th Byte
|
||
|
loadi 6 $0000FF;
|
||
|
and 6 5 5; MASK off last Byte
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
inc 4; Move to Second Part
|
||
|
ldstore 4 3; Load Arg 1 in 3
|
||
|
|
||
|
loadi 6 $18;
|
||
|
shift 3 6 5; Shift To First Byte
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
loadi 6 $10;
|
||
|
shift 3 6 5; Shift To Second Byte
|
||
|
loadi 6 $0000FF;
|
||
|
and 6 5 5; Mask Off
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
loadi 6 $8;
|
||
|
shift 3 6 5; Shift To Third Byte
|
||
|
loadi 6 $0000FF;
|
||
|
and 6 5 5;
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
|
||
|
loadi 6 $278
|
||
|
add $6 $B $B ; Move VBUF
|
||
|
|
||
|
loadi 6 $0;
|
||
|
shift 3 6 5; Shift To 4th Byte
|
||
|
loadi 6 $0000FF;
|
||
|
and 6 5 5; MASK off last Byte
|
||
|
loadi 2 0; Set Pixel to 8
|
||
|
call draw_char_pixels
|
||
|
ret
|
||
|
|
||
|
label _scratch_draw_string:
|
||
|
nop
|
||
|
|
||
|
label draw_string:
|
||
|
label draw_next_char:
|
||
|
ldstore 4 3; Load Arg 1 in 3
|
||
|
store 4 _scratch_draw_string
|
||
|
|
||
|
loadi $2 $20 ; Load Addr of [SPACE] in $2
|
||
|
sub $3 $2 $1 ; Sub the Character From Space
|
||
|
|
||
|
loadi $2 2
|
||
|
mul $1 $2 $1 ; Mull By 2
|
||
|
|
||
|
loadi $2 char_space
|
||
|
add $2 $1 $1 ; Add to Char Space
|
||
|
|
||
|
tx $4 $1
|
||
|
|
||
|
call draw_char; Call draw_char
|
||
|
|
||
|
loadi $2 8
|
||
|
add $2 $9 $9; // X = X + 9
|
||
|
call set_pos
|
||
|
|
||
|
load $4 _scratch_draw_string
|
||
|
inc $4;
|
||
|
ldstore 4 3; Load Arg 1 in 3
|
||
|
tx $2 $3
|
||
|
loadi $1 0
|
||
|
jneq draw_next_char
|
||
|
ret
|
||
|
|
||
|
label num_to_char:
|
||
|
loadi $2 HEX_TABLE
|
||
|
add $2 $4 $4
|
||
|
ldstore 4 3; Load Arg 1 in 3
|
||
|
loadi $2 $20 ; Load Addr of [SPACE] in $2
|
||
|
sub $3 $2 $1 ; Sub the Character From Space
|
||
|
loadi $2 2
|
||
|
mul $1 $2 $1 ; Mull By 2
|
||
|
loadi $2 char_space
|
||
|
add $2 $1 $1 ; Add to Char Space
|
||
|
tx $4 $1
|
||
|
ret
|