; Assembler test for DCPU
; by Markus Persson
set a, 0xbeef ; Assign 0xbeef to register a
set (0x1000), a ; Assign memory at 0x1000 to value of register a
ifn a, (0x1000) ; Compare value of register a to memory at 0x1000 ..
set PC, end ; .. and jump to end if they don't match
set i, 0 ; Init loop counter, for clarity
:nextchar ife (data+i), 0 ; If the character is 0 ..
set PC, end ; .. jump to the end
set (0x8000+i), (data+i) ; Video ram starts at 0x8000, copy char there
add i, 1 ; Increase loop counter
set PC, nextchar ; Loop
:data dat "Hello_world!", 0 ; Zero terminated string
:end sub PC, 1 ; Freeze the CPU forever
OyBBc3NlbWJsZXIgdGVzdCBmb3IgRENQVQo7IGJ5IE1hcmt1cyBQZXJzc29uCgogICAgICAgICAgICAgc2V0IGEsIDB4YmVlZiAgICAgICAgICAgICAgICAgICAgICAgIDsgQXNzaWduIDB4YmVlZiB0byByZWdpc3RlciBhCiAgICAgICAgICAgICBzZXQgKDB4MTAwMCksIGEgICAgICAgICAgICAgICAgICAgICAgOyBBc3NpZ24gbWVtb3J5IGF0IDB4MTAwMCB0byB2YWx1ZSBvZiByZWdpc3RlciBhCiAgICAgICAgICAgICBpZm4gYSwgKDB4MTAwMCkgICAgICAgICAgICAgICAgICAgICAgOyBDb21wYXJlIHZhbHVlIG9mIHJlZ2lzdGVyIGEgdG8gbWVtb3J5IGF0IDB4MTAwMCAuLgogICAgICAgICAgICAgICAgIHNldCBQQywgZW5kICAgICAgICAgICAgICAgICAgICAgIDsgLi4gYW5kIGp1bXAgdG8gZW5kIGlmIHRoZXkgZG9uJ3QgbWF0Y2gKCiAgICAgICAgICAgICBzZXQgaSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBJbml0IGxvb3AgY291bnRlciwgZm9yIGNsYXJpdHkKOm5leHRjaGFyICAgIGlmZSAoZGF0YStpKSwgMCAgICAgICAgICAgICAgICAgICAgICA7IElmIHRoZSBjaGFyYWN0ZXIgaXMgMCAuLgogICAgICAgICAgICAgICAgIHNldCBQQywgZW5kICAgICAgICAgICAgICAgICAgICAgIDsgLi4ganVtcCB0byB0aGUgZW5kCiAgICAgICAgICAgICBzZXQgKDB4ODAwMCtpKSwgKGRhdGEraSkgICAgICAgICAgICAgOyBWaWRlbyByYW0gc3RhcnRzIGF0IDB4ODAwMCwgY29weSBjaGFyIHRoZXJlCiAgICAgICAgICAgICBhZGQgaSwgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBJbmNyZWFzZSBsb29wIGNvdW50ZXIKICAgICAgICAgICAgIHNldCBQQywgbmV4dGNoYXIgICAgICAgICAgICAgICAgICAgICA7IExvb3AKICAKOmRhdGEgICAgICAgIGRhdCAiSGVsbG9fd29ybGQhIiwgMCAgICAgICAgICAgICAgICA7IFplcm8gdGVybWluYXRlZCBzdHJpbmcKCjplbmQgICAgICAgICBzdWIgUEMsIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBGcmVlemUgdGhlIENQVSBmb3JldmVy