diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-09-11 01:08:16 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-09-11 01:08:16 -0400 |
commit | 92c5cacc5beaa363b8450aede2a44c4b9f78fb39 (patch) | |
tree | 83424bcfd0fdf7085c7715631a8161edea7c3f44 | |
parent | 8e4e1f321d7ea8952f9303807fdc2aee794fec1d (diff) | |
download | learncolors-92c5cacc5beaa363b8450aede2a44c4b9f78fb39.tar.gz |
Yay shapes
-rw-r--r-- | box.asm | 1524 |
1 files changed, 879 insertions, 645 deletions
@@ -35,21 +35,37 @@ EOS0: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; VRAM_320x200 equ 0a000h VRAM_80x20 equ 0b800h -VIDEO_HEIGHT equ 320 -VIDEO_WIDTH equ 200 +VRAM_DBUF equ 0700h +VIDEO_WIDTH equ 320 +VIDEO_HEIGHT equ 200 VIDEO_SIZE equ VIDEO_HEIGHT * VIDEO_WIDTH -cursor_y: dw 1 + +vram_front: dw VRAM_320x200 +vram_back: dw VRAM_DBUF +vram: dw VRAM_DBUF ; uninitialized video memory location + +cursor_y: dw 0 cursor_x: dw 0 -box_size: dw 30h ; not too big, not too small -box_color: dw 7 ; default to gray -box_y_coord: dw (200/2)-(30h/2) -box_x_coord: dw (320/2)-(30h/2) -box_xy_step: dw 4 -box_size_step: dw 4 + +shape_size: dw 30h ; not too big, not too small +shape_color: dw 7 ; default to gray +shape_y_coord: dw (200/2)-(30h/2) +shape_x_coord: dw (320/2)-(30h/2) +shape_xy_step: dw 4 +shape_size_step: dw 4 + screen_color: dw 1 ; default to blue -welcome: db '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+{[]}|\;:,<.>?/',0 +text_color: dw 0fh ; default to gray +unbuffered_raw: db 0 ; 0=process control codes, 1=do not + +welcome: db 'Hi Evan! How are you today?', 0ah, 'I am good.', 0 +msg_square: db 'Square', 0 start: + ; init video + mov ax, [vram_back] + mov [vram], ax + push word 13h ; 320x200 VGA, 256 colors call set_graphics_mode @@ -61,18 +77,30 @@ start: push word [screen_color] call clear_screen - push welcome - call puts + ;push welcome + ;call puts + + call charset_dump - push word [box_size] ; length - push word [box_color] ; color - push word [box_x_coord] ; x - push word [box_y_coord] ; y - call draw_box + ;push word [shape_color] ; color + ;push word [shape_size] ; width + ;push word [shape_size] ; height + ;push word [shape_x_coord] ; x + ;push word [shape_y_coord] ; y + ;call draw_box + push word [shape_color] ; color + push word [shape_size] ; width + push word [shape_size] ; height + push word [shape_x_coord] ; x + push word [shape_y_coord] ; y + push word msg_square + call draw_shape + + call doublebuffer call input_handler - push word 0800h + push word 0a00h push word 0000h call sleep ; prevent color-change induced seizures @@ -82,6 +110,54 @@ start: hlt ; halt CPU interrupts +doublebuffer: + push bp + push ax + push bx + push cx + push si + push di + push ds + ; DS is about to change, so store it (and ES) in registers + ; ... or things will explode + mov bx, [vram_front] + mov ax, [vram_back] + mov ds, ax ; set source segment + push es + mov ax, bx + mov es, ax ; set destination segment + + xor si, si ; clear source index + xor di, di ; clear destination index + mov cx, VIDEO_SIZE/2 + repne movsw + + pop es + pop ds + pop di + pop si + pop cx + pop bx + pop ax + pop bp + ret + + +set_cursor: + push bp + mov bp, sp + push ax + + mov ax, [bp + 4] + mov [cursor_y], ax + mov ax, [bp + 6] + mov [cursor_x], ax + + pop ax + pop bp + ret 2 * 2 + + puts: push bp mov bp, sp @@ -105,41 +181,55 @@ puts: ret 2 * 1 putc: - call draw_char - add word [cursor_x], 8 - cmp word [cursor_x], 320 - jl .return - mov word [cursor_x], 0 - add word [cursor_y], 8 + push bp + mov bp, sp + push ax + cmp byte [unbuffered_raw], 0 + jne .write + + cmp ax, 0ah + je .LF + + jmp .write + + .LF: + mov word [cursor_x], 0 + add word [cursor_y], 8 + jmp .return + + .write: + call draw_char + add word [cursor_x], 8 + cmp word [cursor_x], VIDEO_WIDTH + jl .return + mov word [cursor_x], 0 + add word [cursor_y], 8 .return: + pop ax + pop bp ret + draw_char: push bp push ax - push bx - push cx push si mov si, font - ;sub ax, 'A' - sub ax, ' ' - shl ax, 3 - add si, ax push word [cursor_x] push word [cursor_y] - push word 8 + push word [text_color] + push word ax push si - call draw_font + call draw_bitmap pop si - pop cx - pop bx pop ax pop bp ret + input_handler: push bp mov bp, sp @@ -147,8 +237,8 @@ input_handler: push bx push cx - mov bx, [box_xy_step] - mov cx, [box_size_step] + mov bx, [shape_xy_step] + mov cx, [shape_size_step] mov ax, 0000h int 16h @@ -162,70 +252,88 @@ input_handler: cmp al, 'z' je .screen_color_prev + cmp al, 'a' + je .text_color_next + + cmp al, 's' + je .text_color_prev + cmp al, ']' - je .box_color_next + je .shape_color_next cmp al, '[' - je .box_color_prev + je .shape_color_prev cmp al, '+' - je .box_size_bigger + je .shape_size_bigger cmp al, '-' - je .box_size_smaller + je .shape_size_smaller cmp ah, 75 ; scan-code: left arrow - je .box_move_left + je .shape_move_left cmp ah, 77 ; scan-code: right arrow - je .box_move_right + je .shape_move_right cmp ah, 72 ; scan-code: up arrow - je .box_move_up + je .shape_move_up cmp ah, 80 ; scan-code: down arrow - je .box_move_down + je .shape_move_down jmp .return .screen_color_next: - inc byte [screen_color] + add byte [screen_color], 01h jmp .return .screen_color_prev: - dec byte [screen_color] + sub byte [screen_color], 01h jmp .return - .box_color_next: - inc byte [box_color] + .text_color_next: + add byte [text_color], 01h jmp .return - .box_color_prev: - dec byte [box_color] + .text_color_prev: + sub byte [text_color], 01h jmp .return - .box_size_bigger: - add [box_size], cx + .shape_color_next: + inc byte [shape_color] jmp .return - .box_size_smaller: - sub [box_size], cx + .shape_color_prev: + dec byte [shape_color] jmp .return - .box_move_up: - sub word [box_y_coord], bx + .shape_size_bigger: + cmp word [shape_size], 128 + je .return + add [shape_size], cx + jmp .return + + .shape_size_smaller: + cmp [shape_size], cx + jle .return + sub [shape_size], cx jmp .return - .box_move_down: - add word [box_y_coord], bx + .shape_move_up: + sub word [shape_y_coord], bx jmp .return - .box_move_left: - sub word [box_x_coord], bx + .shape_move_down: + add word [shape_y_coord], bx jmp .return - .box_move_right: - add word [box_x_coord], bx + .shape_move_left: + sub word [shape_x_coord], bx + jmp .return + + .shape_move_right: + add word [shape_x_coord], bx jmp .return .return: @@ -242,16 +350,17 @@ sleep: push ax push cx push dx + mov ah, 86h mov cx, [bp + 4] mov dx, [bp + 6] int 15h + pop dx pop cx pop ax - mov sp, bp pop bp - ret + ret 2 * 2 set_graphics_mode: @@ -275,7 +384,7 @@ clear_screen: push cx push di push es - mov ax, VRAM_320x200 + mov ax, [vram] mov es, ax mov ax, [bp + 4] @@ -299,28 +408,25 @@ clear_screen: draw_pixel: push bp mov bp, sp - push ax push bx push cx push dx push di - push es - mov ax, VRAM_320x200 + mov ax, [vram] mov es, ax - mov ax, [bp + 4] ; Y coord (row) - mov bx, [bp + 6] ; X coord (col) - mov cx, VIDEO_HEIGHT + mov ax, [bp + 4] ; Y coord (row) + mov bx, [bp + 6] ; X coord (col) + mov cx, VIDEO_WIDTH mul cx add ax, bx cmp ax, VIDEO_SIZE ja .return + mov dx, [bp + 8] ; color mov di, ax - mov dx, [bp + 8] ; color - mov byte [es:di], dl .return: pop es @@ -400,9 +506,82 @@ draw_vertical: ret 2 * 4 +draw_shape: + push bp + mov bp, sp + push ax + push bx + push si + + push word [bp + 14] ; color + push word [bp + 12] ; width + push word [bp + 10] ; height + push word [bp + 8] ; x + push word [bp + 6] ; y + call draw_box + + mov si, [bp + 4] ; buffer address + + mov ax, [bp + 8] + add ax, [bp + 10] + sub ax, [bp + 12] + mov bx, [bp + 6] + add bx, [bp + 12] + + push word ax + push word bx ; y + call set_cursor + + push si ; write message + call puts + + pop si + pop bx + pop ax + mov sp, bp + pop bp + ret 2 * 6 + + draw_box: push bp mov bp, sp + push ax + + mov ax, [bp + 4] ; y + mov [.y], ax + mov ax, [bp + 6] ; x + mov [.x], ax + mov ax, [bp + 8] ; height + mov [.height], ax + mov ax, [bp + 10] ; width + mov [.width], ax + mov ax, [bp + 12] ; color + mov [.color], ax + + .draw: + push word [.width] ; length + push word [.color] ; color + push word [.x] ; x + push word [.y] ; y + call draw_horizontal + inc word [.y] + dec word [.height] + jne .draw + + pop ax + pop bp + ret 2 * 5 + .y: dw 0 + .x: dw 0 + .color: dw 0 + .height: dw 0 + .width: dw 0 + + +draw_shape_orig: + push bp + mov bp, sp push ax push bx @@ -478,65 +657,88 @@ draw_triangle: pop bp ret -draw_font: +draw_bitmap: push bp mov bp, sp - push ax push bx push cx push dx push si - push di - mov si, [bp + 4] ; bitmap address - mov bx, [bp + 6] ; length of bitmap*8 - mov di, [bp + 8] ; Y coord - mov dx, [bp + 10] ; X coord - - mov cx, 8 ; 8 byte font (8x8 pixels) - .loadbmp: - lodsb ; load byte es:si - .write: - test al, 1 ; check current bit in byte 0=skip, 1=print - jz .skip_bit - push word 7 ; color=gray (for now) - push dx ; x coord - push di ; y coord + mov ax, [bp + 8] ; color + mov word [.COLOR], ax ; (store color) + mov si, [bp + 4] ; address + mov ax, [bp + 6] ; offset + mov bx, [bp + 10] ; y coord + mov dx, [bp + 12] ; x coord + shl ax, 3 ; divide offset by 8 + add si, ax ; apply offset to address + + + mov word [.Y], 8 + mov word [.XSTART], dx + + xor ax, ax + .next: + lodsb + .row: + mov word [.X], 0 + .col: + rol ax, 1 + test ax, 1 + jz .nodata + + push word [.COLOR] + push dx + push bx call draw_pixel - .skip_bit: - shr al, 1 ; next bit in byte - inc di ; next Y coord - dec bx ; decrement total length counter - jne .write - inc dx ; next X coord - dec cx ; decrement byte counter - jne .loadbmp + .nodata: + inc dx + inc word [.X] + cmp word [.X], 8 + jne .col + inc bx + mov dx, [.XSTART] + dec word [.Y] + cmp word [.Y], 0 + jne .next ; jge? probably. we are missing a byte here... - pop di pop si pop dx pop cx pop bx pop ax - pop bp - ret 2 * 4 - + ret 2 * 5 + .X: dw 0 + .Y: dw 0 + .COLOR dw 0 + .XSTART dw 0 charset_dump: - push word bx - push word 0 - push word 8 - push si - call draw_font - add si, 8 - add bx, 8 - dec cx - jne charset_dump + push bp + mov bp, sp + push ax + push cx + + mov cx, 0 + .loop: + mov ax, cx + call putc + inc cx + cmp cx, 0xff + jne .loop + pop cx + pop ax + pop bp ret font: + ; Non-printable characters + ; ASCII control + times (20h) * 8 db 00h + ; SPACE ' ' db 00000000b db 00000000b @@ -547,85 +749,86 @@ font: db 00000000b db 00000000b ; ! + db 00011000b + db 00011000b + db 00011000b + db 00011000b + db 00011000b db 00000000b - db 00000000b - db 00000000b - db 01101111b - db 01101111b - db 00000000b - db 00000000b + db 00011000b db 00000000b ; " + db 01100110b + db 01100110b + db 01100110b + db 00100100b db 00000000b - db 00000111b - db 00001111b db 00000000b db 00000000b - db 00001111b - db 00000111b db 00000000b ; # - db 00000000b - db 00100010b - db 01111111b - db 00100010b - db 00100010b - db 01111111b - db 00100010b + db 00100100b + db 01111110b + db 00100100b + db 00100100b + db 00100100b + db 01111110b + db 00100100b db 00000000b ; $ - db 00000000b - db 00100100b - db 00101010b - db 00101010b - db 01111111b - db 00101010b - db 00110010b + db 00010000b + db 00111110b + db 01010000b + db 00111100b + db 00010010b + db 01111100b + db 00010000b db 00000000b ; % db 00000000b - db 00100011b - db 00010011b + db 01100010b + db 01100100b db 00001000b - db 00000100b - db 00110010b - db 00110001b + db 00010000b + db 00100110b + db 01000110b db 00000000b ; & - db 00000000b - db 00101110b - db 01010101b - db 00101011b - db 01010000b - db 00000000b + db 00011000b + db 00100100b + db 00101000b + db 00011010b + db 00100100b + db 00111110b db 00000000b db 00000000b ; ' - db 00000000b - db 00001111b - db 00000111b - db 00000000b + db 00011000b + db 00011000b + db 00011000b + db 00001000b db 00000000b db 00000000b db 00000000b db 00000000b + ;db 00000000b ;<< wtf? ; ( - db 00000000b - db 00000000b - db 00000000b - db 00111110b - db 01000001b - db 00000000b - db 00000000b + db 00001000b + db 00010000b + db 00100000b + db 00100000b + db 00100000b + db 00010000b + db 00001000b db 00000000b ; ) - db 00000000b - db 00000000b - db 00000000b - db 01000001b - db 00111110b - db 00000000b - db 00000000b + db 00001000b + db 00000100b + db 00000010b + db 00000010b + db 00000010b + db 00000100b + db 00001000b db 00000000b ; * db 00000000b @@ -638,779 +841,810 @@ font: db 00000000b ; + db 00000000b - db 00000000b db 00001000b db 00001000b db 01111111b db 00001000b db 00001000b db 00000000b + db 00000000b ; , db 00000000b db 00000000b db 00000000b - db 01110000b - db 11110000b - db 00000000b db 00000000b + db 00001100b + db 00001100b + db 00011000b db 00000000b ; - db 00000000b - db 00001000b - db 00001000b - db 00001000b - db 00001000b - db 00001000b - db 00001000b + db 00000000b + db 00000000b + db 01111110b + db 00000000b + db 00000000b + db 00000000b db 00000000b ; . db 00000000b - db 01100000b - db 01100000b db 00000000b db 00000000b db 00000000b db 00000000b + db 00011000b + db 00011000b db 00000000b ; / - db 00000000b - db 00100000b - db 00010000b - db 00001000b - db 00000100b - db 00000010b db 00000001b + db 00000010b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01000000b db 00000000b ; 0 - db 00000000b db 00011100b - db 00110010b - db 01001001b + db 00100010b db 01000101b + db 01001001b + db 01010001b db 00100010b db 00011100b db 00000000b ; 1 - db 00000000b - db 01000000b - db 01000010b - db 01000001b - db 01111111b - db 01000000b - db 01000000b + db 00001000b + db 00011000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00111110b db 00000000b ; 2 - db 00000000b - db 01000010b - db 01100001b - db 01010001b - db 01001001b - db 01000101b + db 00111100b db 01000010b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01111110b db 00000000b ; 3 - db 00000000b - db 00100010b - db 01000001b - db 01000001b - db 01001001b - db 01001001b - db 00111110b + db 00111100b + db 01000010b + db 00000010b + db 00001100b + db 00000010b + db 01000010b + db 00111100b db 00000000b ; 4 - db 00000000b db 00001000b - db 00001100b - db 00001010b - db 01111111b + db 00011000b + db 00101000b + db 01001000b + db 01111110b + db 00001000b db 00001000b - db 00000000b db 00000000b ; 5 - db 00000000b - db 01001111b - db 01001001b - db 01001001b - db 01001001b - db 00111001b - db 00000000b + db 01111110b + db 01000000b + db 01000000b + db 01111100b + db 00000010b + db 00000010b + db 01111100b db 00000000b ; 6 - db 00000000b db 00111110b - db 01001001b - db 01001001b - db 01001001b - db 01001001b - db 01111001b + db 01000000b + db 01000000b + db 01111100b + db 01000010b + db 01000010b + db 00111100b db 00000000b ; 7 - db 00000000b - db 01000001b - db 00101001b - db 00011001b - db 00001001b - db 00001101b - db 00001011b + db 01111110b + db 00000010b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01000000b db 00000000b ; 8 - db 00000000b - db 01110111b - db 01001001b - db 01001001b - db 01001001b - db 01001001b - db 01110111b + db 00111100b + db 01000010b + db 01000010b + db 00111100b + db 01000010b + db 01000010b + db 00111100b db 00000000b ; 9 - db 00000000b - db 00001111b - db 00001001b - db 00001001b - db 00001001b - db 00001001b - db 01111111b + db 00111100b + db 01000010b + db 01000010b + db 00111110b + db 00000010b + db 00000010b + db 00000010b db 00000000b ; : db 00000000b + db 00011000b + db 00011000b db 00000000b - db 00000000b - db 00110011b - db 00110011b - db 00000000b + db 00011000b + db 00011000b db 00000000b db 00000000b ; ; db 00000000b + db 00011000b + db 00011000b db 00000000b - db 00000000b - db 01110011b - db 00110011b - db 00000000b + db 00011000b + db 00010000b db 00000000b db 00000000b ; < - db 00000000b + db 00000100b db 00001000b - db 00010100b - db 00100010b - db 01000001b - db 00000000b - db 00000000b + db 00010000b + db 00100000b + db 00010000b + db 00001000b + db 00000100b db 00000000b ; = db 00000000b - db 00100100b - db 00100100b - db 00100100b - db 00100100b - db 00100100b - db 00100100b db 00000000b - ; > + db 01111110b db 00000000b + db 01111110b db 00000000b db 00000000b - db 01000001b - db 00100010b - db 00010100b + db 00000000b + ; > + db 00100000b + db 00010000b db 00001000b + db 00000100b + db 00001000b + db 00010000b + db 00100000b db 00000000b ; ? - db 00000000b + db 00111100b + db 01000010b db 00000010b - db 00000001b - db 01011001b - db 00001001b - db 00001001b - db 00000110b + db 00011100b + db 00010000b db 00000000b - ; @ + db 00010000b db 00000000b - db 00111110b - db 01000001b - db 01011001b - db 01111001b - db 01000001b + ; @ + db 00011100b + db 00100010b + db 01000010b + db 01011110b + db 01001110b + db 01000000b db 00111110b db 00000000b ; A + db 00111100b + db 01000010b + db 01000010b + db 01111110b + db 01000010b + db 01000010b + db 01000010b db 00000000b + ; B db 01111100b - db 00010010b - db 00010001b - db 00010001b - db 00010010b + db 01000010b + db 01000010b + db 01111100b + db 01000010b + db 01000010b db 01111100b - db 00000000b - ; B - db 00000000b - db 01111111b - db 01001001b - db 01001001b - db 01001001b - db 01001001b - db 01110110b db 00000000b ; C - db 00000000b - db 00111110b - db 01000001b - db 01000001b - db 01000001b - db 01000001b - db 01000001b + db 00111100b + db 01000010b + db 01000000b + db 01000000b + db 01000000b + db 01000010b + db 00111100b db 00000000b ; D - db 00000000b - db 01111111b - db 01000001b - db 01000001b - db 01000001b - db 01000001b - db 00111110b + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01111100b db 00000000b ; E - db 00000000b - db 01111111b - db 01001001b - db 01001001b - db 01001001b - db 01001001b - db 01001001b + db 01111110b + db 01000000b + db 01000000b + db 01111000b + db 01000000b + db 01000000b + db 01111110b db 00000000b ; F - db 00000000b - db 01111111b - db 00001001b - db 00001001b - db 00001001b - db 00000001b - db 00000001b + db 01111110b + db 01000000b + db 01000000b + db 01111000b + db 01000000b + db 01000000b + db 01000000b db 00000000b ; G + db 00111100b + db 01000010b + db 01000000b + db 01001110b + db 01000010b + db 01000010b + db 00111100b db 00000000b - db 01111110b + ; H + db 01000001b + db 01000001b + db 01000001b + db 01111111b + db 01000001b db 01000001b db 01000001b - db 01001001b - db 01001001b - db 01111001b - db 00000000b - ; H db 00000000b + ; I db 01111111b db 00001000b db 00001000b db 00001000b db 00001000b + db 00001000b db 01111111b db 00000000b - ; I - db 00000000b - db 01000001b - db 01000001b - db 01111111b - db 01111111b - db 01000001b - db 01000001b - db 00000000b ; J - db 00000000b - db 00110000b - db 01000000b - db 01000001b - db 01000001b - db 00111111b - db 00000001b + db 00001110b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 01000010b + db 00111100b db 00000000b ; K - db 00000000b - db 01111111b - db 00001000b - db 00010100b - db 00100010b - db 01000001b - db 00000000b + db 01000010b + db 01000100b + db 01001000b + db 01110000b + db 01001000b + db 01000100b + db 01000010b db 00000000b ; L - db 00000000b - db 01111111b db 01000000b db 01000000b db 01000000b db 01000000b db 01000000b + db 01000000b + db 01111110b db 00000000b ; M - db 00000000b - db 01111111b - db 00000010b - db 00000100b - db 00000100b - db 00000010b - db 01111111b + db 01000010b + db 01100110b + db 01011010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b db 00000000b ; N - db 00000000b - db 01111111b - db 00000010b - db 00000100b - db 00001000b - db 00010000b - db 01111111b + db 01000010b + db 01100010b + db 01010010b + db 01001010b + db 01000110b + db 01000010b + db 01000010b db 00000000b ; O - db 00000000b - db 00111110b - db 01000001b - db 01000001b - db 01000001b - db 01000001b - db 00111110b + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00111100b db 00000000b ; P - db 00000000b - db 01111111b - db 00001001b - db 00001001b - db 00001001b - db 00001001b - db 00000110b + db 01111100b + db 01000010b + db 01000010b + db 01111100b + db 01000000b + db 01000000b + db 01000000b db 00000000b ; Q + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 01001010b + db 01000110b + db 00111100b db 00000000b - db 00111110b - db 01000001b - db 01000001b - db 01010001b - db 01100001b - db 01111110b - db 10000000b ; << COULD IT BE THE LINE OF THE 'Q'? REALLY? ; R - db 00000000b - db 01111111b - db 00001001b - db 00001001b - db 00011001b - db 00101001b - db 01000110b + db 01111100b + db 01000010b + db 01000010b + db 01111100b + db 01001000b + db 01000100b + db 01000010b db 00000000b ; S + db 00111110b + db 01000000b + db 01000000b + db 00111100b + db 00000010b + db 00000010b + db 01111100b db 00000000b - db 01100110b - db 01001001b - db 01001001b - db 01001001b - db 01001001b - db 00110011b - db 00000000b - db 00000000b ; << WHY THE EXTRA BYTE? WHERE THE FUCK IS THE PROBLEM!? ; T - db 00000000b - db 00000001b - db 00000001b - db 01111111b db 01111111b - db 00000001b - db 00000001b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b db 00000000b ; U - db 00000000b - db 00111111b - db 01000000b - db 01000000b - db 01000000b - db 01000000b - db 00111111b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00111100b db 00000000b ; V - db 00000000b - db 00011111b - db 00100000b - db 01000000b - db 01000000b - db 00100000b - db 00011111b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00100100b + db 00011000b db 00000000b ; W - db 00000000b - db 00111111b - db 01000000b - db 00100000b - db 00111000b - db 01000000b - db 00111111b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01001010b + db 01011010b + db 01100110b db 00000000b ; X - db 00000000b - db 01100011b - db 00010100b - db 00001000b - db 00001000b - db 00010100b - db 01100011b + db 10000010b + db 01000100b + db 00101000b + db 00010000b + db 00101000b + db 01000100b + db 10000010b db 00000000b ; Y - db 00000000b - db 00000011b - db 00000100b - db 01111000b - db 01111000b - db 00000100b - db 00000011b + db 10000010b + db 01000100b + db 00101000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b db 00000000b ; Z - db 00000000b - db 01100001b - db 01010001b - db 01001001b - db 01000101b - db 01000011b - db 01000001b + db 11111110b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01000000b + db 11111110b db 00000000b ; [ - db 00000000b - db 00000000b - db 00000000b - db 01111111b - db 01000001b - db 00000000b - db 00000000b + db 00111100b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + db 00111100b db 00000000b ; \ - db 00000000b - db 00000001b + db 10000000b + db 01000000b + db 00100000b + db 00010000b + db 00001000b + db 00000100b db 00000010b + db 00000000b + + db 00000000b ; where does this extra byte keep coming from? + + ; ] + db 00111100b + db 00000100b db 00000100b + db 00000100b + db 00000100b + db 00000100b + db 00111100b + db 00000000b + ; ^ db 00001000b - db 00010000b - db 00100000b + db 00010100b + db 00100010b db 00000000b - ; ] db 00000000b db 00000000b db 00000000b - db 01000001b - db 01111111b db 00000000b + ; _ db 00000000b db 00000000b - ; ^ db 00000000b - db 00000100b - db 00000010b - db 00000001b - db 00000010b - db 00000100b db 00000000b db 00000000b - ; _ db 00000000b - db 01000000b - db 01000000b - db 01000000b - db 01000000b - db 01000000b - db 01000000b + db 01111110b db 00000000b ; ` + db 00010000b + db 00001000b + db 00000100b db 00000000b db 00000000b - db 00000001b - db 00000010b - db 00000100b db 00000000b db 00000000b db 00000000b ; a db 00000000b db 00000000b - db 00110000b - db 01001010b - db 01001010b - db 01111100b - db 00000000b + db 00111100b + db 00000010b + db 00111110b + db 01000010b + db 00111110b db 00000000b ; b - db 00000000b - db 00000000b - db 01111111b - db 01001000b - db 01001000b - db 01110000b - db 00000000b + db 01000000b + db 01000000b + db 01000000b + db 01111100b + db 01000010b + db 01000010b + db 01111100b db 00000000b ; c db 00000000b db 00000000b - db 00111000b - db 01000100b - db 01000100b - db 01000100b db 00000000b + db 00111110b + db 01000000b + db 01000000b + db 00111110b db 00000000b ; d - db 00000000b - db 00000000b - db 00110000b - db 01001000b - db 01001000b - db 01001000b - db 00111111b + db 00000010b + db 00000010b + db 00000010b + db 00111110b + db 01000010b + db 01000010b + db 00111110b db 00000000b ; e db 00000000b db 00000000b - db 00111000b - db 01010100b - db 01010100b - db 01010100b - db 01011000b + db 00111100b + db 01000010b + db 01111100b + db 01000000b + db 00111110b db 00000000b ; f db 00000000b - db 00000000b - db 01001000b - db 01111110b - db 00001001b - db 00000001b - db 00000010b + db 00011100b + db 00100010b + db 00100000b + db 01111000b + db 00100000b + db 00100000b db 00000000b ; g db 00000000b db 00000000b - db 00011000b - db 10100100b - db 10100100b - db 10100100b - db 01111110b + db 00111100b + db 01000010b + db 00111110b + db 00000010b + db 01111100b db 00000000b ; h - db 00000000b - db 00000000b - db 01111111b - db 00001000b - db 00001000b - db 01110000b - db 00000000b + db 01000000b + db 01000000b + db 01000000b + db 01111100b + db 01000010b + db 01000010b + db 01000010b db 00000000b ; i db 00000000b + db 00010000b db 00000000b - db 00000000b - db 01111010b - db 00000000b - db 00000000b - db 00000000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b db 00000000b ; j db 00000000b + db 00000010b db 00000000b - db 01100000b - db 10000000b - db 10001000b - db 01111010b - db 00000000b + db 00000010b + db 00000010b + db 01000010b + db 00111100b db 00000000b ; k - db 00000000b - db 00000000b - db 01111110b - db 00010000b + db 00100000b + db 00100000b + db 00100000b + db 00100100b db 00101000b - db 01000000b - db 00000000b + db 00111000b + db 00100100b db 00000000b ; l - db 00000000b - db 00000000b - db 00000010b - db 01111110b - db 10000000b - db 00000000b - db 00000000b + db 01100000b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + db 00110000b db 00000000b ; m db 00000000b db 00000000b - db 01111000b - db 00000100b - db 00111000b - db 00000100b - db 01111000b + db 01010100b + db 01101010b + db 01001010b + db 01000010b + db 01000010b db 00000000b ; n db 00000000b db 00000000b - db 01111100b - db 00001000b - db 00000100b - db 00000100b - db 01111000b + db 01011100b + db 01100010b + db 01000010b + db 01000010b + db 01000010b db 00000000b ; o db 00000000b db 00000000b - db 00111000b - db 01000100b - db 01000100b - db 01000100b - db 00111000b + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 00111100b db 00000000b ; p db 00000000b db 00000000b - db 11111110b - db 00100100b - db 00100100b - db 00100100b - db 00011000b - db 00000000b + db 01111100b + db 01000010b + db 01000010b + db 01111100b + db 01000000b + db 01000000b ; q db 00000000b db 00000000b - db 00011000b - db 00100100b - db 00100100b - db 00100100b - db 11111110b - db 00000000b + db 00111110b + db 01000010b + db 01000010b + db 00111110b + db 00000010b + db 00000010b ; r db 00000000b db 00000000b - db 01111100b - db 00001000b - db 00000100b - db 00000100b - db 00001000b + db 01011100b + db 01100010b + db 01000000b + db 01000000b + db 01000000b db 00000000b ; s db 00000000b db 00000000b - db 01001000b - db 01010100b - db 01010100b - db 00100100b - db 00000000b - db 00000000b - ; t - db 00000000b - db 00000000b - db 00000100b db 00111110b - db 01000100b + db 01000000b + db 00111100b + db 00000010b + db 01111100b db 00000000b + ; t db 00000000b + db 00010000b + db 00010000b + db 01111100b + db 00010000b + db 00010000b + db 00011100b db 00000000b ; u db 00000000b db 00000000b + db 01000010b + db 01000010b + db 01000010b + db 01000010b db 00111100b - db 01000000b - db 01000000b - db 01111100b - db 00000000b db 00000000b ; v db 00000000b db 00000000b - db 00111100b - db 01000000b - db 00111100b - db 00000000b - db 00000000b + db 01000010b + db 01000010b + db 01000010b + db 00100100b + db 00011000b db 00000000b ; w db 00000000b db 00000000b - db 01111100b - db 00100000b - db 00110000b - db 00100000b - db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01011010b + db 01100110b db 00000000b ; x db 00000000b db 00000000b - db 01000000b + db 01000010b db 00100100b db 00011000b db 00100100b - db 01000000b + db 01000010b db 00000000b ; y db 00000000b db 00000000b - db 00000000b - db 00011100b - db 10100000b - db 01100000b - db 00011100b + db 01000010b + db 00100100b + db 00011000b + db 00010000b + db 00100000b db 00000000b ; z db 00000000b db 00000000b - db 01000100b - db 01100100b - db 01010100b - db 01001100b - db 01000100b + db 01111100b + db 00001000b + db 00010000b + db 00100000b + db 01111100b db 00000000b ; { + db 00001000b + db 00010000b + db 00010000b + db 00100000b + db 00010000b + db 00010000b + db 00001000b db 00000000b + ; | + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b db 00000000b + ; } + db 00100000b + db 00010000b + db 00010000b db 00001000b - db 00110110b - db 01000001b - db 01000001b + db 00010000b + db 00010000b + db 00100000b db 00000000b + ; ~ db 00000000b - ; | db 00000000b db 00000000b + db 01100100b + db 10011000b db 00000000b - db 11111111b db 00000000b db 00000000b + ; DEL db 00000000b db 00000000b - ; } db 00000000b db 00000000b - db 01000001b - db 01000001b - db 00110110b - db 00001000b db 00000000b db 00000000b - ; ~ db 00000000b db 00000000b - db 00010000b - db 00001000b - db 00010000b - db 00001000b + + ; Extended characters (incomplete) + times 80h * 8 db 0ffh + +; airplane +airplane: db 00000000b db 00000000b - ; DEL + db 00001111b + db 00010000b + db 00011111b db 00000000b db 00000000b db 00000000b + db 00000000b db 00000000b + db 11111111b + db 00000111b + db 11111111b + db 00000011b + db 00000001b db 00000000b + db 00000000b db 00000000b + db 11111111b + db 11110000b + db 11110111b + db 11110000b + db 11110000b + db 11110000b - - - ; SMILEY - ;db 00000000b - ;db 01111110b - ;db 10010101b - ;db 10100001b - ;db 10100001b - ;db 10010101b - ;db 01111110b - ;db 00000000b + db 00111110b + db 01000010b + db 10000010b + db 00111110b + db 11111110b + db 00011100b + db 00001100b + db 00000000b |