Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Updated documentation

  • Loading branch information...
commit eee7f254958e5d0cb650790230a286bdf6b57367 1 parent 620eada
@badsector badsector authored
Showing with 9 additions and 7 deletions.
  1. +2 −1  dcpustud.lazhelp
  2. +4 −4 dcpustud.lpi
  3. +3 −2 mainunit.lfm
View
3  dcpustud.lazhelp
@@ -29,7 +29,7 @@
\title[The DCPU-16 Studio Debugger]
\h[1]{The Debugger}
\p{The debugger should be straightforward: load any program and you can run it or step through it. To run in full speed check the \b{Running} checkbox. The emulator can be either cycle exact or always a single instruction per cycle based on the state of the \b{Cycle Exact} checkbox. If that checkbox is checked, the DCPU-16 Studio will disable all monitors (except the screen) and run the program at 100KHz. Otherwise the execution will be synced to the monitors. If the \b{Follow} checkbox is checked, the debugger will show the instruction to be executed next and the last changed value in memory. The emulator also shows the cycles of the last instruction and the current execution flag.}
-\p{You can modify the program's registers while the program is running or paused.}}
+\p{You can modify the program's registers while the program is running or paused. Double clicking on an instruction in the disassembler window will place a breakpoint there (an icon with a hand will appear). If PC is set to an instruction with a breakpoint, the execution will be paused. Additionally, all instructions that were pointed to by PC will have a small blue circle in front of them.}}
\page[dcpu16]{
\title[The DCPU-16 Specifications]
@@ -54,6 +54,7 @@
\li{\b{0x20-0x3F} - literal 0x00-0x1F}}
\p{For details see \b{http:////0x10c.com//doc//dcpu-16.txt}}
\p{The emulator also supports the undocumented 32x16 character screen which starts at memory location $8000 and is 512 (32x16) words. Each word contains the foreground color, background color, character and blinking attribute of a character. The word has the format FFFFBBBBLCCCCCCC. FFFF is the foreground color, BBBB is the background color, L is the blinking bit and C is the ASCII character code. The color palette is the same as the one used in PC textmode programs.}
+\p{A keyboard interface is also provided. The keyboard simply puts the typed character at memory location $9000. If there is already a character there (the value is not zero), the emulator will not replace it but beep instead. The program is expected to set the location to zero to accept a new keystroke.}
}
\page[dcpu16ins]{
View
8 dcpustud.lpi
@@ -86,7 +86,7 @@
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="19" Y="12"/>
- <UsageCount Value="50"/>
+ <UsageCount Value="51"/>
</Unit0>
<Unit1>
<Filename Value="mainunit.pas"/>
@@ -99,7 +99,7 @@
<WindowIndex Value="0"/>
<TopLine Value="148"/>
<CursorPos X="22" Y="162"/>
- <UsageCount Value="50"/>
+ <UsageCount Value="51"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
@@ -111,7 +111,7 @@
<WindowIndex Value="0"/>
<TopLine Value="641"/>
<CursorPos X="33" Y="683"/>
- <UsageCount Value="50"/>
+ <UsageCount Value="51"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@@ -233,7 +233,7 @@
<WindowIndex Value="0"/>
<TopLine Value="22"/>
<CursorPos X="37" Y="35"/>
- <UsageCount Value="33"/>
+ <UsageCount Value="34"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit18>
View
5 mainunit.lfm
@@ -1565,7 +1565,7 @@ object Main: TMain
end
object LazHelp1: TLazHelp
Page = 'main'
- Code = '\page[main]{'#13#10'\title[Welcome]'#13#10'\h[1]{DCPU-16 Studio Help}'#13#10'\p{Welcome to \b{DCPU-16 Studio}, a development tool for the virtual computers in Mojang''s upcoming 0x10^c game. DCPU-16 Studio provides an assembler, disassembler, emulator and debugger for DCPU-16 programs in a graphical interactive interface.}'#13#10'\p{Select a topic from below:}'#13#10'\ul{'#13#10'\li{\a[assembler]{The Assembler}}'#13#10'\li{\a[debugger]{The Debugger}}'#13#10'\li{\a[dcpu16]{DCPU-16 Specification}}'#13#10'\li{\a[dcpu16ins]{DCPU-16 Instructions}}}}'#13#10#13#10'\page[assembler]{'#13#10'\title[The DCPU-16 Studio Assembler]'#13#10'\h[1]{The Assembler}'#13#10'\p{The \b{DCPU-16 Studio Assembler} follows closely the style used by the official DCPU-16 specs with only few differences. In the assembler, labels and instructions can be placed anywhere on a line and multiple instructions can be placed in the same line. Like in the official style, the labels begin with a colon. Hexadecimals must be prefaced with either 0x or $ (the latter is a DCPU-16 Studio extension). Neither the code nor the symbols are case sensitive.}'#13#10'\p{The \b{RESERVE x} pseudoinstruction can be used to reserve x words in the program. The \b{DATA d1, d2, d3, ...} pseudoinstruction can be used to put words and \a[asmstrlit]{string literals} directly in the program code. For compatibility with other assemblers, the pseudoinstructions \b{DAT} and \b{DW} are equivalent to DATA and the pseudoinstruction \b{RESW} is equivalent to RESERVE.}'#13#10'\p{Comments can being with either the semicolon symbol or the C++-like double slash (this is a DCPU-16 Studio extension).}'#13#10'\p{DCPU-16 Studio does not generate the same exactly bytecodes as the official assembler. For example the test program provided by the official specs is shorter a few bytes.}}'#13#10#13#10'\page[asmstrlit]{'#13#10'\title[Assembler String Literals]'#13#10'\h[1]{String Literals}'#13#10'\p{The assembler can insert arbitrary words in the program using the \b{DATA} pseudoinstruction. The instruction accepts numbers and string literals. The string literals are encoded as one word per character and they are written in C-like or Pascal-like syntax using double or single quotes. If you use double quotes, you can use two double quotes to insert a double quote character to the program (similarly for single quotes). For example the string "He said ""Hello""" inserts He said "Hello".}'#13#10'\p{The strings can also contain C-like escape characters with the escapes \b{0} (for NUL), \b{A} (Bell, 0x07), \b{B} (Backspace, 0x08), \b{T} (Tab, 0x09), \b{N} (Newline, 0x0A), \b{V} (Vertical Tab, 0x0B), \b{F} (Formfeed, 0x0C), \b{R} (Carriage Return, 0x0D), \b{E} (Escape, 0x1B) and \b{S} (Space, 0x20). Any other character is inserted as-is, so he escape character can also be used to escape the quotes above.}'#13#10'\p{Note that the syntax highligher only supports double quotes and doesn''t support escaping the quotes.}'#13#10'}'#13#10#13#10'\page[debugger]{'#13#10'\title[The DCPU-16 Studio Debugger]'#13#10'\h[1]{The Debugger}'#13#10'\p{The debugger should be straightforward: load any program and you can run it or step through it. To run in full speed check the \b{Running} checkbox. The emulator can be either cycle exact or always a single instruction per cycle based on the state of the \b{Cycle Exact} checkbox. If that checkbox is checked, the DCPU-16 Studio will disable all monitors (except the screen) and run the program at 100KHz. Otherwise the execution will be synced to the monitors. If the \b{Follow} checkbox is checked, the debugger will show the instruction to be executed next and the last changed value in memory. The emulator also shows the cycles of the last instruction and the current execution flag.}'#13#10'\p{You can modify the program''s registers while the program is running or paused.}}'#13#10#13#10'\page[dcpu16]{'#13#10'\title[The DCPU-16 Specifications]'#13#10'\h[1]{The DCPU-16 Specs}'#13#10'\p{DCPU-16 is a custom virtual 16bit CPU. In DCPU-16 the only accessible unit of data is 16bit words (no individual bytes are accessible). The CPU has 11 registers, 10 of whom can be used as general purpose registers although the CPU uses two of them for special purposes. The registers are named A, B, C, X, Y, Z, I, J, PC, SP and O. The PC register is the program counter, the SP is the stack pointer and the O is the overflow register.}'#13#10'\p{Unlike most CPUs, DCPU-16 does not have an accessible flag register (the O register can hold any value and be used like any other register), although there is a hidden flag that is used to skip the execution of instructions when tests are performed.}'#13#10'\p{Instructions are separated in Basic and Extended. Basic instructions take two parameters while Extended instructions take only one. The type of instruction and the nature of the parameter is encoded in the instruction word (the word pointed to at by the PC register) which can be followed by one or two additional words, based on the parameter.}'#13#10'\p{Basic instructions have the encoding BBBBBBAAAAAAOOOO where OOOO is the instruction opcode and AAAAAA and BBBBBB are the parameters. Extended instructions have the encoding AAAAAAOOOOOO0000 where OOOOOO is the instruction opcode and AAAAAA is the parameter to the instruction (the first four bits are set to zero).}'#13#10'\p{The parameters have the following encoding, based on their range (values inside brackets mean that the value is used to access the memory):}'#13#10'\ul{'#13#10'\li{\b{0x00-0x07} - register (A, B, C, X, Y, Z, I or J)}'#13#10'\li{\b{0x08-0x0F} - /[register/] (memory at the address stored in the register)}'#13#10'\li{\b{0x10-0x17} - /[offset + register/] (offset is stored after the instruction)}'#13#10'\li{\b{0x18} - POP (pop from the stack by using the value at the address stored in SP and increasing the value of SP). Note that this can be used in combination with \b{SET} to pop values from the stack and return from subroutines by storing the value popped to the \b{PC} register.}'#13#10'\li{\b{0x19} - PEEK (peek the value at the address stored in SP but do not modify SP)}'#13#10'\li{\b{0x1A} - PUSH (push to the stack by decreasing the value of SP and using the decreased value as the address to store the new value). Note that this assumes that the parameter is used as the destination for some operation). This can be used in combination with \b{SET} to push values to the stack.}'#13#10'\li{\b{0x1B} - the SP register''s value}'#13#10'\li{\b{0x1C} - the PC register''s value. This can be used to jump around the code and return from subroutines when used with \b{POP} above.}'#13#10'\li{\b{0x1D} - the O register''s value}'#13#10'\li{\b{0x1E} - /[address/] (the address is stored after the instruction)}'#13#10'\li{\b{0x1F} - literal (the literal is stored after the instruction)}'#13#10'\li{\b{0x20-0x3F} - literal 0x00-0x1F}}'#13#10'\p{For details see \b{http:////0x10c.com//doc//dcpu-16.txt}}'#13#10'\p{The emulator also supports the undocumented 32x16 character screen which starts at memory location $8000 and is 512 (32x16) words. Each word contains the foreground color, background color, character and blinking attribute of a character. The word has the format FFFFBBBBLCCCCCCC. FFFF is the foreground color, BBBB is the background color, L is the blinking bit and C is the ASCII character code. The color palette is the same as the one used in PC textmode programs.}'#13#10'}'#13#10#13#10'\page[dcpu16ins]{'#13#10'\title[The DCPU-16 Instruction Set]'#13#10'\h[1]{DCPU-16 Instructions}'#13#10'\p{The DCPU-16 instruction set is as follows:}'#13#10'\ul{'#13#10'\li{\b{SET a, b} - set a to b}'#13#10'\li{\b{ADD a, b} - set a to a + b, set O to 0x0001 if there is an overflow}'#13#10'\li{\b{SUB a, b} - set a to a - b, set O to 0xFFFF if there is an underflow}'#13#10'\li{\b{MUL a, b} - set a to a * b, set O to ((a * b) >> 16) & 0xFFFF}'#13#10'\li{\b{DIV a, b} - set a to a // b, set O to ((a << 16) // b) & 0xFFFF. If b is 0 then both a and O are set to 0.}'#13#10'\li{\b{MOD a, b} - set a to a % b. If b is 0 then a is set to 0.}'#13#10'\li{\b{SHL a, b} - set a to a << b, set O to ((a << b) >> 16) & 0xFFFF}'#13#10'\li{\b{SHR a, b} - set a to a >> b, set O to ((a << 16) >> b) & 0xFFFF}'#13#10'\li{\b{AND a, b} - set a to a & b}'#13#10'\li{\b{BOR a, b} - set a to a | b}'#13#10'\li{\b{XOR a, b} - set a to a ^ b}'#13#10'\li{\b{IFE a, b} - executes the next instruction only if a == b}'#13#10'\li{\b{IFN a, b} - executes the next instruction only if a != b}'#13#10'\li{\b{IFG a, b} - executes the next instruction only if a > b}'#13#10'\li{\b{IFB a, b} - executes the next instruction only if (a & b) != 0}'#13#10'\li{\b{JSR addr} - pushes the current PC to the stack and sets it to addr. Can be used to call subroutines}}'#13#10'\p{All word reads take one cycle (this includes instruction reads). The instructions ADD, SUB, MUL, SHR, JSR, IFE, IFN, IFG and IFB take an additional cycle (if the test fail for the last four, another extra cycle is used). The instructions DIV and MOD take two additional cycles.}'#13#10'}'#13#10
+ Code = '\page[main]{'#13#10'\title[Welcome]'#13#10'\h[1]{DCPU-16 Studio Help}'#13#10'\p{Welcome to \b{DCPU-16 Studio}, a development tool for the virtual computers in Mojang''s upcoming 0x10^c game. DCPU-16 Studio provides an assembler, disassembler, emulator and debugger for DCPU-16 programs in a graphical interactive interface.}'#13#10'\p{Select a topic from below:}'#13#10'\ul{'#13#10'\li{\a[assembler]{The Assembler}}'#13#10'\li{\a[debugger]{The Debugger}}'#13#10'\li{\a[dcpu16]{DCPU-16 Specification}}'#13#10'\li{\a[dcpu16ins]{DCPU-16 Instructions}}}}'#13#10#13#10'\page[assembler]{'#13#10'\title[The DCPU-16 Studio Assembler]'#13#10'\h[1]{The Assembler}'#13#10'\p{The \b{DCPU-16 Studio Assembler} follows closely the style used by the official DCPU-16 specs with only few differences. In the assembler, labels and instructions can be placed anywhere on a line and multiple instructions can be placed in the same line. Like in the official style, the labels begin with a colon. Hexadecimals must be prefaced with either 0x or $ (the latter is a DCPU-16 Studio extension). Neither the code nor the symbols are case sensitive.}'#13#10'\p{The \b{RESERVE x} pseudoinstruction can be used to reserve x words in the program. The \b{DATA d1, d2, d3, ...} pseudoinstruction can be used to put words and \a[asmstrlit]{string literals} directly in the program code. For compatibility with other assemblers, the pseudoinstructions \b{DAT} and \b{DW} are equivalent to DATA and the pseudoinstruction \b{RESW} is equivalent to RESERVE.}'#13#10'\p{Comments can being with either the semicolon symbol or the C++-like double slash (this is a DCPU-16 Studio extension).}'#13#10'\p{DCPU-16 Studio does not generate the same exactly bytecodes as the official assembler. For example the test program provided by the official specs is shorter a few bytes.}}'#13#10#13#10'\page[asmstrlit]{'#13#10'\title[Assembler String Literals]'#13#10'\h[1]{String Literals}'#13#10'\p{The assembler can insert arbitrary words in the program using the \b{DATA} pseudoinstruction. The instruction accepts numbers and string literals. The string literals are encoded as one word per character and they are written in C-like or Pascal-like syntax using double or single quotes. If you use double quotes, you can use two double quotes to insert a double quote character to the program (similarly for single quotes). For example the string "He said ""Hello""" inserts He said "Hello".}'#13#10'\p{The strings can also contain C-like escape characters with the escapes \b{0} (for NUL), \b{A} (Bell, 0x07), \b{B} (Backspace, 0x08), \b{T} (Tab, 0x09), \b{N} (Newline, 0x0A), \b{V} (Vertical Tab, 0x0B), \b{F} (Formfeed, 0x0C), \b{R} (Carriage Return, 0x0D), \b{E} (Escape, 0x1B) and \b{S} (Space, 0x20). Any other character is inserted as-is, so he escape character can also be used to escape the quotes above.}'#13#10'\p{Note that the syntax highligher only supports double quotes and doesn''t support escaping the quotes.}'#13#10'}'#13#10#13#10'\page[debugger]{'#13#10'\title[The DCPU-16 Studio Debugger]'#13#10'\h[1]{The Debugger}'#13#10'\p{The debugger should be straightforward: load any program and you can run it or step through it. To run in full speed check the \b{Running} checkbox. The emulator can be either cycle exact or always a single instruction per cycle based on the state of the \b{Cycle Exact} checkbox. If that checkbox is checked, the DCPU-16 Studio will disable all monitors (except the screen) and run the program at 100KHz. Otherwise the execution will be synced to the monitors. If the \b{Follow} checkbox is checked, the debugger will show the instruction to be executed next and the last changed value in memory. The emulator also shows the cycles of the last instruction and the current execution flag.}'#13#10'\p{You can modify the program''s registers while the program is running or paused. Double clicking on an instruction in the disassembler window will place a breakpoint there (an icon with a hand will appear). If PC is set to an instruction with a breakpoint, the execution will be paused. Additionally, all instructions that were pointed to by PC will have a small blue circle in front of them.}}'#13#10#13#10'\page[dcpu16]{'#13#10'\title[The DCPU-16 Specifications]'#13#10'\h[1]{The DCPU-16 Specs}'#13#10'\p{DCPU-16 is a custom virtual 16bit CPU. In DCPU-16 the only accessible unit of data is 16bit words (no individual bytes are accessible). The CPU has 11 registers, 10 of whom can be used as general purpose registers although the CPU uses two of them for special purposes. The registers are named A, B, C, X, Y, Z, I, J, PC, SP and O. The PC register is the program counter, the SP is the stack pointer and the O is the overflow register.}'#13#10'\p{Unlike most CPUs, DCPU-16 does not have an accessible flag register (the O register can hold any value and be used like any other register), although there is a hidden flag that is used to skip the execution of instructions when tests are performed.}'#13#10'\p{Instructions are separated in Basic and Extended. Basic instructions take two parameters while Extended instructions take only one. The type of instruction and the nature of the parameter is encoded in the instruction word (the word pointed to at by the PC register) which can be followed by one or two additional words, based on the parameter.}'#13#10'\p{Basic instructions have the encoding BBBBBBAAAAAAOOOO where OOOO is the instruction opcode and AAAAAA and BBBBBB are the parameters. Extended instructions have the encoding AAAAAAOOOOOO0000 where OOOOOO is the instruction opcode and AAAAAA is the parameter to the instruction (the first four bits are set to zero).}'#13#10'\p{The parameters have the following encoding, based on their range (values inside brackets mean that the value is used to access the memory):}'#13#10'\ul{'#13#10'\li{\b{0x00-0x07} - register (A, B, C, X, Y, Z, I or J)}'#13#10'\li{\b{0x08-0x0F} - /[register/] (memory at the address stored in the register)}'#13#10'\li{\b{0x10-0x17} - /[offset + register/] (offset is stored after the instruction)}'#13#10'\li{\b{0x18} - POP (pop from the stack by using the value at the address stored in SP and increasing the value of SP). Note that this can be used in combination with \b{SET} to pop values from the stack and return from subroutines by storing the value popped to the \b{PC} register.}'#13#10'\li{\b{0x19} - PEEK (peek the value at the address stored in SP but do not modify SP)}'#13#10'\li{\b{0x1A} - PUSH (push to the stack by decreasing the value of SP and using the decreased value as the address to store the new value). Note that this assumes that the parameter is used as the destination for some operation). This can be used in combination with \b{SET} to push values to the stack.}'#13#10'\li{\b{0x1B} - the SP register''s value}'#13#10'\li{\b{0x1C} - the PC register''s value. This can be used to jump around the code and return from subroutines when used with \b{POP} above.}'#13#10'\li{\b{0x1D} - the O register''s value}'#13#10'\li{\b{0x1E} - /[address/] (the address is stored after the instruction)}'#13#10'\li{\b{0x1F} - literal (the literal is stored after the instruction)}'#13#10'\li{\b{0x20-0x3F} - literal 0x00-0x1F}}'#13#10'\p{For details see \b{http:////0x10c.com//doc//dcpu-16.txt}}'#13#10'\p{The emulator also supports the undocumented 32x16 character screen which starts at memory location $8000 and is 512 (32x16) words. Each word contains the foreground color, background color, character and blinking attribute of a character. The word has the format FFFFBBBBLCCCCCCC. FFFF is the foreground color, BBBB is the background color, L is the blinking bit and C is the ASCII character code. The color palette is the same as the one used in PC textmode programs.}'#13#10'\p{A keyboard interface is also provided. The keyboard simply puts the typed character at memory location $9000. If there is already a character there (the value is not zero), the emulator will not replace it but beep instead. The program is expected to set the location to zero to accept a new keystroke.}'#13#10'}'#13#10#13#10'\page[dcpu16ins]{'#13#10'\title[The DCPU-16 Instruction Set]'#13#10'\h[1]{DCPU-16 Instructions}'#13#10'\p{The DCPU-16 instruction set is as follows:}'#13#10'\ul{'#13#10'\li{\b{SET a, b} - set a to b}'#13#10'\li{\b{ADD a, b} - set a to a + b, set O to 0x0001 if there is an overflow}'#13#10'\li{\b{SUB a, b} - set a to a - b, set O to 0xFFFF if there is an underflow}'#13#10'\li{\b{MUL a, b} - set a to a * b, set O to ((a * b) >> 16) & 0xFFFF}'#13#10'\li{\b{DIV a, b} - set a to a // b, set O to ((a << 16) // b) & 0xFFFF. If b is 0 then both a and O are set to 0.}'#13#10'\li{\b{MOD a, b} - set a to a % b. If b is 0 then a is set to 0.}'#13#10'\li{\b{SHL a, b} - set a to a << b, set O to ((a << b) >> 16) & 0xFFFF}'#13#10'\li{\b{SHR a, b} - set a to a >> b, set O to ((a << 16) >> b) & 0xFFFF}'#13#10'\li{\b{AND a, b} - set a to a & b}'#13#10'\li{\b{BOR a, b} - set a to a | b}'#13#10'\li{\b{XOR a, b} - set a to a ^ b}'#13#10'\li{\b{IFE a, b} - executes the next instruction only if a == b}'#13#10'\li{\b{IFN a, b} - executes the next instruction only if a != b}'#13#10'\li{\b{IFG a, b} - executes the next instruction only if a > b}'#13#10'\li{\b{IFB a, b} - executes the next instruction only if (a & b) != 0}'#13#10'\li{\b{JSR addr} - pushes the current PC to the stack and sets it to addr. Can be used to call subroutines}}'#13#10'\p{All word reads take one cycle (this includes instruction reads). The instructions ADD, SUB, MUL, SHR, JSR, IFE, IFN, IFG and IFB take an additional cycle (if the test fail for the last four, another extra cycle is used). The instructions DIV and MOD take two additional cycles.}'#13#10'}'#13#10
left = 568
top = 240
end
@@ -1603,7 +1603,7 @@ object Main: TMain
'\title[The DCPU-16 Studio Debugger]'
'\h[1]{The Debugger}'
'\p{The debugger should be straightforward: load any program and you can run it or step through it. To run in full speed check the \b{Running} checkbox. The emulator can be either cycle exact or always a single instruction per cycle based on the state of the \b{Cycle Exact} checkbox. If that checkbox is checked, the DCPU-16 Studio will disable all monitors (except the screen) and run the program at 100KHz. Otherwise the execution will be synced to the monitors. If the \b{Follow} checkbox is checked, the debugger will show the instruction to be executed next and the last changed value in memory. The emulator also shows the cycles of the last instruction and the current execution flag.}'
- '\p{You can modify the program''s registers while the program is running or paused.}}'
+ '\p{You can modify the program''s registers while the program is running or paused. Double clicking on an instruction in the disassembler window will place a breakpoint there (an icon with a hand will appear). If PC is set to an instruction with a breakpoint, the execution will be paused. Additionally, all instructions that were pointed to by PC will have a small blue circle in front of them.}}'
''
'\page[dcpu16]{'
'\title[The DCPU-16 Specifications]'
@@ -1628,6 +1628,7 @@ object Main: TMain
'\li{\b{0x20-0x3F} - literal 0x00-0x1F}}'
'\p{For details see \b{http:////0x10c.com//doc//dcpu-16.txt}}'
'\p{The emulator also supports the undocumented 32x16 character screen which starts at memory location $8000 and is 512 (32x16) words. Each word contains the foreground color, background color, character and blinking attribute of a character. The word has the format FFFFBBBBLCCCCCCC. FFFF is the foreground color, BBBB is the background color, L is the blinking bit and C is the ASCII character code. The color palette is the same as the one used in PC textmode programs.}'
+ '\p{A keyboard interface is also provided. The keyboard simply puts the typed character at memory location $9000. If there is already a character there (the value is not zero), the emulator will not replace it but beep instead. The program is expected to set the location to zero to accept a new keystroke.}'
'}'
''
'\page[dcpu16ins]{'
Please sign in to comment.
Something went wrong with that request. Please try again.