Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

        ALIGNrm ;╨╜╨░ ╨▓╤Б╤П╨║╨╕╨╣ ╤Б╨╗╤Г╤З╨░╨╣, ╨▓╨┤╤А╤Г╨│ ╤В╨░╨╝ ╨╡╤Б╤В╤М r/m
EXTer
       UNTESTED
;0f 31 = rdtsc eax edx
;0f b6 d0 = movzx dx,al (move with zero-extend)
;0f b6 c2 = movzx ax,dl (move with zero-extend)
;0f b6 06 87 0c = movzx ax,byte ptr [0c87] for pitman
;0f b6 9f 8e 0c = movzx bx,byte ptr [bx+0c8e] for pitman
;0f a8 .. TODO for 25frame
;0F DA  r P3+     PMINUB mm mm/m64   sse1      Minimum of Packed Unsigned Byte Integers (for pixeltwn)
;0F 82 (xx xx) JC rel16/32 Jump near if below/not above or equal/carry (CF=1) ;(for pixeltwn)
;0F 83 (A4 00) JNC rel16/32 Jump near if not below/above or equal/not carry (CF=0) ;(for pixeltwn)
;0F 85 (6B FF) jnz rel16 (for megapole)
;0F AF C3 imul ax,bx (for megapole)
;0F 45 C1 CMOVNZ ax,cx (for megapole) Conditional Move - not zero/not equal (ZF=0)
;JNAE rel16/32    
;JC rel16/32

;TODO ╨┐╤А╨╛╤З╨╕╨╡ ╨░╨┤╤А╨╡╤Б╨░╤Ж╨╕╨╕
        get
        next
       cp 0x31
       jp z,RDTSCer
       cp 0x45
       jr z,CMOVNZer
       cp 0x82
       jp z,JCrel16
       cp 0x83
       jp z,JNCrel16
       cp 0x84
       jp z,JZrel16
       cp 0x85
       jp z,JNZrel16
      cp 0x88
      jp z,JSrel16 ;pitman
       cp 0xaf
       jr z,IMULr1r2
       cp 0xda
       jr z,PMINUBer
       cp 0xb6
       jr nz,$
;movzx r16,rm8
        get
        next
        cp 0b11000000
        jr c,MOVZXmem
        ;jr $
      if 1
       ;ld h,a
       sub 64
        ld l,a
        ld h,_AX/256
        ld l,(hl) ;rm addr
       ;ld a,h
        ;ld h,_AX/256
        ld c,(hl)
        ld b,0 ;rm
        rra
        rra
        and 7*2
        ld l,a
       _PUTr16Loop_
        ;ld l,a
        ;ld h,_AX/256
        ;ld l,(hl) ;reg8 addr
        ;ld c,(hl)
        ;ld b,0 ;reg16
       ;and 7
       ;add a,a
        ;ld l,a ;rm addr
       ;_PUTr16Loop_
      else
       cp 0xc2
       jr z,MOVZXaxdl
       cp 0xd0
       jr nz,$
        ld hl,(_AL)
        ld h,0
        ld (_DX),hl
       _Loop_
MOVZXaxdl
        ld hl,(_DL)
        ld h,0
        ld (_AX),hl
       _Loop_
      endif
MOVZXmem
       ADDRm16_GETm8c_for_PUTm8
        ld b,0 ;rm
        rra
        rra
        and 7*2
        ld l,a
        ld h,_AX/256
       _PUTr16Loop_AisL
       
CMOVNZer
;CMOVNZ ax,cx - Conditional Move - not zero/not equal (ZF=0)
        ex af,af' ;'
        jr z,CMOVnzer_no
        ld hl,(_CX)
        ld (_AX),hl
CMOVnzer_no
        ex af,af' ;'
       _Loop_

IMULr1r2
        get
        next
       push de
        ld bc,(_BX) ;TODO other regs
        ld de,(_AX);ex de,hl ;de=ax ;TODO other regs
        call IMUL_bc_de_to_hlde
        ;ld (_DX),hl ;HSW
        ld (_AX),de ;LSW
       pop de
       _Loop_

PMINUBer
;╨╜╨╡ ╤Г╨▓╨╡╤А╨╡╨╜, ╤З╤В╨╛ ╤В╨░╨║╨╛╨╡ ╨┐╨╛╨▓╨╡╨┤╨╡╨╜╨╕╨╡ - TODO
        ld hl,(_AX)
        ld a,l
        cp h
        jr c,$+3
        ld l,h
        ld h,0
        ld (_AX),hl
       _Loop_

RDTSCer
;╨║╨╛╤Б╤В╤Л╨╗╤М ╨┤╨╗╤П para512
        ld a,r
        ld l,a
        ld h,a
        ld (_AX),hl
       _Loop_

JSrel16
        ex af,af' ;'
        jp m,JRrel16y
        ex af,af' ;'
        next
        next
       _Loop_
JCrel16
        ex af,af' ;'
        jr c,JRrel16y
        ex af,af' ;'
        next
        next
       _Loop_
JNCrel16
        ex af,af' ;'
        jr nc,JRrel16y
        ex af,af' ;'
        next
        next
       _Loop_
JZrel16
        ex af,af' ;'
        jr z,JRrel16y
        ex af,af' ;'
        next
        next
       _Loop_
JNZrel16
        ex af,af' ;'
        jr nz,JRrel16y
        ex af,af' ;'
        next
        next
       _Loop_
JRrel16y
        ex af,af' ;'
        get
        next
        ld l,a
        get
        next
        LD H,A
       decodePC ;a=d
        ADD HL,DE
       ;;ld a,d
       ;xor h
       ;and 0xc0
        ex de,hl ;new PC
       ;jp z,JRer_qslow
       _LoopC_JP;oldpg