Difference between revisions of "Programming:Ultrafast Multiplication"
From CPCWiki - THE Amstrad CPC encyclopedia!
(New page: 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 Orga...) |
|||
(2 intermediate revisions by one other user not shown) | |||
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= | + | 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= | + | ;### MULTI -> Multiplies two signed integer values (A=DE*L/256) |
− | ;### Input | + | ;### Input DE=value1 (signed), L=value2 (signed) |
− | ;### Output A= | + | ;### Output A=DE*L/256 (signed) |
;### Destroyed F,BC,DE,HL | ;### Destroyed F,BC,DE,HL | ||
− | MULTI | + | MULTI LD H,MULTAB/512 |
− | + | ||
− | + | ||
ADD HL,HL | ADD HL,HL | ||
− | |||
− | |||
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 | ||
Line 295: | Line 294: | ||
NEG128 LD A,L:RR H:RRA:NEG:RET | NEG128 LD A,L:RR H:RRA:NEG:RET | ||
</pre> | </pre> | ||
+ | [[Category:Programming]] |
Latest revision as of 14:29, 8 October 2009
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