; Canonical image offsets; selected reachable regions, not a full disassembly.
; Self-modifying immediate operands retain their INITIAL values.
; 98/99 in 16-bit mode are CBW/CWD (normalised below).

; tower coordinate lookup initialization
0396  bbbda8         mov      bx, 0xa8bd
0399  b0b8           mov      al, 0xb8
039B  b90900         mov      cx, 9
039E  02c1           add      al, cl
03A0  268807         mov      byte ptr es:[bx], al
03A3  fec3           inc      bl
03A5  e2f9           loop     0x3a0
03A7  3cbd           cmp      al, 0xbd
03A9  75f0           jne      0x39b

; keyboard steering
7AD6  a1b015         mov      ax, word ptr [0x15b0]
7AD9  2494           and      al, 0x94
7ADB  d0c0           rol      al, 1
7ADD  d1c0           rol      ax, 1
7ADF  04c0           add      al, 0xc0
7AE1  d0d0           rcl      al, 1
7AE3  243f           and      al, 0x3f
7AE5  04e0           add      al, 0xe0
7AE7  d0d0           rcl      al, 1
7AE9  93             xchg     bx, ax
7AEA  8a3eaa15       mov      bh, byte ptr [0x15aa]
7AEE  bd0000         mov      bp, 0
7AF1  e81001         call     0x7c04
7AF4  97             xchg     di, ax
7AF5  892e2dd6       mov      word ptr [0xd62d], bp
7AF9  8936ef7a       mov      word ptr [0x7aef], si
7AFD  bd0000         mov      bp, 0
7B00  e80101         call     0x7c04
7B03  92             xchg     dx, ax
7B04  892ecad5       mov      word ptr [0xd5ca], bp
7B08  8936fe7a       mov      word ptr [0x7afe], si
7B0C  8bc7           mov      ax, di
7B0E  0bfa           or       di, dx
7B10  756b           jne      0x7b7d
7B12  f606523b20     test     byte ptr [0x3b52], 0x20
7B17  742c           je       0x7b45
7B19  bba000         mov      bx, 0xa0
7B1C  36a1b2d9       mov      ax, word ptr ss:[0xd9b2]
7B20  8b16dc11       mov      dx, word ptr [0x11dc]
7B24  be0000         mov      si, 0
7B27  e89208         call     0x83bc
7B2A  8936257b       mov      word ptr [0x7b25], si
7B2E  95             xchg     bp, ax
7B2F  36a1b4d9       mov      ax, word ptr ss:[0xd9b4]
7B33  8b16da11       mov      dx, word ptr [0x11da]
7B37  03d2           add      dx, dx
7B39  be0000         mov      si, 0
7B3C  e87d08         call     0x83bc
7B3F  89363a7b       mov      word ptr [0x7b3a], si
7B43  eb34           jmp      0x7b79
7B45  a1da11         mov      ax, word ptr [0x11da]
7B48  2d0000         sub      ax, 0
7B4B  bd0000         mov      bp, 0
7B4E  0106497b       add      word ptr [0x7b49], ax
7B52  e81e01         call     0x7c73
7B55  892e2dd6       mov      word ptr [0xd62d], bp
7B59  50             push     ax
7B5A  89364c7b       mov      word ptr [0x7b4c], si
7B5E  a1dc11         mov      ax, word ptr [0x11dc]
7B61  f7d8           neg      ax
7B63  2d0000         sub      ax, 0
7B66  bd0000         mov      bp, 0
7B69  0106647b       add      word ptr [0x7b64], ax
7B6D  e80301         call     0x7c73
7B70  95             xchg     bp, ax
7B71  8936677b       mov      word ptr [0x7b67], si
7B75  a3cad5         mov      word ptr [0xd5ca], ax
7B78  58             pop      ax
7B79  8bd5           mov      dx, bp
7B7B  0be8           or       bp, ax
7B7D  7545           jne      0x7bc4
7B7F  a04917         mov      al, byte ptr [0x1749]
7B82  f6d0           not      al
7B84  2403           and      al, 3
7B86  8bc2           mov      ax, dx
7B88  753a           jne      0x7bc4
7B8A  c706e80bdb6f   mov      word ptr [0xbe8], 0x6fdb
7B90  c1e108         shl      cx, 8
7B93  a11417         mov      ax, word ptr [0x1714]
7B96  ba0000         mov      dx, 0
7B99  a3977b         mov      word ptr [0x7b97], ax
7B9C  8b36b017       mov      si, word ptr [0x17b0]
7BA0  e82700         call     0x7bca
7BA3  a32dd6         mov      word ptr [0xd62d], ax
7BA6  f7e9           imul     cx
7BA8  8bda           mov      bx, dx
7BAA  a11617         mov      ax, word ptr [0x1716]
7BAD  ba0000         mov      dx, 0
7BB0  a3ae7b         mov      word ptr [0x7bae], ax
7BB3  8b36b017       mov      si, word ptr [0x17b0]
7BB7  e81000         call     0x7bca
7BBA  a3cad5         mov      word ptr [0xd5ca], ax
7BBD  f7e9           imul     cx
7BBF  8bc3           mov      ax, bx
7BC1  c1e908         shr      cx, 8
7BC4  c3             ret      
7BC5  58             pop      ax
7BC6  2bc0           sub      ax, ax
7BC8  99             cwd      
7BC9  c3             ret      
7BCA  2bc2           sub      ax, dx
7BCC  d1f8           sar      ax, 1
7BCE  03d0           add      dx, ax
7BD0  7908           jns      0x7bda
7BD2  f7da           neg      dx
7BD4  e80300         call     0x7bda
7BD7  f7d8           neg      ax
7BD9  c3             ret      
7BDA  2bc0           sub      ax, ax
7BDC  3bd6           cmp      dx, si
7BDE  730c           jae      0x7bec
7BE0  f7f6           div      si
7BE2  c1e804         shr      ax, 4
7BE5  fecc           dec      ah
7BE7  79db           jns      0x7bc4
7BE9  2bc0           sub      ax, ax
7BEB  c3             ret      
7BEC  b40f           mov      ah, 0xf
7BEE  c3             ret      
7BEF  2bd2           sub      dx, dx
7BF1  e8e700         call     0x7cdb
7BF4  99             cwd      
7BF5  33c2           xor      ax, dx
7BF7  2bc2           sub      ax, dx
7BF9  3bc6           cmp      ax, si
7BFB  7202           jb       0x7bff
7BFD  8bc6           mov      ax, si
7BFF  33c2           xor      ax, dx
7C01  2bc2           sub      ax, dx
7C03  c3             ret      
7C04  c0cb02         ror      bl, 2
7C07  2bf6           sub      si, si
7C09  f6c3c0         test     bl, 0xc0
7C0C  7407           je       0x7c15
7C0E  7a1d           jp       0x7c2d
7C10  7814           js       0x7c26
7C12  e83b00         call     0x7c50
7C15  8bc6           mov      ax, si
7C17  2bc5           sub      ax, bp
7C19  d1f8           sar      ax, 1
7C1B  03c5           add      ax, bp
7C1D  8be8           mov      bp, ax
7C1F  f7e9           imul     cx
7C21  8ac4           mov      al, ah
7C23  8ae2           mov      ah, dl
7C25  c3             ret      
7C26  e82700         call     0x7c50
7C29  f7de           neg      si
7C2B  ebe8           jmp      0x7c15
7C2D  8bf5           mov      si, bp
7C2F  2bc0           sub      ax, ax
7C31  f6c704         test     bh, 4
7C34  74e1           je       0x7c17
7C36  8bc5           mov      ax, bp
7C38  99             cwd      
7C39  33c2           xor      ax, dx
7C3B  2bc2           sub      ax, dx
7C3D  8bf1           mov      si, cx
7C3F  c1e602         shl      si, 2
7C42  2bc6           sub      ax, si
7C44  be0000         mov      si, 0
7C47  72cc           jb       0x7c15
7C49  33c2           xor      ax, dx
7C4B  2bc2           sub      ax, dx
7C4D  96             xchg     si, ax
7C4E  ebc5           jmp      0x7c15
7C50  8bc5           mov      ax, bp
7C52  99             cwd      
7C53  33c2           xor      ax, dx
7C55  beff1f         mov      si, 0x1fff
7C58  f6c704         test     bh, 4
7C5B  7508           jne      0x7c65
7C5D  beb60d         mov      si, 0xdb6
7C60  2bc2           sub      ax, dx
7C62  750d           jne      0x7c71
7C64  c3             ret      
7C65  2bc2           sub      ax, dx
7C67  8bd1           mov      dx, cx
7C69  c1e203         shl      dx, 3
7C6C  03c2           add      ax, dx
7C6E  e883ff         call     0x7bf4
7C71  96             xchg     si, ax
7C72  c3             ret      
7C73  f726a27c       mul      word ptr [0x7ca2]
7C77  8bf0           mov      si, ax
7C79  b88000         mov      ax, 0x80
7C7C  2bc1           sub      ax, cx
7C7E  03c0           add      ax, ax
7C80  0bed           or       bp, bp
7C82  780a           js       0x7c8e
7C84  f7e5           mul      bp
7C86  8ac4           mov      al, ah
7C88  8ae2           mov      ah, dl
7C8A  03f0           add      si, ax
7C8C  eb87           jmp      0x7c15
7C8E  f7dd           neg      bp
7C90  f7e5           mul      bp
7C92  f7dd           neg      bp
7C94  058000         add      ax, 0x80
7C97  8ac4           mov      al, ah
7C99  b400           mov      ah, 0
7C9B  12e2           adc      ah, dl
7C9D  2bf0           sub      si, ax
7C9F  e973ff         jmp      0x7c15

