[SOLVED] CS algorithm # Keypad and LED Display Simulator driver/API file.

$25

File Name: CS_algorithm_#_Keypad_and_LED_Display_Simulator_driver/API_file..zip
File Size: 602.88 KB

5/5 - (1 vote)

# Keypad and LED Display Simulator driver/API file.
# All the public functions in this file are marked .globl.

.include constants.asm
.include macros.asm

.data
.eqv CHAR_PATTERN_SIZE 5

# each character is a 55 pixel block, stored row-by-row.
# have a look at the comments on the right to see what each character is.
ASCII_patterns:
.byte 0b00100 0b00100 0b00100 0b00000 0b00100 # !
.byte 0b01010 0b01010 0b00000 0b00000 0b00000 #
.byte 0b01010 0b11111 0b01010 0b11111 0b01010 # #
.byte 0b01110 0b10100 0b01110 0b00101 0b01110 # $
.byte 0b10001 0b00010 0b00100 0b01000 0b10001 # %
.byte 0b01000 0b10100 0b01000 0b10101 0b01010 # &
.byte 0b00100 0b00100 0b00000 0b00000 0b00000 #
.byte 0b00010 0b00100 0b00100 0b00100 0b00010 # (
.byte 0b01000 0b00100 0b00100 0b00100 0b01000 # )
.byte 0b00100 0b10101 0b01110 0b01010 0b10001 # *
.byte 0b00000 0b00100 0b01110 0b00100 0b00000 # +
.byte 0b00000 0b00000 0b00000 0b01000 0b10000 # ,
pat_dash:
.byte 0b00000 0b00000 0b01110 0b00000 0b00000 #
.byte 0b00000 0b00000 0b00000 0b00000 0b10000 # .
.byte 0b00001 0b00010 0b00100 0b01000 0b10000 # /
Digit_patterns:
.byte 0b01110 0b10011 0b10101 0b11001 0b01110 # 0
.byte 0b00100 0b01100 0b00100 0b00100 0b01110 # 1
.byte 0b11111 0b00001 0b11111 0b10000 0b11111 # 2
.byte 0b11110 0b00001 0b00110 0b00001 0b11110 # 3
.byte 0b10001 0b10001 0b11111 0b00001 0b00001 # 4
.byte 0b11111 0b10000 0b11110 0b00001 0b11110 # 5
.byte 0b01110 0b10000 0b11110 0b10001 0b01110 # 6
.byte 0b11111 0b00001 0b00010 0b00100 0b01000 # 7
.byte 0b01110 0b10001 0b01110 0b10001 0b01110 # 8
.byte 0b01110 0b10001 0b01111 0b00001 0b01110 # 9
.byte 0b00000 0b01000 0b00000 0b01000 0b00000 # :
.byte 0b00000 0b01000 0b00000 0b01000 0b10000 # ;
.byte 0b00011 0b01100 0b10000 0b01100 0b00011 # <.byte 0b00000 0b01110 0b00000 0b01110 0b00000 # =.byte 0b11000 0b00110 0b00001 0b00110 0b11000 # >
.byte 0b01110 0b10001 0b00010 0b00000 0b00010 # ?
.byte 0b01110 0b10001 0b10111 0b10000 0b01110 # @
Uppercase_patterns:
.byte 0b01110 0b10001 0b11111 0b10001 0b10001 # A
.byte 0b11110 0b10001 0b11110 0b10001 0b11110 # B
.byte 0b01111 0b10000 0b10000 0b10000 0b01111 # C
.byte 0b11110 0b10001 0b10001 0b10001 0b11110 # D
.byte 0b11111 0b10000 0b11100 0b10000 0b11111 # E
.byte 0b11111 0b10000 0b11100 0b10000 0b10000 # F
.byte 0b01110 0b10000 0b10011 0b10001 0b01110 # G
.byte 0b10001 0b10001 0b11111 0b10001 0b10001 # H
.byte 0b01110 0b00100 0b00100 0b00100 0b01110 # I
.byte 0b01110 0b00100 0b00100 0b10100 0b01000 # J
.byte 0b10010 0b10100 0b11000 0b10100 0b10010 # K
.byte 0b10000 0b10000 0b10000 0b10000 0b11111 # L
.byte 0b10001 0b11011 0b10101 0b10001 0b10001 # M
.byte 0b10001 0b11001 0b10101 0b10011 0b10001 # N
.byte 0b01110 0b10001 0b10001 0b10001 0b01110 # O
.byte 0b11110 0b10001 0b11111 0b10000 0b10000 # P
.byte 0b01110 0b10001 0b10101 0b10011 0b01111 # Q
.byte 0b11110 0b10001 0b11111 0b10010 0b10001 # R
.byte 0b11111 0b10000 0b11111 0b00001 0b11111 # S
.byte 0b11111 0b00100 0b00100 0b00100 0b00100 # T
.byte 0b10001 0b10001 0b10001 0b10001 0b01110 # U
.byte 0b10001 0b10001 0b01010 0b01010 0b00100 # V
.byte 0b10001 0b10001 0b10101 0b11011 0b10001 # W
.byte 0b10001 0b01010 0b00100 0b01010 0b10001 # X
.byte 0b10001 0b01010 0b00100 0b00100 0b00100 # Y
.byte 0b11111 0b00010 0b00100 0b01000 0b11111 # Z
.byte 0b01110 0b01000 0b01000 0b01000 0b01110 # [
.byte 0b10000 0b01000 0b00100 0b00010 0b00001 #
.byte 0b01110 0b00010 0b00010 0b00010 0b01110 # ]
.byte 0b00100 0b01010 0b00000 0b00000 0b00000 # ^
.byte 0b00000 0b00000 0b00000 0b00000 0b11111 # _
.byte 0b01000 0b00100 0b00010 0b00000 0b00000 # `
.byte 0b01110 0b10001 0b11111 0b10001 0b10001 # a (no actual lowercase tho)
.byte 0b11110 0b10001 0b11110 0b10001 0b11110 # b
.byte 0b01111 0b10000 0b10000 0b10000 0b01111 # c
.byte 0b11110 0b10001 0b10001 0b10001 0b11110 # d
.byte 0b11111 0b10000 0b11100 0b10000 0b11111 # e
.byte 0b11111 0b10000 0b11100 0b10000 0b10000 # f
.byte 0b01110 0b10000 0b10011 0b10001 0b01110 # g
.byte 0b10001 0b10001 0b11111 0b10001 0b10001 # h
.byte 0b01110 0b00100 0b00100 0b00100 0b01110 # i
.byte 0b01110 0b00100 0b00100 0b10100 0b01000 # j
.byte 0b10010 0b10100 0b11000 0b10100 0b10010 # k
.byte 0b10000 0b10000 0b10000 0b10000 0b11111 # l
.byte 0b10001 0b11011 0b10101 0b10001 0b10001 # m
.byte 0b10001 0b11001 0b10101 0b10011 0b10001 # n
.byte 0b01110 0b10001 0b10001 0b10001 0b01110 # o
.byte 0b11110 0b10001 0b11111 0b10000 0b10000 # p
.byte 0b01110 0b10001 0b10101 0b10011 0b01111 # q
.byte 0b11110 0b10001 0b11111 0b10010 0b10001 # r
.byte 0b11111 0b10000 0b11111 0b00001 0b11111 # s
.byte 0b11111 0b00100 0b00100 0b00100 0b00100 # t
.byte 0b10001 0b10001 0b10001 0b10001 0b01110 # u
.byte 0b10001 0b10001 0b01010 0b01010 0b00100 # v
.byte 0b10001 0b10001 0b10101 0b11011 0b10001 # w
.byte 0b10001 0b01010 0b00100 0b01010 0b10001 # x
.byte 0b10001 0b01010 0b00100 0b00100 0b00100 # y
.byte 0b11111 0b00010 0b00100 0b01000 0b11111 # z
.byte 0b00110 0b00100 0b01000 0b00100 0b00110 # {
.byte 0b00100 0b00100 0b00100 0b00100 0b00100 # |
.byte 0b01100 0b00100 0b00010 0b00100 0b01100 # }
.byte 0b01010 0b10100 0b00000 0b00000 0b00000 # ~

