Difference between revisions of "Programming:Fast Textoutput"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
(added new high optimized version)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
The following is probably the fastest possible text output routine for the CPC in Mode 2, coded by [[Prodatron]] for the [[SymbOS]] [[SymShell]] fullscreen mode including strong optimization ideas by [[MaV]]. It needs between 62 and 69 microseconds per char, depending on the amount of 0- and repeating-bytes within a char matrix. For average english texts 66 microseconds (a little bit more than 1 raster line) per char is needed. That means that a complete 2000char screen with mixed text is filled in 0,132 seconds.
+
The following is probably the fastest possible text output routine for the CPC in Mode 2, coded by [[Prodatron]] for the [[SymbOS]] [[SymShell]] fullscreen mode including strong optimization ideas by [[MaV]] and one 1NOP tweak by [[BSC]]. It needs between 61 and 68 microseconds per char, depending on the amount of 0- and repeating-bytes within a char matrix. For average english texts 65 microseconds (a little bit more than 1 raster line) per char is needed. That means that a complete 2000char screen with mixed text is filled in 0,13 seconds.
 
You can still accelerate it by simplifying the font to increase the amount of repeating-bytes within a char matrix. Another possibility is to move the whole main loop to each single char routine. That would only save one microsecond but blow up the whole code by about 2KB.
 
You can still accelerate it by simplifying the font to increase the amount of repeating-bytes within a char matrix. Another possibility is to move the whole main loop to each single char routine. That would only save one microsecond but blow up the whole code by about 2KB.
  
== Actual version (v2) ==
+
== Actual version (v2.1) ==
  
This is the actual version from 2012. It has a size of about 3,5KB.
+
This is the actual version from 2014. It has a size of about 3,5KB.
  
 
<pre>
 
<pre>
Line 11: Line 11:
 
;@                  SymbOS SymShell Command Line Interface                  @
 
;@                  SymbOS SymShell Command Line Interface                  @
 
;@                                                                            @
 
;@                                                                            @
;@                   F A S T  T E X T  O U T P U T  (v2)                   @
+
;@                 F A S T  T E X T  O U T P U T  (v2.1)                 @
 
;@                                                                            @
 
;@                                                                            @
;@               (c)oded 2012 by Prodatron/SymbiosiS and MaV                 @
+
;@             (c)oded 2014 by Prodatron/SymbiosiS and MaV+BSC              @
 
;@                                                                            @
 
;@                                                                            @
 
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Line 39: Line 39:
 
;### Input      IX=text, B=number of chars, DE=screen address
 
;### Input      IX=text, B=number of chars, DE=screen address
 
;### Output    HL=next screen address + #1000 - 1, IX=next char
 
;### Output    HL=next screen address + #1000 - 1, IX=next char
;### Destroyed  AF,BC,DE,HL,IX
+
;### Destroyed  AF,BC,DE
 
mftout  xor a
 
mftout  xor a
 
         jr mftout2
 
         jr mftout2
Line 51: Line 51:
 
         ld h,mftchrtab/256  ;2
 
         ld h,mftchrtab/256  ;2
 
         ld c,(hl)          ;2
 
         ld c,(hl)          ;2
         inc hl              ;2
+
         inc l              ;1
 
         ld h,(hl)          ;2
 
         ld h,(hl)          ;2
 
         ld l,c              ;1
 
         ld l,c              ;1
         jp (hl)            ;1 27 + 35-43 -> 62-69 (67 average for all 96 chars, 66 for random text)
+
         jp (hl)            ;1 26 + 35-43 -> 61-68 (66 average for all 96 chars, 65 for random text)
  
 
mftchr032 ex de,hl:        ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret    ;  
 
mftchr032 ex de,hl:        ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret    ;  
Line 158: Line 158:
 
This is the old version from 2005. It has a size of about 3KB. The actual version is 510 bytes larger but has several improvements:
 
This is the old version from 2005. It has a size of about 3KB. The actual version is 510 bytes larger but has several improvements:
 
* optimized inchar-screen-line-jump by using SET x,H/RES x,H instead of ADD HL,x (idea by [[MaV]])
 
* optimized inchar-screen-line-jump by using SET x,H/RES x,H instead of ADD HL,x (idea by [[MaV]])
* this let BC free, which now doesn't need to be defined for every char and is used for the char counter and repeating bytes inside a char matrix
+
* this keeps BC free, which now doesn't need to be defined for every char and is used for the char counter and for the repeating bytes inside a char matrix
 
* 256byte aligned jump table, limited to 128 chars to speed up jump table access
 
* 256byte aligned jump table, limited to 128 chars to speed up jump table access
 
* loop-handling moved from main loop to each single char routine to save one JP instruction
 
* loop-handling moved from main loop to each single char routine to save one JP instruction
Line 196: Line 196:
 
         ex de,hl        ;1
 
         ex de,hl        ;1
 
         db #fd:dec l    ;2
 
         db #fd:dec l    ;2
         jr nz,mftout1  ;3 14 -> 84-92 NOPs / char
+
         jr nz,mftout1  ;3 14 -> 84-92 NOPs / char (90 average for all chars, 88 for random text)
 
         ret
 
         ret
  

Latest revision as of 16:43, 13 March 2014

