comparison upd78k2_util.c @ 2706:0bd48217941a

Get uPD78K/II core done enough to run the LaserActive firmware main loop
author Michael Pavone <pavone@retrodev.com>
date Sun, 06 Jul 2025 20:09:32 -0700
parents ab2d916380bf
children
comparison
equal deleted inserted replaced
2705:ab2d916380bf 2706:0bd48217941a
26 case 0x21: 26 case 0x21:
27 case 0x26: 27 case 0x26:
28 return upd->port_mode[address & 0x7]; 28 return upd->port_mode[address & 0x7];
29 case 0xC4: 29 case 0xC4:
30 return upd->mm; 30 return upd->mm;
31 case 0xE0:
32 return upd->if0;
33 case 0xE1:
34 return upd->if0 >> 8;
35 case 0xE4:
36 return upd->mk0;
37 case 0xE5:
38 return upd->mk0 >> 8;
39 case 0xE8:
40 return upd->pr0;
41 case 0xE9:
42 return upd->pr0 >> 8;
43 case 0xEC:
44 return upd->ism0;
45 case 0xED:
46 return upd->ism0 >> 8;
47 case 0xF4:
48 return upd->intm0;
49 case 0xF5:
50 return upd->intm1;
51 case 0xF8:
52 return upd->ist;
31 default: 53 default:
32 fprintf(stderr, "Unhandled uPD78237 SFR read %02X\n", address); 54 fprintf(stderr, "Unhandled uPD78237 SFR read %02X\n", address);
33 return 0xFF; 55 return 0xFF;
34 } 56 }
35 } 57 }
48 case 0x26: 70 case 0x26:
49 upd->port_mode[address & 7] = value; 71 upd->port_mode[address & 7] = value;
50 break; 72 break;
51 case 0xC4: 73 case 0xC4:
52 upd->mm = value; 74 upd->mm = value;
75 break;
76 case 0xE0:
77 upd->if0 &= 0xFF00;
78 upd->if0 |= value;
79 break;
80 case 0xE1:
81 upd->if0 &= 0xFF;
82 upd->if0 |= value << 8;
83 break;
84 case 0xE4:
85 upd->mk0 &= 0xFF00;
86 upd->mk0 |= value;
87 break;
88 case 0xE5:
89 upd->mk0 &= 0xFF;
90 upd->mk0 |= value << 8;
91 break;
92 case 0xE8:
93 upd->pr0 &= 0xFF00;
94 upd->pr0 |= value;
95 break;
96 case 0xE9:
97 upd->pr0 &= 0xFF;
98 upd->pr0 |= value << 8;
99 break;
100 case 0xEC:
101 upd->ism0 &= 0xFF00;
102 upd->ism0 |= value;
103 break;
104 case 0xED:
105 upd->ism0 &= 0xFF;
106 upd->ism0 |= value << 8;
107 break;
108 case 0xF4:
109 upd->intm0 = value;
110 break;
111 case 0xF5:
112 upd->intm1 = value;
113 break;
114 case 0xF8:
115 upd->ist = value;
53 break; 116 break;
54 default: 117 default:
55 fprintf(stderr, "Unhandled uPD78237 SFR write %02X: %02X\n", address, value); 118 fprintf(stderr, "Unhandled uPD78237 SFR write %02X: %02X\n", address, value);
56 break; 119 break;
57 } 120 }
73 upd78k2_context *context = calloc(1, sizeof(upd78k2_context)); 136 upd78k2_context *context = calloc(1, sizeof(upd78k2_context));
74 context->opts = opts; 137 context->opts = opts;
75 return context; 138 return context;
76 } 139 }
77 140
141 void upd78k2_sync_cycle(upd78k2_context *upd, uint32_t target_cycle)
142 {
143 //TODO: implement me
144 }