.globl frame_counter
frame_counter:.word 0
last_frame_time:.word 0
last_frame_keys:.word 0
this_frame_keys:.word 0

.text
# –
# returns a bitwise OR of the key constants, indicating which keys are being held down.
# you MUST call wait_for_next_frame for this to work properly.
.globl input_get_keys_held
input_get_keys_held:
lw v0, this_frame_keys
jr ra

# –
# returns a bitwise OR of the key constants, indicating which keys were pressed on this frame.
# you MUST call wait_for_next_frame for this to work properly.
.globl input_get_keys_pressed
input_get_keys_pressed:
lwt0, last_frame_keys
not t0, t0
lwv0, this_frame_keys
and v0, v0, t0
jr ra

# –
# returns a bitwise OR of the key constants, indicating which keys were released on this frame.
# you MUST call wait_for_next_frame for this to work properly.
.globl input_get_keys_released
input_get_keys_released:
lwt0, this_frame_keys
not t0, t0
lwv0, last_frame_keys
and v0, v0, t0
jr ra

# –
# call once per main loop to keep the game running at a given FPS.
# also increments frame_counter once per call.
.globl wait_for_next_frame
wait_for_next_frame:
enter s0
lw s0, last_frame_time
_loop:
# while (sys_time() last_frame_time) < MS_PER_FRAME {}syscall_timesubt1, v0, s0bltu t1, MS_PER_FRAME, _loop# save the timesw v0, last_frame_time# frame_counter++lwt0, frame_counterinc t0swt0, frame_counter# last_frame_keys = this_frame_keyslw t0, this_frame_keyssw t0, last_frame_keys# this_frame_keys = DISPLAY_KEYSlw t0, DISPLAY_KEYSsw t0, this_frame_keysleave s0# ————————————————————————————————-# copies the color data from display RAM onto the screen..globl display_updatedisplay_update:sw zero, DISPLAY_CTRLjr ra# ————————————————————————————————-# copies the color data from display RAM onto the screen, and then clears display RAM.# does not clear the display, only the RAM so you can draw a new frame from scratch!.globl display_update_and_cleardisplay_update_and_clear:li t0, 1sw t0, DISPLAY_CTRLjr ra# ————————————————————————————————-# sets 1 pixel to a given color.# (0, 0) is in the top LEFT, and Y increases DOWNWARDS!# arguments:#a0 = x#a1 = y#a2 = color (use one of the constants above).globl display_set_pixeldisplay_set_pixel:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64sll t0, a1, DISPLAY_W_SHIFTadd t0, t0, a0add t0, t0, DISPLAY_BASEsba2, (t0)jrra# ————————————————————————————————-# draws a horizontal line starting at (x, y) and going to (x + width – 1, y).# (0, 0) is in the top LEFT of the screen.# arguments:#a0 = x#a1 = y#a2 = width#a3 = color (use one of the constants above).globl display_draw_hlinedisplay_draw_hline:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64sll t0, a1, DISPLAY_W_SHIFTadd t0, t0, a0add t0, t0, DISPLAY_BASE_loop:sb a3, (t0)inct0deca2bnez a2, _loopjr ra# ————————————————————————————————-# draws a vertical line starting at (x, y) and going to (x, y + height – 1).# (0, 0) is in the top LEFT, and Y increases DOWNWARDS!# arguments:#a0 = x#a1 = y#a2 = height#a3 = color (use one of the constants above).globl display_draw_vlinedisplay_draw_vline:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64sll t0, a1, DISPLAY_W_SHIFTadd t0, t0, a0add t0, t0, DISPLAY_BASE_loop:sba3, (t0)add t0, t0, DISPLAY_Wdeca2bnez a2, _loopjr ra# ————————————————————————————————-# fills a rectangle of pixels with a given color.# there are FIVE arguments, and I was naughty and used ‘v1’ as a “fifth argument register.”# this is technically bad practice. sue me.# arguments:#a0 = top-left corner x#a1 = top-left corner y#a2 = width#a3 = height#v1 = color (use one of the constants above).globl display_fill_rectdisplay_fill_rect:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64# turn w/h into x2/y2add a2, a2, a0add a3, a3, a1# turn y1/y2 into addresseslit0, DISPLAY_BASEsll a1, a1, DISPLAY_W_SHIFTadd a1, a1, t0add a1, a1, a0sll a3, a3, DISPLAY_W_SHIFTadd a3, a3, t0move t0, a1_loop_y:move t1, t0move t2, a0_loop_x:sb v1, (t1)inc t1inc t2blt t2, a2, _loop_xaddi t0, t0, DISPLAY_Wbltt0, a3, _loop_yjr ra# ————————————————————————————————-# exactly the same as display_fill_rect, but works faster for rectangles whose width and X coord# are a multiple of 4.# IF X IS NOT A MULTIPLE OF 4, IT WILL CRASH.# IF WIDTH IS NOT A MULTIPLE OF 4, IT WILL DO WEIRD THINGS.# arguments:#same as display_fill_rect..globl display_fill_rect_fastdisplay_fill_rect_fast:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64# duplicate color across v1and v1, v1, 0xFFmul v1, v1, 0x01010101add a2, a2, a0 # a2 = x2add a3, a3, a1 # a3 = y2# t0 = display base addressli t0, DISPLAY_BASE# a1 = start addresssll a1, a1, DISPLAY_W_SHIFTadd a1, a1, t0add a1, a1, a0# a3 = end addresssll a3, a3, DISPLAY_W_SHIFTadd a3, a3, t0# t0 = current row’s start addressmove t0, a1_loop_y:move t1, t0 # t1 = current addressmove t2, a0 # t2 = current x_loop_x:sw v1, (t1)addi t1, t1, 4addi t2, t2, 4bltt2, a2, _loop_xaddi t0, t0, DISPLAY_Wbltt0, a3, _loop_yjr ra# ——————————————————————————# void display_draw_line(x1, y1, x2, y2, color: v1)# Bresenham’s line algorithm, integer error version adapted from wikipedia# not SUPER fast, use display_draw_hline/display_draw_vline if you only need those directions.globl display_draw_linedisplay_draw_line:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64# dx:t0 =abs(x2-x1);sub t0, a2, a0abs t0, t0# sx:t1 = x1 = dy)
blt t5, t2, _dx
add t4, t4, t2 # err += dy;
add a0, a0, t1 # x1 += sx;