The following is probably the fastest possible text output routine for the CPC in Mode 2, coded by Prodatron for the SymbOS SymShell fullscreen mode including strong optimization ideas by MaV and one 1NOP tweak by BSC. It needs between 61 and 68 microseconds per char, depending on the amount of 0- and repeating-bytes within a char matrix. For average english texts 65 microseconds (a little bit more than 1 raster line) per char is needed. That means that a complete 2000char screen with mixed text is filled in 0,13 seconds. You can still accelerate it by simplifying the font to increase the amount of repeating-bytes within a char matrix. Another possibility is to move the whole main loop to each single char routine. That would only save one microsecond but blow up the whole code by about 2KB.

Actual version (v2.1)

This is the actual version from 2014. It has a size of about 3,5KB.

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@                                                                            @
;@                   SymbOS SymShell Command Line Interface                   @
;@                                                                            @
;@                  F A S T   T E X T   O U T P U T   (v2.1)                  @
;@                                                                            @
;@              (c)oded 2014 by Prodatron/SymbiosiS and MaV+BSC               @
;@                                                                            @
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

ds -$ mod 256
mftchrtab
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr033,mftchr034,mftchr035,mftchr036,mftchr037,mftchr038,mftchr039
dw mftchr040,mftchr041,mftchr042,mftchr043,mftchr044,mftchr045,mftchr046,mftchr047
dw mftchr048,mftchr049,mftchr050,mftchr051,mftchr052,mftchr053,mftchr054,mftchr055
dw mftchr056,mftchr057,mftchr058,mftchr059,mftchr060,mftchr061,mftchr062,mftchr063
dw mftchr064,mftchr065,mftchr066,mftchr067,mftchr068,mftchr069,mftchr070,mftchr071
dw mftchr072,mftchr073,mftchr074,mftchr075,mftchr076,mftchr077,mftchr078,mftchr079
dw mftchr080,mftchr081,mftchr082,mftchr083,mftchr084,mftchr085,mftchr086,mftchr087
dw mftchr088,mftchr089,mftchr090,mftchr091,mftchr092,mftchr093,mftchr094,mftchr095
dw mftchr096,mftchr097,mftchr098,mftchr099,mftchr100,mftchr101,mftchr102,mftchr103
dw mftchr104,mftchr105,mftchr106,mftchr107,mftchr108,mftchr109,mftchr110,mftchr111
dw mftchr112,mftchr113,mftchr114,mftchr115,mftchr116,mftchr117,mftchr118,mftchr119
dw mftchr120,mftchr121,mftchr122,mftchr123,mftchr124,mftchr125,mftchr126,mftchr127

;### MFTOUT -> Plots up to 256 chars in Mode2 starting from a specified screen address
;###           Chars 0-31 won't be plotted, but you can add the single char-routines by yourself
;###           Chars 128-255 will be plotted as chars 0-127
;### Input      IX=text, B=number of chars, DE=screen address
;### Output     HL=next screen address + #1000 - 1, IX=next char
;### Destroyed  AF,BC,DE
mftout  xor a
        jr mftout2
mftout1 res 4,h             ;2
        inc hl              ;2
        res 3,h             ;2
        ex de,hl            ;1
mftout2 ld l,(ix+0)         ;5
        inc ix              ;3
        sla l               ;2
        ld h,mftchrtab/256  ;2
        ld c,(hl)           ;2
        inc l               ;1
        ld h,(hl)           ;2
        ld l,c              ;1
        jp (hl)             ;1 26 + 35-43 -> 61-68 (66 average for all 96 chars, 65 for random text)

