From ac743cc6547d540c5cd5de7a5cf03fba898a2238 Mon Sep 17 00:00:00 2001 From: Arthur Paulino Date: Mon, 1 Jan 2018 11:54:57 -0300 Subject: [PATCH] Unifying codestyle --- Assembly-program-examples.md | 222 +++++++++++++++++------------------ 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/Assembly-program-examples.md b/Assembly-program-examples.md index 0d04a4b..4a02ad9 100644 --- a/Assembly-program-examples.md +++ b/Assembly-program-examples.md @@ -1,4 +1,3 @@ - ### Manhattan Distance This simple program calculates the [Manhattan distance](https://en.wikipedia.org/wiki/Taxicab_geometry) between the current position of the Cubot and another tile. ```assembly @@ -23,11 +22,11 @@ counter: DW 0x0000 ; Counter global variable PUSH 11 ; x2 call manhattanDist ; Execute procedure - TEST [counter], 1 ; Display 'ABCD' every other tick + TEST [counter], 1 ; Display 'ABCD' every odd tick JNZ counter_is_odd - MOV A, 0xABCD -counter_is_odd: + MOV A, 0xABCD +counter_is_odd: ADD [counter], 1 ; Increment counter MOV B, A MOV A, 1 @@ -80,6 +79,26 @@ y_is_positive: RET 2 ; Return and POP our 2 arguments ``` +### Dump memory to disk +```assembly +HWID_FLOPPY equ 0xB + +;************************************** +;* dumpMemToDisk() +;* Dump entire memory to Floppy Disk +dumpMemToDisk: + MOV X, 0 + MOV Y, 0 +dumpMemToDiskLoop: + MOV A, 3 ; WRITE_SECTOR + HWI HWID_FLOPPY + ADD X, 1 + ADD Y, 512 + CMP X, 128 + JNZ dumpMemToDiskLoop + RET +``` + ### Constants by hackersoup with help from [contributors](https://github.com/simon987/Much-Assembly-Required/wiki/Assembly-program-examples/_history)
@@ -87,7 +106,7 @@ Insert this code before the new code you write for MuchAssemblyRequired, and use ```assembly -;; Hardware IDs +; Hardware IDs HWID_LEGS equ 0x1 HWID_LASER equ 0x2 HWID_LIDAR equ 0x3 @@ -100,86 +119,86 @@ HWID_HOLO equ 0x9 HWID_BATTERY equ 0xA HWID_FLOPPY equ 0xB -;; Drill -;; Version 1.0B +; Drill +; Version 1.0B DRILL_POLL equ 1 ; Cost: 0kJ - ;; Get the status of the drill + ; Get the status of the drill DRILL_GATHER_SLOW equ 2 ; Cost: 1400kJ - ;; Gather the resource located under the Cubot (4 tick)* - ;; Not implemented yet, see: - ;; https://github.com/simon987/Much-Assembly-Required/issues/10 + ; Gather the resource located under the Cubot (4 tick)* + ; Not implemented yet, see: + ; https://github.com/simon987/Much-Assembly-Required/issues/10 DRILL_GATHER_FAST equ 3 ; Cost: 2000kJ - ;; Gather the resource located under the Cubot (1 tick) + ; Gather the resource located under the Cubot (1 tick) DRILL_STATUS_OK equ 0 DRILL_STATUS_FAIL equ 1 -;; Additional info -;; The drill status is either STATUS_OK (0x0000) or STATUS_BUSY = (0x0001). -;; When trying to activate the mining drill while it is busy, it will fail silently +; Additional info +; The drill status is either STATUS_OK (0x0000) or STATUS_BUSY = (0x0001). +; When trying to activate the mining drill while it is busy, it will fail silently -;; Inventory -;; Version 1.0B +; Inventory +; Version 1.0B INV_POLL equ 1 ; Cost: 0kJ - ;; Get the contents of the inventory (B = Item ID, 0x0000 if empty) + ; Get the contents of the inventory (B = Item ID, 0x0000 if empty) INV_CLEAR equ 2 ; Cost: 100kJ - ;; Safely destroy the contents of the inventory + ; Safely destroy the contents of the inventory INV_EMPTY equ 0 -;; Laser -;; Version 1.0B +; Laser +; Version 1.0B LASER_WITHDRAW equ 1 ; Cost: 30kJ - ;; Withdraw the desired item + ; Withdraw the desired item LASER_DEPOSIT equ 2 ; Cost: 30kJ - ;; Withdraw the desired item + ; Withdraw the desired item -;; items that can be used with the Laser +; items that can be used with the Laser ITEM_BIOMASS equ 0x1 -;; Additional Info -;; Specify the desired item by setting the value of the B register with an item ID. +; Additional Info +; Specify the desired item by setting the value of the B register with an item ID. -;; Legs -;; Version 1.0B +; Legs +; Version 1.0B LEGS_SET_DIRECTION equ 1 ; Cost: 20kJ - ;; Set the direction + ; Set the direction LEGS_SET_DIRECTION_AND_WALK equ 2 ; Cost: 100kJ - ;; Set the direction and walk forward + ; Set the direction and walk forward LEGS_DIR_NORTH equ 0 LEGS_DIR_EAST equ 1 LEGS_DIR_SOUTH equ 2 LEGS_DIR_WEST equ 3 -;; Additional Info -;; Specify the direction in the B register +; Additional Info +; Specify the direction in the B register -;; LiDAR -;; Version 1.0B +; LiDAR +; Version 1.0B LIDAR_GET_POS equ 1 ; Cost: 0kJ - ;; Copy the current (x,y) coordinates in the World in the X and Y registers + ; Copy the current (x,y) coordinates in the World in the X and Y registers LIDAR_GET_PATH equ 2 ; Cost: 50kJ - ;; Calculate the shortest path to the specified coordinates and copy it to memory + ; Calculate the shortest path to the specified coordinates and copy it to memory LIDAR_GET_MAP equ 3 ; Cost: 10kJ - ;; Generate the current World's map and copy it to memory + ; Generate the current World's map and copy it to memory LIDAR_GET_WORLD_POS equ 4 ; Cost: 0kJ - ;; Copy the current (x,y) coordinates in the Universe in the X and Y registers + ; Copy the current (x,y) coordinates in the Universe in the X and Y registers -;; Additional Info -;; Theres a lot, see it at: -;; https://github.com/simon987/Much-Assembly-Required/wiki/Hardware:-LiDAR +; Additional Info +; Theres a lot, see it at: +; https://github.com/simon987/Much-Assembly-Required/wiki/Hardware:-LiDAR -;; Keyboard -;; Version NA +; Keyboard +; Version NA KEYBOARD_CLEAR equ 0 ; Cost: 0kJ - ;; Clear the keypress buffer + ; Clear the keypress buffer KEYBOARD_FETCH_KEY equ 1 ; Cost: 0kJ - ;; Reads the oldest keycode from the buffer into the B register and remove it + ; Reads the oldest keycode from the buffer into the B register and remove it -;; keys to use with Keyboard Hardware +; keys to use with Keyboard Hardware KEY_A equ 0x41 KEY_D equ 0x44 KEY_E equ 0x45 @@ -187,71 +206,71 @@ KEY_F equ 0x46 KEY_S equ 0x53 KEY_W equ 0x57 -;; Additional Info -;; The keycodes in game are in hexidecimal but in the url below they're in decimal -;; Keycodes: keycode.info +; Additional Info +; The keycodes in game are in hexidecimal but in the url below they're in decimal +; Keycodes: keycode.info -;; Hologram Projector -;; Version 1.1B +; Hologram Projector +; Version 1.1B HOLO_CLEAR equ 0 ; Cost: 0kJ HOLO_DISPLAY_HEX equ 1 ; Cost: 0kJ, Displays value of B register HOLO_DISPLAY_STRING equ 2 ; Cost: 0kJ, Displays 0-terminated unicode from X register -;; Additional Info -;; Setting Register A to anything other than 0 will cause that value to be displayed -;; Note that the Hologram Projector will clear itself at the end of the tick, -;; it is only necessary to use CLEAR when you want to cancel a DISPLAY command -;; executed within the same tick. +; Additional Info +; Setting Register A to anything other than 0 will cause that value to be displayed +; Note that the Hologram Projector will clear itself at the end of the tick, +; it is only necessary to use CLEAR when you want to cancel a DISPLAY command +; executed within the same tick. -;; Battery -;; Version 1.0B +; Battery +; Version 1.0B BATTERY_POLL equ 1 ; Cost: 0kJ - ;; Copy the current charge of the battery in kJ in the B register + ; Copy the current charge of the battery in kJ in the B register BATTERY_GET_MAX_CAPACITY equ 2 ; Cost: 0kJ - ;; Copy the maximum capacity of the battery in the B register + ; Copy the maximum capacity of the battery in the B register -;; Additional Info -;; Maximum Capacity: 60,000 kJ -;; As of v1.2a, the only way to refill the battery is to use the temporary -;; REFILL = 0xFFFF value in the A register (See #2) +; Additional Info +; Maximum Capacity: 60,000 kJ +; As of v1.2a, the only way to refill the battery is to use the temporary +; REFILL = 0xFFFF value in the A register (See #2) -;; Random Number Generator -;; Version 1.0B +; Random Number Generator +; Version 1.0B RNG_POLL equ 0 ; Cost: 1kJ - ;; Copy a randomly generated word into the B register - ;; Set to 0 just as a placeholder, can be any number + ; Copy a randomly generated word into the B register + ; Set to 0 just as a placeholder, can be any number -;; Additional Info -;; Random number bounds: 0x0000 - 0xFFFF +; Additional Info +; Random number bounds: 0x0000 - 0xFFFF -;; Clock -;; Version 1.0B +; Clock +; Version 1.0B CLOCK_POLL equ 0 ; Cost: 0kJ - ;; Get the current time in ticks since the beginning of the universe as - ;; a 32-bit number stored in B:C (least significant bits in C) - ;; Set to 0 just as a placeholder, can be any number + ; Get the current time in ticks since the beginning of the universe as + ; a 32-bit number stored in B:C (least significant bits in C) + ; Set to 0 just as a placeholder, can be any number -;; Floppy Drive -;; Version 1.0B +; Floppy Drive +; Version 1.0B FLOPPY_POLL equ 1 ; Cost: 0kJ - ;; Get the status of the drive (READY = 0, NO_MEDIA=1) + ; Get the status of the drive (READY = 0, NO_MEDIA=1) FLOPPY_READ_SECTOR equ 2 ; Cost: 1kJ - ;; Reads sector X to CPU ram starting at address Y + ; Reads sector X to CPU ram starting at address Y FLOPPY_WRITE_SECTOR equ 3 ; Cost: 1kJ - ;; Writes sector X from CPU ram starting at Y + ; Writes sector X from CPU ram starting at Y -;; Additional Info -;; The players can upload their own binary data to a floppy disk or -;; download to a file using the floppy buttons in the editor. -;; Floppies contains 80 tracks with 18 sectors per track. That's -;; 1440 sectors of 512 words. (total 1,474,560 bytes / 737,280 words / 1.44MB) -;; Read and write operations are synchronous. Track seeking time is 2ms.* -;; *Seek time is added to the total execution time, which is not yet calculated as of v1.3a +; Additional Info +; The players can upload their own binary data to a floppy disk or +; download to a file using the floppy buttons in the editor. +; Floppies contains 80 tracks with 18 sectors per track. That's +; 1440 sectors of 512 words. (total 1,474,560 bytes / 737,280 words / 1.44MB) +; Read and write operations are synchronous. Track seeking time is 2ms.* +; *Seek time is added to the total execution time, which is not yet calculated as of v1.3a ```
@@ -262,10 +281,11 @@ FLOPPY_WRITE_SECTOR equ 3 ; Cost: 1kJ .text CALL print_battery -;;;;; void print_battery() -; display / print remaing battery charge -; does not require arguments from stack or register prior to calling -; does not overwrite or alter stack or registers +;************************************** +;* print_battery() +;* display / print remaing battery charge +;* does not require arguments from stack or register prior to calling +;* does not overwrite or alter stack or registers print_battery: PUSH A ; store A PUSH B ; store B @@ -281,24 +301,4 @@ print_battery: POP B POP A RET -``` - -### Dump memory to disk -```assembly -HWID_FLOPPY equ 0xB - -;************************************** -;* dumpMemToDisk() -;* Dump entire memory to Floppy Disk -dumpMemToDisk: - MOV X, 0 - MOV Y, 0 -dumpMemToDiskLoop: - MOV A, 3 ; WRITE_SECTOR - HWI HWID_FLOPPY - ADD X, 1 - ADD Y, 512 - CMP X, 128 - JNZ dumpMemToDiskLoop - RET ``` \ No newline at end of file