From 5ee43d8a296c1c0c6cc550572f667601b79bc31c Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 23 Jun 2023 10:07:19 +0000 Subject: [PATCH] use new smpc ireg/oreg struct declaration Previously operator[] overloads were used for ireg/oreg indexes. --- Makefile | 19 ++++++++++++++++++- common/intback.hpp | 6 +++--- editor/main_saturn.cpp | 6 +++--- m68k/interrupt.cpp | 7 +++---- m68k/slot.cpp | 4 ++-- scsp/slot.cpp | 6 +++--- scsp/sound_cpu__interrupt.cpp | 4 ++-- scsp/sound_cpu__slot.cpp | 4 ++-- smpc/input_intback.cpp | 13 ++++++------- smpc/input_keyboard.cpp | 12 ++++++------ wordle/main_saturn.cpp | 6 +++--- 11 files changed, 51 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 48f1f5f..3ac891c 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,24 @@ OPT ?= -Og LIBGCC = $(shell $(CC) -print-file-name=libgcc.a) LIB = ./saturn -all: +ALL = +ALL += raytracing/raytracing.cue +ALL += vdp2/nbg0.cue +ALL += vdp1/polygon.cue +ALL += vdp1/normal_sprite.cue +ALL += vdp1/normal_sprite_color_bank.cue +ALL += vdp1/kana.cue +ALL += vdp1/normal_sprite_animated.cue +ALL += vdp1/rgb.cue +ALL += smpc/input_intback.cue +ALL += smpc/input_keyboard.cue +ALL += wordle/wordle.cue +ALL += scsp/slot.cue +ALL += scsp/sound_cpu__slot.cue +ALL += scsp/sound_cpu__interrupt.cue +ALL += editor/main_saturn.cue + +all: $(ALL) include $(LIB)/common.mk diff --git a/common/intback.hpp b/common/intback.hpp index 4138c29..ad69f12 100644 --- a/common/intback.hpp +++ b/common/intback.hpp @@ -47,7 +47,7 @@ namespace intback { - multitaps are not parsed correctly */ while (state.oreg_ix < 32) { - reg8 const& oreg = smpc.reg.oreg[state.oreg_ix++]; + reg8 const& oreg = smpc.reg.OREG[state.oreg_ix++].val; switch (state.fsm) { case PORT_STATUS: state.port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1); @@ -97,10 +97,10 @@ namespace intback { } if ((smpc.reg.SR & SR__NPE) != 0) { - smpc.reg.ireg[0] = INTBACK__IREG0__CONTINUE; + smpc.reg.IREG[0].val = INTBACK__IREG0__CONTINUE; } else { abort: - smpc.reg.ireg[0] = INTBACK__IREG0__BREAK; + smpc.reg.IREG[0].val = INTBACK__IREG0__BREAK; } } } diff --git a/editor/main_saturn.cpp b/editor/main_saturn.cpp index 05956bf..735da08 100644 --- a/editor/main_saturn.cpp +++ b/editor/main_saturn.cpp @@ -277,12 +277,12 @@ void v_blank_in_int() smpc.reg.SF = 0; - smpc.reg.ireg[0] = INTBACK__IREG0__STATUS_DISABLE; - smpc.reg.ireg[1] = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE + smpc.reg.IREG[0].val = INTBACK__IREG0__STATUS_DISABLE; + smpc.reg.IREG[1].val = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE | INTBACK__IREG1__PORT2_15BYTE | INTBACK__IREG1__PORT1_15BYTE ); - smpc.reg.ireg[2] = INTBACK__IREG2__MAGIC; + smpc.reg.IREG[2].val = INTBACK__IREG2__MAGIC; smpc.reg.COMREG = COMREG__INTBACK; } diff --git a/m68k/interrupt.cpp b/m68k/interrupt.cpp index 577f739..2c253ac 100644 --- a/m68k/interrupt.cpp +++ b/m68k/interrupt.cpp @@ -32,8 +32,8 @@ void auto_vector_1(void) scsp.reg.ctrl.STATUS = STATUS__MSLC(slot_ix & 31); scsp_slot& slot = scsp.reg.slot[slot_ix & 31]; - slot.LOOP = LOOP__KYONB | LOOP__SA(frame_addr); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:16] - slot.SA = SA__SA(frame_addr); // start address (bytes) + // start address (bytes) + slot.SA = SA__KYONB | SA__SA(frame_addr); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0] slot.LSA = 0; // loop start address (samples) slot.LEA = frame_size; // loop end address (samples) slot.EG = EG__AR(0x1f) | EG__EGHOLD; // d2r d1r ho ar krs dl rr @@ -59,8 +59,7 @@ void main() for (int i = 0; i < 32; i++) { scsp_slot& slot = scsp.reg.slot[i]; - slot.LOOP = 0; - slot.SA = 0; + slot.SA = 0; // 32-bit access slot.LSA = 0; slot.LEA = 0; slot.EG = 0; diff --git a/m68k/slot.cpp b/m68k/slot.cpp index 0f57ee2..c71302a 100644 --- a/m68k/slot.cpp +++ b/m68k/slot.cpp @@ -16,8 +16,8 @@ void main() slot.LOOP = 0; slot.LOOP |= LOOP__KYONEX; - slot.LOOP = LOOP__KYONB | LOOP__LPCTL__NORMAL | LOOP__SA(sine_start); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:16] - slot.SA = SA__SA(sine_start); // start address (bytes) + // start address (bytes) + slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(sine_start); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0] slot.LSA = 0; // loop start address (samples) slot.LEA = 44100; // loop end address (samples) slot.EG = EG__AR(0x1f) | EG__EGHOLD; // d2r d1r ho ar krs dl rr diff --git a/scsp/slot.cpp b/scsp/slot.cpp index e65c1d9..91d9fc4 100644 --- a/scsp/slot.cpp +++ b/scsp/slot.cpp @@ -11,7 +11,7 @@ void main() while ((smpc.reg.SF & 1) != 0); smpc.reg.SF = 1; smpc.reg.COMREG = COMREG__SNDON; - while (smpc.reg.oreg[31] != 0b00000110); + while (smpc.reg.OREG[31].val != 0b00000110); for (long i = 0; i < 807; i++) { asm volatile ("nop"); } // wait for (way) more than 30µs @@ -21,8 +21,8 @@ void main() copy(&scsp.ram.u32[0], buf, 44100 * 2); scsp_slot& slot = scsp.reg.slot[0]; - slot.LOOP = LOOP__KYONB | LOOP__LPCTL__NORMAL; // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:16] - slot.SA = 0; // start address (bytes) + // start address (bytes) + slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(0); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0] slot.LSA = 0; // loop start address (samples) slot.LEA = 44100; // loop end address (samples) slot.EG = EG__EGHOLD; // d2r d1r ho ar krs dl rr diff --git a/scsp/sound_cpu__interrupt.cpp b/scsp/sound_cpu__interrupt.cpp index 993360b..eeaf710 100644 --- a/scsp/sound_cpu__interrupt.cpp +++ b/scsp/sound_cpu__interrupt.cpp @@ -86,7 +86,7 @@ void init_sound() while ((smpc.reg.SF & 1) != 0); smpc.reg.SF = 1; smpc.reg.COMREG = COMREG__SNDOFF; - while (smpc.reg.oreg[31] != OREG31__SNDOFF); + while (smpc.reg.OREG[31].val != OREG31__SNDOFF); scsp.reg.ctrl.MIXER = MIXER__MEM4MB; @@ -106,7 +106,7 @@ void init_sound() while ((smpc.reg.SF & 1) != 0); smpc.reg.SF = 1; smpc.reg.COMREG = COMREG__SNDON; - while (smpc.reg.oreg[31] != OREG31__SNDON); + while (smpc.reg.OREG[31].val != OREG31__SNDON); } static inline void init_vdp() diff --git a/scsp/sound_cpu__slot.cpp b/scsp/sound_cpu__slot.cpp index 4559011..0f3a772 100644 --- a/scsp/sound_cpu__slot.cpp +++ b/scsp/sound_cpu__slot.cpp @@ -19,7 +19,7 @@ void main() while ((smpc.reg.SF & 1) != 0); smpc.reg.SF = 1; smpc.reg.COMREG = COMREG__SNDOFF; - while (smpc.reg.oreg[31] != OREG31__SNDOFF); + while (smpc.reg.OREG[31].val != OREG31__SNDOFF); scsp.reg.ctrl.MIXER = MIXER__MEM4MB; @@ -39,7 +39,7 @@ void main() while ((smpc.reg.SF & 1) != 0); smpc.reg.SF = 1; smpc.reg.COMREG = COMREG__SNDON; - while (smpc.reg.oreg[31] != OREG31__SNDON); + while (smpc.reg.OREG[31].val != OREG31__SNDON); // do nothing while the sound CPU manipulates the SCSP } diff --git a/smpc/input_intback.cpp b/smpc/input_intback.cpp index 9ea6439..114e64b 100644 --- a/smpc/input_intback.cpp +++ b/smpc/input_intback.cpp @@ -156,7 +156,7 @@ void smpc_int(void) { - both controllers must be "digital pad" controllers */ while (oreg_ix < 31) { - reg8 const& oreg = smpc.reg.oreg[oreg_ix++]; + reg8 const& oreg = smpc.reg.OREG[oreg_ix++].val; switch (intback.fsm++) { case PORT_STATUS: port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1); @@ -168,7 +168,6 @@ void smpc_int(void) { break; case PERIPHERAL_ID: assert(port_connected); - assert(PERIPHERAL_ID__IS_DIGITAL_PAD(oreg)); assert(PERIPHERAL_ID__DATA_SIZE(oreg) == 2); break; case DATA1: @@ -199,9 +198,9 @@ void smpc_int(void) { } if ((smpc.reg.SR & SR__NPE) != 0) { - smpc.reg.ireg[0] = INTBACK__IREG0__CONTINUE; + smpc.reg.IREG[0].val = INTBACK__IREG0__CONTINUE; } else { - smpc.reg.ireg[0] = INTBACK__IREG0__BREAK; + smpc.reg.IREG[0].val = INTBACK__IREG0__BREAK; } } @@ -234,12 +233,12 @@ void v_blank_in_int() { smpc.reg.SF = 0; - smpc.reg.ireg[0] = INTBACK__IREG0__STATUS_DISABLE; - smpc.reg.ireg[1] = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE + smpc.reg.IREG[0].val = INTBACK__IREG0__STATUS_DISABLE; + smpc.reg.IREG[1].val = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE | INTBACK__IREG1__PORT2_15BYTE | INTBACK__IREG1__PORT1_15BYTE ); - smpc.reg.ireg[2] = INTBACK__IREG2__MAGIC; + smpc.reg.IREG[2].val = INTBACK__IREG2__MAGIC; smpc.reg.COMREG = COMREG__INTBACK; } diff --git a/smpc/input_keyboard.cpp b/smpc/input_keyboard.cpp index dfcb6e4..0ca61d7 100644 --- a/smpc/input_keyboard.cpp +++ b/smpc/input_keyboard.cpp @@ -201,7 +201,7 @@ void smpc_int(void) { - multitaps are not parsed correctly */ while (oreg_ix < 32) { - reg8 const& oreg = smpc.reg.oreg[oreg_ix++]; + reg8 const& oreg = smpc.reg.OREG[oreg_ix++].val; switch (intback.fsm) { case PORT_STATUS: port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1); @@ -292,9 +292,9 @@ void smpc_int(void) { } if ((smpc.reg.SR & SR__NPE) != 0) { - smpc.reg.ireg[0] = INTBACK__IREG0__CONTINUE; + smpc.reg.IREG[0].val = INTBACK__IREG0__CONTINUE; } else { - smpc.reg.ireg[0] = INTBACK__IREG0__BREAK; + smpc.reg.IREG[0].val = INTBACK__IREG0__BREAK; } } @@ -327,12 +327,12 @@ void v_blank_in_int() { smpc.reg.SF = 0; - smpc.reg.ireg[0] = INTBACK__IREG0__STATUS_DISABLE; - smpc.reg.ireg[1] = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE + smpc.reg.IREG[0].val = INTBACK__IREG0__STATUS_DISABLE; + smpc.reg.IREG[1].val = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE | INTBACK__IREG1__PORT2_15BYTE | INTBACK__IREG1__PORT1_15BYTE ); - smpc.reg.ireg[2] = INTBACK__IREG2__MAGIC; + smpc.reg.IREG[2].val = INTBACK__IREG2__MAGIC; smpc.reg.COMREG = COMREG__INTBACK; } diff --git a/wordle/main_saturn.cpp b/wordle/main_saturn.cpp index 90405b6..813a6f0 100644 --- a/wordle/main_saturn.cpp +++ b/wordle/main_saturn.cpp @@ -138,12 +138,12 @@ void v_blank_in_int() smpc.reg.SF = 0; - smpc.reg.ireg[0] = INTBACK__IREG0__STATUS_DISABLE; - smpc.reg.ireg[1] = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE + smpc.reg.IREG[0].val = INTBACK__IREG0__STATUS_DISABLE; + smpc.reg.IREG[1].val = ( INTBACK__IREG1__PERIPHERAL_DATA_ENABLE | INTBACK__IREG1__PORT2_15BYTE | INTBACK__IREG1__PORT1_15BYTE ); - smpc.reg.ireg[2] = INTBACK__IREG2__MAGIC; + smpc.reg.IREG[2].val = INTBACK__IREG2__MAGIC; smpc.reg.COMREG = COMREG__INTBACK; }