_dx:
# if(e2 <= dx)bgt t5, t0, _loopadd t4, t4, t0 # err += dx;add a1, a1, t3 # y1 += sy;j _loop_exit:jr ra# ————————————————————————————————-# draws a string of text (using the font data at the top of the file) in white.#a0 = top-left x#a1 = top-left y#a2 = pointer to string to print.globl display_draw_textdisplay_draw_text:li a3, COLOR_WHITEj display_draw_colored_text# ————————————————————————————————-# draws a string of text (using the font data at the top of the file) in whatever color you want.#a0 = top-left x#a1 = top-left y#a2 = pointer to string to print# a3 = color.globl display_draw_colored_textdisplay_draw_colored_text:enter s0, s1, s2, s3tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64move s0, a0 # s0: xmove s1, a1 # s1: ymove s2, a2 # s2: char*move s3, a3 # s3: color_loop:lbut0, (s2) # t0 = chbeqz t0, _exit# zero terminator?blet0, 32, _next# nonprintable?bget0, 127, _next # nonprintable?# pattern = ASCII_patterns[ch – 33]subt0, t0, 33mult0, t0, CHAR_PATTERN_SIZEla t1, ASCII_patternsadda2, t0, t1# display_show_char(x, y, pattern, color)move a0, s0move a1, s1move a3, s3jaldisplay_show_char_next:add s0, s0, 6inc s2j _loop_exit:leave s0, s1, s2, s3# ————————————————————————————————-# draws a single character (using the font data at the top of the file) in white.#a0 = top-left x#a1 = top-left y#a2 = character to print.globl display_draw_chardisplay_draw_char:li a3, COLOR_WHITEj display_draw_colored_char# ————————————————————————————————-# draws a single character (using the font data at the top of the file) in whatever color you want.#a0 = top-left x#a1 = top-left y#a2 = character to print# a3 = color.globl display_draw_colored_chardisplay_draw_colored_char:entertlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64beqz a2, _exit# NUL character?blea2, 32, _exit# nonprintable?bgea2, 127, _exit # nonprintable?# pattern = ASCII_patterns[ch – 33]suba2, a2, 33mula2, a2, CHAR_PATTERN_SIZEla t0, ASCII_patternsadda2, a2, t0# display_show_char(x, y, pattern, color)jaldisplay_show_char_exit:leave# ————————————————————————————————-# draws a textual representation of an int in white.#a0 = top-left x#a1 = top-left y#a2 = integer to display (can be negative, will show a – sign).globl display_draw_intdisplay_draw_int:li a3, COLOR_WHITEjdisplay_draw_colored_int# ————————————————————————————————-# draws a textual representation of an int in whatever color you want.#a0 = top-left x#a1 = top-left y#a2 = integer to display (can be negative, will show a – sign)# a3 = color.globl display_draw_colored_intdisplay_draw_colored_int:enter s0, s1, s2, s3, s4tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64move s0, a0 # current xmove s1, a1 # ymove s2, a2 # remaining digits to drawli s3, 1# radix (1, 10, 100 etc)move s4, a3 # color# if it’s negative…bgez s2, _determine_length# make it positivenegs2, s2# draw a -move a0, s0move a1, s1la a2, pat_dashmove a3, s4jaldisplay_show_char# move right by 6adds0, s0, 6# determine the number of digits needed by multiplying radix# by 10 until the radix no longer divides into the number_determine_length:divt0, s2, s3bltt0, 10, _loopmuls3, s3, 10j _determine_length_loop:# extract and strip off top digitdivs2, s3mfhi s2 # keep lower digits in s2mflo a2 # print top digit# get digit pattern addressla t0, Digit_patternsmula2, a2, CHAR_PATTERN_SIZEadda2, a2, t0move a0, s0move a1, s1move a3, s4jaldisplay_show_char# scoot over, decrease radix until it’s 0adds0, s0, 6divs3, s3, 10bnez s3, _loopleave s0, s1, s2, s3, s4# ————————————————————————————————-# draws a textual representation of an int in hex (WITHOUT leading 0x) in white.# does not display negatives with a -, just FFF…etc.#a0 = top-left x#a1 = top-left y#a2 = integer to display# a3 = digits to display [1..8].globl display_draw_int_hexdisplay_draw_int_hex:li v1, COLOR_WHITEjdisplay_draw_colored_int_hex# ————————————————————————————————-# draws a textual representation of an int in hex (WITHOUT leading 0x)in whatever color you want.# does not display negatives with a -, just FFF…etc.#a0 = top-left x#a1 = top-left y#a2 = integer to display# a3 = digits to display [1..8]# v1 = color.globl display_draw_colored_int_hexdisplay_draw_colored_int_hex:enter s0, s1, s2, s3, s4tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64tlti a3, 1tgei a3, 9move s0, a0 # current xmove s1, a1 # ymove s2, a2 # remaining digits to drawsubs3, a3, 1slls3, s3, 2 # shift amount (28, 24, 20…)move s4, v1 # color_loop:# extract current digit ((value >> shift_distance) & 0xF)
srlv a2, s2, s3
anda2, a2, 0xF

