GE-115 Emulator
An Emulator of the General Electrics GE-115 computer
alu_dec.h
Go to the documentation of this file.
1
40#ifndef ALU_DEC_H
41#define ALU_DEC_H
42
43#include <stdint.h>
44#include "ge.h"
45#include "alu_cc.h"
46
47/*
48 * Packed arithmetic (§5.6.1)
49 * addr = address of RIGHTMOST byte; len = L (field = L+1 bytes).
50 */
51
53void alu_ap (struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen);
54
56void alu_sp (struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen);
57
61void alu_mp (struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen);
62
67void alu_dp (struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen);
68
71void alu_cmp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen);
72
74void alu_mvp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen);
75
76/*
77 * Format conversion (§5.5.3.4-5.5.3.5 and §5.6.2)
78 * For PK/UPK: dst/src addresses are also rightmost byte; lens are L (L+1 bytes).
79 * CC not affected by PK/UPK; affected by PKS/UPKS.
80 */
81
83void alu_pk (struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen);
84
87void alu_upk(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen);
88
91void alu_pks(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen);
92
95void alu_upks(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen);
96
97/*
98 * Edit (§5.5.3.6)
99 */
100
111void alu_edt(struct ge *ge, uint16_t pattern, uint8_t plen, uint16_t src);
112
113#endif /* ALU_DEC_H */
void alu_mvp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen)
MVP 0xE8 Move Packed: op1 = op2 (sign preserved from op2); CC set.
Definition alu_dec.c:614
void alu_sp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen)
SP 0xEB Subtract Packed: op1 = op1 - op2; CC set.
Definition alu_dec.c:324
void alu_upks(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen)
UPKS 0xEF Unpack with Sign: packed op2 → zoned op1; zone always 0x4.
Definition alu_dec.c:804
void alu_upk(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen)
UPK 0xD8 Unpack: packed op2 → zoned op1 (no sign processing; zone of each result byte is taken from t...
Definition alu_dec.c:728
void alu_pks(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen)
PKS 0xEE Pack with Sign: zoned op2 → packed op1; sign from zone of rightmost source byte (zone 0xA → ...
Definition alu_dec.c:761
void alu_mp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen)
MP 0xEC Multiply Packed: op1 = op1 * op2; CC set.
Definition alu_dec.c:358
void alu_cmp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen)
CMP 0xE9 Compare Packed (algebraic, no operand change); CC set.
Definition alu_dec.c:559
void alu_pk(struct ge *ge, uint16_t dst, uint8_t dlen, uint16_t src, uint8_t slen)
PK 0xDA Pack: zoned op2 → packed op1 (no sign processing).
Definition alu_dec.c:682
void alu_edt(struct ge *ge, uint16_t pattern, uint8_t plen, uint16_t src)
EDT 0xDE Edit packed source into pattern at op1.
Definition alu_dec.c:868
void alu_ap(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen)
AP 0xEA Add Packed: op1 = op1 + op2; CC set.
Definition alu_dec.c:253
void alu_dp(struct ge *ge, uint16_t a, uint8_t alen, uint16_t b, uint8_t blen)
DP 0xED Divide Packed: op1[left L1-L2 chars] = quotient, op1[right L2+1 chars] = remainder; CC set.
Definition alu_dec.c:459
The entire state of the emulated system, including registers, memory, peripherals and timings.
Definition ge.h:96