mftchr032 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret     ; 
mftchr033 ex de,hl:ld c,#18:ld (hl),c  :set 3,h:ld (hl),#3C:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),#3C:dec b:jp nz,mftout1:ret     ;!
mftchr034 ex de,hl:         ld (hl),#6C:set 3,h:ld (hl),#6C:set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),#28:dec b:jp nz,mftout1:ret     ;"
mftchr035 ex de,hl:ld c,#6c:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),#FE:set 4,h:ld (hl),c  :res 5,h:ld (hl),#FE:dec b:jp nz,mftout1:ret     ;#
mftchr036 ex de,hl:         ld (hl),#18:set 3,h:ld (hl),#3E:set 4,h:ld (hl),#3C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#7C:res 3,h:ld (hl),#06:set 4,h:ld (hl),#18:res 5,h:ld (hl),#60:dec b:jp nz,mftout1:ret     ;$
mftchr037 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),#C6:set 4,h:ld (hl),#18:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#30:set 4,h:ld (hl),#C6:res 5,h:ld (hl),#CC:dec b:jp nz,mftout1:ret     ;%
mftchr038 ex de,hl:         ld (hl),#38:set 3,h:ld (hl),#6C:set 4,h:ld (hl),#76:set 5,h:ld (hl),a  :res 4,h:ld (hl),#CC:res 3,h:ld (hl),#DC:set 4,h:ld (hl),#76:res 5,h:ld (hl),#38:dec b:jp nz,mftout1:ret     ;&
mftchr039 ex de,hl:         ld (hl),#18:set 3,h:ld (hl),#18:set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),#30:dec b:jp nz,mftout1:ret     ;'
mftchr040 ex de,hl:ld c,#30:ld (hl),#0C:set 3,h:ld (hl),#18:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#18:res 3,h:ld (hl),c  :set 4,h:ld (hl),#0C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;(
mftchr041 ex de,hl:ld c,#0c:ld (hl),#30:set 3,h:ld (hl),#18:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#18:res 3,h:ld (hl),c  :set 4,h:ld (hl),#30:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;)
mftchr042 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),#66:set 4,h:ld (hl),#FF:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#3C:set 4,h:ld (hl),a  :res 5,h:ld (hl),#3C:dec b:jp nz,mftout1:ret     ;*
mftchr043 ex de,hl:ld c,#18:ld (hl),a  :set 3,h:ld (hl),c  :set 4,h:ld (hl),#7E:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),a  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;+
mftchr044 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),#30:res 4,h:ld (hl),#18:res 3,h:ld (hl),a  :set 4,h:ld (hl),#18:res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret     ;,
mftchr045 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#7E:set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret     ;-
mftchr046 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#18:res 3,h:ld (hl),a  :set 4,h:ld (hl),#18:res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret     ;.
mftchr047 ex de,hl:         ld (hl),#06:set 3,h:ld (hl),#0C:set 4,h:ld (hl),#30:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C0:res 3,h:ld (hl),#60:set 4,h:ld (hl),#80:res 5,h:ld (hl),#18:dec b:jp nz,mftout1:ret     ;/
mftchr048 ex de,hl:         ld (hl),#38:set 3,h:ld (hl),#6C:set 4,h:ld (hl),#D6:set 5,h:ld (hl),a  :res 4,h:ld (hl),#6C:res 3,h:ld (hl),#C6:set 4,h:ld (hl),#38:res 5,h:ld (hl),#C6:dec b:jp nz,mftout1:ret     ;0
mftchr049 ex de,hl:ld c,#18:ld (hl),c  :set 3,h:ld (hl),#38:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#7E:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;1
mftchr050 ex de,hl:         ld (hl),#7C:set 3,h:ld (hl),#C6:set 4,h:ld (hl),#1C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#30:set 4,h:ld (hl),#FE:res 5,h:ld (hl),#06:dec b:jp nz,mftout1:ret     ;2
mftchr051 ex de,hl:         ld (hl),#7C:set 3,h:ld (hl),#C6:set 4,h:ld (hl),#3C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C6:res 3,h:ld (hl),#06:set 4,h:ld (hl),#7C:res 5,h:ld (hl),#06:dec b:jp nz,mftout1:ret     ;3
mftchr052 ex de,hl:         ld (hl),#1C:set 3,h:ld (hl),#3C:set 4,h:ld (hl),#CC:set 5,h:ld (hl),a  :res 4,h:ld (hl),#0C:res 3,h:ld (hl),#FE:set 4,h:ld (hl),#1E:res 5,h:ld (hl),#6C:dec b:jp nz,mftout1:ret     ;4
mftchr053 ex de,hl:         ld (hl),#FE:set 3,h:ld (hl),#C0:set 4,h:ld (hl),#FC:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C6:res 3,h:ld (hl),#06:set 4,h:ld (hl),#7C:res 5,h:ld (hl),#C0:dec b:jp nz,mftout1:ret     ;5
mftchr054 ex de,hl:         ld (hl),#38:set 3,h:ld (hl),#60:set 4,h:ld (hl),#FC:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C6:res 3,h:ld (hl),#C6:set 4,h:ld (hl),#7C:res 5,h:ld (hl),#C0:dec b:jp nz,mftout1:ret     ;6
mftchr055 ex de,hl:ld c,#30:ld (hl),#FE:set 3,h:ld (hl),#C6:set 4,h:ld (hl),#18:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),#0C:dec b:jp nz,mftout1:ret     ;7
mftchr056 ex de,hl:ld c,#c6:ld (hl),#7C:set 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;8
mftchr057 ex de,hl:         ld (hl),#7C:set 3,h:ld (hl),#C6:set 4,h:ld (hl),#7E:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C6:res 3,h:ld (hl),#06:set 4,h:ld (hl),#7C:res 5,h:ld (hl),#C6:dec b:jp nz,mftout1:ret     ;9
mftchr058 ex de,hl:ld c,#18:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),a  :set 4,h:ld (hl),c  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;:
mftchr059 ex de,hl:ld c,#18:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),#30:res 4,h:ld (hl),c  :res 3,h:ld (hl),a  :set 4,h:ld (hl),c  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;;
mftchr060 ex de,hl:         ld (hl),#0C:set 3,h:ld (hl),#18:set 4,h:ld (hl),#60:set 5,h:ld (hl),a  :res 4,h:ld (hl),#18:res 3,h:ld (hl),#30:set 4,h:ld (hl),#0C:res 5,h:ld (hl),#30:dec b:jp nz,mftout1:ret     ;<
mftchr061 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#7E:res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),#7E:dec b:jp nz,mftout1:ret     ;=
mftchr062 ex de,hl:         ld (hl),#60:set 3,h:ld (hl),#30:set 4,h:ld (hl),#0C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#30:res 3,h:ld (hl),#18:set 4,h:ld (hl),#60:res 5,h:ld (hl),#18:dec b:jp nz,mftout1:ret     ;>
mftchr063 ex de,hl:ld c,#18:ld (hl),#7C:set 3,h:ld (hl),#C6:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),#0C:dec b:jp nz,mftout1:ret     ;?
mftchr064 ex de,hl:         ld (hl),#7C:set 3,h:ld (hl),#C6:set 4,h:ld (hl),#DE:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C0:res 3,h:ld (hl),#DE:set 4,h:ld (hl),#78:res 5,h:ld (hl),#DE:dec b:jp nz,mftout1:ret     ;@
mftchr065 ex de,hl:ld c,#c6:ld (hl),#38:set 3,h:ld (hl),#6C:set 4,h:ld (hl),#FE:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;A
mftchr066 ex de,hl:ld c,#66:ld (hl),#FC:set 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#FC:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;B
mftchr067 ex de,hl:ld c,#c0:ld (hl),#3C:set 3,h:ld (hl),#66:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;C
mftchr068 ex de,hl:ld c,#66:ld (hl),#F8:set 3,h:ld (hl),#6C:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#6C:res 3,h:ld (hl),c  :set 4,h:ld (hl),#F8:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;D
mftchr069 ex de,hl:         ld (hl),#FE:set 3,h:ld (hl),#62:set 4,h:ld (hl),#78:set 5,h:ld (hl),a  :res 4,h:ld (hl),#62:res 3,h:ld (hl),#68:set 4,h:ld (hl),#FE:res 5,h:ld (hl),#68:dec b:jp nz,mftout1:ret     ;E
mftchr070 ex de,hl:         ld (hl),#FE:set 3,h:ld (hl),#62:set 4,h:ld (hl),#78:set 5,h:ld (hl),a  :res 4,h:ld (hl),#60:res 3,h:ld (hl),#68:set 4,h:ld (hl),#F0:res 5,h:ld (hl),#68:dec b:jp nz,mftout1:ret     ;F
mftchr071 ex de,hl:         ld (hl),#3C:set 3,h:ld (hl),#66:set 4,h:ld (hl),#C0:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#CE:set 4,h:ld (hl),#3A:res 5,h:ld (hl),#C0:dec b:jp nz,mftout1:ret     ;G
mftchr072 ex de,hl:ld c,#c6:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),#FE:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;H
mftchr073 ex de,hl:ld c,#18:ld (hl),#3C:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;I
mftchr074 ex de,hl:ld c,#0c:ld (hl),#1E:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#CC:res 3,h:ld (hl),#CC:set 4,h:ld (hl),#78:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;J
mftchr075 ex de,hl:         ld (hl),#E6:set 3,h:ld (hl),#66:set 4,h:ld (hl),#78:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#6C:set 4,h:ld (hl),#E6:res 5,h:ld (hl),#6C:dec b:jp nz,mftout1:ret     ;K
mftchr076 ex de,hl:ld c,#60:ld (hl),#F0:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#62:set 4,h:ld (hl),#FE:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;L
mftchr077 ex de,hl:ld c,#c6:ld (hl),c  :set 3,h:ld (hl),#EE:set 4,h:ld (hl),#FE:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),#D6:set 4,h:ld (hl),c  :res 5,h:ld (hl),#FE:dec b:jp nz,mftout1:ret     ;M
mftchr078 ex de,hl:ld c,#c6:ld (hl),c  :set 3,h:ld (hl),#E6:set 4,h:ld (hl),#DE:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),#CE:set 4,h:ld (hl),c  :res 5,h:ld (hl),#F6:dec b:jp nz,mftout1:ret     ;N
mftchr079 ex de,hl:ld c,#c6:ld (hl),#7C:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;O
mftchr080 ex de,hl:         ld (hl),#FC:set 3,h:ld (hl),#66:set 4,h:ld (hl),#7C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#60:res 3,h:ld (hl),#60:set 4,h:ld (hl),#F0:res 5,h:ld (hl),#66:dec b:jp nz,mftout1:ret     ;P
mftchr081 ex de,hl:ld c,#c6:ld (hl),#7C:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),#0E:res 4,h:ld (hl),#CE:res 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;Q
mftchr082 ex de,hl:ld c,#66:ld (hl),#FC:set 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),#6C:set 4,h:ld (hl),#E6:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;R
mftchr083 ex de,hl:         ld (hl),#3C:set 3,h:ld (hl),#66:set 4,h:ld (hl),#18:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#0C:set 4,h:ld (hl),#3C:res 5,h:ld (hl),#30:dec b:jp nz,mftout1:ret     ;S
mftchr084 ex de,hl:ld c,#18:ld (hl),#7E:set 3,h:ld (hl),#7E:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),#5A:dec b:jp nz,mftout1:ret     ;T
mftchr085 ex de,hl:ld c,#66:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;U
mftchr086 ex de,hl:ld c,#c6:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#6C:res 3,h:ld (hl),c  :set 4,h:ld (hl),#38:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;V
mftchr087 ex de,hl:ld c,#c6:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),#D6:set 5,h:ld (hl),a  :res 4,h:ld (hl),#FE:res 3,h:ld (hl),#D6:set 4,h:ld (hl),#6C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;W
mftchr088 ex de,hl:ld c,#c6:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),#38:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),#6C:set 4,h:ld (hl),c  :res 5,h:ld (hl),#6C:dec b:jp nz,mftout1:ret     ;X
mftchr089 ex de,hl:ld c,#66:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#18:res 3,h:ld (hl),#18:set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;Y
mftchr090 ex de,hl:         ld (hl),#FE:set 3,h:ld (hl),#C6:set 4,h:ld (hl),#18:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#32:set 4,h:ld (hl),#FE:res 5,h:ld (hl),#8C:dec b:jp nz,mftout1:ret     ;Z
mftchr091 ex de,hl:ld c,#30:ld (hl),#3C:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;[
mftchr092 ex de,hl:         ld (hl),#C0:set 3,h:ld (hl),#60:set 4,h:ld (hl),#18:set 5,h:ld (hl),a  :res 4,h:ld (hl),#06:res 3,h:ld (hl),#0C:set 4,h:ld (hl),#02:res 5,h:ld (hl),#30:dec b:jp nz,mftout1:ret     ;\
mftchr093 ex de,hl:ld c,#0c:ld (hl),#3C:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;]
mftchr094 ex de,hl:         ld (hl),#10:set 3,h:ld (hl),#38:set 4,h:ld (hl),#C6:set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),#6C:dec b:jp nz,mftout1:ret     ;^
mftchr095 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),a  :set 5,h:ld (hl),#FF:res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret     ;_
mftchr096 ex de,hl:         ld (hl),#30:set 3,h:ld (hl),#18:set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),#0C:dec b:jp nz,mftout1:ret     ;`
mftchr097 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#0C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#CC:res 3,h:ld (hl),#7C:set 4,h:ld (hl),#76:res 5,h:ld (hl),#78:dec b:jp nz,mftout1:ret     ;a
mftchr098 ex de,hl:ld c,#66:ld (hl),#E0:set 3,h:ld (hl),#60:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#DC:res 5,h:ld (hl),#7C:dec b:jp nz,mftout1:ret     ;b
mftchr099 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#C6:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C6:res 3,h:ld (hl),#C0:set 4,h:ld (hl),#7C:res 5,h:ld (hl),#7C:dec b:jp nz,mftout1:ret     ;c
mftchr100 ex de,hl:ld c,#cc:ld (hl),#1C:set 3,h:ld (hl),#0C:set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#76:res 5,h:ld (hl),#7C:dec b:jp nz,mftout1:ret     ;d
mftchr101 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#C6:set 5,h:ld (hl),a  :res 4,h:ld (hl),#C0:res 3,h:ld (hl),#FE:set 4,h:ld (hl),#7C:res 5,h:ld (hl),#7C:dec b:jp nz,mftout1:ret     ;e
mftchr102 ex de,hl:ld c,#60:ld (hl),#3C:set 3,h:ld (hl),#66:set 4,h:ld (hl),#F8:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#F8:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;f
mftchr103 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#CC:set 5,h:ld (hl),#F8:res 4,h:ld (hl),#7C:res 3,h:ld (hl),#CC:set 4,h:ld (hl),#0C:res 5,h:ld (hl),#76:dec b:jp nz,mftout1:ret     ;g
mftchr104 ex de,hl:         ld (hl),#E0:set 3,h:ld (hl),#60:set 4,h:ld (hl),#76:set 5,h:ld (hl),a  :res 4,h:ld (hl),#66:res 3,h:ld (hl),#66:set 4,h:ld (hl),#E6:res 5,h:ld (hl),#6C:dec b:jp nz,mftout1:ret     ;h
mftchr105 ex de,hl:ld c,#18:ld (hl),c  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),#38:dec b:jp nz,mftout1:ret     ;i
mftchr106 ex de,hl:ld c,#06:ld (hl),c  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),#3C:res 4,h:ld (hl),#66:res 3,h:ld (hl),c  :set 4,h:ld (hl),#66:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;j
mftchr107 ex de,hl:         ld (hl),#E0:set 3,h:ld (hl),#60:set 4,h:ld (hl),#6C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#6C:res 3,h:ld (hl),#78:set 4,h:ld (hl),#E6:res 5,h:ld (hl),#66:dec b:jp nz,mftout1:ret     ;k
mftchr108 ex de,hl:ld c,#18:ld (hl),#38:set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#3C:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;l
mftchr109 ex de,hl:ld c,#d6:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#FE:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),#EC:dec b:jp nz,mftout1:ret     ;m
mftchr110 ex de,hl:ld c,#66:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),#DC:dec b:jp nz,mftout1:ret     ;n
mftchr111 ex de,hl:ld c,#c6:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#7C:res 5,h:ld (hl),#7C:dec b:jp nz,mftout1:ret     ;o
mftchr112 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#66:set 5,h:ld (hl),#F0:res 4,h:ld (hl),#7C:res 3,h:ld (hl),#66:set 4,h:ld (hl),#60:res 5,h:ld (hl),#DC:dec b:jp nz,mftout1:ret     ;p
mftchr113 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#CC:set 5,h:ld (hl),#1E:res 4,h:ld (hl),#7C:res 3,h:ld (hl),#CC:set 4,h:ld (hl),#0C:res 5,h:ld (hl),#76:dec b:jp nz,mftout1:ret     ;q
mftchr114 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#76:set 5,h:ld (hl),a  :res 4,h:ld (hl),#60:res 3,h:ld (hl),#60:set 4,h:ld (hl),#F0:res 5,h:ld (hl),#DC:dec b:jp nz,mftout1:ret     ;r
mftchr115 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#C0:set 5,h:ld (hl),a  :res 4,h:ld (hl),#06:res 3,h:ld (hl),#7C:set 4,h:ld (hl),#FC:res 5,h:ld (hl),#7E:dec b:jp nz,mftout1:ret     ;s
mftchr116 ex de,hl:ld c,#30:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#36:res 3,h:ld (hl),c  :set 4,h:ld (hl),#1C:res 5,h:ld (hl),#FC:dec b:jp nz,mftout1:ret     ;t
mftchr117 ex de,hl:ld c,#cc:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#76:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;u
mftchr118 ex de,hl:ld c,#c6:ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),#6C:res 3,h:ld (hl),c  :set 4,h:ld (hl),#38:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;v
mftchr119 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#D6:set 5,h:ld (hl),a  :res 4,h:ld (hl),#FE:res 3,h:ld (hl),#D6:set 4,h:ld (hl),#6C:res 5,h:ld (hl),#C6:dec b:jp nz,mftout1:ret     ;w
mftchr120 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#6C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#6C:res 3,h:ld (hl),#38:set 4,h:ld (hl),#C6:res 5,h:ld (hl),#C6:dec b:jp nz,mftout1:ret     ;x
mftchr121 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#C6:set 5,h:ld (hl),#FC:res 4,h:ld (hl),#7E:res 3,h:ld (hl),#C6:set 4,h:ld (hl),#06:res 5,h:ld (hl),#C6:dec b:jp nz,mftout1:ret     ;y
mftchr122 ex de,hl:         ld (hl),a  :set 3,h:ld (hl),a  :set 4,h:ld (hl),#4C:set 5,h:ld (hl),a  :res 4,h:ld (hl),#32:res 3,h:ld (hl),#18:set 4,h:ld (hl),#7E:res 5,h:ld (hl),#7E:dec b:jp nz,mftout1:ret     ;z
mftchr123 ex de,hl:ld c,#18:ld (hl),#0E:set 3,h:ld (hl),c  :set 4,h:ld (hl),#70:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#0E:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;{
mftchr124 ex de,hl:ld c,#18:ld (hl),c  :set 3,h:ld (hl),c  :set 4,h:ld (hl),c  :set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;|
mftchr125 ex de,hl:ld c,#18:ld (hl),#70:set 3,h:ld (hl),c  :set 4,h:ld (hl),#0E:set 5,h:ld (hl),a  :res 4,h:ld (hl),c  :res 3,h:ld (hl),c  :set 4,h:ld (hl),#70:res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ;}
mftchr126 ex de,hl:         ld (hl),#76:set 3,h:ld (hl),#DC:set 4,h:ld (hl),a  :set 5,h:ld (hl),a  :res 4,h:ld (hl),a  :res 3,h:ld (hl),a  :set 4,h:ld (hl),a  :res 5,h:ld (hl),a  :dec b:jp nz,mftout1:ret     ;~
mftchr127 ex de,hl:ld c,#cc:ld (hl),c  :set 3,h:ld (hl),#33:set 4,h:ld (hl),#33:set 5,h:ld (hl),#33:res 4,h:ld (hl),#33:res 3,h:ld (hl),c  :set 4,h:ld (hl),c  :res 5,h:ld (hl),c  :dec b:jp nz,mftout1:ret     ; 

