input handling
[mdlife] / src / pad.S
diff --git a/src/pad.S b/src/pad.S
new file mode 100644 (file)
index 0000000..11e3828
--- /dev/null
+++ b/src/pad.S
@@ -0,0 +1,45 @@
+       .text
+
+#include "hwregs.h"
+       .include "z80.inc"
+
+       .globl pad_init
+pad_init:
+       move.b #IO_BIT_TH, %d0
+       move.b %d0, IO_CTL1_PORT
+       move.b %d0, IO_DATA1_PORT
+       move.b %d0, IO_CTL2_PORT
+       move.b %d0, IO_DATA2_PORT
+       move.b %d0, IO_CTL3_PORT
+       move.b %d0, IO_DATA3_PORT
+       rts
+
+       .globl pad_read
+pad_read:
+       | Z80 busreq to avoid messing up its wait states (bulletin #4)
+       z80_grab_wait
+       move.l 4(%sp), %d0
+       lsl.l #1, %d0
+       add.l #IO_DATA1_PORT, %d0
+       move.l %d0, %a0
+       move.b #IO_BIT_TH, (%a0)
+       clr.l %d0
+       nop
+       move.b (%a0), %d0
+       move.b #0, (%a0)
+       and.b #0x3f, %d0
+       move.b (%a0), %d1
+       lsl.b #2, %d1
+       and.b #0xc0, %d1
+       or.b %d1, %d0
+       not.b %d0
+       z80_release
+       rts
+
+       .bss
+       .globl bnstate
+       .globl bndiff
+bnstate: .word 0
+bndiff: .word 0
+
+| vi:ft=gas68k: