--- np2/i286x/memory.x86 2003/10/19 14:56:15 1.2 +++ np2/i286x/memory.x86 2004/02/18 02:03:37 1.12 @@ -6,20 +6,16 @@ section .bss - extern _mem - extern _i286reg + global _mem + extern _i286core extern _grcg - extern _extmem extern _gdcs extern _tramupdate extern _vramupdate extern _cgwindow -; extern ___font - extern _itf extern _vramop - extern _extmemmng_ptr - extern _extmemmng_size +_mem resb 0x200000 MAINMEMORY equ _mem @@ -27,6 +23,8 @@ EXTMEMORY equ 0 VIDEOMEMORY equ _mem USERSMEMORY_R equ 0a8000h USERSMEMORY_W equ 0a0000h +_extmemmng_ptr equ _i286core + i286core_t.ext +_extmemmng_size equ _i286core + i286core_t.extsize %if 1 _font equ _mem + FONT_ADRS @@ -78,17 +76,16 @@ extern @tracevramwrite_w@8 %endmacro %endif - section .text ; ----------------------------------------------------------------- write byte %if USE_EGCASM - extern _egca_read - extern _egca_read_w - extern _egca_write - extern _egca_write_w + extern egc_read + extern egc_read_w + extern egc_write + extern egc_write_w %else extern @egc_read@4 extern @egc_read_w@4 @@ -99,7 +96,7 @@ section .text ; normal memory align 16 @i286_wt: mov ebx, ecx - and ebx, [_extmem + extmem_t.adrsmask] + and ebx, [_i286core + i286core_t.adrsmask] mov [MAINMEMORY + ebx], dl pop ebx ret @@ -107,7 +104,7 @@ section .text ; tram write align 16 @tram_wt: mov ebx, [_vramop + vramop_t.tramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov ebx, ecx cmp ecx, 000a2000h jnc short wtram_a @@ -123,6 +120,8 @@ wtram_a: cmp ecx, 000a3fe0h jc short wtram_m cmp ecx, 000a4000h jnc wcgwindow_s + test ecx, 2 + je short wtram_m cmp byte [_gdcs + gdcs_t.msw_accessable], 0 je short wtram_e wtram_m: shr ebx, 1 @@ -156,7 +155,7 @@ wcgwindow_e: pop ebx or byte [_vramupdate + ebx], 1 or byte [_gdcs + gdcs_t.grphdisp], 1 mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -168,7 +167,7 @@ wcgwindow_e: pop ebx or byte [_vramupdate + ebx], 2 or byte [_gdcs + gdcs_t.grphdisp], 2 mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -189,7 +188,7 @@ wcgwindow_e: pop ebx or byte [_gdcs + gdcs_t.grphdisp], 1 grcg_rmw: mov ebx, [_vramop + vramop_t.grcgwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov ebx, dword [_grcg + grcg_t.mode] mov bl, dl not bl @@ -238,7 +237,7 @@ grcgrmw_end: pop ecx or byte [_gdcs + gdcs_t.grphdisp], 1 grcg_tdw: mov ebx, [_vramop + vramop_t.grcgwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov bh, [_grcg + grcg_t.modereg] shr bh, 1 jc short grcgtdw_r @@ -263,9 +262,11 @@ grcgtdw_end: pop ecx ; EGC bridge align 16 @egc_wt: VRAMTRACE + mov ebx, [_vramop + vramop_t.grcgwait] + sub [_i286core + i286core_t.remainclock], ebx pop ebx %if USE_EGCASM - jmp _egca_write ; ver0.26 + jmp egc_write %else pushad call @egc_write@8 @@ -280,12 +281,16 @@ grcgtdw_end: pop ecx and ecx, 3fffh shr ebx, 12 and ebx, byte (3*4) - add ecx, [_extmem + extmem_t.pageptr + ebx] - mov [EXTMEMORY + ecx], dl ; ver0.28 + add ecx, [_i286core + i286core_t.ems + ebx] + mov [EXTMEMORY + ecx], dl pop ecx pop ebx ret +@i286_wb: mov [MAINMEMORY + 1c8000h - 0e8000h + ecx], dl + pop ebx + ret + ; non writable memory align 16 @i286_wn: pop ebx @@ -297,7 +302,7 @@ grcgtdw_end: pop ecx ; normal memory align 16 @i286_rd: mov ebx, ecx - and ebx, [_extmem + extmem_t.adrsmask] + and ebx, [_i286core + i286core_t.adrsmask] mov al, [MAINMEMORY + ebx] pop ebx ret @@ -305,7 +310,7 @@ grcgtdw_end: pop ecx ; font cg-window align 16 @tram_rd: mov ebx, [_vramop + vramop_t.tramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx cmp ecx, 0a4000h jnc rcgwindow_s rcgwindow_n: mov al, [MAINMEMORY + ecx] @@ -328,7 +333,7 @@ rcgwindow_s: cmp ecx, 0a5000h align 16 @vram_r0: mov al, [VIDEOMEMORY + ecx] mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -336,7 +341,7 @@ rcgwindow_s: cmp ecx, 0a5000h align 16 @vram_r1: mov al, [VIDEOMEMORY + VRAM_STEP + ecx] mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -351,7 +356,7 @@ rcgwindow_s: cmp ecx, 0a5000h and ecx, 7fffh grcg_tcr: mov ebx, [_vramop + vramop_t.grcgwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov al, 0 mov bh, [_grcg + grcg_t.modereg] shr bh, 1 @@ -380,9 +385,11 @@ grcgtcr_end: not al ; EGC bridge align 16 -@egc_rd: pop ebx +@egc_rd: mov ebx, [_vramop + vramop_t.grcgwait] + sub [_i286core + i286core_t.remainclock], ebx + pop ebx %if USE_EGCASM - jmp _egca_read ; ver0.26 + jmp egc_read %else pushad call @egc_read@4 @@ -399,24 +406,20 @@ grcgtcr_end: not al and ecx, 3fffh shr ebx, 12 and ebx, byte (3*4) - add ecx, [_extmem + extmem_t.pageptr + ebx] - mov al, [EXTMEMORY + ecx] ; ver0.28 + add ecx, [_i286core + i286core_t.ems + ebx] + mov al, [EXTMEMORY + ecx] pop ecx pop ebx ret ; BIOS or ITF align 16 -@i286_itf: cmp byte [_itf], 0 - jne readmem_itr +@i286_rb: pop ebx + cmp byte [_i286core + i286core_t.itfbank], 0 + jne readmem_itf mov al, [MAINMEMORY + ecx] - pop ebx ret - align 16 -readmem_itr: mov ebx, ecx - and ebx, 00007fffh - mov al, [MAINMEMORY + ITF_ADRS + ebx] - pop ebx +readmem_itf: mov al, [MAINMEMORY + VRAM_STEP + ecx] ret ; ----------------------------------------------------------------- write word @@ -424,7 +427,7 @@ readmem_itr: mov ebx, ecx ; normal memory align 16 @i286w_wt: mov ebx, ecx - and ebx, [_extmem + extmem_t.adrsmask] + and ebx, [_i286core + i286core_t.adrsmask] mov [MAINMEMORY + ebx], dx pop ebx ret @@ -432,7 +435,7 @@ readmem_itr: mov ebx, ecx ; tram write align 16 @tramw_wt: mov ebx, [_vramop + vramop_t.tramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov ebx, ecx cmp ecx, 000a1fffh jnc short wtramw_a @@ -455,6 +458,8 @@ wtramw_a: je short wword_a1fffh jc short wtramw_m cmp ecx, 000a3fffh jnc wcgwindoww_s + test ecx, 2 + je short wtramw_m cmp byte [_gdcs + gdcs_t.msw_accessable], 0 je short wtramw_e wtramw_m: and ebx, 1fffh @@ -507,7 +512,7 @@ wcgwinw_odd: add ebx, dword [_cgwindow or word [_vramupdate + ebx], 0101h or byte [_gdcs + gdcs_t.grphdisp], 1 mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -519,7 +524,7 @@ wcgwinw_odd: add ebx, dword [_cgwindow or word [_vramupdate + ebx], 0202h or byte [_gdcs + gdcs_t.grphdisp], 2 mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -540,7 +545,7 @@ wcgwinw_odd: add ebx, dword [_cgwindow or byte [_gdcs + gdcs_t.grphdisp], 1 grcgw_rmw: mov ebx, [_vramop + vramop_t.grcgwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx push eax mov ebx, dword [_grcg + grcg_t.mode] mov bx, dx @@ -591,7 +596,7 @@ grcgwrmw_end: pop eax or byte [_gdcs + gdcs_t.grphdisp], 1 grcgw_tdw: mov ebx, [_vramop + vramop_t.grcgwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov ebx, [_grcg + grcg_t.mode] test ebx, 010000h jne short grcgwtdw_r @@ -616,28 +621,16 @@ grcgwtdw_end: pop ecx ; EGC bridge align 16 @egcw_wt: VRAMTRACE_W + mov ebx, [_vramop + vramop_t.grcgwait] + sub [_i286core + i286core_t.remainclock], ebx pop ebx %if USE_EGCASM - jmp _egca_write_w ; ver0.26 + jmp egc_write_w %else - test ecx, 1 - jne short egcw_wtodd pushad call @egc_write_w@8 popad ret -egcw_wtodd: - pushad - push ecx - push edx - call @egc_write@8 - pop edx - pop ecx - inc ecx - shr edx, 8 - call @egc_write@8 - popad - ret %endif ; EMM write @@ -647,18 +640,22 @@ egcw_wtodd: and ecx, 3fffh shr ebx, 12 and ebx, byte (3*4) - add ecx, [_extmem + extmem_t.pageptr + ebx] - mov [EXTMEMORY + ecx], dx ; ver0.28 + add ecx, [_i286core + i286core_t.ems + ebx] + mov [EXTMEMORY + ecx], dx pop ecx pop ebx ret +@i286w_wb: mov [MAINMEMORY + 1c8000h - 0e8000h + ecx], dx + pop ebx + ret + ; ------------------------------------------------------------------ read word ; normal memory align 16 @i286w_rd: mov ebx, ecx - and ebx, [_extmem + extmem_t.adrsmask] + and ebx, [_i286core + i286core_t.adrsmask] mov ax, [MAINMEMORY + ebx] pop ebx ret @@ -666,7 +663,7 @@ egcw_wtodd: ; font cg-window align 16 @tramw_rd: mov ebx, [_vramop + vramop_t.tramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx cmp ecx, 0a3fffh jnc rcgwwindow_s mov ax, [MAINMEMORY + ecx] @@ -720,7 +717,7 @@ rcgwwindow_a4fff: mov ebx, dword [_cgwi align 16 @vramw_r0: mov ax, [VIDEOMEMORY + ecx] mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -728,7 +725,7 @@ rcgwwindow_a4fff: mov ebx, dword [_cgwi align 16 @vramw_r1: mov ax, [VIDEOMEMORY + VRAM_STEP + ecx] mov ebx, [_vramop + vramop_t.vramwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx pop ebx ret @@ -743,7 +740,7 @@ rcgwwindow_a4fff: mov ebx, dword [_cgwi and ecx, 7fffh grcgw_tcr: mov ebx, [_vramop + vramop_t.grcgwait] - sub [_i286reg + i286reg_t.remainclock], ebx + sub [_i286core + i286core_t.remainclock], ebx mov ax, 0 mov ebx, [_grcg + grcg_t.mode] test ebx, 010000h @@ -772,11 +769,11 @@ grcgwtcr_end: not ax ; EGC bridge align 16 -@egcw_rd: pop ebx - test ecx, 1 - jne short egcw_rdodd +@egcw_rd: mov ebx, [_vramop + vramop_t.grcgwait] + sub [_i286core + i286core_t.remainclock], ebx + pop ebx %if USE_EGCASM - jmp _egca_read_w ; ver0.26 + jmp egc_read_w %else pushad call @egc_read_w@4 @@ -785,25 +782,6 @@ grcgwtcr_end: not ax ret %endif -egcw_rdodd: -%if USE_EGCASM ; ver0.26 - inc ecx - call _egca_read - mov ah, al - dec ecx - jmp _egca_read -%else - pushad - push ecx - call @egc_read@4 - pop ecx - mov [esp+28], al - inc ecx - call @egc_read@4 - mov [esp+29], al - popad -%endif - ret ; EMM read align 16 @@ -812,32 +790,46 @@ egcw_rdodd: and ecx, 3fffh shr ebx, 12 and ebx, byte (3*4) - add ecx, [_extmem + extmem_t.pageptr + ebx] - mov ax, [EXTMEMORY + ecx] ; ver0.28 + add ecx, [_i286core + i286core_t.ems + ebx] + mov ax, [EXTMEMORY + ecx] pop ecx pop ebx ret ; BIOS or ITF align 16 -@i286w_itf: cmp byte [_itf], 0 - jne readwmem_itr +@i286w_rb: pop ebx + cmp byte [_i286core + i286core_t.itfbank], 0 + jne readwmem_itf mov ax, [MAINMEMORY + ecx] - pop ebx ret - align 16 -readwmem_itr: mov ebx, ecx - and ebx, 00007fffh - mov ax, [MAINMEMORY + ITF_ADRS + ebx] - pop ebx +readwmem_itf: mov ax, [MAINMEMORY + VRAM_STEP + ecx] ret section .data + ; ---------------------------------------------------------------------- table - global _memory_write global _memory_read + global _memory_write + +_memory_read dd @i286_rd, @i286_rd ; 00 + dd @i286_rd, @i286_rd ; 10 + dd @i286_rd, @i286_rd ; 20 + dd @i286_rd, @i286_rd ; 30 + dd @i286_rd, @i286_rd ; 40 + dd @i286_rd, @i286_rd ; 50 + dd @i286_rd, @i286_rd ; 60 + dd @i286_rd, @i286_rd ; 70 + dd @i286_rd, @i286_rd ; 80 + dd @i286_rd, @i286_rd ; 90 + dd @tram_rd, @vram_r0 ; a0 + dd @vram_r0, @vram_r0 ; b0 + dd @emmc_rd, @emmc_rd ; c0 + dd @i286_rd, @i286_rd ; d0 + dd @vram_r0, @i286_rd ; e0 + dd @i286_rd, @i286_rb ; f0 _memory_write dd @i286_wt, @i286_wt ; 00 dd @i286_wt, @i286_wt ; 10 @@ -856,22 +848,22 @@ _memory_write dd @i286_wt, @i286_wt ; dd @vram_w0, @i286_wn ; e0 dd @i286_wn, @i286_wn ; f0 -_memory_read dd @i286_rd, @i286_rd ; 00 - dd @i286_rd, @i286_rd ; 10 - dd @i286_rd, @i286_rd ; 20 - dd @i286_rd, @i286_rd ; 30 - dd @i286_rd, @i286_rd ; 40 - dd @i286_rd, @i286_rd ; 50 - dd @i286_rd, @i286_rd ; 60 - dd @i286_rd, @i286_rd ; 70 - dd @i286_rd, @i286_rd ; 80 - dd @i286_rd, @i286_rd ; 90 - dd @tram_rd, @vram_r0 ; a0 - dd @vram_r0, @vram_r0 ; b0 - dd @emmc_rd, @emmc_rd ; c0 - dd @i286_rd, @i286_rd ; d0 - dd @vram_r0, @i286_rd ; e0 - dd @i286_rd, @i286_itf ; f0 +_memword_read dd @i286w_rd, @i286w_rd ; 00 + dd @i286w_rd, @i286w_rd ; 10 + dd @i286w_rd, @i286w_rd ; 20 + dd @i286w_rd, @i286w_rd ; 30 + dd @i286w_rd, @i286w_rd ; 40 + dd @i286w_rd, @i286w_rd ; 50 + dd @i286w_rd, @i286w_rd ; 60 + dd @i286w_rd, @i286w_rd ; 70 + dd @i286w_rd, @i286w_rd ; 80 + dd @i286w_rd, @i286w_rd ; 90 + dd @tramw_rd, @vramw_r0 ; a0 + dd @vramw_r0, @vramw_r0 ; b0 + dd @emmcw_rd, @emmcw_rd ; c0 + dd @i286w_rd, @i286w_rd ; d0 + dd @vramw_r0, @i286w_rd ; e0 + dd @i286w_rd, @i286w_rb ; f0 _memword_write dd @i286w_wt, @i286w_wt ; 00 dd @i286w_wt, @i286w_wt ; 10 @@ -890,33 +882,20 @@ _memword_write dd @i286w_wt, @i286w_wt dd @vramw_w0, @i286_wn ; e0 dd @i286_wn, @i286_wn ; f0 -_memword_read dd @i286w_rd, @i286w_rd ; 00 - dd @i286w_rd, @i286w_rd ; 10 - dd @i286w_rd, @i286w_rd ; 20 - dd @i286w_rd, @i286w_rd ; 30 - dd @i286w_rd, @i286w_rd ; 40 - dd @i286w_rd, @i286w_rd ; 50 - dd @i286w_rd, @i286w_rd ; 60 - dd @i286w_rd, @i286w_rd ; 70 - dd @i286w_rd, @i286w_rd ; 80 - dd @i286w_rd, @i286w_rd ; 90 - dd @tramw_rd, @vramw_r0 ; a0 - dd @vramw_r0, @vramw_r0 ; b0 - dd @emmcw_rd, @emmcw_rd ; c0 - dd @i286w_rd, @i286w_rd ; d0 - dd @vramw_r0, @i286w_rd ; e0 - dd @i286w_rd, @i286w_itf ; f0 +section .rdata + +memmap dd @i286_rd, @i286_rb ; NEC + dd @i286_wn, @i286_wn + dd @i286w_rd, @i286w_rb + dd @i286_wn, @i286_wn + + dd @i286_rb, @i286_rb ; EPSON + dd @i286_wt, @i286_wb + dd @i286w_rb, @i286w_rb + dd @i286w_wt, @i286w_wb -_vram_write dd @vram_w0, @vram_w1 ; 00 - dd @vram_w0, @vram_w1 - dd @vram_w0, @vram_w1 ; 40 - dd @vram_w0, @vram_w1 - dd @grcg_tdw0, @grcg_tdw1 ; 80 tdw/tcr - dd @egc_wt, @egc_wt - dd @grcg_rmw0, @grcg_rmw1 ; c0 rmw - dd @egc_wt, @egc_wt -_vram_read dd @vram_r0, @vram_r1 ; 00 +vram_read dd @vram_r0, @vram_r1 ; 00 dd @vram_r0, @vram_r1 dd @vram_r0, @vram_r1 ; 40 dd @vram_r0, @vram_r1 @@ -925,16 +904,16 @@ _vram_read dd @vram_r0, @vram_r1 ; 00 dd @vram_r0, @vram_r1 ; c0 rmw dd @egc_rd, @egc_rd -_vramw_write dd @vramw_w0, @vramw_w1 ; 00 - dd @vramw_w0, @vramw_w1 - dd @vramw_w0, @vramw_w1 ; 40 - dd @vramw_w0, @vramw_w1 - dd @grcgw_tdw0, @grcgw_tdw1 ; 80 tdw/tcr - dd @egcw_wt, @egcw_wt - dd @grcgw_rmw0, @grcgw_rmw1 ; c0 rmw - dd @egcw_wt, @egcw_wt +vram_write dd @vram_w0, @vram_w1 ; 00 + dd @vram_w0, @vram_w1 + dd @vram_w0, @vram_w1 ; 40 + dd @vram_w0, @vram_w1 + dd @grcg_tdw0, @grcg_tdw1 ; 80 tdw/tcr + dd @egc_wt, @egc_wt + dd @grcg_rmw0, @grcg_rmw1 ; c0 rmw + dd @egc_wt, @egc_wt -_vramw_read dd @vramw_r0, @vramw_r1 ; 00 +vramw_read dd @vramw_r0, @vramw_r1 ; 00 dd @vramw_r0, @vramw_r1 dd @vramw_r0, @vramw_r1 ; 40 dd @vramw_r0, @vramw_r1 @@ -943,9 +922,20 @@ _vramw_read dd @vramw_r0, @vramw_r1 ; dd @vramw_r0, @vramw_r1 ; c0 rmw dd @egcw_rd, @egcw_rd +vramw_write dd @vramw_w0, @vramw_w1 ; 00 + dd @vramw_w0, @vramw_w1 + dd @vramw_w0, @vramw_w1 ; 40 + dd @vramw_w0, @vramw_w1 + dd @grcgw_tdw0, @grcgw_tdw1 ; 80 tdw/tcr + dd @egcw_wt, @egcw_wt + dd @grcgw_rmw0, @grcgw_rmw1 ; c0 rmw + dd @egcw_wt, @egcw_wt + + section .text + global @i286_memorymap@4 global @i286_vram_dispatch@4 global @i286_memorywrite@8 @@ -971,7 +961,7 @@ section .text align 16 writeextmem_w: %if USE_HIMEM - cmp ecx, 10ffefh ; HIMEM + cmp ecx, (USE_HIMEM - 1) jae near writehimem_w %endif push ebx @@ -1009,7 +999,7 @@ writemain_b: mov [MAINMEMORY + ecx], d align 16 writeextmem_b: %if USE_HIMEM - cmp ecx, 10fff0h ; HIMEM + cmp ecx, USE_HIMEM jae near writehimem %endif push ebx @@ -1026,7 +1016,7 @@ writeextmem_b: align 16 readmemory_w: %if USE_HIMEM - cmp ecx, 10ffefh ; HIMEM + cmp ecx, (USE_HIMEM - 1) jae near readhimem_w %endif push ebx @@ -1061,7 +1051,7 @@ readmain_b: mov al, [MAINMEMORY + ecx align 16 readmemory_b: %if USE_HIMEM - cmp ecx, 10fff0h ; HIMEM + cmp ecx, USE_HIMEM jae near readhimem %endif push ebx @@ -1084,30 +1074,65 @@ readmemory_b: mov ax, 0ffffh ret + + align 16 +@i286_memorymap@4: and ecx, 1 + shl ecx, 5 + lea ecx, [memmap + ecx] + mov edx, _memory_read + mov eax, [ecx] + mov [edx + 74h], eax + mov [edx + 78h], eax + mov eax, [ecx+4] + mov [edx + 7ch], eax + mov eax, [ecx+8] + mov edx, _memory_write + mov [edx + 68h], eax + mov [edx + 6ch], eax + mov eax, [ecx+12] + mov [edx + 74h], eax + mov [edx + 78h], eax + mov [edx + 7ch], eax + mov eax, [ecx+16] + mov edx, _memword_read + mov [edx + 74h], eax + mov [edx + 78h], eax + mov eax, [ecx+20] + mov [edx + 7ch], eax + mov eax, [ecx+24] + mov edx, _memword_write + mov [edx + 68h], eax + mov [edx + 6ch], eax + mov eax, [ecx+28] + mov [edx + 74h], eax + mov [edx + 78h], eax + mov [edx + 7ch], eax + ret + align 16 @i286_vram_dispatch@4: mov edx, ecx and edx, byte 15 - mov eax, [_vram_write + edx*4] - mov [_memory_write + 54h], eax ; VRAM_B - mov [_memory_write + 58h], eax ; VRAM_R - mov [_memory_write + 5ch], eax ; VRAM_G - mov [_memory_write + 70h], eax ; VRAM_E - mov eax, [_vram_read + edx*4] + mov eax, [vram_read + edx*4] mov [_memory_read + 54h], eax ; VRAM_B mov [_memory_read + 58h], eax ; VRAM_R mov [_memory_read + 5ch], eax ; VRAM_G mov [_memory_read + 70h], eax ; VRAM_E - mov eax, [_vramw_write + edx*4] - mov [_memword_write + 54h], eax ; VRAM_B - mov [_memword_write + 58h], eax ; VRAM_R - mov [_memword_write + 5ch], eax ; VRAM_G - mov [_memword_write + 70h], eax ; VRAM_E - mov eax, [_vramw_read + edx*4] + mov eax, [vram_write + edx*4] + mov [_memory_write + 54h], eax ; VRAM_B + mov [_memory_write + 58h], eax ; VRAM_R + mov [_memory_write + 5ch], eax ; VRAM_G + mov [_memory_write + 70h], eax ; VRAM_E + mov eax, [vramw_read + edx*4] mov [_memword_read + 54h], eax ; VRAM_B mov [_memword_read + 58h], eax ; VRAM_R mov [_memword_read + 5ch], eax ; VRAM_G mov [_memword_read + 70h], eax ; VRAM_E + mov eax, [vramw_write + edx*4] + mov [_memword_write + 54h], eax ; VRAM_B + mov [_memword_write + 58h], eax ; VRAM_R + mov [_memword_write + 5ch], eax ; VRAM_G + mov [_memword_write + 70h], eax ; VRAM_E test ecx, 10h jne short degtaldispatch_e mov eax, @i286_nonram_w@8