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

📄 table.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either
;version 2 of the License, or (at your option) any later
;version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU General Public License for more details.
;
;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

%include "macros.mac"

EXTSYM eramaccessbankr16,eramaccessbankr8,eramaccessbankw16
EXTSYM eramaccessbankw8,memaccessbankr16,memaccessbankr8
EXTSYM memaccessbankw16,memaccessbankw8
EXTSYM mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13
EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3
EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8
EXTSYM mosdraw9,ngpalcon2b,ngpalcon4b
EXTSYM mosjmptab16b,mosdraw1016b,mosdraw1116b,mosdraw1216b,mosdraw1316b
EXTSYM mosdraw1416b,mosdraw1516b,mosdraw1616b,mosdraw216b,mosdraw316b
EXTSYM mosdraw416b,mosdraw516b,mosdraw616b,mosdraw716b,mosdraw816b
EXTSYM mosdraw916b
EXTSYM mosjmptab16bt,mosdraw1016bt,mosdraw1116bt,mosdraw1216bt,mosdraw1316bt
EXTSYM mosdraw1416bt,mosdraw1516bt,mosdraw1616bt,mosdraw216bt,mosdraw316bt
EXTSYM mosdraw416bt,mosdraw516bt,mosdraw616bt,mosdraw716bt,mosdraw816bt
EXTSYM mosdraw916bt
EXTSYM mosjmptab16btms,mosdraw1016btms,mosdraw1116btms,mosdraw1216btms,mosdraw1316btms
EXTSYM mosdraw1416btms,mosdraw1516btms,mosdraw1616btms,mosdraw216btms,mosdraw316btms
EXTSYM mosdraw416btms,mosdraw516btms,mosdraw616btms,mosdraw716btms,mosdraw816btms
EXTSYM mosdraw916btms
EXTSYM mosjmptab16bntms,mosdraw1016bntms,mosdraw1116bntms,mosdraw1216bntms,mosdraw1316bntms
EXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntms
EXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntms
EXTSYM mosdraw916bntms
EXTSYM regaccessbankr16,regaccessbankw16,regaccessbankw8
EXTSYM sramaccessbankr16,sramaccessbankr8,sramaccessbankw16
EXTSYM sramaccessbankw8,tableA,tableB,tableC,tableD,tableE
EXTSYM tableF,tableG,tableH,wramaccessbankr16
EXTSYM wramaccessbankr8,wramaccessbankw16,wramaccessbankw8
EXTSYM regaccessbankr8SA1,regaccessbankr16SA1,regaccessbankw8SA1
EXTSYM regaccessbankw16SA1,SA1RAMaccessbankr8,SA1RAMaccessbankr16
EXTSYM SA1RAMaccessbankw8,SA1RAMaccessbankw16
EXTSYM SA1RAMaccessbankr8b,SA1RAMaccessbankr16b
EXTSYM SA1RAMaccessbankw8b,SA1RAMaccessbankw16b
EXTSYM DPageR8,DPageW8,DPageR16,DPageW16
EXTSYM SDD1Enable
EXTSYM JoyAOrig,JoyANow,JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow

NEWSYM TableAsmStart
%include "cpu/65816d.inc"
%include "cpu/address.inc"
%include "cpu/addrni.inc"
%include "cpu/e65816.inc"
%include "cpu/regs.mac"
%include "cpu/regsw.mac"
%include "cpu/regs.inc"     ; start problem here
%include "cpu/regsw.inc"







; global variables
;tableA  times 256 dd 0             ; Table addresses (M:0,X:0,D:0)
;tableB  times 256 dd 0             ; Table addresses (M:1,X:0,D:0)
;tableC  times 256 dd 0             ; Table addresses (M:0,X:1,D:0)
;tableD  times 256 dd 0             ; Table addresses (M:1,X:1,D:0)
;tableE  times 256 dd 0             ; Table addresses (M:0,X:0,D:1)
;tableF  times 256 dd 0             ; Table addresses (M:1,X:0,D:1)
;tableG  times 256 dd 0             ; Table addresses (M:0,X:1,D:1)
;tableH  times 256 dd 0             ; Table addresses (M:1,X:1,D:1)
NEWSYM addrmdef, times 27 dd 0             ; Address modes
;tablead times 256 dd 0             ; Table address location according to P
;memtabler8 times 256 dd 0          ; Memory Bank Locations for reading 8-bit
;memtablew8 times 256 dd 0          ; Memory Bank Locations for writing 8-bit
;memtabler16 times 256 dd 0          ; Memory Bank Locations for reading 16-bit
;memtablew16 times 256 dd 0          ; Memory Bank Locations for reading 16-bit

;*******************************************************
; Generate OpCode Table
;*******************************************************

