We're looking for your comments on how to best organize the wiki's content.
Sends an interrupt to device number
arg1. The device may modify any registers or addresses in memory in response; the exact behavior varies depending on the device.
 Peripheral-controlled (Hardware) interrupts vs. Processor-controlled Interrupts
- Main article: Interrupt
The usage of the term "interrupt" here is different from the usual meaning. Whereas a usual, processor-controlled interrupt causes the DCPU to jump into the Interrupt Service Routine referenced by
IA, a peripheral-controlled interrupt does not change the
PC unless the hardware device does so itself. Instead, the DCPU waits for the device to finish processing before continuing execution.
|Peripheral-controlled interrupt||Processor-controlled interrupt|
|Triggered by|| Software (
|| External hardware, or software (|
|Program execution||Halts until the device finishes|| Jumps to |
|Memory and register access||As defined by the device|| As defined by the code at |
In summary, a peripheral-controlled interrupt is where the computer tells the device, "I'm ready," and lets the device take over. In a processor-controlled interrupt, the device tells the computer, "I've got data for you!" and the computer handles it itself.
In binary machine code, this Special opcode's five-bit representation is:
0b1 0010 (
The instruction has a takes four cycles to execute, plus the device response latency, plus any additional cycles necessary to evaluate the argument. The exact amount of time varies depending on the device.
:load_devices HWN I ; Store the number of devices in I. :load_devices_loop ; Enter the loop SUB I, 1 ; Hardware array is 0 based, so subtract 1. HWQ I ; Query for hardware info. IFE A, [dev_monitor + 1] ; Check if this is the monitor device. Device ID part 1 IFE B, [dev_monitor + 2] ; Check if this is the monitor device. Device ID part 2 SET PC, monitor_loaded ; Monitor has loaded! IFE I, 0 ; If we've reached 0 and still haven't found the monitor SET PC, exit ; Exit the program. SET PC, load_devices_loop ; Otherwise, continue looping. :monitor_loaded SET [dev_monitor], I ; Store the device ID for the monitor. :dump_font SET A, 4 ; Set the hardware interrupt code. 4 is 'dump font data to memory' SET B, [font_old] ; Set the memory location to dump to. HWI [dev_monitor] ; Call HWI and pass in the ID of the monitor location (which we found earlier). :exit :dev_monitor DAT 0, 0xf615, 0x7349, "LEM Monitor", 0 ; Store information relative to the monitor device. :font_old DAT 0x1000
- DCPU-16 specification v1.7 (Copyright 2012 Mojang)