Jump to: navigation, search


394 bytes added, 27 January
Introduction: what is the UPD7810?
[[Image:NEC-D7810HG-chip.jpg|thumb|NEC uPD7810 Chip<br>(QUIP-64 package)]]
== Introduction ==
The UPD7810 and UPD7811 are two very similar microcontrollers implemented with NMOS technology. In the Amstrad world they were used as the driving heart of the [[Amstrad/Schneider DMP2000 Printer|DMP-series printers]] and others.
== Disassembler ==
The assembler syntax is rather confusing.
* The opcode names are unneccessariy complicateunneccessarily complicated. For example, instead of using "MOV" for all transfers, there are lots of commands; depending on whether the operands are 8bit or 16bit, registers or immeditiats, immediates, internal or external memory locations, etc.
* Conditionals are pretty unconventional: Unlike as on other CPUs, there are no opcodes like "jump if equal", instead there are opcodes like "compare and if equal then skip next opcode".<br>The next opcode becomes conditionally executed, aside from conditional jumps, this can be also used with other opcodes, so one can program conditional MOV, OR, AND, CALL, etc.<br>Altogether it's pretty cool - once when one is familar with it. The "if-then-skip" requires some reverse thinking since humans would tendencially prefer "if-then-execute".<br>Aside from comparisions there are some other opcodes that set the skip flag, some rotate commands, and decrement commands (where the skip condition is N=-1, not N=0) (to implement a decrement without skip one must put a NOP behind it).<br>There are two other conditional effects: Some opcodes like "LXI HL,imm16" cause any following "LXI HL,imm16" opcode(s) to be skipped; when used after a compare opcode, this can produce a IF-THEN-ELSE effect; it can be also useful when "in-jumping" into a function. Finally, RETS performs are RET and sets the skip-flag (so the next opcode, at the return address/after the CALL opcode, will be skipped)
== Internal ROM and MODE0/MODE1 Pins ==
The processor exists in two versions: 7810 without internal ROM, and 7811 with 4K internal ROM. Normally, one would obviously use the ROM-less 7810 if one doesn't use the internal ROM. However, for some whatever reason, it seems to be quite common to use a 7811 with its internal ROM disabled.
The uPD781x datasheet doesn't contain useful info on how to do this, but the uPD78C1x (CMOS version) datasheet contains at least some fragments on how the MODE0 and MODE1 pins affect internal/external ROM mapping. Judging from that information, the following four combinations seem to be supported:
|HIGH||LOW||'''Internal''' ROM, 4K at 0000h..0FFFh (in this case initialization code in internal ROM can configure Port F for whatever usage by software)||Amstrad [[Amstrad/Schneider DMP2000 Printer|DMP2000]]/[[DMP3000|DMP3000]] Printers (uPD7811 with internal ROM enabled)
|HIGH||HIGH||External ROM, 64K 63.75K at 0000h..FFFFh FEFFh (all 8bit of Port F used as memory address)||Amstrad [[DMP3160]] (with ROM-less uPD7810), Roland TR-909 Drumcomputer (uPD7811 with internal ROM disabled)
* [[Media:UPD7811G Datasheet.pdf|uPD7811G Datasheet]] (8bit CPU with 4096 byte ROM, 256 byte RAM, 44 I/O lines)
* [[Media:UPD78C11A Datasheet.pdf|uPD78C11A Datasheet]] (CMOS version of uPD7811, this datasheet version includes some info fragments on MODE0/MODE1 pins)