diff --git a/doc/atmos.sgml b/doc/atmos.sgml
index 68f7f9d65..9e61fbd1c 100644
--- a/doc/atmos.sgml
+++ b/doc/atmos.sgml
@@ -159,7 +159,10 @@ No extended memory drivers are currently available for the Atmos.
diff --git a/libsrc/atmos/joy/atmos-ijk.s b/libsrc/atmos/joy/atmos-ijk.s
new file mode 100644
index 000000000..f59f6b96a
--- /dev/null
+++ b/libsrc/atmos/joy/atmos-ijk.s
@@ -0,0 +1,146 @@
+;
+; IJK joystick driver for the Atmos
+; Can be used multiple times when statically linked to the application.
+;
+; 2002-12-20, Based on Ullrich von Bassewitz's code.
+; 2017-11-01, Stefan Haubenthal
+;
+
+ .include "joy-kernel.inc"
+ .include "joy-error.inc"
+ .include "atmos.inc"
+
+ .macpack module
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+ module_header _atmos_ijk_joy
+
+; Driver signature
+
+ .byte $6A, $6F, $79 ; "joy"
+ .byte JOY_API_VERSION ; Driver API version number
+
+; Library reference
+
+ .addr $0000
+
+; Button state masks (8 values)
+
+ .byte $10 ; JOY_UP
+ .byte $08 ; JOY_DOWN
+ .byte $01 ; JOY_LEFT
+ .byte $02 ; JOY_RIGHT
+ .byte $20 ; JOY_FIRE
+ .byte $00 ; Future expansion
+ .byte $00 ; Future expansion
+ .byte $00 ; Future expansion
+
+; Jump table.
+
+ .addr INSTALL
+ .addr UNINSTALL
+ .addr COUNT
+ .addr READ
+ .addr 0 ; IRQ entry unused
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT = 2 ; Number of joysticks we support
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. If
+; possible, check if the hardware is present and determine the amount of
+; memory available.
+; Must return an JOY_ERR_xx code in a/x.
+;
+
+INSTALL:
+ lda #%11000000
+ sta VIA::DDRA
+ sta VIA::PRA
+ lda VIA::PRA
+ and #%00100000
+ bne ijkPresent
+ lda #