; craft callbacks and movement
7E49  ba0000         mov      dx, 0
7E4C  8bd9           mov      bx, cx
7E4E  8b4642         mov      ax, word ptr [bp + 0x42]
7E51  e887fe         call     0x7cdb
7E54  894642         mov      word ptr [bp + 0x42], ax
7E57  d1e8           shr      ax, 1
7E59  89463e         mov      word ptr [bp + 0x3e], ax
7E5C  0ae4           or       ah, ah
7E5E  741e           je       0x7e7e
7E60  b000           mov      al, 0
7E62  0ac0           or       al, al
7E64  7518           jne      0x7e7e
7E66  803ecbd50c     cmp      byte ptr [0xd5cb], 0xc
7E6B  7c11           jl       0x7e7e
7E6D  d16e42         shr      word ptr [bp + 0x42], 1
7E70  c74640c800     mov      word ptr [bp + 0x40], 0xc8
7E75  806607ef       and      byte ptr [bp + 7], 0xef
7E79  c746660881     mov      word ptr [bp + 0x66], 0x8108
7E7E  c3             ret      
7E7F  803e0e7f00     cmp      byte ptr [0x7f0e], 0
7E84  752d           jne      0x7eb3
7E86  8bd1           mov      dx, cx
7E88  c1e203         shl      dx, 3
7E8B  2bd1           sub      dx, cx
7E8D  b80000         mov      ax, 0
7E90  f606524501     test     byte ptr [0x4552], 1
7E95  7409           je       0x7ea0
7E97  03c2           add      ax, dx
7E99  80fc50         cmp      ah, 0x50
7E9C  7202           jb       0x7ea0
7E9E  b450           mov      ah, 0x50
7EA0  a38e7e         mov      word ptr [0x7e8e], ax
7EA3  02e4           add      ah, ah
7EA5  80e4e0         and      ah, 0xe0
7EA8  88264185       mov      byte ptr [0x8541], ah
7EAC  c3             ret      
7EAD  58             pop      ax
7EAE  894666         mov      word ptr [bp + 0x66], ax
7EB1  ffe0           jmp      ax
7EB3  e8f7ff         call     0x7ead
7EB6  e85b06         call     0x8514
7EB9  ba0000         mov      dx, 0
7EBC  8b4630         mov      ax, word ptr [bp + 0x30]
7EBF  8b7628         mov      si, word ptr [bp + 0x28]
7EC2  e80f05         call     0x83d4
7EC5  e8cc04         call     0x8394
7EC8  c1e806         shr      ax, 6
7ECB  03c0           add      ax, ax
7ECD  93             xchg     bx, ax
7ECE  ba0000         mov      dx, 0
7ED1  b000           mov      al, 0
7ED3  e89101         call     0x8067
7ED6  53             push     bx
7ED7  bb2c01         mov      bx, 0x12c
7EDA  e8e701         call     0x80c4
7EDD  5b             pop      bx
7EDE  50             push     ax
7EDF  e84b01         call     0x802d
7EE2  8b462a         mov      ax, word ptr [bp + 0x2a]
7EE5  03c6           add      ax, si
7EE7  50             push     ax
7EE8  d1fe           sar      si, 1
7EEA  2bc6           sub      ax, si
7EEC  c1e806         shr      ax, 6
7EEF  03c0           add      ax, ax
7EF1  96             xchg     si, ax
7EF2  53             push     bx
7EF3  8bd1           mov      dx, cx
7EF5  8ae9           mov      ch, cl
7EF7  d1e9           shr      cx, 1
7EF9  c1e204         shl      dx, 4
7EFC  a18f7f         mov      ax, word ptr [0x7f8f]
7EFF  3bc2           cmp      ax, dx
7F01  7201           jb       0x7f04
7F03  92             xchg     dx, ax
7F04  29068f7f       sub      word ptr [0x7f8f], ax
7F08  8bd9           mov      bx, cx
7F0A  d1eb           shr      bx, 1
7F0C  ba0000         mov      dx, 0
7F0F  3bd3           cmp      dx, bx
7F11  7202           jb       0x7f15
7F13  8bd3           mov      dx, bx
7F15  29160d7f       sub      word ptr [0x7f0d], dx
7F19  03d2           add      dx, dx
7F1B  d1e8           shr      ax, 1
7F1D  03d0           add      dx, ax
7F1F  b80000         mov      ax, 0
7F22  f7e2           mul      dx
7F24  f7f3           div      bx
7F26  050000         add      ax, 0
7F29  50             push     ax
7F2A  e8db02         call     0x8208
7F2D  57             push     di
7F2E  51             push     cx
7F2F  8a6605         mov      ah, byte ptr [bp + 5]
7F32  8b760c         mov      si, word ptr [bp + 0xc]
7F35  e81805         call     0x8450
7F38  803e524501     cmp      byte ptr [0x4552], 1
7F3D  7402           je       0x7f41
7F3F  2bc0           sub      ax, ax
7F41  8bf8           mov      di, ax
7F43  b018           mov      al, 0x18
7F45  3ae0           cmp      ah, al
7F47  7702           ja       0x7f4b
7F49  8ac4           mov      al, ah
7F4B  d0e8           shr      al, 1
7F4D  a25045         mov      byte ptr [0x4550], al
7F50  57             push     di
7F51  e80003         call     0x8254
7F54  5f             pop      di
7F55  f706f4b94002   test     word ptr [0xb9f4], 0x240
7F5B  7506           jne      0x7f63
7F5D  8bd7           mov      dx, di
7F5F  d1ea           shr      dx, 1
7F61  03c2           add      ax, dx
7F63  d1d8           rcr      ax, 1
7F65  c1e802         shr      ax, 2
7F68  a3277f         mov      word ptr [0x7f27], ax
7F6B  59             pop      cx
7F6C  8bc7           mov      ax, di
7F6E  befa00         mov      si, 0xfa
7F71  2bc6           sub      ax, si
7F73  7706           ja       0x7f7b
7F75  03f0           add      si, ax
7F77  2bc0           sub      ax, ax
7F79  eb05           jmp      0x7f80
7F7B  f7e1           mul      cx
7F7D  d1ea           shr      dx, 1
7F7F  92             xchg     dx, ax
7F80  0bc0           or       ax, ax
7F82  7405           je       0x7f89
7F84  02c5           add      al, ch
7F86  80d400         adc      ah, 0
7F89  96             xchg     si, ax
7F8A  8ae0           mov      ah, al
7F8C  f7e1           mul      cx
7F8E  b80000         mov      ax, 0
7F91  c1ea02         shr      dx, 2
7F94  03c2           add      ax, dx
7F96  1bd2           sbb      dx, dx
7F98  0bd0           or       dx, ax
7F9A  2bc0           sub      ax, ax
7F9C  81ff0001       cmp      di, 0x100
7FA0  7219           jb       0x7fbb
7FA2  b8ffcf         mov      ax, 0xcfff
7FA5  2d0000         sub      ax, 0
7FA8  8bd9           mov      bx, cx
7FAA  c1eb02         shr      bx, 2
7FAD  3bc3           cmp      ax, bx
7FAF  7202           jb       0x7fb3
7FB1  8bc3           mov      ax, bx
7FB3  2bd0           sub      dx, ax
7FB5  7304           jae      0x7fbb
7FB7  03c2           add      ax, dx
7FB9  2bd2           sub      dx, dx
7FBB  89168f7f       mov      word ptr [0x7f8f], dx
7FBF  bbffbf         mov      bx, 0xbfff
7FC2  e86405         call     0x8529
7FC5  5e             pop      si
7FC6  58             pop      ax
7FC7  f7ac4a94       imul     word ptr [si - 0x6bb6]
7FCB  03c0           add      ax, ax
7FCD  13d2           adc      dx, dx
7FCF  8bf2           mov      si, dx
7FD1  58             pop      ax
7FD2  99             cwd      
7FD3  33c2           xor      ax, dx
7FD5  2bc2           sub      ax, dx
7FD7  f7ef           imul     di
7FD9  0bd2           or       dx, dx
7FDB  7825           js       0x8002
7FDD  a1597f         mov      ax, word ptr [0x7f59]
7FE0  8506f4b9       test     word ptr [0xb9f4], ax
7FE4  7513           jne      0x7ff9
7FE6  8bde           mov      bx, si
7FE8  f7db           neg      bx
7FEA  7816           js       0x8002
7FEC  803ed27e00     cmp      byte ptr [0x7ed2], 0
7FF1  7506           jne      0x7ff9
7FF3  2bd3           sub      dx, bx
7FF5  730b           jae      0x8002
7FF7  2bd2           sub      dx, dx
7FF9  0af6           or       dh, dh
7FFB  7405           je       0x8002
7FFD  baff00         mov      dx, 0xff
8000  eb00           jmp      0x8002
8002  d1fa           sar      dx, 1
8004  8d44a6         lea      ax, [si - 0x5a]
8007  03c2           add      ax, dx
8009  8b560c         mov      dx, word ptr [bp + 0xc]
800C  80ee01         sub      dh, 1
800F  7302           jae      0x8013
8011  f7da           neg      dx
8013  c1fa05         sar      dx, 5
8016  2bc2           sub      ax, dx
8018  e85302         call     0x826e
801B  5f             pop      di
801C  5b             pop      bx
801D  8b4e2e         mov      cx, word ptr [bp + 0x2e]
8020  e87da3         call     0x23a0
8023  897e2a         mov      word ptr [bp + 0x2a], di
8026  895e2c         mov      word ptr [bp + 0x2c], bx
8029  894e2e         mov      word ptr [bp + 0x2e], cx
802C  c3             ret      
802D  d1fa           sar      dx, 1
802F  2bc2           sub      ax, dx
8031  c1e806         shr      ax, 6
8034  03c0           add      ax, ax
8036  97             xchg     di, ax
8037  f7ad4a96       imul     word ptr [di - 0x69b6]
803B  92             xchg     dx, ax
803C  f7e9           imul     cx
803E  d1fa           sar      dx, 1
8040  d1d8           rcr      ax, 1
8042  8ac4           mov      al, ah
8044  8ae2           mov      ah, dl
8046  50             push     ax
8047  8b874a96       mov      ax, word ptr [bx - 0x69b6]
804B  f7ad4a96       imul     word ptr [di - 0x69b6]
804F  8b874a94       mov      ax, word ptr [bx - 0x6bb6]
8053  8bda           mov      bx, dx
8055  99             cwd      
8056  33f2           xor      si, dx
8058  2bf2           sub      si, dx
805A  f7e8           imul     ax
805C  03c0           add      ax, ax
805E  13d2           adc      dx, dx
8060  92             xchg     dx, ax
8061  f7ee           imul     si
8063  5e             pop      si
8064  2bf2           sub      si, dx
8066  c3             ret      
8067  0ac0           or       al, al
8069  7539           jne      0x80a4
806B  8b4630         mov      ax, word ptr [bp + 0x30]
806E  8b7626         mov      si, word ptr [bp + 0x26]
8071  e86003         call     0x83d4
8074  897626         mov      word ptr [bp + 0x26], si
8077  50             push     ax
8078  8b762c         mov      si, word ptr [bp + 0x2c]
807B  c1ee06         shr      si, 6
807E  03f6           add      si, si
8080  8b844a94       mov      ax, word ptr [si - 0x6bb6]
8084  99             cwd      
8085  33c2           xor      ax, dx
8087  2bc2           sub      ax, dx
8089  96             xchg     si, ax
808A  8b874a96       mov      ax, word ptr [bx - 0x69b6]
808E  99             cwd      
808F  33d0           xor      dx, ax
8091  3bd6           cmp      dx, si
8093  7306           jae      0x809b
8095  99             cwd      
8096  96             xchg     si, ax
8097  33c2           xor      ax, dx
8099  2bc2           sub      ax, dx
809B  5e             pop      si
809C  f7ee           imul     si
809E  8b462c         mov      ax, word ptr [bp + 0x2c]
80A1  03c2           add      ax, dx
80A3  c3             ret      
80A4  56             push     si
80A5  a1cad5         mov      ax, word ptr [0xd5ca]
80A8  c1f802         sar      ax, 2
80AB  050000         add      ax, 0
80AE  2b460c         sub      ax, word ptr [bp + 0xc]
80B1  be0002         mov      si, 0x200
80B4  e83dfb         call     0x7bf4
80B7  5e             pop      si
80B8  8bd0           mov      dx, ax
80BA  c1e203         shl      dx, 3
80BD  53             push     bx
80BE  e8f202         call     0x83b3
80C1  5b             pop      bx
80C2  ebb0           jmp      0x8074
80C4  56             push     si
80C5  52             push     dx
80C6  be0000         mov      si, 0
80C9  ba00f0         mov      dx, 0xf000
80CC  3bc2           cmp      ax, dx
80CE  7e0c           jle      0x80dc
80D0  2b5e3e         sub      bx, word ptr [bp + 0x3e]
80D3  7207           jb       0x80dc
80D5  d1eb           shr      bx, 1
80D7  e8e202         call     0x83bc
80DA  eb05           jmp      0x80e1
80DC  2bd2           sub      dx, dx
80DE  e8fe02         call     0x83df
80E1  5a             pop      dx
80E2  03d0           add      dx, ax
80E4  8b462c         mov      ax, word ptr [bp + 0x2c]
80E7  03c2           add      ax, dx
80E9  8936c780       mov      word ptr [0x80c7], si
80ED  5e             pop      si
80EE  c3             ret      
80EF  56             push     si
80F0  52             push     dx
80F1  8b36c780       mov      si, word ptr [0x80c7]
80F5  ba0038         mov      dx, 0x3800
80F8  2b560c         sub      dx, word ptr [bp + 0xc]
80FB  3bc2           cmp      ax, dx
80FD  7fd6           jg       0x80d5
80FF  ba00f0         mov      dx, 0xf000
8102  3bc2           cmp      ax, dx
8104  7ecf           jle      0x80d5
8106  ebc8           jmp      0x80d0
8108  b80000         mov      ax, 0
810B  03c1           add      ax, cx
810D  03c1           add      ax, cx
810F  80fcc0         cmp      ah, 0xc0
8112  80d4ff         adc      ah, 0xff
8115  a30981         mov      word ptr [0x8109], ax
8118  b8ff07         mov      ax, 0x7ff
811B  2b463e         sub      ax, word ptr [bp + 0x3e]
811E  7302           jae      0x8122
8120  2bc0           sub      ax, ax
8122  f7e0           mul      ax
8124  32c2           xor      al, dl
8126  24c0           and      al, 0xc0
8128  32c2           xor      al, dl
812A  c1c806         ror      ax, 6
812D  d1e8           shr      ax, 1
812F  8bf8           mov      di, ax
8131  c1ef05         shr      di, 5
8134  a38381         mov      word ptr [0x8183], ax
8137  8b16ba7e       mov      dx, word ptr [0x7eba]
813B  03d2           add      dx, dx
813D  f7ea           imul     dx
813F  03c0           add      ax, ax
8141  13d2           adc      dx, dx
8143  8b4630         mov      ax, word ptr [bp + 0x30]
8146  8b7628         mov      si, word ptr [bp + 0x28]
8149  e88802         call     0x83d4
814C  96             xchg     si, ax
814D  894628         mov      word ptr [bp + 0x28], ax
8150  8b462e         mov      ax, word ptr [bp + 0x2e]
8153  03c6           add      ax, si
8155  8bd8           mov      bx, ax
8157  d1fe           sar      si, 1
8159  2bc6           sub      ax, si
815B  99             cwd      
815C  33c2           xor      ax, dx
815E  2bc7           sub      ax, di
8160  7302           jae      0x8164
8162  8bc2           mov      ax, dx
8164  33c2           xor      ax, dx
8166  f7e9           imul     cx
8168  8ac4           mov      al, ah
816A  8ae2           mov      ah, dl
816C  294628         sub      word ptr [bp + 0x28], ax
816F  f7e9           imul     cx
8171  2bda           sub      bx, dx
8173  895e2e         mov      word ptr [bp + 0x2e], bx
8176  2bde           sub      bx, si
8178  8bc3           mov      ax, bx
817A  e82702         call     0x83a4
817D  c1eb06         shr      bx, 6
8180  03db           add      bx, bx
8182  b80000         mov      ax, 0
8185  8b16cf7e       mov      dx, word ptr [0x7ecf]
8189  03d2           add      dx, dx
818B  f7ea           imul     dx
818D  2ac0           sub      al, al
818F  e8d5fe         call     0x8067
8192  53             push     bx
8193  8b5e0c         mov      bx, word ptr [bp + 0xc]
8196  c1fb03         sar      bx, 3
8199  80ef04         sub      bh, 4
819C  7d02           jge      0x81a0
819E  2bdb           sub      bx, bx
81A0  fec7           inc      bh
81A2  e84aff         call     0x80ef
81A5  5b             pop      bx
81A6  50             push     ax
81A7  e883fe         call     0x802d
81AA  a18381         mov      ax, word ptr [0x8183]
81AD  f7ee           imul     si
81AF  03c0           add      ax, ax
81B1  13d2           adc      dx, dx
81B3  03c0           add      ax, ax
81B5  13d2           adc      dx, dx
81B7  8b462a         mov      ax, word ptr [bp + 0x2a]
81BA  03c2           add      ax, dx
81BC  50             push     ax
81BD  d1fa           sar      dx, 1
81BF  2bc2           sub      ax, dx
81C1  c1e806         shr      ax, 6
81C4  03c0           add      ax, ax
81C6  8bf0           mov      si, ax
81C8  53             push     bx
81C9  8ae9           mov      ch, cl
81CB  8b563e         mov      dx, word ptr [bp + 0x3e]
81CE  c1ea03         shr      dx, 3
81D1  a1597f         mov      ax, word ptr [0x7f59]
81D4  8506f4b9       test     word ptr [0xb9f4], ax
81D8  b88200         mov      ax, 0x82
81DB  7503           jne      0x81e0
81DD  a1207f         mov      ax, word ptr [0x7f20]
81E0  03c2           add      ax, dx
81E2  51             push     cx
81E3  d1e9           shr      cx, 1
81E5  50             push     ax
81E6  e81f00         call     0x8208
81E9  57             push     di
81EA  e86700         call     0x8254
81ED  5e             pop      si
81EE  58             pop      ax
81EF  59             pop      cx
81F0  f7ac4a94       imul     word ptr [si - 0x6bb6]
81F4  03c0           add      ax, ax
81F6  13d2           adc      dx, dx
81F8  8bf2           mov      si, dx
81FA  58             pop      ax
81FB  8b5642         mov      dx, word ptr [bp + 0x42]
81FE  d1fa           sar      dx, 1
8200  80c602         add      dh, 2
8203  f7ea           imul     dx
8205  e9fcfd         jmp      0x8004
8208  f7ad4a96       imul     word ptr [di - 0x69b6]
820C  03c0           add      ax, ax
820E  13d2           adc      dx, dx
8210  92             xchg     dx, ax
8211  8b5e42         mov      bx, word ptr [bp + 0x42]
8214  2bc3           sub      ax, bx
8216  f7e9           imul     cx
8218  8bc2           mov      ax, dx
821A  3d0100         cmp      ax, 1
821D  13c3           adc      ax, bx
821F  894642         mov      word ptr [bp + 0x42], ax
8222  2bc3           sub      ax, bx
8224  d1f8           sar      ax, 1
8226  03c3           add      ax, bx
8228  f7e9           imul     cx
822A  8bda           mov      bx, dx
822C  f7db           neg      bx
822E  8b844a96       mov      ax, word ptr [si - 0x69b6]
8232  f7eb           imul     bx
8234  006605         add      byte ptr [bp + 5], ah
8237  13560a         adc      dx, word ptr [bp + 0xa]
823A  89560a         mov      word ptr [bp + 0xa], dx
823D  87da           xchg     dx, bx
823F  8b844a94       mov      ax, word ptr [si - 0x6bb6]
8243  f7ea           imul     dx
8245  8a4604         mov      al, byte ptr [bp + 4]
8248  02c4           add      al, ah
824A  884604         mov      byte ptr [bp + 4], al
824D  135608         adc      dx, word ptr [bp + 8]
8250  895608         mov      word ptr [bp + 8], dx
8253  c3             ret      
8254  8b4640         mov      ax, word ptr [bp + 0x40]
8257  f7e8           imul     ax
8259  8bc8           mov      cx, ax
825B  8bda           mov      bx, dx
825D  8b4642         mov      ax, word ptr [bp + 0x42]
8260  f7e8           imul     ax
8262  03c1           add      ax, cx
8264  13d3           adc      dx, bx
8266  e87d10         call     0x92e6
8269  97             xchg     di, ax
826A  89463e         mov      word ptr [bp + 0x3e], ax
826D  c3             ret      
826E  8b5e40         mov      bx, word ptr [bp + 0x40]
8271  2bc3           sub      ax, bx
8273  f7e9           imul     cx
8275  8bc2           mov      ax, dx
8277  3d0100         cmp      ax, 1
827A  13c3           adc      ax, bx
827C  894640         mov      word ptr [bp + 0x40], ax
827F  2bc3           sub      ax, bx
8281  d1f8           sar      ax, 1
8283  03c3           add      ax, bx
8285  f7e9           imul     cx
8287  03c0           add      ax, ax
8289  13d2           adc      dx, dx
828B  006606         add      byte ptr [bp + 6], ah
828E  11560c         adc      word ptr [bp + 0xc], dx
8291  c3             ret      
8292  50             push     ax
8293  e85f00         call     0x82f5
8296  d1f8           sar      ax, 1
8298  2bf8           sub      di, ax
829A  c1ef06         shr      di, 6
829D  03ff           add      di, di
829F  5a             pop      dx
82A0  8bbd4a96       mov      di, word ptr [di - 0x69b6]
82A4  8b7624         mov      si, word ptr [bp + 0x24]
82A7  e83501         call     0x83df
82AA  897624         mov      word ptr [bp + 0x24], si
82AD  8b5e2a         mov      bx, word ptr [bp + 0x2a]
82B0  2bd8           sub      bx, ax
82B2  895e2a         mov      word ptr [bp + 0x2a], bx
82B5  d1f8           sar      ax, 1
82B7  03d8           add      bx, ax
82B9  c1eb06         shr      bx, 6
82BC  03db           add      bx, bx
82BE  8b462c         mov      ax, word ptr [bp + 0x2c]
82C1  99             cwd      
82C2  33c2           xor      ax, dx
82C4  2bc2           sub      ax, dx
82C6  0ae4           or       ah, ah
82C8  7407           je       0x82d1
82CA  80ec10         sub      ah, 0x10
82CD  7302           jae      0x82d1
82CF  2bc0           sub      ax, ax
82D1  33c2           xor      ax, dx
82D3  2bc2           sub      ax, dx
82D5  8b16cf7e       mov      dx, word ptr [0x7ecf]
82D9  8b7626         mov      si, word ptr [bp + 0x26]
82DC  e82a00         call     0x8309
82DF  897626         mov      word ptr [bp + 0x26], si
82E2  8bd0           mov      dx, ax
82E4  03462c         add      ax, word ptr [bp + 0x2c]
82E7  89462c         mov      word ptr [bp + 0x2c], ax
82EA  d1fa           sar      dx, 1
82EC  2bc2           sub      ax, dx
82EE  c1e806         shr      ax, 6
82F1  03c0           add      ax, ax
82F3  97             xchg     di, ax
82F4  c3             ret      
82F5  8b462e         mov      ax, word ptr [bp + 0x2e]
82F8  8bf8           mov      di, ax
82FA  8b7628         mov      si, word ptr [bp + 0x28]
82FD  e80900         call     0x8309
8300  03f8           add      di, ax
8302  897628         mov      word ptr [bp + 0x28], si
8305  897e2e         mov      word ptr [bp + 0x2e], di
8308  c3             ret      
8309  52             push     dx
830A  2bd2           sub      dx, dx
830C  2af1           sub      dh, cl
830E  f7ea           imul     dx
8310  80c4ff         add      ah, 0xff
8313  13d2           adc      dx, dx
8315  58             pop      ax
8316  03d0           add      dx, ax
8318  8b4630         mov      ax, word ptr [bp + 0x30]
831B  e9b600         jmp      0x83d4
831E  2b5608         sub      dx, word ptr [bp + 8]
8321  2b5e0a         sub      bx, word ptr [bp + 0xa]
8324  2b460c         sub      ax, word ptr [bp + 0xc]
8327  c1f803         sar      ax, 3
832A  f7da           neg      dx
832C  f7db           neg      bx
832E  50             push     ax
832F  b80700         mov      ax, 7
8332  03c2           add      ax, dx
8334  3d0f00         cmp      ax, 0xf
8337  730a           jae      0x8343
8339  b80700         mov      ax, 7
833C  03c3           add      ax, bx
833E  3d0f00         cmp      ax, 0xf
8341  724e           jb       0x8391
8343  58             pop      ax
8344  e8150f         call     0x925c
8347  92             xchg     dx, ax
8348  2b7e2a         sub      di, word ptr [bp + 0x2a]
834B  8bc7           mov      ax, di
834D  03c0           add      ax, ax
834F  7041           jo       0x8392
8351  e85f00         call     0x83b3
8354  897626         mov      word ptr [bp + 0x26], si
8357  01462c         add      word ptr [bp + 0x2c], ax
835A  97             xchg     di, ax
835B  f76e32         imul     word ptr [bp + 0x32]
835E  03c0           add      ax, ax
8360  13d2           adc      dx, dx
8362  8b7634         mov      si, word ptr [bp + 0x34]
8365  92             xchg     dx, ax
8366  e88bf8         call     0x7bf4
8369  92             xchg     dx, ax
836A  03d2           add      dx, dx
836C  8b462e         mov      ax, word ptr [bp + 0x2e]
836F  8b7628         mov      si, word ptr [bp + 0x28]
8372  e84700         call     0x83bc
8375  e81c00         call     0x8394
8378  8b4636         mov      ax, word ptr [bp + 0x36]
837B  f7ef           imul     di
837D  03c0           add      ax, ax
837F  13d2           adc      dx, dx
8381  8ae1           mov      ah, cl
8383  8ac1           mov      al, cl
8385  f7ea           imul     dx
8387  03c0           add      ax, ax
8389  13d2           adc      dx, dx
838B  92             xchg     dx, ax
838C  01462a         add      word ptr [bp + 0x2a], ax
838F  f8             clc      
8390  c3             ret      
8391  58             pop      ax
8392  f9             stc      
8393  c3             ret      
8394  96             xchg     si, ax
8395  894628         mov      word ptr [bp + 0x28], ax
8398  8b462e         mov      ax, word ptr [bp + 0x2e]
839B  03c6           add      ax, si
839D  89462e         mov      word ptr [bp + 0x2e], ax
83A0  d1fe           sar      si, 1
83A2  2bc6           sub      ax, si
83A4  8bf8           mov      di, ax
83A6  f6c4c0         test     ah, 0xc0
83A9  7a05           jp       0x83b0
83AB  81c70080       add      di, 0x8000
83AF  c3             ret      
83B0  f7df           neg      di
83B2  c3             ret      
83B3  8b5e30         mov      bx, word ptr [bp + 0x30]
83B6  8b462c         mov      ax, word ptr [bp + 0x2c]
83B9  8b7626         mov      si, word ptr [bp + 0x26]
83BC  2bd0           sub      dx, ax
83BE  92             xchg     dx, ax
83BF  99             cwd      
83C0  33c2           xor      ax, dx
83C2  3d0028         cmp      ax, 0x2800
83C5  7203           jb       0x83ca
83C7  b80028         mov      ax, 0x2800
83CA  33c2           xor      ax, dx
83CC  f7e9           imul     cx
83CE  8af2           mov      dh, dl
83D0  8ad4           mov      dl, ah
83D2  8bc3           mov      ax, bx
83D4  f7ea           imul     dx
83D6  8af2           mov      dh, dl
83D8  8ad4           mov      dl, ah
83DA  0480           add      al, 0x80
83DC  83d200         adc      dx, 0
83DF  03c9           add      cx, cx
83E1  8bc6           mov      ax, si
83E3  56             push     si
83E4  03f2           add      si, dx
83E6  f7e9           imul     cx
83E8  058000         add      ax, 0x80
83EB  8ac4           mov      al, ah
83ED  8ae5           mov      ah, ch
83EF  12e2           adc      ah, dl
83F1  f7d8           neg      ax
83F3  03c6           add      ax, si
83F5  33f0           xor      si, ax
83F7  7902           jns      0x83fb
83F9  2bc0           sub      ax, ax
83FB  5a             pop      dx
83FC  8bf0           mov      si, ax
83FE  2bc2           sub      ax, dx
8400  d1f8           sar      ax, 1
8402  03c2           add      ax, dx
8404  f7e9           imul     cx
8406  058000         add      ax, 0x80
8409  8ac4           mov      al, ah
840B  8ae5           mov      ah, ch
840D  12e2           adc      ah, dl
840F  d1e9           shr      cx, 1
8411  c3             ret      

