Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you write to [PC]?

Tags:

dcpu-16

According to the DCPU specification, the only time a SET instruction fails is if the a value is a literal.

So would the following work?

SET [PC],0x1000

A more useful version would be setting an offset of PC, so a rather strange infinite loop would be:

SET [PC+0x2],0x89C3 ; = SUB PC,0x2
like image 679
Matt Avatar asked Apr 05 '12 15:04

Matt


People also ask

Can you use a stylus on a mouse pad?

To successfully draw with a stylus pen on a trackpad, keep the stylus in your dominate hand and lightly drag it on the trackpad until your cursor appears where you would like to begin to draw on the canvas. You do NOT need to press hard.

How do I write on my screen?

Google has a new Android app designed to capture your on-screen penmanship. The app, called Google Handwriting Input, is designed to allow users to "write" on a smartphone or tablet touchscreen. It automatically interprets letters and transforms them into standard digital text.

How do you write on a mouse?

With the Tablet PC pen or your mouse, draw or write notes directly on the surface of the page. on the Writing Tools toolbar, position the pointer where you want to add space, and then drag the arrow in the direction indicated by the pointer. on the Writing Tools toolbar, and then drag the pointer across the ink.


2 Answers

Probably (= I think it should work but I didn't try).

This is called "self modifying" code and was quite common the 8bit era because of a) limited RAM and b) limited code size. Code like that is very powerful but error prone. If your code base grows, this can quickly become a maintenance nightmare.

Famous use cases:

  1. Windows 95 used code like this to build graphics rendering code on the stack.
  2. Viruses and trojans use this as an attack vector (write code on the stack or manipulate return addresses to simluate a JMP)
  3. Simulate switch statements on the C64
like image 89
Aaron Digulla Avatar answered Nov 10 '22 23:11

Aaron Digulla


There's no value for [PC], so I'm guessing you need to do it in a round-about way by storing PC in something you can use as a pointer (registry or memory).

        SET  A , PC
        SET [A+3], 0x8dc3 ; SUB PC, 3 (if A can't be changed from outside SUB PC,2 works too.)
like image 27
Piotr Avatar answered Nov 10 '22 22:11

Piotr