📄 joy.asm
字号:
GPProHelp 0200h,1ABh ; green
GPProHelp 0400h,1ADh ; l2
GPProHelp 0800h,1A9h ; blue
GPProHelp 1000h,1AFh ; r2
GPProHelp 2000h,1CBh ; start
GPProHelp 4000h,1CAh ; select
.error
ret
NEWSYM SideWinder209
mov al,[NumSWs209]
mov [_SWCount],al
mov dx,209h
call _readSideWinder
;bit 0=error 1=up 2=dn 3=rt 4=lt 5=A 6=B 7=C 8=X 9=Y 10=Z 11=L 12=R 13=St 14=M
;k....L=L, R=R, start=start, M=select, X=y, Y=x, B=a, A=b
;sidewinder=snes
.loop
mov eax,[_SW1]
xor ebx,ebx
cmp byte[WhichSW],2
jne .noSW2
mov eax,[_SW2]
mov ebx,08h
.noSW2
cmp byte[WhichSW],3
jne .noSW3
mov eax,[_SW3]
mov ebx,10h
.noSW3
cmp byte[WhichSW],4
jne .noSW4
mov eax,[_SW4]
mov ebx,18h
.noSW4
inc byte[WhichSW]
mov byte[pressed+ebx+154h],0
mov byte[pressed+ebx+155h],0
mov byte[pressed+ebx+156h],0
mov byte[pressed+ebx+157h],0
mov byte[pressed+ebx+108h],0
mov byte[pressed+ebx+109h],0
mov byte[pressed+ebx+10Ah],0
mov byte[pressed+ebx+10Bh],0
mov byte[pressed+ebx+10Ch],0
mov byte[pressed+ebx+10Dh],0
mov byte[pressed+ebx+10Eh],0
mov byte[pressed+ebx+10Fh],0
mov byte[pressed+ebx+148h],0
mov byte[pressed+ebx+149h],0
test ax,02h ; up
jz .noup
mov byte[pressed+ebx+154h],1
.noup
test ax,04h ; down
jz .nodown
mov byte[pressed+ebx+155h],1
.nodown
test ax,08h ; right
jz .noright
mov byte[pressed+ebx+157h],1
.noright
test ax,10h ; left
jz .noleft
mov byte[pressed+ebx+156h],1
.noleft
test ax,20h ; A
jz .noa
mov byte[pressed+ebx+108h],1
.noa
test ax,40h ; B
jz .nob
mov byte[pressed+ebx+109h],1
.nob
test ax,80h ; C
jz .noc
mov byte[pressed+ebx+10Ah],1
.noc
test ax,100h ; X
jz .nox
mov byte[pressed+ebx+10Bh],1
.nox
test ax,200h ; Y
jz .noy
mov byte[pressed+ebx+10Ch],1
.noy
test ax,400h ; Z
jz .noz
mov byte[pressed+ebx+10Dh],1
.noz
test ax,800h ; L
jz .nol
mov byte[pressed+ebx+10Eh],1
.nol
test ax,1000h ; R
jz .nor
mov byte[pressed+ebx+10Fh],1
.nor
test ax,2000h ; start
jz .nostart
mov byte[pressed+ebx+148h],1
.nostart
test ax,4000h ; M
jz .noselect
mov byte[pressed+ebx+149h],1
.noselect
mov al,[WhichSW]
cmp al,[NumSWs209]
jbe near .loop
ret ;return to calling procedure
; Parallel SNES pad reader routines by Karl Stenerud
; Original design by Benji York:
;
%macro PPortHelp 3
mov al, %1
out dx, al
mov al, 0F8h
out dx, al
inc dx
in al, dx
dec dx
and ax, %2
jnz %%nobutton
mov byte[pressed+%3], 1
%%nobutton
%endmacro
NEWSYM GetParallelPlayer1
mov dx, 0378h ; may want to make this configurable
mov byte[pressed+180h],0
mov byte[pressed+181h],0
mov byte[pressed+182h],0
mov byte[pressed+183h],0
mov byte[pressed+184h],0
mov byte[pressed+185h],0
mov byte[pressed+186h],0
mov byte[pressed+187h],0
mov byte[pressed+188h],0
mov byte[pressed+189h],0
mov byte[pressed+18Ah],0
mov byte[pressed+18Bh],0
PPortHelp 0FAh, 40h, 180h
PPortHelp 0F9h, 40h, 181h
PPortHelp 0F9h, 40h, 182h
PPortHelp 0F9h, 40h, 183h
PPortHelp 0F9h, 40h, 184h
PPortHelp 0F9h, 40h, 185h
PPortHelp 0F9h, 40h, 186h
PPortHelp 0F9h, 40h, 187h
PPortHelp 0F9h, 40h, 188h
PPortHelp 0F9h, 40h, 189h
PPortHelp 0F9h, 40h, 18Ah
PPortHelp 0F9h, 40h, 18Bh
ret
NEWSYM GetParallelPlayer2
mov dx, 0378h ; may want to make this configurable
mov byte[pressed+190h],0
mov byte[pressed+191h],0
mov byte[pressed+192h],0
mov byte[pressed+193h],0
mov byte[pressed+194h],0
mov byte[pressed+195h],0
mov byte[pressed+196h],0
mov byte[pressed+197h],0
mov byte[pressed+198h],0
mov byte[pressed+199h],0
mov byte[pressed+19Ah],0
mov byte[pressed+19Bh],0
PPortHelp 0FAh, 20h, 190h
PPortHelp 0F9h, 20h, 191h
PPortHelp 0F9h, 20h, 192h
PPortHelp 0F9h, 20h, 193h
PPortHelp 0F9h, 20h, 194h
PPortHelp 0F9h, 20h, 195h
PPortHelp 0F9h, 20h, 196h
PPortHelp 0F9h, 20h, 197h
PPortHelp 0F9h, 20h, 198h
PPortHelp 0F9h, 20h, 199h
PPortHelp 0F9h, 20h, 19Ah
PPortHelp 0F9h, 20h, 19Bh
ret
NEWSYM GetParallelPlayer3
mov dx, 0278h ; may want to make this configurable
mov byte[pressed+1A0h],0
mov byte[pressed+1A1h],0
mov byte[pressed+1A2h],0
mov byte[pressed+1A3h],0
mov byte[pressed+1A4h],0
mov byte[pressed+1A5h],0
mov byte[pressed+1A6h],0
mov byte[pressed+1A7h],0
mov byte[pressed+1A8h],0
mov byte[pressed+1A9h],0
mov byte[pressed+1AAh],0
mov byte[pressed+1ABh],0
PPortHelp 0FAh, 40h, 1A0h
PPortHelp 0F9h, 40h, 1A1h
PPortHelp 0F9h, 40h, 1A2h
PPortHelp 0F9h, 40h, 1A3h
PPortHelp 0F9h, 40h, 1A4h
PPortHelp 0F9h, 40h, 1A5h
PPortHelp 0F9h, 40h, 1A6h
PPortHelp 0F9h, 40h, 1A7h
PPortHelp 0F9h, 40h, 1A8h
PPortHelp 0F9h, 40h, 1A9h
PPortHelp 0F9h, 40h, 1AAh
PPortHelp 0F9h, 40h, 1ABh
ret
NEWSYM GetParallelPlayer4
mov dx, 0278h ; may want to make this configurable
mov byte[pressed+1B0h],0
mov byte[pressed+1B1h],0
mov byte[pressed+1B2h],0
mov byte[pressed+1B3h],0
mov byte[pressed+1B4h],0
mov byte[pressed+1B5h],0
mov byte[pressed+1B6h],0
mov byte[pressed+1B7h],0
mov byte[pressed+1B8h],0
mov byte[pressed+1B9h],0
mov byte[pressed+1BAh],0
mov byte[pressed+1BBh],0
PPortHelp 0FAh, 20h, 1B0h
PPortHelp 0F9h, 20h, 1B1h
PPortHelp 0F9h, 20h, 1B2h
PPortHelp 0F9h, 20h, 1B3h
PPortHelp 0F9h, 20h, 1B4h
PPortHelp 0F9h, 20h, 1B5h
PPortHelp 0F9h, 20h, 1B6h
PPortHelp 0F9h, 20h, 1B7h
PPortHelp 0F9h, 20h, 1B8h
PPortHelp 0F9h, 20h, 1B9h
PPortHelp 0F9h, 20h, 1BAh
PPortHelp 0F9h, 20h, 1BBh
ret
NEWSYM SetInputDevice209
; eax = pointer to devices, bl = device #, bh = player # (0-3)
; Sets keys according to input device selected
cmp bl,0
jne near .nozero
mov dword[eax],0
mov dword[eax+4],0
mov dword[eax+8],0
mov dword[eax+12],0
mov dword[eax+16],0
mov dword[eax+20],0
mov dword[eax+24],0
mov dword[eax+28],0
mov dword[eax+32],0
mov dword[eax+36],0
mov dword[eax+40],0
mov dword[eax+44],0
ret
.nozero
cmp bl,1
jne near .nokeyb
cmp bh,1
ja near .exit
cmp bh,1
je near .input2
mov dword[eax],54
mov dword[eax+4],28
mov dword[eax+8],72
mov dword[eax+12],80
mov dword[eax+16],75
mov dword[eax+20],77
mov dword[eax+24],82
mov dword[eax+28],71
mov dword[eax+32],73
mov dword[eax+36],83
mov dword[eax+40],79
mov dword[eax+44],81
ret
.input2
mov dword[eax],56
mov dword[eax+4],29
mov dword[eax+8],37
mov dword[eax+12],50
mov dword[eax+16],49
mov dword[eax+20],51
mov dword[eax+24],31
mov dword[eax+28],32
mov dword[eax+32],33
mov dword[eax+36],44
mov dword[eax+40],45
mov dword[eax+44],46
ret
.nokeyb
cmp bl,2
jne near .no2buttons
xor bl,bl
cmp byte[pl1contrl],2
jne .nopl2a
inc bl
.nopl2a
cmp byte[pl2contrl],2
jne .nopl2b
inc bl
.nopl2b
cmp byte[pl3contrl],2
jne .nopl2c
inc bl
.nopl2c
cmp byte[pl4contrl],2
jne .nopl2d
inc bl
.nopl2d
cmp byte[pl5contrl],2
jne .nopl2e
inc bl
.nopl2e
cmp bl,2
jae .2ndjoyst
mov dword[eax+40],103h
mov dword[eax+36],102h
mov dword[eax+8],14Ch
mov dword[eax+12],14Dh
mov dword[eax+16],14Eh
mov dword[eax+20],14Fh
ret
.2ndjoyst
mov dword[eax+40],105h
mov dword[eax+36],104h
mov dword[eax+8],168h
mov dword[eax+12],169h
mov dword[eax+16],16Ah
mov dword[eax+20],16Bh
ret
.no2buttons
cmp bl,3
je .4buttons
cmp bl,4
jne near .no4buttons
.4buttons
mov dword[eax+40],103h
mov dword[eax+36],102h
mov dword[eax+28],105h
mov dword[eax+24],104h
mov dword[eax+8],14Ch
mov dword[eax+12],14Dh
mov dword[eax+16],14Eh
mov dword[eax+20],14Fh
ret
.no4buttons
cmp bl,18
je .6buttons
cmp bl,5
jne near .no6buttons
.6buttons
mov dword[eax+40],103h
mov dword[eax+36],102h
mov dword[eax+28],105h
mov dword[eax+24],104h
mov dword[eax+32],106h
mov dword[eax+44],107h
mov dword[eax+8],14Ch
mov dword[eax+12],14Dh
mov dword[eax+16],14Eh
mov dword[eax+20],14Fh
cmp bl,5
je .skip8b
mov dword[eax+4],100h
mov dword[eax],101h
mov dword[eax+44],106h
mov dword[eax+32],107h
.skip8b
ret
.no6buttons
cmp bl,6
jne near .nosw1
mov dword[eax+0],149h
mov dword[eax+4],148h
mov dword[eax+8],154h
mov dword[eax+12],155h
mov dword[eax+16],156h
mov dword[eax+20],157h
mov dword[eax+24],10Ch
mov dword[eax+28],109h
mov dword[eax+32],10Eh
mov dword[eax+36],10Bh
mov dword[eax+40],108h
mov dword[eax+44],10Fh
ret
.nosw1
cmp bl,7
jne near .nosw2
mov dword[eax+0],149h+8
mov dword[eax+4],148h+8
mov dword[eax+8],154h+8
mov dword[eax+12],155h+8
mov dword[eax+16],156h+8
mov dword[eax+20],157h+8
mov dword[eax+24],10Ch+8
mov dword[eax+28],109h+8
mov dword[eax+32],10Eh+8
mov dword[eax+36],10Bh+8
mov dword[eax+40],108h+8
mov dword[eax+44],10Fh+8
ret
.nosw2
cmp bl,8
jne near .nosw3
mov dword[eax+0],149h+8*2
mov dword[eax+4],148h+8*2
mov dword[eax+8],154h+8*2
mov dword[eax+12],155h+8*2
mov dword[eax+16],156h+8*2
mov dword[eax+20],157h+8*2
mov dword[eax+24],10Ch+8*2
mov dword[eax+28],109h+8*2
mov dword[eax+32],10Eh+8*2
mov dword[eax+36],10Bh+8*2
mov dword[eax+40],108h+8*2
mov dword[eax+44],10Fh+8*2
ret
.nosw3
cmp bl,9
jne near .nosw4
mov dword[eax+0],149h+8*3
mov dword[eax+4],148h+8*3
mov dword[eax+8],154h+8*3
mov dword[eax+12],155h+8*3
mov dword[eax+16],156h+8*3
mov dword[eax+20],157h+8*3
mov dword[eax+24],10Ch+8*3
mov dword[eax+28],109h+8*3
mov dword[eax+32],10Eh+8*3
mov dword[eax+36],10Bh+8*3
mov dword[eax+40],108h+8*3
mov dword[eax+44],10Fh+8*3
ret
.nosw4
cmp bl,10
jne near .nogrip0
mov dword[eax+0],14Ah
mov dword[eax+4],14Bh
mov dword[eax+8],170h
mov dword[eax+12],171h
mov dword[eax+16],172h
mov dword[eax+20],173h
mov dword[eax+24],129h
mov dword[eax+28],12Bh
mov dword[eax+32],12Ch
mov dword[eax+36],128h
mov dword[eax+40],12Ah
mov dword[eax+44],12Eh
ret
.nogrip0
cmp bl,11
jne near .nogrip1
mov dword[eax+0],14Ah+8
mov dword[eax+4],14Bh+8
mov dword[eax+8],170h+4
mov dword[eax+12],171h+4
mov dword[eax+16],172h+4
mov dword[eax+20],173h+4
mov dword[eax+24],129h+8
mov dword[eax+28],12Bh+8
mov dword[eax+32],12Ch+8
mov dword[eax+36],128h+8
mov dword[eax+40],12Ah+8
mov dword[eax+44],12Eh+8
ret
.nogrip1
cmp bl,14
jne near .nopp1
mov dword[eax+40],180h
mov dword[eax+36],181h
mov dword[eax+0],182h
mov dword[eax+4],183h
mov dword[eax+8],184h
mov dword[eax+12],185h
mov dword[eax+16],186h
mov dword[eax+20],187h
mov dword[eax+28],188h
mov dword[eax+24],189h
mov dword[eax+32],18Ah
mov dword[eax+44],18Bh
ret
.nopp1
cmp bl,15
jne near .nopp2
mov dword[eax+40],190h
mov dword[eax+36],191h
mov dword[eax+0],192h
mov dword[eax+4],193h
mov dword[eax+8],194h
mov dword[eax+12],195h
mov dword[eax+16],196h
mov dword[eax+20],197h
mov dword[eax+28],198h
mov dword[eax+24],199h
mov dword[eax+32],19Ah
mov dword[eax+44],19Bh
ret
.nopp2
cmp bl,16
jne near .nopp3
mov dword[eax+40],1A0h
mov dword[eax+36],1A1h
mov dword[eax+0],1A2h
mov dword[eax+4],1A3h
mov dword[eax+8],1A4h
mov dword[eax+12],1A5h
mov dword[eax+16],1A6h
mov dword[eax+20],1A7h
mov dword[eax+28],1A8h
mov dword[eax+24],1A9h
mov dword[eax+32],1AAh
mov dword[eax+44],1ABh
ret
.nopp3
cmp bl,17
jne near .nopp4
mov dword[eax+40],1B0h
mov dword[eax+36],1B1h
mov dword[eax+0],1B2h
mov dword[eax+4],1B3h
mov dword[eax+8],1B4h
mov dword[eax+12],1B5h
mov dword[eax+16],1B6h
mov dword[eax+20],1B7h
mov dword[eax+28],1B8h
mov dword[eax+24],1B9h
mov dword[eax+32],1BAh
mov dword[eax+44],1BBh
ret
.nopp4
.exit
ret
NEWSYM JoyAsmEnd
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -