badline 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/CLAUDE.md +59 -31
  4. data/README.md +1 -1
  5. data/doc/library.md +9 -9
  6. data/doc/pinned-behaviour.md +105 -105
  7. data/doc/snapshots.md +1 -4
  8. data/lib/badline/audio/bare_player.rb +4 -4
  9. data/lib/badline/audio/cli.rb +6 -6
  10. data/lib/badline/audio/jukebox.rb +2 -2
  11. data/lib/badline/audio/machine_player.rb +2 -2
  12. data/lib/badline/{media → audio}/queue.rb +1 -1
  13. data/lib/badline/audio/queued_tune.rb +6 -6
  14. data/lib/badline/audio/renderer.rb +5 -5
  15. data/lib/badline/audio/stereo.rb +1 -1
  16. data/lib/badline/c128/{bus_state.rb → bus/saved_state.rb} +6 -6
  17. data/lib/badline/c128/bus.rb +30 -51
  18. data/lib/badline/c128/color_lines.rb +2 -2
  19. data/lib/badline/c128/cpu.rb +1 -1
  20. data/lib/badline/c128/drives.rb +10 -11
  21. data/lib/badline/c128/fast_serial.rb +5 -5
  22. data/lib/badline/c128/mmu_pages.rb +1 -1
  23. data/lib/badline/c128/modes.rb +2 -2
  24. data/lib/badline/c128/saved_state.rb +21 -47
  25. data/lib/badline/c128/z80.rb +2 -2
  26. data/lib/badline/c128.rb +18 -72
  27. data/lib/badline/{computer → c64}/attachments.rb +16 -47
  28. data/lib/badline/c64/banked_ram/banking.rb +32 -0
  29. data/lib/badline/c64/banked_ram/plus256k.rb +56 -0
  30. data/lib/badline/c64/banked_ram/plus60k.rb +45 -0
  31. data/lib/badline/c64/banked_ram/unexpanded.rb +30 -0
  32. data/lib/badline/c64/banked_ram.rb +23 -0
  33. data/lib/badline/c64/bus/extra_sids.rb +32 -0
  34. data/lib/badline/c64/bus/fittings.rb +40 -0
  35. data/lib/badline/c64/bus/pla.rb +149 -0
  36. data/lib/badline/c64/bus/roms.rb +41 -0
  37. data/lib/badline/c64/bus/saved_state.rb +68 -0
  38. data/lib/badline/c64/bus/sid_slots.rb +44 -0
  39. data/lib/badline/c64/bus.rb +218 -0
  40. data/lib/badline/c64/cartridge/action_replay.rb +128 -0
  41. data/lib/badline/c64/cartridge/atomic_power.rb +26 -0
  42. data/lib/badline/c64/cartridge/bank.rb +83 -0
  43. data/lib/badline/c64/cartridge/comal80.rb +52 -0
  44. data/lib/badline/c64/cartridge/dinamic.rb +36 -0
  45. data/lib/badline/c64/cartridge/easy_flash.rb +147 -0
  46. data/lib/badline/c64/cartridge/epyx_fastload.rb +81 -0
  47. data/lib/badline/c64/cartridge/final_cartridge3.rb +91 -0
  48. data/lib/badline/c64/cartridge/flash/saved_state.rb +40 -0
  49. data/lib/badline/c64/cartridge/flash.rb +279 -0
  50. data/lib/badline/c64/cartridge/freezer.rb +35 -0
  51. data/lib/badline/c64/cartridge/fun_play.rb +40 -0
  52. data/lib/badline/c64/cartridge/g_mod2.rb +76 -0
  53. data/lib/badline/c64/cartridge/game_system.rb +42 -0
  54. data/lib/badline/c64/cartridge/geo_ram.rb +81 -0
  55. data/lib/badline/c64/cartridge/kcs_power.rb +77 -0
  56. data/lib/badline/c64/cartridge/mach5.rb +34 -0
  57. data/lib/badline/c64/cartridge/magic_desk.rb +32 -0
  58. data/lib/badline/c64/cartridge/ocean.rb +37 -0
  59. data/lib/badline/c64/cartridge/pagefox.rb +70 -0
  60. data/lib/badline/c64/cartridge/retro_replay/saved_state.rb +47 -0
  61. data/lib/badline/c64/cartridge/retro_replay.rb +286 -0
  62. data/lib/badline/c64/cartridge/rex_utility.rb +31 -0
  63. data/lib/badline/c64/cartridge/rgcd.rb +60 -0
  64. data/lib/badline/c64/cartridge/saved_state.rb +63 -0
  65. data/lib/badline/c64/cartridge/simons_basic.rb +37 -0
  66. data/lib/badline/c64/cartridge/standard.rb +17 -0
  67. data/lib/badline/c64/cartridge/super_games.rb +50 -0
  68. data/lib/badline/c64/cartridge/westermann.rb +32 -0
  69. data/lib/badline/c64/cartridge/zaxxon.rb +68 -0
  70. data/lib/badline/c64/cartridge.rb +258 -0
  71. data/lib/badline/c64/color_memory.rb +27 -0
  72. data/lib/badline/c64/common.rb +34 -0
  73. data/lib/badline/c64/kernal_traps.rb +89 -0
  74. data/lib/badline/c64/reu/dma/saved_state.rb +52 -0
  75. data/lib/badline/c64/reu/dma.rb +275 -0
  76. data/lib/badline/c64/reu/ram.rb +109 -0
  77. data/lib/badline/c64/reu/saved_state.rb +55 -0
  78. data/lib/badline/c64/reu/trigger.rb +34 -0
  79. data/lib/badline/c64/reu.rb +291 -0
  80. data/lib/badline/{computer → c64}/saved_state.rb +13 -18
  81. data/lib/badline/{computer → c64}/true_drives.rb +20 -31
  82. data/lib/badline/{computer.rb → c64.rb} +22 -80
  83. data/lib/badline/chips/cia/fast_forward.rb +62 -0
  84. data/lib/badline/chips/cia/interrupt_register.rb +145 -0
  85. data/lib/badline/chips/cia/saved_state.rb +49 -0
  86. data/lib/badline/chips/cia/serial/saved_state.rb +45 -0
  87. data/lib/badline/chips/cia/serial.rb +250 -0
  88. data/lib/badline/chips/cia/time_of_day.rb +232 -0
  89. data/lib/badline/chips/cia/timer.rb +208 -0
  90. data/lib/badline/chips/cia.rb +281 -0
  91. data/lib/badline/chips/cpu/addressing.rb +133 -0
  92. data/lib/badline/chips/cpu/boundary.rb +56 -0
  93. data/lib/badline/chips/cpu/core.rb +167 -0
  94. data/lib/badline/chips/cpu/instruction.rb +338 -0
  95. data/lib/badline/chips/cpu/instruction_set/arithmetic.rb +118 -0
  96. data/lib/badline/chips/cpu/instruction_set/bitwise.rb +130 -0
  97. data/lib/badline/chips/cpu/instruction_set/branch.rb +83 -0
  98. data/lib/badline/chips/cpu/instruction_set/flag.rb +67 -0
  99. data/lib/badline/chips/cpu/instruction_set/illegal.rb +274 -0
  100. data/lib/badline/chips/cpu/instruction_set/inc_dec.rb +73 -0
  101. data/lib/badline/chips/cpu/instruction_set/stack.rb +56 -0
  102. data/lib/badline/chips/cpu/instruction_set/transfer.rb +141 -0
  103. data/lib/badline/chips/cpu/instruction_set.rb +59 -0
  104. data/lib/badline/chips/cpu/interrupts.rb +108 -0
  105. data/lib/badline/chips/cpu/microcode.rb +179 -0
  106. data/lib/badline/chips/cpu/operations.rb +90 -0
  107. data/lib/badline/chips/cpu/port.rb +116 -0
  108. data/lib/badline/chips/cpu/saved_state.rb +117 -0
  109. data/lib/badline/chips/cpu/stack_operations.rb +84 -0
  110. data/lib/badline/chips/cpu/traps.rb +23 -0
  111. data/lib/badline/chips/cpu.rb +12 -0
  112. data/lib/badline/chips/sid/catch_up.rb +122 -0
  113. data/lib/badline/chips/sid/decimator.rb +66 -0
  114. data/lib/badline/chips/sid/envelope/saved_state.rb +70 -0
  115. data/lib/badline/chips/sid/envelope.rb +241 -0
  116. data/lib/badline/chips/sid/filter/saved_state.rb +42 -0
  117. data/lib/badline/chips/sid/filter.rb +241 -0
  118. data/lib/badline/chips/sid/saved_state.rb +52 -0
  119. data/lib/badline/chips/sid/voice.rb +79 -0
  120. data/lib/badline/chips/sid/waveform/combined.rb +128 -0
  121. data/lib/badline/chips/sid/waveform/fast_forward.rb +107 -0
  122. data/lib/badline/chips/sid/waveform/noise_writeback.rb +124 -0
  123. data/lib/badline/chips/sid/waveform/saved_state.rb +68 -0
  124. data/lib/badline/chips/sid/waveform.rb +307 -0
  125. data/lib/badline/chips/sid.rb +265 -0
  126. data/lib/badline/{c128 → chips}/vdc/memory.rb +1 -1
  127. data/lib/badline/{c128 → chips}/vdc/painter.rb +1 -1
  128. data/lib/badline/{c128 → chips}/vdc/raster.rb +1 -1
  129. data/lib/badline/chips/vdc/saved_state.rb +36 -0
  130. data/lib/badline/{c128 → chips}/vdc/window.rb +1 -1
  131. data/lib/badline/{c128 → chips}/vdc.rb +7 -31
  132. data/lib/badline/chips/via/control_lines.rb +124 -0
  133. data/lib/badline/chips/via/fast_forward.rb +55 -0
  134. data/lib/badline/chips/via/interrupt_register.rb +69 -0
  135. data/lib/badline/chips/via/saved_state.rb +44 -0
  136. data/lib/badline/chips/via/shift_register.rb +182 -0
  137. data/lib/badline/chips/via/timer1.rb +133 -0
  138. data/lib/badline/chips/via/timer2.rb +135 -0
  139. data/lib/badline/chips/via.rb +268 -0
  140. data/lib/badline/chips/vic/bank.rb +135 -0
  141. data/lib/badline/chips/vic/border_mask.rb +88 -0
  142. data/lib/badline/chips/vic/collisions.rb +117 -0
  143. data/lib/badline/chips/vic/color_patches.rb +49 -0
  144. data/lib/badline/chips/vic/display_state.rb +187 -0
  145. data/lib/badline/chips/vic/graphics_mode.rb +166 -0
  146. data/lib/badline/chips/vic/graphics_shifter/saved_state.rb +40 -0
  147. data/lib/badline/chips/vic/graphics_shifter.rb +187 -0
  148. data/lib/badline/chips/vic/register_log.rb +83 -0
  149. data/lib/badline/chips/vic/registers.rb +197 -0
  150. data/lib/badline/chips/vic/saved_state.rb +82 -0
  151. data/lib/badline/chips/vic/sequencer/saved_state.rb +91 -0
  152. data/lib/badline/chips/vic/sequencer.rb +277 -0
  153. data/lib/badline/chips/vic/sequencer_output.rb +118 -0
  154. data/lib/badline/chips/vic/sprite/internal_bus.rb +70 -0
  155. data/lib/badline/chips/vic/sprite/saved_state.rb +66 -0
  156. data/lib/badline/chips/vic/sprite/shifter.rb +148 -0
  157. data/lib/badline/chips/vic/sprite/timing.rb +58 -0
  158. data/lib/badline/chips/vic/sprite.rb +339 -0
  159. data/lib/badline/chips/vic/sprites/saved_state.rb +59 -0
  160. data/lib/badline/chips/vic/sprites.rb +284 -0
  161. data/lib/badline/chips/vic.rb +783 -0
  162. data/lib/badline/chips/vic_i/painter/saved_state.rb +40 -0
  163. data/lib/badline/{vic20/vic → chips/vic_i}/painter.rb +6 -30
  164. data/lib/badline/{vic20/vic → chips/vic_i}/saved_state.rb +2 -2
  165. data/lib/badline/chips/vic_i/sound/output.rb +85 -0
  166. data/lib/badline/chips/vic_i/sound.rb +235 -0
  167. data/lib/badline/{vic20/vic → chips/vic_i}/text_window.rb +2 -2
  168. data/lib/badline/{vic20/vic.rb → chips/vic_i.rb} +5 -5
  169. data/lib/badline/chips/z80/arithmetic.rb +119 -0
  170. data/lib/badline/chips/z80/bit_page.rb +57 -0
  171. data/lib/badline/chips/z80/block_io.rb +60 -0
  172. data/lib/badline/chips/z80/block_transfers.rb +61 -0
  173. data/lib/badline/chips/z80/bus_cycles.rb +113 -0
  174. data/lib/badline/chips/z80/core.rb +115 -0
  175. data/lib/badline/chips/z80/exchanges.rb +52 -0
  176. data/lib/badline/chips/z80/extended_page.rb +91 -0
  177. data/lib/badline/chips/z80/flags.rb +39 -0
  178. data/lib/badline/chips/z80/interrupt_acceptance.rb +48 -0
  179. data/lib/badline/chips/z80/jumps.rb +84 -0
  180. data/lib/badline/chips/z80/loads.rb +100 -0
  181. data/lib/badline/chips/z80/main_page.rb +136 -0
  182. data/lib/badline/chips/z80/registers.rb +122 -0
  183. data/lib/badline/chips/z80/saved_state.rb +71 -0
  184. data/lib/badline/chips/z80/shifts.rb +66 -0
  185. data/lib/badline/chips/z80.rb +13 -0
  186. data/lib/badline/core.rb +27 -29
  187. data/lib/badline/drives/datasette/saved_state.rb +37 -0
  188. data/lib/badline/drives/datasette.rb +140 -0
  189. data/lib/badline/drives/engine/core.rb +149 -0
  190. data/lib/badline/drives/engine/fast_serial.rb +75 -0
  191. data/lib/badline/drives/engine/idle.rb +127 -0
  192. data/lib/badline/drives/engine/idle_cpu.rb +30 -0
  193. data/lib/badline/drives/engine/orbit.rb +81 -0
  194. data/lib/badline/drives/engine/serial_lines.rb +75 -0
  195. data/lib/badline/drives/engine/sleep.rb +114 -0
  196. data/lib/badline/drives/engine/vias.rb +86 -0
  197. data/lib/badline/drives/engine/watch.rb +152 -0
  198. data/lib/badline/drives/engine.rb +11 -0
  199. data/lib/badline/drives/model1541/bus.rb +88 -0
  200. data/lib/badline/drives/model1541/byte_ready.rb +50 -0
  201. data/lib/badline/drives/model1541/cpu.rb +13 -0
  202. data/lib/badline/drives/model1541/disk/saved_state.rb +88 -0
  203. data/lib/badline/drives/model1541/disk.rb +317 -0
  204. data/lib/badline/drives/model1541/disk_via.rb +38 -0
  205. data/lib/badline/drives/model1541/gcr.rb +59 -0
  206. data/lib/badline/drives/model1541/mechanism/saved_state.rb +72 -0
  207. data/lib/badline/drives/model1541/mechanism.rb +315 -0
  208. data/lib/badline/drives/model1541/rotation.rb +123 -0
  209. data/lib/badline/drives/model1541/saved_state.rb +44 -0
  210. data/lib/badline/drives/model1541/sector_reader.rb +78 -0
  211. data/lib/badline/drives/model1541/serial_port.rb +20 -0
  212. data/lib/badline/drives/model1541/track.rb +100 -0
  213. data/lib/badline/drives/model1541.rb +81 -0
  214. data/lib/badline/drives/model1571/bus.rb +113 -0
  215. data/lib/badline/drives/model1571/cpu.rb +13 -0
  216. data/lib/badline/drives/model1571/saved_state.rb +47 -0
  217. data/lib/badline/drives/model1571/serial_port.rb +39 -0
  218. data/lib/badline/drives/model1571/serial_via.rb +27 -0
  219. data/lib/badline/drives/model1571/wd1770.rb +122 -0
  220. data/lib/badline/drives/model1571.rb +142 -0
  221. data/lib/badline/drives/model1581/bus.rb +139 -0
  222. data/lib/badline/drives/model1581/cpu.rb +13 -0
  223. data/lib/badline/drives/model1581/disk/saved_state.rb +89 -0
  224. data/lib/badline/drives/model1581/disk.rb +137 -0
  225. data/lib/badline/drives/model1581/mechanism.rb +119 -0
  226. data/lib/badline/drives/model1581/saved_state.rb +42 -0
  227. data/lib/badline/drives/model1581/serial_port.rb +54 -0
  228. data/lib/badline/drives/model1581/slot.rb +79 -0
  229. data/lib/badline/drives/model1581/track.rb +102 -0
  230. data/lib/badline/drives/model1581/track_bytes.rb +77 -0
  231. data/lib/badline/drives/model1581/wd1772/registers.rb +91 -0
  232. data/lib/badline/drives/model1581/wd1772/saved_state.rb +68 -0
  233. data/lib/badline/drives/model1581/wd1772/sector_writes.rb +75 -0
  234. data/lib/badline/drives/model1581/wd1772/sectors.rb +152 -0
  235. data/lib/badline/drives/model1581/wd1772/stepping.rb +111 -0
  236. data/lib/badline/drives/model1581/wd1772/tracks.rb +127 -0
  237. data/lib/badline/drives/model1581/wd1772/turn.rb +75 -0
  238. data/lib/badline/drives/model1581/wd1772.rb +218 -0
  239. data/lib/badline/drives/model1581.rb +206 -0
  240. data/lib/badline/drives/serial_bus.rb +161 -0
  241. data/lib/badline/frontend/boot.rb +10 -61
  242. data/lib/badline/frontend/machine_window.rb +3 -1
  243. data/lib/badline/frontend/player/filter_view.rb +1 -1
  244. data/lib/badline/frontend/player/player_controller.rb +2 -2
  245. data/lib/badline/frontend/player/player_screen.rb +1 -0
  246. data/lib/badline/frontend/player/theme.rb +7 -7
  247. data/lib/badline/frontend/timeline.rb +3 -3
  248. data/lib/badline/input/control_ports.rb +78 -0
  249. data/lib/badline/input/joystick.rb +27 -0
  250. data/lib/badline/input/keyboard.rb +114 -0
  251. data/lib/badline/input.rb +3 -0
  252. data/lib/badline/kernal_trap/{drive → dos}/block_commands.rb +1 -1
  253. data/lib/badline/kernal_trap/dos/channel.rb +183 -0
  254. data/lib/badline/kernal_trap/{drive → dos}/channels.rb +1 -1
  255. data/lib/badline/kernal_trap/{drive → dos}/memory.rb +1 -1
  256. data/lib/badline/kernal_trap/{drive → dos}/parameters.rb +1 -1
  257. data/lib/badline/kernal_trap/{drive → dos}/status.rb +1 -1
  258. data/lib/badline/kernal_trap/{drive → dos}/write_file.rb +1 -1
  259. data/lib/badline/kernal_trap/{drive → dos}/writes.rb +1 -1
  260. data/lib/badline/kernal_trap/{drive.rb → dos.rb} +11 -10
  261. data/lib/badline/kernal_trap/{file.rb → file_routine.rb} +1 -1
  262. data/lib/badline/kernal_trap/load.rb +6 -6
  263. data/lib/badline/kernal_trap/save.rb +5 -5
  264. data/lib/badline/kernal_trap/serial.rb +7 -7
  265. data/lib/badline/kernal_trap.rb +2 -3
  266. data/lib/badline/machine/clocking.rb +50 -0
  267. data/lib/badline/machine.rb +63 -7
  268. data/lib/badline/media/boot_disk.rb +2 -2
  269. data/lib/badline/media/disk_list.rb +3 -3
  270. data/lib/badline/media/disk_set.rb +1 -1
  271. data/lib/badline/media/extensions.rb +33 -0
  272. data/lib/badline/media/program.rb +28 -0
  273. data/lib/badline/media/true_drive.rb +4 -3
  274. data/lib/badline/media/tune.rb +35 -0
  275. data/lib/badline/media/vic20_cartridge.rb +1 -7
  276. data/lib/badline/media/vic20_media.rb +38 -80
  277. data/lib/badline/media.rb +84 -81
  278. data/lib/badline/model.rb +1 -1
  279. data/lib/badline/options/event.rb +3 -1
  280. data/lib/badline/roms/README +6 -6
  281. data/lib/badline/sdl.rb +1 -0
  282. data/lib/badline/{storage/sid_file.rb → sid_tune/file.rb} +3 -3
  283. data/lib/badline/{storage → sid_tune}/hvsc.rb +7 -7
  284. data/lib/badline/{storage → sid_tune}/song_lengths.rb +2 -2
  285. data/lib/badline/{storage → sid_tune}/stil/credit.rb +1 -1
  286. data/lib/badline/{storage → sid_tune}/stil.rb +3 -3
  287. data/lib/badline/sid_tune.rb +6 -0
  288. data/lib/badline/snapshot/c128_setup.rb +43 -0
  289. data/lib/badline/snapshot/c64_setup.rb +79 -0
  290. data/lib/badline/snapshot/image.rb +5 -25
  291. data/lib/badline/snapshot/machine_state.rb +10 -2
  292. data/lib/badline/snapshot/setup.rb +22 -66
  293. data/lib/badline/snapshot/state.rb +8 -17
  294. data/lib/badline/snapshot/storage_setup.rb +68 -0
  295. data/lib/badline/snapshot/vic20_setup.rb +37 -0
  296. data/lib/badline/snapshot/vice/c64_mem.rb +1 -1
  297. data/lib/badline/snapshot/vice/restore.rb +1 -1
  298. data/lib/badline/snapshot/vice/reu1764.rb +1 -1
  299. data/lib/badline/snapshot/vice/reu_fields.rb +40 -0
  300. data/lib/badline/snapshot/vice.rb +7 -5
  301. data/lib/badline/snapshot.rb +13 -12
  302. data/lib/badline/storage/d64_image.rb +15 -9
  303. data/lib/badline/storage/d71_image.rb +0 -2
  304. data/lib/badline/storage/d81_image.rb +0 -2
  305. data/lib/badline/storage/disk_image/writing.rb +2 -2
  306. data/lib/badline/storage/disk_image.rb +3 -6
  307. data/lib/badline/storage/g64_image.rb +2 -2
  308. data/lib/badline/storage/host_directory.rb +0 -5
  309. data/lib/badline/storage/t64.rb +2 -8
  310. data/lib/badline/storage/unavailable.rb +1 -1
  311. data/lib/badline/storage.rb +0 -37
  312. data/lib/badline/support/c128_checkpoint.rb +39 -0
  313. data/lib/badline/support/checkpoint.rb +108 -0
  314. data/lib/badline/support/vic20_checkpoint.rb +38 -0
  315. data/lib/badline/support.rb +5 -0
  316. data/lib/badline/version.rb +1 -1
  317. data/lib/badline/vic20/attachments.rb +11 -81
  318. data/lib/badline/vic20/bus/saved_state.rb +35 -0
  319. data/lib/badline/vic20/bus.rb +3 -25
  320. data/lib/badline/vic20/cpu.rb +1 -1
  321. data/lib/badline/vic20/port_wiring.rb +4 -4
  322. data/lib/badline/vic20/saved_state.rb +16 -60
  323. data/lib/badline/vic20/user_via_ports.rb +2 -2
  324. data/lib/badline/vic20.rb +20 -51
  325. metadata +250 -221
  326. data/lib/badline/address_bus/extra_sids.rb +0 -30
  327. data/lib/badline/address_bus/fittings.rb +0 -38
  328. data/lib/badline/address_bus/pla.rb +0 -147
  329. data/lib/badline/address_bus/roms.rb +0 -39
  330. data/lib/badline/address_bus/saved_state.rb +0 -72
  331. data/lib/badline/address_bus/sid_slots.rb +0 -42
  332. data/lib/badline/address_bus.rb +0 -235
  333. data/lib/badline/cartridge/action_replay.rb +0 -126
  334. data/lib/badline/cartridge/atomic_power.rb +0 -24
  335. data/lib/badline/cartridge/bank.rb +0 -81
  336. data/lib/badline/cartridge/comal80.rb +0 -50
  337. data/lib/badline/cartridge/dinamic.rb +0 -34
  338. data/lib/badline/cartridge/easy_flash.rb +0 -145
  339. data/lib/badline/cartridge/epyx_fastload.rb +0 -79
  340. data/lib/badline/cartridge/final_cartridge3.rb +0 -89
  341. data/lib/badline/cartridge/flash.rb +0 -306
  342. data/lib/badline/cartridge/freezer.rb +0 -33
  343. data/lib/badline/cartridge/fun_play.rb +0 -38
  344. data/lib/badline/cartridge/g_mod2.rb +0 -74
  345. data/lib/badline/cartridge/game_system.rb +0 -40
  346. data/lib/badline/cartridge/geo_ram.rb +0 -79
  347. data/lib/badline/cartridge/kcs_power.rb +0 -75
  348. data/lib/badline/cartridge/mach5.rb +0 -32
  349. data/lib/badline/cartridge/magic_desk.rb +0 -30
  350. data/lib/badline/cartridge/ocean.rb +0 -35
  351. data/lib/badline/cartridge/pagefox.rb +0 -68
  352. data/lib/badline/cartridge/retro_replay.rb +0 -320
  353. data/lib/badline/cartridge/rex_utility.rb +0 -29
  354. data/lib/badline/cartridge/rgcd.rb +0 -58
  355. data/lib/badline/cartridge/simons_basic.rb +0 -35
  356. data/lib/badline/cartridge/standard.rb +0 -15
  357. data/lib/badline/cartridge/super_games.rb +0 -48
  358. data/lib/badline/cartridge/westermann.rb +0 -30
  359. data/lib/badline/cartridge/zaxxon.rb +0 -66
  360. data/lib/badline/cartridge.rb +0 -303
  361. data/lib/badline/checkpoint.rb +0 -98
  362. data/lib/badline/cia/fast_forward.rb +0 -60
  363. data/lib/badline/cia/interrupt_register.rb +0 -143
  364. data/lib/badline/cia/serial.rb +0 -275
  365. data/lib/badline/cia/state.rb +0 -47
  366. data/lib/badline/cia/timer.rb +0 -206
  367. data/lib/badline/cia.rb +0 -279
  368. data/lib/badline/color_memory.rb +0 -25
  369. data/lib/badline/computer/kernal_traps.rb +0 -29
  370. data/lib/badline/control_ports.rb +0 -76
  371. data/lib/badline/cpu/addressing.rb +0 -131
  372. data/lib/badline/cpu/boundary.rb +0 -54
  373. data/lib/badline/cpu/core.rb +0 -165
  374. data/lib/badline/cpu/microcode.rb +0 -177
  375. data/lib/badline/cpu/operations.rb +0 -88
  376. data/lib/badline/cpu/saved_state.rb +0 -115
  377. data/lib/badline/cpu/stack_operations.rb +0 -82
  378. data/lib/badline/cpu.rb +0 -10
  379. data/lib/badline/cycleable.rb +0 -38
  380. data/lib/badline/datasette.rb +0 -161
  381. data/lib/badline/drive/core.rb +0 -147
  382. data/lib/badline/drive/fast_serial.rb +0 -73
  383. data/lib/badline/drive/idle.rb +0 -125
  384. data/lib/badline/drive/idle_cpu.rb +0 -28
  385. data/lib/badline/drive/orbit.rb +0 -79
  386. data/lib/badline/drive/serial_lines.rb +0 -73
  387. data/lib/badline/drive/sleep.rb +0 -112
  388. data/lib/badline/drive/vias.rb +0 -84
  389. data/lib/badline/drive/watch.rb +0 -150
  390. data/lib/badline/drive.rb +0 -11
  391. data/lib/badline/drive1541/bus.rb +0 -86
  392. data/lib/badline/drive1541/byte_ready.rb +0 -48
  393. data/lib/badline/drive1541/cpu.rb +0 -11
  394. data/lib/badline/drive1541/disk.rb +0 -318
  395. data/lib/badline/drive1541/disk_state.rb +0 -94
  396. data/lib/badline/drive1541/disk_via.rb +0 -36
  397. data/lib/badline/drive1541/gcr.rb +0 -57
  398. data/lib/badline/drive1541/mechanism.rb +0 -313
  399. data/lib/badline/drive1541/mechanism_state.rb +0 -68
  400. data/lib/badline/drive1541/rotation.rb +0 -121
  401. data/lib/badline/drive1541/sector_reader.rb +0 -76
  402. data/lib/badline/drive1541/serial_port.rb +0 -18
  403. data/lib/badline/drive1541/track.rb +0 -98
  404. data/lib/badline/drive1541.rb +0 -111
  405. data/lib/badline/drive1571/bus.rb +0 -111
  406. data/lib/badline/drive1571/cpu.rb +0 -11
  407. data/lib/badline/drive1571/serial_port.rb +0 -37
  408. data/lib/badline/drive1571/serial_via.rb +0 -25
  409. data/lib/badline/drive1571/wd1770.rb +0 -120
  410. data/lib/badline/drive1571.rb +0 -175
  411. data/lib/badline/drive1581/bus.rb +0 -137
  412. data/lib/badline/drive1581/cpu.rb +0 -11
  413. data/lib/badline/drive1581/disk.rb +0 -135
  414. data/lib/badline/drive1581/disk_state.rb +0 -87
  415. data/lib/badline/drive1581/mechanism.rb +0 -117
  416. data/lib/badline/drive1581/serial_port.rb +0 -52
  417. data/lib/badline/drive1581/slot.rb +0 -78
  418. data/lib/badline/drive1581/track.rb +0 -100
  419. data/lib/badline/drive1581/track_bytes.rb +0 -75
  420. data/lib/badline/drive1581/wd1772/registers.rb +0 -89
  421. data/lib/badline/drive1581/wd1772/sector_writes.rb +0 -73
  422. data/lib/badline/drive1581/wd1772/sectors.rb +0 -150
  423. data/lib/badline/drive1581/wd1772/state.rb +0 -66
  424. data/lib/badline/drive1581/wd1772/stepping.rb +0 -109
  425. data/lib/badline/drive1581/wd1772/tracks.rb +0 -125
  426. data/lib/badline/drive1581/wd1772/turn.rb +0 -73
  427. data/lib/badline/drive1581/wd1772.rb +0 -216
  428. data/lib/badline/drive1581.rb +0 -233
  429. data/lib/badline/iec_bus.rb +0 -159
  430. data/lib/badline/instruction.rb +0 -334
  431. data/lib/badline/instruction_set/arithmetic.rb +0 -114
  432. data/lib/badline/instruction_set/bitwise.rb +0 -126
  433. data/lib/badline/instruction_set/branch.rb +0 -79
  434. data/lib/badline/instruction_set/flag.rb +0 -63
  435. data/lib/badline/instruction_set/illegal.rb +0 -270
  436. data/lib/badline/instruction_set/inc_dec.rb +0 -69
  437. data/lib/badline/instruction_set/stack.rb +0 -52
  438. data/lib/badline/instruction_set/transfer.rb +0 -137
  439. data/lib/badline/instruction_set.rb +0 -55
  440. data/lib/badline/interrupts.rb +0 -104
  441. data/lib/badline/joystick.rb +0 -25
  442. data/lib/badline/kernal_trap/channel.rb +0 -181
  443. data/lib/badline/keyboard.rb +0 -112
  444. data/lib/badline/ram_expansion/banking.rb +0 -30
  445. data/lib/badline/ram_expansion/plus256k.rb +0 -54
  446. data/lib/badline/ram_expansion/plus60k.rb +0 -43
  447. data/lib/badline/ram_expansion/unexpanded.rb +0 -28
  448. data/lib/badline/ram_expansion.rb +0 -21
  449. data/lib/badline/reu/dma/saved_state.rb +0 -50
  450. data/lib/badline/reu/dma.rb +0 -273
  451. data/lib/badline/reu/ram.rb +0 -107
  452. data/lib/badline/reu/saved_state.rb +0 -80
  453. data/lib/badline/reu/trigger.rb +0 -32
  454. data/lib/badline/reu.rb +0 -289
  455. data/lib/badline/sid/catch_up.rb +0 -120
  456. data/lib/badline/sid/decimator.rb +0 -64
  457. data/lib/badline/sid/envelope/state.rb +0 -68
  458. data/lib/badline/sid/envelope.rb +0 -239
  459. data/lib/badline/sid/filter.rb +0 -263
  460. data/lib/badline/sid/voice.rb +0 -77
  461. data/lib/badline/sid/waveform/combined.rb +0 -126
  462. data/lib/badline/sid/waveform/fast_forward.rb +0 -105
  463. data/lib/badline/sid/waveform/noise_writeback.rb +0 -122
  464. data/lib/badline/sid/waveform/state.rb +0 -66
  465. data/lib/badline/sid/waveform.rb +0 -305
  466. data/lib/badline/sid.rb +0 -303
  467. data/lib/badline/time_of_day.rb +0 -228
  468. data/lib/badline/traps.rb +0 -19
  469. data/lib/badline/via/control_lines.rb +0 -122
  470. data/lib/badline/via/fast_forward.rb +0 -53
  471. data/lib/badline/via/interrupt_register.rb +0 -67
  472. data/lib/badline/via/shift_register.rb +0 -180
  473. data/lib/badline/via/state.rb +0 -42
  474. data/lib/badline/via/timer1.rb +0 -131
  475. data/lib/badline/via/timer2.rb +0 -133
  476. data/lib/badline/via.rb +0 -266
  477. data/lib/badline/vic/bank.rb +0 -133
  478. data/lib/badline/vic/border_mask.rb +0 -86
  479. data/lib/badline/vic/collisions.rb +0 -115
  480. data/lib/badline/vic/color_patches.rb +0 -47
  481. data/lib/badline/vic/display_state.rb +0 -185
  482. data/lib/badline/vic/graphics_mode.rb +0 -164
  483. data/lib/badline/vic/graphics_shifter.rb +0 -207
  484. data/lib/badline/vic/register_log.rb +0 -81
  485. data/lib/badline/vic/registers.rb +0 -195
  486. data/lib/badline/vic/sequencer.rb +0 -275
  487. data/lib/badline/vic/sequencer_output.rb +0 -116
  488. data/lib/badline/vic/sequencer_state.rb +0 -89
  489. data/lib/badline/vic/sprite/internal_bus.rb +0 -68
  490. data/lib/badline/vic/sprite/saved_state.rb +0 -64
  491. data/lib/badline/vic/sprite/shifter.rb +0 -146
  492. data/lib/badline/vic/sprite/timing.rb +0 -56
  493. data/lib/badline/vic/sprite.rb +0 -337
  494. data/lib/badline/vic/sprites.rb +0 -282
  495. data/lib/badline/vic/sprites_state.rb +0 -57
  496. data/lib/badline/vic.rb +0 -852
  497. data/lib/badline/vic20/sound/output.rb +0 -83
  498. data/lib/badline/vic20/sound.rb +0 -233
  499. data/lib/badline/z80/arithmetic.rb +0 -117
  500. data/lib/badline/z80/bit_page.rb +0 -55
  501. data/lib/badline/z80/block_io.rb +0 -58
  502. data/lib/badline/z80/block_transfers.rb +0 -59
  503. data/lib/badline/z80/bus_cycles.rb +0 -111
  504. data/lib/badline/z80/core.rb +0 -113
  505. data/lib/badline/z80/exchanges.rb +0 -50
  506. data/lib/badline/z80/extended_page.rb +0 -89
  507. data/lib/badline/z80/flags.rb +0 -37
  508. data/lib/badline/z80/interrupt_acceptance.rb +0 -46
  509. data/lib/badline/z80/jumps.rb +0 -82
  510. data/lib/badline/z80/loads.rb +0 -98
  511. data/lib/badline/z80/main_page.rb +0 -134
  512. data/lib/badline/z80/registers.rb +0 -120
  513. data/lib/badline/z80/saved_state.rb +0 -69
  514. data/lib/badline/z80/shifts.rb +0 -64
  515. data/lib/badline/z80.rb +0 -11
  516. /data/lib/badline/snapshot/{fields.rb → vice/fields.rb} +0 -0
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Badline
4
- module InstructionSet
5
- module Bitwise
6
- # Performs bitwise AND on accumulator with memory.
7
- #
8
- # Opcodes:
9
- # $21 - indirect_x - 6 cycles
10
- # $25 - zeropage - 3 cycles
11
- # $29 - immediate - 2 cycles
12
- # $2D - absolute - 4 cycles
13
- # $31 - indirect_y - 5+ cycles
14
- # $35 - zeropage_x - 4 cycles
15
- # $39 - absolute_y - 4+ cycles
16
- # $3D - absolute_x - 4+ cycles
17
- def and(_addr, value)
18
- @a &= value
19
- update_number_flags(@a)
20
- end
21
-
22
- # Arithmetic shift left. Shifts bits left by one position.
23
- #
24
- # Opcodes:
25
- # $06 - zeropage - 5 cycles
26
- # $0A - accumulator- 2 cycles
27
- # $0E - absolute - 6 cycles
28
- # $16 - zeropage_x - 6 cycles
29
- # $1E - absolute_x - 7 cycles
30
- def asl(addr, value)
31
- result = (value << 1) & 0xff
32
- status.carry = value[7]
33
- write_modified(addr, result)
34
- update_number_flags(result)
35
- end
36
-
37
- # Tests bits in memory with accumulator.
38
- #
39
- # Opcodes:
40
- # $24 - zeropage - 3 cycles
41
- # $2C - absolute - 4 cycles
42
- def bit(_addr, value)
43
- status.value = ((status.value & 0b00111111) +
44
- (value & 0b11000000)).to_i
45
- status.zero = (a & value).nobits?(0xff)
46
- end
47
-
48
- # Performs bitwise XOR on accumulator with memory.
49
- #
50
- # Opcodes:
51
- # $41 - indirect_x - 6 cycles
52
- # $45 - zeropage - 3 cycles
53
- # $49 - immediate - 2 cycles
54
- # $4D - absolute - 4 cycles
55
- # $51 - indirect_y - 5+ cycles
56
- # $55 - zeropage_x - 4 cycles
57
- # $59 - absolute_y - 4+ cycles
58
- # $5D - absolute_x - 4+ cycles
59
- def eor(_addr, value)
60
- @a = (@a ^ value) & 0xff
61
- update_number_flags(@a)
62
- end
63
-
64
- # Logical shift right. Shifts bits right by one position.
65
- #
66
- # Opcodes:
67
- # $46 - zeropage - 5 cycles
68
- # $4A - accumulator- 2 cycles
69
- # $4E - absolute - 6 cycles
70
- # $56 - zeropage_x - 6 cycles
71
- # $5E - absolute_x - 7 cycles
72
- def lsr(addr, value)
73
- result = (value >> 1) & 0xff
74
- status.carry = value[0]
75
- write_modified(addr, result)
76
- update_number_flags(result)
77
- end
78
-
79
- # Performs bitwise OR on accumulator with memory.
80
- #
81
- # Opcodes:
82
- # $01 - indirect_x - 6 cycles
83
- # $05 - zeropage - 3 cycles
84
- # $09 - immediate - 2 cycles
85
- # $0D - absolute - 4 cycles
86
- # $11 - indirect_y - 5+ cycles
87
- # $15 - zeropage_x - 4 cycles
88
- # $19 - absolute_y - 4+ cycles
89
- # $1D - absolute_x - 4+ cycles
90
- def ora(_addr, value)
91
- @a |= value
92
- update_number_flags(@a)
93
- end
94
-
95
- # Rotate left through carry.
96
- #
97
- # Opcodes:
98
- # $26 - zeropage - 5 cycles
99
- # $2A - accumulator- 2 cycles
100
- # $2E - absolute - 6 cycles
101
- # $36 - zeropage_x - 6 cycles
102
- # $3E - absolute_x - 7 cycles
103
- def rol(addr, value)
104
- result = ((value << 1) + status.carry) & 0xff
105
- status.carry = value[7]
106
- write_modified(addr, result)
107
- update_number_flags(result)
108
- end
109
-
110
- # Rotate right through carry.
111
- #
112
- # Opcodes:
113
- # $66 - zeropage - 5 cycles
114
- # $6A - accumulator- 2 cycles
115
- # $6E - absolute - 6 cycles
116
- # $76 - zeropage_x - 6 cycles
117
- # $7E - absolute_x - 7 cycles
118
- def ror(addr, value)
119
- result = ((value >> 1) + (status.carry? ? 0x80 : 0)) & 0xff
120
- status.carry = value[0]
121
- write_modified(addr, result)
122
- update_number_flags(result)
123
- end
124
- end
125
- end
126
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Badline
4
- module InstructionSet
5
- module Branch
6
- # Branch if carry clear (C=0).
7
- #
8
- # Opcodes:
9
- # $90 - relative - 2+ cycles
10
- def bcc(_addr, _value)
11
- take_branch unless status.carry?
12
- end
13
-
14
- # Branch if carry set (C=1).
15
- #
16
- # Opcodes:
17
- # $B0 - relative - 2+ cycles
18
- def bcs(_addr, _value)
19
- take_branch if status.carry?
20
- end
21
-
22
- # Branch if equal (Z=1).
23
- #
24
- # Opcodes:
25
- # $F0 - relative - 2+ cycles
26
- def beq(_addr, _value)
27
- take_branch if status.zero?
28
- end
29
-
30
- # Branch if minus (N=1).
31
- #
32
- # Opcodes:
33
- # $30 - relative - 2+ cycles
34
- def bmi(_addr, _value)
35
- take_branch if status.negative?
36
- end
37
-
38
- # Branch if not equal (Z=0).
39
- #
40
- # Opcodes:
41
- # $D0 - relative - 2+ cycles
42
- def bne(_addr, _value)
43
- take_branch unless status.zero?
44
- end
45
-
46
- # Branch if plus (N=0).
47
- #
48
- # Opcodes:
49
- # $10 - relative - 2+ cycles
50
- def bpl(_addr, _value)
51
- take_branch unless status.negative?
52
- end
53
-
54
- # Branch if overflow clear (V=0).
55
- #
56
- # Opcodes:
57
- # $50 - relative - 2+ cycles
58
- def bvc(_addr, _value)
59
- take_branch unless status.overflow?
60
- end
61
-
62
- # Branch if overflow set (V=1).
63
- #
64
- # Opcodes:
65
- # $70 - relative - 2+ cycles
66
- def bvs(_addr, _value)
67
- take_branch if status.overflow?
68
- end
69
-
70
- private
71
-
72
- # Marks the branch as taken. Operations#op_relative reads the flag
73
- # and runs the extra cycles.
74
- def take_branch
75
- @branch_taken = true
76
- end
77
- end
78
- end
79
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Badline
4
- module InstructionSet
5
- module Flag
6
- # Clear carry flag.
7
- #
8
- # Opcodes:
9
- # $18 - implied - 2 cycles
10
- def clc(_addr, _value)
11
- status.carry = false
12
- end
13
-
14
- # Clear decimal mode flag.
15
- #
16
- # Opcodes:
17
- # $D8 - implied - 2 cycles
18
- def cld(_addr, _value)
19
- status.decimal = false
20
- end
21
-
22
- # Clear interrupt disable flag.
23
- #
24
- # Opcodes:
25
- # $58 - implied - 2 cycles
26
- def cli(_addr, _value)
27
- status.interrupt = false
28
- end
29
-
30
- # Clear overflow flag.
31
- #
32
- # Opcodes:
33
- # $B8 - implied - 2 cycles
34
- def clv(_addr, _value)
35
- status.overflow = false
36
- end
37
-
38
- # Set carry flag.
39
- #
40
- # Opcodes:
41
- # $38 - implied - 2 cycles
42
- def sec(_addr, _value)
43
- status.carry = true
44
- end
45
-
46
- # Set decimal mode flag.
47
- #
48
- # Opcodes:
49
- # $F8 - implied - 2 cycles
50
- def sed(_addr, _value)
51
- status.decimal = true
52
- end
53
-
54
- # Set interrupt disable flag.
55
- #
56
- # Opcodes:
57
- # $78 - implied - 2 cycles
58
- def sei(_addr, _value)
59
- status.interrupt = true
60
- end
61
- end
62
- end
63
- end
@@ -1,270 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Badline
4
- module InstructionSet
5
- # Illegal opcodes
6
- module Illegal
7
- # Combination of AND and LSR.
8
- #
9
- # Opcodes:
10
- # $4B - immediate - 2 cycles
11
- def alr(_addr, value)
12
- @a &= value
13
- status.carry = @a[0]
14
- @a = (@a >> 1) & 0xff
15
- update_number_flags(@a)
16
- end
17
-
18
- # Combination of AND where carry is set to bit 7 of result.
19
- #
20
- # Opcodes:
21
- # $0B, $2B - immediate - 2 cycles
22
- def anc(addr, value)
23
- self.and(addr, value)
24
- status.carry = status.negative
25
- end
26
-
27
- # Unstable instruction. AND's value with A|magic_const and X.
28
- # Magic constant varies by CPU. A VIC stall between the opcode and
29
- # operand fetches clears its bits 0 and 4.
30
- #
31
- # Opcodes:
32
- # $8B - immediate - 2 cycles
33
- def ane(_addr, value)
34
- magic_const = stalled_before_this_cycle? ? @ane_constant & 0xee : @ane_constant
35
- @a = (a | magic_const) & x & value
36
- update_number_flags(@a)
37
- end
38
-
39
- # Combination of AND and ROR.
40
- #
41
- # Opcodes:
42
- # $6B - immediate - 2 cycles
43
- def arr(_addr, value)
44
- tmp = a & value
45
- result = (tmp >> 1) | (status.carry? ? 0x80 : 0)
46
- status.zero = result.zero?
47
- status.negative = status.carry
48
-
49
- if status.decimal?
50
- status.overflow = (result ^ tmp).anybits?(0x40)
51
-
52
- # Low nibble
53
- result = (result & 0xf0) | ((result + 0x06) & 0x0f) if ((tmp & 0x0f) + (tmp & 0x01)) > 0x05
54
-
55
- # High nibble + carry
56
- if ((tmp & 0xf0) + (tmp & 0x10)) > 0x50
57
- result = (result & 0x0f) | ((result + 0x60) & 0xf0)
58
- status.carry = true
59
- else
60
- status.carry = false
61
- end
62
- else
63
- status.carry = tmp[7] == 1
64
- status.overflow = tmp[7] ^ tmp[6]
65
- end
66
-
67
- @a = result
68
- end
69
-
70
- # Combination of DEC and CMP operations.
71
- #
72
- # Opcodes:
73
- # $C3 - indirect_x - 8 cycles
74
- # $C7 - zeropage - 5 cycles
75
- # $CF - absolute - 6 cycles
76
- # $D3 - indirect_y - 8 cycles
77
- # $D7 - zeropage_x - 6 cycles
78
- # $DB - absolute_y - 7 cycles
79
- # $DF - absolute_x - 7 cycles
80
- def dcp(addr, value)
81
- cmp(addr, dec(addr, value))
82
- end
83
-
84
- # Combination of INC and SBC operations.
85
- #
86
- # Opcodes:
87
- # $E3 - indirect_x - 8 cycles
88
- # $E7 - zeropage - 5 cycles
89
- # $EF - absolute - 6 cycles
90
- # $F3 - indirect_y - 8 cycles
91
- # $F7 - zeropage_x - 6 cycles
92
- # $FB - absolute_y - 7 cycles
93
- # $FF - absolute_x - 7 cycles
94
- def isc(addr, value)
95
- sbc(addr, inc(addr, value))
96
- end
97
-
98
- # Loads A and S with value AND stack pointer.
99
- #
100
- # Opcodes:
101
- # $BB - absolute_y - 4 cycles
102
- def las(_addr, value)
103
- @a = @x = @stack_pointer = value & stack_pointer
104
- update_number_flags(@a)
105
- end
106
-
107
- # Combination of LDA and LDX with same value.
108
- #
109
- # Opcodes:
110
- # $A3 - indirect_x - 6 cycles
111
- # $A7 - zeropage - 3 cycles
112
- # $AF - absolute - 4 cycles
113
- # $B3 - indirect_y - 5+ cycles
114
- # $B7 - zeropage_y - 4 cycles
115
- # $BF - absolute_y - 4+ cycles
116
- def lax(_addr, value)
117
- @a = @x = value
118
-
119
- update_number_flags(@a)
120
- end
121
-
122
- # Unstable immediate form of LAX. Loads A and X with
123
- # (A | magic_const) AND value. Magic constant varies by CPU.
124
- #
125
- # Opcodes:
126
- # $AB - immediate - 2 cycles
127
- def lxa(_addr, value)
128
- magic_const = 0xee
129
- @a = @x = (a | magic_const) & value
130
- update_number_flags(@a)
131
- end
132
-
133
- # Special no-operation instruction that does not consume a CPU cycle,
134
- # unlike the standard NOP. Used by some illegal opcodes.
135
- #
136
- # Opcodes:
137
- # $80, $82, $89, $C2, $E2 - immediate - 2 cycles
138
- def nop_nocycle(_addr, _value); end
139
-
140
- # Combination of ROL and AND operations.
141
- #
142
- # Opcodes:
143
- # $23 - indirect_x - 8 cycles
144
- # $27 - zeropage - 5 cycles
145
- # $2F - absolute - 6 cycles
146
- # $33 - indirect_y - 8 cycles
147
- # $37 - zeropage_x - 6 cycles
148
- # $3B - absolute_y - 7 cycles
149
- # $3F - absolute_x - 7 cycles
150
- def rla(addr, value)
151
- self.and(addr, rol(addr, value))
152
- end
153
-
154
- # Combination of ROR and ADC operations.
155
- #
156
- # Opcodes:
157
- # $63 - indirect_x - 8 cycles
158
- # $67 - zeropage - 5 cycles
159
- # $6F - absolute - 6 cycles
160
- # $73 - indirect_y - 8 cycles
161
- # $77 - zeropage_x - 6 cycles
162
- # $7B - absolute_y - 7 cycles
163
- # $7F - absolute_x - 7 cycles
164
- def rra(addr, value)
165
- adc(addr, ror(addr, value))
166
- end
167
-
168
- # Store A AND X.
169
- #
170
- # Opcodes:
171
- # $83 - indirect_x - 6 cycles
172
- # $87 - zeropage - 3 cycles
173
- # $8F - absolute - 4 cycles
174
- # $97 - zeropage_y - 4 cycles
175
- def sax(addr, _value)
176
- write_byte(addr, @a & @x)
177
- end
178
-
179
- # AND X register with accumulator and subtract value.
180
- #
181
- # Opcodes:
182
- # $CB - immediate - 2 cycles
183
- def sbx(_addr, value)
184
- result = (@x & @a) - value
185
- status.carry = result >= 0
186
- @x = result & 0xff
187
- update_number_flags(@x)
188
- end
189
-
190
- # Stores A AND X AND (high byte of base address + 1) at addr.
191
- #
192
- # Opcodes:
193
- # $93 - indirect_y - 6 cycles
194
- # $9F - absolute_y - 5 cycles
195
- def sha(addr, _value)
196
- store_high_and(a & x, addr)
197
- end
198
-
199
- # Stores X AND (high byte of base address + 1) at addr.
200
- #
201
- # Opcodes:
202
- # $9E - absolute_y - 5 cycles
203
- def shx(addr, _value)
204
- store_high_and(x, addr)
205
- end
206
-
207
- # Stores Y AND (high byte of base address + 1) at addr.
208
- #
209
- # Opcodes:
210
- # $9C - absolute_x - 5 cycles
211
- def shy(addr, _value)
212
- store_high_and(y, addr)
213
- end
214
-
215
- # Combination of ASL and ORA operations.
216
- #
217
- # Opcodes:
218
- # $03 - indirect_x - 8 cycles
219
- # $07 - zeropage - 5 cycles
220
- # $0F - absolute - 6 cycles
221
- # $13 - indirect_y - 8 cycles
222
- # $17 - zeropage_x - 6 cycles
223
- # $1B - absolute_y - 7 cycles
224
- # $1F - absolute_x - 7 cycles
225
- def slo(addr, value)
226
- ora(addr, asl(addr, value))
227
- end
228
-
229
- # Combination of LSR and EOR operations.
230
- #
231
- # Opcodes:
232
- # $43 - indirect_x - 8 cycles
233
- # $47 - zeropage - 5 cycles
234
- # $4F - absolute - 6 cycles
235
- # $53 - indirect_y - 8 cycles
236
- # $57 - zeropage_x - 6 cycles
237
- # $5B - absolute_y - 7 cycles
238
- # $5F - absolute_x - 7 cycles
239
- def sre(addr, value)
240
- eor(addr, lsr(addr, value))
241
- end
242
-
243
- # Stores A AND X in SP, then stores SP AND (high byte of base + 1) at
244
- # addr.
245
- #
246
- # Opcodes:
247
- # $9B - absolute_y - 5 cycles
248
- def tas(addr, _value)
249
- @stack_pointer = @a & @x
250
- store_high_and(stack_pointer, addr)
251
- end
252
-
253
- private
254
-
255
- # A VIC stall right before the dummy read, the second-to-last cycle,
256
- # drops the & (H+1) from the stored value but not from the high byte
257
- # of a page-crossing target.
258
- def store_high_and(register, addr)
259
- base_high = if boundary_crossed
260
- (high_byte(addr) - 1) & 0xff
261
- else
262
- high_byte(addr)
263
- end
264
- result = register & ((base_high + 1) & 0xff)
265
- target = boundary_crossed ? uint16(low_byte(addr), result) : addr
266
- write_byte(target, stalled_before_previous_cycle? ? register : result)
267
- end
268
- end
269
- end
270
- end
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Badline
4
- module InstructionSet
5
- module IncDec
6
- # Decrements memory location by one.
7
- #
8
- # Opcodes:
9
- # $C6 - zeropage - 5 cycles
10
- # $CE - absolute - 6 cycles
11
- # $D6 - zeropage_x - 6 cycles
12
- # $DE - absolute_x - 7 cycles
13
- def dec(addr, value)
14
- result = (value - 1) & 0xff
15
- write_modified(addr, result)
16
- update_number_flags(result)
17
- end
18
-
19
- # Decrements X register by one.
20
- #
21
- # Opcodes:
22
- # $CA - implied - 2 cycles
23
- def dex(_addr, _value)
24
- @x = (@x - 1) & 0xff
25
- update_number_flags(@x)
26
- end
27
-
28
- # Decrements Y register by one.
29
- #
30
- # Opcodes:
31
- # $88 - implied - 2 cycles
32
- def dey(_addr, _value)
33
- @y = (@y - 1) & 0xff
34
- update_number_flags(@y)
35
- end
36
-
37
- # Increments memory location by one.
38
- #
39
- # Opcodes:
40
- # $E6 - zeropage - 5 cycles
41
- # $EE - absolute - 6 cycles
42
- # $F6 - zeropage_x - 6 cycles
43
- # $FE - absolute_x - 7 cycles
44
- def inc(addr, value)
45
- result = (value + 1) & 0xff
46
- write_modified(addr, result)
47
- update_number_flags(result)
48
- end
49
-
50
- # Increments X register by one.
51
- #
52
- # Opcodes:
53
- # $E8 - implied - 2 cycles
54
- def inx(_addr, _value)
55
- @x = (@x + 1) & 0xff
56
- update_number_flags(@x)
57
- end
58
-
59
- # Increments Y register by one.
60
- #
61
- # Opcodes:
62
- # $C8 - implied - 2 cycles
63
- def iny(_addr, _value)
64
- @y = (@y + 1) & 0xff
65
- update_number_flags(@y)
66
- end
67
- end
68
- end
69
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Badline
4
- module InstructionSet
5
- module Stack
6
- # Push accumulator onto the stack.
7
- #
8
- # Opcodes:
9
- # $48 - implied - 3 cycles
10
- def pha(_addr, _value)
11
- stack_push(@a)
12
- end
13
-
14
- # Push processor status onto the stack.
15
- #
16
- # Opcodes:
17
- # $08 - implied - 3 cycles
18
- def php(_addr, _value)
19
- stack_push(p | 0b00010000)
20
- end
21
-
22
- # Pull accumulator from stack.
23
- #
24
- # Opcodes:
25
- # $68 - implied - 4 cycles
26
- def pla(_addr, _value)
27
- @a = stack_pull
28
- update_number_flags(@a)
29
- end
30
-
31
- # Pull processor status from stack.
32
- #
33
- # Opcodes:
34
- # $28 - implied - 4 cycles
35
- def plp(_addr, _value)
36
- status.value = stack_pull & 0b11101111
37
- end
38
-
39
- private
40
-
41
- def stack_pull
42
- @stack_pointer = (@stack_pointer + 1) & 0xff
43
- @memory.peek(stack_address)
44
- end
45
-
46
- def stack_push(value)
47
- write_byte(stack_address, value)
48
- @stack_pointer = (@stack_pointer - 1) & 0xff
49
- end
50
- end
51
- end
52
- end