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

📄 fxemu2c.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
   jz .nodraw6_256
   or bh,20h
.nodraw6_256
   test byte[eax+48],bl
   jz .nodraw7_256
   or bh,40h
.nodraw7_256
   test byte[eax+49],bl
   jz .nodraw8_256
   or bh,80h
.nodraw8_256
   mov bl,bh
   and ebx,0FFh
   inc ebp
;   UpdateR14
   CLRFLAGS
   mov [edi],ebx            ; Write Destination
   mov [flagnz],ebx
   FXReturn

NEWSYM FxOpd4D      ; SWAP   swap upper and lower byte of a register    ; V
   mov eax,[esi]            ; Read Source
   FETCHPIPE
   ror ax,8   
   inc ebp                ; Increase program counter
   mov [SfxSignZero],eax
   mov [edi],eax            ; Write Destination
   CLRFLAGS
   FXReturn

NEWSYM FxOpd4E      ; COLOR  copy source register to color register     ; V
   FETCHPIPE
   mov eax,[esi]            ; Read Source
   ; if bit 3 of SfxPOR is set, then don't modify the upper 4 bits
   test byte[SfxPOR],04h
   jz .nohighnibble
   mov bl,al
   shr bl,4
   and al,0F0h
   or al,bl
.nohighnibble
   test byte[SfxPOR],08h
   jnz .preserveupper
   cmp [SfxCOLR],al
   je .nocolchange
   mov [SfxCOLR],al
   and eax,0FFh
   mov ebx,[fxbit01+eax*4]
   mov [fxbit01pcal],ebx
   mov ebx,[fxbit23+eax*4]
   mov [fxbit23pcal],ebx
   mov ebx,[fxbit45+eax*4]
   mov [fxbit45pcal],ebx
   mov ebx,[fxbit67+eax*4]
   mov [fxbit67pcal],ebx
.nocolchange
   CLRFLAGS
   inc ebp                ; Increase program counter
   FXReturn
.preserveupper
   mov bl,[SfxCOLR]
   and al,0Fh
   and bl,0F0h
   or al,bl
   cmp [SfxCOLR],al
   je .nocolchange
   mov [SfxCOLR],al
   and eax,0FFh
   mov ebx,[fxbit01+eax*4]
   mov [fxbit01pcal],ebx
   mov ebx,[fxbit23+eax*4]
   mov [fxbit23pcal],ebx
   mov ebx,[fxbit45+eax*4]
   mov [fxbit45pcal],ebx
   mov ebx,[fxbit67+eax*4]
   mov [fxbit67pcal],ebx
   CLRFLAGS
   inc ebp                ; Increase program counter
   FXReturn

NEWSYM FxOpd4EA1    ; CMODE  set plot option register ; V
   FETCHPIPE
   mov eax,[esi]            ; Read Source
   inc ebp                ; Increase program counter
   mov dword [SfxPOR],eax

   test byte[SfxPOR],10h
   jnz .objmode
   mov al,[SfxSCMR]
   and al,00100100b     ; 4 + 32
   cmp al,4
   je .lines160
   cmp al,32
   je .lines192
   cmp al,36
   je .objmode
   mov eax,[sfx128lineloc]
   jmp .donelines
.lines160
   mov eax,[sfx160lineloc]
   jmp .donelines
.lines192
   mov eax,[sfx192lineloc]
   jmp .donelines
.objmode
   mov eax,[sfxobjlineloc]
.donelines
   mov [sfxclineloc],eax


   push ebx
   mov al,[SfxSCMR]
   and eax,00000011b
   mov bl,[SfxPOR]
   and bl,0Fh
   shl bl,2
   or al,bl
   mov ebx,[PLOTJmpb+eax*4]
   mov eax,[PLOTJmpa+eax*4]

   mov dword [FxTable+4Ch*4],eax
   mov dword [FxTableb+4Ch*4],eax
   mov dword [FxTablec+4Ch*4],eax
   mov dword [FxTabled+4Ch*4],ebx
   pop ebx

   CLRFLAGS
   FXReturn

NEWSYM FxOpd4F      ; NOT    perform exclusive exor with 1 on all bits  ; V
   mov eax,[esi]            ; Read Source
   FETCHPIPE
   xor eax,0FFFFh
   inc ebp                ; Increase program counter
   mov [SfxSignZero],eax
   mov [edi],eax            ; Write Destination
   CLRFLAGS
   FXReturn

