⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 joy.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 3 页
字号:
   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 + -