Difference between revisions of "Programming:Ultrafast Multiplication"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
m
m (some more little optimization)
Line 1: Line 1:
The following is the fastest possible '''multiplication routine''' (in a little specialised way) for the CPC, coded by [[Prodatron]] for the [[Voyage 1993 Megademo]] and the [[Digital Orgasm]] demo. It works with signed values and is mainly used for 3D graphic calculations. You can change it to HL=HL*A by removing LD A,H in front of every RET command inside the MULxxx sub-routines, but in this case A has to be positive.
+
The following is the fastest possible '''multiplication routine''' (in a little specialised way) for the CPC, coded by [[Prodatron]] for the [[Voyage 1993 Megademo]] and the [[Digital Orgasm]] demo. It works with signed values and is mainly used for 3D graphic calculations. You can change it to HL=DE*L by removing LD A,H in front of every RET command inside the MULxxx sub-routines, but in this case L has to be positive.
  
 
<pre>
 
<pre>
Line 10: Line 10:
 
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  
;### MULTI -> Multiplies two signed integer values (A=HL*A/256)
+
;### MULTI -> Multiplies two signed integer values (A=DE*L/256)
;### Input      HL=value1 (signed), A=value3 (signed)
+
;### Input      DE=value1 (signed), L=value2 (signed)
;### Output    A=HL*A/256 (signed)
+
;### Output    A=DE*L/256 (signed)
 
;### Destroyed  F,BC,DE,HL
 
;### Destroyed  F,BC,DE,HL
MULTI  EX  DE,HL
+
MULTI  LD  H,MULTAB/512
        LD  L,A
+
        LD  H,0
+
 
         ADD  HL,HL
 
         ADD  HL,HL
        LD  BC,MULTAB
 
        ADD  HL,BC
 
 
         LD  C,(HL)
 
         LD  C,(HL)
 
         INC  HL
 
         INC  HL
Line 27: Line 23:
 
         RET
 
         RET
 
;
 
;
 +
 +
DS -$ MOD 512
 +
 
MULTAB
 
MULTAB
 
DEFW MUL000,MUL001,MUL002,MUL003,MUL004,MUL005,MUL006,MUL007,MUL008,MUL009,MUL010,MUL011,MUL012,MUL013,MUL014,MUL015,MUL016,MUL017,MUL018,MUL019,MUL020,MUL021,MUL022,MUL023,MUL024,MUL025,MUL026,MUL027,MUL028,MUL029,MUL030,MUL031,MUL032,MUL033
 
DEFW MUL000,MUL001,MUL002,MUL003,MUL004,MUL005,MUL006,MUL007,MUL008,MUL009,MUL010,MUL011,MUL012,MUL013,MUL014,MUL015,MUL016,MUL017,MUL018,MUL019,MUL020,MUL021,MUL022,MUL023,MUL024,MUL025,MUL026,MUL027,MUL028,MUL029,MUL030,MUL031,MUL032,MUL033

Revision as of 04:17, 7 April 2007

The following is the fastest possible multiplication routine (in a little specialised way) for the CPC, coded by Prodatron for the Voyage 1993 Megademo and the Digital Orgasm demo. It works with signed values and is mainly used for 3D graphic calculations. You can change it to HL=DE*L by removing LD A,H in front of every RET command inside the MULxxx sub-routines, but in this case L has to be positive.

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@                                                                            @
;@              U L T R A F A S T   M U L T I P L I C A T I O N               @
;@                                                                            @
;@                   (c)oded 1993 by Prodatron / SymbiosiS                    @
;@                                                                            @
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

;### MULTI -> Multiplies two signed integer values (A=DE*L/256)
;### Input      DE=value1 (signed), L=value2 (signed)
;### Output     A=DE*L/256 (signed)
;### Destroyed  F,BC,DE,HL
MULTI   LD   H,MULTAB/512
        ADD  HL,HL
        LD   C,(HL)
        INC  HL
        LD   B,(HL)
        EX   DE,HL
        PUSH BC
        RET
;

DS -$ MOD 512

