Forum for Codes : https://scratch.mit.edu/discuss/topic/771731/?page=1#post-8054548 This is NumCom (Number Computer) Assembler. It has both an assembler and disassembler built in, as well as the option to load in a code string. Based off of the AQA exam Assembly which is based off of ARM Assembly. [Many Thanks to @Mr_Zombii for help and ideas!] HOW IT WORKS: NumCom is my own [UNFINISHED] assembly language, where you can perform mathematical and logical calculations and move data around registers and memory. See the instruction set below. NumCom can load programs using code strings that contain Hexadecimal data that represents each instruction: Opcode-Operation, Opcode-Operation, etc... Navigate the DISASSEMBLY list by using arrow keys. To delete a letter you just typed, click the LEFT ARROW instead of backspace. LOADING AND SAVING : When you have built your program and tested it sufficiently, click the ASSEMBLE button. This will take you to a screen in which the Paste-able Code list will appear. Copy the code. This is YOUR PROGRAM. After this, to return to the Assembler page, PRESS SPACE. To load your program, select "Load Code & Disassemble" then paste in your copied code and press enter. The code will appear and the data will be decoded. Press space to go to the Assembler page. INSTRUCTION SET: This is the currently working instruction set and Syntax: Key : R = Register (Zero-Index, so 1 = R0, and 8 = R7) M = Memory (Zero-Index, so 1 = M0 and 8192 = M8191) x = Value Labels are defined with the @ sign then a name. You can branch to a label by writing it in parenthesis. @LABEL BRA TO (LABEL) [or BEQ/BNE/BGT/BLT] y = Alternate Value z = Alternate Alternate Value # = Takes the place of R if you just want a plain integer. 1. Move any value to Rx or between registers into Rx: MOV Rx, Ry --- or --- MOV Rx, #y 2. Load value from memory into register Rx: LDM Rx, My 3. Store value from Rx into memory Mx: STM Rx, My 4. Input a CHAR table value from user keyboard: (Pauses program and waits for input...) INP Rx, Cy --- or --- INP Rx, ANY 5. Output a value to the OUT register (UNUSED) OUT Rx 6. Add two registers/numbers together into Rx: ADD Rx, Ry --- or --- ADD Rx, 7. Subtract two registers/numbers into Rx: SUB Rx, Ry --- or --- SUB Rx, 8. Left shift bits into register Rx by y number of shifts: S͏HL Rx, 9. Right shift bits into register Rx by y number of shifts: SHR Rx, 10. Compare two values and store it* in STATUS register shown onscreen: CMP Rx, Ry --- or --- CMP Rx, (DUE TO BIT LIMITATIONS, R0 Cannot be compared as Ry.) 11. Branch to different line (change Program Counter) BRA TO (See the bottom of the list for other BRA options.) 12. Perform AND logical calculation into Rx: AND Rx, Ry --- or --- AND Rx, 13. Perform OR logical calculation into Rx: ORR Rx, Ry --- or --- ORR Rx, 14. Perform NOT logical calculation into Rx: NOT Rx 15. Perform XOR logical calculation into Rx: XOR Rx, Ry --- or --- XOR Rx, 16. Append any value to Rx (Add on to the end): APR Rx, Ry --- or --- APR Rx, 17. Plot dot on screen (no register use): PLT Xx, Yy (see instruction 34) 18. Assign HSB (HSV) colour to Pen (no register use): COL Hx, Sy, Bz (see instruction 42) 19. Load Sprite Character to object list Ox: SPL , Ox (see instruction 32) 20. Move Sprite to new x position at Rx: MSX Oy, Rx (see instruction 31) 21. Delete Sprite at object Ox: DLS Ox 22. Colour Sprite at object Ox: CLS Ox 23. Erase screen, pen and sprites: ERA 24. Print Text from Rx to screen (at pen position): E.g: LDC Rx, C35 TEX Rx 25. Fill screen with current Pen colour: FIL 26. Set Pen size : PSZ Rx --- or --- PSZ 27. Branch if previous calculation* is equal (EQ): BEQ TO x 28. Branch if previous calculation* is not equal (NE): BNE TO x 29. Branch if previous calculation* is less than (LT): BLT TO x 30. Branch if previous calculation* is greater than (GT) BGT TO x 31. Move Sprite to new y position at Rx: MSY Oy, Rx 32. SPR Load Sprite from Register Rx into object Oy: SPR Rx, Oy (see instruction 38, 39) 33. Refresh all sprite data + wipe screen: REF 34. Plot dot on screen from Registers Rx and Ry: PLR XRx, YRy 35. Load Character Cy into Register Rx: LDC Rx, Cy 36. Freely input a character into Rx: (Program won't pause and won't wait for input.) INF Rx, Cy --- or --- INF Rx, ANY 37. Return to line before previous BRAnch (max 50 return history stack.) RET 38. Change Object y to Character Cx: CSC Cx, Oy 39. Change Object Oy to Char stored in Rx CSR Rx, Oy 40. End program HALT 41. Check Intersection between two Sprites x and y: CIN Ox, Oy 42. Assign Pen Hue Rx, Sat Ry, Bri Rz: COR Rx, Ry, Rz *this means the result of the calculation e.g. Compare Rx with Ry . If Rx is bigger than Ry, then the STATUS will be GT.