Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | This fixes the ST.B (sp,0xvv),Rx problem. The second field is captured as everything between balanced parenteses, (including a ','). |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b37e57a31d3c955039966f2c9f3aa50a |
User & Date: | jos 2015-08-11 14:49:26.678 |
Context
2015-08-11
| ||
21:50 | Added opcode for NOP_x (0xc5) check-in: 2acd1fa545 user: jos tags: trunk | |
14:49 | This fixes the ST.B (sp,0xvv),Rx problem. The second field is captured as everything between balanced parenteses, (including a ','). check-in: b37e57a31d user: jos tags: trunk | |
13:50 | Tried to duplicate the good work for instruction LD.B to instruction ST.B This version generates the same bytes for ST.B (SP,0xVV),Rx and ST.B 0xWWWW,Rx The trouble seems to be in string "(SP,0xVV)" not being kept together due to the ','; This needs to be fixed in another place. check-in: 9741453f2c user: jos tags: trunk | |
Changes
Changes to asm.lua.
︙ | ︙ | |||
18 19 20 21 22 23 24 25 26 27 28 | end end function Fields( line ) if( line == "" or line:match("^%s*//") ) then return 0; end; local retVal = 0; local n, n1, label, instr, dst, src; label,n1 = line:match("^(%S+)()"); -- Start of string, (one+ non-space), (empty capture) if( label ) then n=n1; retVal = retVal + 1; end instr,n1 = line:match("%s+([^%s,;]+)%s+()",n); -- one+ space, (one+ non-space), one+ space, (empty capture) if( instr ) then n=n1; retVal = retVal + 1; end | > > > > | > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | end end function Fields( line ) if( line == "" or line:match("^%s*//") ) then return 0; end; local retVal = 0; local n, n1, label, instr, dst, src; n = 1; label,n1 = line:match("^(%S+)()"); -- Start of string, (one+ non-space), (empty capture) if( label ) then n=n1; retVal = retVal + 1; end instr,n1 = line:match("%s+([^%s,;]+)%s+()",n); -- one+ space, (one+ non-space), one+ space, (empty capture) if( instr ) then n=n1; retVal = retVal + 1; end if( line:sub(n,n) == '(' ) then dst,n1 = line:match("(%b())()") else dst,n1 = line:match("([^%s,;]+)()",n); end if( dst ) then n=n1; retVal = retVal + 1; end src,n1 = line:match("[%s,]+([^%s;]+)()",n); if( src ) then n=n1; retVal = retVal + 1; end return retVal, label, instr, dst, src; end function ProcessLine( l ) |
︙ | ︙ |
Changes to opcodes.lua.
︙ | ︙ | |||
366 367 368 369 370 371 372 | end function do_ST_B(f1, f2, f3) local ind_dst = (f2:match('%b()')~=nil); local autoinc = (ind_dst and (f2:match('++')~=nil) ); local stack = f2:match("[sS][pP]"); | < < | | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 | end function do_ST_B(f1, f2, f3) local ind_dst = (f2:match('%b()')~=nil); local autoinc = (ind_dst and (f2:match('++')~=nil) ); local stack = f2:match("[sS][pP]"); local ourNr = isReg(f3); if( not ind_dst ) then return 0xbc + ourNr, 0x00, 0x00; -- ST.B 0xWWWW,Rx ; else if( stack ) then return 0xac + ourNr, 0x00; end; -- ST.B (SP,0xVV),Rx ; local ourNr2 = tonumber( f2:match("[23]") ); if( ourNr2 == nil ) then error("Line ".. string.format("%04d",LineNr) .. ": Operand must be R2 or R3", 0 ) end if( autoinc ) then return 0x9c + (ourNr + 2*(ourNr2-2)) ; -- ST.B (Rb++),Rx ; else return 0x8c + (ourNr + 2*(ourNr2-2)) ; -- ST.B (Rb),Rx end end end function do_ST_W(f1, f2, f3) return 0xb8, 0x00, 0x00 end function do_SUB(f1, f2, f3) return( 0x60 + isReg2(f2,f3) ); end function do_SUBX(f1, f2, f3) |
︙ | ︙ |