;******** Change fonts without BIOS -- simple demo Ideal START_CHAR = 'a' NUM_CHARS = 26 CHAR_HEIGHT = 16 Model Tiny P186 CodeSeg Org 100h Proc Prog mov dx,03C4h ;Sequencer port mov ax,0402h ;Set Map Mask to 0100b out dx,ax ;which enables Plane 2 mov ax,0704h ;Turn off Odd/Even mode out dx,ax mov dx,03CEh ;Graphics Controller port mov ax,0204h ;Set Read Plane to 2 out dx,ax mov ax,0005h ;Turn off Odd/Even out dx,ax mov ax,0406h ;Set 0A000h address out dx,ax lea si,[NewFont] ;DS:SI = new font push 0A000h ;ES = video memory pop es ;and DI = START_CHAR * 20h mov di,START_CHAR shl di,5 mov dx,NUM_CHARS ;Number of chars mov ax,CHAR_HEIGHT ;Bytes/char mov bx,20h ;BX = adjustment value sub bx,ax ;which is 20h - height FontLoop: mov cx,ax ;CX = height rep movsb ;Store char add di,bx ;Next char slot dec dx ;Any more chars? jnz FontLoop ;Loop back mov dx,03C4h ;Sequencer port mov ax,0302h ;Restore original values out dx,ax mov ax,0304h out dx,ax mov dx,03CEh ;Graphics Controller port mov ax,0004h ;Restore original values out dx,ax mov ax,1005h out dx,ax mov ax,0E06h out dx,ax ret ;Return EndP Prog NewFont db 5 dup(0),16,56,108,198,254,198,198 db 9 dup(0),252,198,198,252,198,198,252 db 9 dup(0),124,198,3 dup(192),198,124 db 9 dup(0),252,5 dup(198),252,9 dup(0) db 254,192,192,248,192,192,254,9 dup(0) db 254,192,192,248,3 dup(192),9 dup(0),124 db 198,192,222,198,198,124,9 dup(0) db 3 dup(198),254,3 dup(198),9 dup(0),60 db 5 dup(24),60,9 dup(0),30,4 dup(12),204 db 120,9 dup(0),198,204,216,240,216,204,198 db 9 dup(0),6 dup(192),254,9 dup(0),198,238 db 254,214,3 dup(198),9 dup(0),198,230,246 db 222,206,198,198,9 dup(0),124,5 dup(198) db 124,9 dup(0),252,198,198,252,3 dup(192) db 9 dup(0),124,4 dup(198),124,14,9 dup(0) db 252,198,198,252,3 dup(198),9 dup(0),124 db 198,192,124,6,198,124,9 dup(0),126 db 6 dup(24),9 dup(0),6 dup(198),124,9 dup(0) db 4 dup(198),108,56,16,9 dup(0),3 dup(198) db 214,254,238,198,9 dup(0),198,198,108,56 db 108,198,198,9 dup(0),3 dup(102),60,24,24 db 24,9 dup(0),254,12,24,48,96,192,254,4 dup(0) End Prog