-------------------------------------------------------------------------------
Kingsoft 4-Player Adapter Specs v0.1                   last changes: 14.03.2012
-------------------------------------------------------------------------------

Supports 2 additional joysticks at the userport. 

Introduced with the game Bug Bomber by Kingsoft in 1992, the game came with 
instructions to build your own 4-player adapter.

Note: although the adapter uses the same idea as the Starbyte and DXS/HIT 
      adapters, it is NOT compatible with them!

################################################################################
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
################################################################################

The "schematics" shown in the bug bomber manual is wrong
(http://www.synnes.org/c64/images/kingsoft_4_player_adapter_schematics.png)

################################################################################
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
################################################################################

Schematics:
-----------

GND     1 ---------------+--- 8  JOY 3  GND
CNT1    4 ->-+           +--- 8  JOY 4  GND
CNT2    6 -<-+
SP2     7 ----------<-------- 6  JOY 4  BUTTON
PB0     C ----------<-------- 4  JOY 4  A3
PB1     D ----------<-------- 3  JOY 4  A2
PB2     E ----------<-------- 2  JOY 4  A1
PB3     F ----------<-------- 1  JOY 4  A0

PB4     H ----------<-------- 6  JOY 3  BUTTON
PB5     J ----------<-------- 4  JOY 3  A3
PB6     K ----------<-------- 3  JOY 3  A2
PB7     L ----------<-------- 2  JOY 3  A1
PA2     M ----------<-------- 1  JOY 3  A0

note: all GND pins at the userport (1, 12, A, N) should be connected to each
      other.

Example code (from "Bug Bomber"):
--------------------------------

; joystick 3

; set port A bit 2
.C:933d  78          SEI
.C:933e  AD 00 DD    LDA $DD00
.C:9341  09 04       ORA #$04
.C:9343  8D 00 DD    STA $DD00
.C:9346  58          CLI

; check port A bit 2
.C:9347  AD 00 DD    LDA $DD00
.C:934a  29 04       AND #$04
.C:934c  D0 06       BNE $9354
; clear joy bit 0
.C:934e  A5 43       LDA $43
.C:9350  29 FE       AND #$FE
.C:9352  85 43       STA $43

; check port B bit 7
.C:9354  AD 01 DD    LDA $DD01
.C:9357  29 80       AND #$80
.C:9359  D0 06       BNE $9361
; clear joy bit 1
.C:935b  A5 43       LDA $43
.C:935d  29 FD       AND #$FD
.C:935f  85 43       STA $43

; check port B bit 6
.C:9361  AD 01 DD    LDA $DD01
.C:9364  29 40       AND #$40
.C:9366  D0 06       BNE $936E
; clear joy bit 2
.C:9368  A5 43       LDA $43
.C:936a  29 FB       AND #$FB
.C:936c  85 43       STA $43

; check port B bit 5
.C:936e  AD 01 DD    LDA $DD01
.C:9371  29 20       AND #$20
.C:9373  D0 06       BNE $937B
; clear joy bit 3
.C:9375  A5 43       LDA $43
.C:9377  29 F7       AND #$F7
.C:9379  85 43       STA $43

; check port B bit 4
.C:937b  AD 01 DD    LDA $DD01
.C:937e  29 10       AND #$10
.C:9380  D0 44       BNE $93C6
; clear joy bit 4
.C:9382  A5 43       LDA $43
.C:9384  29 EF       AND #$EF
.C:9386  85 43       STA $43
.C:9388  60          RTS

; joystick 4

; get 4 lower bits from port B
; to joy bits 0..3 in reverse order
.C:9389  AD 01 DD    LDA $DD01
.C:938c  4A          LSR A
.C:938d  26 44       ROL $44
.C:938f  4A          LSR A
.C:9390  26 44       ROL $44
.C:9392  4A          LSR A
.C:9393  26 44       ROL $44
.C:9395  4A          LSR A
.C:9396  26 44       ROL $44

.C:9398  A9 3F       LDA #$3F
.C:939a  8D 02 DD    STA $DD02
.C:939d  A9 00       LDA #$00
.C:939f  8D 03 DD    STA $DD03

.C:93a2  AD 0E DC    LDA $DC0E
.C:93a5  29 F7       AND #$F7
.C:93a7  09 40       ORA #$40
.C:93a9  8D 0E DC    STA $DC0E

.C:93ac  AD 0E DD    LDA $DD0E
.C:93af  29 BF       AND #$BF
.C:93b1  8D 0E DD    STA $DD0E
.C:93b4  A9 00       LDA #$00
.C:93b6  8D 0C DC    STA $DC0C

; get fire from cia2 synchronous serial (SP2)
.C:93b9  AD 0C DD    LDA $DD0C
.C:93bc  C9 FF       CMP #$FF
.C:93be  F0 06       BEQ $93C6
; clear joy bit 4 (button)
.C:93c0  A5 44       LDA $44
.C:93c2  29 EF       AND #$EF
.C:93c4  85 44       STA $44
.C:93c6  60          RTS

;------------------------------------------------------------------------------

credits:
--------

reverse enginering, this document :            Groepaz/Hitmen (groepaz@gmx.net)