150
151
/* RasterCycle */
151
152
|| SMW_B(m, (BYTE)(VICII_RASTER_CYCLE(maincpu_clk))) < 0
153
|| SMW_W(m, (WORD)(VICII_RASTER_Y(maincpu_clk))) < 0)
154
|| SMW_W(m, (WORD)(VICII_RASTER_Y(maincpu_clk))) < 0) {
156
for (i = 0; i < 0x50; i++)
158
for (i = 0; i < 0x50; i++) {
158
if (SMW_B(m, vicii.regs[i]) < 0)
160
if (SMW_B(m, vicii.regs[i]) < 0) {
192
196
|| SMW_W(m, (WORD)vicii.memptr) < 0
194
|| SMW_B(m, (BYTE)vicii.irq_status) < 0)
198
|| SMW_B(m, (BYTE)vicii.irq_status) < 0) {
197
202
for (i = 0; i < 8; i++) {
199
204
/* SpriteXMemPtr */
201
(BYTE)vicii.raster.sprite_status->sprites[i].memptr) < 0
205
|| SMW_B(m, (BYTE)vicii.raster.sprite_status->sprites[i].memptr) < 0
202
206
/* SpriteXMemPtrInc */
204
(BYTE)vicii.raster.sprite_status->sprites[i].memptr_inc) < 0
207
|| SMW_B(m, (BYTE)vicii.raster.sprite_status->sprites[i].memptr_inc) < 0
205
208
/* SpriteXExpFlipFlop */
207
(BYTE)vicii.raster.sprite_status->sprites[i].exp_flag) < 0)
209
|| SMW_B(m, (BYTE)vicii.raster.sprite_status->sprites[i].exp_flag) < 0) {
212
215
/* FetchEventTick */
213
216
|| SMW_DW(m, vicii.fetch_clk - maincpu_clk) < 0
214
217
/* FetchEventType */
215
|| SMW_B(m, (BYTE)vicii.fetch_idx) < 0)
218
|| SMW_B(m, (BYTE)vicii.fetch_idx) < 0) {
218
/* Added in version 1.1 of the snapshot module */
219
/* using "ram_base-ram" is F***ing bullshit - what when external memory
220
is not mapped anywhere in ram[]? We should rather use some more generic
221
configuration info. But as we use it above in V1.0... :-(
222
/* Added in version 1.1 of the snapshot module */
223
/* using "ram_base-ram" is F***ing bullshit - what when external memory
224
is not mapped anywhere in ram[]? We should rather use some more generic
225
configuration info. But as we use it above in V1.0... :-(
225
229
|| SMW_DW(m, (DWORD)(vicii.ram_base_phi2 - mem_ram)) < 0
227
|| SMW_W(m, (WORD)vicii.vbank_phi2) < 0)
231
|| SMW_W(m, (WORD)vicii.vbank_phi2) < 0) {
230
235
return snapshot_module_close(m);
234
239
snapshot_module_close(m);
245
251
m = snapshot_module_open(s, snap_module_name,
246
252
&major_version, &minor_version);
250
257
if (major_version > SNAP_MAJOR || minor_version > SNAP_MINOR) {
251
258
log_error(vicii.log,
261
268
/* AllowBadLines */
262
269
|| SMR_B_INT(m, &vicii.allow_bad_lines) < 0
264
|| SMR_B_INT(m, &vicii.bad_line) < 0
271
|| SMR_B_INT(m, &vicii.bad_line) < 0
266
273
|| SMR_B_INT(m, &vicii.raster.blank_enabled) < 0
278
285
|| SMR_BA(m, vicii.vbuf, 40) < 0
279
286
/* NewSpriteDmaMask */
280
|| SMR_B(m, &vicii.raster.sprite_status->new_dma_msk) < 0)
287
|| SMR_B(m, &vicii.raster.sprite_status->new_dma_msk) < 0) {
286
if (SMR_DW(m, &RamBase) < 0)
294
if (SMR_DW(m, &RamBase) < 0) {
288
297
vicii.ram_base_phi1 = mem_ram + RamBase;
295
304
BYTE RasterCycle;
297
306
if (SMR_B(m, &RasterCycle) < 0
298
|| SMR_W(m, &RasterLine) < 0)
307
|| SMR_W(m, &RasterLine) < 0) {
301
311
if (RasterCycle != (BYTE)VICII_RASTER_CYCLE(maincpu_clk)) {
302
312
log_error(vicii.log,
316
for (i = 0; i < 0x50; i++)
317
if (SMR_B(m, &vicii.regs[i]) < 0 /* Registers */ )
326
for (i = 0; i < 0x50; i++) {
327
if (SMR_B(m, &vicii.regs[i]) < 0 /* Registers */) {
351
363
|| SMR_W_INT(m, &vicii.memptr) < 0
353
|| SMR_B_INT(m, &vicii.irq_status) < 0)
365
|| SMR_B_INT(m, &vicii.irq_status) < 0) {
356
369
for (i = 0; i < 8; i++) {
358
371
/* SpriteXMemPtr */
360
&vicii.raster.sprite_status->sprites[i].memptr) < 0
372
|| SMR_B_INT(m, &vicii.raster.sprite_status->sprites[i].memptr) < 0
361
373
/* SpriteXMemPtrInc */
363
&vicii.raster.sprite_status->sprites[i].memptr_inc) < 0
374
|| SMR_B_INT(m, &vicii.raster.sprite_status->sprites[i].memptr_inc) < 0
364
375
/* SpriteXExpFlipFlop */
366
&vicii.raster.sprite_status->sprites[i].exp_flag) < 0
376
|| SMR_B_INT(m, &vicii.raster.sprite_status->sprites[i].exp_flag) < 0
371
382
/* FIXME: Recalculate alarms and derived values. */
373
384
if (vicii.raster_irq_prevent) {
374
385
vicii.raster_irq_clk = CLOCK_MAX;
375
386
alarm_unset(vicii.raster_irq_alarm);
379
389
We cannot use vicii_irq_set_raster_line as this would delay
380
390
an alarm on line 0 for one frame
387
397
+ (vicii.cycles_per_line * line));
388
398
vicii.raster_irq_clk += vicii.raster_irq_offset;
389
399
/* Raster interrupts on line 0 are delayed by 1 cycle. */
391
401
vicii.raster_irq_clk++;
393
404
alarm_set(vicii.raster_irq_alarm, vicii.raster_irq_clk);
432
443
sprite->multicolor = (int)(vicii.regs[0x1c] & msk);
433
444
sprite->in_background = (int)(vicii.regs[0x1b] & msk);
434
445
sprite->color = (int) vicii.dtvpalette[vicii.regs[0x27 + i] & 0xf];
435
sprite->dma_flag = (int)(vicii.raster.sprite_status->new_dma_msk
446
sprite->dma_flag = (int)(vicii.raster.sprite_status->new_dma_msk & msk);
514
523
vicii_store(0x3c, (BYTE)vicii.regs[0x3c]);
516
vicii.draw_clk = maincpu_clk + (vicii.draw_cycle
517
- VICII_RASTER_CYCLE(maincpu_clk));
525
vicii.draw_clk = maincpu_clk + (vicii.draw_cycle - VICII_RASTER_CYCLE(maincpu_clk));
518
526
vicii.last_emulate_line_clk = vicii.draw_clk - vicii.cycles_per_line;
519
527
alarm_set(vicii.raster_draw_alarm, vicii.draw_clk);
534
543
alarm_set(vicii.raster_fetch_alarm, vicii.fetch_clk);
537
if (vicii.irq_status & 0x80)
546
if (vicii.irq_status & 0x80) {
538
547
interrupt_restore_irq(maincpu_int_status, vicii.int_num, 1);
540
550
/* added in version 1.1 of snapshot format */
541
551
if (minor_version > 0) {
545
555
|| SMR_DW(m, &RamBase) < 0
546
556
|| SMR_W_INT(m, &vicii.vbank_phi2) < 0 /* VBank */
549
560
vicii.ram_base_phi2 = mem_ram + RamBase;
551
562
vicii_update_memory_ptrs(VICII_RASTER_CYCLE(maincpu_clk));