Skip to content

Commit 01ef6d4

Browse files
committed
stuff
1 parent aa83b0e commit 01ef6d4

File tree

3 files changed

+39
-31
lines changed

3 files changed

+39
-31
lines changed

src/cpu.cpp

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,48 +15,48 @@ enum {
1515
CLD, CLI, CLV, CMP, CPX, CPY, DEC, DEX, DEY, EOR, INC, INX, INY, JMP,
1616
JSR, LDA, LDX, LDY, LSR, NOP, ORA, PHA, PHP, PLA, PLP, ROL, ROR, RTI,
1717
RTS, SBC, SEC, SED, SEI, STA, STX, STY, TAX, TAY, TSX, TXA, TXS, TYA,
18-
SLO, AXS, LAX,
18+
SLO, AXS, LAX, SAX,
1919
XXX,
2020
};
2121

2222
enum { IMP, IMM, ABS, ABSX, ABSY, ZP, ZPX, ZPY, IND, INDX, INDY, ACC, REL};
2323

2424
const int OPCODE_TABLE[256] = {
25-
BRK, ORA, XXX, XXX, XXX, ORA, ASL, XXX, PHP, ORA, ASL, XXX, XXX, ORA, ASL, XXX,
26-
BPL, ORA, XXX, XXX, XXX, ORA, ASL, XXX, CLC, ORA, XXX, XXX, XXX, ORA, ASL, XXX,
25+
BRK, ORA, XXX, XXX, XXX, ORA, ASL, XXX, PHP, ORA, ASL, XXX, XXX, ORA, ASL, SLO,
26+
BPL, ORA, XXX, XXX, XXX, ORA, ASL, XXX, CLC, ORA, XXX, XXX, XXX, ORA, ASL, SLO,
2727
JSR, AND, SLO, XXX, BIT, AND, ROL, XXX, PLP, AND, ROL, XXX, BIT, AND, ROL, XXX,
2828
BMI, AND, XXX, XXX, XXX, AND, ROL, XXX, SEC, AND, XXX, XXX, NOP, AND, ROL, XXX,
2929
RTI, EOR, XXX, XXX, XXX, EOR, LSR, XXX, PHA, EOR, LSR, XXX, JMP, EOR, LSR, XXX,
3030
BVC, EOR, XXX, XXX, XXX, EOR, LSR, XXX, CLI, EOR, XXX, XXX, XXX, EOR, LSR, XXX,
3131
RTS, ADC, XXX, XXX, XXX, ADC, ROR, XXX, PLA, ADC, ROR, XXX, JMP, ADC, ROR, XXX,
3232
BVS, ADC, XXX, XXX, XXX, ADC, ROR, XXX, SEI, ADC, XXX, XXX, XXX, ADC, ROR, XXX,
33-
XXX, STA, XXX, XXX, STY, STA, STX, XXX, DEY, XXX, TXA, XXX, STY, STA, STX, XXX,
33+
XXX, STA, XXX, XXX, STY, STA, STX, XXX, DEY, XXX, TXA, XXX, STY, STA, STX, SAX,
3434
BCC, STA, XXX, XXX, STY, STA, STX, XXX, TYA, STA, TXS, XXX, XXX, STA, XXX, XXX,
3535
LDY, LDA, LDX, XXX, LDY, LDA, LDX, LAX, TAY, LDA, TAX, XXX, LDY, LDA, LDX, LAX,
3636
BCS, LDA, XXX, LAX, LDY, LDA, LDX, XXX, CLV, LDA, TSX, XXX, LDY, LDA, LDX, XXX,
3737
CPY, CMP, XXX, XXX, CPY, CMP, DEC, XXX, INY, CMP, DEX, AXS, CPY, CMP, DEC, XXX,
3838
BNE, CMP, XXX, XXX, XXX, CMP, DEC, XXX, CLD, CMP, XXX, XXX, XXX, CMP, DEC, XXX,
3939
CPX, SBC, XXX, XXX, CPX, SBC, INC, XXX, INX, SBC, NOP, XXX, CPX, SBC, INC, XXX,
40-
BEQ, SBC, XXX, XXX, XXX, SBC, INC, XXX, SED, SBC, XXX, XXX, XXX, SBC, INC, XXX
40+
BEQ, SBC, XXX, XXX, XXX, SBC, INC, XXX, SED, SBC, XXX, XXX, XXX, SBC, INC, XXX,
4141
};
4242