la t0, Digit_patterns
blt a2, 10, _decimal
sub a2, a2, 10
lat0, Uppercase_patterns
_decimal:

# get pattern address
mula2, a2, CHAR_PATTERN_SIZE
adda2, a2, t0
move a0, s0
move a1, s1
move a3, s4
jaldisplay_show_char

# scoot over, decrease shift amount until its < 0add s0, s0, 6sub s3, s3, 4bgez s3, _loopleave s0, s1, s2, s3, s4# ————————————————————————————————-# quickly draw a 5×5-pixel pattern to the display. it can have transparent# pixels; those with COLOR_NONE will not change the display. This way you can# have “holes” in your images.# this function screen-wraps vertically properly. horizontally it just cheats# and takes advantage of the fact that writing past the end of a row writes to# the next row, but it’s one pixel… cmon………..#a0 = top-left x#a1 = top-left y#a2 = pointer to pattern (an array of 25 bytes stored row-by-row).globl display_blit_5x5_transdisplay_blit_5x5_trans:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64sll t1, a1, DISPLAY_W_SHIFTadd t1, t1, DISPLAY_BASEadd t1, t1, a0.macro BLIT_TRANS_PIXEL %off1, %off2lb t0, %off1(a2)bltz t0, _transparentsb t0, %off2(t1)_transparent:.end_macro.macro NEXT_ROWadd t1, t1, 64blt t1, DISPLAY_END, _nowrapsub t1, t1, DISPLAY_SIZE_nowrap:.end_macroBLIT_TRANS_PIXEL 0, 0BLIT_TRANS_PIXEL 1, 1BLIT_TRANS_PIXEL 2, 2BLIT_TRANS_PIXEL 3, 3BLIT_TRANS_PIXEL 4, 4NEXT_ROWBLIT_TRANS_PIXEL 5, 0BLIT_TRANS_PIXEL 6, 1BLIT_TRANS_PIXEL 7, 2BLIT_TRANS_PIXEL 8, 3BLIT_TRANS_PIXEL 9, 4NEXT_ROWBLIT_TRANS_PIXEL 10, 0BLIT_TRANS_PIXEL 11, 1BLIT_TRANS_PIXEL 12, 2BLIT_TRANS_PIXEL 13, 3BLIT_TRANS_PIXEL 14, 4NEXT_ROWBLIT_TRANS_PIXEL 15, 0BLIT_TRANS_PIXEL 16, 1BLIT_TRANS_PIXEL 17, 2BLIT_TRANS_PIXEL 18, 3BLIT_TRANS_PIXEL 19, 4NEXT_ROWBLIT_TRANS_PIXEL 20, 0BLIT_TRANS_PIXEL 21, 1BLIT_TRANS_PIXEL 22, 2BLIT_TRANS_PIXEL 23, 3BLIT_TRANS_PIXEL 24, 4jr ra# ————————————————————————————————-# quickly draw a 5×5-pixel pattern to the display without transparency.# if it has any COLOR_NONE pixels, the result is undefined.#a0 = top-left x#a1 = top-left y#a2 = pointer to pattern (an array of 25 bytes stored row-by-row).globl display_blit_5x5display_blit_5x5:tlti a0, 0tgei a0, 64tlti a1, 0tgei a1, 64sll a1, a1, DISPLAY_W_SHIFTadd a1, a1, DISPLAY_BASEadd a1, a1, a0.macro BLIT_PIXEL %off1, %off2lb t0, %off1(a2)sb t0, %off2(a1).end_macroBLIT_PIXEL 0, 0BLIT_PIXEL 1, 1BLIT_PIXEL 2, 2BLIT_PIXEL 3, 3BLIT_PIXEL 4, 4BLIT_PIXEL 5, 64BLIT_PIXEL 6, 65BLIT_PIXEL 7, 66BLIT_PIXEL 8, 67BLIT_PIXEL 9, 68BLIT_PIXEL 10, 128BLIT_PIXEL 11, 129BLIT_PIXEL 12, 130BLIT_PIXEL 13, 131BLIT_PIXEL 14, 132BLIT_PIXEL 15, 192BLIT_PIXEL 16, 193BLIT_PIXEL 17, 194BLIT_PIXEL 18, 195BLIT_PIXEL 19, 196BLIT_PIXEL 20, 256BLIT_PIXEL 21, 257BLIT_PIXEL 22, 258BLIT_PIXEL 23, 259BLIT_PIXEL 24, 260jr ra# ————————————————————————————————-# draw a character pattern to the display. unlike graphical patterns, these are bitmasks:# 1 to draw a pixel and 0 for transparency. the drawn pixels’ color is given by a3.#a0 = top-left x#a1 = top-left y#a2 = pointer to pattern (an array of 5 bytes stored row-by-row)# a3 = text color# NOT globl, internal to this filedisplay_show_char:# t1: display pointersll t1, a1, DISPLAY_W_SHIFTadd t1, t1, DISPLAY_BASEadd t1, t1, a0.macro CHAR_PIXEL %mask, %off2andt0, t2, %maskbeqz t0, _transparentsb a3, %off2(t1)_transparent:.end_macro# t2: pixel masklbt2, 0(a2)CHAR_PIXEL 0x10, 0CHAR_PIXEL 0x08, 1CHAR_PIXEL 0x04, 2CHAR_PIXEL 0x02, 3CHAR_PIXEL 0x01, 4lbt2, 1(a2)CHAR_PIXEL 0x10, 64CHAR_PIXEL 0x08, 65CHAR_PIXEL 0x04, 66CHAR_PIXEL 0x02, 67CHAR_PIXEL 0x01, 68lbt2, 2(a2)CHAR_PIXEL 0x10, 128CHAR_PIXEL 0x08, 129CHAR_PIXEL 0x04, 130CHAR_PIXEL 0x02, 131CHAR_PIXEL 0x01, 132lbt2, 3(a2)CHAR_PIXEL 0x10, 192CHAR_PIXEL 0x08, 193CHAR_PIXEL 0x04, 194CHAR_PIXEL 0x02, 195CHAR_PIXEL 0x01, 196lbt2, 4(a2)CHAR_PIXEL 0x10, 256CHAR_PIXEL 0x08, 257CHAR_PIXEL 0x04, 258CHAR_PIXEL 0x02, 259CHAR_PIXEL 0x01, 260jr ra

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] CS algorithm # Keypad and LED Display Simulator driver/API file.
$25