From b2b07a9d6ee13b8dcbd54fe651c4a2a5747f6f49 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Wed, 15 Jan 2020 17:58:30 +0800 Subject: [PATCH] Initial compressed fonts support CVDU untested --- Source/Fonts/font8x11c.asm | 85 ++++++ Source/Fonts/font8x11c.bin | Bin 0 -> 1254 bytes .../font8x11.asm => Fonts/font8x11u.asm} | 0 Source/Fonts/font8x11u.bin | Bin 0 -> 2816 bytes Source/Fonts/font8x16c.asm | 99 +++++++ Source/Fonts/font8x16c.bin | Bin 0 -> 1467 bytes .../font8x16.asm => Fonts/font8x16u.asm} | 0 Source/Fonts/font8x16u.bin | Bin 0 -> 4096 bytes Source/Fonts/font8x8c.asm | 69 +++++ Source/Fonts/font8x8c.bin | Bin 0 -> 1035 bytes .../font_8x8.asm => Fonts/font8x8u.asm} | 0 Source/Fonts/font8x8u.bin | Bin 0 -> 2048 bytes Source/{HBIOS => Fonts}/font_lo.asm | 0 Source/Fonts/fonts.txt | 51 ++++ Source/Fonts/lzsa.exe | Bin 0 -> 197120 bytes Source/HBIOS/cvdu.asm | 33 ++- Source/HBIOS/font8x11c.asm | 85 ++++++ Source/HBIOS/font8x11u.asm | 260 ++++++++++++++++++ Source/HBIOS/font8x16c.asm | 99 +++++++ Source/HBIOS/font8x16u.asm | 256 +++++++++++++++++ Source/HBIOS/font8x8c.asm | 69 +++++ Source/HBIOS/font8x8u.asm | 258 +++++++++++++++++ Source/HBIOS/hbios.asm | 26 +- Source/HBIOS/std.asm | 4 + Source/HBIOS/tms.asm | 24 +- Source/HBIOS/unlzsa2s.asm | 183 ++++++++++++ Source/HBIOS/vga.asm | 40 ++- 27 files changed, 1629 insertions(+), 12 deletions(-) create mode 100644 Source/Fonts/font8x11c.asm create mode 100644 Source/Fonts/font8x11c.bin rename Source/{HBIOS/font8x11.asm => Fonts/font8x11u.asm} (100%) create mode 100644 Source/Fonts/font8x11u.bin create mode 100644 Source/Fonts/font8x16c.asm create mode 100644 Source/Fonts/font8x16c.bin rename Source/{HBIOS/font8x16.asm => Fonts/font8x16u.asm} (100%) create mode 100644 Source/Fonts/font8x16u.bin create mode 100644 Source/Fonts/font8x8c.asm create mode 100644 Source/Fonts/font8x8c.bin rename Source/{HBIOS/font_8x8.asm => Fonts/font8x8u.asm} (100%) create mode 100644 Source/Fonts/font8x8u.bin rename Source/{HBIOS => Fonts}/font_lo.asm (100%) create mode 100644 Source/Fonts/fonts.txt create mode 100644 Source/Fonts/lzsa.exe create mode 100644 Source/HBIOS/font8x11c.asm create mode 100644 Source/HBIOS/font8x11u.asm create mode 100644 Source/HBIOS/font8x16c.asm create mode 100644 Source/HBIOS/font8x16u.asm create mode 100644 Source/HBIOS/font8x8c.asm create mode 100644 Source/HBIOS/font8x8u.asm create mode 100644 Source/HBIOS/unlzsa2s.asm diff --git a/Source/Fonts/font8x11c.asm b/Source/Fonts/font8x11c.asm new file mode 100644 index 00000000..be728ee0 --- /dev/null +++ b/Source/Fonts/font8x11c.asm @@ -0,0 +1,85 @@ + .db $1A, $6F, $7E, $C3, $99, $F3, $E7, $FF, $E7, $7E, $00, $1A, $2B, $7F, $E6 + .db $66, $66, $C3, $1A, $4A, $0C, $18, $FC, $30, $FC, $60, $C0, $FA, $4B, $18 + .db $30, $60, $30, $18, $00, $7C, $00, $01, $90, $1B, $00, $F8, $00, $FB, $E9 + .db $3C, $23, $1A, $4A, $10, $38, $7C, $FE, $7C, $38, $10, $FD, $61, $C3, $C6 + .db $CC, $D8, $36, $6E, $D6, $BF, $06, $58, $6B, $C6, $8C, $0F, $B3, $F9, $6F + .db $E1, $33, $66, $34, $EA, $36, $6A, $DF, $82, $01, $04, $D0, $1F, $00, $6C + .db $00, $F6, $11, $0C, $78, $A5, $F9, $0E, $1B, $18, $3C, $18, $18, $D8, $70 + .db $40, $D6, $EB, $7E, $05, $A1, $EC, $7E, $48, $00, $9E, $40, $7C, $F2, $DB + .db $9B, $5F, $F1, $5B, $55, $51, $BB, $36, $54, $DB, $DB, $B8, $48, $18, $59 + .db $0C, $0C, $00, $B9, $01, $44, $CA, $56, $CC, $66, $D8, $FB, $08, $66, $66 + .db $CC, $27, $57, $47, $DA, $4B, $18, $BC, $1B, $5A, $C6, $7C, $7E, $C0, $CE + .db $C6, $7E, $00, $5A, $2F, $00, $76, $CC, $7C, $0C, $02, $40, $AD, $10, $78 + .db $30, $4C, $78, $8A, $0E, $70, $A4, $3B, $78, $C4, $70, $38, $8C, $78, $0C + .db $AB, $10, $7C, $C0, $0B, $F8, $AF, $06, $42, $C9, $E9, $78, $20, $D5, $02 + .db $FA, $0A, $6C, $6C, $28, $04, $29, $FE, $F2, $6B, $6C, $B6, $FB, $7C, $D0 + .db $7C, $16, $7C, $E8, $00, $60, $87, $52, $66, $C6, $6B, $FB, $43, $38, $6C + .db $38, $76, $DC, $CC, $76, $44, $32, $65, $69, $69, $60, $67, $65, $69, $01 + .db $4C, $60, $B2, $50, $38, $FE, $D0, $45, $91, $F1, $30, $FC, $03, $F4, $47 + .db $C4, $4F, $FC, $6C, $45, $03, $51, $06, $0C, $B1, $53, $C0, $80, $46, $18 + .db $0E, $C6, $C6, $D6, $2B, $7C, $22, $42, $25, $53, $30, $FC, $24, $1F, $CC + .db $0C, $38, $60, $CC, $A0, $53, $0C, $CC, $03, $5B, $45, $1C, $3C, $6C, $CC + .db $FE, $0C, $1E, $AB, $48, $C0, $11, $25, $30, $38, $60, $AA, $0C, $CC, $51 + .db $FC, $CC, $A7, $44, $7B, $08, $78, $6E, $02, $05, $A4, $28, $7C, $4D, $70 + .db $80, $22, $EA, $07, $27, $4C, $60, $24, $E9, $C0, $45, $51, $46, $4F, $21 + .db $42, $59, $45, $71, $6D, $18, $B6, $7C, $4E, $7C, $C6, $DE, $DE, $DC, $C0 + .db $78, $D7, $40, $44, $E8, $FE, $62, $1B, $E8, $FC, $08, $7C, $43, $45, $FA + .db $46, $3C, $66, $C0, $C0, $C0, $66, $3C, $30, $F8, $6C, $93, $66, $6C, $F4 + .db $40, $1F, $FE, $62, $68, $78, $68, $62, $FE, $A0, $55, $60, $F0, $D4, $60 + .db $11, $F3, $66, $3E, $42, $B4, $43, $B3, $62, $13, $66, $11, $10, $1E, $0C + .db $F4, $45, $24, $FA, $E6, $66, $6C, $78, $6C, $66, $E6, $69, $F0, $75, $53 + .db $62, $66, $B3, $79, $1A, $C6, $EE, $FE, $FE, $C0, $03, $F8, $15, $E6, $F6 + .db $DE, $CE, $65, $AB, $E9, $C6, $46, $66, $49, $60, $92, $26, $FD, $02, $CE + .db $7C, $0E, $45, $B3, $7D, $78, $CC, $E0, $78, $1C, $C1, $4F, $B4, $87, $0A + .db $4D, $C6, $BE, $06, $F5, $6C, $38, $FC, $1F, $D6, $D6, $FE, $6C, $4A, $6C + .db $00, $62, $95, $E9, $CC, $85, $61, $FB, $4F, $FE, $CC, $98, $30, $62, $C6 + .db $FE, $0A, $60, $23, $55, $6A, $C0, $B5, $33, $06, $02, $0A, $18, $F5, $23 + .db $69, $10, $C0, $A7, $F5, $6C, $6A, $FE, $6A, $66, $78, $43, $D2, $94, $0C + .db $7C, $F5, $77, $48, $E0, $3D, $61, $A0, $2D, $DC, $95, $CC, $C0, $F0, $F0 + .db $29, $0C, $36, $CC, $76, $5F, $6E, $FC, $69, $53, $60, $F0, $0E, $62, $04 + .db $EA, $76, $4B, $F8, $BE, $F0, $6C, $76, $6B, $E6, $07, $A7, $BC, $1F, $48 + .db $0C, $BC, $66, $9F, $F2, $E0, $60, $43, $DF, $6D, $70, $7F, $03, $F8, $0A + .db $EC, $FE, $D6, $04, $11, $DC, $66, $F5, $46, $7C, $E9, $CC, $26, $4A, $7C + .db $91, $46, $92, $2C, $1E, $5F, $4C, $76, $7C, $A6, $63, $43, $0E, $A2, $FF + .db $DE, $B6, $36, $1C, $04, $47, $45, $0A, $63, $A0, $04, $63, $A0, $24, $5F + .db $63, $9F, $45, $D4, $45, $3A, $62, $46, $60, $9F, $53, $64, $FC, $03, $A0 + .db $90, $E8, $E0, $43, $B3, $0D, $18, $FA, $01, $01, $63, $02, $43, $05, $63 + .db $D1, $86, $E0, $A1, $10, $3C, $3C, $64, $74, $5A, $2A, $1C, $36, $63, $7F + .db $63, $9F, $F1, $03, $06, $53, $FE, $C6, $66, $48, $28, $5A, $05, $F7, $76 + .db $DC, $0B, $56, $6C, $00, $DF, $01, $07, $A0, $9E, $4F, $3F, $6D, $CC, $FF + .db $CC, $CD, $CF, $14, $BB, $1E, $66, $3C, $06, $3C, $54, $BC, $2E, $FE, $62 + .db $78, $62, $FE, $33, $07, $A0, $F3, $10, $28, $44, $B3, $04, $AF, $43, $D4 + .db $8E, $00, $CF, $0F, $18, $A1, $F7, $20, $50, $0E, $8C, $CC, $0F, $A5, $FF + .db $BC, $E9, $F6, $45, $66, $82, $1D, $45, $BE, $8D, $7C, $EA, $CA, $14, $0C + .db $18, $46, $3A, $F5, $C6, $7C, $06, $A0, $29, $6C, $23, $59, $03, $86, $E4 + .db $52, $5D, $3D, $67, $6E, $7E, $76, $E6, $BC, $B3, $EF, $C6, $11, $EF, $C6 + .db $4F, $C6, $BE, $0F, $EE, $C6, $92, $18, $30, $13, $AC, $78, $FF, $7A, $6A + .db $7C, $07, $85, $F2, $FA, $1F, $D8, $CC, $C6, $CC, $35, $AA, $55, $82, $FE + .db $98, $AA, $30, $7D, $AC, $00, $E0, $95, $F8, $D6, $D0, $D6, $83, $FE, $61 + .db $E8, $64, $84, $D5, $FA, $4D, $1E, $31, $FC, $60, $F8, $33, $1E, $41, $AA + .db $A1, $FE, $43, $D4, $E8, $28, $86, $F5, $CF, $70, $3E, $61, $9E, $60, $A0 + .db $37, $86, $7C, $55, $1A, $3C, $42, $99, $A1, $A1, $99, $42, $3C, $A2, $9C + .db $6C, $6C, $3E, $00, $7E, $DD, $98, $E8, $33, $F6, $66, $33, $95, $FC, $0C + .db $6D, $4A, $66, $BE, $4C, $66, $C9, $FB, $1F, $B9, $A5, $B9, $A5, $65, $F3 + .db $64, $27, $85, $85, $A6, $E5, $3F, $2C, $FC, $75, $18, $30, $CE, $80, $DF + .db $A7, $EE, $38, $94, $50, $20, $82, $03, $FD, $E9, $66, $B1, $7B, $C0, $F8 + .db $E8, $7F, $10, $7B, $1B, $F0, $47, $BB, $47, $D4, $82, $5F, $18, $38, $18 + .db $18, $3C, $92, $1D, $46, $82, $41, $52, $A5, $F6, $FC, $42, $7F, $CD, $CC + .db $CF, $CC, $CD, $7F, $9C, $7E, $DB, $DE, $D8, $7E, $FF, $FB, $65, $95, $63 + .db $B6, $AD, $60, $0C, $82, $FF, $2C, $ED, $FF, $06, $24, $5A, $0F, $1F, $11 + .db $EC, $F8, $02, $EA, $1F, $04, $A1, $EF, $F8, $43, $D4, $25, $51, $47, $C9 + .db $EF, $FF, $12, $47, $9D, $25, $5F, $35, $88, $22, $43, $80, $26, $F9, $07 + .db $62, $27, $CC, $2D, $FF, $0E, $36, $F5, $23, $1E, $0A, $3F, $30, $37, $FB + .db $0D, $FE, $06, $F6, $01, $5E, $00, $37, $30, $3F, $D4, $1E, $F6, $06, $FE + .db $A5, $4B, $37, $D4, $24, $43, $D4, $45, $A8, $2E, $F7, $51, $4F, $F7, $9D + .db $2D, $F7, $5F, $0E, $FF, $81, $C2, $26, $EF, $3C, $E8, $18, $E8, $3C, $A4 + .db $CA, $96, $E9, $7F, $04, $FC, $0E, $0C, $FE, $0C, $B7, $60, $30, $8B, $0A + .db $0F, $18, $10, $F7, $10, $28, $F7, $76, $DC, $0C, $F3, $6C, $00, $85, $CB + .db $22, $51, $65, $3D, $BF, $1B, $7E, $D8, $6E, $E1, $55, $54, $0C, $78, $A8 + .db $A6, $EA, $5F, $0C, $18, $45, $A8, $26, $5E, $F3, $6C, $00, $85, $E0, $EF + .db $70, $11, $EF, $70, $06, $AB, $28, $D8, $A6, $D1, $DE, $FD, $34, $18, $2C + .db $7C, $B3, $76, $DC, $EE, $5E, $87, $E0, $F5, $15, $44, $39, $26, $82, $FC + .db $01, $86, $E1, $9E, $2E, $3D, $66, $6E, $76, $66, $E0, $A6, $EA, $54, $0C + .db $18, $45, $71, $06, $AB, $2A, $CC, $66, $CC, $8F, $CC, $D1, $8E, $8B, $7C + .db $D5, $E6, $44, $DF, $26, $47, $00, $F0, $E8 + diff --git a/Source/Fonts/font8x11c.bin b/Source/Fonts/font8x11c.bin new file mode 100644 index 0000000000000000000000000000000000000000..e065e9a30729c8a970690d4f957dd0b6e009c7e0 GIT binary patch literal 1254 zcmWmBZ%h+s0D$o;EydKcv{RQ0VC(p=qPq=+&K1FyYZ>4W0XH$TM+>h42i9bEw|N%U z4P2&k%4E?@p%?)J8sqBNj0A7fT%tPxm)eoRpe7r(oud^jRC-+JK0o<=dg2aR@0^=^ z5_w{U;x;r*18^s<5JotZ!|BB$1jSJVq9DPkcqjygz3Qa6LYa!JGz>Wi`5P zi{GzjPQ*H19DJM!Hv6*brfdSys1hQec{xmWzmUcwY6KZG=eho|Mt4267C;?&)a>|o zhG%;#N^fPAkB|RUfb4-`=%yh5{%#hGg_i-qroE^CqX-#{uVg4IJGWMfqHrF3eCxjE4n zlU9r;dugmxSMr)>4|b>l8KB;!n90crn*2R4-@_Z@J=`)%i!JKZfTn4nMnl9mfOwv# zMa^rgff#Mq-h!g|$1SC)n8T$e?!~1GY8T&{vf2{wf&JZ4EM%*uIWP z+9PcJYu5)k`x~v6=|P8|k^7kvW+--sX+zMJSIEdGbyQ5t?4ojvW!No!6*m5CAA0l( zOq_+k~%-gCuaC>$uRS~Dwoa^d3r%_)# zPY~N6>z`*mne!mCor4<+!B8={7gpZvzS&(fSDn_<((`w226q@ihnuH*XH;i)uC)o5 zyx{r~I^=1R9f=R*{>Ur(3n_*zUnFXqQ(wdw)7Xs>X;v^vA<0Fv z!z+04ykH-cjpjNP^J2ccDBGE=bz+w{EtHllT-dl^kVZcJCDpI?ARhIl``>z-M4S}n z;U97IxFi;lEy&VezJlinsO8th(wdyx@z$}%#}(x;dAY}DfD!C+>c0P@+i#Zp&Eo#_ zv7U#MOPi4l%3+z9*>}txT%G?`s*Mx0KJM6*0~#&B-Qz2N=?;ne*Rz2AntgckIQ3{c Le=1cE1w8)&>PJyo literal 0 HcmV?d00001 diff --git a/Source/HBIOS/font8x11.asm b/Source/Fonts/font8x11u.asm similarity index 100% rename from Source/HBIOS/font8x11.asm rename to Source/Fonts/font8x11u.asm diff --git a/Source/Fonts/font8x11u.bin b/Source/Fonts/font8x11u.bin new file mode 100644 index 0000000000000000000000000000000000000000..330a44e086be62b21e9de7d951485f83a3b0437c GIT binary patch literal 2816 zcmb7GziS*v6dn?|YH_X#13F}rN=1qZGSU`n3G^2@g{w3Z*-T6_5vq;_FLxnDNZ~)g zB9#j_snZw?Sy0$&B)d8eBow8QA%vh1kghoP^1U~2_O8u4nEm$6oA+zpdwZkfqkrEo z-j5W~_{zCs0-2thxvdFmV~ti7K>%abjG$5lh(SNE+A8l8K5oKv>tOP0PvAGr^N*DJ zW7FOLbL;EhzlSnVT$Ja-D@#`5<<6Qew4NRUYCU3cfp}rzFg5nM|SR87#vH6)Pxe0Uy)1hqs%&{#_s z1HuCvmZ0)^n@eVmnZsO1-Pw7^0*Delq{-Ib(MHuYlLoPZ425P`ybM`xLkF|K!4C=_ z+H9R<=k+WTZf@&YhywEf#nD6wmT>W`GJQzL*uHp455r-QGZGs#biCX9h-UQoSzYF_n($e_uCHIYl0+u>UIb=tc#V= zWy^K1XNWS!cIABO-4)4R<0|$YD{KC4TjY;5T-{upMu?<>D&mr7Hd~`qqO1&; z7-!{B3`we?m!bxj6QIy=Q_W{Y4)MA>s zeVixOlIWa?H5Qp=R>eZRv=;e27jCGf9y07l0lK4kx)zHBaeftANP6hf`k{;IGs_;z z)F37J(o%vszlW5D)Ng;algT6+KF4*s^{LDYb( zCD)PRm|v7Z$}b=#xRZ^O0QdRAJed=BV9cd4tc-Jt1zcibg9L_>F2YI|1#K%;+rif3 z@neD?_F$l86a5V|VuU!BpvNo_E`~yayWfUIIC)DNsD541D*&x&_sdw|neJeJqk|qj zAOe;L8W#cDD%H-thaC*dfrlQtksg9)RN`b98c@v@!3-Y@fgDBTaugAI+K-Utl}xJ# zUmc8wS8qgF5`eMS(XO|BPc#TSreH~L+{?0i``SNuS6u5gRJqn9s__9*Lx_d9At29(-# z!EHu}GRd+C9ckdAE%si&di{!zapK~B?o;W(TN>bV;^$r)5h}Ah<9L;Nc(1EIh0mIE z&uYky&(5B$t*y~9kPO#VS)FT5&VtyQD2BK4WgMS`x8Y{1 zLW?Mw%03phx=ZhIXBHu?cbBrWB@|f_n9&k<77^0AVnVn-ej>llz8s2=w93KNy@fcu zm54WY%{JZ{w!IsMShmeBvjA^;ZGzh(%iJ5Rys=QX46)oUP2381k%*dq<)01y=Ex|} zW}Jqt&RUc{ku}}W)l1ml=(xl44tmu=%!f3ql^U&$rU$I8q*2Y~1HEZLLvMo6n;?`W zi0;M+E=dFCLxPwO2~L+2{J#Da-vE|H&(nmaWB+G9;Gba{AYA@Z!4KTQ(7h35X;#CX Z1mRACRH-t|X+CscoGN`8SRhXD{{Znm!FT`w literal 0 HcmV?d00001 diff --git a/Source/Fonts/font8x16c.asm b/Source/Fonts/font8x16c.asm new file mode 100644 index 00000000..f2112d23 --- /dev/null +++ b/Source/Fonts/font8x16c.asm @@ -0,0 +1,99 @@ + .db $0F, $00, $F8, $38, $4E, $7E, $81, $A5, $81, $81, $BD, $99, $2C, $7E, $87 + .db $FC, $7C, $FE, $FE, $D6, $FE, $FE, $BA, $C6, $FE, $7C, $F8, $19, $00, $6C + .db $EE, $FE, $20, $35, $38, $10, $80, $3D, $10, $38, $7C, $98, $26, $00, $2C + .db $40, $DC, $08, $6C, $07, $00, $49, $7C, $CF, $22, $8F, $06, $F0, $18, $3C + .db $0C, $18, $AF, $0A, $FF, $F0, $E7, $C3, $F3, $E7, $FF, $04, $0F, $08, $66 + .db $45, $DF, $04, $0F, $08, $99, $35, $C3, $E7, $03, $19, $1E, $0E, $1E, $36 + .db $78, $CC, $FF, $4C, $78, $44, $44, $D3, $10, $7E, $18, $EB, $00, $F9, $10 + .db $1E, $1A, $1E, $18, $3C, $78, $F8, $70, $0F, $30, $3E, $36, $5C, $41, $36 + .db $76, $F6, $66, $0E, $1E, $0C, $83, $51, $DB, $7E, $A0, $5D, $3C, $7E, $DB + .db $18, $30, $FD, $66, $80, $E0, $F0, $FC, $FE, $FC, $F0, $E0, $80, $5E, $02 + .db $0E, $3E, $7E, $FE, $7E, $3E, $0E, $02, $53, $4A, $7E, $B0, $4E, $7E, $4E + .db $0C, $66, $FC, $21, $24, $8F, $11, $7F, $DB, $F1, $7B, $1B, $65, $D0, $38 + .db $5C, $C6, $C6, $60, $7C, $F6, $DE, $7C, $0C, $6F, $7C, $AA, $13, $62, $CD + .db $47, $B0, $49, $7E, $4D, $47, $A0, $40, $47, $40, $01, $9F, $46, $90, $06 + .db $FF, $31, $0C, $0E, $FF, $0E, $0C, $00, $FF, $32, $30, $70, $FE, $70, $30 + .db $00, $E8, $C0, $2F, $FE, $02, $7F, $23, $24, $66, $FF, $66, $24, $70, $63 + .db $7D, $47, $75, $1F, $08, $7C, $61, $5C, $67, $05, $54, $67, $63, $69, $3C + .db $B3, $65, $B0, $09, $36, $F0, $2F, $14, $3F, $08, $6C, $0B, $FE, $E7, $4E + .db $6C, $50, $FD, $7C, $C6, $C0, $78, $3C, $06, $C6, $7C, $18, $18, $FC, $43 + .db $62, $66, $0C, $18, $30, $66, $C6, $79, $38, $6C, $38, $30, $76, $7E, $50 + .db $4C, $76, $34, $28, $0C, $24, $47, $8F, $41, $D5, $03, $FB, $4D, $18, $1E + .db $01, $02, $F4, $01, $47, $8D, $13, $50, $38, $FE, $BA, $47, $5D, $62, $11 + .db $27, $81, $47, $A8, $AA, $4F, $FE, $28, $07, $00, $51, $02, $06, $61, $7F + .db $00, $60, $C0, $80, $50, $7F, $10, $CE, $DE, $F6, $E6, $52, $76, $18, $78 + .db $7E, $27, $00, $43, $D0, $F6, $C6, $FE, $FE, $37, $06, $06, $3C, $06, $06 + .db $06, $7D, $0C, $1C, $3C, $6C, $CC, $CC, $FE, $0C, $0C, $1E, $16, $61, $73 + .db $2B, $FC, $08, $46, $A0, $21, $08, $C6, $F8, $26, $4B, $FE, $B1, $02, $F0 + .db $25, $02, $20, $27, $2A, $23, $4D, $7E, $A0, $46, $24, $23, $E8, $27, $63 + .db $66, $B8, $43, $33, $6C, $60, $C0, $46, $01, $67, $FF, $02, $20, $43, $0E + .db $47, $30, $00, $9F, $65, $20, $46, $90, $08, $DE, $7E, $0F, $DC, $C0, $7E + .db $50, $41, $6F, $EA, $FE, $84, $10, $E9, $FC, $8A, $7C, $FF, $0B, $AE, $FC + .db $90, $11, $C2, $C0, $F0, $3C, $C2, $66, $3C, $0F, $B4, $F8, $6C, $EE, $75 + .db $6C, $F8, $85, $3F, $68, $66, $60, $64, $7C, $64, $60, $60, $66, $FE, $50 + .db $57, $60, $F0, $90, $61, $DE, $6F, $CE, $F0, $0F, $4D, $C6, $91, $46, $90 + .db $15, $3C, $18, $2F, $3C, $84, $5E, $03, $D8, $D8, $70, $D0, $FE, $CC, $D8 + .db $F0, $F0, $D8, $CC, $13, $F0, $60, $F0, $48, $62, $90, $26, $FE, $3F, $EE + .db $EE, $FE, $D6, $D6, $D6, $A0, $71, $F0, $E6, $E6, $49, $CE, $8F, $67, $A0 + .db $20, $65, $90, $46, $20, $52, $66, $7C, $60, $27, $41, $40, $BE, $57, $7C + .db $06, $00, $49, $78, $1B, $6F, $E6, $30, $11, $77, $70, $1C, $20, $57, $7E + .db $5A, $50, $55, $4F, $C6, $A0, $26, $8E, $AE, $6C, $D0, $43, $A4, $5E, $02 + .db $D6, $FE, $EE, $60, $23, $63, $8B, $87, $E2, $A0, $4A, $3C, $00, $86, $FF + .db $D0, $E9, $86, $97, $60, $C2, $80, $0F, $0D, $60, $6E, $7C, $1D, $F3, $80 + .db $C0, $2D, $02, $0F, $0D, $0C, $24, $0F, $69, $10, $30, $0F, $00, $EE, $8C + .db $FF, $91, $2F, $0C, $47, $48, $78, $C4, $A0, $F1, $50, $EC, $DC, $51, $00 + .db $E0, $96, $6E, $66, $00, $67, $FD, $4E, $C0, $20, $51, $1C, $0C, $D2, $02 + .db $F0, $2F, $7E, $21, $F7, $C6, $FE, $A8, $36, $F0, $20, $E9, $FC, $37, $30 + .db $78, $04, $69, $76, $02, $71, $CE, $76, $BE, $47, $A0, $AF, $E6, $F0, $58 + .db $6D, $38, $00, $86, $FE, $03, $4B, $1C, $30, $A1, $0E, $45, $70, $60, $6F + .db $E9, $6C, $46, $D0, $06, $FE, $8F, $1C, $5D, $1E, $61, $00, $EB, $C6, $A4 + .db $4D, $EC, $DC, $47, $60, $10, $66, $00, $26, $85, $F0, $FD, $4E, $F0, $60 + .db $42, $30, $61, $B8, $2F, $1E, $02, $20, $25, $11, $46, $00, $F6, $7C, $06 + .db $4D, $30, $21, $4F, $36, $80, $6B, $CC, $F0, $EF, $76, $08, $66, $00, $26 + .db $84, $F0, $FE, $2F, $6C, $2F, $AA, $6C, $8A, $27, $02, $65, $E0, $86, $EF + .db $32, $82, $FE, $54, $62, $FE, $10, $E9, $0E, $EA, $70, $4F, $0E, $00, $10 + .db $64, $FB, $24, $E9, $70, $EA, $0E, $6C, $70, $09, $F6, $76, $DC, $A7, $D3 + .db $5E, $A1, $EF, $3B, $65, $33, $F2, $3C, $66, $81, $8E, $60, $9F, $4B, $38 + .db $53, $01, $EE, $44, $7F, $A6, $61, $67, $30, $4F, $60, $39, $8F, $CC, $E0 + .db $58, $00, $26, $8E, $86, $92, $26, $8E, $A6, $01, $26, $0F, $87, $C1, $3D + .db $81, $D2, $28, $0C, $38, $44, $B0, $46, $A0, $46, $B0, $26, $86, $D0, $F1 + .db $27, $5F, $E8, $66, $86, $E0, $85, $C8, $D3, $26, $46, $D0, $27, $04, $8F + .db $C6, $E1, $2F, $45, $71, $01, $78, $24, $46, $21, $A8, $FE, $F4, $B0, $E9 + .db $7C, $6E, $FE, $40, $FD, $66, $DB, $1B, $7F, $D8, $D8, $DF, $11, $7E, $D8 + .db $FD, $09, $FE, $4E, $DE, $00, $87, $F5, $C0, $36, $C6, $00, $88, $46, $50 + .db $26, $46, $D0, $66, $B0, $66, $E0, $27, $84, $8A, $18, $E4, $0F, $47, $50 + .db $8E, $7C, $E8, $60, $25, $EE, $C6, $66, $10, $65, $C0, $6D, $18, $A0, $40 + .db $42, $E9, $F0, $7C, $0C, $66, $F6, $6C, $E1, $A5, $F1, $AE, $3C, $C8, $F0 + .db $F8, $3E, $63, $63, $30, $1C, $06, $63, $63, $3E, $00, $1C, $06, $68, $32 + .db $38, $0E, $66, $20, $66, $60, $25, $88, $66, $A0, $26, $47, $20, $4D, $81 + .db $B8, $84, $FF, $20, $ED, $DC, $B6, $76, $DC, $A0, $06, $8E, $B2, $C6, $C6 + .db $8F, $A5, $E2, $60, $F8, $21, $1E, $00, $1E, $33, $FB, $1D, $67, $63, $33 + .db $1D, $48, $42, $A9, $49, $3B, $D3, $96, $3E, $06, $C0, $B2, $30, $30, $FB + .db $BD, $6E, $60, $B0, $65, $8B, $41, $2E, $87, $6B, $4D, $A1, $8F, $04, $AE + .db $A2, $16, $49, $6C, $7B, $50, $DC, $36, $66, $2F, $3E, $80, $5C, $2F, $36 + .db $6E, $DE, $36, $7E, $DD, $A3, $F2, $8E, $3C, $BC, $9E, $84, $3C, $FF, $12 + .db $6C, $D8, $6C, $36, $21, $9F, $F4, $6C, $D8, $37, $11, $44, $55, $F7, $AA + .db $55, $F7, $DD, $77, $5F, $0F, $18, $D9, $2F, $F8, $58, $27, $1F, $0C, $36 + .db $F5, $F6, $36, $86, $C8, $60, $27, $47, $47, $D0, $F0, $F6, $06, $07, $FE + .db $44, $C2, $27, $06, $B7, $F6, $06, $C0, $23, $25, $68, $27, $0B, $46, $70 + .db $A7, $1B, $66, $4F, $F8, $38, $2E, $1F, $38, $25, $4F, $FF, $D0, $67, $EF + .db $FF, $06, $B0, $26, $47, $C0, $76, $47, $D2, $6F, $1F, $F0, $69, $EC, $37 + .db $26, $57, $30, $3F, $62, $40, $37, $3F, $30, $50, $4E, $F7, $A0, $47, $92 + .db $4F, $F7, $C0, $51, $47, $D0, $25, $04, $6F, $FF, $F0, $4F, $F7, $D0, $16 + .db $45, $22, $6F, $FF, $D0, $47, $A0, $77, $4F, $FF, $20, $67, $70, $60, $47 + .db $50, $46, $20, $67, $A1, $48, $6F, $1F, $E0, $6F, $3F, $30, $66, $EE, $FF + .db $65, $D2, $67, $A0, $67, $50, $8F, $EE, $1F, $0F, $FF, $64, $46, $4D, $26 + .db $0F, $F0, $F6, $EF, $0F, $65, $47, $C8, $86, $DE, $DE, $82, $1D, $A6, $EA + .db $30, $A1, $A4, $8B, $D8, $BC, $50, $ED, $CC, $95, $66, $62, $8E, $87, $A1 + .db $33, $0B, $6C, $FC, $86, $60, $FB, $3E, $62, $30, $18, $18, $30, $62, $A6 + .db $CD, $49, $CC, $BB, $AE, $70, $D1, $A1, $EC, $66, $57, $C0, $80, $8F, $67 + .db $E4, $2C, $89, $FE, $03, $A3, $CE, $FD, $45, $C0, $A4, $61, $22, $78, $07 + .db $19, $21, $00, $FE, $8D, $EE, $30, $40, $77, $52, $3C, $66, $61, $4F, $78 + .db $90, $1A, $A1, $7D, $AF, $7E, $B1, $22, $A9, $7C, $B7, $30, $49, $F6, $90 + .db $25, $B3, $1C, $30, $EC, $20, $B7, $30, $1C, $00, $60, $4F, $C6, $31, $04 + .db $EA, $87, $A1, $7B, $EC, $7E, $A5, $C2, $23, $8B, $A6, $91, $21, $60, $23 + .db $25, $7E, $97, $1E, $1A, $ED, $A0, $9F, $58, $78, $30, $A1, $86, $09, $7E + .db $D4, $67, $8E, $02, $E0, $67, $90, $8F, $78, $AA, $53, $07, $77, $87, $F6 + .db $F5, $60, $50, $34, $78, $38, $61, $6F, $D8, $74, $43, $5F, $F1, $70, $D8 + .db $AF, $F8, $95, $2D, $03, $FB, $EF, $00, $47, $00, $F0, $E8 + diff --git a/Source/Fonts/font8x16c.bin b/Source/Fonts/font8x16c.bin new file mode 100644 index 0000000000000000000000000000000000000000..2373e55e497ab652c77b9f150c6ae16ade4de8cb GIT binary patch literal 1467 zcmWN|UrZBs0KoC1umk6Q`52K;zP$e-AES^>#`sqmSbw^Liyc%`96KVGAL_m zWIOsgI&Pj@$9Cly07e10&I2a90;1DE{fh1xLa2fHZA}Ok6d0ly zdRY`6{rvQiSRgB+>L0x5xp#hkl)pkHRT+J8@dIC7-Ca4Wcntj~SFKbjFkjXqLo1ED zYK-0tB~>AxHQi&m-57gMfi6=1l#l~CA?4pAkyf&Rt&~c(Z(*a2Y$HPDG-aXU_IqfKIX$3@rwRQ?opcMa! zi8i5L*7|{W<65MQ2-WwZ=USI^|QjlZ?1@Fc&T! zjtST>g~`6p(&-~~_ITBPirmNSBS{Kan@J&T8+VTgGBbY~55JBn3|Qx${AALT0P&p)dH4Ms;txx>Q5M8inP#i^ZPT)mBANPSK9t!4&>8hoqV6KHXpN2zXR zKeX<&@SH9r~cSm64@(Ane2cZ zl|kt*#M1_Z*zEg-o3qZ0H9@H_TPeu3*cekcDUmx8!N6+fd2qofsHbujsITCFS8{m7 zdyC+PCWMwlCMW>%w<^(ywBAFyr)WF@gOGB!$_72=d(AUr1SzK=-Em>DQ6M*=wrd8J zM6E5xp$r3?QH{muKNuHgy+tofrvMDJVSqlVmpD^_*$tn99d;m}l1_UpQb@jUp=`=C zEu}q6GTyQCclShQ-*cA#i%}gxvS+JldtSP(z2D|SE#$kQc&Y``1p{Yv!Tvm*tm~)u zJMOGSOm$J5!=t)DVotwzk_x1b-@dEE6Z(P>|Iko>IL}vxYc7Ci(J7`CR4-EZR<$RS z4~p63;u6p}4s|_`8F}agZhf&(Q7WbHJgN9cMp%Q)B&kjFl-wCRq~NMIO$iJ_W$1@} zbA#AzAzSHipi0=`sDza8{tYH6rKU*j35wGZYIDc6PEq}2><8}{2L~_ne5mhlGOJNR zs`7=^E=T$5&6_SZym$A@N;q~IMHgg=%dy#BW0-c?=l!$ z$Bpd$@BR&9H@@k_#8>GgZPfHUqmvcIbvx$=cFx~#+bdK2WyrSZOAzDpj4^PV)DuKP z$iRi5Zdear&A_oz?SB1I+;e^vWyzY}E-`5>V!|~m!ciR&^AdO5CBlK33SBc=Wv{NN zLamMS9C5}nA8R5K+5)#ISmqPU>({u&1i`ggM77I95>{O8ifne5q}){~l@^_MT%5}q zN|(sQeYjaC6Ed?hCviJ4KK|+I{%JJQ+nu~&eG)%Q*@In?@}+bxKrU3;QH27v_y5`u z|8dasdt`=cj`>5bf7X2t^1mBdtdI5D*7yonXdrMZjaIj9!zi1@7hV}THpE_9bCJ1< zHe|xuD@t@meHB$gq=jE!Fx?e7I>Yu2mv;A`){v!I_AAxOCtOd94~+ztuz$FMl9VeP m@(pY+Z0pKAC#@TOCYw9?aqZqYPjV=G_O1MdS%`py$^QXdHI=de literal 0 HcmV?d00001 diff --git a/Source/HBIOS/font8x16.asm b/Source/Fonts/font8x16u.asm similarity index 100% rename from Source/HBIOS/font8x16.asm rename to Source/Fonts/font8x16u.asm diff --git a/Source/Fonts/font8x16u.bin b/Source/Fonts/font8x16u.bin new file mode 100644 index 0000000000000000000000000000000000000000..c7ed1f519900c4b24d32109c54d404e60de8c869 GIT binary patch literal 4096 zcmZu!y^7;j6uwNMN;nfpaoIRt0{Z}h1+5^$3n8x%2&u%(qBJ77atsmLnI`Wr50EC0 z5D1uEP-UhZ1miec&31z;?-b@b-}$-Ml9OXw()qdP{~lc%a|+G%@7LFV-CSQc!l|9R zbMDX9)hby%IzXMBD}J8UJRS-+$z%15s^W zmZb^^`{w3G1&o=DCh1}YScnD@Zmd;}lV=k=+r`sN_|tTnrt@7nn#4@7_YIch&ArN- zs}I|~+iyQyiM%-*O&ixtM`wcDoOIj9dko(Q489C+?*YGl2@t$)+oIlW>bPxv#=xMI z319Rh+s}qd99Nu0P+lyrgn@e9Zgvl$T6V$thmF8z z`Brt-Z4~8Egm{G?kMnA^a&bHn+@Toz9v|6R?puJ$yOz`u1pO_12z-8Sj`|@LBQ^B% zAh^#X2U8$zo{et9CjhZH0-->Ej0k;w4cXglHtVIvn^hnqelK`lzC(n| zcV#a4Q$@_OteymSW$~tdQxv7T;PGNBeAvVC+Ym2VVsmN_y(ggh74N#4tZ&;@x7~It z@87myxbXJc_VLl(-Q9V9+de$(Hn%Vs?32l0pW-WP=s5aE+`GFv;sqT40zp3b^~>dK ze5_CNujT_Ru}}M;fLeO#`*{pYG>%u=KafI+ z-I1Rr$)4JM5!TO9jN5r68iIb!FIqF>jB5O7c9;O@#D_eZ4Fw7EEN$&L=&w+Jq&47c z_P-1`wS1^QsLV$TXa|@%g@Zg!bj7-)oO>?Cx2)BBV-OjKmmclYazF1#1z8LAXPi2q zQtiaAr~!I-FF&9<>VON~Pa}joqmV};PmfeZKi`N)GFJD?d>!=q2fPt5!4=C(DkeHE zUS&jr8{{tv!~(E9sAsZRnL&T7%m7C#4seYB0S=|qK6qQi;2?d_H|Q7W>*F-n`nW+E zGYU`l2M!AZoaFob)`WpZ@sK-2pov2`h3C-WsIO0mDeu30+jakF|2G}L;kO}q?=P0u zj8ne){iOZ|KE($lAs92g%tjuk1oZ1kct3wy|6m`Z$Z&i6`GEfF?=PU3xEQ$F&tFf> zf+ZLVPUMAR_NA-SIw*1TTtv#I-VJ<)kp;M>Rad0}GX_}I3I6$a!_Obz4?lnZGW<~E{SQ11XiqlabbJEr_=<~q z;Rg7r{4NUeUe4cny*uIWqR_i47jX6q`g_sSWAIP?e(w2-^Euqpa6c&B-=6yil?n2G zz321&xefB_-zy&v-(MxKd$x>uoecS(OwiAA2lMGDj#~l8J7n_Aw@dH-!y*a#u-1=breR3pD}a0-BT?E= hnuykOjI=`6Ei$2Xy;_jatb>D3L7W~Mh5^YV{{jq=*oOcB literal 0 HcmV?d00001 diff --git a/Source/Fonts/font8x8c.asm b/Source/Fonts/font8x8c.asm new file mode 100644 index 00000000..b53b332d --- /dev/null +++ b/Source/Fonts/font8x8c.asm @@ -0,0 +1,69 @@ + .db $0F, $00, $F1, $F8, $0C, $3C, $3C, $30, $21, $F0, $F0, $F0, $22, $F8, $20 + .db $01, $5C, $21, $F2, $F0, $F0, $05, $F2, $41, $D2, $F2, $FF, $FF, $F8, $20 + .db $70, $F8, $70, $20, $1F, $5F, $F8, $D8, $88, $00, $88, $D8, $F8, $00, $73 + .db $59, $18, $18, $20, $60, $90, $60, $D9, $59, $00, $50, $20, $20, $D8, $27 + .db $81, $18, $A8, $50, $50, $D8, $E2, $4A, $A8, $A8, $F1, $FC, $FC, $38, $10 + .db $30, $70, $F0, $70, $DF, $49, $00, $D3, $43, $CF, $09, $50, $00, $D4, $40 + .db $D8, $FC, $78, $A8, $A8, $68, $28, $28, $00, $44, $53, $20, $CF, $44, $60 + .db $43, $58, $41, $D0, $03, $43, $50, $42, $60, $FA, $20, $10, $18, $FC, $18 + .db $10, $F8, $60, $FC, $60, $07, $FF, $11, $18, $1D, $30, $78, $78, $30, $20 + .db $80, $FB, $D8, $D8, $50, $1B, $0E, $48, $48, $FC, $59, $32, $20, $78, $A0 + .db $78, $24, $F8, $17, $59, $C8, $D0, $20, $58, $98, $D8, $00, $6F, $48, $50 + .db $27, $69, $78, $E8, $6B, $40, $C5, $4B, $10, $81, $41, $48, $0A, $10, $28 + .db $20, $C0, $69, $A8, $E8, $51, $A8, $20, $80, $FD, $20, $F8, $20, $45, $D3 + .db $4F, $70, $93, $05, $61, $99, $50, $04, $08, $C6, $11, $40, $80, $10, $98 + .db $A8, $F8, $51, $C8, $70, $51, $42, $B7, $28, $F8, $08, $88, $3C, $33, $60 + .db $80, $59, $62, $70, $08, $88, $70, $00, $30, $50, $90, $F8, $A5, $3A, $00 + .db $F8, $80, $80, $F0, $8C, $30, $38, $40, $E9, $88, $53, $F8, $08, $86, $41 + .db $D0, $0A, $88, $EC, $22, $29, $78, $0E, $42, $A4, $02, $25, $CA, $52, $60 + .db $00, $9A, $72, $40, $20, $EF, $72, $FC, $00, $C0, $21, $42, $86, $42, $98 + .db $49, $30, $52, $21, $C0, $50, $B8, $B0, $A5, $69, $70, $58, $18, $88, $F8 + .db $88, $F0, $50, $00, $F0, $07, $E8, $70, $29, $F0, $08, $80, $48, $32, $88 + .db $70, $EA, $48, $E8, $F8, $E8, $E0, $2A, $F8, $C3, $29, $F0, $22, $0E, $4A + .db $B8, $88, $20, $44, $C8, $54, $F8, $20, $40, $11, $1C, $08, $F4, $22, $F8 + .db $2F, $90, $A0, $C0, $A0, $90, $09, $80, $42, $C8, $5A, $18, $88, $D8, $A8 + .db $88, $A0, $51, $88, $C8, $10, $52, $98, $88, $48, $EA, $88, $41, $33, $42 + .db $B0, $23, $20, $48, $32, $78, $04, $32, $A0, $90, $0F, $41, $56, $42, $18 + .db $F3, $20, $20, $42, $D1, $45, $90, $81, $E5, $23, $8C, $41, $B7, $29, $50 + .db $00, $9C, $E8, $50, $23, $01, $FF, $41, $58, $61, $A8, $41, $90, $12, $78 + .db $40, $48, $78, $0E, $EA, $80, $81, $FF, $B8, $0A, $08, $4A, $78, $18, $66 + .db $0A, $63, $EC, $3D, $08, $60, $60, $10, $28, $F0, $10, $52, $88, $70, $50 + .db $42, $6D, $02, $6A, $70, $E8, $42, $CB, $61, $A5, $02, $88, $30, $88, $F8 + .db $82, $F2, $FF, $49, $E0, $A5, $41, $CF, $FA, $38, $48, $48, $38, $08, $F0 + .db $B0, $C8, $41, $B4, $E8, $20, $29, $20, $01, $40, $94, $68, $18, $FF, $FB + .db $48, $30, $80, $80, $20, $5F, $04, $42, $90, $48, $50, $07, $43, $84, $45 + .db $D0, $63, $45, $02, $C0, $61, $8E, $41, $AF, $4B, $60, $B0, $2B, $08, $F1 + .db $80, $80, $50, $60, $80, $65, $6A, $60, $4E, $41, $90, $43, $C0, $08, $90 + .db $FC, $29, $68, $43, $0D, $23, $CF, $41, $00, $82, $A1, $E8, $48, $E9, $48 + .db $21, $5F, $4A, $40, $C8, $69, $F8, $FF, $8A, $F8, $68, $EB, $40, $00, $FE + .db $23, $01, $96, $02, $50, $00, $6C, $6D, $03, $F5, $F2, $70, $50, $F8, $70 + .db $00, $FC, $80, $BC, $A0, $AC, $A8, $8D, $FC, $F3, $E0, $1F, $FC, $04, $F4 + .db $14, $D4, $54, $F4, $1A, $12, $D4, $14, $F4, $04, $2A, $FF, $F3, $41, $D5 + .db $1F, $AC, $A0, $BC, $80, $FC, $A8, $F0, $4B, $AC, $C0, $41, $D9, $43, $C8 + .db $4E, $00, $B8, $0C, $80, $FF, $6E, $FC, $96, $0F, $04, $C0, $06, $46, $D1 + .db $23, $CA, $27, $3F, $41, $DC, $43, $C5, $63, $53, $07, $FC, $3B, $74, $20 + .db $40, $08, $6A, $10, $41, $6A, $20, $C8, $63, $68, $22, $E8, $88, $E9, $74 + .db $63, $50, $22, $0F, $8D, $C8, $48, $48, $7C, $76, $64, $43, $22, $CA, $62 + .db $A2, $09, $40, $46, $3B, $46, $14, $70, $88, $90, $ED, $30, $88, $1C, $AC + .db $21, $71, $58, $B8, $2A, $8C, $30, $E6, $9E, $19, $00, $14, $28, $50, $A0 + .db $50, $28, $14, $00, $DA, $02, $3C, $0F, $00, $54, $AA, $0D, $AA, $B0, $1B + .db $B6, $6C, $DA, $EF, $0F, $18, $2C, $0D, $F8, $02, $BF, $09, $6C, $29, $EC + .db $EC, $63, $CB, $24, $08, $FC, $75, $23, $0A, $0C, $CE, $06, $01, $44, $F0 + .db $0E, $EE, $23, $62, $C7, $74, $64, $64, $C1, $A1, $EE, $31, $01, $44, $04 + .db $A5, $E0, $18, $ED, $30, $6F, $30, $54, $26, $4E, $21, $23, $80, $26, $24 + .db $54, $23, $1D, $1F, $D8, $D8, $DC, $D8, $54, $DC, $C0, $A5, $3D, $08, $FC + .db $C0, $DC, $66, $55, $21, $C0, $22, $22, $4E, $85, $7F, $23, $80, $E9, $00 + .db $42, $91, $25, $A6, $EA, $29, $43, $87, $04, $00, $54, $26, $44, $79, $EA + .db $3C, $3F, $00, $3E, $30, $3E, $3D, $44, $7E, $44, $B9, $84, $F0, $86, $DF + .db $38, $43, $54, $05, $21, $8D, $21, $0F, $C0, $F0, $EF, $0C, $20, $04, $B1 + .db $00, $68, $FE, $A8, $82, $70, $E8, $B0, $FA, $3D, $F0, $40, $F0, $90, $80 + .db $80, $8A, $F8, $7F, $91, $48, $00, $EF, $B0, $EA, $40, $A2, $50, $EC, $7C + .db $8A, $00, $E2, $48, $61, $18, $58, $74, $98, $10, $10, $1C, $55, $F8, $2C + .db $10, $38, $44, $38, $10, $58, $30, $CC, $CC, $FC, $CC, $CC, $38, $00, $78 + .db $84, $84, $84, $48, $48, $84, $7B, $28, $40, $43, $28, $44, $61, $5A, $F9 + .db $0E, $6C, $92, $92, $82, $CF, $B3, $58, $68, $E2, $40, $30, $F8, $80, $42 + .db $26, $09, $CC, $FE, $41, $0A, $04, $40, $B4, $A9, $7C, $EE, $1A, $B3, $FE + .db $00, $61, $21, $CF, $A9, $10, $41, $22, $8E, $73, $18, $34, $5B, $65, $6E + .db $F1, $B0, $70, $AB, $FC, $1F, $12, $64, $98, $EB, $54, $00, $38, $9B, $01 + .db $4D, $38, $01, $24, $CE, $89, $0E, $7B, $9B, $0E, $28, $18, $08, $90, $A1 + .db $E0, $3D, $62, $12, $49, $3C, $85, $6F, $00, $E8, $05, $FF, $47, $00, $E8 diff --git a/Source/Fonts/font8x8c.bin b/Source/Fonts/font8x8c.bin new file mode 100644 index 0000000000000000000000000000000000000000..16c0781bfbdc1a2868fbac95a35f3f5b07494dab GIT binary patch literal 1035 zcmV~$ZAcqu007`OX{=|^

4I*5aGQYT^pJ+5HG>Z0{p>r!seHI$}5QVr+@d)?4dF zMrA$4x|?XZcB7>07_ltl+6l{OSsfIXF}ejSja?n2MW_fHXKMBQ7`(GLv*)pcbyV#0 zkq%wgod}xVb8P5(!3O=uMm~?Ah(uV~iLx?~vk08+AP6WZ!s8CWLzt}@B2=EwE;Xs@ zx?y;6Qq;w#jo=ZRDdNFAl{KQO8gaXUza3`$0vn{~cCkDoY(tzd2pkE9P?#?z_L0#j z38fd=EWg*raYjcSjK-r?=%tSI91O;?pr7MwdZOC<)V*eWh~})g8>V_xtyP86e-Ocj zM{kRt7lf|z7VNiDO2T6*YE6r+%pEtvWZywS>gWNJdZ}f(9bu#N zoK;?NdZISw8}t5|HUWHjhJtHn43Kg#qfD%kY;&ae>13iu3=%Subsp%2n&{CniK~;v z9H${|u@?R6(Ve!YX&L&{0R*Yi3T(@XURC0$xKboB>Enc)RpofAoW|Q?GMAI-gG|x| zxw@#OF0R<=cNk(5LgrzEGW3^goWA4X!B-mZGUe%DNTrpsD8)r>IcX?AZN-|R#7S#- zr5+Om+^yqnvdA;1%)O$<+z%zpGAX0sjeO%`g3fGvInIme$uxaigC1z2zK9U{7aS=` zu+zdQ9AC(eG|Yt?%&E{t`uk=f`3kl!NxUGP=oMOMg-v0K;fb&%t_%%^CpB)Fb96RQ z=^m6HLy>0`*m0Szn0e55YS%v-B9BC1NO$8?>V&bmSZP?c%I5=Hd&=g^w=A{!P5RHu zsrX&VQ1#}i6#bY@w}9zlDSz6yVz;DrAARVWsX0O~u=m34g~p))NMXG=-3!yFG=SDqDf@2_75@TKr(Q$*RuOgQW*eXST;egKgjby(Dr+x0r7E0Q#Z&R^odS~5pn z=T`>Dz!DcCf&(!euQ-Md;9kEM50bO9#_X&YL`OzOIBw*en_}Jm(D8q5eU~o}XKn=} zOB9JDrn+c$hqhX%+cySR_uSe6AxGv0PCGB2C0>8`#Od{<_?=N%)*X8m0N!h+x4fpR d2cOx_U9-6fOqpD)?<#BbUFZi|LH35EL*76bJ|~5GW7`I1q49Q)FnUc@tpt zCZNF3z~F%Z&6|M!0hu=f1qW`Le&3$#X*wTHW+@a+9cuG))Zg=2+h&5*4+DY%Wf}A_?WX<9 z8=)}i>4+K5KQb6}0pemr`lhbnqykM*t{>VRSQi?hv}BzJj|TVx$Kdm_ z%o7@H_lS=Tm)c-Hky(YxHNJYZEL!G7L6ppxtk z_D4ATdhxV;gQttHXPkQF52_EF&o+Qgcu@Q0@=5KEeHKtiVmh<%`%9drqqaSosVP6O zQd6de_m9IAao=%tYxXaw?h7bd?IU^JFVOwew|C4$l|WhDLiZ5~B3~xRgk9G!-6eLV z>#rZNt2mXsVdP?7ZL0Z&@PnZ&|Bkkr_byM_&D}63|7DkUX2rJP{Hcuobn@( z#k>ENc{yj{Zf^MH^)TYmp8On6gtBo5)71mhf8QaL*wB-!37R7E(+^e423G;^BoVvQ|JHy literal 0 HcmV?d00001 diff --git a/Source/HBIOS/font_lo.asm b/Source/Fonts/font_lo.asm similarity index 100% rename from Source/HBIOS/font_lo.asm rename to Source/Fonts/font_lo.asm diff --git a/Source/Fonts/fonts.txt b/Source/Fonts/fonts.txt new file mode 100644 index 00000000..fc697665 --- /dev/null +++ b/Source/Fonts/fonts.txt @@ -0,0 +1,51 @@ +Font files for ROMWBW. + +Compressed fonts can be created using lzsa utility. + +Compress using the command line compressor by Emmanuel Marty +The compression is done as follows: + +lzsa.exe -f2 -r + +where option -f2 selects lzsa version 2 compression. +where option -r asks for the generation of raw (frame-less) data. + +Use of compressed fonts in ROMWBW HBIOS is done through the use of the USEZLSA2 equate. + +Use the following in you customer configuration to turn on font compression: + +USEZLSA2 .SET TRUE + +Original and compresses fonts in this directory: + + 6,692 font8x11c.asm ; 8x11 compressed font in assembly format + 1,254 font8x11c.bin ; 8x11 compressed font in binary format +15,731 font8x11u.asm ; 8x11 uncompressed font in assembly format + 2,816 font8x11u.bin ; 8x11 uncompressed font in binary format + + 7,827 font8x16c.asm ; 8x16 compressed font in assembly format + 1,467 font8x16c.bin ; 8x16 compressed font in binary format +17,920 font8x16u.asm ; 8x16 uncompressed font in assembly format + 4,096 font8x16u.bin ; 8x16 uncompressed font in binary format + + 5,520 font8x8c.asm ; 8x8 compressed font in assembly format + 1,035 font8x8c.bin ; 8x8 compressed font in binary format +14,742 font8x8u.asm ; 8x8 uncompressed font in assembly format + 2,048 font8x8u.bin ; 8x8 uncompressed font in binary format + +HxD hex editor was used to export the compressed bin files to a Pascal .pas file and then Notepad++ was used to reformat in asm format. +Notepad++ search/replace and column mode can be very efficient for reformatting. +Various bin2asm utilities are around but I could not find one that worked. + +Original compression source code and files available here: + +Latest github code: + https://github.com/emmanuel-marty/lzsa +Implementation example (older version): + https://cpcrulez.fr/applications_tools_cruncher_LZSA2_Z80.htm +x86 lzsa compressor application: + http://www.pouet.net/prod.php?which=81573 + + + + diff --git a/Source/Fonts/lzsa.exe b/Source/Fonts/lzsa.exe new file mode 100644 index 0000000000000000000000000000000000000000..74214d1357960ccebd1c17d0f381079f8a7a8641 GIT binary patch literal 197120 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

3rIODGs|aQ!jk}*BhTb%IR8e`wVbEJqQdXHrm(P z8N?LSRvKz!BYcbN?7%vQLxFazv&qlsTkCD`(s^pRPL8Zoj6LfVu3()4ZCNK%N25<| z2ZN`MF`r&&EAF+{X(CsYrp_8^dfPJZ20T$L*Lqj{*rrocduDUmg=r??vv+7G9t0PC zDbP#YR$~G!qcHlE5pfy9Tg9bWwoMqPv}4LtD8`nF-eEw!P<@BnpuVk{VJbdjg{(i7 z+Rk#DbF*h|=m&1-2W}>%v3;$R&QXiw#df!4S<@Kn@dSKSKGt%Z%d%rxfmX~Z73GR) z$DE9^Uj^DTOJ5VyYQm@=##k39i_)U>;SaPu4a$?#Z@X=IjMRo5xW~1j9?5f5=B>6S zYonE+E8bmpJqk88(tacDy*PEN~m+h>3y>k=riE?l70CM`W#N;3jJ z*R_v=_1WRY{4zT*Wx6+0#9<(e$C`}<%vW-nmfJoUw^9RpGjIGTos-GIsHn9ySnJT! zHBy?@$Y)ojHPUiITFy*^_j}gK=nryQmfK=o!PgxI+e+nu@6;mhuTan-xo#}BITu^z zf}|@R*OrW&sJb<52ZE7jm^2{$eyTkViRhd z+34!_Y)Fv{>$^kAI%m2v_jEU=NbM`ek6wxQ#dHkSPnN)k2cP2@4{PSp zMugRx!wx$!+U~Id>r~8P$UAMn z3pG<1^44~{)iKyl=V?h7+pW&c@XiJ2W~Ut)!}%EU#>9GVlW)4Jr8xg!zfXV@>k{L` zx`caUT<~ID8oW(jMvq!IgHlKR1}?=oCC2YCC!<5HG$V^`f%K}j;Tjp&hQ|-1Jmk|& z7|RZ~7sJvJexAY^`V+z_-lHzo-wMatdEt7}3FD7-pcB)VVa$be=Ho54IlQm3b+giS?dQb$HNiLW z4Ml#3?U+Z5EpwLV>#Fw{`w*&4|Naiar&{G0qunxXyg_Bj+9Cf)nOu1+F2jk**4h-d02Xk4a^3y$v6yc^q*W zj$>`&OYIgy?Pk8hYH2s4x!tY^Omz_JzMxml=V-N!Hf|F~tn*9aHK5j0jePqkm`{@< z^FV)efiK&HBi~=3-$GZ+X|~#?d|UM2Ht{*TcFeAuG>^7wm(zGJbXbAw8#~mWEi;_P znm%ZJjZ`<5+Z?V1dtvPDwY5#Vc+mB{l6fSzxo#&v7>sLl^aaiu*BWCPvlr)Bd(5#4 z<`U+pGyKV@SF`#{7+){riyH8Lo7ndX?xR5FZPBL&TWL52#}r71v*(z76i8!5pfhtw zw$*V8YoEV)=_VtOG>71t&UrB2hj`jB z&%pi6ldER76i3W6<{w(#PZNJe2fy;?=HB0Z_oUaAB}ZZTsvmv#cVm9bZ#*| z)d6Jh%rR%=-<+>E8ZkdY6OpfDAZJ5!1N_+DirEjg!TTFJ4}^Z_hdJJFu*G?-tXVsp z$4bjdd6MhcT-UB*z8#Qn)VEyMl!xvQu-+G1fOFEzmBuh!C($*JIbUOO^J^OPvK)uA zh{JVMu#ULq?1=Y29dTU8!5*5&rIC;0KZ3I5G<*UbS+_tBt8ScwRqGxsjkO_4lwak< zR58v>6%Hc4YOwj8k%!JA4_a3TD;l%a=KT7gJ;y-ibG6<76861rxu3=oTr>Ejf_U%a z1Ap`h^E8>$>+is^3DC#p@{=!z!T+d^$?wFmsJ(cM<-1O)9$NeM_edwjkz?P=X{~_$ zw#Bwj4?E@-(*y5Mx?@gIF-Q0f%>yR1jd&i^wGZmr2XmJX`l!!fPvhh2+uN06-5_(D zxq2ut=C()QbTaqNmj1R($*}{_A99{X!2S}l^Ok%<^uIkQFZmG8YrZDt@Z;s~;dqY# zpK>4UVx;%l(tQYL+=p<&eF#V99VXw0F!#-^wmP5ANC$awL0@&*>L^|hgrIy<*>h0# zY?OUhOWBRqC_BAhMcF%}?46N^&M155!M;XLEEmd#Fb{-z48}bV>NgnwrFy}+EPQzZ z>Ld@ujv`b6s$Klj@3V93`%A+OsZ?`n*Q07u2(R znE0-Rt}QfNCnwe^mEK!B;Jr28U&F^b4fZj0FnSs!UzYMI)gS6E9Ce32-co;J-8-Vr z(1(*9wLYTH!WUBE3wWO*`-14R)M|DkI2H?yLOJum--9?-0?syR9f_ zM%Om!szN#T1oWx7Y@!e09#puq)IYYuheUr>Fo!VACGz+p&Nu&{?0u$lEFP*em%XC{ z#zZI95q+TJ;0`8FqkFBZ!KI~skImp%Gt^*?-zJYgg>mc#WbY&QLAtkvdu@I(c>f&k ziSge9_jlZwrxE4$R4`BYfhYXH6MevQu&dG43-4EPZm+@eT@HhT)?BY$=Azyq^SPz* z%ZvH!X+08iKB&W})?xI%kaNZTj;L05CB*9dQWe7nP7cbzm|xu88THll8Q z&?j)cW^|S3CUbtaB%z(5ZsxMm``vZsJ61R!jWbezqW217f0D+Eei$qIVyy6Q87tIq z7ID1Vit&o(&19>`_UjcojEzu>uZnY8>#<@G_D}jZ;+#ajX~z9$>FmS)W0r9&e9K%1 zVQCyY37LKJasBJiGF&?^|M&aYrPUmBd)}g*J2;?iI`>|5|(Po(1sAN1Uc2jTp24;}ZyeN#PfU)`PRO}wv4b;Z$`M}4zxUlPyljB{fi zK>D4Key1?$+&(=qe+G_V?wne>&n0@eR7SWBa~1tXx_4#vm*fJD;YnjQO71g0Jsp@= zxGVa+l6fURY5}UJAZo*YcF1oN+PRVWawcXTH+6Q%GtC7kn@h6Pw;tzv19o$47-aTy z={mS&KGKQv7S1itSGDcM_IE%#)7a#Iwzfz8!4AXNB-Sz*)G}_iw_@!FJE+Bb)3`?P#`uWOMzlTyoQHNn z`*lS7b$}nZ4{5(gyth}2_xrMc0dn0-_XN!O8+U+Xb0PEG*mi#T9rH26g>|d{4k)+oucN7s_O~7u(_|bepLw#!&yJ z7nthwdgh(_B0igV3HOIKFhf1ZIyP`DLr%+bTbwV^c9<(oxbLd#N@F7KOF5&j*r2bN zOz;~Ve_TG+a$CG#pCgSCAt<|az2YFf_Z9sD@4@kY)C1$I#~%0v&AIC+9$q94lM**I=5*AhoYV@%=vfUQ7CJI8S?ywI2(b&)H4hFG2kLS2o$` z^T?12dd!PH6Q-93#lb5;<`WmC?J4s10-5PDUzJ%T^Qg?TGXIq6@S~KDO6D+`8kq}a zu9W$zOuftsnFnQ_kok+u2Qs~WlFq}+oFX$q=0ce|na|72l9?m(1DOVyXJ!5-^QKIv z3)1AYSt`^p?CGgRhNG8f8R zDf1PXJ7pHh{6OXjnb%}m$$sD_vxm&VGRMkXAX9WA{263DGc7iGg(fyxT%Cr81SZnr zF|4^=!PI}-H;$eKh)re+ZhUM)Y-;R8EEyZarcMZZV#2f`g9Bm`5*Vwn4ogiK7pY54 zOO73vgy`w1Y%hgPOG;XjrkjYR;Ph|Zes8(w9S)= zaagvN5F0ZgJvvrL(Qzg^F$=Sq6`T4Gce_|kicKAtmYf`$n5s!mipKL5OlK1wn~XJT zSoLQPV!C#dQ{;`L$YSB`CMV(<7p(1H89Qqlp1%miA#5?uJ3cllZPB9GWb^rsh-su^^=6uGa^k|I zIczC~OizkQONb2>t6>g4Z=!mVDriDFn@usMMW&=qpvP%2Ls6|*Z1>?%y|KyT=rNn< z$b?z3VwL0FZo6r*k;`KL7H%uIXWJb!ElSa5-jm0^gT=Bujxa4gDj5&?uskXcHOQEl7&HSu?<{FIEh#ca-ajE7 zH89>fEHXYNw#6fG>)bjFl}c3(M{b7{sOF!-V<}XP^!Nn)26vjJ`i+sQ5_f@Z=Ac?c z*JW{!YMPRH0!swP;B%06(`l*eSUhMGo-_vwugAqjCbJ)H%w~8}%YHV8n~)yg;%f7$l}HHP!3przd8m(z6%X z`&PSY;wb&G;)-*$%q5F+P<{n5#jsc@&ErySQ+naZ5zV%QTHCg?O{SQ`2Wyd^$n915Vp>SeZx(ws42I-PBwcy3&V>PQ^^>0O7q3~6PnyXFs#<5*{QR#uwC%Pz+>)Hia_c|OwnDm;*Z=Gnr7O+i z|M8S59VZB%p#4iPs#kiM56WN;4)_%Pzx|8*H(pk4UhU+Ux!{^v;b!yyikk8NvE!>6 ztU}1=OfoIoh%#ikE!tzG_+~#flj2(1wEfRsHBC}F|0vFX_5QZ`Qr>xdely0&;S(fg zjCg#!w&}Iq);3DV)ynlUu5E<>^lj;zlpgn2I+f}lzW&p*@?Vl*WK=Ys=2;XMzj#T) z(!?a)vzW}&mMu?TfmK-a8Z&m>_z4pyg-)I_b=veNW@u)H%?f{V_MC{hPf7d#-}-Cz z8~Ro(%bex4!+Pm;E7o|l$S zlDYQVx}S`<@&505^O1jx@-GHFu182=QbPZ*Td4lU6aDvy{@=Wt6v^YZzjHfrp8Jn- zjr=N;)9o*(`>!$ptxtL&UlS4O)pibTyPdYJ3m*ap!29EIic67<}}x$YRJ5r?SmfhC!+iSI(|VOu^ELC;Do>4|6L5KdeV z8DM9D7keQ;uq~f;pl2YIeUYDocy0-t40*%Wfama3jz4T8IC=!0Wq}<68b%>Mu!*;M zDNTB^aQY;ym#1Sv^YaQs^K%Nsucu&XEaDLDrsCNs*u=e%iP8kk&mRzqOa|QIg!R8rwb`0Uf{ZImI19)pD@&nuQxd6*&2IyIWy-+pc5Uplm-7IY4Ea*IJ zEqF8*Ycye7uK%a!0x}jMZw4!o8)1)ztp~3_(_ovxq&Vaaw&i;N7Z7HGQYj8t4`sr( zT)$82`Xlg6_5p+wX+8dV*p}<^X}$h)kn)g~$m6j6VOy@vr#1S$QgCMp;lx2u1Z)j> z0g8idxz?W6;H%RZ+lFu=t)(x5ZMmkN*4jHRM_nPDC_q5H|4yG#<9)T6W8I?v`udX)Sz*46OM^d}0@<1~zdxR0lf*d>^89@5Gys z2{!TLwbI&lqIqq)<+^oR&#qjLddIqOVi6Pro45x`g-!e#S`XWD%{r}Jr*+|agj=o; zw_H1Jxvt!D%{i?_UzdsZ(O9QV+yJRy6JLeYu!*lhA+U+1kOnsK9HfO!w0#+V1zQPb zZ$lYiSApjB;g;*aX&t!jcGM5z5NjdD5tIwO4f(+)I_$uDU)aQs5QVG2*WO0k!PbK> z?3BjXEN}|eZqG-!<(h5F_1v_sd+#o+%|;yJ{@rL(*hFtV#tPUfa3@4-w}~I*V2Lhl z;*XHxD8?u-p%BNwwp@cvYqJNGp+6#=_y(k)EN{GmO*;hmTReLjrH9< z7%LD?ba@}o0l-#*S3g3%!8U>V{m2j271x3t51{Q}Tds?y_0o0+F;*a)=myP)P4t5j zC_ZRj^GvKciaa5lIP@6CU)V%i$6QPCLGyZM;)K(vAA}P%kVg&bA3O;4fNi-Jnbs(e z_#W{PPMiUyQ+&|=C-@I+CD`dA$_85n&V;IA8^DW@0rnN}ol8>qPOuC*jBw%+*{%V{ zU%|M6aN=x;;zWS2LX;-)>7SA3FEI9kDG!0nJ4_6{)i0q*s~P6cm4bgpJF@*(;-!ehV_P#)}B z(8xHp9yaj@j$>J{uYt3yIOg#cd;=_i0$~?{UGVw20=5d=Zo{$bh`$4Lw&Pe0Y=5u_ z>*u#oeDDbLD(o6C32T+ZVP}DrSoc{5yBZ94=9m#SaWzEsp8>uJQ9bVfKf>qf_Ymhe z*xN-44*@@dXuhrn+bN}RCD;T79Y;HY!(CAp*dgF*sQ=eUpXkOhCG7d&EvN_VW^fyx zT_l_6?SXZbIF`5#qWlnhcyeOh65YHwb{=s&z_k$7`FhZ<1ImtY1=zudW2-0~a05i? zWP-lFlI;g>?x`PZUZY+h>!3pFsiF`t{AXgcPSlf@B&2fji9cF zWE1Z}RJX*FJz*oA)8H4qP)=Nj9|!03=2$Aib>JV62K8V92V%|geAsGm8zklj9M~7> z!dKPcdr&yyG=X*jSXTsF0S<>UU_;j6%F5FJarI268wI9I@)!#H*twm*0mYKDCe^cpVZ!5bVb+oQo$ z*(Sar+j`IoYn{pWyulcV%B};?k3e5IVI{KXNGU)5;5LZzQv*7UlFtQBlI>9NMcK{- z7hzp=DAI`oH$hZCWnd!|f$%2qX{>{$^2UL$LlkEx_yd%QICbE10euQ~Iv6$v@loCw za2J$;a3knHmSgF#M}yBml#UkE$u{v2MCUpVJ~d9V*Mp_dc^q2?I*ymZoxn(l(#Zn% zL)707fE^~H-Vk2}9)tY8L7jlVKosX17%)jXHXS?)iS-6vlf#LMP$>>E5(-2*Mc~%S zlK*T22Tnt~AY2U|hr(eK?Wdz%VLO4Vq4lscz^+fAKf>+-{shr^jiBue`CMQqMD;)n z(qLReeBw!neBcWB%}n?e!fU~=!Z6O%;=G{UEUc?VxB?7?D1BnulgI<&q=RV@97`Y@ z+%gw!13L@6@ig)eyBXZ|j5H<}fwo#HKMK$(l4Cm&hu8#Beu&$mrT$3#5u*GX!Ea*V z8;D;E_KcPC;}5Qu?F{fc*{%aa7D{OncR-YXqH>W`=fsB)rOD#(Yyd=ghy!;+G?(eY zp7E$Vg!_Z>5as6p_&Y>Ca~GT_VS>z$T_8!6#0l-oOu_ z!w4s0g*aPcy$l*fH>E{ocE=%D-ZPfK+2mRI90Z%fwT9*50Fj-co?GoLiGJm zss}%?$44kH;t;>9Mt#AK*~hW7`=z{Df6TFw5FHx>IvtSCMO+2x5TAGjqISFvuKh$h zc0H(vsNTxJkb_bVEpSO-!1 z#66$m`0p{cfLjm4S7C1hdmWRm&HTYZU*Nn54+L*Ot6(>S8@`nMITPFuiE|=YdV*sr z#3=(EzmdxhE`_L%=)mE%h>tiy;9`jKlK?hB;y4f1pTxBg;@ksIoRZ303-_5)+!%3k7Kb;nD{58gKYxmnb5ak&j&9< zlpo7=#I(NnW9U5M5D!4jur1dq)B5Efn&86-CpJL`U=z3Az}Q{~{|5)(L|=d%2u_8l z9%8_lTktc46W@g>To1n4EM5EU0A24$*R&qs3@8ZkHJ}cn_?ci4M0HMVl5OJnyHdFF z9?HUD48XAmz$a`_Zb}C{15JZ{9&Cgt%_h*sRLp*ekj{cc2+FM9@ii^HV?FS zz_mPVC-4YF^;rY{<%nYuu5?0Ns17z!50NhshdE=sLAVCgLMGUH@EAnptpQIcaZT|h z#%J&WMES%Q7qLzdcY$82dK{k<|dC;OS6KTylm66yBYttzXtx?y=Hv2bU=rf1|WweeeJu|6(Ot`%@ zJ_A8y`i`;HT7 zSiu?Gdqr$YZ-IAq7)@Ubyfg~m+l~YhQ-XV^B`1zd!FQ4_jZ7IJeSK}x!qfry>d29i zDN6&E4eG7J7ox^5#MigZwmch>QmIC#Ca0yO(&9lmwQm1LYD2n-$KgnPNp2d}jjoWl z5hAXW#?s#yO>+D)Ec06wo6@q=a`%LE97=0Zr^PPA_p~O^-{9VnDU%bI;alC4d#lpo z$3)Xo<>1~6@lEWpy;TES(iuJQAD?CPz*c!0J+P&4IDGU#bG>2X@6GY|5Ec3v+AShS zo1@Fg%*o2xk)zKk%Bjk!$*Ik$%VD{STxG6zt}53*SCbc!r_GDY)8(b-W#nb%W##S2 z)8`fCRpnLZ8S-lKYV+#yjCt4cOnJ?DEMJkY%=gY$<@@KW^Mmq3@LfR2F&{ zstWxJ)rCQYA%&rZn!<=eZDCxYt}wkYqflR2RcWZKsjRK6t29<#t29+MSE722>;aeTF_$ugdYyQRf8Zgye+gXmTP@b8)D<^qh=V^;eyf zQJh(vRlK8EUtCmNRa{+cD6T24Ev_pz7GEni6*m{N5=Du!#JfaQ;$NaJ2`ULG2`$l- zM3iVt;!1QS=_MH@nI%~zJ4*B=MI}`w)g^|Knv&WQW68A=Q%Q3PD^-*#OT9}~rT(Sr z(xB3i($G>(X+){EG_F)vnqHbwnpv7vx}#KIT2xw9T3u==ttqW7tt&N_UMn?~HkYz8 zMVYe9yG&K)U#2b#Dnp?|FqTsvmg_zpb-V-hTaCJ{L%lW^C{UyRsLfE+WE^TSvv5aY zQDJpqO<`T(wZi5?MUi)re^F3TXi-E_Tv2*aX3>tKqN3`enxeX*YemgPiem3#|KgzH z(Bg>VxZ-rw&kod0HR`1fb<$j{KyCP=CPGmQaj1bzl)eZhuPLcRshdj_D6c=t8j5np zp^TX*UlGbygK}L%nG`6GKgtqX7Eu;gmR^=wwxg`5th%hGtgh@@S#z19+`HVrJg7Xh zJfb|VJiR=#d`Edvd3AYBd0qLn^5$|yg?EL2MNma(MMOnhMS4YM#g2-iit37*in@wx z70nfjO7BYl%Am^7%81Ii%Jj<2${m$OmDTW~I(U%iKN`%zqW^fqcY^exqUWT;Yj)_1 z^ws(reVzWAzFDux_RjXt4$2PAj>wM7PS4KF-jQ9DU7cN%U6*|=yE$8t;|(thf`>)G zyVBuVJJ2hu(JSk)4yZXtfj;S<8q~bw=VZuZgZ|8&pXdQ zFDNe*eKrpLH4}ZcC=VIaVopXI*XoUWlb&TOvsKyZ?2v3twl-UrospfDtEJvB6g0F|b&uM(f!1$oY*kHieV9YULbWmbsQ0Io^YI3!?y4;N1tXzF=Rjwho zHrJSI%4K=VJXM}LFCr9eJ%_AtqOgu7X8eG zKBh$fQkR94Y09)^y0VP2tTKIBRhglzw#-;&Dr4o!a#gvyJfvJxt}WM&vUk z4du1v#&T0Rt58;`D%2Gr6`Bfdg{~r_BCA4QQB`56sI4$om@4pdeN`C0(X62;UtAFk q6Rt}EHGD%0kEnq+DBuYZ@~BNCb#uYvMxC}}4ifp_*Z=Qp;Qs)F(#Y5V literal 0 HcmV?d00001 diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index d117c412..da4620fd 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -10,6 +10,7 @@ ; - IMPLEMENT SET CURSOR STYLE (VDASCS) FUNCTION ; - IMPLEMENT ALTERNATE DISPLAY MODES? ; - IMPLEMENT DYNAMIC READ/WRITE OF CHARACTER BITMAP DATA? +; - IMPLEMENT TIMEOUT ON PROBE ; ;====================================================================== ; CVDU DRIVER - CONSTANTS @@ -58,12 +59,12 @@ CVDU_INIT1: ; ADD OURSELVES TO VDA DISPATCH TABLE LD BC,CVDU_FNTBL ; BC := FUNCTION TABLE ADDRESS - LD DE,CVDU_IDAT ; DE := VGA INSTANCE DATA PTR + LD DE,CVDU_IDAT ; DE := CVDU INSTANCE DATA PTR CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED ; INITIALIZE EMULATION LD C,A ; C := ASSIGNED VIDEO DEVICE NUM - LD DE,VGA_FNTBL ; DE := FUNCTION TABLE ADDRESS + LD DE,CVDU_FNTBL ; DE := FUNCTION TABLE ADDRESS LD HL,CVDU_IDAT ; HL := CVDU INSTANCE DATA PTR CALL TERM_ATTACH ; DO IT @@ -271,6 +272,7 @@ CVDU_RDX: ; ON RETURN, ZF SET INDICATES HARDWARE FOUND ; CVDU_PROBE: + CALL SPK_BEEP ; WRITE TEST PATTERN $A5 $5A TO START OF VRAM LD HL,0 ; POINT TO FIRST BYTE OF VRAM LD C,18 ; ADDRESS REGISTER PAIR @@ -281,7 +283,7 @@ CVDU_PROBE: CALL CVDU_WR ; WRITE VALUE TO LOC 0, ADR PTR INCREMENTS CPL ; INVERT TEST VALUE CALL CVDU_WR ; WRITE INVERTED VALUE TO LOC 1 - + CALL SPK_BEEP ; READ TEST PATTERN BACK TO CONFIRM HARDWARE EXISTS LD HL,0 ; POINT TO FIRST BYTE OF VRAM LD C,18 ; ADDRESS REGISTER PAIR @@ -360,7 +362,22 @@ CVDU_LOADFONT: LD C,18 ; UPDATE ADDRESS REGISTER PAIR CALL CVDU_WRX ; DO IT - LD HL,CVDU_FONT ; POINTER TO FONT DATA +#IF USEZLSA2 + LD (CVDU_STACK),SP ; SAVE STACK + LD HL,(CVDU_STACK) ; AND SHIFT IT + LD DE,$2000 ; DOWN 4KB TO + CCF ; CREATE A + SBC HL,DE ; DECOMPRESSION BUFFER + LD SP,HL ; HL POINTS TO BUFFER + EX DE,HL ; START OF STACK BUFFER + PUSH DE ; SAVE IT + LD HL,CVDU_FONT ; START OF FONT DATA + CALL DLZSA2 ; DECOMPRESS TO DE + POP HL ; RECALL STACK BUFFER POSITION +#ELSE + LD HL,CVDU_FONT ; START OF FONT DATA +#ENDIF + LD DE,$2000 ; LENGTH OF FONT DATA LD C,31 ; DATA REGISTER CVDU_LOADFONT1: @@ -371,7 +388,15 @@ CVDU_LOADFONT1: LD A,D ; CHECK DE... OR E ; FOR COUNTER EXHAUSTED JR NZ,CVDU_LOADFONT1 ; LOOP TILL DONE + +#IF USEZLSA2 + LD HL,(CVDU_STACK) ; ERASE DECOMPRESS BUFFER + LD SP,HL ; BY RESTORING THE STACK + RET ; DONE +CVDU_STACK .DW 0 +#ELSE RET +#ENDIF ; ;---------------------------------------------------------------------- ; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E diff --git a/Source/HBIOS/font8x11c.asm b/Source/HBIOS/font8x11c.asm new file mode 100644 index 00000000..be728ee0 --- /dev/null +++ b/Source/HBIOS/font8x11c.asm @@ -0,0 +1,85 @@ + .db $1A, $6F, $7E, $C3, $99, $F3, $E7, $FF, $E7, $7E, $00, $1A, $2B, $7F, $E6 + .db $66, $66, $C3, $1A, $4A, $0C, $18, $FC, $30, $FC, $60, $C0, $FA, $4B, $18 + .db $30, $60, $30, $18, $00, $7C, $00, $01, $90, $1B, $00, $F8, $00, $FB, $E9 + .db $3C, $23, $1A, $4A, $10, $38, $7C, $FE, $7C, $38, $10, $FD, $61, $C3, $C6 + .db $CC, $D8, $36, $6E, $D6, $BF, $06, $58, $6B, $C6, $8C, $0F, $B3, $F9, $6F + .db $E1, $33, $66, $34, $EA, $36, $6A, $DF, $82, $01, $04, $D0, $1F, $00, $6C + .db $00, $F6, $11, $0C, $78, $A5, $F9, $0E, $1B, $18, $3C, $18, $18, $D8, $70 + .db $40, $D6, $EB, $7E, $05, $A1, $EC, $7E, $48, $00, $9E, $40, $7C, $F2, $DB + .db $9B, $5F, $F1, $5B, $55, $51, $BB, $36, $54, $DB, $DB, $B8, $48, $18, $59 + .db $0C, $0C, $00, $B9, $01, $44, $CA, $56, $CC, $66, $D8, $FB, $08, $66, $66 + .db $CC, $27, $57, $47, $DA, $4B, $18, $BC, $1B, $5A, $C6, $7C, $7E, $C0, $CE + .db $C6, $7E, $00, $5A, $2F, $00, $76, $CC, $7C, $0C, $02, $40, $AD, $10, $78 + .db $30, $4C, $78, $8A, $0E, $70, $A4, $3B, $78, $C4, $70, $38, $8C, $78, $0C + .db $AB, $10, $7C, $C0, $0B, $F8, $AF, $06, $42, $C9, $E9, $78, $20, $D5, $02 + .db $FA, $0A, $6C, $6C, $28, $04, $29, $FE, $F2, $6B, $6C, $B6, $FB, $7C, $D0 + .db $7C, $16, $7C, $E8, $00, $60, $87, $52, $66, $C6, $6B, $FB, $43, $38, $6C + .db $38, $76, $DC, $CC, $76, $44, $32, $65, $69, $69, $60, $67, $65, $69, $01 + .db $4C, $60, $B2, $50, $38, $FE, $D0, $45, $91, $F1, $30, $FC, $03, $F4, $47 + .db $C4, $4F, $FC, $6C, $45, $03, $51, $06, $0C, $B1, $53, $C0, $80, $46, $18 + .db $0E, $C6, $C6, $D6, $2B, $7C, $22, $42, $25, $53, $30, $FC, $24, $1F, $CC + .db $0C, $38, $60, $CC, $A0, $53, $0C, $CC, $03, $5B, $45, $1C, $3C, $6C, $CC + .db $FE, $0C, $1E, $AB, $48, $C0, $11, $25, $30, $38, $60, $AA, $0C, $CC, $51 + .db $FC, $CC, $A7, $44, $7B, $08, $78, $6E, $02, $05, $A4, $28, $7C, $4D, $70 + .db $80, $22, $EA, $07, $27, $4C, $60, $24, $E9, $C0, $45, $51, $46, $4F, $21 + .db $42, $59, $45, $71, $6D, $18, $B6, $7C, $4E, $7C, $C6, $DE, $DE, $DC, $C0 + .db $78, $D7, $40, $44, $E8, $FE, $62, $1B, $E8, $FC, $08, $7C, $43, $45, $FA + .db $46, $3C, $66, $C0, $C0, $C0, $66, $3C, $30, $F8, $6C, $93, $66, $6C, $F4 + .db $40, $1F, $FE, $62, $68, $78, $68, $62, $FE, $A0, $55, $60, $F0, $D4, $60 + .db $11, $F3, $66, $3E, $42, $B4, $43, $B3, $62, $13, $66, $11, $10, $1E, $0C + .db $F4, $45, $24, $FA, $E6, $66, $6C, $78, $6C, $66, $E6, $69, $F0, $75, $53 + .db $62, $66, $B3, $79, $1A, $C6, $EE, $FE, $FE, $C0, $03, $F8, $15, $E6, $F6 + .db $DE, $CE, $65, $AB, $E9, $C6, $46, $66, $49, $60, $92, $26, $FD, $02, $CE + .db $7C, $0E, $45, $B3, $7D, $78, $CC, $E0, $78, $1C, $C1, $4F, $B4, $87, $0A + .db $4D, $C6, $BE, $06, $F5, $6C, $38, $FC, $1F, $D6, $D6, $FE, $6C, $4A, $6C + .db $00, $62, $95, $E9, $CC, $85, $61, $FB, $4F, $FE, $CC, $98, $30, $62, $C6 + .db $FE, $0A, $60, $23, $55, $6A, $C0, $B5, $33, $06, $02, $0A, $18, $F5, $23 + .db $69, $10, $C0, $A7, $F5, $6C, $6A, $FE, $6A, $66, $78, $43, $D2, $94, $0C + .db $7C, $F5, $77, $48, $E0, $3D, $61, $A0, $2D, $DC, $95, $CC, $C0, $F0, $F0 + .db $29, $0C, $36, $CC, $76, $5F, $6E, $FC, $69, $53, $60, $F0, $0E, $62, $04 + .db $EA, $76, $4B, $F8, $BE, $F0, $6C, $76, $6B, $E6, $07, $A7, $BC, $1F, $48 + .db $0C, $BC, $66, $9F, $F2, $E0, $60, $43, $DF, $6D, $70, $7F, $03, $F8, $0A + .db $EC, $FE, $D6, $04, $11, $DC, $66, $F5, $46, $7C, $E9, $CC, $26, $4A, $7C + .db $91, $46, $92, $2C, $1E, $5F, $4C, $76, $7C, $A6, $63, $43, $0E, $A2, $FF + .db $DE, $B6, $36, $1C, $04, $47, $45, $0A, $63, $A0, $04, $63, $A0, $24, $5F + .db $63, $9F, $45, $D4, $45, $3A, $62, $46, $60, $9F, $53, $64, $FC, $03, $A0 + .db $90, $E8, $E0, $43, $B3, $0D, $18, $FA, $01, $01, $63, $02, $43, $05, $63 + .db $D1, $86, $E0, $A1, $10, $3C, $3C, $64, $74, $5A, $2A, $1C, $36, $63, $7F + .db $63, $9F, $F1, $03, $06, $53, $FE, $C6, $66, $48, $28, $5A, $05, $F7, $76 + .db $DC, $0B, $56, $6C, $00, $DF, $01, $07, $A0, $9E, $4F, $3F, $6D, $CC, $FF + .db $CC, $CD, $CF, $14, $BB, $1E, $66, $3C, $06, $3C, $54, $BC, $2E, $FE, $62 + .db $78, $62, $FE, $33, $07, $A0, $F3, $10, $28, $44, $B3, $04, $AF, $43, $D4 + .db $8E, $00, $CF, $0F, $18, $A1, $F7, $20, $50, $0E, $8C, $CC, $0F, $A5, $FF + .db $BC, $E9, $F6, $45, $66, $82, $1D, $45, $BE, $8D, $7C, $EA, $CA, $14, $0C + .db $18, $46, $3A, $F5, $C6, $7C, $06, $A0, $29, $6C, $23, $59, $03, $86, $E4 + .db $52, $5D, $3D, $67, $6E, $7E, $76, $E6, $BC, $B3, $EF, $C6, $11, $EF, $C6 + .db $4F, $C6, $BE, $0F, $EE, $C6, $92, $18, $30, $13, $AC, $78, $FF, $7A, $6A + .db $7C, $07, $85, $F2, $FA, $1F, $D8, $CC, $C6, $CC, $35, $AA, $55, $82, $FE + .db $98, $AA, $30, $7D, $AC, $00, $E0, $95, $F8, $D6, $D0, $D6, $83, $FE, $61 + .db $E8, $64, $84, $D5, $FA, $4D, $1E, $31, $FC, $60, $F8, $33, $1E, $41, $AA + .db $A1, $FE, $43, $D4, $E8, $28, $86, $F5, $CF, $70, $3E, $61, $9E, $60, $A0 + .db $37, $86, $7C, $55, $1A, $3C, $42, $99, $A1, $A1, $99, $42, $3C, $A2, $9C + .db $6C, $6C, $3E, $00, $7E, $DD, $98, $E8, $33, $F6, $66, $33, $95, $FC, $0C + .db $6D, $4A, $66, $BE, $4C, $66, $C9, $FB, $1F, $B9, $A5, $B9, $A5, $65, $F3 + .db $64, $27, $85, $85, $A6, $E5, $3F, $2C, $FC, $75, $18, $30, $CE, $80, $DF + .db $A7, $EE, $38, $94, $50, $20, $82, $03, $FD, $E9, $66, $B1, $7B, $C0, $F8 + .db $E8, $7F, $10, $7B, $1B, $F0, $47, $BB, $47, $D4, $82, $5F, $18, $38, $18 + .db $18, $3C, $92, $1D, $46, $82, $41, $52, $A5, $F6, $FC, $42, $7F, $CD, $CC + .db $CF, $CC, $CD, $7F, $9C, $7E, $DB, $DE, $D8, $7E, $FF, $FB, $65, $95, $63 + .db $B6, $AD, $60, $0C, $82, $FF, $2C, $ED, $FF, $06, $24, $5A, $0F, $1F, $11 + .db $EC, $F8, $02, $EA, $1F, $04, $A1, $EF, $F8, $43, $D4, $25, $51, $47, $C9 + .db $EF, $FF, $12, $47, $9D, $25, $5F, $35, $88, $22, $43, $80, $26, $F9, $07 + .db $62, $27, $CC, $2D, $FF, $0E, $36, $F5, $23, $1E, $0A, $3F, $30, $37, $FB + .db $0D, $FE, $06, $F6, $01, $5E, $00, $37, $30, $3F, $D4, $1E, $F6, $06, $FE + .db $A5, $4B, $37, $D4, $24, $43, $D4, $45, $A8, $2E, $F7, $51, $4F, $F7, $9D + .db $2D, $F7, $5F, $0E, $FF, $81, $C2, $26, $EF, $3C, $E8, $18, $E8, $3C, $A4 + .db $CA, $96, $E9, $7F, $04, $FC, $0E, $0C, $FE, $0C, $B7, $60, $30, $8B, $0A + .db $0F, $18, $10, $F7, $10, $28, $F7, $76, $DC, $0C, $F3, $6C, $00, $85, $CB + .db $22, $51, $65, $3D, $BF, $1B, $7E, $D8, $6E, $E1, $55, $54, $0C, $78, $A8 + .db $A6, $EA, $5F, $0C, $18, $45, $A8, $26, $5E, $F3, $6C, $00, $85, $E0, $EF + .db $70, $11, $EF, $70, $06, $AB, $28, $D8, $A6, $D1, $DE, $FD, $34, $18, $2C + .db $7C, $B3, $76, $DC, $EE, $5E, $87, $E0, $F5, $15, $44, $39, $26, $82, $FC + .db $01, $86, $E1, $9E, $2E, $3D, $66, $6E, $76, $66, $E0, $A6, $EA, $54, $0C + .db $18, $45, $71, $06, $AB, $2A, $CC, $66, $CC, $8F, $CC, $D1, $8E, $8B, $7C + .db $D5, $E6, $44, $DF, $26, $47, $00, $F0, $E8 + diff --git a/Source/HBIOS/font8x11u.asm b/Source/HBIOS/font8x11u.asm new file mode 100644 index 00000000..a8d93a80 --- /dev/null +++ b/Source/HBIOS/font8x11u.asm @@ -0,0 +1,260 @@ +; Zap font zap-vga-09 (c) John Zaitseff released under GNU General Public Licence. Refer www.gnu.org/licenses/ +; + .DB $7E, $C3, $99, $F3, $E7, $FF, $E7, $7E, $00, $00, $00 + .DB $00, $00, $7F, $E6, $66, $66, $C3, $00, $00, $00, $00 + .DB $0C, $18, $FC, $30, $FC, $60, $C0, $00, $00, $00, $00 + .DB $18, $30, $60, $30, $18, $00, $7C, $00, $00, $00, $00 + .DB $60, $30, $18, $30, $60, $00, $F8, $00, $00, $00, $00 + .DB $00, $00, $3C, $3C, $3C, $3C, $00, $00, $00, $00, $00 + .DB $10, $38, $7C, $FE, $7C, $38, $10, $00, $00, $00, $00 + .DB $C3, $C6, $CC, $D8, $36, $6E, $D6, $BF, $06, $00, $00 + .DB $C3, $C6, $CC, $D8, $36, $6B, $C6, $8C, $0F, $00, $00 + .DB $E1, $33, $66, $34, $EA, $36, $6A, $DF, $82, $00, $00 + .DB $18, $18, $18, $18, $00, $18, $18, $18, $18, $00, $00 + .DB $6C, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $00, $0C, $78, $00, $00, $00 + .DB $0E, $1B, $18, $3C, $18, $18, $D8, $70, $00, $00, $00 + .DB $18, $18, $7E, $18, $18, $18, $18, $00, $00, $00, $00 + .DB $18, $18, $7E, $18, $7E, $18, $18, $00, $00, $00, $00 + .DB $00, $CC, $D8, $30, $60, $DB, $9B, $00, $00, $00, $00 + .DB $F1, $5B, $55, $51, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $DB, $DB, $00, $00, $00, $00 + .DB $00, $0C, $18, $30, $18, $0C, $00, $00, $00, $00, $00 + .DB $00, $30, $18, $0C, $18, $30, $00, $00, $00, $00, $00 + .DB $CC, $CC, $66, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $66, $66, $CC, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $66, $66, $CC, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $CC, $CC, $66, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $18, $18, $0C, $00, $00, $00 + .DB $C6, $7C, $7E, $C0, $CE, $C6, $7E, $00, $00, $00, $00 + .DB $C6, $7C, $00, $76, $CC, $7C, $0C, $F8, $00, $00, $00 + .DB $30, $00, $78, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $00, $00, $70, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $78, $C4, $70, $38, $8C, $78, $0C, $78, $00, $00, $00 + .DB $00, $7C, $C0, $78, $0C, $F8, $0C, $78, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $30, $78, $78, $30, $30, $00, $30, $00, $00, $00, $00 + .DB $6C, $6C, $28, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00, $00, $00, $00 + .DB $10, $7C, $D0, $7C, $16, $7C, $10, $00, $00, $00, $00 + .DB $00, $C6, $CC, $18, $30, $66, $C6, $00, $00, $00, $00 + .DB $38, $6C, $38, $76, $DC, $CC, $76, $00, $00, $00, $00 + .DB $18, $18, $30, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $18, $30, $60, $60, $60, $30, $18, $00, $00, $00, $00 + .DB $60, $30, $18, $18, $18, $30, $60, $00, $00, $00, $00 + .DB $00, $6C, $38, $FE, $38, $6C, $00, $00, $00, $00, $00 + .DB $00, $30, $30, $FC, $30, $30, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $18, $18, $30, $00, $00, $00 + .DB $00, $00, $00, $FC, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $30, $30, $00, $00, $00, $00 + .DB $06, $0C, $18, $30, $60, $C0, $80, $00, $00, $00, $00 + .DB $7C, $C6, $C6, $D6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $30, $70, $30, $30, $30, $30, $FC, $00, $00, $00, $00 + .DB $78, $CC, $0C, $38, $60, $CC, $FC, $00, $00, $00, $00 + .DB $78, $CC, $0C, $38, $0C, $CC, $78, $00, $00, $00, $00 + .DB $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00, $00, $00, $00 + .DB $FC, $C0, $F8, $0C, $0C, $CC, $78, $00, $00, $00, $00 + .DB $38, $60, $C0, $F8, $CC, $CC, $78, $00, $00, $00, $00 + .DB $FC, $CC, $0C, $18, $30, $30, $30, $00, $00, $00, $00 + .DB $78, $CC, $CC, $78, $CC, $CC, $78, $00, $00, $00, $00 + .DB $78, $CC, $CC, $7C, $0C, $18, $70, $00, $00, $00, $00 + .DB $00, $30, $30, $00, $00, $30, $30, $00, $00, $00, $00 + .DB $00, $30, $30, $00, $00, $30, $30, $60, $00, $00, $00 + .DB $18, $30, $60, $C0, $60, $30, $18, $00, $00, $00, $00 + .DB $00, $00, $FC, $00, $FC, $00, $00, $00, $00, $00, $00 + .DB $60, $30, $18, $0C, $18, $30, $60, $00, $00, $00, $00 + .DB $78, $CC, $0C, $18, $30, $00, $30, $00, $00, $00, $00 + .DB $7C, $C6, $DE, $DE, $DC, $C0, $78, $00, $00, $00, $00 + .DB $38, $6C, $C6, $C6, $FE, $C6, $C6, $00, $00, $00, $00 + .DB $FC, $66, $66, $7C, $66, $66, $FC, $00, $00, $00, $00 + .DB $3C, $66, $C0, $C0, $C0, $66, $3C, $00, $00, $00, $00 + .DB $F8, $6C, $66, $66, $66, $6C, $F8, $00, $00, $00, $00 + .DB $FE, $62, $68, $78, $68, $62, $FE, $00, $00, $00, $00 + .DB $FE, $62, $68, $78, $68, $60, $F0, $00, $00, $00, $00 + .DB $3C, $66, $C0, $C0, $CE, $66, $3E, $00, $00, $00, $00 + .DB $C6, $C6, $C6, $FE, $C6, $C6, $C6, $00, $00, $00, $00 + .DB $78, $30, $30, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $1E, $0C, $0C, $0C, $CC, $CC, $78, $00, $00, $00, $00 + .DB $E6, $66, $6C, $78, $6C, $66, $E6, $00, $00, $00, $00 + .DB $F0, $60, $60, $60, $62, $66, $FE, $00, $00, $00, $00 + .DB $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00, $00, $00, $00 + .DB $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00, $00, $00, $00 + .DB $7C, $C6, $C6, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $FC, $66, $66, $7C, $60, $60, $F0, $00, $00, $00, $00 + .DB $7C, $C6, $C6, $C6, $C6, $CE, $7C, $0E, $00, $00, $00 + .DB $FC, $66, $66, $7C, $6C, $66, $E6, $00, $00, $00, $00 + .DB $78, $CC, $E0, $78, $1C, $CC, $78, $00, $00, $00, $00 + .DB $FC, $B4, $30, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $C6, $C6, $C6, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $C6, $C6, $C6, $C6, $C6, $6C, $38, $00, $00, $00, $00 + .DB $C6, $C6, $C6, $D6, $D6, $FE, $6C, $00, $00, $00, $00 + .DB $C6, $C6, $6C, $38, $6C, $C6, $C6, $00, $00, $00, $00 + .DB $CC, $CC, $CC, $78, $30, $30, $78, $00, $00, $00, $00 + .DB $FE, $CC, $98, $30, $62, $C6, $FE, $00, $00, $00, $00 + .DB $78, $60, $60, $60, $60, $60, $78, $00, $00, $00, $00 + .DB $C0, $60, $30, $18, $0C, $06, $02, $00, $00, $00, $00 + .DB $78, $18, $18, $18, $18, $18, $78, $00, $00, $00, $00 + .DB $10, $38, $6C, $C6, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $00, $00, $FE, $00, $00, $00 + .DB $30, $30, $18, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $78, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $E0, $60, $60, $7C, $66, $66, $DC, $00, $00, $00, $00 + .DB $00, $00, $78, $CC, $C0, $CC, $78, $00, $00, $00, $00 + .DB $1C, $0C, $0C, $7C, $CC, $CC, $76, $00, $00, $00, $00 + .DB $00, $00, $78, $CC, $FC, $C0, $78, $00, $00, $00, $00 + .DB $38, $6C, $60, $F0, $60, $60, $F0, $00, $00, $00, $00 + .DB $00, $00, $76, $CC, $CC, $7C, $0C, $F8, $00, $00, $00 + .DB $E0, $60, $6C, $76, $66, $66, $E6, $00, $00, $00, $00 + .DB $30, $00, $70, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $0C, $00, $1C, $0C, $0C, $CC, $CC, $78, $00, $00, $00 + .DB $E0, $60, $66, $6C, $78, $6C, $E6, $00, $00, $00, $00 + .DB $70, $30, $30, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $00, $00, $EC, $FE, $D6, $D6, $D6, $00, $00, $00, $00 + .DB $00, $00, $DC, $66, $66, $66, $66, $00, $00, $00, $00 + .DB $00, $00, $78, $CC, $CC, $CC, $78, $00, $00, $00, $00 + .DB $00, $00, $DC, $66, $66, $7C, $60, $F0, $00, $00, $00 + .DB $00, $00, $76, $CC, $CC, $7C, $0C, $1E, $00, $00, $00 + .DB $00, $00, $DC, $76, $60, $60, $F0, $00, $00, $00, $00 + .DB $00, $00, $7C, $C0, $78, $0C, $F8, $00, $00, $00, $00 + .DB $10, $30, $FC, $30, $30, $36, $1C, $00, $00, $00, $00 + .DB $00, $00, $CC, $CC, $CC, $CC, $76, $00, $00, $00, $00 + .DB $00, $00, $C6, $C6, $C6, $6C, $38, $00, $00, $00, $00 + .DB $00, $00, $C6, $D6, $D6, $FE, $6C, $00, $00, $00, $00 + .DB $00, $00, $C6, $6C, $38, $6C, $C6, $00, $00, $00, $00 + .DB $00, $00, $CC, $CC, $CC, $7C, $0C, $F8, $00, $00, $00 + .DB $00, $00, $FC, $98, $30, $64, $FC, $00, $00, $00, $00 + .DB $1C, $30, $30, $E0, $30, $30, $1C, $00, $00, $00, $00 + .DB $18, $18, $18, $18, $18, $18, $18, $18, $00, $00, $00 + .DB $E0, $30, $30, $1C, $30, $30, $E0, $00, $00, $00, $00 + .DB $76, $DC, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $18, $3C, $3C, $18, $00, $00, $00, $00, $00 + .DB $C0, $60, $1C, $36, $63, $7F, $63, $00, $00, $00, $00 + .DB $03, $06, $38, $6C, $C6, $FE, $C6, $00, $00, $00, $00 + .DB $10, $28, $00, $7C, $C6, $FE, $C6, $00, $00, $00, $00 + .DB $76, $DC, $00, $7C, $C6, $FE, $C6, $00, $00, $00, $00 + .DB $6C, $00, $38, $6C, $C6, $FE, $C6, $00, $00, $00, $00 + .DB $38, $6C, $38, $6C, $C6, $FE, $C6, $00, $00, $00, $00 + .DB $3F, $6D, $CC, $FF, $CC, $CD, $CF, $00, $00, $00, $00 + .DB $3C, $66, $C0, $C0, $66, $3C, $06, $3C, $00, $00, $00 + .DB $60, $30, $FE, $62, $78, $62, $FE, $00, $00, $00, $00 + .DB $0C, $18, $FE, $62, $78, $62, $FE, $00, $00, $00, $00 + .DB $10, $28, $FE, $62, $78, $62, $FE, $00, $00, $00, $00 + .DB $6C, $00, $FE, $62, $78, $62, $FE, $00, $00, $00, $00 + .DB $60, $30, $00, $78, $30, $30, $78, $00, $00, $00, $00 + .DB $18, $30, $00, $78, $30, $30, $78, $00, $00, $00, $00 + .DB $20, $50, $00, $78, $30, $30, $78, $00, $00, $00, $00 + .DB $CC, $00, $78, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $F8, $6C, $66, $F6, $66, $6C, $F8, $00, $00, $00, $00 + .DB $76, $DC, $00, $E6, $F6, $DE, $CE, $00, $00, $00, $00 + .DB $60, $30, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $0C, $18, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $10, $28, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $76, $DC, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $6C, $00, $7C, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $00, $00, $6C, $38, $6C, $00, $00, $00, $00, $00, $00 + .DB $3D, $67, $6E, $7E, $76, $E6, $BC, $00, $00, $00, $00 + .DB $60, $30, $00, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $0C, $18, $00, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $10, $28, $00, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $6C, $00, $C6, $C6, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $18, $30, $CC, $CC, $78, $30, $78, $00, $00, $00, $00 + .DB $F0, $60, $7C, $66, $7C, $60, $F0, $00, $00, $00, $00 + .DB $78, $CC, $CC, $D8, $CC, $C6, $CC, $00, $00, $00, $00 + .DB $AA, $55, $AA, $55, $AA, $55, $AA, $55, $AA, $00, $00 + .DB $30, $00, $30, $30, $78, $78, $30, $00, $00, $00, $00 + .DB $00, $10, $7C, $D6, $D0, $D6, $7C, $10, $00, $00, $00 + .DB $38, $6C, $64, $F0, $60, $66, $FC, $00, $00, $00, $00 + .DB $1E, $31, $FC, $60, $F8, $33, $1E, $00, $00, $00, $00 + .DB $CC, $CC, $78, $FC, $30, $FC, $30, $00, $00, $00, $00 + .DB $28, $10, $7C, $C0, $78, $0C, $F8, $00, $00, $00, $00 + .DB $3E, $61, $3C, $66, $66, $3C, $86, $7C, $00, $00, $00 + .DB $28, $10, $7C, $C0, $78, $0C, $F8, $00, $00, $00, $00 + .DB $3C, $42, $99, $A1, $A1, $99, $42, $3C, $00, $00, $00 + .DB $3C, $6C, $6C, $3E, $00, $7E, $00, $00, $00, $00, $00 + .DB $00, $33, $66, $CC, $66, $33, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $FC, $0C, $0C, $00, $00, $00, $00, $00 + .DB $00, $66, $3C, $66, $66, $3C, $66, $00, $00, $00, $00 + .DB $3C, $42, $B9, $A5, $B9, $A5, $42, $3C, $00, $00, $00 + .DB $7C, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $38, $6C, $6C, $38, $00, $00, $00, $00, $00, $00, $00 + .DB $30, $30, $FC, $30, $30, $00, $FC, $00, $00, $00, $00 + .DB $38, $6C, $18, $30, $7C, $00, $00, $00, $00, $00, $00 + .DB $78, $0C, $38, $0C, $78, $00, $00, $00, $00, $00, $00 + .DB $50, $20, $FC, $98, $30, $64, $FC, $00, $00, $00, $00 + .DB $00, $00, $66, $66, $66, $66, $7B, $C0, $00, $00, $00 + .DB $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00, $00, $00, $00 + .DB $00, $00, $00, $30, $30, $00, $00, $00, $00, $00, $00 + .DB $50, $20, $FC, $98, $30, $64, $FC, $00, $00, $00, $00 + .DB $18, $38, $18, $18, $3C, $00, $00, $00, $00, $00, $00 + .DB $38, $6C, $6C, $38, $00, $7C, $00, $00, $00, $00, $00 + .DB $00, $CC, $66, $33, $66, $CC, $00, $00, $00, $00, $00 + .DB $7F, $CD, $CC, $CF, $CC, $CD, $7F, $00, $00, $00, $00 + .DB $00, $00, $7E, $DB, $DE, $D8, $7E, $00, $00, $00, $00 + .DB $CC, $00, $CC, $CC, $78, $30, $78, $00, $00, $00, $00 + .DB $30, $00, $30, $60, $C0, $CC, $78, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00 + .DB $18, $18, $18, $18, $18, $18, $18, $18, $18, $00, $00 + .DB $00, $00, $00, $00, $1F, $18, $18, $18, $18, $00, $00 + .DB $00, $00, $00, $00, $F8, $18, $18, $18, $18, $00, $00 + .DB $18, $18, $18, $18, $1F, $00, $00, $00, $00, $00, $00 + .DB $18, $18, $18, $18, $F8, $00, $00, $00, $00, $00, $00 + .DB $18, $18, $18, $18, $1F, $18, $18, $18, $18, $00, $00 + .DB $18, $18, $18, $18, $F8, $18, $18, $18, $18, $00, $00 + .DB $00, $00, $00, $00, $FF, $18, $18, $18, $18, $00, $00 + .DB $18, $18, $18, $18, $FF, $00, $00, $00, $00, $00, $00 + .DB $18, $18, $18, $18, $FF, $18, $18, $18, $18, $00, $00 + .DB $88, $22, $88, $22, $88, $22, $88, $22, $88, $00, $00 + .DB $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $00, $FF, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $00 + .DB $00, $00, $00, $FF, $00, $FF, $00, $00, $00, $00, $00 + .DB $36, $36, $36, $36, $36, $36, $36, $36, $36, $00, $00 + .DB $00, $00, $00, $3F, $30, $37, $36, $36, $36, $00, $00 + .DB $00, $00, $00, $FE, $06, $F6, $36, $36, $36, $00, $00 + .DB $36, $36, $36, $37, $30, $3F, $00, $00, $00, $00, $00 + .DB $36, $36, $36, $F6, $06, $FE, $00, $00, $00, $00, $00 + .DB $36, $36, $36, $37, $30, $37, $36, $36, $36, $00, $00 + .DB $36, $36, $36, $F6, $06, $F6, $36, $36, $36, $00, $00 + .DB $00, $00, $00, $FF, $00, $F7, $36, $36, $36, $00, $00 + .DB $36, $36, $36, $F7, $00, $FF, $00, $00, $00, $00, $00 + .DB $36, $36, $36, $F7, $00, $F7, $36, $36, $36, $00, $00 + .DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00 + .DB $18, $3C, $7E, $18, $18, $18, $18, $00, $00, $00, $00 + .DB $18, $18, $18, $18, $7E, $3C, $18, $00, $00, $00, $00 + .DB $00, $18, $30, $7F, $30, $18, $00, $00, $00, $00, $00 + .DB $00, $18, $0C, $FE, $0C, $18, $00, $00, $00, $00, $00 + .DB $60, $30, $78, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $18, $30, $78, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $10, $28, $78, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $76, $DC, $78, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $6C, $00, $78, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $38, $6C, $38, $0C, $7C, $CC, $76, $00, $00, $00, $00 + .DB $00, $00, $7E, $1B, $7E, $D8, $6E, $00, $00, $00, $00 + .DB $00, $78, $CC, $C0, $CC, $78, $0C, $78, $00, $00, $00 + .DB $60, $30, $78, $CC, $FC, $C0, $78, $00, $00, $00, $00 + .DB $18, $30, $78, $CC, $FC, $C0, $78, $00, $00, $00, $00 + .DB $10, $28, $78, $CC, $FC, $C0, $78, $00, $00, $00, $00 + .DB $6C, $00, $78, $CC, $FC, $C0, $78, $00, $00, $00, $00 + .DB $60, $30, $00, $70, $30, $30, $78, $00, $00, $00, $00 + .DB $18, $30, $00, $70, $30, $30, $78, $00, $00, $00, $00 + .DB $20, $50, $00, $70, $30, $30, $78, $00, $00, $00, $00 + .DB $D8, $00, $70, $30, $30, $30, $78, $00, $00, $00, $00 + .DB $34, $18, $2C, $7C, $CC, $CC, $78, $00, $00, $00, $00 + .DB $76, $DC, $00, $DC, $66, $66, $66, $00, $00, $00, $00 + .DB $60, $30, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $0C, $18, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $10, $28, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $76, $DC, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $00, $6C, $00, $7C, $C6, $C6, $7C, $00, $00, $00, $00 + .DB $30, $30, $00, $FC, $00, $30, $30, $00, $00, $00, $00 + .DB $00, $3D, $66, $6E, $76, $66, $BC, $00, $00, $00, $00 + .DB $60, $30, $00, $CC, $CC, $CC, $76, $00, $00, $00, $00 + .DB $18, $30, $00, $CC, $CC, $CC, $76, $00, $00, $00, $00 + .DB $20, $50, $00, $CC, $CC, $CC, $76, $00, $00, $00, $00 + .DB $CC, $00, $CC, $CC, $CC, $CC, $76, $00, $00, $00, $00 + .DB $18, $30, $CC, $CC, $CC, $7C, $0C, $F8, $00, $00, $00 + .DB $E0, $60, $7C, $66, $66, $7C, $60, $F0, $00, $00, $00 + .DB $CC, $00, $CC, $CC, $CC, $7C, $0C, $F8, $00, $00, $00 + + diff --git a/Source/HBIOS/font8x16c.asm b/Source/HBIOS/font8x16c.asm new file mode 100644 index 00000000..f2112d23 --- /dev/null +++ b/Source/HBIOS/font8x16c.asm @@ -0,0 +1,99 @@ + .db $0F, $00, $F8, $38, $4E, $7E, $81, $A5, $81, $81, $BD, $99, $2C, $7E, $87 + .db $FC, $7C, $FE, $FE, $D6, $FE, $FE, $BA, $C6, $FE, $7C, $F8, $19, $00, $6C + .db $EE, $FE, $20, $35, $38, $10, $80, $3D, $10, $38, $7C, $98, $26, $00, $2C + .db $40, $DC, $08, $6C, $07, $00, $49, $7C, $CF, $22, $8F, $06, $F0, $18, $3C + .db $0C, $18, $AF, $0A, $FF, $F0, $E7, $C3, $F3, $E7, $FF, $04, $0F, $08, $66 + .db $45, $DF, $04, $0F, $08, $99, $35, $C3, $E7, $03, $19, $1E, $0E, $1E, $36 + .db $78, $CC, $FF, $4C, $78, $44, $44, $D3, $10, $7E, $18, $EB, $00, $F9, $10 + .db $1E, $1A, $1E, $18, $3C, $78, $F8, $70, $0F, $30, $3E, $36, $5C, $41, $36 + .db $76, $F6, $66, $0E, $1E, $0C, $83, $51, $DB, $7E, $A0, $5D, $3C, $7E, $DB + .db $18, $30, $FD, $66, $80, $E0, $F0, $FC, $FE, $FC, $F0, $E0, $80, $5E, $02 + .db $0E, $3E, $7E, $FE, $7E, $3E, $0E, $02, $53, $4A, $7E, $B0, $4E, $7E, $4E + .db $0C, $66, $FC, $21, $24, $8F, $11, $7F, $DB, $F1, $7B, $1B, $65, $D0, $38 + .db $5C, $C6, $C6, $60, $7C, $F6, $DE, $7C, $0C, $6F, $7C, $AA, $13, $62, $CD + .db $47, $B0, $49, $7E, $4D, $47, $A0, $40, $47, $40, $01, $9F, $46, $90, $06 + .db $FF, $31, $0C, $0E, $FF, $0E, $0C, $00, $FF, $32, $30, $70, $FE, $70, $30 + .db $00, $E8, $C0, $2F, $FE, $02, $7F, $23, $24, $66, $FF, $66, $24, $70, $63 + .db $7D, $47, $75, $1F, $08, $7C, $61, $5C, $67, $05, $54, $67, $63, $69, $3C + .db $B3, $65, $B0, $09, $36, $F0, $2F, $14, $3F, $08, $6C, $0B, $FE, $E7, $4E + .db $6C, $50, $FD, $7C, $C6, $C0, $78, $3C, $06, $C6, $7C, $18, $18, $FC, $43 + .db $62, $66, $0C, $18, $30, $66, $C6, $79, $38, $6C, $38, $30, $76, $7E, $50 + .db $4C, $76, $34, $28, $0C, $24, $47, $8F, $41, $D5, $03, $FB, $4D, $18, $1E + .db $01, $02, $F4, $01, $47, $8D, $13, $50, $38, $FE, $BA, $47, $5D, $62, $11 + .db $27, $81, $47, $A8, $AA, $4F, $FE, $28, $07, $00, $51, $02, $06, $61, $7F + .db $00, $60, $C0, $80, $50, $7F, $10, $CE, $DE, $F6, $E6, $52, $76, $18, $78 + .db $7E, $27, $00, $43, $D0, $F6, $C6, $FE, $FE, $37, $06, $06, $3C, $06, $06 + .db $06, $7D, $0C, $1C, $3C, $6C, $CC, $CC, $FE, $0C, $0C, $1E, $16, $61, $73 + .db $2B, $FC, $08, $46, $A0, $21, $08, $C6, $F8, $26, $4B, $FE, $B1, $02, $F0 + .db $25, $02, $20, $27, $2A, $23, $4D, $7E, $A0, $46, $24, $23, $E8, $27, $63 + .db $66, $B8, $43, $33, $6C, $60, $C0, $46, $01, $67, $FF, $02, $20, $43, $0E + .db $47, $30, $00, $9F, $65, $20, $46, $90, $08, $DE, $7E, $0F, $DC, $C0, $7E + .db $50, $41, $6F, $EA, $FE, $84, $10, $E9, $FC, $8A, $7C, $FF, $0B, $AE, $FC + .db $90, $11, $C2, $C0, $F0, $3C, $C2, $66, $3C, $0F, $B4, $F8, $6C, $EE, $75 + .db $6C, $F8, $85, $3F, $68, $66, $60, $64, $7C, $64, $60, $60, $66, $FE, $50 + .db $57, $60, $F0, $90, $61, $DE, $6F, $CE, $F0, $0F, $4D, $C6, $91, $46, $90 + .db $15, $3C, $18, $2F, $3C, $84, $5E, $03, $D8, $D8, $70, $D0, $FE, $CC, $D8 + .db $F0, $F0, $D8, $CC, $13, $F0, $60, $F0, $48, $62, $90, $26, $FE, $3F, $EE + .db $EE, $FE, $D6, $D6, $D6, $A0, $71, $F0, $E6, $E6, $49, $CE, $8F, $67, $A0 + .db $20, $65, $90, $46, $20, $52, $66, $7C, $60, $27, $41, $40, $BE, $57, $7C + .db $06, $00, $49, $78, $1B, $6F, $E6, $30, $11, $77, $70, $1C, $20, $57, $7E + .db $5A, $50, $55, $4F, $C6, $A0, $26, $8E, $AE, $6C, $D0, $43, $A4, $5E, $02 + .db $D6, $FE, $EE, $60, $23, $63, $8B, $87, $E2, $A0, $4A, $3C, $00, $86, $FF + .db $D0, $E9, $86, $97, $60, $C2, $80, $0F, $0D, $60, $6E, $7C, $1D, $F3, $80 + .db $C0, $2D, $02, $0F, $0D, $0C, $24, $0F, $69, $10, $30, $0F, $00, $EE, $8C + .db $FF, $91, $2F, $0C, $47, $48, $78, $C4, $A0, $F1, $50, $EC, $DC, $51, $00 + .db $E0, $96, $6E, $66, $00, $67, $FD, $4E, $C0, $20, $51, $1C, $0C, $D2, $02 + .db $F0, $2F, $7E, $21, $F7, $C6, $FE, $A8, $36, $F0, $20, $E9, $FC, $37, $30 + .db $78, $04, $69, $76, $02, $71, $CE, $76, $BE, $47, $A0, $AF, $E6, $F0, $58 + .db $6D, $38, $00, $86, $FE, $03, $4B, $1C, $30, $A1, $0E, $45, $70, $60, $6F + .db $E9, $6C, $46, $D0, $06, $FE, $8F, $1C, $5D, $1E, $61, $00, $EB, $C6, $A4 + .db $4D, $EC, $DC, $47, $60, $10, $66, $00, $26, $85, $F0, $FD, $4E, $F0, $60 + .db $42, $30, $61, $B8, $2F, $1E, $02, $20, $25, $11, $46, $00, $F6, $7C, $06 + .db $4D, $30, $21, $4F, $36, $80, $6B, $CC, $F0, $EF, $76, $08, $66, $00, $26 + .db $84, $F0, $FE, $2F, $6C, $2F, $AA, $6C, $8A, $27, $02, $65, $E0, $86, $EF + .db $32, $82, $FE, $54, $62, $FE, $10, $E9, $0E, $EA, $70, $4F, $0E, $00, $10 + .db $64, $FB, $24, $E9, $70, $EA, $0E, $6C, $70, $09, $F6, $76, $DC, $A7, $D3 + .db $5E, $A1, $EF, $3B, $65, $33, $F2, $3C, $66, $81, $8E, $60, $9F, $4B, $38 + .db $53, $01, $EE, $44, $7F, $A6, $61, $67, $30, $4F, $60, $39, $8F, $CC, $E0 + .db $58, $00, $26, $8E, $86, $92, $26, $8E, $A6, $01, $26, $0F, $87, $C1, $3D + .db $81, $D2, $28, $0C, $38, $44, $B0, $46, $A0, $46, $B0, $26, $86, $D0, $F1 + .db $27, $5F, $E8, $66, $86, $E0, $85, $C8, $D3, $26, $46, $D0, $27, $04, $8F + .db $C6, $E1, $2F, $45, $71, $01, $78, $24, $46, $21, $A8, $FE, $F4, $B0, $E9 + .db $7C, $6E, $FE, $40, $FD, $66, $DB, $1B, $7F, $D8, $D8, $DF, $11, $7E, $D8 + .db $FD, $09, $FE, $4E, $DE, $00, $87, $F5, $C0, $36, $C6, $00, $88, $46, $50 + .db $26, $46, $D0, $66, $B0, $66, $E0, $27, $84, $8A, $18, $E4, $0F, $47, $50 + .db $8E, $7C, $E8, $60, $25, $EE, $C6, $66, $10, $65, $C0, $6D, $18, $A0, $40 + .db $42, $E9, $F0, $7C, $0C, $66, $F6, $6C, $E1, $A5, $F1, $AE, $3C, $C8, $F0 + .db $F8, $3E, $63, $63, $30, $1C, $06, $63, $63, $3E, $00, $1C, $06, $68, $32 + .db $38, $0E, $66, $20, $66, $60, $25, $88, $66, $A0, $26, $47, $20, $4D, $81 + .db $B8, $84, $FF, $20, $ED, $DC, $B6, $76, $DC, $A0, $06, $8E, $B2, $C6, $C6 + .db $8F, $A5, $E2, $60, $F8, $21, $1E, $00, $1E, $33, $FB, $1D, $67, $63, $33 + .db $1D, $48, $42, $A9, $49, $3B, $D3, $96, $3E, $06, $C0, $B2, $30, $30, $FB + .db $BD, $6E, $60, $B0, $65, $8B, $41, $2E, $87, $6B, $4D, $A1, $8F, $04, $AE + .db $A2, $16, $49, $6C, $7B, $50, $DC, $36, $66, $2F, $3E, $80, $5C, $2F, $36 + .db $6E, $DE, $36, $7E, $DD, $A3, $F2, $8E, $3C, $BC, $9E, $84, $3C, $FF, $12 + .db $6C, $D8, $6C, $36, $21, $9F, $F4, $6C, $D8, $37, $11, $44, $55, $F7, $AA + .db $55, $F7, $DD, $77, $5F, $0F, $18, $D9, $2F, $F8, $58, $27, $1F, $0C, $36 + .db $F5, $F6, $36, $86, $C8, $60, $27, $47, $47, $D0, $F0, $F6, $06, $07, $FE + .db $44, $C2, $27, $06, $B7, $F6, $06, $C0, $23, $25, $68, $27, $0B, $46, $70 + .db $A7, $1B, $66, $4F, $F8, $38, $2E, $1F, $38, $25, $4F, $FF, $D0, $67, $EF + .db $FF, $06, $B0, $26, $47, $C0, $76, $47, $D2, $6F, $1F, $F0, $69, $EC, $37 + .db $26, $57, $30, $3F, $62, $40, $37, $3F, $30, $50, $4E, $F7, $A0, $47, $92 + .db $4F, $F7, $C0, $51, $47, $D0, $25, $04, $6F, $FF, $F0, $4F, $F7, $D0, $16 + .db $45, $22, $6F, $FF, $D0, $47, $A0, $77, $4F, $FF, $20, $67, $70, $60, $47 + .db $50, $46, $20, $67, $A1, $48, $6F, $1F, $E0, $6F, $3F, $30, $66, $EE, $FF + .db $65, $D2, $67, $A0, $67, $50, $8F, $EE, $1F, $0F, $FF, $64, $46, $4D, $26 + .db $0F, $F0, $F6, $EF, $0F, $65, $47, $C8, $86, $DE, $DE, $82, $1D, $A6, $EA + .db $30, $A1, $A4, $8B, $D8, $BC, $50, $ED, $CC, $95, $66, $62, $8E, $87, $A1 + .db $33, $0B, $6C, $FC, $86, $60, $FB, $3E, $62, $30, $18, $18, $30, $62, $A6 + .db $CD, $49, $CC, $BB, $AE, $70, $D1, $A1, $EC, $66, $57, $C0, $80, $8F, $67 + .db $E4, $2C, $89, $FE, $03, $A3, $CE, $FD, $45, $C0, $A4, $61, $22, $78, $07 + .db $19, $21, $00, $FE, $8D, $EE, $30, $40, $77, $52, $3C, $66, $61, $4F, $78 + .db $90, $1A, $A1, $7D, $AF, $7E, $B1, $22, $A9, $7C, $B7, $30, $49, $F6, $90 + .db $25, $B3, $1C, $30, $EC, $20, $B7, $30, $1C, $00, $60, $4F, $C6, $31, $04 + .db $EA, $87, $A1, $7B, $EC, $7E, $A5, $C2, $23, $8B, $A6, $91, $21, $60, $23 + .db $25, $7E, $97, $1E, $1A, $ED, $A0, $9F, $58, $78, $30, $A1, $86, $09, $7E + .db $D4, $67, $8E, $02, $E0, $67, $90, $8F, $78, $AA, $53, $07, $77, $87, $F6 + .db $F5, $60, $50, $34, $78, $38, $61, $6F, $D8, $74, $43, $5F, $F1, $70, $D8 + .db $AF, $F8, $95, $2D, $03, $FB, $EF, $00, $47, $00, $F0, $E8 + diff --git a/Source/HBIOS/font8x16u.asm b/Source/HBIOS/font8x16u.asm new file mode 100644 index 00000000..4fbc2e7a --- /dev/null +++ b/Source/HBIOS/font8x16u.asm @@ -0,0 +1,256 @@ + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7E,$81,$A5,$81,$81,$BD,$99,$81,$81,$7E,$00,$00,$00,$00 + .DB $00,$00,$7C,$FE,$FE,$D6,$FE,$FE,$BA,$C6,$FE,$7C,$00,$00,$00,$00 + .DB $00,$00,$00,$6C,$EE,$FE,$FE,$FE,$FE,$7C,$38,$10,$00,$00,$00,$00 + .DB $00,$00,$00,$10,$38,$7C,$FE,$7C,$38,$10,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$10,$38,$38,$10,$6C,$EE,$6C,$10,$38,$00,$00,$00,$00 + .DB $00,$00,$10,$38,$7C,$7C,$FE,$FE,$FE,$6C,$10,$38,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$18,$3C,$3C,$3C,$18,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$E7,$C3,$C3,$C3,$E7,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$18,$3C,$66,$66,$66,$3C,$18,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$E7,$C3,$99,$99,$99,$C3,$E7,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$1E,$0E,$1E,$36,$78,$CC,$CC,$CC,$CC,$78,$00,$00,$00,$00 + .DB $00,$00,$3C,$66,$66,$66,$3C,$18,$7E,$18,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$1E,$1A,$1E,$18,$18,$18,$18,$78,$F8,$70,$00,$00,$00,$00 + .DB $00,$00,$3E,$36,$3E,$36,$36,$76,$F6,$66,$0E,$1E,$0C,$00,$00,$00 + .DB $00,$00,$18,$DB,$7E,$3C,$66,$66,$3C,$7E,$DB,$18,$00,$00,$00,$00 + .DB $00,$00,$00,$80,$E0,$F0,$FC,$FE,$FC,$F0,$E0,$80,$00,$00,$00,$00 + .DB $00,$00,$00,$02,$0E,$3E,$7E,$FE,$7E,$3E,$0E,$02,$00,$00,$00,$00 + .DB $00,$00,$18,$3C,$7E,$18,$18,$18,$18,$7E,$3C,$18,$00,$00,$00,$00 + .DB $00,$00,$66,$66,$66,$66,$66,$66,$66,$00,$66,$66,$00,$00,$00,$00 + .DB $00,$00,$7F,$DB,$DB,$DB,$DB,$7B,$1B,$1B,$1B,$1B,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$60,$7C,$F6,$DE,$7C,$0C,$C6,$C6,$7C,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$FE,$FE,$FE,$FE,$00,$00,$00,$00 + .DB $00,$00,$18,$3C,$7E,$18,$18,$18,$7E,$3C,$18,$7E,$00,$00,$00,$00 + .DB $00,$00,$18,$3C,$7E,$18,$18,$18,$18,$18,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$18,$18,$18,$18,$18,$18,$18,$7E,$3C,$18,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$0C,$0E,$FF,$0E,$0C,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$30,$70,$FE,$70,$30,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$C0,$C0,$C0,$FE,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$24,$66,$FF,$66,$24,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$10,$38,$38,$38,$7C,$7C,$FE,$FE,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FE,$FE,$7C,$7C,$7C,$38,$38,$10,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$18,$3C,$3C,$3C,$3C,$18,$18,$00,$18,$18,$00,$00,$00,$00 + .DB $00,$36,$36,$36,$36,$14,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$6C,$6C,$6C,$FE,$6C,$6C,$FE,$6C,$6C,$6C,$00,$00,$00,$00 + .DB $00,$00,$18,$18,$7C,$C6,$C0,$78,$3C,$06,$C6,$7C,$18,$18,$00,$00 + .DB $00,$00,$00,$00,$00,$62,$66,$0C,$18,$30,$66,$C6,$00,$00,$00,$00 + .DB $00,$00,$38,$6C,$38,$30,$76,$7E,$CC,$CC,$CC,$76,$00,$00,$00,$00 + .DB $00,$0C,$0C,$0C,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$0C,$18,$30,$30,$30,$30,$30,$30,$18,$0C,$00,$00,$00,$00 + .DB $00,$00,$30,$18,$0C,$0C,$0C,$0C,$0C,$0C,$18,$30,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$6C,$38,$FE,$38,$6C,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$18,$18,$7E,$18,$18,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C,$0C,$18,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$FE,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$02,$06,$0C,$18,$30,$60,$C0,$80,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$CE,$DE,$F6,$E6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$18,$78,$18,$18,$18,$18,$18,$18,$18,$7E,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$06,$0C,$18,$30,$60,$C6,$FE,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$06,$06,$3C,$06,$06,$06,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$0C,$1C,$3C,$6C,$CC,$CC,$FE,$0C,$0C,$1E,$00,$00,$00,$00 + .DB $00,$00,$FE,$C0,$C0,$C0,$FC,$06,$06,$06,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C0,$C0,$FC,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$FE,$C6,$06,$0C,$18,$30,$30,$30,$30,$30,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C6,$7C,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C6,$C6,$7E,$06,$06,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$0C,$0C,$00,$00,$0C,$0C,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$0C,$0C,$00,$00,$0C,$0C,$0C,$18,$00,$00,$00 + .DB $00,$00,$00,$0C,$18,$30,$60,$C0,$60,$30,$18,$0C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$FE,$00,$FE,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$60,$30,$18,$0C,$06,$0C,$18,$30,$60,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$0C,$18,$18,$18,$00,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C6,$DE,$DE,$DE,$DC,$C0,$7E,$00,$00,$00,$00 + .DB $00,$00,$38,$6C,$C6,$C6,$C6,$FE,$C6,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$FC,$66,$66,$66,$7C,$66,$66,$66,$66,$FC,$00,$00,$00,$00 + .DB $00,$00,$3C,$66,$C2,$C0,$C0,$C0,$C0,$C2,$66,$3C,$00,$00,$00,$00 + .DB $00,$00,$F8,$6C,$66,$66,$66,$66,$66,$66,$6C,$F8,$00,$00,$00,$00 + .DB $00,$00,$FE,$66,$60,$64,$7C,$64,$60,$60,$66,$FE,$00,$00,$00,$00 + .DB $00,$00,$FE,$66,$60,$64,$7C,$64,$60,$60,$60,$F0,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C0,$C0,$C0,$CE,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$C6,$C6,$FE,$C6,$C6,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$3C,$18,$18,$18,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$00,$3C,$18,$18,$18,$18,$18,$18,$D8,$D8,$70,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$CC,$D8,$F0,$F0,$D8,$CC,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$F0,$60,$60,$60,$60,$60,$60,$62,$66,$FE,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$EE,$EE,$FE,$D6,$D6,$D6,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$E6,$E6,$F6,$DE,$CE,$CE,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$FC,$66,$66,$66,$66,$7C,$60,$60,$60,$F0,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C6,$C6,$C6,$C6,$D6,$D6,$7C,$06,$00,$00,$00 + .DB $00,$00,$FC,$66,$66,$66,$7C,$78,$6C,$66,$66,$E6,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C0,$C0,$70,$1C,$06,$06,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$7E,$5A,$18,$18,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$6C,$38,$10,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$C6,$D6,$D6,$D6,$FE,$EE,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$C6,$C6,$C6,$6C,$38,$38,$6C,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$66,$66,$66,$66,$66,$3C,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$00,$FE,$C6,$86,$0C,$18,$30,$60,$C2,$C6,$FE,$00,$00,$00,$00 + .DB $00,$00,$7C,$60,$60,$60,$60,$60,$60,$60,$60,$7C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$80,$C0,$60,$30,$18,$0C,$06,$02,$00,$00,$00,$00 + .DB $00,$00,$7C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$7C,$00,$00,$00,$00 + .DB $00,$10,$38,$6C,$C6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$00,$00 + .DB $00,$18,$18,$18,$0C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$78,$0C,$7C,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$00,$E0,$60,$60,$7C,$66,$66,$66,$66,$66,$FC,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7C,$C6,$C0,$C0,$C0,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$1C,$0C,$0C,$7C,$CC,$CC,$CC,$CC,$CC,$7E,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7C,$C6,$C6,$FE,$C0,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$1C,$36,$30,$30,$FC,$30,$30,$30,$30,$78,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$76,$CE,$C6,$C6,$CE,$76,$06,$C6,$7C,$00,$00 + .DB $00,$00,$E0,$60,$60,$7C,$66,$66,$66,$66,$66,$E6,$00,$00,$00,$00 + .DB $00,$00,$18,$18,$00,$38,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$00,$0C,$0C,$00,$1C,$0C,$0C,$0C,$0C,$0C,$CC,$CC,$78,$00,$00 + .DB $00,$00,$E0,$60,$60,$66,$66,$6C,$78,$6C,$66,$E6,$00,$00,$00,$00 + .DB $00,$00,$18,$18,$18,$18,$18,$18,$18,$18,$18,$1C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$6C,$FE,$D6,$D6,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$DC,$66,$66,$66,$66,$66,$66,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7C,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$DC,$66,$66,$66,$66,$7C,$60,$60,$F0,$00,$00 + .DB $00,$00,$00,$00,$00,$76,$CC,$CC,$CC,$CC,$7C,$0C,$0C,$1E,$00,$00 + .DB $00,$00,$00,$00,$00,$DC,$66,$60,$60,$60,$60,$F0,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7C,$C6,$C0,$7C,$06,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$30,$30,$30,$FC,$30,$30,$30,$30,$36,$1C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$CC,$CC,$CC,$CC,$CC,$CC,$76,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$C6,$C6,$C6,$C6,$6C,$38,$10,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$C6,$C6,$D6,$D6,$D6,$FE,$6C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$C6,$C6,$6C,$38,$6C,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$C6,$C6,$C6,$C6,$CE,$76,$06,$C6,$7C,$00,$00 + .DB $00,$00,$00,$00,$00,$FE,$86,$0C,$18,$30,$62,$FE,$00,$00,$00,$00 + .DB $00,$00,$0E,$18,$18,$18,$70,$18,$18,$18,$18,$0E,$00,$00,$00,$00 + .DB $00,$00,$18,$18,$18,$18,$00,$18,$18,$18,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$70,$18,$18,$18,$0E,$18,$18,$18,$18,$70,$00,$00,$00,$00 + .DB $00,$00,$76,$DC,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$10,$38,$38,$6C,$6C,$FE,$00,$00,$00,$00,$00 + .DB $00,$00,$3C,$66,$C0,$C0,$C0,$C6,$66,$3C,$18,$0C,$CC,$38,$00,$00 + .DB $00,$00,$C6,$00,$00,$C6,$C6,$C6,$C6,$C6,$CE,$76,$00,$00,$00,$00 + .DB $00,$0C,$18,$30,$00,$7C,$C6,$C6,$FE,$C0,$C6,$7C,$00,$00,$00,$00 + .DB $00,$30,$78,$CC,$00,$78,$0C,$7C,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$00,$CC,$00,$00,$78,$0C,$7C,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$60,$30,$18,$00,$78,$0C,$7C,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$38,$6C,$38,$00,$78,$0C,$7C,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$7C,$C6,$C0,$C0,$C6,$7C,$18,$0C,$6C,$38,$00,$00 + .DB $00,$30,$78,$CC,$00,$7C,$C6,$C6,$FE,$C0,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$CC,$00,$00,$7C,$C6,$C6,$FE,$C0,$C6,$7C,$00,$00,$00,$00 + .DB $00,$30,$18,$0C,$00,$7C,$C6,$C6,$FE,$C0,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$66,$00,$00,$38,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$18,$3C,$66,$00,$38,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$30,$18,$0C,$00,$38,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$C6,$00,$38,$6C,$C6,$C6,$C6,$FE,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $38,$6C,$38,$00,$38,$6C,$C6,$C6,$FE,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $0C,$18,$30,$00,$FE,$60,$60,$7C,$60,$60,$60,$FE,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$66,$DB,$1B,$7F,$D8,$D8,$DF,$76,$00,$00,$00,$00 + .DB $00,$00,$7E,$D8,$D8,$D8,$D8,$FE,$D8,$D8,$D8,$DE,$00,$00,$00,$00 + .DB $00,$30,$78,$CC,$00,$7C,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$C6,$00,$00,$7C,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$30,$18,$0C,$00,$7C,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$30,$78,$CC,$00,$C6,$C6,$C6,$C6,$C6,$CE,$76,$00,$00,$00,$00 + .DB $00,$60,$30,$18,$00,$C6,$C6,$C6,$C6,$C6,$CE,$76,$00,$00,$00,$00 + .DB $00,$18,$00,$3C,$18,$18,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$C6,$00,$7C,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$C6,$00,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$18,$18,$7C,$C6,$C0,$C0,$C6,$7C,$18,$18,$00,$00,$00,$00 + .DB $00,$38,$6C,$60,$60,$F0,$60,$60,$60,$66,$F6,$6C,$00,$00,$00,$00 + .DB $00,$66,$66,$66,$66,$3C,$18,$7E,$18,$3C,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$3E,$63,$63,$30,$1C,$06,$63,$63,$3E,$00,$1C,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$3E,$63,$38,$0E,$63,$3E,$00,$1C,$00,$00,$00 + .DB $00,$0C,$18,$30,$00,$78,$0C,$7C,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$0C,$18,$30,$00,$38,$18,$18,$18,$18,$18,$3C,$00,$00,$00,$00 + .DB $00,$0C,$18,$30,$00,$7C,$C6,$C6,$C6,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$18,$30,$60,$00,$CC,$CC,$CC,$CC,$CC,$DC,$76,$00,$00,$00,$00 + .DB $00,$00,$76,$DC,$00,$DC,$66,$66,$66,$66,$66,$66,$00,$00,$00,$00 + .DB $00,$76,$DC,$00,$C6,$C6,$E6,$F6,$DE,$CE,$C6,$C6,$00,$00,$00,$00 + .DB $00,$21,$1E,$00,$1E,$33,$60,$60,$67,$63,$33,$1D,$00,$00,$00,$00 + .DB $00,$42,$3C,$00,$3B,$66,$66,$66,$3E,$06,$66,$3C,$00,$00,$00,$00 + .DB $00,$00,$30,$30,$00,$30,$30,$30,$60,$C6,$C6,$7C,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$7E,$60,$60,$60,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$7E,$06,$06,$06,$00,$00,$00,$00,$00 + .DB $00,$60,$60,$62,$66,$6C,$18,$30,$60,$DC,$36,$0C,$18,$3E,$00,$00 + .DB $00,$60,$60,$62,$66,$6C,$18,$36,$6E,$DE,$36,$7E,$06,$06,$00,$00 + .DB $00,$00,$18,$18,$00,$18,$18,$3C,$3C,$3C,$3C,$18,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$36,$6C,$D8,$6C,$36,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$D8,$6C,$36,$6C,$D8,$00,$00,$00,$00,$00,$00 + .DB $11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44 + .DB $AA,$55,$AA,$55,$AA,$55,$AA,$55,$AA,$55,$AA,$55,$AA,$55,$AA,$55 + .DB $DD,$77,$DD,$77,$DD,$77,$DD,$77,$DD,$77,$DD,$77,$DD,$77,$DD,$77 + .DB $18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$18,$18,$F8,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$F8,$18,$F8,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $36,$36,$36,$36,$36,$36,$36,$F6,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $00,$00,$00,$00,$00,$00,$00,$FE,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $00,$00,$00,$00,$00,$F8,$18,$F8,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $36,$36,$36,$36,$36,$F6,$06,$F6,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $00,$00,$00,$00,$00,$FE,$06,$F6,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$F6,$06,$FE,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $36,$36,$36,$36,$36,$36,$36,$FE,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$F8,$18,$F8,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$F8,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$18,$18,$1F,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$18,$18,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$FF,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$18,$18,$1F,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$18,$18,$FF,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$1F,$18,$1F,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $36,$36,$36,$36,$36,$36,$36,$37,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$37,$30,$3F,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$3F,$30,$37,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$F7,$00,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$FF,$00,$F7,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$37,$30,$37,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $00,$00,$00,$00,$00,$FF,$00,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $36,$36,$36,$36,$36,$F7,$00,$F7,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $18,$18,$18,$18,$18,$FF,$00,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $36,$36,$36,$36,$36,$36,$36,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$FF,$00,$FF,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$FF,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$36,$36,$3F,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$1F,$18,$1F,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$1F,$18,$1F,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$3F,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $36,$36,$36,$36,$36,$36,$36,$FF,$36,$36,$36,$36,$36,$36,$36,$36 + .DB $18,$18,$18,$18,$18,$FF,$18,$FF,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$18,$18,$F8,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$1F,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 + .DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$76,$DC,$D8,$D8,$D8,$D8,$DC,$76,$00,$00,$00,$00 + .DB $00,$00,$78,$CC,$CC,$D8,$FC,$C6,$C6,$C6,$C6,$CC,$00,$00,$00,$00 + .DB $00,$00,$FE,$66,$62,$60,$60,$60,$60,$60,$60,$60,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$FE,$6C,$6C,$6C,$6C,$6C,$6C,$00,$00,$00,$00 + .DB $00,$00,$FE,$C6,$62,$30,$18,$18,$30,$62,$C6,$FE,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7E,$D8,$CC,$CC,$CC,$D8,$70,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$66,$66,$66,$66,$66,$7C,$60,$C0,$80,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$76,$DC,$18,$18,$18,$18,$18,$00,$00,$00,$00 + .DB $00,$00,$FE,$38,$38,$6C,$C6,$C6,$6C,$38,$38,$FE,$00,$00,$00,$00 + .DB $00,$00,$00,$38,$6C,$C6,$C6,$FE,$C6,$C6,$6C,$38,$00,$00,$00,$00 + .DB $00,$00,$38,$6C,$C6,$C6,$C6,$C6,$6C,$6C,$6C,$EE,$00,$00,$00,$00 + .DB $00,$00,$3E,$60,$60,$3C,$66,$C6,$C6,$C6,$CC,$78,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7E,$DB,$DB,$DB,$7E,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$02,$06,$7C,$CE,$DE,$F6,$F6,$7C,$60,$C0,$00,$00,$00,$00 + .DB $00,$00,$00,$1C,$30,$60,$60,$7C,$60,$60,$30,$1C,$00,$00,$00,$00 + .DB $00,$00,$7C,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$C6,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$FE,$00,$00,$FE,$00,$00,$FE,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$18,$18,$7E,$18,$18,$00,$00,$7E,$00,$00,$00,$00 + .DB $00,$00,$30,$18,$0C,$06,$0C,$18,$30,$00,$00,$7E,$00,$00,$00,$00 + .DB $00,$00,$0C,$18,$30,$60,$30,$18,$0C,$00,$00,$7E,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$0C,$1E,$1A,$18,$18,$18,$18,$18,$18,$18,$18,$18 + .DB $18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$58,$78,$30,$00,$00,$00 + .DB $00,$00,$00,$00,$18,$18,$00,$7E,$00,$18,$18,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$76,$DC,$00,$76,$DC,$00,$00,$00,$00,$00 + .DB $00,$00,$78,$CC,$CC,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$18,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$1F,$18,$18,$18,$18,$18,$D8,$D8,$78,$38,$18,$00,$00,$00 + .DB $00,$00,$D8,$6C,$6C,$6C,$6C,$6C,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$70,$D8,$18,$30,$60,$F8,$00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$7E,$7E,$7E,$7E,$7E,$7E,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 diff --git a/Source/HBIOS/font8x8c.asm b/Source/HBIOS/font8x8c.asm new file mode 100644 index 00000000..b53b332d --- /dev/null +++ b/Source/HBIOS/font8x8c.asm @@ -0,0 +1,69 @@ + .db $0F, $00, $F1, $F8, $0C, $3C, $3C, $30, $21, $F0, $F0, $F0, $22, $F8, $20 + .db $01, $5C, $21, $F2, $F0, $F0, $05, $F2, $41, $D2, $F2, $FF, $FF, $F8, $20 + .db $70, $F8, $70, $20, $1F, $5F, $F8, $D8, $88, $00, $88, $D8, $F8, $00, $73 + .db $59, $18, $18, $20, $60, $90, $60, $D9, $59, $00, $50, $20, $20, $D8, $27 + .db $81, $18, $A8, $50, $50, $D8, $E2, $4A, $A8, $A8, $F1, $FC, $FC, $38, $10 + .db $30, $70, $F0, $70, $DF, $49, $00, $D3, $43, $CF, $09, $50, $00, $D4, $40 + .db $D8, $FC, $78, $A8, $A8, $68, $28, $28, $00, $44, $53, $20, $CF, $44, $60 + .db $43, $58, $41, $D0, $03, $43, $50, $42, $60, $FA, $20, $10, $18, $FC, $18 + .db $10, $F8, $60, $FC, $60, $07, $FF, $11, $18, $1D, $30, $78, $78, $30, $20 + .db $80, $FB, $D8, $D8, $50, $1B, $0E, $48, $48, $FC, $59, $32, $20, $78, $A0 + .db $78, $24, $F8, $17, $59, $C8, $D0, $20, $58, $98, $D8, $00, $6F, $48, $50 + .db $27, $69, $78, $E8, $6B, $40, $C5, $4B, $10, $81, $41, $48, $0A, $10, $28 + .db $20, $C0, $69, $A8, $E8, $51, $A8, $20, $80, $FD, $20, $F8, $20, $45, $D3 + .db $4F, $70, $93, $05, $61, $99, $50, $04, $08, $C6, $11, $40, $80, $10, $98 + .db $A8, $F8, $51, $C8, $70, $51, $42, $B7, $28, $F8, $08, $88, $3C, $33, $60 + .db $80, $59, $62, $70, $08, $88, $70, $00, $30, $50, $90, $F8, $A5, $3A, $00 + .db $F8, $80, $80, $F0, $8C, $30, $38, $40, $E9, $88, $53, $F8, $08, $86, $41 + .db $D0, $0A, $88, $EC, $22, $29, $78, $0E, $42, $A4, $02, $25, $CA, $52, $60 + .db $00, $9A, $72, $40, $20, $EF, $72, $FC, $00, $C0, $21, $42, $86, $42, $98 + .db $49, $30, $52, $21, $C0, $50, $B8, $B0, $A5, $69, $70, $58, $18, $88, $F8 + .db $88, $F0, $50, $00, $F0, $07, $E8, $70, $29, $F0, $08, $80, $48, $32, $88 + .db $70, $EA, $48, $E8, $F8, $E8, $E0, $2A, $F8, $C3, $29, $F0, $22, $0E, $4A + .db $B8, $88, $20, $44, $C8, $54, $F8, $20, $40, $11, $1C, $08, $F4, $22, $F8 + .db $2F, $90, $A0, $C0, $A0, $90, $09, $80, $42, $C8, $5A, $18, $88, $D8, $A8 + .db $88, $A0, $51, $88, $C8, $10, $52, $98, $88, $48, $EA, $88, $41, $33, $42 + .db $B0, $23, $20, $48, $32, $78, $04, $32, $A0, $90, $0F, $41, $56, $42, $18 + .db $F3, $20, $20, $42, $D1, $45, $90, $81, $E5, $23, $8C, $41, $B7, $29, $50 + .db $00, $9C, $E8, $50, $23, $01, $FF, $41, $58, $61, $A8, $41, $90, $12, $78 + .db $40, $48, $78, $0E, $EA, $80, $81, $FF, $B8, $0A, $08, $4A, $78, $18, $66 + .db $0A, $63, $EC, $3D, $08, $60, $60, $10, $28, $F0, $10, $52, $88, $70, $50 + .db $42, $6D, $02, $6A, $70, $E8, $42, $CB, $61, $A5, $02, $88, $30, $88, $F8 + .db $82, $F2, $FF, $49, $E0, $A5, $41, $CF, $FA, $38, $48, $48, $38, $08, $F0 + .db $B0, $C8, $41, $B4, $E8, $20, $29, $20, $01, $40, $94, $68, $18, $FF, $FB + .db $48, $30, $80, $80, $20, $5F, $04, $42, $90, $48, $50, $07, $43, $84, $45 + .db $D0, $63, $45, $02, $C0, $61, $8E, $41, $AF, $4B, $60, $B0, $2B, $08, $F1 + .db $80, $80, $50, $60, $80, $65, $6A, $60, $4E, $41, $90, $43, $C0, $08, $90 + .db $FC, $29, $68, $43, $0D, $23, $CF, $41, $00, $82, $A1, $E8, $48, $E9, $48 + .db $21, $5F, $4A, $40, $C8, $69, $F8, $FF, $8A, $F8, $68, $EB, $40, $00, $FE + .db $23, $01, $96, $02, $50, $00, $6C, $6D, $03, $F5, $F2, $70, $50, $F8, $70 + .db $00, $FC, $80, $BC, $A0, $AC, $A8, $8D, $FC, $F3, $E0, $1F, $FC, $04, $F4 + .db $14, $D4, $54, $F4, $1A, $12, $D4, $14, $F4, $04, $2A, $FF, $F3, $41, $D5 + .db $1F, $AC, $A0, $BC, $80, $FC, $A8, $F0, $4B, $AC, $C0, $41, $D9, $43, $C8 + .db $4E, $00, $B8, $0C, $80, $FF, $6E, $FC, $96, $0F, $04, $C0, $06, $46, $D1 + .db $23, $CA, $27, $3F, $41, $DC, $43, $C5, $63, $53, $07, $FC, $3B, $74, $20 + .db $40, $08, $6A, $10, $41, $6A, $20, $C8, $63, $68, $22, $E8, $88, $E9, $74 + .db $63, $50, $22, $0F, $8D, $C8, $48, $48, $7C, $76, $64, $43, $22, $CA, $62 + .db $A2, $09, $40, $46, $3B, $46, $14, $70, $88, $90, $ED, $30, $88, $1C, $AC + .db $21, $71, $58, $B8, $2A, $8C, $30, $E6, $9E, $19, $00, $14, $28, $50, $A0 + .db $50, $28, $14, $00, $DA, $02, $3C, $0F, $00, $54, $AA, $0D, $AA, $B0, $1B + .db $B6, $6C, $DA, $EF, $0F, $18, $2C, $0D, $F8, $02, $BF, $09, $6C, $29, $EC + .db $EC, $63, $CB, $24, $08, $FC, $75, $23, $0A, $0C, $CE, $06, $01, $44, $F0 + .db $0E, $EE, $23, $62, $C7, $74, $64, $64, $C1, $A1, $EE, $31, $01, $44, $04 + .db $A5, $E0, $18, $ED, $30, $6F, $30, $54, $26, $4E, $21, $23, $80, $26, $24 + .db $54, $23, $1D, $1F, $D8, $D8, $DC, $D8, $54, $DC, $C0, $A5, $3D, $08, $FC + .db $C0, $DC, $66, $55, $21, $C0, $22, $22, $4E, $85, $7F, $23, $80, $E9, $00 + .db $42, $91, $25, $A6, $EA, $29, $43, $87, $04, $00, $54, $26, $44, $79, $EA + .db $3C, $3F, $00, $3E, $30, $3E, $3D, $44, $7E, $44, $B9, $84, $F0, $86, $DF + .db $38, $43, $54, $05, $21, $8D, $21, $0F, $C0, $F0, $EF, $0C, $20, $04, $B1 + .db $00, $68, $FE, $A8, $82, $70, $E8, $B0, $FA, $3D, $F0, $40, $F0, $90, $80 + .db $80, $8A, $F8, $7F, $91, $48, $00, $EF, $B0, $EA, $40, $A2, $50, $EC, $7C + .db $8A, $00, $E2, $48, $61, $18, $58, $74, $98, $10, $10, $1C, $55, $F8, $2C + .db $10, $38, $44, $38, $10, $58, $30, $CC, $CC, $FC, $CC, $CC, $38, $00, $78 + .db $84, $84, $84, $48, $48, $84, $7B, $28, $40, $43, $28, $44, $61, $5A, $F9 + .db $0E, $6C, $92, $92, $82, $CF, $B3, $58, $68, $E2, $40, $30, $F8, $80, $42 + .db $26, $09, $CC, $FE, $41, $0A, $04, $40, $B4, $A9, $7C, $EE, $1A, $B3, $FE + .db $00, $61, $21, $CF, $A9, $10, $41, $22, $8E, $73, $18, $34, $5B, $65, $6E + .db $F1, $B0, $70, $AB, $FC, $1F, $12, $64, $98, $EB, $54, $00, $38, $9B, $01 + .db $4D, $38, $01, $24, $CE, $89, $0E, $7B, $9B, $0E, $28, $18, $08, $90, $A1 + .db $E0, $3D, $62, $12, $49, $3C, $85, $6F, $00, $E8, $05, $FF, $47, $00, $E8 diff --git a/Source/HBIOS/font8x8u.asm b/Source/HBIOS/font8x8u.asm new file mode 100644 index 00000000..686adaf8 --- /dev/null +++ b/Source/HBIOS/font8x8u.asm @@ -0,0 +1,258 @@ + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x00(0) + .DB 000h,000h,000h,03ch,03ch,030h,030h,030h ; 0x01(1) + .DB 000h,000h,000h,0f0h,0f0h,030h,030h,030h ; 0x02(2) + .DB 030h,030h,030h,03ch,03ch,000h,000h,000h ; 0x03(3) + .DB 030h,030h,030h,0f0h,0f0h,000h,000h,000h ; 0x04(4) + .DB 030h,030h,030h,030h,030h,030h,030h,030h ; 0x05(5) + .DB 000h,000h,000h,0ffh,0ffh,000h,000h,000h ; 0x06(6) + .DB 000h,020h,070h,0f8h,070h,020h,000h,000h ; 0x07(7) + .DB 0f8h,0d8h,088h,000h,088h,0d8h,0f8h,000h ; 0x08(8) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x09(9) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x0a(10) + .DB 018h,018h,020h,060h,090h,060h,000h,000h ; 0x0b(11) + .DB 020h,050h,020h,020h,070h,020h,000h,000h ; 0x0c(12) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x0d(13) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x0e(14) + .DB 0a8h,050h,050h,0d8h,050h,050h,0a8h,000h ; 0x0f(15) + .DB 030h,030h,030h,0fch,0fch,030h,030h,030h ; 0x10(16) + .DB 010h,030h,070h,0f0h,070h,030h,010h,000h ; 0x11(17) + .DB 020h,070h,020h,020h,020h,070h,020h,000h ; 0x12(18) + .DB 050h,050h,050h,050h,000h,050h,000h,000h ; 0x13(19) + .DB 078h,0a8h,0a8h,068h,028h,028h,000h,000h ; 0x14(20) + .DB 030h,030h,030h,0fch,0fch,000h,000h,000h ; 0x15(21) + .DB 000h,000h,000h,0fch,0fch,030h,030h,030h ; 0x16(22) + .DB 030h,030h,030h,0f0h,0f0h,030h,030h,030h ; 0x17(23) + .DB 020h,070h,020h,020h,020h,020h,020h,020h ; 0x18(24) + .DB 030h,030h,030h,03ch,03ch,030h,030h,030h ; 0x19(25) + .DB 000h,010h,018h,0fch,018h,010h,000h,000h ; 0x1a(26) + .DB 000h,020h,060h,0fch,060h,020h,000h,000h ; 0x1b(27) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x1c(28) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x1d(29) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x1e(30) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x1f(31) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x20(32) + .DB 030h,078h,078h,030h,000h,030h,000h,000h ; 0x21(33) + .DB 0d8h,0d8h,050h,000h,000h,000h,000h,000h ; 0x22(34) + .DB 048h,048h,0fch,048h,048h,0fch,048h,048h ; 0x23(35) + .DB 020h,078h,0a0h,078h,024h,0f8h,020h,000h ; 0x24(36) + .DB 000h,0c8h,0d0h,020h,058h,098h,000h,000h ; 0x25(37) + .DB 030h,048h,048h,050h,060h,090h,078h,000h ; 0x26(38) + .DB 030h,030h,040h,000h,000h,000h,000h,000h ; 0x27(39) + .DB 010h,020h,020h,020h,020h,020h,010h,000h ; 0x28(40) + .DB 020h,010h,010h,010h,010h,010h,020h,000h ; 0x29(41) + .DB 020h,0a8h,070h,0f8h,070h,0a8h,020h,000h ; 0x2a(42) + .DB 000h,020h,020h,0f8h,020h,020h,000h,000h ; 0x2b(43) + .DB 000h,000h,000h,000h,000h,030h,030h,040h ; 0x2c(44) + .DB 000h,000h,000h,070h,000h,000h,000h,000h ; 0x2d(45) + .DB 000h,000h,000h,000h,000h,030h,030h,000h ; 0x2e(46) + .DB 004h,008h,010h,020h,040h,080h,000h,000h ; 0x2f(47) + .DB 070h,098h,0a8h,0a8h,0a8h,0c8h,070h,000h ; 0x30(48) + .DB 020h,060h,020h,020h,020h,020h,0f8h,000h ; 0x31(49) + .DB 070h,088h,008h,010h,060h,080h,0f8h,000h ; 0x32(50) + .DB 070h,088h,008h,070h,008h,088h,070h,000h ; 0x33(51) + .DB 030h,050h,090h,0f8h,010h,010h,010h,000h ; 0x34(52) + .DB 0f8h,080h,080h,0f0h,008h,088h,070h,000h ; 0x35(53) + .DB 038h,040h,080h,0f0h,088h,088h,070h,000h ; 0x36(54) + .DB 0f8h,008h,010h,020h,020h,020h,020h,000h ; 0x37(55) + .DB 070h,088h,088h,070h,088h,088h,070h,000h ; 0x38(56) + .DB 070h,088h,088h,078h,008h,088h,070h,000h ; 0x39(57) + .DB 000h,030h,030h,000h,030h,030h,000h,000h ; 0x3a(58) + .DB 000h,030h,030h,000h,030h,030h,060h,000h ; 0x3b(59) + .DB 010h,020h,040h,080h,040h,020h,010h,000h ; 0x3c(60) + .DB 000h,000h,0fch,000h,0fch,000h,000h,000h ; 0x3d(61) + .DB 040h,020h,010h,008h,010h,020h,040h,000h ; 0x3e(62) + .DB 070h,088h,008h,030h,020h,000h,020h,000h ; 0x3f(63) + .DB 070h,088h,0b8h,0b0h,080h,080h,070h,000h ; 0x40(64) + .DB 020h,050h,088h,0f8h,088h,088h,088h,000h ; 0x41(65) + .DB 0f0h,048h,048h,070h,048h,048h,0f0h,000h ; 0x42(66) + .DB 070h,088h,080h,080h,080h,088h,070h,000h ; 0x43(67) + .DB 0f0h,048h,048h,048h,048h,048h,0f0h,000h ; 0x44(68) + .DB 0f8h,088h,080h,0e0h,080h,088h,0f8h,000h ; 0x45(69) + .DB 0f8h,088h,080h,0f0h,080h,080h,080h,000h ; 0x46(70) + .DB 070h,088h,080h,0b8h,088h,088h,070h,000h ; 0x47(71) + .DB 088h,088h,088h,0f8h,088h,088h,088h,000h ; 0x48(72) + .DB 0f8h,020h,020h,020h,020h,020h,0f8h,000h ; 0x49(73) + .DB 01ch,008h,008h,008h,008h,088h,070h,000h ; 0x4a(74) + .DB 088h,090h,0a0h,0c0h,0a0h,090h,088h,000h ; 0x4b(75) + .DB 080h,080h,080h,080h,080h,088h,0f8h,000h ; 0x4c(76) + .DB 088h,0d8h,0a8h,088h,088h,088h,088h,000h ; 0x4d(77) + .DB 088h,0c8h,0a8h,0a8h,0a8h,098h,088h,000h ; 0x4e(78) + .DB 070h,088h,088h,088h,088h,088h,070h,000h ; 0x4f(79) + .DB 0f0h,088h,088h,0f0h,080h,080h,080h,000h ; 0x50(80) + .DB 070h,088h,088h,088h,0a8h,098h,078h,004h ; 0x51(81) + .DB 0f0h,088h,088h,0f0h,0a0h,090h,088h,000h ; 0x52(82) + .DB 070h,088h,040h,020h,010h,088h,070h,000h ; 0x53(83) + .DB 0f8h,020h,020h,020h,020h,020h,020h,000h ; 0x54(84) + .DB 088h,088h,088h,088h,088h,088h,070h,000h ; 0x55(85) + .DB 088h,088h,088h,050h,050h,050h,020h,000h ; 0x56(86) + .DB 088h,088h,088h,0a8h,0a8h,0a8h,050h,000h ; 0x57(87) + .DB 088h,088h,050h,020h,050h,088h,088h,000h ; 0x58(88) + .DB 088h,088h,050h,020h,020h,020h,020h,000h ; 0x59(89) + .DB 0f8h,088h,010h,020h,040h,088h,0f8h,000h ; 0x5a(90) + .DB 078h,040h,040h,040h,040h,040h,078h,000h ; 0x5b(91) + .DB 000h,080h,040h,020h,010h,008h,000h,000h ; 0x5c(92) + .DB 078h,008h,008h,008h,008h,008h,078h,000h ; 0x5d(93) + .DB 020h,050h,088h,000h,000h,000h,000h,000h ; 0x5e(94) + .DB 000h,000h,000h,000h,000h,000h,0fch,000h ; 0x5f(95) + .DB 060h,060h,010h,000h,000h,000h,000h,000h ; 0x60(96) + .DB 000h,000h,0f0h,008h,078h,088h,070h,000h ; 0x61(97) + .DB 080h,080h,080h,0f0h,088h,088h,0f0h,000h ; 0x62(98) + .DB 000h,000h,000h,070h,080h,080h,070h,000h ; 0x63(99) + .DB 008h,008h,008h,078h,088h,088h,078h,000h ; 0x64(100) + .DB 000h,000h,070h,088h,0f8h,080h,070h,000h ; 0x65(101) + .DB 000h,030h,048h,0e0h,040h,040h,040h,000h ; 0x66(102) + .DB 000h,000h,038h,048h,048h,038h,008h,070h ; 0x67(103) + .DB 000h,080h,080h,0b0h,0c8h,088h,088h,000h ; 0x68(104) + .DB 000h,000h,020h,000h,060h,020h,070h,000h ; 0x69(105) + .DB 000h,008h,000h,018h,008h,008h,048h,030h ; 0x6a(106) + .DB 080h,080h,090h,0a0h,0c0h,0a0h,090h,000h ; 0x6b(107) + .DB 020h,020h,020h,020h,020h,020h,020h,000h ; 0x6c(108) + .DB 000h,000h,000h,050h,0a8h,0a8h,088h,000h ; 0x6d(109) + .DB 000h,000h,000h,0b0h,0c8h,088h,088h,000h ; 0x6e(110) + .DB 000h,000h,000h,070h,088h,088h,070h,000h ; 0x6f(111) + .DB 000h,000h,070h,048h,048h,070h,040h,040h ; 0x70(112) + .DB 000h,060h,038h,048h,048h,038h,008h,008h ; 0x71(113) + .DB 000h,000h,000h,0b0h,0c8h,080h,080h,000h ; 0x72(114) + .DB 000h,000h,060h,080h,060h,010h,060h,000h ; 0x73(115) + .DB 000h,000h,040h,0e0h,040h,040h,020h,000h ; 0x74(116) + .DB 000h,000h,000h,090h,090h,090h,068h,000h ; 0x75(117) + .DB 000h,000h,000h,088h,088h,050h,020h,000h ; 0x76(118) + .DB 000h,000h,000h,088h,0a8h,0a8h,050h,000h ; 0x77(119) + .DB 000h,000h,000h,048h,030h,030h,048h,000h ; 0x78(120) + .DB 000h,000h,088h,050h,020h,040h,080h,000h ; 0x79(121) + .DB 000h,000h,0f8h,010h,020h,040h,0f8h,000h ; 0x7a(122) + .DB 010h,020h,020h,040h,020h,020h,010h,000h ; 0x7b(123) + .DB 020h,020h,020h,000h,020h,020h,020h,000h ; 0x7c(124) + .DB 040h,020h,020h,010h,020h,020h,040h,000h ; 0x7d(125) + .DB 06ch,090h,000h,000h,000h,000h,000h,000h ; 0x7e(126) + .DB 070h,050h,050h,050h,050h,050h,070h,000h ; 0x7f(127) + .DB 0fch,080h,0bch,0a0h,0ach,0a8h,0a8h,0a8h ; 0x80(128) + .DB 0fch,000h,0fch,000h,0fch,000h,000h,000h ; 0x81(129) + .DB 0fch,004h,0f4h,014h,0d4h,054h,054h,054h ; 0x82(130) + .DB 054h,054h,054h,054h,054h,054h,054h,054h ; 0x83(131) + .DB 054h,054h,054h,0d4h,014h,0f4h,004h,0fch ; 0x84(132) + .DB 000h,000h,000h,0ffh,000h,0ffh,000h,0ffh ; 0x85(133) + .DB 0a8h,0a8h,0a8h,0ach,0a0h,0bch,080h,0fch ; 0x86(134) + .DB 0a8h,0a8h,0a8h,0a8h,0a8h,0a8h,0a8h,0a8h ; 0x87(135) + .DB 0a8h,0a8h,0ach,0a0h,0ach,0a8h,0a8h,0a8h ; 0x88(136) + .DB 054h,054h,0d4h,014h,0d4h,054h,054h,054h ; 0x89(137) + .DB 000h,000h,0fch,000h,0fch,000h,000h,000h ; 0x8a(138) + .DB 0fch,080h,080h,080h,080h,080h,080h,080h ; 0x8b(139) + .DB 0fch,000h,000h,000h,000h,000h,000h,000h ; 0x8c(140) + .DB 0fch,004h,004h,004h,004h,004h,004h,004h ; 0x8d(141) + .DB 004h,004h,004h,004h,004h,004h,004h,004h ; 0x8e(142) + .DB 004h,004h,004h,004h,004h,004h,004h,0fch ; 0x8f(143) + .DB 000h,000h,000h,000h,000h,000h,000h,0fch ; 0x90(144) + .DB 080h,080h,080h,080h,080h,080h,080h,0fch ; 0x91(145) + .DB 080h,080h,080h,080h,080h,080h,080h,080h ; 0x92(146) + .DB 080h,080h,080h,0fch,080h,080h,080h,080h ; 0x93(147) + .DB 004h,004h,004h,0fch,004h,004h,004h,004h ; 0x94(148) + .DB 000h,000h,000h,0fch,000h,000h,000h,000h ; 0x95(149) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x96(150) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x97(151) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x98(152) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x99(153) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x9a(154) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x9b(155) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x9c(156) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x9d(157) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x9e(158) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0x9f(159) + .DB 020h,040h,0f0h,008h,078h,088h,070h,000h ; 0xa0(160) + .DB 010h,020h,000h,060h,020h,020h,0f8h,000h ; 0xa1(161) + .DB 010h,020h,000h,070h,088h,088h,070h,000h ; 0xa2(162) + .DB 010h,020h,000h,088h,088h,088h,074h,000h ; 0xa3(163) + .DB 010h,020h,000h,0b0h,0c8h,088h,088h,000h ; 0xa4(164) + .DB 010h,020h,000h,0c8h,0a8h,098h,088h,000h ; 0xa5(165) + .DB 070h,088h,088h,07ch,000h,0fch,000h,000h ; 0xa6(166) + .DB 070h,088h,088h,070h,000h,0fch,000h,000h ; 0xa7(167) + .DB 020h,000h,020h,020h,040h,088h,070h,000h ; 0xa8(168) + .DB 000h,000h,000h,000h,0fch,080h,080h,080h ; 0xa9(169) + .DB 000h,000h,000h,000h,0fch,004h,004h,004h ; 0xaa(170) + .DB 088h,090h,0a8h,054h,088h,01ch,000h,000h ; 0xab(171) + .DB 088h,090h,0a8h,058h,0b8h,008h,000h,000h ; 0xac(172) + .DB 030h,000h,030h,078h,078h,030h,000h,000h ; 0xad(173) + .DB 014h,028h,050h,0a0h,050h,028h,014h,000h ; 0xae(174) + .DB 0a0h,050h,028h,014h,028h,050h,0a0h,000h ; 0xaf(175) + .DB 054h,0aah,054h,0aah,054h,0aah,054h,0aah ; 0xb0(176) + .DB 0aah,054h,0aah,054h,0aah,054h,0aah,054h ; 0xb1(177) + .DB 0b6h,06ch,0dah,0b6h,06ch,0dah,0b6h,06ch ; 0xb2(178) + .DB 018h,018h,018h,018h,018h,018h,018h,018h ; 0xb3(179) + .DB 018h,018h,018h,018h,0f8h,018h,018h,018h ; 0xb4(180) + .DB 018h,018h,018h,0f8h,018h,0f8h,018h,018h ; 0xb5(181) + .DB 06ch,06ch,06ch,06ch,0ech,06ch,06ch,06ch ; 0xb6(182) + .DB 000h,000h,000h,000h,0fch,06ch,06ch,06ch ; 0xb7(183) + .DB 000h,000h,000h,0fch,06ch,0ech,06ch,06ch ; 0xb8(184) + .DB 06ch,06ch,0ech,00ch,0ech,06ch,06ch,06ch ; 0xb9(185) + .DB 06ch,06ch,06ch,06ch,06ch,06ch,06ch,06ch ; 0xba(186) + .DB 000h,000h,0fch,00eh,0eeh,06ch,06ch,06ch ; 0xbb(187) + .DB 06ch,06ch,0ech,00ch,0fch,000h,000h,000h ; 0xbc(188) + .DB 064h,064h,0fch,000h,000h,000h,000h,000h ; 0xbd(189) + .DB 030h,030h,0f0h,030h,030h,0f0h,000h,000h ; 0xbe(190) + .DB 000h,000h,000h,000h,0f0h,030h,030h,030h ; 0xbf(191) + .DB 030h,030h,030h,030h,03ch,000h,000h,000h ; 0xc0(192) + .DB 030h,030h,030h,030h,0fch,000h,000h,000h ; 0xc1(193) + .DB 000h,000h,000h,000h,0fch,030h,030h,030h ; 0xc2(194) + .DB 030h,030h,030h,030h,03ch,030h,030h,030h ; 0xc3(195) + .DB 000h,000h,000h,000h,0fch,000h,000h,000h ; 0xc4(196) + .DB 030h,030h,030h,030h,0fch,030h,030h,030h ; 0xc5(197) + .DB 030h,030h,03ch,030h,03ch,030h,030h,030h ; 0xc6(198) + .DB 0d8h,0d8h,0dch,0d8h,0d8h,0d8h,0d8h,0d8h ; 0xc7(199) + .DB 0d8h,0d8h,0d8h,0dch,0c0h,0fch,000h,000h ; 0xc8(200) + .DB 000h,000h,000h,0fch,0c0h,0dch,0d8h,0d8h ; 0xc9(201) + .DB 0d8h,0d8h,0d8h,0dch,0c0h,000h,0fch,000h ; 0xca(202) + .DB 000h,000h,000h,000h,000h,000h,0fch,000h ; 0xcb(203) + .DB 0d8h,0d8h,0d8h,0dch,0c0h,0dch,0d8h,0d8h ; 0xcc(204) + .DB 000h,000h,000h,0fch,000h,0fch,000h,000h ; 0xcd(205) + .DB 0d8h,0d8h,0d8h,0dch,000h,0dch,0d8h,0d8h ; 0xce(206) + .DB 030h,030h,030h,0fch,000h,000h,0fch,000h ; 0xcf(207) + .DB 0d8h,0d8h,0d8h,0fch,000h,000h,000h,000h ; 0xd0(208) + .DB 000h,000h,0fch,000h,000h,0fch,030h,030h ; 0xd1(209) + .DB 000h,000h,000h,000h,000h,0fch,0d8h,0d8h ; 0xd2(210) + .DB 0d8h,0d8h,0d8h,0fch,000h,000h,000h,000h ; 0xd3(211) + .DB 030h,030h,030h,03ch,030h,030h,03ch,000h ; 0xd4(212) + .DB 000h,000h,000h,03eh,030h,03eh,030h,030h ; 0xd5(213) + .DB 000h,000h,000h,000h,000h,0fch,0d8h,0d8h ; 0xd6(214) + .DB 0d8h,0d8h,0d8h,0d8h,0dch,0d8h,0d8h,0d8h ; 0xd7(215) + .DB 030h,030h,0fch,000h,000h,0fch,030h,030h ; 0xd8(216) + .DB 030h,030h,030h,0f0h,000h,000h,000h,000h ; 0xd9(217) + .DB 000h,000h,000h,03ch,030h,030h,030h,030h ; 0xda(218) + .DB 0fch,0fch,0fch,0fch,0fch,0fch,0fch,0fch ; 0xdb(219) + .DB 000h,000h,000h,0fch,0fch,0fch,0c0h,0c0h ; 0xdc(220) + .DB 0c0h,0c0h,0c0h,0c0h,0c0h,0c0h,0c0h,0c0h ; 0xdd(221) + .DB 00ch,00ch,00ch,00ch,00ch,00ch,00ch,00ch ; 0xde(222) + .DB 00ch,00ch,00ch,00ch,0fch,0fch,0fch,000h ; 0xdf(223) + .DB 000h,000h,000h,068h,090h,090h,068h,000h ; 0xe0(224) + .DB 070h,088h,088h,0b0h,088h,088h,0f0h,040h ; 0xe1(225) + .DB 0f0h,090h,080h,080h,080h,080h,080h,000h ; 0xe2(226) + .DB 0f8h,050h,050h,050h,050h,048h,000h,000h ; 0xe3(227) + .DB 0f8h,088h,040h,020h,040h,088h,0f8h,000h ; 0xe4(228) + .DB 000h,000h,000h,07ch,088h,088h,070h,000h ; 0xe5(229) + .DB 000h,000h,000h,088h,088h,088h,070h,080h ; 0xe6(230) + .DB 000h,000h,074h,098h,010h,010h,01ch,000h ; 0xe7(231) + .DB 0fch,010h,038h,044h,038h,010h,0fch,000h ; 0xe8(232) + .DB 030h,0cch,0cch,0fch,0cch,0cch,038h,000h ; 0xe9(233) + .DB 078h,084h,084h,084h,048h,048h,084h,000h ; 0xea(234) + .DB 03ch,040h,038h,044h,044h,044h,038h,000h ; 0xeb(235) + .DB 000h,000h,06ch,092h,092h,06ch,000h,000h ; 0xec(236) + .DB 000h,000h,000h,038h,058h,068h,070h,000h ; 0xed(237) + .DB 038h,040h,080h,0f8h,080h,040h,038h,000h ; 0xee(238) + .DB 000h,000h,030h,0cch,0cch,0cch,0cch,000h ; 0xef(239) + .DB 0fch,000h,000h,0fch,000h,000h,0fch,000h ; 0xf0(240) + .DB 010h,010h,07ch,010h,010h,000h,0feh,000h ; 0xf1(241) + .DB 020h,010h,008h,010h,020h,000h,0feh,000h ; 0xf2(242) + .DB 010h,020h,040h,020h,010h,000h,0feh,000h ; 0xf3(243) + .DB 018h,034h,030h,030h,030h,030h,030h,030h ; 0xf4(244) + .DB 030h,030h,030h,030h,030h,030h,0b0h,070h ; 0xf5(245) + .DB 030h,030h,000h,0fch,000h,030h,030h,000h ; 0xf6(246) + .DB 000h,064h,098h,000h,064h,098h,000h,000h ; 0xf7(247) + .DB 038h,044h,044h,038h,000h,000h,000h,000h ; 0xf8(248) + .DB 000h,038h,038h,000h,000h,000h,000h,000h ; 0xf9(249) + .DB 000h,000h,038h,000h,000h,000h,000h,000h ; 0xfa(250) + .DB 00eh,008h,008h,048h,028h,018h,008h,000h ; 0xfb(251) + .DB 000h,000h,000h,0b0h,048h,048h,048h,000h ; 0xfc(252) + .DB 000h,000h,0f0h,03ch,040h,080h,0f8h,000h ; 0xfd(253) + .DB 0fch,0fch,0fch,0fch,0fch,0fch,0fch,0fch ; 0xfe(254) + .DB 000h,000h,000h,000h,000h,000h,000h,000h ; 0xff(255) + + diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 294cacaf..c701203b 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -54,6 +54,7 @@ ; - config/_.asm ; - cfg_.asm ; - .asm +; - .asm ; - util.asm ; - time.asm ; - bcd.asm @@ -61,6 +62,7 @@ ; - encode.asm ; - [xio|mio].asm ; - dsky.asm +; - unlzsa2s.asm ; ; ; INCLUDE GENERIC STUFF @@ -2862,7 +2864,11 @@ VGA_FONT: #IF (CVDUENABLE) CVDU_FONT: #ENDIF - #INCLUDE "font8x16.asm" + #IF USEZLSA2 + #INCLUDE "font8x16c.asm" + #ELSE + #INCLUDE "font8x16u.asm" + #ENDIF .ECHO "8X16 " #ENDIF ; @@ -2871,7 +2877,11 @@ CVDU_FONT: #IF (VGAENABLE) #IF (VGASIZ=V80X43)) VGA_FONT: - #INCLUDE "font8X11.asm" + #IF USEZLSA2 + #INCLUDE "font8x11c.asm" + #ELSE + #INCLUDE "font8x11u.asm" + #ENDIF .ECHO "8X11 " #ENDIF #ENDIF @@ -2885,7 +2895,11 @@ VGA_FONT: #IF (TMSENABLE) TMS_FONT: #ENDIF - #INCLUDE "font_8x8.asm" + #IF USEZLSA2 + #INCLUDE "font8x8c.asm" + #ELSE + #INCLUDE "font8x8u.asm" + #ENDIF .ECHO "8X8 " #ENDIF ; @@ -3064,6 +3078,12 @@ SIZ_CTC .EQU $ - ORG_CTC #IF (DSKYENABLE) #DEFINE DSKY_KBD #INCLUDE "dsky.asm" +; +; INCLUDE ZLSA2 decompression engine if required. +; +#ENDIF +#IF ((VGAENABLE | CVDUENABLE | TMSENABLE) & USEZLSA2) +#INCLUDE "unlzsa2s.asm" #ENDIF ; ; DETECT CPU SPEED USING DS-1302 RTC diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 8e239868..22020757 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -287,6 +287,10 @@ V80X24B .EQU 4 ; ECB-VDU V80X43 .EQU 5 ; ECB-VGA3 V80X60 .EQU 6 ; ECB-VGA3 ; +; FONTS +; +USEZLSA2 .EQU FALSE ; USE COMPRESSED FONTS. +; ; KEYBOARD LAYOUTS ; KBD_US .EQU 0 ; US ENGLISH diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index abe3accf..cdd9c626 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -366,9 +366,24 @@ TMS_LOADFONT: ; SET WRITE ADDRESS TO $800 LD HL,$800 CALL TMS_WR + +#IF USEZLSA2 + LD (TMS_STACK),SP ; SAVE STACK + LD HL,(TMS_STACK) ; AND SHIFT IT + LD DE,$2000 ; DOWN 4KB TO + CCF ; CREATE A + SBC HL,DE ; DECOMPRESSION BUFFER + LD SP,HL ; HL POINTS TO BUFFER + EX DE,HL ; START OF STACK BUFFER + PUSH DE ; SAVE IT + LD HL,TMS_FONT ; START OF FONT DATA + CALL DLZSA2 ; DECOMPRESS TO DE + POP HL ; RECALL STACK BUFFER POSITION +#ELSE + LD HL,TMS_FONT ; START OF FONT DATA +#ENDIF ; ; FILL $800 BYTES FROM FONTDATA - LD HL,TMS_FONT LD DE,$800 TMS_LOADFONT1: LD A,(HL) @@ -380,7 +395,14 @@ TMS_LOADFONT1: OR E JR NZ,TMS_LOADFONT1 ; +#IF USEZLSA2 + LD HL,(TMS_STACK) ; ERASE DECOMPRESS BUFFER + LD SP,HL ; BY RESTORING THE STACK + RET ; DONE +TMS_STACK .DW 0 +#ELSE RET +#ENDIF ; ;---------------------------------------------------------------------- ; VIRTUAL CURSOR MANAGEMENT diff --git a/Source/HBIOS/unlzsa2s.asm b/Source/HBIOS/unlzsa2s.asm new file mode 100644 index 00000000..327cfa91 --- /dev/null +++ b/Source/HBIOS/unlzsa2s.asm @@ -0,0 +1,183 @@ +; +; Size-optimized LZSA2 decompressor by spke & uniabis (139 bytes) +; +; ver.00 by spke for LZSA 1.0.0 (02-09/06/2019, 145 bytes); +; ver.01 by spke for LZSA 1.0.5 (24/07/2019, added support for backward decompression); +; ver.02 by uniabis (30/07/2019, 144(-1) bytes, +3.3% speed and support for Hitachi HD64180); +; ver.03 by spke for LZSA 1.0.7 (01/08/2019, 140(-4) bytes, -1.4% speed and small re-organization of macros); +; ver.04 by spke for LZSA 1.1.0 (26/09/2019, removed usage of IY, added full revision history) +; ver.05 by spke for LZSA 1.1.1 (11/10/2019, 139(-1) bytes, +0.1% speed) +; ver.051 by PSummers (14/1/2020), ROMWBW version. +; +; The data must be compressed using the command line compressor by Emmanuel Marty +; The compression is done as follows: +; +; lzsa.exe -f2 -r +; +; where option -r asks for the generation of raw (frame-less) data. +; +; The decompression is done in the standard way: +; +; ld hl,FirstByteOfCompressedData +; ld de,FirstByteOfMemoryForDecompressedData +; call DecompressLZSA2 +; +; Backward compression is also supported; you can compress files backward using: +; +; lzsa.exe -f2 -r -b +; +; and decompress the resulting files using: +; +; ld hl,LastByteOfCompressedData +; ld de,LastByteOfMemoryForDecompressedData +; call DecompressLZSA2 +; +; (do not forget to uncomment the BACKWARD_DECOMPRESS option in the decompressor). +; +; Of course, LZSA2 compression algorithms are (c) 2019 Emmanuel Marty, +; see https://github.com/emmanuel-marty/lzsa for more information +; +; Drop me an email if you have any comments/ideas/suggestions: zxintrospec@gmail.com +; +; This software is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not be +; misrepresented as being the original software. +; 3. This notice may not be removed or altered from any source distribution. +; + +; DEFINE BACKWARD_DECOMPRESS ; uncomment for data compressed with option -b +; DEFINE HD64180 ; uncomment for systems using Hitachi HD64180 + + #IFNDEF BACKWARD_DECOMPRESS + + #DEFINE NEXT_HL \ + #DEFCONT \ inc hl + + #DEFINE ADD_OFFSET \ + #DEFCONT \ ex de,hl \ add hl,de + + #DEFINE BLOCKCOPY \ + #DEFCONT \ ldir + + #ELSE + + #DEFINE NEXT_HL \ + #DEFCONT \ dec hl + + #DEFINE ADD_OFFSET \ + #DEFCONT \ push hl \ or a \ sbc hl,de \ pop de + + #DEFINE BLOCKCOPY \ + #DEFCONT \ lddr + + #ENDIF + + #IFDEF HD64180 + + .ECHO "HD64180 " + + #DEFINE LD_IX_DE \ + #DEFCONT \ ld ixl,e \ ld ixh,d + + #DEFINE LD_DE_IX \ + #DEFCONT \ ld e,ixl \ ld d,ixh + + #ELSE + + .ECHO "Z80 " + + #DEFINE LD_IX_DE \ + #DEFCONT \ push de \ pop ix + + #DEFINE LD_DE_IX \ + #DEFCONT \ push ix \ pop de + + #ENDIF + +DLZSA2: + xor a \ ld b,a \ ex af,af' \ jr ReadToken + +CASE00x: call ReadNibble + ld e,a \ ld a,c + cp %00100000 \ rl e \ jr SaveOffset + +CASE0xx ld d,$FF \ cp %01000000 \ jr c,CASE00x + +CASE01x: cp %01100000 \ rl d + +OffsetReadE: ld e,(hl) \ NEXT_HL + +SaveOffset: LD_IX_DE + +MatchLen: and %00000111 \ add a,2 \ cp 9 \ call z,ExtendedCode + +CopyMatch: ld c,a + ex (sp),hl ; BC = len, DE = -offset, HL = dest, SP -> [src] + ADD_OFFSET ; BC = len, DE = dest, HL = dest+(-offset), SP -> [src] + BLOCKCOPY ; BC = 0, DE = dest + pop hl ; HL = src + +ReadToken: ld a,(hl) \ NEXT_HL \ push af + and %00011000 \ jr z,NoLiterals + + rrca \ rrca \ rrca + call pe,ExtendedCode + + ld c,a + BLOCKCOPY + +NoLiterals: pop af \ push de + or a \ jp p,CASE0xx + +CASE1xx: cp %11000000 \ jr nc,CASE11x + +CASE10x: call ReadNibble + ld d,a \ ld a,c + cp %10100000 ;: rl d + dec d \ rl d \ .DB $CA ; jr OffsetReadE ; #CA is JP Z,.. to skip all commands in CASE110 before jr OffsetReadE + +CASE110: ld d,(hl) \ NEXT_HL \ jr OffsetReadE + +CASE11x: cp %11100000 \ jr c,CASE110 + +CASE111: LD_DE_IX \ jr MatchLen + +ExtendedCode: call ReadNibble \ inc a \ jr z,ExtraByte + sub $F0+1 \ add a,c \ ret +ExtraByte ld a,15 \ add a,c \ add a,(hl) \ NEXT_HL \ ret nc + ld a,(hl) \ NEXT_HL + ld b,(hl) \ NEXT_HL \ ret nz + pop de \ pop de ; RET is not needed, because RET from ReadNibble is sufficient + +ReadNibble: ld c,a \ xor a \ ex af,af' \ ret m +UpdateNibble ld a,(hl) \ or $F0 \ ex af,af' + ld a,(hl) \ NEXT_HL \ or $0F + rrca \ rrca \ rrca \ rrca \ ret + + + + + + + + + + + + + + + + + diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index 14c510c4..f5da706c 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -33,6 +33,8 @@ VGA_CSTY .EQU VGA_BLOK ; DEFAULT CURSOR STYLE VGA_BLNK .EQU VGA_NOBL ; DEFAULT BLINK RATE VGA_9BIT .EQU $0101 ; 9 BIT MSK-CFG VGA_8BIT .EQU $0000 ; 8 BIT MSK-CFG + +VGA_NICE .EQU FALSE ; TRUE = SLOW BUT PRETTY ; #IF (VGASIZ=V80X25) VGA_ROWS .EQU 25 @@ -502,13 +504,29 @@ VGA_CRTCDUMP1: ;---------------------------------------------------------------------- ; LOAD FONT DATA ;---------------------------------------------------------------------- + ; VGA_LOADFONT: LD HL,$7000 | VGA_89BIT ; CLEAR FONT PAGE NUM CALL VGA_SETCFG - LD DE,$7000 ; PAGE 7 OF VIDEO RAM +#IF USEZLSA2 + LD (VGA_STACK),SP ; SAVE STACK + LD HL,(VGA_STACK) ; AND SHIFT IT + LD DE,$2000 ; DOWN 4KB TO + CCF ; CREATE A + SBC HL,DE ; DECOMPRESSION BUFFER + LD SP,HL ; HL POINTS TO BUFFER + EX DE,HL ; START OF STACK BUFFER + PUSH DE ; SAVE IT + LD HL,VGA_FONT ; START OF FONT DATA + CALL DLZSA2 ; DECOMPRESS TO DE + POP HL ; RECALL STACK BUFFER POSITION +#ELSE LD HL,VGA_FONT ; START OF FONT DATA +#ENDIF + + LD DE,$7000 ; PAGE 7 OF VIDEO RAM VGA_LOADFONT1: LD B,VGA_SCANL ; # BYTES FOR EACH CHAR VGA_LOADFONT2: @@ -528,7 +546,15 @@ VGA_LOADFONT2: JR NZ,VGA_LOADFONT1 ; LOOP LD HL,$7070 | VGA_89BIT ; SET FONT PAGE NUM TO 7 CALL VGA_SETCFG + +#IF USEZLSA2 + LD HL,(VGA_STACK) ; ERASE DECOMPRESS BUFFER + LD SP,HL ; BY RESTORING THE STACK RET ; DONE +VGA_STACK .DW 0 +#ELSE + RET +#ENDIF ; ;---------------------------------------------------------------------- ; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E @@ -581,7 +607,9 @@ VGA_PUTCHAR: LD A,(VGA_ATTR) ; ATTRIBUTE LD L,A ; ... TO L ; WRITE CHAR & ATTR - ;CALL VGA_WAITSB ; WAIT FOR RETRACE +#IF (VGA_NICE) + CALL VGA_WAITSB ; WAIT FOR RETRACE +#ENDIF CALL VGA_MEMWRX ; UPDATE CURRENT POSITION LD HL,(VGA_POS) ; GET CURSOR POSITION @@ -628,7 +656,9 @@ VGA_FILL1: DEC C ; C := VGA ADDR LO OUT (C),L ; UDPATE LO ADDR INC C ; POINT TO DATA REG - ;CALL VGA_WAITSB ; WAIT FOR RETRACE +#IF (VGA_NICE) + CALL VGA_WAITSB ; WAIT FOR RETRACE +#ENDIF LD A,(VGA_ATTR) ; GET CUR ATTR OUT (C),A ; OUTPUT ATTR @@ -792,7 +822,9 @@ VGA_BLKCPY: EX DE,HL ; SWAP BACK VGA_BLKCPY1: - ;CALL VGA_WAITSB ; WAIT FOR RETRACE +#IF (VGA_NICE) + CALL VGA_WAITSB ; WAIT FOR RETRACE +#ENDIF ; GET NEXT SOURCE BYTE LD C,VGA_HI ; C := VGA_HI