; tower energy
8450  8e06f0fd       mov      es, word ptr [0xfdf0]
8454  2bff           sub      di, di
8456  81fe602d       cmp      si, 0x2d60
845A  7d71           jge      0x84cd
845C  53             push     bx
845D  03f6           add      si, si
845F  8adf           mov      bl, bh
8461  b7a8           mov      bh, 0xa8
8463  268a2f         mov      ch, byte ptr es:[bx]
8466  8ade           mov      bl, dh
8468  268a1f         mov      bl, byte ptr es:[bx]
846B  8afd           mov      bh, ch
846D  2af3           sub      dh, bl
846F  02db           add      bl, bl
8471  7259           jb       0x84cc
8473  0aff           or       bh, bh
8475  7855           js       0x84cc
8477  268b1f         mov      bx, word ptr es:[bx]
847A  fecb           dec      bl
847C  754e           jne      0x84cc
847E  8bfb           mov      di, bx
8480  5b             pop      bx
8481  2afd           sub      bh, ch
8483  b104           mov      cl, 4
8485  d3c0           rol      ax, cl
8487  250f0f         and      ax, 0xf0f
848A  d3e2           shl      dx, cl
848C  d3e3           shl      bx, cl
848E  02d8           add      bl, al
8490  02d4           add      dl, ah
8492  b800f8         mov      ax, 0xf800
8495  03d8           add      bx, ax
8497  03c2           add      ax, dx
8499  f7e8           imul     ax
849B  93             xchg     bx, ax
849C  8bca           mov      cx, dx
849E  f7e8           imul     ax
84A0  03d8           add      bx, ax
84A2  13ca           adc      cx, dx
84A4  b840ed         mov      ax, 0xed40
84A7  03c6           add      ax, si
84A9  f7e8           imul     ax
84AB  03c3           add      ax, bx
84AD  13ca           adc      cx, dx
84AF  02e4           add      ah, ah
84B1  13c9           adc      cx, cx
84B3  02e4           add      ah, ah
84B5  13c9           adc      cx, cx
84B7  0aed           or       ch, ch
84B9  7503           jne      0x84be
84BB  b90001         mov      cx, 0x100
84BE  80c504         add      ch, 4
84C1  8bc7           mov      ax, di
84C3  8ad4           mov      dl, ah
84C5  8af0           mov      dh, al
84C7  8ac4           mov      al, ah
84C9  f7f1           div      cx
84CB  c3             ret      
84CC  5b             pop      bx
84CD  8bc7           mov      ax, di
84CF  c3             ret      