MULTAB
DEFW MUL000,MUL001,MUL002,MUL003,MUL004,MUL005,MUL006,MUL007,MUL008,MUL009,MUL010,MUL011,MUL012,MUL013,MUL014,MUL015,MUL016,MUL017,MUL018,MUL019,MUL020,MUL021,MUL022,MUL023,MUL024,MUL025,MUL026,MUL027,MUL028,MUL029,MUL030,MUL031,MUL032,MUL033
DEFW MUL034,MUL035,MUL036,MUL037,MUL038,MUL039,MUL040,MUL041,MUL042,MUL043,MUL044,MUL045,MUL046,MUL047,MUL048,MUL049,MUL050,MUL051,MUL052,MUL053,MUL054,MUL055,MUL056,MUL057,MUL058,MUL059,MUL060,MUL061,MUL062,MUL063,MUL064,MUL065,MUL066,MUL067
DEFW MUL068,MUL069,MUL070,MUL071,MUL072,MUL073,MUL074,MUL075,MUL076,MUL077,MUL078,MUL079,MUL080,MUL081,MUL082,MUL083,MUL084,MUL085,MUL086,MUL087,MUL088,MUL089,MUL090,MUL091,MUL092,MUL093,MUL094,MUL095,MUL096,MUL097,MUL098,MUL099,MUL100,MUL101
DEFW MUL102,MUL103,MUL104,MUL105,MUL106,MUL107,MUL108,MUL109,MUL110,MUL111,MUL112,MUL113,MUL114,MUL115,MUL116,MUL117,MUL118,MUL119,MUL120,MUL121,MUL122,MUL123,MUL124,MUL125,MUL126,MUL127
DEFW NEG128,NEG127,NEG126,NEG125,NEG124,NEG123,NEG122,NEG121,NEG120,NEG119,NEG118,NEG117,NEG116,NEG115,NEG114,NEG113,NEG112,NEG111,NEG110,NEG109,NEG108,NEG107,NEG106,NEG105,NEG104,NEG103,NEG102,NEG101,NEG100,NEG099,NEG098,NEG097,NEG096,NEG095
DEFW NEG094,NEG093,NEG092,NEG091,NEG090,NEG089,NEG088,NEG087,NEG086,NEG085,NEG084,NEG083,NEG082,NEG081,NEG080,NEG079,NEG078,NEG077,NEG076,NEG075,NEG074,NEG073,NEG072,NEG071,NEG070,NEG069,NEG068,NEG067,NEG066,NEG065,NEG064,NEG063,NEG062,NEG061
DEFW NEG060,NEG059,NEG058,NEG057,NEG056,NEG055,NEG054,NEG053,NEG052,NEG051,NEG050,NEG049,NEG048,NEG047,NEG046,NEG045,NEG044,NEG043,NEG042,NEG041,NEG040,NEG039,NEG038,NEG037,NEG036,NEG035,NEG034,NEG033,NEG032,NEG031,NEG030,NEG029,NEG028,NEG027
DEFW NEG026,NEG025,NEG024,NEG023,NEG022,NEG021,NEG020,NEG019,NEG018,NEG017,NEG016,NEG015,NEG014,NEG013,NEG012,NEG011,NEG010,NEG009,NEG008,NEG007,NEG006,NEG005,NEG004,NEG003,NEG002,NEG001
;
MUL000 LD HL,0:LD A,H:RET
MUL064 ADD HL,HL
MUL032 ADD HL,HL
MUL016 ADD HL,HL
MUL008 ADD HL,HL
MUL004 ADD HL,HL
MUL002 ADD HL,HL
MUL001 LD A,H:RET
MUL096 ADD HL,HL
MUL048 ADD HL,HL
MUL024 ADD HL,HL
MUL012 ADD HL,HL
MUL006 ADD HL,HL
MUL003 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL080 ADD HL,HL
MUL040 ADD HL,HL
MUL020 ADD HL,HL
MUL010 ADD HL,HL
MUL005 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL112 ADD HL,HL
MUL056 ADD HL,HL
MUL028 ADD HL,HL
MUL014 ADD HL,HL
MUL007 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL072 ADD HL,HL
MUL036 ADD HL,HL
MUL018 ADD HL,HL
MUL009 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL088 ADD HL,HL
MUL044 ADD HL,HL
MUL022 ADD HL,HL
MUL011 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL104 ADD HL,HL
MUL052 ADD HL,HL
MUL026 ADD HL,HL
MUL013 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL120 ADD HL,HL
MUL060 ADD HL,HL
MUL030 ADD HL,HL
MUL015 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL068 ADD HL,HL
MUL034 ADD HL,HL
MUL017 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL076 ADD HL,HL
MUL038 ADD HL,HL
MUL019 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL084 ADD HL,HL
MUL042 ADD HL,HL
MUL021 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:RET
MUL092 ADD HL,HL
MUL046 ADD HL,HL
MUL023 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
MUL100 ADD HL,HL
MUL050 ADD HL,HL
MUL025 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL108 ADD HL,HL
MUL054 ADD HL,HL
MUL027 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL116 ADD HL,HL
MUL058 ADD HL,HL
MUL029 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:ADD HL,BC:LD A,H:RET
MUL124 ADD HL,HL
MUL062 ADD HL,HL
MUL031 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL066 ADD HL,HL
MUL033 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL070 ADD HL,HL
MUL035 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:RET
MUL074 ADD HL,HL
MUL037 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:RET
MUL078 ADD HL,HL
MUL039 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:RET
MUL082 ADD HL,HL
MUL041 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:RET
MUL086 ADD HL,HL
MUL043 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL090 ADD HL,HL
MUL045 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL094 ADD HL,HL
MUL047 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
MUL098 ADD HL,HL
MUL049 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL102 ADD HL,HL
MUL051 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL106 ADD HL,HL
MUL053 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL110 ADD HL,HL
MUL055 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL114 ADD HL,HL
MUL057 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL118 ADD HL,HL
MUL059 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL122 ADD HL,HL
MUL061 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL126 ADD HL,HL
MUL063 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
MUL065 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL067 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL069 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL071 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:RET
MUL073 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL075 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL077 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL079 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:RET
MUL081 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:RET
MUL083 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL085 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL087 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
MUL089 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL091 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
MUL093 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL095 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:RET
MUL097 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:RET
MUL099 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
MUL101 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:RET
MUL103 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL105 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL107 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL109 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:RET
MUL111 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:RET
MUL113 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL115 LD E,L:LD D,H:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:RET
MUL117 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:RET
MUL119 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL121 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL123 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL125 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:RET
MUL127 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:RET
;
NEG064 ADD HL,HL
NEG032 ADD HL,HL
NEG016 ADD HL,HL
NEG008 ADD HL,HL
NEG004 ADD HL,HL
NEG002 ADD HL,HL
NEG001 LD A,H:NEG:RET
NEG096 ADD HL,HL
NEG048 ADD HL,HL
NEG024 ADD HL,HL
NEG012 ADD HL,HL
NEG006 ADD HL,HL
NEG003 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG080 ADD HL,HL
NEG040 ADD HL,HL
NEG020 ADD HL,HL
NEG010 ADD HL,HL
NEG005 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG112 ADD HL,HL
NEG056 ADD HL,HL
NEG028 ADD HL,HL
NEG014 ADD HL,HL
NEG007 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG072 ADD HL,HL
NEG036 ADD HL,HL
NEG018 ADD HL,HL
NEG009 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG088 ADD HL,HL
NEG044 ADD HL,HL
NEG022 ADD HL,HL
NEG011 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG104 ADD HL,HL
NEG052 ADD HL,HL
NEG026 ADD HL,HL
NEG013 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG120 ADD HL,HL
NEG060 ADD HL,HL
NEG030 ADD HL,HL
NEG015 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG068 ADD HL,HL
NEG034 ADD HL,HL
NEG017 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG076 ADD HL,HL
NEG038 ADD HL,HL
NEG019 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG084 ADD HL,HL
NEG042 ADD HL,HL
NEG021 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG092 ADD HL,HL
NEG046 ADD HL,HL
NEG023 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG100 ADD HL,HL
NEG050 ADD HL,HL
NEG025 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG108 ADD HL,HL
NEG054 ADD HL,HL
NEG027 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG116 ADD HL,HL
NEG058 ADD HL,HL
NEG029 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG124 ADD HL,HL
NEG062 ADD HL,HL
NEG031 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG066 ADD HL,HL
NEG033 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG070 ADD HL,HL
NEG035 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG074 ADD HL,HL
NEG037 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG078 ADD HL,HL
NEG039 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG082 ADD HL,HL
NEG041 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG086 ADD HL,HL
NEG043 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG090 ADD HL,HL
NEG045 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG094 ADD HL,HL
NEG047 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG098 ADD HL,HL
NEG049 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG102 ADD HL,HL
NEG051 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG106 ADD HL,HL
NEG053 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG110 ADD HL,HL
NEG055 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG114 ADD HL,HL
NEG057 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG118 ADD HL,HL
NEG059 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG122 ADD HL,HL
NEG061 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG126 ADD HL,HL
NEG063 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG065 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG067 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG069 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG071 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG073 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG075 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG077 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,BC:LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG079 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG081 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG083 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG085 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG087 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG089 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG091 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG093 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG095 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG097 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,BC:LD A,H:NEG:RET
NEG099 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG101 LD C,L:LD B,H:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD A,H:NEG:RET
NEG103 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG105 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG107 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG109 LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:ADD HL,DE:LD A,H:NEG:RET
NEG111 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG113 LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG115 LD E,L:LD D,H:ADD HL,HL:LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG117 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:LD E,L:LD D,H:ADD HL,HL:ADD HL,DE:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD A,H:NEG:RET
NEG119 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG121 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG123 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG125 LD C,L:LD B,H:ADD HL,HL:LD E,L:LD D,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:OR A:SBC HL,DE:LD A,H:NEG:RET
NEG127 LD C,L:LD B,H:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:ADD HL,HL:OR A:SBC HL,BC:LD A,H:NEG:RET
NEG128 LD A,L:RR H:RRA:NEG:RET