From: Alex M. <ale...@us...> - 2007-03-13 23:49:39
|
Update of /cvsroot/win32forth/win32forth-stc/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv6466/src Modified Files: dis486.f extend.f Log Message: arm: minor mods to disassembler; show offsets as signed hex Index: dis486.f =================================================================== RCS file: /cvsroot/win32forth/win32forth-stc/src/dis486.f,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** dis486.f 2 Mar 2007 15:16:54 -0000 1.13 --- dis486.f 13 Mar 2007 23:49:34 -0000 1.14 *************** *** 74,84 **** \ pseudo Object DIS for all the vars used by the disassembler ! 0 value dis.default-16bit? ! 0 value dis.base-addr ! 0 value dis.size ! 0 value dis.16-bit-data ! 0 value dis.16-bit-addr ! 0 value dis.prefix-op ! 0 value dis.mmx-reg? \ ----------------------------------------------------------------------- --- 74,84 ---- \ pseudo Object DIS for all the vars used by the disassembler ! 0 value dis.16bit \ start in 32 bit mode ! 0 value dis.base-addr \ no offset by default ! 0 value dis.size \ size of immediate ! 0 value dis.data16 \ 16 bit data ! 0 value dis.addr16 \ 16 bit address ! 0 value dis.prefix-op \ prefix operator (like cs: rep etc) ! 0 value dis.mmx-reg? \ display as mmx reg \ ----------------------------------------------------------------------- *************** *** 86,91 **** \ ----------------------------------------------------------------------- ! : default-16bit ( -- ) true to dis.default-16bit? ; ! : default-32bit ( -- ) false to dis.default-16bit? ; --- 86,91 ---- \ ----------------------------------------------------------------------- ! \ : default-16bit ( -- ) true to 16bit ; ! \ : default-32bit ( -- ) false to 16bit ; *************** *** 117,121 **** : cmnt-col 60 col ; \ set to comment field ! : .ss ( n adr w ) oper-col >r swap r@ * + r> type opnd-col ; : .# ( -- ) ." # " ; : ., ( -- ) ." , " ; --- 117,121 ---- : cmnt-col 60 col ; \ set to comment field ! : .ss ( n adr w ) oper-col dup>r rot * + r> type opnd-col ; : .# ( -- ) ." # " ; : ., ( -- ) ." , " ; *************** *** 155,186 **** : bits0-2 ( n -- n' ) %0111 and ; \ isolate bits 0 thru 2 : bits0-3 ( n -- n' ) %1111 and ; \ isolate bits 0 thru 3 ! : bits3-5 ( n -- n' ) 3 rshift bits0-2 ; \ isolate bits 3 thru 5 ! : bits3-4 ( n -- n' ) 3 rshift bits0-1 ; \ isolate bits 3 thru 4 ! : bit3 ( n -- f ) %1000 and ; ! : bit2 ( n -- f ) %0100 and ; ! : bit1 ( n -- f ) %0010 and ; ! : bit0 ( n -- f ) %0001 and ; ! : .cnd-code ( code -- ) bits0-3 z" o nob aee nebea s nsp npl geleg " 2 .ss ; \ was tttn ! : .sreg(XX-NNN-XXX) ( sreg -- ) bits3-5 z" escsssdsfsgs????" 2 .ss ; ! : .creg(XX-NNN-XXX) ( eee -- ) bits3-5 z" cr0???cr2cr3cr4?????????" 3 .ss ; ! : .dreg(XX-NNN-XXX) ( eee -- ) bits3-5 z" dr0dr1dr2dr3??????dr6dr7" 3 .ss ; ! : .treg(XX-NNN-XXX) ( eee -- ) bits3-5 z" ?????????tr3tr4tr5tr6tr7" 3 .ss ; \ obsolete ! : .regm(XX-XXX-NNN) ( n -- ) bits0-2 z" mm0mm1mm2mm3mm4mm5mm6mm7" 3 .ss ; ! : .reg8(XX-XXX-NNN) ( n -- ) bits0-2 z" alcldlblahchdhbh" 2 .ss ; ! : .reg16(XX-XXX-NNN) ( n -- ) bits0-2 z" axcxdxbxspbpsidi" 2 .ss ; ! : .reg32(XX-XXX-NNN) ( n -- ) bits0-2 z" eaxecxedxebxespebpesiedi" 3 .ss ; ! : .reg16/32(XX-XXX-NNN) ( n -- ) dis.16-bit-data if .reg16(XX-XXX-NNN) else .reg32(XX-XXX-NNN) then ; ! : .[ind16](XX-XXX-0NN) ( r/m -- ) bits0-1 z" [bx+si][bx+di][bp+si][bp+di]" 7 .ss ; \ r/m = 0, 1, 2, 3 ! : .[base16](XX-XXX-1NN) ( r/m -- ) bits0-1 z" [si][di][bp][bx]" 4 .ss ; \ r/m = 4, 5, 6, 7 ! : .[reg16](XX-XXX-NNN) ( r/m -- ) bit2 if .[ind16](XX-XXX-0NN) else .[base16](XX-XXX-1NN) then ; ! : .reg(XX-XXX-NNN) ( n -- ) ! dis.mmx-reg? if .regm(XX-XXX-NNN) ! else dis.size if .reg16/32(XX-XXX-NNN) ! else .reg8(XX-XXX-NNN) then then ; --- 155,186 ---- : bits0-2 ( n -- n' ) %0111 and ; \ isolate bits 0 thru 2 : bits0-3 ( n -- n' ) %1111 and ; \ isolate bits 0 thru 3 ! : bits3-5 ( n -- n' ) 3 rshift bits0-2 ; \ isolate bits 3 thru 5 ! : bits3-4 ( n -- n' ) 3 rshift bits0-1 ; \ isolate bits 3 thru 4 ! : bit3 ( n -- f ) %1000 and %1000 = ; ! : bit2 ( n -- f ) %0100 and %0100 = ; ! : bit1 ( n -- f ) %0010 and %0010 = ; ! : bit0 ( n -- f ) %0001 and %0001 = ; ! : .cnd-code ( code -- ) bits0-3 z" o nob aee nebea s nsp npl geleg " 2 .ss ; \ was tttn ! : .sreg ( sreg -- ) bits3-5 z" escsssdsfsgs????" 2 .ss ; ! : .creg ( eee -- ) bits3-5 z" cr0???cr2cr3cr4?????????" 3 .ss ; ! : .dreg ( eee -- ) bits3-5 z" dr0dr1dr2dr3??????dr6dr7" 3 .ss ; ! : .treg ( eee -- ) bits3-5 z" ?????????tr3tr4tr5tr6tr7" 3 .ss ; \ obsolete ! : .regm ( n -- ) bits0-2 z" mm0mm1mm2mm3mm4mm5mm6mm7" 3 .ss ; ! : .reg8 ( n -- ) bits0-2 z" alcldlblahchdhbh" 2 .ss ; ! : .reg16 ( n -- ) bits0-2 z" axcxdxbxspbpsidi" 2 .ss ; ! : .reg32 ( n -- ) bits0-2 z" eaxecxedxebxespebpesiedi" 3 .ss ; ! : .reg16/32 ( n -- ) dis.data16 if .reg16 else .reg32 then ; ! : .[ind16] ( r/m -- ) bits0-1 z" [bx+si][bx+di][bp+si][bp+di]" 7 .ss ; \ r/m = 0, 1, 2, 3 ! : .[base16] ( r/m -- ) bits0-1 z" [si][di][bp][bx]" 4 .ss ; \ r/m = 4, 5, 6, 7 ! : .[reg16] ( r/m -- ) bit2 if .[ind16] else .[base16] then ; ! : .reg ( n -- ) ! dis.mmx-reg? if .regm ! else dis.size if .reg16/32 ! else .reg8 then then ; *************** *** 190,204 **** : .rel16/32 ( addr -- addr' ) ! dis.16-bit-addr IF wCount ELSE LCount THEN over + dis.base-addr - show-name ; ! : .disp8[pc++] ( adr -- adr' ) count show-name ; : .disp16[pc++] ( adr -- adr' ) wCount show-name ; : .disp32[pc++] ( adr -- adr' ) LCount show-name ; : .disp16/32[pc++] ( adr -- adr' ) ! dis.16-bit-addr if .disp16[pc++] else .disp32[pc++] --- 190,204 ---- : .rel16/32 ( addr -- addr' ) ! dis.addr16 IF wCount ELSE LCount THEN over + dis.base-addr - show-name ; ! : .disp8[pc++] ( adr -- adr' ) count sext $s. ; : .disp16[pc++] ( adr -- adr' ) wCount show-name ; : .disp32[pc++] ( adr -- adr' ) LCount show-name ; : .disp16/32[pc++] ( adr -- adr' ) ! dis.addr16 if .disp16[pc++] else .disp32[pc++] *************** *** 208,230 **** : .imm16/32[pc++] ( adr -- adr' ) ! .# dis.16-bit-data IF wCount ELSE LCount THEN show-name ; ! : .[reg32 ( n -- ) ." [" bits0-2 .reg32(XX-XXX-NNN) ; \ prints [reg ! : .[reg32](XX-XXX-NNN) ( n -- ) .[reg32 ." ]" ; ! : .[reg*2](XX-XXX-NNN) ( n -- ) .[reg32 ." *2]" ; ! : .[reg*4](XX-XXX-NNN) ( n -- ) .[reg32 ." *4]" ; ! : .[reg*8](XX-XXX-NNN) ( n -- ) .[reg32 ." *8]" ; ! : .[index]=SS-III-BBB ( sib -- ) parse/sib over 4 = \ ( b i s ) i=4? if 2drop \ no esp scaled index else case ( s ) ! 0 of .[reg32](XX-XXX-NNN) endof ! 1 of .[reg*2](XX-XXX-NNN) endof ! 2 of .[reg*4](XX-XXX-NNN) endof ! 3 of .[reg*8](XX-XXX-NNN) endof endcase then ( b ) drop ; --- 208,230 ---- : .imm16/32[pc++] ( adr -- adr' ) ! .# dis.data16 IF wCount ELSE LCount THEN show-name ; ! : .[reg32 ( n -- ) ." [" bits0-2 .reg32 ; \ prints [reg ! : .[reg32] ( n -- ) .[reg32 ." ]" ; ! : .[reg*2] ( n -- ) .[reg32 ." *2]" ; ! : .[reg*4] ( n -- ) .[reg32 ." *4]" ; ! : .[reg*8] ( n -- ) .[reg32 ." *8]" ; ! : .[sib] ( sib -- ) parse/sib over 4 = \ ( b i s ) i=4? if 2drop \ no esp scaled index else case ( s ) ! 0 of .[reg32] endof ! 1 of .[reg*2] endof ! 2 of .[reg*4] endof ! 3 of .[reg*8] endof endcase then ( b ) drop ; *************** *** 236,250 **** : .sib=NN ( adr mod -- adr ) >r count tuck bits0-2 5 = r@ 0= and ! if .disp32[pc++] swap .[index]=SS-III-BBB r> drop \ ebp base and mod = 00 else r> case ( mod ) 1 of .disp8[pc++] endof 2 of .disp32[pc++] endof endcase ! swap dup .[reg32](XX-XXX-NNN) .[index]=SS-III-BBB then ; : mod-r/m32(r/m,mod) ( adr r/m mod -- adr' ) dup 3 = ! if drop .reg(XX-XXX-NNN) \ mod = 3, register case else over 4 = if nip .sib=NN \ r/m = 4, sib case --- 236,250 ---- : .sib=NN ( adr mod -- adr ) >r count tuck bits0-2 5 = r@ 0= and ! if .disp32[pc++] swap .[sib] r> drop \ ebp base and mod = 00 else r> case ( mod ) 1 of .disp8[pc++] endof 2 of .disp32[pc++] endof endcase ! swap dup .[reg32] .[sib] then ; : mod-r/m32(r/m,mod) ( adr r/m mod -- adr' ) dup 3 = ! if drop .reg \ mod = 3, register case else over 4 = if nip .sib=NN \ r/m = 4, sib case *************** *** 256,260 **** 2 of .disp32[pc++] endof endcase ! swap .[reg32](XX-XXX-NNN) then then --- 256,260 ---- 2 of .disp32[pc++] endof endcase ! swap .[reg32] then then *************** *** 265,277 **** if 2drop .disp16[pc++] \ disp16 case else case ( mod ) ! 0 of .[reg16](XX-XXX-NNN) endof ! 1 of swap .disp8[pc++] swap .[reg16](XX-XXX-NNN) endof ! 2 of swap .disp16[pc++] swap .[reg16](XX-XXX-NNN) endof ! 3 of .reg(XX-XXX-NNN) endof endcase then ; : mod-r/m(ModR/M) ( adr modr/m -- adr' ) ! parse/ModR/M nip dis.16-bit-addr if mod-r/m16(r/m,mod) else mod-r/m32(r/m,mod) --- 265,277 ---- if 2drop .disp16[pc++] \ disp16 case else case ( mod ) ! 0 of .[reg16] endof ! 1 of swap .disp8[pc++] swap .[reg16] endof ! 2 of swap .disp16[pc++] swap .[reg16] endof ! 3 of .reg endof endcase then ; : mod-r/m(ModR/M) ( adr modr/m -- adr' ) ! parse/ModR/M nip dis.addr16 if mod-r/m16(r/m,mod) else mod-r/m32(r/m,mod) *************** *** 280,291 **** : r/m8(ModR/M) 0 to dis.size mod-r/m(ModR/M) ; : r/m16/32(ModR/M) 1 to dis.size mod-r/m(ModR/M) ; ! : r/m16(ModR/M) true to dis.16-bit-data r/m16/32(ModR/M) ; : r,r/m() ( adr -- adr' ) count dup bits3-5 ( op/reg->reg/m ) ! .reg(XX-XXX-NNN) ., mod-r/m(ModR/M) ; : r/m,r() ( adr -- adr' ) ! count dup >r mod-r/m(ModR/M) ., r> bits3-5 .reg(XX-XXX-NNN) ; : r/m() ( adr op -- adr' ) --- 280,291 ---- : r/m8(ModR/M) 0 to dis.size mod-r/m(ModR/M) ; : r/m16/32(ModR/M) 1 to dis.size mod-r/m(ModR/M) ; ! : r/m16(ModR/M) true to dis.data16 r/m16/32(ModR/M) ; : r,r/m() ( adr -- adr' ) count dup bits3-5 ( op/reg->reg/m ) ! .reg ., mod-r/m(ModR/M) ; : r/m,r() ( adr -- adr' ) ! count dup >r mod-r/m(ModR/M) ., r> bits3-5 .reg ; : r/m() ( adr op -- adr' ) *************** *** 364,382 **** pre a16a "a16:" ! : d16 ( adr code -- adr' ) d16a true to dis.16-bit-data ; ! : a16 ( adr code -- adr' ) a16a true to dis.16-bit-addr ; : aam ( adr code -- adr' ) .sop" aam" drop count drop ; : aad ( adr code -- adr' ) .sop" aad" drop count drop ; ! : isd ( adr code -- adr' ) drop dis.16-bit-data if .sop" insw" else .sop" insd" then ; ! : osd ( adr code -- adr' ) drop dis.16-bit-data if .sop" outsw" else .sop" outsd" then ; ! : inp/ind ( adr code -- adr' ) .sop" in" opnd-col bit0 if dis.16-bit-data if .ax, else .eax, then else .al, then ; : inp ( adr code -- adr' ) inp/ind count $. ; : ind ( adr code -- adr' ) inp/ind .dx ; : .out ( adr code -- adr' ) .sop" out" opnd-col ; ! : otp/otd ( adr code -- adr' ) bit0 if dis.16-bit-data if ." , ax" else ." , eax" then else ." , al" then ; : otp ( adr code -- adr' ) .out swap count $. swap otp/otd ; : otd ( adr code -- adr' ) .out .dx otp/otd ; --- 364,382 ---- pre a16a "a16:" ! : d16 ( adr code -- adr' ) d16a true to dis.data16 ; ! : a16 ( adr code -- adr' ) a16a true to dis.addr16 ; : aam ( adr code -- adr' ) .sop" aam" drop count drop ; : aad ( adr code -- adr' ) .sop" aad" drop count drop ; ! : isd ( adr code -- adr' ) drop dis.data16 if .sop" insw" else .sop" insd" then ; ! : osd ( adr code -- adr' ) drop dis.data16 if .sop" outsw" else .sop" outsd" then ; ! : inp/ind ( adr code -- adr' ) .sop" in" opnd-col bit0 if dis.data16 if .ax, else .eax, then else .al, then ; : inp ( adr code -- adr' ) inp/ind count $. ; : ind ( adr code -- adr' ) inp/ind .dx ; : .out ( adr code -- adr' ) .sop" out" opnd-col ; ! : otp/otd ( adr code -- adr' ) bit0 if dis.data16 if ." , ax" else ." , eax" then else ." , al" then ; : otp ( adr code -- adr' ) .out swap count $. swap otp/otd ; : otd ( adr code -- adr' ) .out .dx otp/otd ; *************** *** 400,409 **** : ala ( adr op -- adr' ) ! dup .alu bit0 if 0 .reg(XX-XXX-NNN) .imm16/32[pc++] else 0 .reg8(XX-XXX-NNN) .imm8[pc++] then ; \ -------------------- Test/Xchg -------------------- : txb ( addr op -- addr' ) ! dup bit1 z" testxchg" 4 .ss bit0 to dis.size r,r/m() ; --- 400,409 ---- : ala ( adr op -- adr' ) ! dup .alu bit0 if 0 .reg .imm16/32[pc++] else 0 .reg8 .imm8[pc++] then ; \ -------------------- Test/Xchg -------------------- : txb ( addr op -- addr' ) ! dup bit1 negate z" testxchg" 4 .ss bit0 to dis.size r,r/m() ; *************** *** 411,415 **** : tst ( addr op -- addr' ) .sop" test" bit0 ! IF dis.16-bit-data IF .ax, ELSE .eax, --- 411,415 ---- : tst ( addr op -- addr' ) .sop" test" bit0 ! IF dis.data16 IF .ax, ELSE .eax, *************** *** 424,428 **** : ppp ( addr op -- addr' ) opstr does> count oper-col type drop ! dis.16-bit-data 0= IF ." d" THEN opnd-col ; ppp psa "pusha" --- 424,428 ---- : ppp ( addr op -- addr' ) opstr does> count oper-col type drop ! dis.data16 0= IF ." d" THEN opnd-col ; ppp psa "pusha" *************** *** 432,436 **** : idp ( addr op -- addr' ) ! opstr does> count (.sop") .reg16/32(XX-XXX-NNN) ; idp inc "inc" --- 432,436 ---- : idp ( addr op -- addr' ) ! opstr does> count (.sop") .reg16/32 ; idp inc "inc" *************** *** 439,444 **** idp pop "pop" ! : pss ( addr op -- addr' ) .sop" push" .sreg(XX-NNN-XXX) ; ! : pps ( addr op -- addr' ) .sop" pop" .sreg(XX-NNN-XXX) ; : 8F. ( addr op -- addr' ) drop count .sop" pop" r/m16/32(ModR/M) ; : psi ( addr op -- addr' ) .sop" push" bit1 IF .imm8[pc++] ELSE .imm16/32[pc++] THEN ; --- 439,444 ---- idp pop "pop" ! : pss ( addr op -- addr' ) .sop" push" .sreg ; ! : pps ( addr op -- addr' ) .sop" pop" .sreg ; : 8F. ( addr op -- addr' ) drop count .sop" pop" r/m16/32(ModR/M) ; : psi ( addr op -- addr' ) .sop" push" bit1 IF .imm8[pc++] ELSE .imm16/32[pc++] THEN ; *************** *** 449,454 **** : mri ( addr op -- addr' ) .sop-mov dup bit3 ! IF .reg16/32(XX-XXX-NNN) .imm16/32[pc++] ! ELSE .reg8(XX-XXX-NNN) .imm8[pc++] THEN ; --- 449,454 ---- : mri ( addr op -- addr' ) .sop-mov dup bit3 ! IF .reg16/32 .imm16/32[pc++] ! ELSE .reg8 .imm8[pc++] THEN ; *************** *** 462,492 **** : mrs ( addr op -- addr' ) ! dis.16-bit-data IF .sop-mov drop 1 to dis.size count dup mod-r/m(ModR/M) ., ! .sreg(XX-NNN-XXX) ELSE ??? THEN ; : msr ( addr op -- addr' ) ! dis.16-bit-data IF .sop-mov drop 1 to dis.size ! count dup .sreg(XX-NNN-XXX) ., mod-r/m(ModR/M) ELSE ??? THEN ; ! : mrc ( addr op -- addr' ) .sop-mov drop count dup .reg32(XX-XXX-NNN) ., .creg(XX-NNN-XXX) ; ! : mcr ( addr op -- addr' ) .sop-mov drop count dup .creg(XX-NNN-XXX) ., .reg32(XX-XXX-NNN) ; ! : mrd ( addr op -- addr' ) .sop-mov drop count dup .reg32(XX-XXX-NNN) ., .dreg(XX-NNN-XXX) ; ! : mdr ( addr op -- addr' ) .sop-mov drop count dup .dreg(XX-NNN-XXX) ., .reg32(XX-XXX-NNN) ; ! : mrt ( addr op -- addr' ) .sop-mov drop count dup .reg32(XX-XXX-NNN) ., .treg(XX-NNN-XXX) ; \ obsolete ! : mtr ( addr op -- addr' ) .sop-mov drop count dup .treg(XX-NNN-XXX) ., .reg32(XX-XXX-NNN) ; \ obsolete : mv1 ( addr op -- addr' ) .sop-mov bit0 ! IF dis.16-bit-data IF .ax, ELSE .eax, --- 462,492 ---- : mrs ( addr op -- addr' ) ! dis.data16 IF .sop-mov drop 1 to dis.size count dup mod-r/m(ModR/M) ., ! .sreg ELSE ??? THEN ; : msr ( addr op -- addr' ) ! dis.data16 IF .sop-mov drop 1 to dis.size ! count dup .sreg ., mod-r/m(ModR/M) ELSE ??? THEN ; ! : mrc ( addr op -- addr' ) .sop-mov drop count dup .reg32 ., .creg ; ! : mcr ( addr op -- addr' ) .sop-mov drop count dup .creg ., .reg32 ; ! : mrd ( addr op -- addr' ) .sop-mov drop count dup .reg32 ., .dreg ; ! : mdr ( addr op -- addr' ) .sop-mov drop count dup .dreg ., .reg32 ; ! : mrt ( addr op -- addr' ) .sop-mov drop count dup .reg32 ., .treg ; \ obsolete ! : mtr ( addr op -- addr' ) .sop-mov drop count dup .treg ., .reg32 ; \ obsolete : mv1 ( addr op -- addr' ) .sop-mov bit0 ! IF dis.data16 IF .ax, ELSE .eax, *************** *** 498,502 **** : mv2 ( addr op -- addr' ) .sop-mov .disp16/32[pc++] ., bit0 ! IF dis.16-bit-data IF ." ax" ELSE ." eax" --- 498,502 ---- : mv2 ( addr op -- addr' ) .sop-mov .disp16/32[pc++] ., bit0 ! IF dis.data16 IF ." ax" ELSE ." eax" *************** *** 508,512 **** : lxs ( addr op -- addr' ) bit0 IF .sop" lds" ELSE .sop" les" THEN r,r/m() ; : bnd ( addr op -- addr' ) .sop" bound" drop 1 to dis.size r,r/m() ; ! : arp ( addr op -- addr' ) .sop" arpl" drop 1 to dis.size true to dis.16-bit-data r,r/m() ; : mli ( addr op -- addr' ) 1 to dis.size --- 508,512 ---- : lxs ( addr op -- addr' ) bit0 IF .sop" lds" ELSE .sop" les" THEN r,r/m() ; : bnd ( addr op -- addr' ) .sop" bound" drop 1 to dis.size r,r/m() ; ! : arp ( addr op -- addr' ) .sop" arpl" drop 1 to dis.size true to dis.data16 r,r/m() ; : mli ( addr op -- addr' ) 1 to dis.size *************** *** 534,538 **** ELSE .sop" jmp" THEN ! dis.16-bit-data IF ." ptr16:16 " ELSE ." ptr16:32 " --- 534,538 ---- ELSE .sop" jmp" THEN ! dis.data16 IF ." ptr16:16 " ELSE ." ptr16:32 " *************** *** 552,556 **** drop .sop" nop" else ! .sop" xchg" .eax, .reg16/32(XX-XXX-NNN) then ; --- 552,556 ---- drop .sop" nop" else ! .sop" xchg" .eax, .reg16/32 then ; *************** *** 567,571 **** 0xC0 of count $. endof 0xD0 of 1 $. endof ! 0xD2 of 1 .reg8(XX-XXX-NNN) endof endcase ; --- 567,571 ---- 0xC0 of count $. endof 0xD0 of 1 $. endof ! 0xD2 of 1 .reg8 endof endcase ; *************** *** 827,831 **** : xad ( addr op -- addr' ) .sop" xadd" bit0 to dis.size r/m,r() ; : cx8 ( addr op -- addr' ) .sop" cmpxchg8b" drop count r/m16/32(ModR/M) ; ! : bsp ( addr op -- addr' ) .sop" bswap" .reg32(XX-XXX-NNN) ; --- 827,831 ---- : xad ( addr op -- addr' ) .sop" xadd" bit0 to dis.size r/m,r() ; : cx8 ( addr op -- addr' ) .sop" cmpxchg8b" drop count r/m16/32(ModR/M) ; ! : bsp ( addr op -- addr' ) .sop" bswap" .reg32 ; *************** *** 838,850 **** bit0 >r count dup to op2 parse/sib r> \ size bit ! if swap .reg32(XX-XXX-NNN) ., \ word to dword case 3 = ! if .reg16(XX-XXX-NNN) else drop .word op2 mod-r/m(ModR/M) then ! else swap .reg16/32(XX-XXX-NNN) ., \ byte case 3 = ! if .reg8(XX-XXX-NNN) else drop ." byte " op2 mod-r/m(ModR/M) --- 838,850 ---- bit0 >r count dup to op2 parse/sib r> \ size bit ! if swap .reg32 ., \ word to dword case 3 = ! if .reg16 else drop .word op2 mod-r/m(ModR/M) then ! else swap .reg16/32 ., \ byte case 3 = ! if .reg8 else drop ." byte " op2 mod-r/m(ModR/M) *************** *** 920,929 **** : gpa ( adr op -- adr' ) \ xx00-xxxx -> ??? ! >r count dup .psx(XXNN-XXXX) r> mmx-size .regm(XX-XXX-NNN) ., .imm8[pc++] ; : mpd ( adr op -- adr' ) .sop" movd" drop count parse/ModR/M ! swap .regm(XX-XXX-NNN) ., 3 = ! if .reg32(XX-XXX-NNN) else mod-r/m(ModR/M) then ; --- 920,929 ---- : gpa ( adr op -- adr' ) \ xx00-xxxx -> ??? ! >r count dup .psx(XXNN-XXXX) r> mmx-size .regm ., .imm8[pc++] ; : mpd ( adr op -- adr' ) .sop" movd" drop count parse/ModR/M ! swap .regm ., 3 = ! if .reg32 else mod-r/m(ModR/M) then ; *************** *** 932,938 **** .sop" movd" drop count parse/ModR/M swap 3 = ! if .reg32(XX-XXX-NNN) else mod-r/m(ModR/M) ! then ., .regm(XX-XXX-NNN) ; : par ( adr op -- adr' ) --- 932,938 ---- .sop" movd" drop count parse/ModR/M swap 3 = ! if .reg32 else mod-r/m(ModR/M) ! then ., .regm ; : par ( adr op -- adr' ) *************** *** 1033,1043 **** count dup bit0 to dis.size ! dup cells op1-table + @ execute dis.prefix-op 0= ! if dis.default-16bit? 0= ! if false to dis.16-bit-data ! false to dis.16-bit-addr ! else true to dis.16-bit-data ! true to dis.16-bit-addr then then ; --- 1033,1043 ---- count dup bit0 to dis.size ! dup cells op1-table + @ execute dis.prefix-op 0= ! if dis.16bit 0= ! if false to dis.data16 ! false to dis.addr16 ! else true to dis.data16 ! true to dis.addr16 then then ; Index: extend.f =================================================================== RCS file: /cvsroot/win32forth/win32forth-stc/src/extend.f,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** extend.f 24 Jan 2007 23:48:17 -0000 1.16 --- extend.f 13 Mar 2007 23:49:34 -0000 1.17 *************** *** 4,24 **** cr .( -- META EXTEND.F ) cr - sys-fload src\primutil.f - sys-fload src\optinline \ inline optimiser ! sys-fload src\module.f \ scoping support for modules sys-fload src\interpif.f \ interpretive conditionals fload src\numconv.f \ general number conversions - sys-fload src\486asm.f \ jim's 486 assembler sys-fload src\asmmac.f \ jim's 486 macros sys-fload src\asmwin32.f \ next for win32forth - sys-fload src\optliterals \ literals optimiser - - fload src\console\console.f \ console i/o extracted from primutil.f fload src\console\console2.f \ console i/o extracted from primutil.f sys-fload src\dotwords.f \ dot support words sys-FLOAD src\forget.f \ forget words --- 4,19 ---- cr .( -- META EXTEND.F ) cr sys-fload src\optinline \ inline optimiser ! fload src\primutil.f sys-fload src\module.f \ scoping support for modules sys-fload src\interpif.f \ interpretive conditionals fload src\numconv.f \ general number conversions sys-fload src\486asm.f \ jim's 486 assembler sys-fload src\asmmac.f \ jim's 486 macros sys-fload src\asmwin32.f \ next for win32forth sys-fload src\optliterals \ literals optimiser fload src\console\console.f \ console i/o extracted from primutil.f fload src\console\console2.f \ console i/o extracted from primutil.f + sys-FLOAD src\dis486.f \ load the disassembler sys-fload src\dotwords.f \ dot support words sys-FLOAD src\forget.f \ forget words *************** *** 26,31 **** sys-fload src\imageman.f \ fsave, application & turnkey words sys-FLOAD src\environ.f \ environment? support - - sys-FLOAD src\dis486.f \ load the disassembler FLOAD src\pointer.f \ pointer support ( w/o forgetting and decompiling ) fload src\callback.f \ windows callback support --- 21,24 ---- *************** *** 39,42 **** --- 32,36 ---- FLOAD src\ansfile.f \ ansi file words FLOAD src\registry.f \ Win32 Registry support + FLOAD src\primhash.f \ primitive hash functions for OOP later *** to be done *** here fence ! mark empty \ Prevent forgetting anything before this *************** *** 52,61 **** .olly - \ sys-fload src\optliterals \ literals optimiser - - \s - \ FLOAD src\primhash.f \ primitive hash functions for OOP later *** to be done *** \ sys-FLOAD src\dbgsrc1.f \ source level debugging support part one *** to be done *** --- 46,51 ---- |