NEWSYM inittable
    ; set up mosaic
    mov dword[mosjmptab],mosdraw2
    mov dword[mosjmptab+4],mosdraw3
    mov dword[mosjmptab+8],mosdraw4
    mov dword[mosjmptab+12],mosdraw5
    mov dword[mosjmptab+16],mosdraw6
    mov dword[mosjmptab+20],mosdraw7
    mov dword[mosjmptab+24],mosdraw8
    mov dword[mosjmptab+28],mosdraw9
    mov dword[mosjmptab+32],mosdraw10
    mov dword[mosjmptab+36],mosdraw11
    mov dword[mosjmptab+40],mosdraw12
    mov dword[mosjmptab+44],mosdraw13
    mov dword[mosjmptab+48],mosdraw14
    mov dword[mosjmptab+52],mosdraw15
    mov dword[mosjmptab+56],mosdraw16
    mov dword[mosjmptab16b],mosdraw216b
    mov dword[mosjmptab16b+4],mosdraw316b
    mov dword[mosjmptab16b+8],mosdraw416b
    mov dword[mosjmptab16b+12],mosdraw516b
    mov dword[mosjmptab16b+16],mosdraw616b
    mov dword[mosjmptab16b+20],mosdraw716b
    mov dword[mosjmptab16b+24],mosdraw816b
    mov dword[mosjmptab16b+28],mosdraw916b
    mov dword[mosjmptab16b+32],mosdraw1016b
    mov dword[mosjmptab16b+36],mosdraw1116b
    mov dword[mosjmptab16b+40],mosdraw1216b
    mov dword[mosjmptab16b+44],mosdraw1316b
    mov dword[mosjmptab16b+48],mosdraw1416b
    mov dword[mosjmptab16b+52],mosdraw1516b
    mov dword[mosjmptab16b+56],mosdraw1616b
    mov dword[mosjmptab16bt],mosdraw216bt
    mov dword[mosjmptab16bt+4],mosdraw316bt
    mov dword[mosjmptab16bt+8],mosdraw416bt
    mov dword[mosjmptab16bt+12],mosdraw516bt
    mov dword[mosjmptab16bt+16],mosdraw616bt
    mov dword[mosjmptab16bt+20],mosdraw716bt
    mov dword[mosjmptab16bt+24],mosdraw816bt
    mov dword[mosjmptab16bt+28],mosdraw916bt
    mov dword[mosjmptab16bt+32],mosdraw1016bt
    mov dword[mosjmptab16bt+36],mosdraw1116bt
    mov dword[mosjmptab16bt+40],mosdraw1216bt
    mov dword[mosjmptab16bt+44],mosdraw1316bt
    mov dword[mosjmptab16bt+48],mosdraw1416bt
    mov dword[mosjmptab16bt+52],mosdraw1516bt
    mov dword[mosjmptab16bt+56],mosdraw1616bt
    mov dword[mosjmptab16btms],mosdraw216btms
    mov dword[mosjmptab16btms+4],mosdraw316btms
    mov dword[mosjmptab16btms+8],mosdraw416btms
    mov dword[mosjmptab16btms+12],mosdraw516btms
    mov dword[mosjmptab16btms+16],mosdraw616btms
    mov dword[mosjmptab16btms+20],mosdraw716btms
    mov dword[mosjmptab16btms+24],mosdraw816btms
    mov dword[mosjmptab16btms+28],mosdraw916btms
    mov dword[mosjmptab16btms+32],mosdraw1016btms
    mov dword[mosjmptab16btms+36],mosdraw1116btms
    mov dword[mosjmptab16btms+40],mosdraw1216btms
    mov dword[mosjmptab16btms+44],mosdraw1316btms
    mov dword[mosjmptab16btms+48],mosdraw1416btms
    mov dword[mosjmptab16btms+52],mosdraw1516btms
    mov dword[mosjmptab16btms+56],mosdraw1616btms
    mov dword[mosjmptab16bntms],mosdraw216bntms
    mov dword[mosjmptab16bntms+4],mosdraw316bntms
    mov dword[mosjmptab16bntms+8],mosdraw416bntms
    mov dword[mosjmptab16bntms+12],mosdraw516bntms
    mov dword[mosjmptab16bntms+16],mosdraw616bntms
    mov dword[mosjmptab16bntms+20],mosdraw716bntms
    mov dword[mosjmptab16bntms+24],mosdraw816bntms
    mov dword[mosjmptab16bntms+28],mosdraw916bntms
    mov dword[mosjmptab16bntms+32],mosdraw1016bntms
    mov dword[mosjmptab16bntms+36],mosdraw1116bntms
    mov dword[mosjmptab16bntms+40],mosdraw1216bntms
    mov dword[mosjmptab16bntms+44],mosdraw1316bntms
    mov dword[mosjmptab16bntms+48],mosdraw1416bntms
    mov dword[mosjmptab16bntms+52],mosdraw1516bntms
    mov dword[mosjmptab16bntms+56],mosdraw1616bntms
    ; set ngpalcon4b
    mov ecx,20h
    xor eax,eax
.loopng
    mov bl,al
    shr bl,2
    shl bl,4
    mov dl,bl
    mov dh,bl
    shl edx,16
    mov dl,bl
    mov dh,bl
    mov [ngpalcon4b+eax*4],edx
    inc eax
    dec ecx
    jnz .loopng
    ; set ngpalcon2b
    mov ecx,20h
    xor eax,eax
