aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--box.asm1524
1 files changed, 879 insertions, 645 deletions
diff --git a/box.asm b/box.asm
index 76afc62..26f7d17 100644
--- a/box.asm
+++ b/box.asm
@@ -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