NEWSYM FxOpd50      ; ADD RN add, register + register
   ADDRNc 0
NEWSYM FxOpd51      ; ADD RN add, register + register
   ADDRNc 1
NEWSYM FxOpd52      ; ADD RN add, register + register
   ADDRNc 2
NEWSYM FxOpd53      ; ADD RN add, register + register
   ADDRNc 3
NEWSYM FxOpd54      ; ADD RN add, register + register
   ADDRNc 4
NEWSYM FxOpd55      ; ADD RN add, register + register
   ADDRNc 5
NEWSYM FxOpd56      ; ADD RN add, register + register
   ADDRNc 6
NEWSYM FxOpd57      ; ADD RN add, register + register
   ADDRNc 7
NEWSYM FxOpd58      ; ADD RN add, register + register
   ADDRNc 8
NEWSYM FxOpd59      ; ADD RN add, register + register
   ADDRNc 9
NEWSYM FxOpd5A      ; ADD RN add, register + register
   ADDRNc 10
NEWSYM FxOpd5B      ; ADD RN add, register + register
   ADDRNc 11
NEWSYM FxOpd5C      ; ADD RN add, register + register
   ADDRNc 12
NEWSYM FxOpd5D      ; ADD RN add, register + register
   ADDRNc 13
NEWSYM FxOpd5E      ; ADD RN add, register + register
   ADDRNc 14
NEWSYM FxOpd5F      ; ADD RN add, register + register
   FETCHPIPE
   mov eax, [esi]    ; Read Source
   mov ebx,ebp
   sub ebx,[SfxCPB]
   add ax,bx
   seto byte[SfxOverflow]
   setc byte[SfxCarry]
   mov [SfxSignZero],eax
   inc ebp                ; Increase program counter
   mov [edi],eax      ; Write Destination
   CLRFLAGS
   FXReturn

NEWSYM FxOpd50A1    ; ADC RN add with carry, register + register
   ADCRNc 0
NEWSYM FxOpd51A1    ; ADC RN add with carry, register + register
   ADCRNc 1
NEWSYM FxOpd52A1    ; ADC RN add with carry, register + register
   ADCRNc 2
NEWSYM FxOpd53A1    ; ADC RN add with carry, register + register
   ADCRNc 3
NEWSYM FxOpd54A1    ; ADC RN add with carry, register + register
   ADCRNc 4
NEWSYM FxOpd55A1    ; ADC RN add with carry, register + register
   ADCRNc 5
NEWSYM FxOpd56A1    ; ADC RN add with carry, register + register
   ADCRNc 6
NEWSYM FxOpd57A1    ; ADC RN add with carry, register + register
   ADCRNc 7
NEWSYM FxOpd58A1    ; ADC RN add with carry, register + register
   ADCRNc 8
NEWSYM FxOpd59A1    ; ADC RN add with carry, register + register
   ADCRNc 9
NEWSYM FxOpd5AA1    ; ADC RN add with carry, register + register
   ADCRNc 10
NEWSYM FxOpd5BA1    ; ADC RN add with carry, register + register
   ADCRNc 11
NEWSYM FxOpd5CA1    ; ADC RN add with carry, register + register
   ADCRNc 12
NEWSYM FxOpd5DA1    ; ADC RN add with carry, register + register
   ADCRNc 13
NEWSYM FxOpd5EA1    ; ADC RN add with carry, register + register
   ADCRNc 14
NEWSYM FxOpd5FA1    ; ADC RN add with carry, register + register
   FETCHPIPE
   mov eax, [esi]    ; Read Source
   mov ebx,ebp
   sub ebx,[SfxCPB]
   shr byte[SfxCarry],1
   adc ax,bx
   seto byte[SfxOverflow]
   setc byte[SfxCarry]
   mov [SfxSignZero],eax
   inc ebp                ; Increase program counter
   mov [edi],eax      ; Write Destination
   CLRFLAGS
   FXReturn

; Weird Opdode (FxOpd50A2, add 0, wow!)
NEWSYM FxOpd50A2    ; ADI RN add, register + immediate
   ADIRNc 0
NEWSYM FxOpd51A2    ; ADI RN add, register + immediate
   ADIRNc 1
NEWSYM FxOpd52A2    ; ADI RN add, register + immediate
   ADIRNc 2