.loopngb
    mov bl,al
    shr bl,2
    shl bl,2
    mov dl,bl
    mov dh,bl
    shl edx,16
    mov dl,bl
    mov dh,bl
    mov [ngpalcon2b+eax*4],edx
    inc eax
    dec ecx
    jnz .loopngb
    ; set tablead  (NVMXDIZC) (  MXD   )
    push es
    xor ecx,ecx
    xor al,al
    mov cx,256
    mov edi,tablead
.loopa
    test al,08h ; D flag
    jnz .decon
    test al,10h ; X flag
    jnz .xon
    test al,20h ; M flag
    jnz .mon
    mov esi,tableA
    jmp .done
.mon
    mov esi,tableB
    jmp .done

.xon
    test al,20h ; M flag
    jnz .mon2
    mov esi,tableC
    jmp .done
.mon2
    mov esi,tableD
    jmp .done

.decon
    test al,10h ; X flag
    jnz .xon3
    test al,20h ; M flag
    jnz .mon3
    mov esi,tableE
    jmp .done
.mon3
    mov esi,tableF
    jmp .done

.xon3
    test al,20h
    jnz .mon4
    mov esi,tableG
    jmp .done
.mon4
    mov esi,tableH
.done
    inc al
    push eax
    mov eax,esi
    stosd
    pop eax
    loop .loopa

    ; Set CPU addresses
    ; First, set all addresses to invalid
    mov eax,eopINVALID
    mov edi,tableA
    mov ecx,256
    rep stosd
    mov edi,tableB
    mov ecx,256
    rep stosd
    mov edi,tableC
    mov ecx,256
    rep stosd
    mov edi,tableD
    mov ecx,256
    rep stosd
    mov edi,tableE
    mov ecx,256
    rep stosd
    mov edi,tableF
    mov ecx,256
    rep stosd
    mov edi,tableG
    mov ecx,256
    rep stosd
    mov edi,tableH
    mov ecx,256
    rep stosd
    mov edi,tableA
    call settables
    mov edi,tableB
    call settables
    mov edi,tableC
    call settables
    mov edi,tableD
    call settables
    mov edi,tableE
    call settables
    mov edi,tableF
    call settables
    mov edi,tableG
    call settables
    mov edi,tableH
    call settables

    ; set proper functions
    mov edi,tableA              ; Table addresses (M:0,X:0,D:0)
    call settablem16
    mov edi,tableA
    call settablex16

    mov edi,tableB              ; Table addresses (M:1,X:0,D:0)
    call settablex16

    mov edi,tableC              ; Table addresses (M:0,X:1,D:0)
    call settablem16

    mov edi,tableE              ; Table addresses (M:0,X:0,D:1)
    call settablem16
    mov edi,tableE
    call settableDm16
    mov edi,tableE
    call settablex16

    mov edi,tableF              ; Table addresses (M:1,X:0,D:1)
    call settablex16
    mov edi,tableF
    call settableDm8

    mov edi,tableG              ; Table addresses (M:0,X:1,D:1)
    call settablem16
    mov edi,tableG
    call settableDm16

    mov edi,tableH              ; Table addresses (M:1,X:1,D:1)
    call settableDm8
    pop es
    ret

NEWSYM SetAddressingModes
    ; set 8-bit read memory tables
    mov edi,memtabler8
    ; banks 0-3Fh
    mov eax,regaccessbankr8
    mov ecx,$40
    rep stosd
    ; banks 40-6Fh
    mov eax,memaccessbankr8
    mov ecx,$30
    rep stosd
    ; bank 70-77h
    mov eax,sramaccessbankr8
    mov ecx,8
    rep stosd
    ; bank 78-7D
    mov eax,memaccessbankr8
    mov ecx,6
    rep stosd
    ; bank 7E
    mov eax,wramaccessbankr8
    stosd
    ; bank 7F
    mov eax,eramaccessbankr8
    stosd
    ; banks 80-BF
    mov eax,regaccessbankr8
    mov ecx,$40
    rep stosd
    ; banks C0-FFh
    mov eax,memaccessbankr8
    mov ecx,$40
    rep stosd

    ; set 8-bit write memory tables
    mov edi,memtablew8
    ; banks 0-3Fh
    mov eax,regaccessbankw8
    mov ecx,$40
    rep stosd
    ; banks 40-6Fh
    mov eax,memaccessbankw8
    mov ecx,$30
    rep stosd
    ; bank 70-77h
    mov eax,sramaccessbankw8
    mov ecx,8
    rep stosd
    ; bank 78-7D
    mov eax,memaccessbankw8
    mov ecx,6
    rep stosd
    ; bank 7E
    mov eax,wramaccessbankw8
    stosd
    ; bank 7F
    mov eax,eramaccessbankw8
    stosd
    ; banks 80-BF
    mov eax,regaccessbankw8
    mov ecx,$40
    rep stosd
    ; banks C0-FFh
    mov eax,memaccessbankw8
    mov ecx,$40

⌨️ 快捷键说明

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