4343
const int MODE_TABLE[256] = {
44-
IMP, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, XXX,
45-
REL, INDY, INDY, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, XXX, XXX, ABSX, ABSX, XXX,
46-
ABS, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, XXX,
47-
REL, INDY, XXX, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, ABSY, ABSX, ABSX, ABSX, XXX,
48-
IMP, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, XXX,
49-
REL, INDY, XXX, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, XXX, XXX, ABSX, ABSX, XXX,
50-
IMP, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, IND, ABS, ABS, XXX,
51-
REL, INDY, XXX, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, XXX, XXX, ABSX, ABSX, XXX,
52-
IMM, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, XXX,
53-
REL, INDY, XXX, XXX, ZPX, ZPX, ZPY, XXX, IMP, ABSY, ACC, XXX, XXX, ABSX, ABSX, XXX,
44+
IMP, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, ABS,
45+
REL, INDY, INDY, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, XXX, XXX, ABSX, ABSX, ABSX,
46+
ABS, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, ABS,
47+
REL, INDY, XXX, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, ABSY, ABSX, ABSX, ABSX, ABSX,
48+
IMP, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, ABS,
49+
REL, INDY, XXX, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, XXX, XXX, ABSX, ABSX, ABSX,
50+
IMP, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, IND, ABS, ABS, ABS,
51+
REL, INDY, XXX, XXX, XXX, ZPX, ZPX, XXX, IMP, ABSY, XXX, XXX, XXX, ABSX, ABSX, ABSX,
52+
IMM, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, ABS,
53+
REL, INDY, XXX, XXX, ZPX, ZPX, ZPY, XXX, IMP, ABSY, ACC, XXX, XXX, ABSX, ABSX, ABSY,
5454
IMM, INDX, IMM, XXX, ZP, ZP, ZP, ZP, IMP, IMM, ACC, XXX, ABS, ABS, ABS, ABS,
55-
REL, INDY, XXX, INDY, ZPX, ZPX, ZPY, XXX, IMP, ABSY, ACC, XXX, ABSX, ABSX, ABSY, XXX,
56-
IMM, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, IMM, ABS, ABS, ABS, XXX,
57-
REL, INDY, XXX, XXX, ZPX, ZPX, ZPX, XXX, IMP, ABSY, ACC, XXX, XXX, ABSX, ABSX, XXX,
58-
IMM, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, XXX,
59-
REL, INDY, XXX, XXX, ZPX, ZPX, ZPX, XXX, IMP, ABSY, ACC, XXX, XXX, ABSX, ABSX, XXX
55+
REL, INDY, XXX, INDY, ZPX, ZPX, ZPY, XXX, IMP, ABSY, ACC, XXX, ABSX, ABSX, ABSY, ABSY,
56+
IMM, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, IMM, ABS, ABS, ABS, ABS,
57+
REL, INDY, XXX, XXX, ZPX, ZPX, ZPX, XXX, IMP, ABSY, ACC, XXX, XXX, ABSX, ABSX, ABSX,
58+
IMM, INDX, XXX, XXX, ZP, ZP, ZP, XXX, IMP, IMM, ACC, XXX, ABS, ABS, ABS, ABS,
59+
REL, INDY, XXX, XXX, ZPX, ZPX, ZPX, XXX, IMP, ABSY, ACC, XXX, XXX, ABSX, ABSX, ABSX,
6060
};
6161

6262

@@ -497,6 +497,9 @@ void CPU::parse(uint8_t opc) {
497497
setflags(FLAG_Z, !a);
498498
setflags(FLAG_N, a & 0x80);
499499
break;
500+
case SAX:
501+
putaddr(addr, a & x);
502+
break;
500503

501504
default:
502505
printf("cpu: unknown opcode: %02x\n", opc);

src/main.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ struct App : fx::App {
261261

262262
int freq = state.reg[c * 7 + 0] | (state.reg[c * 7 + 1] << 8);
263263
float real_freq = freq * 17734472.0f * (1.0f / (18 << 24));
264-
int note = int(57.5f + std::log2(real_freq / 440) * 12);
264+
int note = int(57.5f + std::log2(real_freq / 440) * 12);
265265

266266
fx::printf(23 * 16 + 8, y, note > 0 ? "%c%c%d" : "...",
267267
"CCDDEFFGGAAB"[note % 12],
@@ -272,16 +272,21 @@ struct App : fx::App {
272272
int control = state.reg[c * 7 + 4];
273273
int pw = ((state.reg[c * 7 + 2] >> 4) & 0xf) | ((state.reg[c * 7 + 3] & 0xf) << 4);
274274
fx::printf(27 * 16 + 8, y, "%c%c%c%c %c%c%c%c %02X",
275-
".G"[!!(control & 0x01)],
276-
".S"[!!(control & 0x02)],
277-
".R"[!!(control & 0x04)],
278-
".T"[!!(control & 0x08)],
279-
".T"[!!(control & 0x10)],
280-
".S"[!!(control & 0x20)],
281-
".P"[!!(control & 0x40)],
282-
".N"[!!(control & 0x80)],
275+
"N."[!(control & 0x80)],
276+
"P."[!(control & 0x40)],
277+
"S."[!(control & 0x20)],
278+
"T."[!(control & 0x10)],
279+
"T."[!(control & 0x08)],
280+
"R."[!(control & 0x04)],
281+
"S."[!(control & 0x02)],
282+
"G."[!(control & 0x01)],
283283
pw);
284284
}
285+
int filter = state.reg[24];
286+
fx::printf(27 * 16 + 8, fx::screen_height() - 24, "%c%c%c",
287+
"H."[!(filter & 0x40)],
288+
"B."[!(filter & 0x20)],
289+
"L."[!(filter & 0x10)]);
285290

286291
fx::printf(8, 8, "%s - %d/%d", record.song_name.c_str(), record.song_nr, record.song_count);
287292
fx::printf(8, 8 + 24, "%s", record.song_author.c_str());

src/record.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ struct Header {
4444
} __attribute__((packed));
4545

4646

47-
uint16_t swap(uint16_t v) { return ((v & 0xff) << 8) | ((v >> 8) & 0xff); }
47+
uint32_t swap(uint16_t v) { return __builtin_bswap16(v); }
4848
uint32_t swap(uint32_t v) { return __builtin_bswap32(v); }
4949

5050

@@ -150,7 +150,7 @@ bool Record::load(const char* filename, int nr) {
150150
}
151151

152152
// play song
153-
for (int m = 0; m < 60 * 50 * 10; ++m) {
153+
for (int m = 0; m < 60 * 50 * 10 * speed; ++m) {
154154
State s;
155155
cpu.jsr(h->play_addr, 0, [&s](uint16_t addr, uint8_t value) {
156156
if (addr >= 0xd400 && addr < 0xd400 + s.is_set.size()) {

0 commit comments

Comments
 (0)