UCODE_IF_NOT_DEMO = 0x0002
; escape bits 2 to 3
-UCODE_CONTROL_GAME = 0x0100
-UCODE_SET_DECIMAL = 0x0104
+UCODE_CONTROL_GAME = 0x0000
+UCODE_DECIMAL = 0x0004
UCODE_DRAW_MISC = 0x0108
UCODE_SOUND_EFFECT = 0x010c
UCODE_CONTROL_GAME_START_GAME = 0x4000
UCODE_CONTROL_GAME_START_GAME_DEMO = 0xa000
-; set decimal
-UCODE_SET_DECIMAL_0 = 0x0000
-UCODE_SET_DECIMAL_SCORE_VAR_4B80_SCORE_VAR_4B00_BY_MISSION = 0x0100
-UCODE_SET_DECIMAL_1 = 0x0200
-UCODE_SET_DECIMAL_SCORE_VAR_4880_SCORE_VAR_4800 = 0x0300
-UCODE_SET_DECIMAL_SCORE_VAR_4980_SCORE_VAR_4900 = 0x0400
-UCODE_SET_DECIMAL_SCORE_VAR_4A80_SCORE_VAR_4A00 = 0x0500
-UCODE_SET_DECIMAL_SCORE_VAR_4B80_SCORE_VAR_4B00 = 0x0600
+; decimal
+UCODE_DECIMAL_DRAW = 0x2000
+UCODE_DECIMAL_SET = 0x3000
+UCODE_DECIMAL_INC = 0x4000
+UCODE_DECIMAL_DEC = 0x5000
+UCODE_DECIMAL_ADJUST = 0x7000
+
+; decimal set
+UCODE_DECIMAL_SET_0 = 0x100
+UCODE_DECIMAL_SET_SCORE_VAR_4B80_SCORE_VAR_4B00_BY_MISSION = 0x200
+UCODE_DECIMAL_SET_1 = 0x300
+UCODE_DECIMAL_SET_SCORE_VAR_4880_SCORE_VAR_4800 = 0x400
+UCODE_DECIMAL_SET_SCORE_VAR_4980_SCORE_VAR_4900 = 0x500
+UCODE_DECIMAL_SET_SCORE_VAR_4A80_SCORE_VAR_4A00 = 0x600
+UCODE_DECIMAL_SET_SCORE_VAR_4B80_SCORE_VAR_4B00 = 0x700
+
+; decimal other
+UCODE_DECIMAL_0_SCORE = 0x0000
+UCODE_DECIMAL_1_HIGH_SCORE = 0x0100
+UCODE_DECIMAL_2 = 0x0200
+UCODE_DECIMAL_3_MISSION = 0x0300
+UCODE_DECIMAL_4_FUEL = 0x0400
+UCODE_DECIMAL_5_BOMB = 0x0500
+UCODE_DECIMAL_6_SHIP_LEFT = 0x0600
+UCODE_DECIMAL_7_BONUS = 0x0700
; draw misc
UCODE_DRAW_MISC_RESTART = 0xe000
k = j & 2
if k in defs['escape bit 1']:
value1.append(defs['escape bit 1'][k])
- k = (j & 0xc) + 0x100
+ k = j & 0xc
+ if k + 0x100 in defs['escape bits 2 to 3']:
+ k += 0x100
+ j -= 0x100
value1.append(defs['escape bits 2 to 3'][k])
- j = (j & 0xff00) - 0x100
- if k == 0x100: # control game
+ j &= 0xff00
+ if k == 0: # control game
value1.append(defs['control game'].get(j, f'0x{j:04x}'))
- elif k == 0x104: # set decimal
- value1.append(defs['set decimal'].get(j, f'0x{j:04x}'))
+ elif k == 4: # decimal
+ k = j & 0xf000
+ value1.append(defs['decimal'].get(k, f'0x{k:04x}'))
+ j &= 0xf00
+ if k == 0x3000: # decimal set
+ value1.append(defs['decimal set'].get(j, f'0x{j:04x}'))
+ else:
+ value1.append(defs['decimal other'].get(j, f'0x{j:04x}'))
elif k == 0x108: # draw misc
+ value2 = [value1.pop()]
if j < 0xe000: # from table
k = j & 0x1f00
- value1.append(defs['draw misc bits 0 to 4'][k])
+ value2.append(defs['draw misc bits 0 to 4'][k])
k = j & 0xe000
if k in defs['draw misc bits 5 to 7']:
- value1.append(defs['draw misc bits 5 to 7'][k])
+ value2.append(defs['draw misc bits 5 to 7'][k])
else:
- value1.append(defs['draw misc'].get(j, f'0x{j:04x}'))
+ value2.append(defs['draw misc'].get(j, f'0x{j:04x}'))
+ value1.append('({0:s})'.format(' + '.join(value2)))
elif k == 0x10c: # sound effect
- value1.append(defs['sound effect'].get(j, f'0x{j:04x}'))
+ value2 = [value1.pop()]
+ value2.append(defs['sound effect'].get(j, f'0x{j:04x}'))
+ value1.append('({0:s})'.format(' + '.join(value2)))
else:
assert False
else:
k = j & 0x8000
if k in defs['update bit 7']:
value1.append(defs['update bit 7'][k])
- value.append(' + '.join(value1))
+ value.append(' | '.join(value1))
return value
print('reading addrs')