; reserve accumulation
8514  be0985         mov      si, 0x8509
8517  b80000         mov      ax, 0
851A  80ccfe         or       ah, 0xfe
851D  03c1           add      ax, cx
851F  a31885         mov      word ptr [0x8518], ax
8522  b000           mov      al, 0
8524  1804           sbb      byte ptr [si], al
8526  1004           adc      byte ptr [si], al
8528  c3             ret      
8529  0306a67f       add      ax, word ptr [0x7fa6]
852D  80fcd0         cmp      ah, 0xd0
8530  7203           jb       0x8535
8532  b8ffcf         mov      ax, 0xcfff
8535  a3a67f         mov      word ptr [0x7fa6], ax
8538  c0ec04         shr      ah, 4
853B  88265145       mov      byte ptr [0x4551], ah
853F  b80000         mov      ax, 0
8542  03c6           add      ax, si
8544  3bc3           cmp      ax, bx
8546  7202           jb       0x854a
8548  8bc3           mov      ax, bx
854A  a34085         mov      word ptr [0x8540], ax
854D  c3             ret      

; beacon script handlers
C442  b8ff01         mov      ax, 0x1ff
C445  a226c5         mov      byte ptr [0xc526], al
C448  a08000         mov      al, byte ptr [0x80]
C44B  ff0649c4       inc      word ptr [0xc449]
C44F  e8fa00         call     0xc54c