Original version

This is the old version from 2005. It has a size of about 3KB. The actual version is 510 bytes larger but has several improvements:

  • optimized inchar-screen-line-jump by using SET x,H/RES x,H instead of ADD HL,x (idea by MaV)
  • this keeps BC free, which now doesn't need to be defined for every char and is used for the char counter and for the repeating bytes inside a char matrix
  • 256byte aligned jump table, limited to 128 chars to speed up jump table access
  • loop-handling moved from main loop to each single char routine to save one JP instruction

That all together makes the actual version more then 30% faster compared to the following version.

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@                                                                            @
;@                   SymbOS SymShell Command Line Interface                   @
;@                                                                            @
;@                      F A S T   T E X T   O U T P U T                       @
;@                                                                            @
;@                   (c)oded 2005 by Prodatron / SymbiosiS                    @
;@                                                                            @
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

;### MFTOUT -> Plots up to 256 chars in Mode2 starting from a specified screen address
;###           Chars 0-31 and 128-255 won't be plotted, but you can add the single char-routines by yourself
;### Input      IX=text, IYL=number of chars, DE=screen address
;### Destroyed  AF,BC,DE,HL,IX,IYL
mftout  xor a
mftout1 ld l,(ix+0)     ;5
        inc ix          ;3
        ld h,a          ;1
        add hl,hl       ;3
        ld bc,mftchrtab ;3
        add hl,bc       ;3
        ld c,(hl)       ;2
        inc hl          ;2
        ld h,(hl)       ;2
        ld l,c          ;1
        ld bc,#800      ;3
        jp (hl)         ;1 29 + 41-49