NEWSYM FxOpd53A2    ; ADI RN add, register + immediate
   ADIRNc 3
NEWSYM FxOpd54A2    ; ADI RN add, register + immediate
   ADIRNc 4
NEWSYM FxOpd55A2    ; ADI RN add, register + immediate
   ADIRNc 5
NEWSYM FxOpd56A2    ; ADI RN add, register + immediate
   ADIRNc 6
NEWSYM FxOpd57A2    ; ADI RN add, register + immediate
   ADIRNc 7
NEWSYM FxOpd58A2    ; ADI RN add, register + immediate
   ADIRNc 8
NEWSYM FxOpd59A2    ; ADI RN add, register + immediate
   ADIRNc 9
NEWSYM FxOpd5AA2    ; ADI RN add, register + immediate
   ADIRNc 10
NEWSYM FxOpd5BA2    ; ADI RN add, register + immediate
   ADIRNc 11
NEWSYM FxOpd5CA2    ; ADI RN add, register + immediate
   ADIRNc 12
NEWSYM FxOpd5DA2    ; ADI RN add, register + immediate
   ADIRNc 13
NEWSYM FxOpd5EA2    ; ADI RN add, register + immediate
   ADIRNc 14
NEWSYM FxOpd5FA2    ; ADI RN add, register + immediate
   ADIRNc 15

; Another very useful Opdode
NEWSYM FxOpd50A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 0
NEWSYM FxOpd51A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 1
NEWSYM FxOpd52A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 2
NEWSYM FxOpd53A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 3
NEWSYM FxOpd54A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 4
NEWSYM FxOpd55A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 5
NEWSYM FxOpd56A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 6
NEWSYM FxOpd57A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 7
NEWSYM FxOpd58A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 8
NEWSYM FxOpd59A3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 9
NEWSYM FxOpd5AA3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 10
NEWSYM FxOpd5BA3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 11
NEWSYM FxOpd5CA3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 12
NEWSYM FxOpd5DA3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 13
NEWSYM FxOpd5EA3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 14
NEWSYM FxOpd5FA3    ; ADCIRN add with carry, register + immediate
   ADCIRNc 15

NEWSYM FxOpd60      ; SUBRN  subtract, register - register
   SUBRNc 0
NEWSYM FxOpd61      ; SUBRN  subtract, register - register
   SUBRNc 1
NEWSYM FxOpd62      ; SUBRN  subtract, register - register
   SUBRNc 2
NEWSYM FxOpd63      ; SUBRN  subtract, register - register
   SUBRNc 3
NEWSYM FxOpd64      ; SUBRN  subtract, register - register
   SUBRNc 4
NEWSYM FxOpd65      ; SUBRN  subtract, register - register
   SUBRNc 5
NEWSYM FxOpd66      ; SUBRN  subtract, register - register
   SUBRNc 6
NEWSYM FxOpd67      ; SUBRN  subtract, register - register
   SUBRNc 7
NEWSYM FxOpd68      ; SUBRN  subtract, register - register
   SUBRNc 8
NEWSYM FxOpd69      ; SUBRN  subtract, register - register
   SUBRNc 9
NEWSYM FxOpd6A      ; SUBRN  subtract, register - register
   SUBRNc 10
NEWSYM FxOpd6B      ; SUBRN  subtract, register - register
   SUBRNc 11
NEWSYM FxOpd6C      ; SUBRN  subtract, register - register
   SUBRNc 12
NEWSYM FxOpd6D      ; SUBRN  subtract, register - register
   SUBRNc 13
NEWSYM FxOpd6E      ; SUBRN  subtract, register - register
   SUBRNc 14
NEWSYM FxOpd6F      ; SUBRN  subtract, register - register
   FETCHPIPE
   mov eax,[esi]    ; Read Source
   mov ebx,ebp
   sub ebx,[SfxCPB]
   sub ax,bx
   seto byte[SfxOverflow]
   setc byte[SfxCarry]
   xor byte[SfxCarry],1
   inc ebp                   ; Increase program counter
   mov [edi],eax                        ; Write Destination
   mov [SfxSignZero],eax
   CLRFLAGS
   FXReturn

