Revision abd0c6bd hw/m48t59.c

b/hw/m48t59.c
80 80
} M48t59SysBusState;
81 81

  
82 82
/* Fake timer functions */
83
/* Generic helpers for BCD */
84
static inline uint8_t toBCD (uint8_t value)
85
{
86
    return (((value / 10) % 10) << 4) | (value % 10);
87
}
88

  
89
static inline uint8_t fromBCD (uint8_t BCD)
90
{
91
    return ((BCD >> 4) * 10) + (BCD & 0x0F);
92
}
93 83

  
94 84
/* Alarm management */
95 85
static void alarm_cb (void *opaque)
......
219 209
        break;
220 210
    case 0x1FF2:
221 211
        /* alarm seconds */
222
        tmp = fromBCD(val & 0x7F);
212
        tmp = from_bcd(val & 0x7F);
223 213
        if (tmp >= 0 && tmp <= 59) {
224 214
            NVRAM->alarm.tm_sec = tmp;
225 215
            NVRAM->buffer[0x1FF2] = val;
......
228 218
        break;
229 219
    case 0x1FF3:
230 220
        /* alarm minutes */
231
        tmp = fromBCD(val & 0x7F);
221
        tmp = from_bcd(val & 0x7F);
232 222
        if (tmp >= 0 && tmp <= 59) {
233 223
            NVRAM->alarm.tm_min = tmp;
234 224
            NVRAM->buffer[0x1FF3] = val;
......
237 227
        break;
238 228
    case 0x1FF4:
239 229
        /* alarm hours */
240
        tmp = fromBCD(val & 0x3F);
230
        tmp = from_bcd(val & 0x3F);
241 231
        if (tmp >= 0 && tmp <= 23) {
242 232
            NVRAM->alarm.tm_hour = tmp;
243 233
            NVRAM->buffer[0x1FF4] = val;
......
246 236
        break;
247 237
    case 0x1FF5:
248 238
        /* alarm date */
249
        tmp = fromBCD(val & 0x1F);
239
        tmp = from_bcd(val & 0x1F);
250 240
        if (tmp != 0) {
251 241
            NVRAM->alarm.tm_mday = tmp;
252 242
            NVRAM->buffer[0x1FF5] = val;
......
270 260
    case 0x1FF9:
271 261
    case 0x07F9:
272 262
        /* seconds (BCD) */
273
	tmp = fromBCD(val & 0x7F);
263
	tmp = from_bcd(val & 0x7F);
274 264
	if (tmp >= 0 && tmp <= 59) {
275 265
	    get_time(NVRAM, &tm);
276 266
	    tm.tm_sec = tmp;
......
289 279
    case 0x1FFA:
290 280
    case 0x07FA:
291 281
        /* minutes (BCD) */
292
	tmp = fromBCD(val & 0x7F);
282
	tmp = from_bcd(val & 0x7F);
293 283
	if (tmp >= 0 && tmp <= 59) {
294 284
	    get_time(NVRAM, &tm);
295 285
	    tm.tm_min = tmp;
......
299 289
    case 0x1FFB:
300 290
    case 0x07FB:
301 291
        /* hours (BCD) */
302
	tmp = fromBCD(val & 0x3F);
292
	tmp = from_bcd(val & 0x3F);
303 293
	if (tmp >= 0 && tmp <= 23) {
304 294
	    get_time(NVRAM, &tm);
305 295
	    tm.tm_hour = tmp;
......
309 299
    case 0x1FFC:
310 300
    case 0x07FC:
311 301
        /* day of the week / century */
312
	tmp = fromBCD(val & 0x07);
302
	tmp = from_bcd(val & 0x07);
313 303
	get_time(NVRAM, &tm);
314 304
	tm.tm_wday = tmp;
315 305
	set_time(NVRAM, &tm);
......
318 308
    case 0x1FFD:
319 309
    case 0x07FD:
320 310
        /* date */
321
	tmp = fromBCD(val & 0x1F);
311
	tmp = from_bcd(val & 0x1F);
322 312
	if (tmp != 0) {
323 313
	    get_time(NVRAM, &tm);
324 314
	    tm.tm_mday = tmp;
......
328 318
    case 0x1FFE:
329 319
    case 0x07FE:
330 320
        /* month */
331
	tmp = fromBCD(val & 0x1F);
321
	tmp = from_bcd(val & 0x1F);
332 322
	if (tmp >= 1 && tmp <= 12) {
333 323
	    get_time(NVRAM, &tm);
334 324
	    tm.tm_mon = tmp - 1;
......
338 328
    case 0x1FFF:
339 329
    case 0x07FF:
340 330
        /* year */
341
	tmp = fromBCD(val);
331
	tmp = from_bcd(val);
342 332
	if (tmp >= 0 && tmp <= 99) {
343 333
	    get_time(NVRAM, &tm);
344 334
            if (NVRAM->type == 8)
345
                tm.tm_year = fromBCD(val) + 68; // Base year is 1968
335
                tm.tm_year = from_bcd(val) + 68; // Base year is 1968
346 336
            else
347
                tm.tm_year = fromBCD(val);
337
                tm.tm_year = from_bcd(val);
348 338
	    set_time(NVRAM, &tm);
349 339
	}
350 340
        break;
......
410 400
    case 0x07F9:
411 401
        /* seconds (BCD) */
412 402
        get_time(NVRAM, &tm);
413
        retval = (NVRAM->buffer[addr] & 0x80) | toBCD(tm.tm_sec);
403
        retval = (NVRAM->buffer[addr] & 0x80) | to_bcd(tm.tm_sec);
414 404
        break;
415 405
    case 0x1FFA:
416 406
    case 0x07FA:
417 407
        /* minutes (BCD) */
418 408
        get_time(NVRAM, &tm);
419
        retval = toBCD(tm.tm_min);
409
        retval = to_bcd(tm.tm_min);
420 410
        break;
421 411
    case 0x1FFB:
422 412
    case 0x07FB:
423 413
        /* hours (BCD) */
424 414
        get_time(NVRAM, &tm);
425
        retval = toBCD(tm.tm_hour);
415
        retval = to_bcd(tm.tm_hour);
426 416
        break;
427 417
    case 0x1FFC:
428 418
    case 0x07FC:
......
434 424
    case 0x07FD:
435 425
        /* date */
436 426
        get_time(NVRAM, &tm);
437
        retval = toBCD(tm.tm_mday);
427
        retval = to_bcd(tm.tm_mday);
438 428
        break;
439 429
    case 0x1FFE:
440 430
    case 0x07FE:
441 431
        /* month */
442 432
        get_time(NVRAM, &tm);
443
        retval = toBCD(tm.tm_mon + 1);
433
        retval = to_bcd(tm.tm_mon + 1);
444 434
        break;
445 435
    case 0x1FFF:
446 436
    case 0x07FF:
447 437
        /* year */
448 438
        get_time(NVRAM, &tm);
449 439
        if (NVRAM->type == 8)
450
            retval = toBCD(tm.tm_year - 68); // Base year is 1968
440
            retval = to_bcd(tm.tm_year - 68); // Base year is 1968
451 441
        else
452
            retval = toBCD(tm.tm_year);
442
            retval = to_bcd(tm.tm_year);
453 443
        break;
454 444
    default:
455 445
        /* Check lock registers state */

Also available in: Unified diff