Upload files to "programs/games/solitare"
Add KOSfuncs.inc
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
; Solitaire V1.5 - Window Edition
|
||||
; Platform: MenuetOS / KolibriOS
|
||||
; Solitare V1.5.1 - KOSfuncs Edition
|
||||
; Platform: KolibriOS / MenuetOS
|
||||
; Author: Max
|
||||
|
||||
format binary as 'run'
|
||||
@@ -8,19 +8,9 @@ org 0x0
|
||||
|
||||
; --- SYSTEM INCLUDES ---
|
||||
include 'macros.inc'
|
||||
include 'KOSfuncs.inc'
|
||||
|
||||
; --- CONSTANTS ---
|
||||
SYS_REDRAW equ 12
|
||||
SYS_KEY equ 2
|
||||
SYS_BUTTON equ 17
|
||||
SYS_MOUSE_POS equ 37
|
||||
SYS_DRAW_WINDOW equ 0
|
||||
SYS_EXIT equ -1
|
||||
SYS_BLIT equ 7
|
||||
SYS_RANDOM equ 3
|
||||
SYS_DELAY equ 5
|
||||
SYS_GET_SKIN_H equ 48
|
||||
|
||||
; --- GAME CONSTANTS ---
|
||||
CARD_W equ 50
|
||||
CARD_H equ 70
|
||||
STACK_OFFSET equ 20
|
||||
@@ -51,7 +41,7 @@ STOCK_X equ 20
|
||||
WASTE_X equ 80
|
||||
FOUNDATION_X equ 350
|
||||
FOUND_Y equ 20
|
||||
SCORE_Y equ 535
|
||||
SCORE_Y equ 535
|
||||
|
||||
; --- HEADER ---
|
||||
db 'MENUET01'
|
||||
@@ -64,7 +54,9 @@ dd 0, 0
|
||||
|
||||
start:
|
||||
mov esp, stacktop
|
||||
mcall SYS_GET_SKIN_H, 4
|
||||
|
||||
; Get skin height using KOSfuncs constant
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
mov [skin_h], eax
|
||||
|
||||
call init_deck
|
||||
@@ -74,90 +66,90 @@ start:
|
||||
mov byte [game_won], 0
|
||||
|
||||
event_loop:
|
||||
mcall 11
|
||||
cmp eax, 1
|
||||
mcall SF_CHECK_EVENT
|
||||
cmp eax, 1 ; Redraw
|
||||
je on_redraw
|
||||
cmp eax, 2
|
||||
cmp eax, 2 ; Key
|
||||
je on_key
|
||||
cmp eax, 3
|
||||
cmp eax, 3 ; Button
|
||||
je on_button
|
||||
|
||||
|
||||
call handle_mouse
|
||||
|
||||
; Redraw only if there's an active card movement or forced update
|
||||
|
||||
; Logic for active card movement or forced update
|
||||
cmp dword [active_card_count], 0
|
||||
ja update_screen_only
|
||||
cmp byte [force_redraw], 1
|
||||
je update_screen_only
|
||||
|
||||
mcall SYS_DELAY, 1
|
||||
|
||||
mcall SF_SLEEP, 1
|
||||
jmp event_loop
|
||||
|
||||
on_key:
|
||||
mcall SYS_KEY
|
||||
mcall SF_GET_KEY
|
||||
jmp event_loop
|
||||
|
||||
on_button:
|
||||
mcall SYS_BUTTON
|
||||
mcall SF_GET_BUTTON
|
||||
shr eax, 8
|
||||
cmp eax, 1 ; Close button (ID 1)
|
||||
cmp eax, 1 ; Close button ID
|
||||
jne event_loop
|
||||
mcall SYS_EXIT
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
on_redraw:
|
||||
mcall SYS_REDRAW, 1
|
||||
|
||||
; EBX: [X start : Window Width]
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
; EBX: Window position and width
|
||||
mov ebx, 100 shl 16 + (WIN_W + 9)
|
||||
|
||||
; ECX: [Y start : Window Height + skin + border]
|
||||
|
||||
; ECX: Window position and height
|
||||
mov eax, [skin_h]
|
||||
add eax, WIN_H + 5
|
||||
mov ecx, 100 shl 16
|
||||
mov cx, ax
|
||||
|
||||
; Draw window with skin flag (0x14)
|
||||
mcall SYS_DRAW_WINDOW, , , 0x14000000 or COL_TABLE, , title
|
||||
|
||||
mcall SYS_REDRAW, 2
|
||||
|
||||
; Draw window with skin flag
|
||||
mcall SF_CREATE_WINDOW, , , 0x14000000 or COL_TABLE, , title
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
mov byte [force_redraw], 1
|
||||
jmp update_screen_only
|
||||
|
||||
update_screen_only:
|
||||
mov byte [force_redraw], 0
|
||||
call prepare_buffer
|
||||
|
||||
; EDX: [x_dest:16|y_dest:16] - Offset by border and skin height
|
||||
|
||||
; EDX: coordinates for blit
|
||||
mov edx, 4 shl 16
|
||||
add dx, word [skin_h]
|
||||
|
||||
mcall SYS_BLIT, screen_buffer, WIN_W shl 16 + WIN_H, edx
|
||||
|
||||
mcall SF_PUT_IMAGE, screen_buffer, WIN_W shl 16 + WIN_H, edx
|
||||
jmp event_loop
|
||||
|
||||
; --- MOUSE HANDLING ---
|
||||
|
||||
handle_mouse:
|
||||
pushad
|
||||
mcall SYS_MOUSE_POS, 1
|
||||
mcall SF_MOUSE_GET, SSF_WINDOW_POSITION
|
||||
mov ebp, eax
|
||||
shr ebp, 16
|
||||
sub ebp, 5 ; Mouse X correction relative to frame
|
||||
|
||||
and eax, 0xFFFF
|
||||
sub eax, [skin_h]
|
||||
mov edi, eax ; EDI = Mouse Y inside workspace
|
||||
sub ebp, 5 ; X correction
|
||||
|
||||
mcall SYS_MOUSE_POS, 2
|
||||
test eax, 1 ; Check left button
|
||||
and eax, 0xFFFF
|
||||
sub eax, [skin_h]
|
||||
mov edi, eax ; EDI = Mouse Y relative to workspace
|
||||
|
||||
mcall SF_MOUSE_GET, SSF_BUTTON
|
||||
test eax, 1 ; Check Left Button
|
||||
jnz .dragging_state
|
||||
|
||||
|
||||
cmp dword [mouse_lock], 1
|
||||
jne .exit
|
||||
|
||||
jne .exit
|
||||
|
||||
mov dword [mouse_lock], 0
|
||||
cmp dword [active_card_count], 0
|
||||
je .exit
|
||||
|
||||
|
||||
call check_stack_move
|
||||
mov dword [active_card_count], 0
|
||||
mov byte [force_redraw], 1
|
||||
@@ -167,8 +159,8 @@ handle_mouse:
|
||||
.dragging_state:
|
||||
cmp dword [mouse_lock], 1
|
||||
je .no_deal_click
|
||||
|
||||
; Check if clicking on the stock pile
|
||||
|
||||
; Stock pile click detection
|
||||
cmp ebp, STOCK_X
|
||||
jb .find_card
|
||||
cmp ebp, STOCK_X+CARD_W
|
||||
@@ -177,7 +169,7 @@ handle_mouse:
|
||||
jb .find_card
|
||||
cmp edi, FOUND_Y+CARD_H
|
||||
jae .find_card
|
||||
|
||||
|
||||
mov dword [mouse_lock], 1
|
||||
call deal_from_stock
|
||||
mov byte [force_redraw], 1
|
||||
@@ -185,14 +177,13 @@ handle_mouse:
|
||||
ret
|
||||
|
||||
.find_card:
|
||||
mov ebx, 51 ; Check cards from top to bottom
|
||||
mov ebx, 51
|
||||
.f_loop:
|
||||
imul edx, ebx, CARD_STRUCT_SIZE
|
||||
add edx, deck_data
|
||||
movsx esi, word [edx+CARD_X]
|
||||
movsx ecx, word [edx+CARD_Y]
|
||||
|
||||
; Bounds checking for the card
|
||||
|
||||
cmp ebp, esi
|
||||
jb .next_s
|
||||
add esi, CARD_W
|
||||
@@ -203,23 +194,21 @@ handle_mouse:
|
||||
add ecx, CARD_H
|
||||
cmp edi, ecx
|
||||
jae .next_s
|
||||
|
||||
; Only pick up face-up cards
|
||||
|
||||
cmp byte [edx+CARD_STATE], 1
|
||||
jne .next_s
|
||||
|
||||
|
||||
mov dword [mouse_lock], 1
|
||||
mov [active_stack], ebx
|
||||
mov dword [active_card_count], 1
|
||||
|
||||
; Calculate mouse offset within card
|
||||
|
||||
mov ax, word [edx+CARD_X]
|
||||
sub ax, bp
|
||||
mov [mouse_off_x], ax
|
||||
mov ax, word [edx+CARD_Y]
|
||||
sub ax, di
|
||||
mov [mouse_off_y], ax
|
||||
|
||||
|
||||
mov eax, ebx
|
||||
call build_active_stack
|
||||
popad
|
||||
@@ -241,21 +230,20 @@ handle_mouse:
|
||||
mov eax, [active_stack + ecx*4]
|
||||
imul eax, CARD_STRUCT_SIZE
|
||||
add eax, deck_data
|
||||
|
||||
; Move active card stack with the mouse
|
||||
|
||||
mov dx, [mouse_off_x]
|
||||
add dx, bp
|
||||
mov [eax+CARD_X], dx
|
||||
mov dx, [mouse_off_y]
|
||||
add dx, di
|
||||
|
||||
|
||||
push eax
|
||||
mov eax, ecx
|
||||
imul eax, STACK_OFFSET
|
||||
add dx, ax
|
||||
pop eax
|
||||
mov [eax+CARD_Y], dx
|
||||
|
||||
|
||||
inc ecx
|
||||
jmp .d_lp
|
||||
.exit_drag:
|
||||
@@ -268,7 +256,6 @@ handle_mouse:
|
||||
; --- RENDERING ---
|
||||
|
||||
prepare_buffer:
|
||||
; Clear buffer with table color
|
||||
mov edi, screen_buffer
|
||||
mov ecx, WIN_W * WIN_H
|
||||
mov eax, COL_TABLE
|
||||
@@ -286,7 +273,6 @@ prepare_buffer:
|
||||
call draw_slots
|
||||
call render_score_ui
|
||||
|
||||
; Draw static cards
|
||||
xor ecx, ecx
|
||||
.draw_loop:
|
||||
call is_card_active
|
||||
@@ -301,7 +287,6 @@ prepare_buffer:
|
||||
cmp ecx, 52
|
||||
jl .draw_loop
|
||||
|
||||
; Draw active (dragged) cards on top
|
||||
xor ecx, ecx
|
||||
.draw_active:
|
||||
cmp ecx, [active_card_count]
|
||||
@@ -322,25 +307,18 @@ draw_card_to_buffer:
|
||||
pushad
|
||||
movsx ebx, word [esi+CARD_X]
|
||||
movsx ecx, word [esi+CARD_Y]
|
||||
|
||||
; Shadow/Outline
|
||||
mov edx, COL_BLACK
|
||||
mov edi, CARD_W
|
||||
mov ebp, CARD_H
|
||||
call fill_rect_buf
|
||||
|
||||
; Face
|
||||
inc ebx
|
||||
inc ecx
|
||||
mov edx, COL_WHITE
|
||||
mov edi, CARD_W-2
|
||||
mov ebp, CARD_H-2
|
||||
call fill_rect_buf
|
||||
|
||||
cmp byte [esi+CARD_STATE], 1
|
||||
je .face_up
|
||||
|
||||
; Back of the card
|
||||
add ebx, 4
|
||||
add ecx, 4
|
||||
mov edx, COL_REVERSE
|
||||
@@ -349,15 +327,12 @@ draw_card_to_buffer:
|
||||
call fill_rect_buf
|
||||
popad
|
||||
ret
|
||||
|
||||
.face_up:
|
||||
; Suit color determination
|
||||
mov edx, COL_RED
|
||||
cmp byte [esi+CARD_SUIT], 2
|
||||
jb .is_red
|
||||
mov edx, COL_BLACK
|
||||
.is_red:
|
||||
; Top left symbol
|
||||
push edx
|
||||
push esi
|
||||
movzx eax, byte [esi+CARD_VALUE]
|
||||
@@ -365,18 +340,16 @@ draw_card_to_buffer:
|
||||
mov esi, eax
|
||||
add ebx, 3
|
||||
add ecx, 3
|
||||
call draw_char_to_buf
|
||||
call draw_char_to_buf
|
||||
pop esi
|
||||
push esi
|
||||
movzx eax, byte [esi+CARD_SUIT]
|
||||
add eax, 13
|
||||
add eax, 13
|
||||
add ebx, 6
|
||||
mov esi, eax
|
||||
call draw_char_to_buf
|
||||
pop esi
|
||||
pop edx
|
||||
|
||||
; Bottom right symbol (inverted position)
|
||||
push edx
|
||||
push esi
|
||||
movsx ebx, word [esi+CARD_X]
|
||||
@@ -546,32 +519,30 @@ draw_large_char_to_buf:
|
||||
|
||||
render_score_ui:
|
||||
mov edx, COL_BLACK
|
||||
mov ebx, 530
|
||||
mov ebx, 530
|
||||
mov ecx, SCORE_Y
|
||||
xor esi, esi ; Print "SCORE"
|
||||
xor esi, esi
|
||||
call draw_large_char_to_buf
|
||||
add ebx, 10
|
||||
mov esi, 1
|
||||
mov esi, 1
|
||||
call draw_large_char_to_buf
|
||||
add ebx, 10
|
||||
mov esi, 2
|
||||
mov esi, 2
|
||||
call draw_large_char_to_buf
|
||||
add ebx, 10
|
||||
mov esi, 3
|
||||
mov esi, 3
|
||||
call draw_large_char_to_buf
|
||||
add ebx, 10
|
||||
mov esi, 4
|
||||
mov esi, 4
|
||||
call draw_large_char_to_buf
|
||||
add ebx, 20
|
||||
|
||||
; Handle score value display
|
||||
mov eax, [score]
|
||||
test eax, eax
|
||||
jns .pos
|
||||
neg eax
|
||||
push eax
|
||||
mov ecx, SCORE_Y
|
||||
mov esi, 5 ; Minus sign
|
||||
mov esi, 5
|
||||
call draw_large_char_to_buf
|
||||
add ebx, 10
|
||||
pop eax
|
||||
@@ -587,7 +558,7 @@ render_score_ui:
|
||||
jnz .dec_loop
|
||||
.print_dec:
|
||||
pop edx
|
||||
add edx, 6 ; Map digit to font index
|
||||
add edx, 6
|
||||
push ecx
|
||||
mov ecx, SCORE_Y
|
||||
mov esi, edx
|
||||
@@ -600,7 +571,6 @@ render_score_ui:
|
||||
|
||||
draw_slots:
|
||||
pushad
|
||||
; Draw foundation slots
|
||||
mov ebx, FOUNDATION_X
|
||||
mov ecx, FOUND_Y
|
||||
mov dword [temp_counter2], 4
|
||||
@@ -612,8 +582,6 @@ draw_slots:
|
||||
add ebx, 60
|
||||
dec dword [temp_counter2]
|
||||
jnz .f_loop
|
||||
|
||||
; Draw tableau slots
|
||||
mov ebx, 40
|
||||
mov ecx, 110
|
||||
mov dword [temp_counter2], 7
|
||||
@@ -700,8 +668,6 @@ check_stack_move:
|
||||
mov esi, [active_stack]
|
||||
imul esi, CARD_STRUCT_SIZE
|
||||
add esi, deck_data
|
||||
|
||||
; Logic for single card foundation drop
|
||||
cmp dword [active_card_count], 1
|
||||
jne .tableau_check
|
||||
mov ebx, FOUNDATION_X
|
||||
@@ -724,7 +690,6 @@ check_stack_move:
|
||||
inc ecx
|
||||
cmp ecx, 4
|
||||
jl .f_lp
|
||||
|
||||
.tableau_check:
|
||||
mov ebx, 40
|
||||
.col_lp:
|
||||
@@ -749,11 +714,8 @@ check_stack_move:
|
||||
inc ecx
|
||||
cmp ecx, 52
|
||||
jl .find_l
|
||||
|
||||
cmp dword [temp_val], -1
|
||||
je .empty_col
|
||||
|
||||
; Check drop on another card
|
||||
mov ecx, [temp_val]
|
||||
imul edi, ecx, CARD_STRUCT_SIZE
|
||||
add edi, deck_data
|
||||
@@ -769,8 +731,6 @@ check_stack_move:
|
||||
add eax, 30
|
||||
cmp eax, 60
|
||||
ja .nx_col
|
||||
|
||||
; Rules check: Opposite color and sequence (Value + 1)
|
||||
mov al, [esi+CARD_SUIT]
|
||||
mov dl, [edi+CARD_SUIT]
|
||||
shr al, 1
|
||||
@@ -785,9 +745,7 @@ check_stack_move:
|
||||
mov dx, word [edi+CARD_Y]
|
||||
add dx, STACK_OFFSET
|
||||
jmp .apply_move
|
||||
|
||||
.empty_col:
|
||||
; Check drop on empty column (only Kings)
|
||||
movsx eax, word [esi+CARD_X]
|
||||
sub eax, ebx
|
||||
add eax, 25
|
||||
@@ -802,13 +760,10 @@ check_stack_move:
|
||||
jne .nx_col
|
||||
mov dx, 110
|
||||
jmp .apply_move
|
||||
|
||||
.nx_col:
|
||||
add ebx, 100
|
||||
cmp ebx, 740
|
||||
jl .col_lp
|
||||
|
||||
; No valid move found, snap back to original position
|
||||
xor ecx, ecx
|
||||
.back:
|
||||
cmp ecx, [active_card_count]
|
||||
@@ -825,12 +780,11 @@ check_stack_move:
|
||||
.out:
|
||||
popad
|
||||
ret
|
||||
|
||||
.found_match:
|
||||
add dword [score], 10
|
||||
mov word [esi+CARD_X], bx
|
||||
mov word [esi+CARD_Y], FOUND_Y
|
||||
mov byte [esi+CARD_LOC], 8 ; Set location to foundation
|
||||
mov byte [esi+CARD_LOC], 8
|
||||
pushad
|
||||
mov eax, [active_stack]
|
||||
mov [temp_active], eax
|
||||
@@ -840,7 +794,6 @@ check_stack_move:
|
||||
call check_win
|
||||
popad
|
||||
ret
|
||||
|
||||
.apply_move:
|
||||
xor ecx, ecx
|
||||
push eax
|
||||
@@ -927,14 +880,11 @@ check_foundation_logic:
|
||||
inc ebp
|
||||
cmp ebp, 52
|
||||
jl .find_top
|
||||
|
||||
mov al, [esi+CARD_VALUE]
|
||||
mov dl, [esi+CARD_SUIT]
|
||||
cmp dword [temp_counter], -1
|
||||
jne .not_empty
|
||||
|
||||
; Empty foundation slot only accepts Aces (Value 1)
|
||||
cmp al, 1
|
||||
cmp al, 1
|
||||
je .valid
|
||||
jmp .invalid
|
||||
.not_empty:
|
||||
@@ -1003,7 +953,7 @@ auto_reveal_all:
|
||||
jl .find_lowest
|
||||
cmp dword [temp_val], -1
|
||||
je .next_col
|
||||
mov byte [esi+CARD_STATE], 1 ; Flip the bottom card of the stack face up
|
||||
mov byte [esi+CARD_STATE], 1
|
||||
.next_col:
|
||||
add ebx, 100
|
||||
cmp ebx, 740
|
||||
@@ -1012,7 +962,6 @@ auto_reveal_all:
|
||||
ret
|
||||
|
||||
move_single_to_top:
|
||||
; Moves a card to the end of the deck_data array so it's drawn last (on top)
|
||||
mov eax, [temp_active]
|
||||
cmp eax, 51
|
||||
je .done
|
||||
@@ -1055,7 +1004,7 @@ deal_from_stock:
|
||||
ret
|
||||
.o:
|
||||
mov byte [esi+CARD_STATE], 1
|
||||
mov byte [esi+CARD_LOC], 9 ; Move to waste
|
||||
mov byte [esi+CARD_LOC], 9
|
||||
mov word [esi+CARD_X], WASTE_X
|
||||
mov word [esi+CARD_Y], FOUND_Y
|
||||
mov [temp_active], ecx
|
||||
@@ -1100,7 +1049,7 @@ init_deck:
|
||||
shuffle_deck:
|
||||
mov dword [temp_counter2], 51
|
||||
.sh:
|
||||
mcall SYS_RANDOM
|
||||
mcall SF_GET_SYS_TIME
|
||||
and eax, 0xFFFF
|
||||
xor edx, edx
|
||||
mov ebx, [temp_counter2]
|
||||
@@ -1167,7 +1116,7 @@ layout_tableau:
|
||||
.fin: ret
|
||||
|
||||
; --- DATA & FONTS ---
|
||||
title db 'Solitaire V1.5', 0
|
||||
title db 'Solitare V1.5.1', 0
|
||||
score dd 0
|
||||
game_won db 0
|
||||
mouse_lock dd 0
|
||||
@@ -1184,7 +1133,6 @@ active_stack rd 13
|
||||
skin_h dd 0
|
||||
|
||||
font_8x12:
|
||||
; Definitions for S, C, O, R, E, -, and digits 0-9
|
||||
db 01111100b,10000010b,10000000b,10000000b,01111100b,00000010b,00000010b,10000010b,01111100b,00000000b,00000000b,00000000b ; S
|
||||
db 01111100b,10000010b,10000000b,10000000b,10000000b,10000000b,10000000b,10000010b,01111100b,00000000b,00000000b,00000000b ; C
|
||||
db 01111100b,10000010b,10000010b,10000010b,10000010b,10000010b,10000010b,10000010b,01111100b,00000000b,00000000b,00000000b ; O
|
||||
@@ -1192,10 +1140,10 @@ db 11111100b,10000010b,10000010b,10000010b,11111100b,10010000b,10001000b,1000010
|
||||
db 11111110b,10000000b,10000000b,10000000b,11111100b,10000000b,10000000b,10000000b,11111110b,00000000b,00000000b,00000000b ; E
|
||||
db 00000000b,00000000b,00000000b,00000000b,11111111b,00000000b,00000000b,00000000b,00000000b,00000000b,00000000b,00000000b ; -
|
||||
db 00111100b,01000010b,10000001b,10000001b,10000001b,10000001b,10000001b,01000010b,00111100b,00000000b,00000000b,00000000b ; 0
|
||||
db 00011000b,00111000b,00001000b,00001000b,00001000b,00001000b,00001000b,00001000b,00111100b,00000000b,00000000b,00000000b ; 1
|
||||
db 00011000b,00111000b,00001000b,00001000b,00001000b,00001000b,00001000b,00001000b,00111100b,00000000b,00000000b,00000000b ; 1
|
||||
db 01111100b,10000010b,00000010b,00000010b,01111100b,10000000b,10000000b,10000000b,11111110b,00000000b,00000000b,00000000b ; 2
|
||||
db 01111100b,10000010b,00000010b,00000010b,00111100b,00000010b,00000010b,10000010b,01111100b,00000000b,00000000b,00000000b ; 3
|
||||
db 00001000b,00011000b,00101000b,01001000b,10001000b,11111111b,00001000b,00001000b,00001000b,00000000b,00000000b,00000000b ; 4
|
||||
db 00001000b,00011000b,00101000b,01001000b,10001000b,11111111b,00001000b,00001000b,00001000b,00000000b,00000000b,00000000b ; 4
|
||||
db 11111110b,10000000b,10000000b,11111100b,00000010b,00000010b,00000010b,10000010b,01111100b,00000000b,00000000b,00000000b ; 5
|
||||
db 01111100b,10000010b,10000000b,11111100b,10000010b,10000010b,10000010b,10000010b,01111100b,00000000b,00000000b,00000000b ; 6
|
||||
db 11111110b,00000010b,00000100b,00001000b,00010000b,00100000b,00100000b,00100000b,00100000b,00000000b,00000000b,00000000b ; 7
|
||||
@@ -1203,7 +1151,6 @@ db 01111100b,10000010b,10000010b,10000010b,01111100b,10000010b,10000010b,1000001
|
||||
db 01111100b,10000010b,10000010b,10000010b,10000010b,01111110b,00000010b,10000010b,01111100b,00000000b,00000000b,00000000b ; 9
|
||||
|
||||
font_5x7:
|
||||
; Definitions for A, 2-10, J, Q, K, and Suits
|
||||
db 01110000b,10001000b,10001000b,11111000b,10001000b,10001000b,10001000b ; A
|
||||
db 11110000b,00001000b,00010000b,00100000b,01000000b,10000000b,11111000b ; 2
|
||||
db 11110000b,00001000b,00001000b,01110000b,00001000b,00001000b,11110000b ; 3
|
||||
|
||||
Reference in New Issue
Block a user