mftout2 ld bc,-7*#800+1 ;3
        add hl,bc       ;3
        res 3,h         ;2
        ex de,hl        ;1
        db #fd:dec l    ;2
        jr nz,mftout1   ;3 14 -> 84-92 NOPs / char  (90 average for all chars, 88 for random text)
        ret

mftchrtab
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr033,mftchr034,mftchr035,mftchr036,mftchr037,mftchr038,mftchr039
dw mftchr040,mftchr041,mftchr042,mftchr043,mftchr044,mftchr045,mftchr046,mftchr047
dw mftchr048,mftchr049,mftchr050,mftchr051,mftchr052,mftchr053,mftchr054,mftchr055
dw mftchr056,mftchr057,mftchr058,mftchr059,mftchr060,mftchr061,mftchr062,mftchr063
dw mftchr064,mftchr065,mftchr066,mftchr067,mftchr068,mftchr069,mftchr070,mftchr071
dw mftchr072,mftchr073,mftchr074,mftchr075,mftchr076,mftchr077,mftchr078,mftchr079
dw mftchr080,mftchr081,mftchr082,mftchr083,mftchr084,mftchr085,mftchr086,mftchr087
dw mftchr088,mftchr089,mftchr090,mftchr091,mftchr092,mftchr093,mftchr094,mftchr095
dw mftchr096,mftchr097,mftchr098,mftchr099,mftchr100,mftchr101,mftchr102,mftchr103
dw mftchr104,mftchr105,mftchr106,mftchr107,mftchr108,mftchr109,mftchr110,mftchr111
dw mftchr112,mftchr113,mftchr114,mftchr115,mftchr116,mftchr117,mftchr118,mftchr119
dw mftchr120,mftchr121,mftchr122,mftchr123,mftchr124,mftchr125,mftchr126,mftchr127
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032
dw mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032,mftchr032

