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

📄 sa1regs.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    popad    ret.cumulativesum    popad    retsa12300r:    mov al,[SA1Message+1]    test byte[SA1IRQExec],1    jz .notexecuted    or al,80h.notexecuted    test byte[SA1IRQExec],2    jz .notexecutedi    or al,20h.notexecutedi    mov bl,[SA1IRQData+1]    and bl,50h    or al,bl    retsa12301r:    mov al,[SA1Message]    test byte[SA1IRQExec+1],1    jz .notexecuted    or al,80h.notexecuted    retsa12306r:;    call UpdateArithStuff    mov al,[SA1ARR1]    retsa12307r:;    call UpdateArithStuff    mov al,[SA1ARR1+1]    retsa12308r:;    call UpdateArithStuff    mov al,[SA1ARR1+2]    retsa12309r:;    call UpdateArithStuff    mov al,[SA1ARR1+3]    retsa1230Ar:;    call UpdateArithStuff    mov al,[SA1ARR2]    retsa1230Br:    mov al,[SA1Overflow]    retNEWSYM IRamRead    mov al,[IRAM+ecx-3000h]    retNEWSYM IRamWrite    mov [IRAM+ecx-3000h],al    retNEWSYM IRamWrite2    mov [IRAM+ecx-3000h],al    xor dh,dh    retNEWSYM sa1223Fw    mov [SA1Overflow+1],al    ret; Variable Length DataNEWSYM sa12258w    mov [VarLenBarrel+2],al    mov bl,al    and bl,0Fh    cmp bl,0    jne .not0    mov bl,16.not0    mov [VarLenBarrel+3],bl    test al,80h    jz .notchange    mov [VarLenBarrel],bl    mov [VarLenBarrel+1],bl.notchange    retNEWSYM sa12259w    mov [VarLenAddr],al    mov [VarLenAddrB],al    mov byte[VarLenBarrel],0    mov byte[VarLenBarrel+1],0    retNEWSYM sa1225Aw    mov [VarLenAddr+1],al    mov [VarLenAddrB+1],al    mov byte[VarLenBarrel],0    mov byte[VarLenBarrel+1],0    retNEWSYM sa1225Bw    mov [VarLenAddr+2],al    mov [VarLenAddrB+2],al    mov byte[VarLenBarrel],0    mov byte[VarLenBarrel+1],0    ret; Variable Length ReadNEWSYM sa1230Cr    push ecx    xor ebx,ebx    xor ecx,ecx    mov bl,[VarLenAddr+2]    mov cx,[VarLenAddr]    test ecx,8000h    jz .loweraddr    add ecx,[snesmmap+ebx*4]    jmp .upperaddr.loweraddr    add ecx,[snesmap2+ebx*4].upperaddr    mov ebx,[ecx]    mov cl,[VarLenBarrel+1]    shr ebx,cl    mov al,bl    pop ecx    test byte[VarLenBarrel+2],80h    jnz .autoinc    ret.autoinc    mov bl,[VarLenBarrel+3]    add [VarLenBarrel],bl    mov bl,[VarLenBarrel]    cmp bl,16    jbe .notover    sub byte[VarLenBarrel],16    add dword[VarLenAddr],2    mov byte[VarLenAddr+3],0.notover    retNEWSYM sa1230Dr    push ecx    xor ebx,ebx    xor ecx,ecx    mov bl,[VarLenAddrB+2]    mov cx,[VarLenAddrB]    test ecx,8000h    jz .loweraddr    add ecx,[snesmmap+ebx*4]    jmp .upperaddr.loweraddr    add ecx,[snesmap2+ebx*4].upperaddr    mov ebx,[ecx]    mov cl,[VarLenBarrel+1]    shr ebx,cl    mov al,bh    pop ecx    test byte[VarLenBarrel+2],80h    jnz .autoinc    ret.autoinc    mov bl,[VarLenBarrel+3]    add [VarLenBarrel+1],bl    mov bl,[VarLenBarrel+1]    cmp bl,16    jbe .notover    sub byte[VarLenBarrel+1],16    add dword[VarLenAddrB],2    mov byte[VarLenAddrB+3],0.notover    retNEWSYM sa1230Er    mov al,10h    ret; Approximate H locNEWSYM sa12302r    test byte[SA1TimerSet],80h    jnz .timeron    mov al,[CurrentExecSA1]    shl al,2    add al,dh    ret.timeron    mov al,[SA1TimerCount]    retNEWSYM sa12303r    test byte[SA1TimerSet],80h    jnz .timeron    mov al,[CurrentExecSA1]    shr al,3    ret.timeron    mov al,[SA1TimerCount+1]    and al,1    retNEWSYM sa12304r    test byte[SA1TimerSet],80h    jnz .timeron    mov al,[curypos]    ret.timeron    mov bx,[SA1TimerCount+1]    shr bx,1    mov al,bl    retNEWSYM sa12305r    test byte[SA1TimerSet],80h    jnz .timeron    mov al,[curypos+1]    ret.timeron    mov bx,[SA1TimerCount+2]    shr bx,1    mov al,bl    and al,1    retNEWSYM sa12210w ; Timer Settings   mov [SA1TimerSet],al   retNEWSYM sa12211w ; Timer Clear   mov dword[SA1TimerVal],0   retNEWSYM sa12212w   mov [SA1TimerCount],al   retNEWSYM sa12213w   mov [SA1TimerCount+1],al   retNEWSYM sa12214w   mov [SA1TimerCount+2],al   retNEWSYM sa12215w   mov [SA1TimerCount+3],al   retNEWSYM sa12230w    mov [SA1DMAInfo],al    retNEWSYM sa12231w    mov [SA1DMAChar],al    ; if b7=1, then end of chdma process    retSA1QuickF sa12232w, SA1DMASourceSA1QuickF sa12233w, SA1DMASource+1SA1QuickF sa12234w, SA1DMASource+2SA1QuickF sa12235w, SA1DMADestNEWSYM sa12236w    mov [SA1DMADest+1],al    test byte[SA1DMAInfo],10h    jnz near sa1chconv    test byte[SA1DMAInfo],4    jnz .noiram    jmp sa1dmairam.noiram    retNEWSYM sa12237w    mov [SA1DMADest+2],al    test byte[SA1DMAInfo],10h    jnz .nobwram    test byte[SA1DMAInfo],4    jz .nobwram    jmp sa1dmabwram.nobwram    retNEWSYM sa12238w    mov [SA1DMACount],al    retNEWSYM sa12239w    mov [SA1DMACount+1],al    retSECTION .bssNEWSYM sa1dmaptr, resd 1NEWSYM sa1dmaptrs, resd 1SECTION .textNEWSYM sa1dmairam    mov ebx,[SA1DMADest]    and ebx,7FFh    add ebx,IRAM    mov [sa1dmaptr],ebx    jmp executesa1dmaNEWSYM sa1dmabwram    mov ebx,[SA1DMADest]    and ebx,3FFFFh    add ebx,[SA1RAMArea]    mov [sa1dmaptr],ebxexecutesa1dma:    test byte[SA1DMAInfo],1    jz .nobwram    mov ebx,[SA1DMASource]    and ebx,3FFFFh    add ebx,[SA1RAMArea]    mov [sa1dmaptrs],ebx    jmp .doneram.nobwram    test byte[SA1DMAInfo],2    jz .noiram    mov ebx,[SA1DMASource]    and ebx,7FFh    add ebx,IRAM    mov [sa1dmaptrs],ebx    jmp .doneram.noiram    xor ebx,ebx    mov bl,[SA1DMASource+2]    mov ebx,[snesmmap+ebx*4]    push ecx    xor ecx,ecx    mov cx,[SA1DMASource]    add ebx,ecx    mov [sa1dmaptrs],ebx    pop ecx.doneram    push edx    push eax    push ecx    mov ecx,[SA1DMACount]    or ecx,ecx    jz .notransfer    mov ebx,[sa1dmaptrs]    mov edx,[sa1dmaptr].loop    mov al,[ebx]    mov [edx],al    inc ebx    inc edx    dec ecx    jnz .loop.notransfer    pop ecx    pop eax    pop edx    retSECTION .bsstempblah resb 1SECTION .text%macro setbit2b 2    test al,%1    jz %%nosb    or word[ebx],%2%%nosb%endmacro%macro setbit2b2 2    test al,%1    jz %%nosb    or word[ebx+16],%2%%nosb%endmacro; Character Conversion DMAsa1chconv:;    or byte[SA1DoIRQ],4    or byte[SA1DoIRQ],8;    mov byte[debstop3],1    mov ebx,[SA1DMADest]%ifndef NO_DEBUGGER    mov byte[debstop4],1%endif;    and ebx,7FFh    and ebx,3FFFFh    add ebx,[SA1RAMArea]    mov [sa1dmaptr],ebx    mov ebx,[SA1DMASource]    and ebx,3FFFFh    add ebx,[SA1RAMArea]    mov [sa1dmaptrs],ebx    ; 4 colors = 32 bytes, 16 colors = 64 bytes, 256 colors = 128 bytes    ; SA1DMAChar,bit 2-4 = # of 8x8 tiles/horizontal row (0=1,1=2,2=3,..,5=32)    ; SA1DMAChar,bit 0-1 = Color Mode (0=8b,1=4b,2=2b,3=?)    test byte[SA1DMAChar],1    jnz .4bit    test byte[SA1DMAChar],2    jnz near .2bit    mov ebx,[sa1dmaptr]    push ecx    pop ecx    ret.4bit    pushad    mov edx,[sa1dmaptrs]    mov ebx,[romdata]    add ebx,4096*1024+1024*1024    mov edi,16.loop34b    push ebx    push edx    mov ecx,32.loop4b    mov esi,8    push ebx    push edx.loop24b    mov word[ebx],0    mov al,[edx+3]    setbit2b 10h,0001h    setbit2b 20h,0100h    setbit2b2 40h,0001h    setbit2b2 80h,0100h    setbit2b 01h,0002h    setbit2b 02h,0200h    setbit2b2 04h,0002h    setbit2b2 08h,0200h    mov al,[edx+2]    setbit2b 10h,0004h    setbit2b 20h,0400h    setbit2b2 40h,0004h    setbit2b2 80h,0400h    setbit2b 01h,0008h    setbit2b 02h,0800h    setbit2b2 04h,0008h    setbit2b2 08h,0800h    mov al,[edx+1]    setbit2b 10h,0010h    setbit2b 20h,1000h    setbit2b2 40h,0010h    setbit2b2 80h,1000h    setbit2b 01h,0020h    setbit2b 02h,2000h    setbit2b2 04h,0020h    setbit2b2 08h,2000h    mov al,[edx]    setbit2b 10h,0040h    setbit2b 20h,4000h    setbit2b2 40h,0040h    setbit2b2 80h,4000h    setbit2b 01h,0080h    setbit2b 02h,8000h    setbit2b2 04h,0080h    setbit2b2 08h,8000h    add ebx,2    add edx,128    dec esi    jnz near .loop24b    pop edx    pop ebx    add edx,4    add ebx,32    dec ecx    jnz near .loop4b    pop edx    pop ebx    add edx,128*8    add ebx,128*8    dec edi    jnz near .loop34b    mov ecx,10*128*8    mov edx,[sa1dmaptrs]    mov ebx,[romdata]    add ebx,4096*1024+1024*1024.next4b    mov al,[ebx]    mov [edx],al    inc ebx    inc edx    dec ecx    jnz .next4b    popad    ret.2bit    pushad    mov edx,[sa1dmaptrs]    mov ebx,[romdata]    add ebx,4096*1024+1024*1024    mov edi,16.loop3    push ebx    push edx    mov ecx,32.loop    mov esi,8    push ebx    push edx.loop2    mov word[ebx],0    mov al,[edx+1]    setbit2b 40h,0001h    setbit2b 80h,0100h    setbit2b 10h,0002h    setbit2b 20h,0200h    setbit2b 04h,0004h    setbit2b 08h,0400h    setbit2b 01h,0008h    setbit2b 02h,0800h    mov al,[edx]    setbit2b 40h,0010h    setbit2b 80h,1000h    setbit2b 10h,0020h    setbit2b 20h,2000h    setbit2b 04h,0040h    setbit2b 08h,4000h    setbit2b 01h,0080h    setbit2b 02h,8000h    add ebx,2    add edx,64    dec esi    jnz near .loop2    pop edx    pop ebx    add edx,2    add ebx,16    dec ecx    jnz near .loop    pop edx    pop ebx    add edx,64*8    add ebx,64*8    dec edi    jnz near .loop3    mov ecx,10*64*8    mov edx,[sa1dmaptrs]    mov ebx,[romdata]    add ebx,4096*1024+1024*1024.next    mov al,[ebx]    mov [edx],al    inc ebx    inc edx    dec ecx    jnz .next    popad    retSECTION .bss.numrows resd 1SECTION .textNEWSYM initSA1regs    setreg 2300h*4,sa12300r    setreg 2301h*4,sa12301r    setreg 2302h*4,sa12302r    setreg 2303h*4,sa12303r    setreg 2304h*4,sa12304r    setreg 2305h*4,sa12305r    setreg 2306h*4,sa12306r    setreg 2307h*4,sa12307r    setreg 2308h*4,sa12308r    setreg 2309h*4,sa12309r    setreg 230Ah*4,sa1230Ar    setreg 230Bh*4,sa1230Br    setreg 230Ch*4,sa1230Cr    setreg 230Dh*4,sa1230Dr    setreg 230Eh*4,sa1230Er    ; Set IRam, memory address 3000-37FF    mov edi,3000h*4    add edi,[regptr]    mov eax,IRamRead    mov ecx,800h.loopr    mov [edi],eax    add edi,4    dec ecx    jnz .loopr    retNEWSYM initSA1regsw    setregw 2200h*4,sa12200w    setregw 2201h*4,sa12201w    setregw 2202h*4,sa12202w    setregw 2203h*4,sa12203w    setregw 2204h*4,sa12204w    setregw 2205h*4,sa12205w    setregw 2206h*4,sa12206w    setregw 2207h*4,sa12207w    setregw 2208h*4,sa12208w    setregw 2209h*4,sa12209w    setregw 220Ah*4,sa1220Aw    setregw 220Bh*4,sa1220Bw    setregw 220Ch*4,sa1220Cw    setregw 220Dh*4,sa1220Dw    setregw 220Eh*4,sa1220Ew    setregw 220Fh*4,sa1220Fw    setregw 2210h*4,sa12210w    setregw 2211h*4,sa12211w    setregw 2212h*4,sa12212w    setregw 2213h*4,sa12213w    setregw 2214h*4,sa12214w    setregw 2215h*4,sa12215w    setregw 2220h*4,sa12220w    setregw 2221h*4,sa12221w    setregw 2222h*4,sa12222w    setregw 2223h*4,sa12223w    setregw 2224h*4,sa12224w    setregw 2225h*4,sa12225w    ; Missing 2226-222A    ; Missing 2240-224F (Bitmap register file)    setregw 2230h*4,sa12230w    setregw 2231h*4,sa12231w    setregw 2232h*4,sa12232w    setregw 2233h*4,sa12233w    setregw 2234h*4,sa12234w    setregw 2235h*4,sa12235w    setregw 2236h*4,sa12236w    setregw 2237h*4,sa12237w    setregw 2238h*4,sa12238w    setregw 2239h*4,sa12239w    setregw 223Fh*4,sa1223Fw    setregw 2250h*4,sa12250w    setregw 2251h*4,sa12251w    setregw 2252h*4,sa12252w    setregw 2253h*4,sa12253w    setregw 2254h*4,sa12254w    setregw 2259h*4,sa12259w    setregw 225Ah*4,sa1225Aw    setregw 225Bh*4,sa1225Bw    mov edi,3000h*4    add edi,[regptw]    mov eax,IRamWrite    mov ecx,800h.loopw    mov [edi],eax    add edi,4    dec ecx    jnz .loopw    setregw 3000h*4,IRamWrite2    retNEWSYM SDD1Reset    setregw 4801h*4,sdd14801w    setregw 4802h*4,dbstop    setregw 4803h*4,dbstop    setregw 4804h*4,sdd14804w    setregw 4805h*4,sdd14805w    setregw 4806h*4,sdd14806w    setregw 4807h*4,sdd14807w    setregw 4808h*4,dbstop    setregw 4809h*4,dbstop    setregw 480Ah*4,dbstop    setregw 480Bh*4,dbstop    setregw 480Ch*4,dbstop    setregw 480Dh*4,dbstop    setregw 480Eh*4,dbstop    setregw 480Fh*4,dbstop    retNEWSYM initSDD1regs    setreg 4804h*4,sdd14804    setreg 4805h*4,sdd14805    setreg 4806h*4,sdd14806    setreg 4807h*4,sdd14807    retdbstop:;    mov byte[debstop3],1    retNEWSYM sdd14801w    cmp al,0    jne .notzero    ret.notzero    mov byte[AddrNoIncr],0    ; set banks C0h-FFh to decompressing routine    push eax    push ebx    mov eax,memtabler8+0C0h*4    mov ebx,40h.loop    mov dword[eax],memaccessbankr8sdd1    add eax,4    dec ebx    jnz .loop    mov dword[Sdd1Mode],1    pop ebx    pop eax    ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -