trunk/src/mame/machine/315-5881_crypt.c
| r243038 | r243039 | |
| 664 | 664 | // deathcox and others confirm format as 0x20000 bit as compressed bit, 0x1ff00 bits as block size 1, 0x000ff bits as block size 2 |
| 665 | 665 | // for compressed streams the 'line size' is block size 1. |
| 666 | 666 | |
| 667 | | int blockx = ((dec_header & 0x000000ff) >> 0) + 1; |
| 667 | block_numlines = ((dec_header & 0x000000ff) >> 0) + 1; |
| 668 | 668 | int blocky = ((dec_header & 0x0001ff00) >> 8) + 1; |
| 669 | | block_size = blockx * blocky; |
| 669 | block_size = block_numlines * blocky; |
| 670 | 670 | |
| 671 | 671 | if(dec_header & FLAG_COMPRESSED) { |
| 672 | 672 | line_buffer_size = blocky; |
| 673 | 673 | line_buffer_pos = line_buffer_size; |
| 674 | 674 | buffer_bit = 7; |
| 675 | buffer_bit2 = 15; |
| 675 | 676 | } |
| 676 | 677 | |
| 677 | | // printf("header %08x\n", dec_header); |
| 678 | printf("header %08x\n", dec_header); |
| 678 | 679 | enc_ready = true; |
| 679 | 680 | } |
| 680 | 681 | |
| r243038 | r243039 | |
| 775 | 776 | |
| 776 | 777 | int sega_315_5881_crypt_device::get_compressed_bit() |
| 777 | 778 | { |
| 778 | | if(buffer_pos == BUFFER_SIZE) |
| 779 | | enc_fill(); |
| 780 | | int res = (buffer[buffer_pos^1] >> buffer_bit) & 1; |
| 779 | // if(buffer_pos == BUFFER_SIZE) |
| 780 | // enc_fill(); |
| 781 | |
| 782 | if (buffer_bit2 == 15) |
| 783 | { |
| 784 | buffer_bit2 = 0; |
| 785 | UINT16 buffer2a = get_decrypted_16(); |
| 786 | buffer2[0] = buffer2a; |
| 787 | buffer2[1] = buffer2a >> 8; |
| 788 | // block_pos+=2; |
| 789 | buffer_pos = 0; |
| 790 | |
| 791 | } |
| 792 | else |
| 793 | { |
| 794 | buffer_bit2++; |
| 795 | } |
| 796 | |
| 797 | // if (buffer_bit ==7) printf("using byte %02x\n", buffer2[(buffer_pos&1) ^ 1]); |
| 798 | |
| 799 | int res = (buffer2[(buffer_pos&1)^1] >> buffer_bit) & 1; |
| 781 | 800 | buffer_bit--; |
| 782 | 801 | if(buffer_bit == -1) { |
| 783 | 802 | buffer_bit = 7; |
| r243038 | r243039 | |
| 785 | 804 | } |
| 786 | 805 | return res; |
| 787 | 806 | } |
| 788 | | |
| 789 | 807 | void sega_315_5881_crypt_device::line_fill() |
| 790 | 808 | { |
| 791 | 809 | assert(line_buffer_pos == line_buffer_size); |
| r243038 | r243039 | |
| 838 | 856 | } |
| 839 | 857 | } |
| 840 | 858 | } |
| 859 | |
| 860 | if (block_numlines == block_pos) |
| 861 | { |
| 862 | enc_start(); |
| 863 | } |
| 864 | else |
| 865 | { |
| 866 | block_pos++; |
| 867 | } |
| 841 | 868 | } |