diff --git a/docs/instructions.md b/docs/instructions.md new file mode 100644 index 0000000..af5662a --- /dev/null +++ b/docs/instructions.md @@ -0,0 +1,53 @@ +# Fox32 instructions + +This file describes every Fox32 instruction in detail. For a general +description of the Fox32 CPU, see cpu.md. + +## NOP: no operation +## ADD: add +## MUL: multiply (unsigned) +## AND: bitwise AND +## SLA: shift left +## SRA: shift right arithmetic (with sign extension) +## BSE: bit set +## CMP: compare +## JMP: absolute jump +## RJMP: relative jump +## PUSH: push value to stack +## IN: get input from I/O bus +## ISE: set interrupt enable flag +## MSE: set MMU enable flag +## HALT: halt CPU +## INC: increment (add 1) +## OR: bitwise OR +## IMUL: multiply (signed) +## SRL: shift right logical (with zero extension) +## BCL: bit clear +## MOV: move value +## CALL: absolute call +## RCALL: relative call +## POP: pop value from stack +## OUT: output on I/O bus +## ICL: clear interrupt enable flag +## MCL: clear MMU enable flag +## BRK: debug breakpoint +## SUB: subtract +## DIV: divide (unsigned) +## XOR: bitwise XOR +## ROL: rotate left +## ROR: rotate right +## BTS: test if bit set +## MOVZ: move value and clear upper bits in target register +## LOOP: absolute loop +## RLOOP: relative loop +## RET: return from function +## INT: raise interrupt +## TLB: flush TLB and set page directory pointer +## DEC: decrement (subtract 1) +## REM: calculate remainder of division (unsigned) +## NOT: bitwise NOT +## IDIV: divide (signed) +## IREM: remainder (signed) +## RTA: calculate address relative to instruction pointer +## RETI: return from interrupt +## FLP: flush page from TLB diff --git a/docs/io_bus.md b/docs/io_bus.md new file mode 100644 index 0000000..65c77ef --- /dev/null +++ b/docs/io_bus.md @@ -0,0 +1,15 @@ +# I/O bus + +| start | end | description +|------------|------------|--------------------------------------- +| 0x00000000 | 0x00000000 | debug serial port +| 0x80000000 | 0x8000031f | display overlay +| 0x80000400 | 0x80000401 | mouse +| 0x80000500 | 0x80000500 | keyboard +| 0x80000600 | 0x80000600 | audio +| 0x80000700 | 0x80000706 | RTC +| 0x80001000 | 0x80005003 | disk +| 0x80010000 | 0x80010000 | power off + + +TODO: details diff --git a/docs/memory.md b/docs/memory.md new file mode 100644 index 0000000..8a215e0 --- /dev/null +++ b/docs/memory.md @@ -0,0 +1,8 @@ +# Memory + +The memory in a Fox32 system is laid out as follows: + +| start | end | size | description +|------------|------------|---------|--------------------------------------- +| 0x00000000 | 0x04000000 | 64 MiB | RAM +| 0xf0000000 | 0xf0080000 | 512 KiB | ROM