Web based MIPS assembler and emulator

utils.js 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const error = (error) => console.error(error)
  2. const dec2binu = (dec, length) => {
  3. let unsigned = Math.abs(dec)
  4. let bin = unsigned.toString(2)
  5. if (bin.length >= length) {
  6. return bin
  7. } else {
  8. return '0'.repeat(length - bin.length).concat(bin)
  9. }
  10. }
  11. const int16_2bin = (int16) => {
  12. const signed32 = (int16 >>> 0).toString(2)
  13. if (signed32.length > 16) {
  14. return signed32.slice(16)
  15. } else {
  16. return '0'.repeat(16 - signed32.length).concat(signed32)
  17. }
  18. }
  19. const hex2bin = (hex, length) => {
  20. if (hex.startsWith('0x')) {
  21. return dec2binu(parseInt(hex.slice(2), 16), length)
  22. } else {
  23. console.error("Hex immediates must start with 0x")
  24. }
  25. }
  26. const bin2hex = (bin, length) => {
  27. let hex = parseInt(bin, 2).toString(16)
  28. if (hex.length >= length) {
  29. return hex
  30. } else {
  31. return '0'.repeat(length - hex.length).concat(hex)
  32. }
  33. }
  34. const splitOffsetBase = (offsetBase) => offsetBase.trim().slice(0, -1).split('(').map(s => s.trim())
  35. module.exports = {
  36. 'error': error,
  37. 'dec2binu': dec2binu,
  38. 'hex2bin': hex2bin,
  39. 'bin2hex': bin2hex,
  40. 'int16_2bin': int16_2bin,
  41. 'splitOffsetBase': splitOffsetBase
  42. }