; beacon run setup
C467  b80009         mov      ax, 0x900
C46A  a32cc5         mov      word ptr [0xc52c], ax
C46D  ad             lodsw    ax, word ptr [si]
C46E  ebdf           jmp      0xc44f
C470  b81200         mov      ax, 0x12
C473  ebf5           jmp      0xc46a

; beacon fade and initial outage list
C510  a1f00b         mov      ax, word ptr [0xbf0]
C513  8bd8           mov      bx, ax
C515  bffeff         mov      di, 0xfffe
C518  47             inc      di
C519  7830           js       0xc54b
C51B  2d0000         sub      ax, 0
C51E  7805           js       0xc525
C520  b0ff           mov      al, 0xff
C522  a217c5         mov      byte ptr [0xc517], al
C525  b400           mov      ah, 0
C527  8e06f0fd       mov      es, word ptr [0xfdf0]
C52B  ba0000         mov      dx, 0
C52E  b90000         mov      cx, 0
C531  0ae4           or       ah, ah
C533  790f           jns      0xc544
C535  f6d0           not      al
C537  263805         cmp      byte ptr es:[di], al
C53A  7603           jbe      0xc53f
C53C  268805         mov      byte ptr es:[di], al
C53F  03fa           add      di, dx
C541  e2f4           loop     0xc537
C543  c3             ret      
C544  268805         mov      byte ptr es:[di], al
C547  03fa           add      di, dx
C549  e2f9           loop     0xc544
C54B  c3             ret      
C54C  88262fc5       mov      byte ptr [0xc52f], ah
C550  8ae0           mov      ah, al
C552  25f00f         and      ax, 0xff0
C555  c0e803         shr      al, 3
C558  ba0900         mov      dx, 9
C55B  f7e2           mul      dx
C55D  a316c5         mov      word ptr [0xc516], ax
C560  a1f00b         mov      ax, word ptr [0xbf0]
C563  fec4           inc      ah
C565  a31cc5         mov      word ptr [0xc51c], ax
C568  c3             ret      
C569  be04f0         mov      si, 0xf004
C56C  8e06f0fd       mov      es, word ptr [0xfdf0]
C570  ac             lodsb    al, byte ptr [si]
C571  3cff           cmp      al, 0xff
C573  74d6           je       0xc54b
C575  e8d8ff         call     0xc550
C578  8b1e16c5       mov      bx, word ptr [0xc516]
C57C  26885701       mov      byte ptr es:[bx + 1], dl
C580  ebee           jmp      0xc570