mftchr032 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ; 
mftchr033 ex de,hl:ld (hl),#18:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :jp mftout2 ;!
mftchr034 ex de,hl:ld (hl),#6C:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#28:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;"
mftchr035 ex de,hl:ld (hl),#6C:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),a  :jp mftout2 ;#
mftchr036 ex de,hl:ld (hl),#18:add hl,bc:ld (hl),#3E:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :jp mftout2 ;$
mftchr037 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;%
mftchr038 ex de,hl:ld (hl),#38:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),#DC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),a  :jp mftout2 ;&
mftchr039 ex de,hl:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;'
mftchr040 ex de,hl:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),a  :jp mftout2 ;(
mftchr041 ex de,hl:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),a  :jp mftout2 ;)
mftchr042 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#FF:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;*
mftchr043 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;+
mftchr044 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:jp mftout2 ;,
mftchr045 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;-
mftchr046 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :jp mftout2 ;.
mftchr047 ex de,hl:ld (hl),#06:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#80:add hl,bc:ld (hl),a  :jp mftout2 ;/
mftchr048 ex de,hl:ld (hl),#38:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),a  :jp mftout2 ;0
mftchr049 ex de,hl:ld (hl),#18:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),a  :jp mftout2 ;1
mftchr050 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#1C:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),a  :jp mftout2 ;2
mftchr051 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;3
mftchr052 ex de,hl:ld (hl),#1C:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#1E:add hl,bc:ld (hl),a  :jp mftout2 ;4
mftchr053 ex de,hl:ld (hl),#FE:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#FC:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;5
mftchr054 ex de,hl:ld (hl),#38:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#FC:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;6
mftchr055 ex de,hl:ld (hl),#FE:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),a  :jp mftout2 ;7
mftchr056 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;8
mftchr057 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;9
mftchr058 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :jp mftout2 ;:
mftchr059 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:jp mftout2 ;;
mftchr060 ex de,hl:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),a  :jp mftout2 ;<
mftchr061 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;=
mftchr062 ex de,hl:ld (hl),#60:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),a  :jp mftout2 ;>
mftchr063 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :jp mftout2 ;?
mftchr064 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#DE:add hl,bc:ld (hl),#DE:add hl,bc:ld (hl),#DE:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#78:add hl,bc:ld (hl),a  :jp mftout2 ;@
mftchr065 ex de,hl:ld (hl),#38:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;A
mftchr066 ex de,hl:ld (hl),#FC:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#FC:add hl,bc:ld (hl),a  :jp mftout2 ;B
mftchr067 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;C
mftchr068 ex de,hl:ld (hl),#F8:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#F8:add hl,bc:ld (hl),a  :jp mftout2 ;D
mftchr069 ex de,hl:ld (hl),#FE:add hl,bc:ld (hl),#62:add hl,bc:ld (hl),#68:add hl,bc:ld (hl),#78:add hl,bc:ld (hl),#68:add hl,bc:ld (hl),#62:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),a  :jp mftout2 ;E
mftchr070 ex de,hl:ld (hl),#FE:add hl,bc:ld (hl),#62:add hl,bc:ld (hl),#68:add hl,bc:ld (hl),#78:add hl,bc:ld (hl),#68:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#F0:add hl,bc:ld (hl),a  :jp mftout2 ;F
mftchr071 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#CE:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3A:add hl,bc:ld (hl),a  :jp mftout2 ;G
mftchr072 ex de,hl:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;H
mftchr073 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;I
mftchr074 ex de,hl:ld (hl),#1E:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#78:add hl,bc:ld (hl),a  :jp mftout2 ;J
mftchr075 ex de,hl:ld (hl),#E6:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#78:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#E6:add hl,bc:ld (hl),a  :jp mftout2 ;K
mftchr076 ex de,hl:ld (hl),#F0:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#62:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),a  :jp mftout2 ;L
mftchr077 ex de,hl:ld (hl),#C6:add hl,bc:ld (hl),#EE:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;M
mftchr078 ex de,hl:ld (hl),#C6:add hl,bc:ld (hl),#E6:add hl,bc:ld (hl),#F6:add hl,bc:ld (hl),#DE:add hl,bc:ld (hl),#CE:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;N
mftchr079 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;O
mftchr080 ex de,hl:ld (hl),#FC:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#F0:add hl,bc:ld (hl),a  :jp mftout2 ;P
mftchr081 ex de,hl:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#CE:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#0E:jp mftout2 ;Q
mftchr082 ex de,hl:ld (hl),#FC:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#E6:add hl,bc:ld (hl),a  :jp mftout2 ;R
mftchr083 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;S
mftchr084 ex de,hl:ld (hl),#7E:add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),#5A:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;T
mftchr085 ex de,hl:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;U
mftchr086 ex de,hl:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),a  :jp mftout2 ;V
mftchr087 ex de,hl:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),a  :jp mftout2 ;W
mftchr088 ex de,hl:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;X
mftchr089 ex de,hl:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;Y
mftchr090 ex de,hl:ld (hl),#FE:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#8C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#32:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),a  :jp mftout2 ;Z
mftchr091 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;[
mftchr092 ex de,hl:ld (hl),#C0:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#02:add hl,bc:ld (hl),a  :jp mftout2 ;\
mftchr093 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;]
mftchr094 ex de,hl:ld (hl),#10:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;^
mftchr095 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#FF:jp mftout2 ;_
mftchr096 ex de,hl:ld (hl),#30:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;`
mftchr097 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#78:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),a  :jp mftout2 ;a
mftchr098 ex de,hl:ld (hl),#E0:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#DC:add hl,bc:ld (hl),a  :jp mftout2 ;b
mftchr099 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;c
mftchr100 ex de,hl:ld (hl),#1C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),a  :jp mftout2 ;d
mftchr101 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;e
mftchr102 ex de,hl:ld (hl),#3C:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#F8:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#F8:add hl,bc:ld (hl),a  :jp mftout2 ;f
mftchr103 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#76:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#F8:jp mftout2 ;g
mftchr104 ex de,hl:ld (hl),#E0:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#E6:add hl,bc:ld (hl),a  :jp mftout2 ;h
mftchr105 ex de,hl:ld (hl),#18:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#38:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;i
mftchr106 ex de,hl:ld (hl),#06:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#3C:jp mftout2 ;j
mftchr107 ex de,hl:ld (hl),#E0:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#78:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#E6:add hl,bc:ld (hl),a  :jp mftout2 ;k
mftchr108 ex de,hl:ld (hl),#38:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#3C:add hl,bc:ld (hl),a  :jp mftout2 ;l
mftchr109 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#EC:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),a  :jp mftout2 ;m
mftchr110 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#DC:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),a  :jp mftout2 ;n
mftchr111 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),a  :jp mftout2 ;o
mftchr112 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#DC:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#66:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#F0:jp mftout2 ;p
mftchr113 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#76:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#0C:add hl,bc:ld (hl),#1E:jp mftout2 ;q
mftchr114 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#DC:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#60:add hl,bc:ld (hl),#F0:add hl,bc:ld (hl),a  :jp mftout2 ;r
mftchr115 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),#C0:add hl,bc:ld (hl),#7C:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#FC:add hl,bc:ld (hl),a  :jp mftout2 ;s
mftchr116 ex de,hl:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#FC:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#30:add hl,bc:ld (hl),#36:add hl,bc:ld (hl),#1C:add hl,bc:ld (hl),a  :jp mftout2 ;t
mftchr117 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#76:add hl,bc:ld (hl),a  :jp mftout2 ;u
mftchr118 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),a  :jp mftout2 ;v
mftchr119 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#D6:add hl,bc:ld (hl),#FE:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),a  :jp mftout2 ;w
mftchr120 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#38:add hl,bc:ld (hl),#6C:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),a  :jp mftout2 ;x
mftchr121 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#C6:add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),#06:add hl,bc:ld (hl),#FC:jp mftout2 ;y
mftchr122 ex de,hl:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),#4C:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#32:add hl,bc:ld (hl),#7E:add hl,bc:ld (hl),a  :jp mftout2 ;z
mftchr123 ex de,hl:ld (hl),#0E:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#70:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0E:add hl,bc:ld (hl),a  :jp mftout2 ;{
mftchr124 ex de,hl:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),a  :jp mftout2 ;|
mftchr125 ex de,hl:ld (hl),#70:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#0E:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#18:add hl,bc:ld (hl),#70:add hl,bc:ld (hl),a  :jp mftout2 ;}
mftchr126 ex de,hl:ld (hl),#76:add hl,bc:ld (hl),#DC:add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :add hl,bc:ld (hl),a  :jp mftout2 ;~
mftchr127 ex de,hl:ld (hl),#CC:add hl,bc:ld (hl),#33:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#33:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#33:add hl,bc:ld (hl),#CC:add hl,bc:ld (hl),#33:jp mftout2 ;