NEWSYM FxOpd60A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 0
NEWSYM FxOpd61A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 1
NEWSYM FxOpd62A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 2
NEWSYM FxOpd63A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 3
NEWSYM FxOpd64A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 4
NEWSYM FxOpd65A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 5
NEWSYM FxOpd66A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 6
NEWSYM FxOpd67A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 7
NEWSYM FxOpd68A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 8
NEWSYM FxOpd69A1    ; SBCRN  subtract with carry, register - register
   SBCRNc 9
NEWSYM FxOpd6AA1    ; SBCRN  subtract with carry, register - register
   SBCRNc 10
NEWSYM FxOpd6BA1    ; SBCRN  subtract with carry, register - register
   SBCRNc 11
NEWSYM FxOpd6CA1    ; SBCRN  subtract with carry, register - register
   SBCRNc 12
NEWSYM FxOpd6DA1    ; SBCRN  subtract with carry, register - register
   SBCRNc 13
NEWSYM FxOpd6EA1    ; SBCRN  subtract with carry, register - register
   SBCRNc 14
NEWSYM FxOpd6FA1    ; SBCRN  subtract with carry, register - register
   mov eax,[esi]    ; Read Source
   mov ebx,ebp
   FETCHPIPE
   sub ebx,[SfxCPB]
   cmp byte[SfxCarry],1
   sbb ax,bx
   seto byte[SfxOverflow]
   setc byte[SfxCarry]
   xor byte[SfxCarry],1
   inc ebp                ; Increase program counter
   mov [edi],eax      ; Write Destination
   mov [SfxSignZero],eax
   CLRFLAGS
   FXReturn

NEWSYM FxOpd60A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 0
NEWSYM FxOpd61A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 1
NEWSYM FxOpd62A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 2
NEWSYM FxOpd63A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 3
NEWSYM FxOpd64A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 4
NEWSYM FxOpd65A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 5
NEWSYM FxOpd66A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 6
NEWSYM FxOpd67A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 7
NEWSYM FxOpd68A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 8
NEWSYM FxOpd69A2    ; SUBIRN subtract, register - immediate
   SUBIRNc 9
NEWSYM FxOpd6AA2    ; SUBIRN subtract, register - immediate
   SUBIRNc 10
NEWSYM FxOpd6BA2    ; SUBIRN subtract, register - immediate
   SUBIRNc 11
NEWSYM FxOpd6CA2    ; SUBIRN subtract, register - immediate
   SUBIRNc 12
NEWSYM FxOpd6DA2    ; SUBIRN subtract, register - immediate
   SUBIRNc 13
NEWSYM FxOpd6EA2    ; SUBIRN subtract, register - immediate
   SUBIRNc 14
NEWSYM FxOpd6FA2    ; SUBIRN subtract, register - immediate
   SUBIRNc 15

NEWSYM FxOpd60A3    ; CMPRN  compare, register, register
   CMPRNc 0
NEWSYM FxOpd61A3    ; CMPRN  compare, register, register
   CMPRNc 1
NEWSYM FxOpd62A3    ; CMPRN  compare, register, register
   CMPRNc 2
NEWSYM FxOpd63A3    ; CMPRN  compare, register, register
   CMPRNc 3
NEWSYM FxOpd64A3    ; CMPRN  compare, register, register
   CMPRNc 4
NEWSYM FxOpd65A3    ; CMPRN  compare, register, register
   CMPRNc 5
NEWSYM FxOpd66A3    ; CMPRN  compare, register, register
   CMPRNc 6
NEWSYM FxOpd67A3    ; CMPRN  compare, register, register
   CMPRNc 7
NEWSYM FxOpd68A3    ; CMPRN  compare, register, register
   CMPRNc 8
NEWSYM FxOpd69A3    ; CMPRN  compare, register, register
   CMPRNc 9
NEWSYM FxOpd6AA3    ; CMPRN  compare, register, register
   CMPRNc 10
NEWSYM FxOpd6BA3    ; CMPRN  compare, register, register
   CMPRNc 11
NEWSYM FxOpd6CA3    ; CMPRN  compare, register, register
   CMPRNc 12
NEWSYM FxOpd6DA3    ; CMPRN  compare, register, register
   CMPRNc 13
NEWSYM FxOpd6EA3    ; CMPRN  compare, register, register
   CMPRNc 14
NEWSYM FxOpd6FA3    ; CMPRN  compare, register, register
   FETCHPIPE
   mov eax,[esi]    ; Read Source
   mov ebx,ebp
   sub ebx,[SfxCPB]
   sub ax,bx

⌨️ 快捷键说明

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