badline 0.6.0 → 0.6.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -0
- data/CLAUDE.md +10 -9
- data/README.md +24 -10
- data/doc/pinned-behaviour.md +131 -30
- data/exe/badline-ruby +20 -24
- data/lib/badline/address_bus.rb +10 -1
- data/lib/badline/audio/cli.rb +18 -5
- data/lib/badline/audio/console.rb +2 -1
- data/lib/badline/audio.rb +0 -3
- data/lib/badline/computer.rb +6 -3
- data/lib/badline/cpu/boundary.rb +54 -0
- data/lib/badline/cpu/core.rb +165 -0
- data/lib/badline/cpu.rb +3 -214
- data/lib/badline/drive1541/cpu.rb +29 -0
- data/lib/badline/drive1541.rb +1 -0
- data/lib/badline/ffi.rb +157 -0
- data/lib/badline/frontend/app.rb +225 -0
- data/lib/badline/frontend/audio_sink.rb +72 -0
- data/lib/badline/frontend/boot.rb +52 -0
- data/lib/badline/frontend/controls.rb +163 -0
- data/lib/badline/frontend/drive_led.rb +51 -0
- data/lib/badline/frontend/frame_rate.rb +83 -0
- data/lib/badline/frontend/gamepads.rb +76 -0
- data/lib/badline/frontend/keys.rb +48 -0
- data/lib/badline/frontend/pacer.rb +100 -0
- data/lib/badline/frontend/pad_port.rb +61 -0
- data/lib/badline/frontend/screen.rb +65 -0
- data/lib/badline/frontend/screenshot.rb +22 -0
- data/lib/badline/frontend/snapshots.rb +60 -0
- data/lib/badline/frontend/sound.rb +153 -0
- data/lib/badline/frontend/timeline.rb +171 -0
- data/lib/badline/frontend.rb +18 -0
- data/lib/badline/options/event.rb +94 -0
- data/lib/badline/options/help.rb +78 -0
- data/lib/badline/options/option.rb +29 -0
- data/lib/badline/options/table.rb +62 -0
- data/lib/badline/options.rb +181 -145
- data/lib/badline/reu/dma/saved_state.rb +50 -0
- data/lib/badline/reu/dma.rb +56 -47
- data/lib/badline/reu/saved_state.rb +2 -1
- data/lib/badline/reu.rb +19 -10
- data/lib/badline/sdl.rb +123 -51
- data/lib/badline/sid/waveform/noise_writeback.rb +33 -11
- data/lib/badline/sid/waveform.rb +2 -3
- data/lib/badline/snapshot/state.rb +1 -1
- data/lib/badline/version.rb +1 -1
- data/lib/badline/vic/bank.rb +21 -0
- data/lib/badline/vic.rb +15 -6
- metadata +26 -19
- data/.claude/hooks/session-start.sh +0 -57
- data/.claude/settings.json +0 -14
- data/lib/badline/audio/sdl_sink.rb +0 -70
- data/lib/badline/audio/stream.rb +0 -123
- data/lib/badline/gui/application.rb +0 -243
- data/lib/badline/gui/drive_led_pane.rb +0 -29
- data/lib/badline/gui/gamepads.rb +0 -104
- data/lib/badline/gui/joy_map.rb +0 -27
- data/lib/badline/gui/key_map.rb +0 -39
- data/lib/badline/gui/palette.rb +0 -35
- data/lib/badline/gui/pane.rb +0 -36
- data/lib/badline/gui/screen_pane.rb +0 -46
- data/lib/badline/gui/snapshots.rb +0 -67
- data/lib/badline/gui/window.rb +0 -61
- data/lib/badline/gui.rb +0 -14
- data/lib/badline/sdl/events.rb +0 -49
- data/lib/badline/sdl/functions.rb +0 -74
- data/vendor/.gitkeep +0 -0
data/lib/badline/gui/pane.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
module GUI
|
|
5
|
-
class Pane
|
|
6
|
-
attr_reader :left, :top, :width, :height
|
|
7
|
-
|
|
8
|
-
def initialize(width:, height:, left: 0, top: 0)
|
|
9
|
-
@width = width
|
|
10
|
-
@height = height
|
|
11
|
-
@left = left
|
|
12
|
-
@top = top
|
|
13
|
-
@rect = [left, top, width, height].pack("l4")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def render(_renderer)
|
|
17
|
-
raise NotImplementedError, "#{self.class} must implement #render"
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
# The pixels are little-endian RGBA dwords, red in the low byte.
|
|
23
|
-
def blit(renderer, pixels)
|
|
24
|
-
surface = SDL::CreateRGBSurfaceFrom.call(
|
|
25
|
-
pixels, width, height, 32, width * 4,
|
|
26
|
-
0x0000_00ff, 0x0000_ff00, 0x00ff_0000, 0xff00_0000
|
|
27
|
-
)
|
|
28
|
-
texture = SDL::CreateTextureFromSurface.call(renderer, surface)
|
|
29
|
-
SDL::RenderCopy.call(renderer, texture, nil, @rect)
|
|
30
|
-
ensure
|
|
31
|
-
SDL::DestroyTexture.call(texture) if texture
|
|
32
|
-
SDL::FreeSurface.call(surface) if surface
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
module GUI
|
|
5
|
-
# The part of the VIC's raster the machine's region crops out.
|
|
6
|
-
class ScreenPane < Pane
|
|
7
|
-
def initialize(computer, left: 0, top: 0, palette: Palette.new)
|
|
8
|
-
@col_offset, @row_offset, crop_width, crop_height = computer.region.crop
|
|
9
|
-
super(width: crop_width, height: crop_height, left:, top:)
|
|
10
|
-
@computer = computer
|
|
11
|
-
@row_bytes = width * 4
|
|
12
|
-
@palette = palette.dwords
|
|
13
|
-
@buffer = ("\x00" * (height * @row_bytes)).b
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def render(renderer)
|
|
17
|
-
blit(renderer, framebuffer)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
# Repack only the scanlines the VIC has touched since the last frame.
|
|
23
|
-
def framebuffer
|
|
24
|
-
vic = @computer.vic
|
|
25
|
-
display = vic.display
|
|
26
|
-
vic_width = vic.width
|
|
27
|
-
dirty = vic.dirty_lines
|
|
28
|
-
|
|
29
|
-
height.times do |row|
|
|
30
|
-
next unless dirty[row + @row_offset]
|
|
31
|
-
|
|
32
|
-
@buffer[row * @row_bytes, @row_bytes] =
|
|
33
|
-
pack_row(display, vic_width, row)
|
|
34
|
-
end
|
|
35
|
-
vic.clear_dirty_lines!
|
|
36
|
-
@buffer
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def pack_row(display, vic_width, row)
|
|
40
|
-
line = display[((row + @row_offset) * vic_width) + @col_offset, width]
|
|
41
|
-
line.map! { |c| @palette[c] }
|
|
42
|
-
line.pack("V*")
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
module GUI
|
|
5
|
-
# The window's snapshots: a .vsf opened as the media, F11 saving the
|
|
6
|
-
# machine to a new badline-<date>-<time>.vsf in the working directory,
|
|
7
|
-
# and F12 going back to the snapshot last saved or opened.
|
|
8
|
-
class Snapshots
|
|
9
|
-
def self.snapshot?(path) = !path.nil? && File.extname(path).casecmp?(".vsf")
|
|
10
|
-
|
|
11
|
-
def initialize
|
|
12
|
-
@last = nil
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# The machine the window starts with: for a .vsf the machine it holds,
|
|
16
|
-
# built with that machine's chip models, which F12 goes back to, and
|
|
17
|
-
# otherwise one built from the machine options (Application.new) with
|
|
18
|
-
# the media attached.
|
|
19
|
-
def boot(media_path, machine, media)
|
|
20
|
-
return load(media_path) if Snapshots.snapshot?(media_path)
|
|
21
|
-
|
|
22
|
-
Computer.new(**machine_options(machine, media_path)).tap do |computer|
|
|
23
|
-
Media::TrueDrive.plug(computer) if machine[:true_drive]
|
|
24
|
-
puts Media.attach(computer, media_path, **media) if media_path
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# A new machine, built as the snapshot's was and restored from it.
|
|
29
|
-
def load(path)
|
|
30
|
-
computer = Snapshot.load(path) { |line| puts line }
|
|
31
|
-
@last = path
|
|
32
|
-
puts "Restored #{path}"
|
|
33
|
-
computer
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Saves the machine, and warns when it can't.
|
|
37
|
-
def save(computer)
|
|
38
|
-
path = "badline-#{Time.now.strftime('%Y%m%d-%H%M%S')}.vsf"
|
|
39
|
-
computer.save_snapshot(path)
|
|
40
|
-
@last = path
|
|
41
|
-
puts "Saved #{path}, F12 restores it"
|
|
42
|
-
rescue Snapshot::FormatError, SystemCallError => e
|
|
43
|
-
warn "badline: #{path}: #{e.message}"
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# A new machine restored from the snapshot last saved or opened, or
|
|
47
|
-
# nil when there is none or it fails, which it warns about.
|
|
48
|
-
def restore
|
|
49
|
-
return load(@last) if @last
|
|
50
|
-
|
|
51
|
-
puts "No snapshot to restore, F11 saves one"
|
|
52
|
-
nil
|
|
53
|
-
rescue Snapshot::FormatError, SystemCallError => e
|
|
54
|
-
warn "badline: #{@last}: #{e.message}"
|
|
55
|
-
nil
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
private
|
|
59
|
-
|
|
60
|
-
def machine_options(machine, media_path)
|
|
61
|
-
options = { sid_model: machine[:sid_model] || Media.sid_model(media_path), **machine.slice(:reu) }
|
|
62
|
-
options[:region] = Region::NTSC if machine[:ntsc]
|
|
63
|
-
options
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
data/lib/badline/gui/window.rb
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
module GUI
|
|
5
|
-
class Window
|
|
6
|
-
DEFAULT_REFRESH_RATE = 60
|
|
7
|
-
|
|
8
|
-
# SDL_DisplayMode: Uint32 format; int w, h, refresh_rate; then a pointer.
|
|
9
|
-
DISPLAY_MODE_SIZE = 24
|
|
10
|
-
|
|
11
|
-
attr_reader :renderer
|
|
12
|
-
|
|
13
|
-
def initialize(title:, width:, height:, scale: 2, vsync: true)
|
|
14
|
-
SDL.check(SDL::InitSubSystem.call(SDL::INIT_VIDEO | SDL::INIT_EVENTS))
|
|
15
|
-
SDL::SetHint.call("SDL_RENDER_SCALE_QUALITY", "0") # nearest-neighbour
|
|
16
|
-
SDL::SetHint.call("SDL_MOUSE_RELATIVE_SCALING", "0") # host pixels, whatever the window size
|
|
17
|
-
|
|
18
|
-
@window = SDL.check_pointer(SDL::CreateWindow.call(
|
|
19
|
-
title,
|
|
20
|
-
SDL::WINDOWPOS_CENTERED, SDL::WINDOWPOS_CENTERED,
|
|
21
|
-
width * scale, height * scale,
|
|
22
|
-
SDL::WINDOW_RESIZABLE
|
|
23
|
-
))
|
|
24
|
-
|
|
25
|
-
flags = SDL::RENDERER_ACCELERATED
|
|
26
|
-
flags |= SDL::RENDERER_PRESENTVSYNC if vsync
|
|
27
|
-
@renderer = SDL.check_pointer(SDL::CreateRenderer.call(@window, -1, flags))
|
|
28
|
-
SDL.check(SDL::RenderSetLogicalSize.call(@renderer, width, height))
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def title=(title)
|
|
32
|
-
SDL::SetWindowTitle.call(@window, title)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def refresh_rate
|
|
36
|
-
mode = "\0".b * DISPLAY_MODE_SIZE
|
|
37
|
-
SDL.check(SDL::GetCurrentDisplayMode.call(0, mode))
|
|
38
|
-
rate = mode.unpack1("l", offset: 12)
|
|
39
|
-
rate.positive? ? rate : DEFAULT_REFRESH_RATE
|
|
40
|
-
rescue SDL::Error
|
|
41
|
-
DEFAULT_REFRESH_RATE
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def draw(panes)
|
|
45
|
-
SDL::SetRenderDrawColor.call(@renderer, 0, 0, 0, 255)
|
|
46
|
-
SDL::RenderClear.call(@renderer)
|
|
47
|
-
panes.each { |pane| pane.render(@renderer) }
|
|
48
|
-
SDL::RenderPresent.call(@renderer)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def close
|
|
52
|
-
return unless @window
|
|
53
|
-
|
|
54
|
-
SDL::DestroyRenderer.call(@renderer)
|
|
55
|
-
SDL::DestroyWindow.call(@window)
|
|
56
|
-
SDL::QuitSubSystem.call(SDL::INIT_VIDEO | SDL::INIT_EVENTS)
|
|
57
|
-
@window = nil
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
data/lib/badline/gui.rb
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "badline/sdl"
|
|
4
|
-
|
|
5
|
-
require "badline/gui/palette"
|
|
6
|
-
require "badline/gui/key_map"
|
|
7
|
-
require "badline/gui/joy_map"
|
|
8
|
-
require "badline/gui/gamepads"
|
|
9
|
-
require "badline/gui/pane"
|
|
10
|
-
require "badline/gui/screen_pane"
|
|
11
|
-
require "badline/gui/drive_led_pane"
|
|
12
|
-
require "badline/gui/window"
|
|
13
|
-
require "badline/gui/snapshots"
|
|
14
|
-
require "badline/gui/application"
|
data/lib/badline/sdl/events.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
module SDL
|
|
5
|
-
KEY_TAB = 0x09
|
|
6
|
-
KEY_F10 = 0x4000_0043
|
|
7
|
-
KEY_F11 = 0x4000_0044
|
|
8
|
-
KEY_F12 = 0x4000_0045
|
|
9
|
-
KMOD_SHIFT = 0x0003
|
|
10
|
-
|
|
11
|
-
# The events the front end handles. SDL_Event is a 56-byte union, read
|
|
12
|
-
# here at the offsets its keyboard, mouse and controller members use.
|
|
13
|
-
Quit = Data.define
|
|
14
|
-
# A held key sends repeats, flagged at byte 13 of the event.
|
|
15
|
-
KeyDown = Data.define(:sym, :mod, :repeat) do
|
|
16
|
-
def initialize(sym:, mod:, repeat: false) = super
|
|
17
|
-
end
|
|
18
|
-
KeyUp = Data.define(:sym, :mod)
|
|
19
|
-
MouseMotion = Data.define(:xrel, :yrel)
|
|
20
|
-
MouseButton = Data.define(:button, :pressed)
|
|
21
|
-
ControllerDevice = Data.define
|
|
22
|
-
|
|
23
|
-
EVENT_SIZE = 56
|
|
24
|
-
|
|
25
|
-
# The next event the front end handles, skipping the others, or nil once
|
|
26
|
-
# the queue is empty.
|
|
27
|
-
def self.poll_event
|
|
28
|
-
buffer = (@event ||= Fiddle::Pointer.malloc(EVENT_SIZE, Fiddle::RUBY_FREE))
|
|
29
|
-
while PollEvent.call(buffer) == 1
|
|
30
|
-
event = decode(buffer.to_str(EVENT_SIZE))
|
|
31
|
-
return event if event
|
|
32
|
-
end
|
|
33
|
-
nil
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def self.decode(bytes)
|
|
37
|
-
case bytes.unpack1("L")
|
|
38
|
-
when 0x100 then Quit.new
|
|
39
|
-
when 0x300 then KeyDown.new(*bytes.unpack("lS", offset: 20), bytes.getbyte(13) != 0)
|
|
40
|
-
when 0x301 then KeyUp.new(*bytes.unpack("lS", offset: 20))
|
|
41
|
-
when 0x400 then MouseMotion.new(*bytes.unpack("l2", offset: 28))
|
|
42
|
-
when 0x401, 0x402 then MouseButton.new(bytes.getbyte(16), bytes.getbyte(17) == 1)
|
|
43
|
-
when 0x653..0x655 then ControllerDevice.new
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.key_name(sym) = GetKeyName.call(sym)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
module SDL
|
|
5
|
-
INIT_AUDIO = 0x10
|
|
6
|
-
INIT_VIDEO = 0x20
|
|
7
|
-
INIT_GAMECONTROLLER = 0x2000
|
|
8
|
-
INIT_EVENTS = 0x4000
|
|
9
|
-
|
|
10
|
-
WINDOWPOS_CENTERED = 0x2fff_0000
|
|
11
|
-
WINDOW_RESIZABLE = 0x20
|
|
12
|
-
RENDERER_ACCELERATED = 0x02
|
|
13
|
-
RENDERER_PRESENTVSYNC = 0x04
|
|
14
|
-
|
|
15
|
-
AUDIO_S16SYS = [1].pack("s").getbyte(0) == 1 ? 0x8010 : 0x9010
|
|
16
|
-
AUDIO_ALLOW_FREQUENCY_CHANGE = 0x01
|
|
17
|
-
|
|
18
|
-
CONTROLLER_AXIS_LEFTX = 0
|
|
19
|
-
CONTROLLER_AXIS_LEFTY = 1
|
|
20
|
-
CONTROLLER_BUTTON_A = 0
|
|
21
|
-
CONTROLLER_BUTTON_B = 1
|
|
22
|
-
CONTROLLER_BUTTON_X = 2
|
|
23
|
-
CONTROLLER_BUTTON_Y = 3
|
|
24
|
-
CONTROLLER_BUTTON_LEFTSHOULDER = 9
|
|
25
|
-
CONTROLLER_BUTTON_RIGHTSHOULDER = 10
|
|
26
|
-
CONTROLLER_BUTTON_DPAD_UP = 11
|
|
27
|
-
CONTROLLER_BUTTON_DPAD_DOWN = 12
|
|
28
|
-
CONTROLLER_BUTTON_DPAD_LEFT = 13
|
|
29
|
-
CONTROLLER_BUTTON_DPAD_RIGHT = 14
|
|
30
|
-
|
|
31
|
-
InitSubSystem = function("SDL_InitSubSystem", [UINT32], INT)
|
|
32
|
-
QuitSubSystem = function("SDL_QuitSubSystem", [UINT32], VOID)
|
|
33
|
-
GetError = function("SDL_GetError", [], STRING)
|
|
34
|
-
SetHint = function("SDL_SetHint", [STRING, STRING], INT)
|
|
35
|
-
|
|
36
|
-
CreateWindow = function("SDL_CreateWindow", [STRING, INT, INT, INT, INT, UINT32], POINTER)
|
|
37
|
-
SetWindowTitle = function("SDL_SetWindowTitle", [POINTER, STRING], VOID)
|
|
38
|
-
DestroyWindow = function("SDL_DestroyWindow", [POINTER], VOID)
|
|
39
|
-
GetCurrentDisplayMode = function("SDL_GetCurrentDisplayMode", [INT, POINTER], INT)
|
|
40
|
-
CreateRenderer = function("SDL_CreateRenderer", [POINTER, INT, UINT32], POINTER)
|
|
41
|
-
DestroyRenderer = function("SDL_DestroyRenderer", [POINTER], VOID)
|
|
42
|
-
RenderSetLogicalSize = function("SDL_RenderSetLogicalSize", [POINTER, INT, INT], INT)
|
|
43
|
-
SetRenderDrawColor = function("SDL_SetRenderDrawColor", [POINTER, UINT8, UINT8, UINT8, UINT8], INT)
|
|
44
|
-
RenderClear = function("SDL_RenderClear", [POINTER], INT)
|
|
45
|
-
RenderFillRect = function("SDL_RenderFillRect", [POINTER, POINTER], INT)
|
|
46
|
-
RenderCopy = function("SDL_RenderCopy", [POINTER, POINTER, POINTER, POINTER], INT)
|
|
47
|
-
RenderPresent = function("SDL_RenderPresent", [POINTER], VOID)
|
|
48
|
-
CreateRGBSurfaceFrom = function("SDL_CreateRGBSurfaceFrom",
|
|
49
|
-
[POINTER, INT, INT, INT, INT, UINT32, UINT32, UINT32, UINT32], POINTER)
|
|
50
|
-
FreeSurface = function("SDL_FreeSurface", [POINTER], VOID)
|
|
51
|
-
CreateTextureFromSurface = function("SDL_CreateTextureFromSurface", [POINTER, POINTER], POINTER)
|
|
52
|
-
DestroyTexture = function("SDL_DestroyTexture", [POINTER], VOID)
|
|
53
|
-
|
|
54
|
-
PollEvent = function("SDL_PollEvent", [POINTER], INT)
|
|
55
|
-
PushEvent = function("SDL_PushEvent", [POINTER], INT)
|
|
56
|
-
GetKeyName = function("SDL_GetKeyName", [INT], STRING)
|
|
57
|
-
SetRelativeMouseMode = function("SDL_SetRelativeMouseMode", [INT], INT)
|
|
58
|
-
|
|
59
|
-
NumJoysticks = function("SDL_NumJoysticks", [], INT)
|
|
60
|
-
IsGameController = function("SDL_IsGameController", [INT], INT)
|
|
61
|
-
GameControllerOpen = function("SDL_GameControllerOpen", [INT], POINTER)
|
|
62
|
-
GameControllerName = function("SDL_GameControllerName", [POINTER], STRING)
|
|
63
|
-
GameControllerGetButton = function("SDL_GameControllerGetButton", [POINTER, INT], UINT8)
|
|
64
|
-
GameControllerGetAxis = function("SDL_GameControllerGetAxis", [POINTER, INT], INT16)
|
|
65
|
-
GameControllerClose = function("SDL_GameControllerClose", [POINTER], VOID)
|
|
66
|
-
|
|
67
|
-
OpenAudioDevice = function("SDL_OpenAudioDevice", [STRING, INT, POINTER, POINTER, INT], UINT32)
|
|
68
|
-
CloseAudioDevice = function("SDL_CloseAudioDevice", [UINT32], VOID)
|
|
69
|
-
PauseAudioDevice = function("SDL_PauseAudioDevice", [UINT32, INT], VOID)
|
|
70
|
-
QueueAudio = function("SDL_QueueAudio", [UINT32, POINTER, UINT32], INT)
|
|
71
|
-
GetQueuedAudioSize = function("SDL_GetQueuedAudioSize", [UINT32], UINT32)
|
|
72
|
-
ClearQueuedAudio = function("SDL_ClearQueuedAudio", [UINT32], VOID)
|
|
73
|
-
end
|
|
74
|
-
end
|
data/vendor/.gitkeep
DELETED
|
File without changes
|