Mercurial > repos > blastem
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 } |