; vga_text_specials.inc - specials for colouring VGA text ; author Neil Franklin, last modification 2008.10.15 ; full 8 char specials, contains pre-ASCII 0x08 to 0x0F, defined as: .equ IVON = 0x08 ; invert/reverse on .equ IVOFF = 0x09 ; invert/reverse off .equ ULON = 0x0A ; underline on .equ ULOFF = 0x0B ; underline off .equ COL1 = 0x0C ; use alternate colour 1 .equ COL2 = 0x0D ; use alternate colour 2 .equ COL3 = 0x0E ; use alternate colour 3 .equ UNUS = 0x0F ; unused, prints simple space ; SPECIAL p-A, aa=0x08, hh=0x04, ll=0x00, cc=0x04 out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} inverted display: swap fore and back colours mov FORE,BACK ; {1} mov BACK,TEMP ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x09, hh=0x04, ll=0x80, cc=0x47 out PORTC,FORE ; {1} like any space set to all background, present in foregr ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} uninverted display: swap fore and back colours back mov FORE,BACK ; {1} mov BACK,TEMP ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,FORE mov TEMP,FORE mov FORE,BACK mov BACK,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x0A, hh=0x05, ll=0x00, cc=0x05 out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special nop ; {1} underlined: lines 0..6 do nothing nop ; {1} nop ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} underlined: line 7 fore/back invert mov FORE,BACK ; {1} mov BACK,TEMP ; {1} ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x0B, hh=0x05, ll=0x80, cc=0x85 out PORTC,BACK ; {1} like any space set to all background, *not* in foregr ; {3} special: 3 clocks saved from 3 out used for special nop ; {1} un-underlined: lines 0..6 do nothing nop ; {1} nop ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,FORE ; {1} like any space set to all background, present in foregr ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} un-underlined: line 7 fore/back invert mov FORE,BACK ; {1} mov BACK,TEMP ; {1} ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x0C, hh=0x06, ll=0x00, cc=0x06 out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} alternative colour 1: swap fore and alt1 colours mov FORE,ALT1 ; {1} mov ALT1,TEMP ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT1 mov ALT1,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x0D, hh=0x06, ll=0x80, cc=0x86 out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} alternative colour 2: swap fore and alt2 colours mov FORE,ALT2 ; {1} mov ALT2,TEMP ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT2 mov ALT2,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x0E, hh=0x07, ll=0x00, cc=0x07 out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special mov TEMP,FORE ; {1} alternative colour 3: swap fore and alt3 colours mov FORE,ALT3 ; {1} mov ALT3,TEMP ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,BACK mov TEMP,FORE mov FORE,ALT3 mov ALT3,TEMP ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop ; SPECIAL p-A, aa=0x0F, hh=0x07, ll=0x80, cc=0x87 out PORTC,BACK ; {1} like any space set to all background ; {3} special: 3 clocks saved from 3 out used for special nop ; {1} unused: do nothing nop ; {1} nop ; {1} ld ZL,X+ ; {8} standard: next character, no out as at line begin mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x00 ijmp nop ; {0} standard: fill rest of unused space nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x10 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x20 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x30 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x40 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x50 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x60 ijmp nop nop nop nop nop nop out PORTC,BACK nop nop nop ld ZL,X+ mov ZH,ZL andi ZH,0x3F andi ZL,0x80 ori ZL,0x70 ijmp nop nop nop nop nop nop