Merge branch 'work' of https://github.com/trudnai/Steve2 into work

This commit is contained in:
tudnai 2020-07-26 16:08:03 -07:00
commit 7498489282
18 changed files with 0 additions and 4549659 deletions

Binary file not shown.

Binary file not shown.

187
1
View File

@ -1,187 +0,0 @@
#!/usr/bin/perl
my $state = 'begin';
my $trk = 0;
my $sec = 0;
my @sectorData = ();
my $reLDA_C08C = qr/LDA\s+\$C08C,X\t0x([8-9A-Fa-f][0-9A-Fa-f])/;
my $reLDY_C08C = qr/LDY\s+\$C08C,X\t0x([0-9A-Fa-f]{2})\t0x([0-9A-Fa-f]{2})\t0x([8-9A-Fa-f][0-9A-F])/;
my $reSTA_0300 = qr/STA\s+\$0300,Y\t0x([0-9A-F]{2})\t0x([0-9A-F]{2})\t0x([0-9A-F]{2})/;
my $reSTA_26Y = qr/STA\s+\(\$26\),Y\t0x([0-9A-F]{2})\t0x([0-9A-F]{2})\t0x([0-9A-F]{2})/;
sub hexdump {
my ($arr) = @_;
for($i = 0; $i < scalar(@{$arr}); $i++) {
if ( $i % 16 == 0 ) {
printf("\n%04X: ", $i);
}
printf("%02X ", @{$arr}[$i]);
}
print "\n";
}
while (<>) {
chomp;
s/[\n\r]+//;
print;
{ # for the redo to avoid print input twice
if ( $state eq 'begin' ) {
if ( /LDA\s+\$C08C,X\t0xD5/ ) {
print "\t marker D5";
$state = 'loaded_D5';
}
}
elsif ( $state eq 'loaded_D5' ) {
if ( /LDA\s+\$C08C,X\t0xAA/ ) {
print "\t marker AA";
$state = 'loaded_AA';
}
elsif ( /$reLDA_C08C/ ) {
$state = 'begin';
redo;
}
}
elsif ( $state eq 'loaded_AA' ) {
if ( /LDA\s+\$C08C,X\t0x96/ ) {
print "\t marker 96";
$state = 'loaded_96';
print "\t; sector marker";
}
elsif ( /$reLDA_C08C/ ) {
$state = 'begin';
redo;
}
}
elsif ( $state eq 'loaded_96' ) {
if ( /$reLDA_C08C/ ) {
print "\t marker v1";
$state = 'loaded_v1';
}
}
elsif ( $state eq 'loaded_v1' ) {
if ( /$reLDA_C08C/ ) {
print "\t marker v2";
$state = 'loaded_v2';
}
}
elsif ( $state eq 'loaded_v2' ) {
if ( /$reLDA_C08C/ ) {
print "\t marker t1:$1";
$trk = hex($1) << 1;
$trk |= 1;
$state = 'loaded_t1';
}
}
elsif ( $state eq 'loaded_t1' ) {
if ( /$reLDA_C08C/ ) {
print "\t marker t2:$1";
$trk &= hex($1);
print "\t; trk:$trk";
$state = 'loaded_t2';
}
}
elsif ( $state eq 'loaded_t2' ) {
if ( /$reLDA_C08C/ ) {
print "\t marker s1:$1";
$sec = hex($1) << 1;
$sec |= 1;
$state = 'loaded_s1';
}
}
elsif ( $state eq 'loaded_s1' ) {
if ( /$reLDA_C08C/ ) {
print "\t marker s2:$1";
$sec &= hex($1);
print "\t; sec:$sec";
$state = 'loaded_s2';
}
}
elsif ( $state eq 'loaded_s2' ) {
if ( /LDA\s+\$C08C,X\t0xD5/ ) {
print "\t marker D5";
$state = 'waitingfor_AA';
}
elsif ( /EOR\s+#\$D5/ ) {
$state = 'begin';
redo;
}
}
elsif ( $state eq 'waitingfor_AA' ) {
if ( /LDA\s+\$C08C,X\t0xAA/ ) {
print "\t marker AA 2";
$state = 'waitingfor_AD';
}
elsif ( /$reLDA_C08C/ ) {
$state = 'begin';
redo;
}
}
elsif ( $state eq 'waitingfor_AD' ) {
if ( /LDA\s+\$C08C,X\t0xAD/ ) {
print "\t marker AD";
$state = 'loaded_AD';
print "\t; sector data marker";
}
elsif ( /EOR\s+#\$D5/ ) {
$state = 'begin';
redo;
}
}
elsif ( $state eq 'loaded_AD' ) {
if ( /$reLDY_C08C/ ) {
print "\t byte read: $3 (t:$trk s:$sec)";
}
elsif ( /$reSTA_0300/ ) {
printf( "\t byte to mem: \$%04X:$1\n", 0x300 + hex($3) );
}
elsif ( /$reSTA_26Y/ ) {
my $y = hex($3);
printf( "\t byte to mem ind: (\$26)+\$%02X:$1\n", $y );
if ($y >= 255) {
$state = 'sector_decode';
}
}
}
elsif ( $state eq 'sector_decode' ) {
if ( /$reSTA_26Y/ ) {
$i = hex($1);
$y = hex($3);
printf( "\t byte to mem ind: (\$26)+\$%02X:$1\n", $y );
$sectorData[$y] = $i;
if ($y >= 255) {
$state = 'sector_decode';
print "\nHEXDUMP track: $trk sector: $sec\n";
hexdump(\@sectorData);
}
}
elsif ( /$reLDA_C08C/ ) {
$state = 'begin';
redo;
}
}
} # for the redo to avoid print input twice
print "\n";
}

View File

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

788216
a

File diff suppressed because it is too large Load Diff

BIN
apple.rom

Binary file not shown.

View File

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,125 +0,0 @@
100935 44567424 C65E: BD 8C C0 LDA $C08C,X 0x07 0x60 0x00 0x35 0xFE
100936 44567428 C661: 10 FB BPL $C65E 0x07 0x60 0x00 0x35 0xFE
100937 44567431 C65E: BD 8C C0 LDA $C08C,X 0x1F 0x60 0x00 0x35 0xFE
100938 44567435 C661: 10 FB BPL $C65E 0x1F 0x60 0x00 0x35 0xFE
100939 44567438 C65E: BD 8C C0 LDA $C08C,X 0x7F 0x60 0x00 0x35 0xFE
100940 44567442 C661: 10 FB BPL $C65E 0x7F 0x60 0x00 0x35 0xFE
100941 44567445 C65E: BD 8C C0 LDA $C08C,X 0xFF 0x60 0x00 0xB5 0xFE
100942 44567449 C661: 10 FB BPL $C65E 0xFF 0x60 0x00 0xB5 0xFE
100943 44567451 C663: 49 D5 EOR #$D5 0x2A 0x60 0x00 0x35 0xFE
100944 44567453 C665: D0 F7 BNE $C65E 0x2A 0x60 0x00 0x35 0xFE
100945 44567456 C65E: BD 8C C0 LDA $C08C,X 0xFF 0x60 0x00 0xB5 0xFE
100946 44567460 C661: 10 FB BPL $C65E 0xFF 0x60 0x00 0xB5 0xFE
100947 44567462 C663: 49 D5 EOR #$D5 0x2A 0x60 0x00 0x35 0xFE
100948 44567464 C665: D0 F7 BNE $C65E 0x2A 0x60 0x00 0x35 0xFE
100949 44567467 C65E: BD 8C C0 LDA $C08C,X 0x0D 0x60 0x00 0x35 0xFE
100950 44567471 C661: 10 FB BPL $C65E 0x0D 0x60 0x00 0x35 0xFE
100951 44567474 C65E: BD 8C C0 LDA $C08C,X 0x35 0x60 0x00 0x35 0xFE
100952 44567478 C661: 10 FB BPL $C65E 0x35 0x60 0x00 0x35 0xFE
100953 44567481 C65E: BD 8C C0 LDA $C08C,X 0x6A 0x60 0x00 0x35 0xFE
100954 44567485 C661: 10 FB BPL $C65E 0x6A 0x60 0x00 0x35 0xFE
100955 44567488 C65E: BD 8C C0 LDA $C08C,X 0xD5 0x60 0x00 0xB5 0xFE
100956 44567492 C661: 10 FB BPL $C65E 0xD5 0x60 0x00 0xB5 0xFE
100957 44567494 C663: 49 D5 EOR #$D5 0x00 0x60 0x00 0x37 0xFE
100958 44567496 C665: D0 F7 BNE $C65E 0x00 0x60 0x00 0x37 0xFE
100959 44567498 C667: BD 8C C0 LDA $C08C,X 0x0A 0x60 0x00 0x35 0xFE
100960 44567502 C66A: 10 FB BPL $C667 0x0A 0x60 0x00 0x35 0xFE
100961 44567505 C667: BD 8C C0 LDA $C08C,X 0x15 0x60 0x00 0x35 0xFE
100962 44567509 C66A: 10 FB BPL $C667 0x15 0x60 0x00 0x35 0xFE
100963 44567512 C667: BD 8C C0 LDA $C08C,X 0x55 0x60 0x00 0x35 0xFE
100964 44567516 C66A: 10 FB BPL $C667 0x55 0x60 0x00 0x35 0xFE
100965 44567519 C667: BD 8C C0 LDA $C08C,X 0xAA 0x60 0x00 0xB5 0xFE
100966 44567523 C66A: 10 FB BPL $C667 0xAA 0x60 0x00 0xB5 0xFE
100967 44567525 C66C: C9 AA CMP #$AA 0xAA 0x60 0x00 0x37 0xFE
100968 44567527 C66E: D0 F3 BNE $C663 0xAA 0x60 0x00 0x37 0xFE
100969 44567529 C670: EA NOP 0xAA 0x60 0x00 0x37 0xFE
100970 44567531 C671: BD 8C C0 LDA $C08C,X 0x0A 0x60 0x00 0x35 0xFE
100971 44567535 C674: 10 FB BPL $C671 0x0A 0x60 0x00 0x35 0xFE
100972 44567538 C671: BD 8C C0 LDA $C08C,X 0x2B 0x60 0x00 0x35 0xFE
100973 44567542 C674: 10 FB BPL $C671 0x2B 0x60 0x00 0x35 0xFE
100974 44567545 C671: BD 8C C0 LDA $C08C,X 0x56 0x60 0x00 0x35 0xFE
100975 44567549 C674: 10 FB BPL $C671 0x56 0x60 0x00 0x35 0xFE
100976 44567552 C671: BD 8C C0 LDA $C08C,X 0xAD 0x60 0x00 0xB5 0xFE
100977 44567556 C674: 10 FB BPL $C671 0xAD 0x60 0x00 0xB5 0xFE
100978 44567558 C676: C9 96 CMP #$96 0xAD 0x60 0x00 0x35 0xFE
100979 44567560 C678: F0 09 BEQ $C683 0xAD 0x60 0x00 0x35 0xFE
100980 44567562 C67A: 28 PLP 0xAD 0x60 0x00 0x37 0xFF
100981 44567566 C67B: 90 DF BCC $C65C 0xAD 0x60 0x00 0x37 0xFF
100982 44567568 C67D: 49 AD EOR #$AD 0x00 0x60 0x00 0x37 0xFF
100983 44567570 C67F: F0 25 BEQ $C6A6 0x00 0x60 0x00 0x37 0xFF
100984 44567573 C6A6: A0 56 LDY #$56 0x00 0x60 0x56 0x35 0xFF
100985 44567575 C6A8: 84 3C STY $3C 0x00 0x60 0x56 0x35 0xFF
100986 44567578 C6AA: BC 8C C0 LDY $C08C,X 0x00 0x60 0xB6 0xB5 0xFF
100987 44567582 C6AD: 10 FB BPL $C6AA 0x00 0x60 0xB6 0xB5 0xFF
100988 44567584 C6AF: 59 D6 02 EOR $02D6,Y 0x12 0x60 0xB6 0x35 0xFF
100989 44567589 C6B2: A4 3C LDY $3C 0x12 0x60 0x56 0x35 0xFF
100990 44567592 C6B4: 88 DEY 0x12 0x60 0x55 0x35 0xFF
100991 44567594 C6B5: 99 00 03 STA $0300,Y 0x12 0x60 0x55 0x35 0xFF
100992 44567599 C6B8: D0 EE BNE $C6A8 0x12 0x60 0x55 0x35 0xFF
100993 44567602 C6A8: 84 3C STY $3C 0x12 0x60 0x55 0x35 0xFF
100994 44567605 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0x36 0x35 0xFF
100995 44567609 C6AD: 10 FB BPL $C6AA 0x12 0x60 0x36 0x35 0xFF
100996 44567612 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0xDB 0xB5 0xFF
100997 44567616 C6AD: 10 FB BPL $C6AA 0x12 0x60 0xDB 0xB5 0xFF
100998 44567618 C6AF: 59 D6 02 EOR $02D6,Y 0x36 0x60 0xDB 0x35 0xFF
100999 44567623 C6B2: A4 3C LDY $3C 0x36 0x60 0x55 0x35 0xFF
101000 44567626 C6B4: 88 DEY 0x36 0x60 0x54 0x35 0xFF
101001 44567628 C6B5: 99 00 03 STA $0300,Y 0x36 0x60 0x54 0x35 0xFF
101002 44567633 C6B8: D0 EE BNE $C6A8 0x36 0x60 0x54 0x35 0xFF
101003 44567636 C6A8: 84 3C STY $3C 0x36 0x60 0x54 0x35 0xFF
101004 44567639 C6AA: BC 8C C0 LDY $C08C,X 0x36 0x60 0x6E 0x35 0xFF
101005 44567643 C6AD: 10 FB BPL $C6AA 0x36 0x60 0x6E 0x35 0xFF
101006 44567646 C6AA: BC 8C C0 LDY $C08C,X 0x36 0x60 0xDC 0xB5 0xFF
101007 44567650 C6AD: 10 FB BPL $C6AA 0x36 0x60 0xDC 0xB5 0xFF
101008 44567652 C6AF: 59 D6 02 EOR $02D6,Y 0x13 0x60 0xDC 0x35 0xFF
101009 44567657 C6B2: A4 3C LDY $3C 0x13 0x60 0x54 0x35 0xFF
101010 44567660 C6B4: 88 DEY 0x13 0x60 0x53 0x35 0xFF
101011 44567662 C6B5: 99 00 03 STA $0300,Y 0x13 0x60 0x53 0x35 0xFF
101012 44567667 C6B8: D0 EE BNE $C6A8 0x13 0x60 0x53 0x35 0xFF
101013 44567670 C6A8: 84 3C STY $3C 0x13 0x60 0x53 0x35 0xFF
101014 44567673 C6AA: BC 8C C0 LDY $C08C,X 0x13 0x60 0x7A 0x35 0xFF
101015 44567677 C6AD: 10 FB BPL $C6AA 0x13 0x60 0x7A 0x35 0xFF
101016 44567680 C6AA: BC 8C C0 LDY $C08C,X 0x13 0x60 0xF4 0xB5 0xFF
101017 44567684 C6AD: 10 FB BPL $C6AA 0x13 0x60 0xF4 0xB5 0xFF
101018 44567686 C6AF: 59 D6 02 EOR $02D6,Y 0x26 0x60 0xF4 0x35 0xFF
101019 44567691 C6B2: A4 3C LDY $3C 0x26 0x60 0x53 0x35 0xFF
101020 44567694 C6B4: 88 DEY 0x26 0x60 0x52 0x35 0xFF
101021 44567696 C6B5: 99 00 03 STA $0300,Y 0x26 0x60 0x52 0x35 0xFF
101022 44567701 C6B8: D0 EE BNE $C6A8 0x26 0x60 0x52 0x35 0xFF
101023 44567704 C6A8: 84 3C STY $3C 0x26 0x60 0x52 0x35 0xFF
101024 44567707 C6AA: BC 8C C0 LDY $C08C,X 0x26 0x60 0xF3 0xB5 0xFF
101025 44567711 C6AD: 10 FB BPL $C6AA 0x26 0x60 0xF3 0xB5 0xFF
101026 44567713 C6AF: 59 D6 02 EOR $02D6,Y 0x12 0x60 0xF3 0x35 0xFF
101027 44567718 C6B2: A4 3C LDY $3C 0x12 0x60 0x52 0x35 0xFF
101028 44567721 C6B4: 88 DEY 0x12 0x60 0x51 0x35 0xFF
101029 44567723 C6B5: 99 00 03 STA $0300,Y 0x12 0x60 0x51 0x35 0xFF
101030 44567728 C6B8: D0 EE BNE $C6A8 0x12 0x60 0x51 0x35 0xFF
101031 44567731 C6A8: 84 3C STY $3C 0x12 0x60 0x51 0x35 0xFF
101032 44567734 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0x5D 0x35 0xFF
101033 44567738 C6AD: 10 FB BPL $C6AA 0x12 0x60 0x5D 0x35 0xFF
101034 44567741 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0xBB 0xB5 0xFF
101035 44567745 C6AD: 10 FB BPL $C6AA 0x12 0x60 0xBB 0xB5 0xFF
101036 44567747 C6AF: 59 D6 02 EOR $02D6,Y 0x04 0x60 0xBB 0x35 0xFF
101037 44567752 C6B2: A4 3C LDY $3C 0x04 0x60 0x51 0x35 0xFF
101038 44567755 C6B4: 88 DEY 0x04 0x60 0x50 0x35 0xFF
101039 44567757 C6B5: 99 00 03 STA $0300,Y 0x04 0x60 0x50 0x35 0xFF
101040 44567762 C6B8: D0 EE BNE $C6A8 0x04 0x60 0x50 0x35 0xFF
101041 44567765 C6A8: 84 3C STY $3C 0x04 0x60 0x50 0x35 0xFF
101042 44567768 C6AA: BC 8C C0 LDY $C08C,X 0x04 0x60 0x5E 0x35 0xFF
101043 44567772 C6AD: 10 FB BPL $C6AA 0x04 0x60 0x5E 0x35 0xFF
101044 44567775 C6AA: BC 8C C0 LDY $C08C,X 0x04 0x60 0xBD 0xB5 0xFF
101045 44567779 C6AD: 10 FB BPL $C6AA 0x04 0x60 0xBD 0xB5 0xFF
101046 44567781 C6AF: 59 D6 02 EOR $02D6,Y 0x1C 0x60 0xBD 0x35 0xFF
101047 44567786 C6B2: A4 3C LDY $3C 0x1C 0x60 0x50 0x35 0xFF
101048 44567789 C6B4: 88 DEY 0x1C 0x60 0x4F 0x35 0xFF
101049 44567791 C6B5: 99 00 03 STA $0300,Y 0x1C 0x60 0x4F 0x35 0xFF
101050 44567796 C6B8: D0 EE BNE $C6A8 0x1C 0x60 0x4F 0x35 0xFF
101051 44567799 C6A8: 84 3C STY $3C 0x1C 0x60 0x4F 0x35 0xFF
101052 44567802 C6AA: BC 8C C0 LDY $C08C,X 0x1C 0x60 0xCF 0xB5 0xFF
101053 44567806 C6AD: 10 FB BPL $C6AA 0x1C 0x60 0xCF 0xB5 0xFF
101054 44567808 C6AF: 59 D6 02 EOR $02D6,Y 0x02 0x60 0xCF 0x35 0xFF
101055 44567813 C6B2: A4 3C LDY $3C 0x02 0x60 0x4F 0x35 0xFF
101056 44567816 C6B4: 88 DEY 0x02 0x60 0x4E 0x35 0xFF
101057 44567818 C6B5: 99 00 03 STA $0300,Y 0x02 0x60 0x4E 0x35 0xFF
101058 44567823 C6B8: D0 EE BNE $C6A8 0x02 0x60 0x4E 0x35 0xFF
101059 44567826 C6A8: 84 3C STY $3C 0x02 0x60 0x4E 0x35 0xFF
1 100935 44567424 C65E: BD 8C C0 LDA $C08C,X 0x07 0x60 0x00 0x35 0xFE
2 100936 44567428 C661: 10 FB BPL $C65E 0x07 0x60 0x00 0x35 0xFE
3 100937 44567431 C65E: BD 8C C0 LDA $C08C,X 0x1F 0x60 0x00 0x35 0xFE
4 100938 44567435 C661: 10 FB BPL $C65E 0x1F 0x60 0x00 0x35 0xFE
5 100939 44567438 C65E: BD 8C C0 LDA $C08C,X 0x7F 0x60 0x00 0x35 0xFE
6 100940 44567442 C661: 10 FB BPL $C65E 0x7F 0x60 0x00 0x35 0xFE
7 100941 44567445 C65E: BD 8C C0 LDA $C08C,X 0xFF 0x60 0x00 0xB5 0xFE
8 100942 44567449 C661: 10 FB BPL $C65E 0xFF 0x60 0x00 0xB5 0xFE
9 100943 44567451 C663: 49 D5 EOR #$D5 0x2A 0x60 0x00 0x35 0xFE
10 100944 44567453 C665: D0 F7 BNE $C65E 0x2A 0x60 0x00 0x35 0xFE
11 100945 44567456 C65E: BD 8C C0 LDA $C08C,X 0xFF 0x60 0x00 0xB5 0xFE
12 100946 44567460 C661: 10 FB BPL $C65E 0xFF 0x60 0x00 0xB5 0xFE
13 100947 44567462 C663: 49 D5 EOR #$D5 0x2A 0x60 0x00 0x35 0xFE
14 100948 44567464 C665: D0 F7 BNE $C65E 0x2A 0x60 0x00 0x35 0xFE
15 100949 44567467 C65E: BD 8C C0 LDA $C08C,X 0x0D 0x60 0x00 0x35 0xFE
16 100950 44567471 C661: 10 FB BPL $C65E 0x0D 0x60 0x00 0x35 0xFE
17 100951 44567474 C65E: BD 8C C0 LDA $C08C,X 0x35 0x60 0x00 0x35 0xFE
18 100952 44567478 C661: 10 FB BPL $C65E 0x35 0x60 0x00 0x35 0xFE
19 100953 44567481 C65E: BD 8C C0 LDA $C08C,X 0x6A 0x60 0x00 0x35 0xFE
20 100954 44567485 C661: 10 FB BPL $C65E 0x6A 0x60 0x00 0x35 0xFE
21 100955 44567488 C65E: BD 8C C0 LDA $C08C,X 0xD5 0x60 0x00 0xB5 0xFE
22 100956 44567492 C661: 10 FB BPL $C65E 0xD5 0x60 0x00 0xB5 0xFE
23 100957 44567494 C663: 49 D5 EOR #$D5 0x00 0x60 0x00 0x37 0xFE
24 100958 44567496 C665: D0 F7 BNE $C65E 0x00 0x60 0x00 0x37 0xFE
25 100959 44567498 C667: BD 8C C0 LDA $C08C,X 0x0A 0x60 0x00 0x35 0xFE
26 100960 44567502 C66A: 10 FB BPL $C667 0x0A 0x60 0x00 0x35 0xFE
27 100961 44567505 C667: BD 8C C0 LDA $C08C,X 0x15 0x60 0x00 0x35 0xFE
28 100962 44567509 C66A: 10 FB BPL $C667 0x15 0x60 0x00 0x35 0xFE
29 100963 44567512 C667: BD 8C C0 LDA $C08C,X 0x55 0x60 0x00 0x35 0xFE
30 100964 44567516 C66A: 10 FB BPL $C667 0x55 0x60 0x00 0x35 0xFE
31 100965 44567519 C667: BD 8C C0 LDA $C08C,X 0xAA 0x60 0x00 0xB5 0xFE
32 100966 44567523 C66A: 10 FB BPL $C667 0xAA 0x60 0x00 0xB5 0xFE
33 100967 44567525 C66C: C9 AA CMP #$AA 0xAA 0x60 0x00 0x37 0xFE
34 100968 44567527 C66E: D0 F3 BNE $C663 0xAA 0x60 0x00 0x37 0xFE
35 100969 44567529 C670: EA NOP 0xAA 0x60 0x00 0x37 0xFE
36 100970 44567531 C671: BD 8C C0 LDA $C08C,X 0x0A 0x60 0x00 0x35 0xFE
37 100971 44567535 C674: 10 FB BPL $C671 0x0A 0x60 0x00 0x35 0xFE
38 100972 44567538 C671: BD 8C C0 LDA $C08C,X 0x2B 0x60 0x00 0x35 0xFE
39 100973 44567542 C674: 10 FB BPL $C671 0x2B 0x60 0x00 0x35 0xFE
40 100974 44567545 C671: BD 8C C0 LDA $C08C,X 0x56 0x60 0x00 0x35 0xFE
41 100975 44567549 C674: 10 FB BPL $C671 0x56 0x60 0x00 0x35 0xFE
42 100976 44567552 C671: BD 8C C0 LDA $C08C,X 0xAD 0x60 0x00 0xB5 0xFE
43 100977 44567556 C674: 10 FB BPL $C671 0xAD 0x60 0x00 0xB5 0xFE
44 100978 44567558 C676: C9 96 CMP #$96 0xAD 0x60 0x00 0x35 0xFE
45 100979 44567560 C678: F0 09 BEQ $C683 0xAD 0x60 0x00 0x35 0xFE
46 100980 44567562 C67A: 28 PLP 0xAD 0x60 0x00 0x37 0xFF
47 100981 44567566 C67B: 90 DF BCC $C65C 0xAD 0x60 0x00 0x37 0xFF
48 100982 44567568 C67D: 49 AD EOR #$AD 0x00 0x60 0x00 0x37 0xFF
49 100983 44567570 C67F: F0 25 BEQ $C6A6 0x00 0x60 0x00 0x37 0xFF
50 100984 44567573 C6A6: A0 56 LDY #$56 0x00 0x60 0x56 0x35 0xFF
51 100985 44567575 C6A8: 84 3C STY $3C 0x00 0x60 0x56 0x35 0xFF
52 100986 44567578 C6AA: BC 8C C0 LDY $C08C,X 0x00 0x60 0xB6 0xB5 0xFF
53 100987 44567582 C6AD: 10 FB BPL $C6AA 0x00 0x60 0xB6 0xB5 0xFF
54 100988 44567584 C6AF: 59 D6 02 EOR $02D6,Y 0x12 0x60 0xB6 0x35 0xFF
55 100989 44567589 C6B2: A4 3C LDY $3C 0x12 0x60 0x56 0x35 0xFF
56 100990 44567592 C6B4: 88 DEY 0x12 0x60 0x55 0x35 0xFF
57 100991 44567594 C6B5: 99 00 03 STA $0300,Y 0x12 0x60 0x55 0x35 0xFF
58 100992 44567599 C6B8: D0 EE BNE $C6A8 0x12 0x60 0x55 0x35 0xFF
59 100993 44567602 C6A8: 84 3C STY $3C 0x12 0x60 0x55 0x35 0xFF
60 100994 44567605 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0x36 0x35 0xFF
61 100995 44567609 C6AD: 10 FB BPL $C6AA 0x12 0x60 0x36 0x35 0xFF
62 100996 44567612 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0xDB 0xB5 0xFF
63 100997 44567616 C6AD: 10 FB BPL $C6AA 0x12 0x60 0xDB 0xB5 0xFF
64 100998 44567618 C6AF: 59 D6 02 EOR $02D6,Y 0x36 0x60 0xDB 0x35 0xFF
65 100999 44567623 C6B2: A4 3C LDY $3C 0x36 0x60 0x55 0x35 0xFF
66 101000 44567626 C6B4: 88 DEY 0x36 0x60 0x54 0x35 0xFF
67 101001 44567628 C6B5: 99 00 03 STA $0300,Y 0x36 0x60 0x54 0x35 0xFF
68 101002 44567633 C6B8: D0 EE BNE $C6A8 0x36 0x60 0x54 0x35 0xFF
69 101003 44567636 C6A8: 84 3C STY $3C 0x36 0x60 0x54 0x35 0xFF
70 101004 44567639 C6AA: BC 8C C0 LDY $C08C,X 0x36 0x60 0x6E 0x35 0xFF
71 101005 44567643 C6AD: 10 FB BPL $C6AA 0x36 0x60 0x6E 0x35 0xFF
72 101006 44567646 C6AA: BC 8C C0 LDY $C08C,X 0x36 0x60 0xDC 0xB5 0xFF
73 101007 44567650 C6AD: 10 FB BPL $C6AA 0x36 0x60 0xDC 0xB5 0xFF
74 101008 44567652 C6AF: 59 D6 02 EOR $02D6,Y 0x13 0x60 0xDC 0x35 0xFF
75 101009 44567657 C6B2: A4 3C LDY $3C 0x13 0x60 0x54 0x35 0xFF
76 101010 44567660 C6B4: 88 DEY 0x13 0x60 0x53 0x35 0xFF
77 101011 44567662 C6B5: 99 00 03 STA $0300,Y 0x13 0x60 0x53 0x35 0xFF
78 101012 44567667 C6B8: D0 EE BNE $C6A8 0x13 0x60 0x53 0x35 0xFF
79 101013 44567670 C6A8: 84 3C STY $3C 0x13 0x60 0x53 0x35 0xFF
80 101014 44567673 C6AA: BC 8C C0 LDY $C08C,X 0x13 0x60 0x7A 0x35 0xFF
81 101015 44567677 C6AD: 10 FB BPL $C6AA 0x13 0x60 0x7A 0x35 0xFF
82 101016 44567680 C6AA: BC 8C C0 LDY $C08C,X 0x13 0x60 0xF4 0xB5 0xFF
83 101017 44567684 C6AD: 10 FB BPL $C6AA 0x13 0x60 0xF4 0xB5 0xFF
84 101018 44567686 C6AF: 59 D6 02 EOR $02D6,Y 0x26 0x60 0xF4 0x35 0xFF
85 101019 44567691 C6B2: A4 3C LDY $3C 0x26 0x60 0x53 0x35 0xFF
86 101020 44567694 C6B4: 88 DEY 0x26 0x60 0x52 0x35 0xFF
87 101021 44567696 C6B5: 99 00 03 STA $0300,Y 0x26 0x60 0x52 0x35 0xFF
88 101022 44567701 C6B8: D0 EE BNE $C6A8 0x26 0x60 0x52 0x35 0xFF
89 101023 44567704 C6A8: 84 3C STY $3C 0x26 0x60 0x52 0x35 0xFF
90 101024 44567707 C6AA: BC 8C C0 LDY $C08C,X 0x26 0x60 0xF3 0xB5 0xFF
91 101025 44567711 C6AD: 10 FB BPL $C6AA 0x26 0x60 0xF3 0xB5 0xFF
92 101026 44567713 C6AF: 59 D6 02 EOR $02D6,Y 0x12 0x60 0xF3 0x35 0xFF
93 101027 44567718 C6B2: A4 3C LDY $3C 0x12 0x60 0x52 0x35 0xFF
94 101028 44567721 C6B4: 88 DEY 0x12 0x60 0x51 0x35 0xFF
95 101029 44567723 C6B5: 99 00 03 STA $0300,Y 0x12 0x60 0x51 0x35 0xFF
96 101030 44567728 C6B8: D0 EE BNE $C6A8 0x12 0x60 0x51 0x35 0xFF
97 101031 44567731 C6A8: 84 3C STY $3C 0x12 0x60 0x51 0x35 0xFF
98 101032 44567734 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0x5D 0x35 0xFF
99 101033 44567738 C6AD: 10 FB BPL $C6AA 0x12 0x60 0x5D 0x35 0xFF
100 101034 44567741 C6AA: BC 8C C0 LDY $C08C,X 0x12 0x60 0xBB 0xB5 0xFF
101 101035 44567745 C6AD: 10 FB BPL $C6AA 0x12 0x60 0xBB 0xB5 0xFF
102 101036 44567747 C6AF: 59 D6 02 EOR $02D6,Y 0x04 0x60 0xBB 0x35 0xFF
103 101037 44567752 C6B2: A4 3C LDY $3C 0x04 0x60 0x51 0x35 0xFF
104 101038 44567755 C6B4: 88 DEY 0x04 0x60 0x50 0x35 0xFF
105 101039 44567757 C6B5: 99 00 03 STA $0300,Y 0x04 0x60 0x50 0x35 0xFF
106 101040 44567762 C6B8: D0 EE BNE $C6A8 0x04 0x60 0x50 0x35 0xFF
107 101041 44567765 C6A8: 84 3C STY $3C 0x04 0x60 0x50 0x35 0xFF
108 101042 44567768 C6AA: BC 8C C0 LDY $C08C,X 0x04 0x60 0x5E 0x35 0xFF
109 101043 44567772 C6AD: 10 FB BPL $C6AA 0x04 0x60 0x5E 0x35 0xFF
110 101044 44567775 C6AA: BC 8C C0 LDY $C08C,X 0x04 0x60 0xBD 0xB5 0xFF
111 101045 44567779 C6AD: 10 FB BPL $C6AA 0x04 0x60 0xBD 0xB5 0xFF
112 101046 44567781 C6AF: 59 D6 02 EOR $02D6,Y 0x1C 0x60 0xBD 0x35 0xFF
113 101047 44567786 C6B2: A4 3C LDY $3C 0x1C 0x60 0x50 0x35 0xFF
114 101048 44567789 C6B4: 88 DEY 0x1C 0x60 0x4F 0x35 0xFF
115 101049 44567791 C6B5: 99 00 03 STA $0300,Y 0x1C 0x60 0x4F 0x35 0xFF
116 101050 44567796 C6B8: D0 EE BNE $C6A8 0x1C 0x60 0x4F 0x35 0xFF
117 101051 44567799 C6A8: 84 3C STY $3C 0x1C 0x60 0x4F 0x35 0xFF
118 101052 44567802 C6AA: BC 8C C0 LDY $C08C,X 0x1C 0x60 0xCF 0xB5 0xFF
119 101053 44567806 C6AD: 10 FB BPL $C6AA 0x1C 0x60 0xCF 0xB5 0xFF
120 101054 44567808 C6AF: 59 D6 02 EOR $02D6,Y 0x02 0x60 0xCF 0x35 0xFF
121 101055 44567813 C6B2: A4 3C LDY $3C 0x02 0x60 0x4F 0x35 0xFF
122 101056 44567816 C6B4: 88 DEY 0x02 0x60 0x4E 0x35 0xFF
123 101057 44567818 C6B5: 99 00 03 STA $0300,Y 0x02 0x60 0x4E 0x35 0xFF
124 101058 44567823 C6B8: D0 EE BNE $C6A8 0x02 0x60 0x4E 0x35 0xFF
125 101059 44567826 C6A8: 84 3C STY $3C 0x02 0x60 0x4E 0x35 0xFF

View File

@ -1,628 +0,0 @@
//
// woz.c
// A2Mac
//
// Created by Tamas Rudnai on 2/15/20.
// Copyright © 2020 GameAlloy. All rights reserved.
//
#include <stdlib.h>
#include <string.h>
#include "woz.h"
#include "disk.h"
#include "6502.h"
#include "common.h"
WOZread_t WOZread = {0};
uint8_t WOZlatch = 0;
int trackOffset = 0;
int bitOffset = 0;
uint64_t clkelpased;
woz_header_t woz_header;
woz_chunk_header_t woz_chunk_header;
woz_tmap_t woz_tmap;
woz_trks_t woz_trks;
int track_loaded = -1;
#pragma pack(push, 1)
typedef union trackEntry_u {
struct {
uint8_t data;
uint8_t shift;
};
uint16_t shift16;
} trackEntry_t;
#pragma pack(pop)
trackEntry_t prepared_track[WOZ_TRACK_BYTE_COUNT];
typedef enum readState_e {
readNormal = 0,
readHold,
} readState_t;
readState_t readState = readNormal;
uint8_t readLatch;
void woz_loadTrack_old( int track ) {
trackEntry_t reg = {0};
reg.shift = woz_trks[track].data[0];
reg.data = woz_trks[track].data[1];
prepared_track[0] = reg;
for ( int offs = 1; offs < WOZ_TRACK_BYTE_COUNT; offs++ ) {
for ( int i = 0; i < 8; i++ ) {
if (reg.shift & 0x80) {
reg.shift = 0;
}
reg.shift16 <<= 1;
}
reg.data = woz_trks[track].data[ (offs + 1) % WOZ_TRACK_BYTE_COUNT ];
prepared_track[offs] = reg;
}
}
typedef enum wozTrackState_e {
wozTrackState_Start = 0,
wozTrackState_D5,
wozTrackState_D5_AA,
wozTrackState_D5_AA_96,
wozTrackState_vol1,
wozTrackState_vol2,
wozTrackState_trk1,
wozTrackState_trk2,
wozTrackState_sec1,
wozTrackState_sec2,
} wozTrackState_t;
void woz_loadTrack( int track ) {
trackEntry_t reg = {0};
wozTrackState_t wozTrackState = wozTrackState_Start;
reg.shift = 0;
reg.data = 0;
prepared_track[0] = reg;
int vol = 0;
int trk = 0;
int sec = 0;
int bitOffs_D5_SecHdr = 0; // bit offset of D5 Sector Header
int bitOffs = 0;
for ( int byteOffs = 0; byteOffs < WOZ_TRACK_BYTE_COUNT; byteOffs++ ) {
reg.data = woz_trks[track].data[ byteOffs ];
for ( int i = 0; i < 8; i++ ) {
reg.shift16 <<= 1;
if (reg.shift & 0x80) {
switch (wozTrackState) {
case wozTrackState_D5:
switch (reg.shift) {
case 0xAA:
// printf("D5 AA at bitOffset:%d\n", bitOffs);
wozTrackState = wozTrackState_D5_AA;
break;
default:
wozTrackState = wozTrackState_Start;
break;
}
break;
case wozTrackState_D5_AA:
switch (reg.shift) {
case 0x96:
wozTrackState = wozTrackState_vol1;
// printf("D5 AA 96 at bitOffset:%d\n", bitOffs);
// printf("Sector Header at bitOffset:%d\n", bitOffs_D5_SecHdr);
break;
default:
wozTrackState = wozTrackState_Start;
break;
}
break;
case wozTrackState_vol1:
vol = (reg.shift << 1) | 1;
wozTrackState = wozTrackState_vol2;
break;
case wozTrackState_vol2:
vol &= reg.shift;
wozTrackState = wozTrackState_trk1;
break;
case wozTrackState_trk1:
trk = (reg.shift << 1) | 1;
wozTrackState = wozTrackState_trk2;
break;
case wozTrackState_trk2:
trk &= reg.shift;
wozTrackState = wozTrackState_sec1;
break;
case wozTrackState_sec1:
sec = (reg.shift << 1) | 1;
wozTrackState = wozTrackState_sec2;
break;
case wozTrackState_sec2:
sec &= reg.shift;
wozTrackState = wozTrackState_Start;
printf("Vol:%d Track:%d Sector:%d at bitOffset:%d\n", vol, trk, sec, bitOffs_D5_SecHdr);
break;
default:
if ( reg.shift == 0xD5 ) {
// printf("D5 at bitOffset:%d\n", bitOffs);
wozTrackState = wozTrackState_D5;
bitOffs_D5_SecHdr = bitOffs;
}
break;
}
reg.shift = 0;
}
bitOffs++;
}
}
}
uint8_t woz_read() {
int track = woz_tmap.phase[disk.phase.count];
if (outdev) fprintf(outdev, "track: %d (%d) ", track, disk.phase.count);
if ( track >= 40 ) {
dbgPrintf("TRCK TOO HIGH!\n");
return rand();
}
#ifdef WOZ_REAL_SPIN
if ( track != track_loaded ) {
woz_loadTrack(track);
track_loaded = track;
}
WOZread.shift32 = 0;
bitOffset = (m6502.clktime >> 2) & 7;
trackOffset = (m6502.clktime >> 5) % WOZ_TRACK_BYTE_COUNT;
WOZread.next = woz_trks[track].data[ (trackOffset +1) % WOZ_TRACK_BYTE_COUNT ];
WOZread.data = woz_trks[track].data[ trackOffset ];
WOZread.prev = woz_trks[track].data[ (trackOffset -1) % WOZ_TRACK_BYTE_COUNT ];
WOZread.shift = woz_trks[track].data[ (trackOffset -2) % WOZ_TRACK_BYTE_COUNT ];
printf("clk:%llu bo:%u to:%u W:%08X\n", m6502.clktime, bitOffset, trackOffset, WOZread.shift32);
uint8_t state = 0;
// simulating the continous shift register in Disk ][
for (int i = bitOffset + 16; i; --i) {
WOZread.shift32 <<= 1;
switch (state) {
case 0:
WOZlatch = WOZread.shift;
if ( WOZread.valid ) {
state = 1;
WOZread.shift = 0;
}
break;
case 1:
// we do not latch the shift register for one 4us cycle
state = 0;
break;
default:
// this should not happen
state = 0;
break;
}
// printf("shft1: W:%08X L:%02X\n", WOZread.shift32, WOZlatch);
}
printf("clk:%llu bo:%u to:%u W:%08X B:%02X\n", m6502.clktime, bitOffset, trackOffset, WOZread.shift32, WOZlatch);
if ( WOZlatch & 0x80 ) {
printf("WOZlatch: %02X\n", WOZlatch);
static int readState = 0;
static int vol = 0;
static int trk = 0;
static int sec = 0;
switch (readState) {
case 0:
if ( 0xD5 == WOZlatch ) readState = 1;
else readState = 0;
break;
case 1:
if ( 0xAA == WOZlatch ) readState = 2;
else readState = 0;
break;
case 2:
if ( 0x96 == WOZlatch ) {
readState = 3;
printf("sector header marker\n");
}
else if ( 0xAD == WOZlatch ) {
readState = 10;
printf("sector data marker\n");
}
else readState = 0;
break;
case 3: // sector header, vol number 1
readState++;
vol = (WOZlatch << 1) | 1;
break;
case 4: // sector header, vol number 2
readState++;
vol &= WOZlatch;
printf("vol:%u ", vol);
break;
case 5: // sector header, trk number 1
readState++;
trk = (WOZlatch << 1) | 1;
break;
case 6: // sector header, trk number 2
readState++;
trk &= WOZlatch;
printf("trk:%u ", trk);
break;
case 7: // sector header, sec number 1
readState++;
sec = (WOZlatch << 1) | 1;
break;
case 8: // sector header, sec number 2
readState = 0;
sec &= WOZlatch;
printf("sec:%u\n", sec);
break;
default:
readState = 0;
break;
}
}
// switch ( WOZlatch ) {
// case 0xAA:
// case 0x96:
//// printf("%02X ", WOZlatch);
// printf("clk:%llu bo:%u to:%u B:%02X\n", m6502.clktime, bitOffset, trackOffset, WOZlatch);
// break;
//
// default:
// break;
// }
return WOZlatch;
#elif defined( WOZ_REAL_SPIN2 )
// clkelpased = m6502.clktime - disk.clk_last_read;
// disk.clk_last_read = m6502.clktime;
bitOffset = (m6502.clktime >> 2) & 7;
trackOffset = (m6502.clktime >> 5) % WOZ_TRACK_BYTE_COUNT;
trackEntry_t reg = prepared_track[trackOffset];
do {
switch (readState) {
case readNormal:
readLatch = reg.shift;
break;
case readHold:
default:
readState = readNormal;
break;
}
if (reg.shift & 0x80) {
reg.shift = 0;
readState = readHold;
}
reg.shift16 <<= 1;
} while ( --bitOffset > 0 );
printf("READ: clk:%llu to:%u bo:%llu B:%02X\n", m6502.clktime, trackOffset, (m6502.clktime >> 2) & 7, readLatch);
return readLatch;
#elif defined( WOZ_SEARCH_NEXTSECT )
static int clkBeforeSync = 0;
clkelpased = m6502.clktime + clkfrm - m6502.clklast;
m6502.clklast = m6502.clktime + clkfrm;
clkBeforeSync += clkelpased;
const int clkBeforeAdjusting = 1024;
const int magicShiftOffset = 8192;
uint16_t usedBytes = woz_trks[track].bytes_used < WOZ_TRACK_BYTE_COUNT ? woz_trks[track].bytes_used : WOZ_TRACK_BYTE_COUNT;
if ( usedBytes ) {
// printf("elpased : %llu (clkBefRd:%d)\n", clkelpased, clkBeforeSync);
if ( clkelpased > clkBeforeAdjusting ) {
// printf("NEED SYNC : %llu (clkBefRd:%d)\n", clkelpased, clkBeforeSync);
clkBeforeSync = 0;
// bitOffset = (clkelpased >> 2) & 7;
// bitOffset = 0;
// trackOffset += clkelpased >> 5;
// trackOffset %= usedBytes;
// preroll data stream
// WOZread.shift16 = 0;
// WOZread.data = woz_trks[track].data[trackOffset++];
// trackOffset %= usedBytes;
// WOZread.shift16 <<= bitOffset;
int w = 2; // 2 x 0xD5
for ( int i = 0; i < usedBytes * 8; i++ ) {
if ( ++bitOffset >= 8 ) {
bitOffset = 0;
trackOffset++;
trackOffset %= usedBytes;
WOZread.data = woz_trks[track].data[trackOffset];
}
WOZread.shift16 <<= 1;
if ( WOZread.valid ) {
uint8_t byte = WOZread.shift;
WOZread.shift = 0;
// find next sector or end of sector
if ( byte == 0xD5 ) {
// actually 2 sectors, because of DOS 3.3 interleaving algoritm
if ( --w <= 0 ) {
return byte;
}
}
}
}
}
// to avoid infinite loop and to search for bit 7 high
for ( int i = 0; i < usedBytes * 8; i++ ) {
if ( ++bitOffset >= 8 ) {
bitOffset = 0;
// if ( ++trackOffset >= WOZ_TRACK_BYTE_COUNT ) {
// trackOffset = 0;
// }
trackOffset++;
trackOffset %= usedBytes;
// printf("offs:%u\n", trackOffset);
WOZread.data = woz_trks[track].data[trackOffset];
}
WOZread.shift16 <<= 1;
if ( WOZread.valid ) {
uint8_t byte = WOZread.shift;
// printf("%02X ", byte);
WOZread.shift = 0;
if (outdev) fprintf(outdev, "byte: %02X\n", byte);
return byte;
}
}
if (outdev) fprintf(outdev, "TIME OUT!\n");
}
return rand();
#else // WOZ_REAL_SPIN
static int clkBeforeSync = 0;
clkelpased = m6502.clktime + clkfrm - m6502.clklast;
m6502.clklast = m6502.clktime + clkfrm;
clkBeforeSync += clkelpased;
const int clkBeforeAdjusting = 512;
const int magicShiftOffset = 50;
uint16_t usedBytes = woz_trks[track].bytes_used < WOZ_TRACK_BYTE_COUNT ? woz_trks[track].bytes_used : WOZ_TRACK_BYTE_COUNT;
if ( usedBytes ) {
// printf("elpased : %llu (clkBefRd:%d)\n", clkelpased, clkBeforeSync);
if ( clkelpased > clkBeforeAdjusting ) {
// printf("NEED SYNC : %llu (clkBefRd:%d)\n", clkelpased, clkBeforeSync);
clkBeforeSync = 0;
bitOffset = (clkelpased >> 2) & 7;
trackOffset += clkelpased >> 5;
trackOffset %= usedBytes;
// preroll data stream
WOZread.shift16 = 0;
WOZread.data = woz_trks[track].data[trackOffset++];
trackOffset %= usedBytes;
WOZread.shift16 <<= bitOffset;
for ( int i = 0; i < magicShiftOffset; i++ ) {
for ( ; bitOffset < 8; bitOffset++ ) {
WOZread.shift16 <<= 1;
if ( WOZread.valid ) {
WOZread.shift = 0;
}
}
WOZread.data = woz_trks[track].data[trackOffset++];
trackOffset %= usedBytes;
bitOffset = 0;
}
}
else {
uint64_t bitForward = (clkelpased >> 2);
// to avoid infinite loop and to search for bit 7 high
for ( uint64_t i = 0; i < bitForward; i++ ) {
if ( ++bitOffset >= 8 ) {
bitOffset = 0;
trackOffset++;
trackOffset %= usedBytes;
WOZread.data = woz_trks[track].data[trackOffset];
}
WOZread.shift16 <<= 1;
if ( WOZread.valid ) {
WOZread.shift = 0;
}
}
}
// to avoid infinite loop and to search for bit 7 high
for ( int i = 0; i < usedBytes * 8; i++ ) {
if ( WOZread.valid ) {
uint8_t byte = WOZread.shift;
WOZread.shift = 0;
// if (outdev) fprintf(outdev, "byte: %02X\n", byte);
return byte;
}
if ( ++bitOffset >= 8 ) {
bitOffset = 0;
trackOffset++;
trackOffset %= usedBytes;
WOZread.data = woz_trks[track].data[trackOffset];
}
WOZread.shift16 <<= 1;
}
// if (outdev) fprintf(outdev, "TIME OUT!\n");
}
return rand();
#endif // WOZ_REAL_SPIN
}
int woz_loadFile( const char * filename ) {
// char fullpath[256];
//
// strcpy(fullpath, resourcePath);
// strcat(fullpath, "/");
// strcat(fullpath, filename);
FILE * f = fopen(filename, "rb");
if (f == NULL) {
perror("Failed to read WOZ: ");
return WOZ_ERR_FILE_NOT_FOUND;
}
fread( &woz_header, 1, sizeof(woz_header_t), f);
if ( woz_header.magic != WOZ1_MAGIC ) {
return WOZ_ERR_NOT_WOZ_FILE;
}
while ( ! feof(f) ) {
// beginning of the chunk, so we can skip it later
long r = fread( &woz_chunk_header, 1, sizeof(woz_chunk_header_t), f);
if ( r != sizeof(woz_chunk_header_t) ) {
if ( r ) {
return WOZ_ERR_BAD_CHUNK_HDR;
}
// ok we just reached the end of the file, we should exit properly, close file handle etc
break;
}
long foffs = ftell(f);
void * buf = NULL;
switch ( woz_chunk_header.magic ) {
case WOZ_INFO_CHUNK_ID:
break;
case WOZ_TMAP_CHUNK_ID:
buf = &woz_tmap;
break;
case WOZ_TRKS_CHUNK_ID:
buf = woz_trks;
break;
case WOZ_META_CHUNK_ID:
break;
default:
break;
}
if (buf) {
r = fread( buf, 1, woz_chunk_header.size, f);
if ( r != woz_chunk_header.size ) {
return WOZ_ERR_BAD_DATA;
}
}
// make sure we are skipping unhandled chunks correctly
fseek(f, foffs + woz_chunk_header.size, SEEK_SET);
}
fclose(f);
// DO NOT COMMIT THIS! ONLY FOR DEBUG!!!
// woz_loadTrack(0x11);
return WOZ_ERR_OK;
}

200
ssasa
View File

@ -1,200 +0,0 @@
DEBUG: 0 no LDA
Line Cycle Disassembly A X Y P S
DEBUG: 0 no LDA
5 44223738 C65E: BD 8C C0 LDA $C08C,X 0xF3 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
6 44223742 C661: 10 FB BPL $C65E 0xF3 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
7 44223744 C663: 49 D5 EOR #$D5 0x26 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
8 44223746 C665: D0 F7 BNE $C65E 0x26 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
15 44223770 C65E: BD 8C C0 LDA $C08C,X 0xCE 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
16 44223774 C661: 10 FB BPL $C65E 0xCE 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
17 44223776 C663: 49 D5 EOR #$D5 0x1B 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
18 44223778 C665: D0 F7 BNE $C65E 0x1B 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
25 44223802 C65E: BD 8C C0 LDA $C08C,X 0xE5 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
26 44223806 C661: 10 FB BPL $C65E 0xE5 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
27 44223808 C663: 49 D5 EOR #$D5 0x30 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
28 44223810 C665: D0 F7 BNE $C65E 0x30 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
35 44223834 C65E: BD 8C C0 LDA $C08C,X 0xF4 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
36 44223838 C661: 10 FB BPL $C65E 0xF4 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
37 44223840 C663: 49 D5 EOR #$D5 0x21 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
38 44223842 C665: D0 F7 BNE $C65E 0x21 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
45 44223866 C65E: BD 8C C0 LDA $C08C,X 0xCD 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
46 44223870 C661: 10 FB BPL $C65E 0xCD 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
47 44223872 C663: 49 D5 EOR #$D5 0x18 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
48 44223874 C665: D0 F7 BNE $C65E 0x18 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
55 44223898 C65E: BD 8C C0 LDA $C08C,X 0xBE 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
56 44223902 C661: 10 FB BPL $C65E 0xBE 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
57 44223904 C663: 49 D5 EOR #$D5 0x6B 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
58 44223906 C665: D0 F7 BNE $C65E 0x6B 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
65 44223930 C65E: BD 8C C0 LDA $C08C,X 0xFF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
66 44223934 C661: 10 FB BPL $C65E 0xFF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
67 44223936 C663: 49 D5 EOR #$D5 0x2A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
68 44223938 C665: D0 F7 BNE $C65E 0x2A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
75 44223962 C65E: BD 8C C0 LDA $C08C,X 0xE7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
76 44223966 C661: 10 FB BPL $C65E 0xE7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
77 44223968 C663: 49 D5 EOR #$D5 0x32 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
78 44223970 C665: D0 F7 BNE $C65E 0x32 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
85 44223994 C65E: BD 8C C0 LDA $C08C,X 0xCD 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
86 44223998 C661: 10 FB BPL $C65E 0xCD 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
87 44224000 C663: 49 D5 EOR #$D5 0x18 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
88 44224002 C665: D0 F7 BNE $C65E 0x18 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
95 44224026 C65E: BD 8C C0 LDA $C08C,X 0xBA 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
96 44224030 C661: 10 FB BPL $C65E 0xBA 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
97 44224032 C663: 49 D5 EOR #$D5 0x6F 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
98 44224034 C665: D0 F7 BNE $C65E 0x6F 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
105 44224058 C65E: BD 8C C0 LDA $C08C,X 0xB2 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
106 44224062 C661: 10 FB BPL $C65E 0xB2 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
107 44224064 C663: 49 D5 EOR #$D5 0x67 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
108 44224066 C665: D0 F7 BNE $C65E 0x67 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
115 44224090 C65E: BD 8C C0 LDA $C08C,X 0xA7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
116 44224094 C661: 10 FB BPL $C65E 0xA7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
117 44224096 C663: 49 D5 EOR #$D5 0x72 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
118 44224098 C665: D0 F7 BNE $C65E 0x72 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
125 44224122 C65E: BD 8C C0 LDA $C08C,X 0xFC 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
126 44224126 C661: 10 FB BPL $C65E 0xFC 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
127 44224128 C663: 49 D5 EOR #$D5 0x29 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
128 44224130 C665: D0 F7 BNE $C65E 0x29 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
135 44224154 C65E: BD 8C C0 LDA $C08C,X 0xF2 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
136 44224158 C661: 10 FB BPL $C65E 0xF2 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
137 44224160 C663: 49 D5 EOR #$D5 0x27 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
138 44224162 C665: D0 F7 BNE $C65E 0x27 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
145 44224186 C65E: BD 8C C0 LDA $C08C,X 0xE9 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
146 44224190 C661: 10 FB BPL $C65E 0xE9 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
147 44224192 C663: 49 D5 EOR #$D5 0x3C 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
148 44224194 C665: D0 F7 BNE $C65E 0x3C 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
155 44224218 C65E: BD 8C C0 LDA $C08C,X 0xFF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
156 44224222 C661: 10 FB BPL $C65E 0xFF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
157 44224224 C663: 49 D5 EOR #$D5 0x2A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
158 44224226 C665: D0 F7 BNE $C65E 0x2A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
165 44224250 C65E: BD 8C C0 LDA $C08C,X 0xCF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
166 44224254 C661: 10 FB BPL $C65E 0xCF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
167 44224256 C663: 49 D5 EOR #$D5 0x1A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
168 44224258 C665: D0 F7 BNE $C65E 0x1A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
175 44224282 C65E: BD 8C C0 LDA $C08C,X 0xA7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
176 44224286 C661: 10 FB BPL $C65E 0xA7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
177 44224288 C663: 49 D5 EOR #$D5 0x72 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
178 44224290 C665: D0 F7 BNE $C65E 0x72 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
185 44224314 C65E: BD 8C C0 LDA $C08C,X 0xDF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
186 44224318 C661: 10 FB BPL $C65E 0xDF 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
187 44224320 C663: 49 D5 EOR #$D5 0x0A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
188 44224322 C665: D0 F7 BNE $C65E 0x0A 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
195 44224346 C65E: BD 8C C0 LDA $C08C,X 0x9E 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
196 44224350 C661: 10 FB BPL $C65E 0x9E 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
197 44224352 C663: 49 D5 EOR #$D5 0x4B 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
198 44224354 C665: D0 F7 BNE $C65E 0x4B 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
205 44224378 C65E: BD 8C C0 LDA $C08C,X 0xE7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
206 44224382 C661: 10 FB BPL $C65E 0xE7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
207 44224384 C663: 49 D5 EOR #$D5 0x32 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
208 44224386 C665: D0 F7 BNE $C65E 0x32 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
215 44224410 C65E: BD 8C C0 LDA $C08C,X 0x9B 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
216 44224414 C661: 10 FB BPL $C65E 0x9B 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
217 44224416 C663: 49 D5 EOR #$D5 0x4E 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
218 44224418 C665: D0 F7 BNE $C65E 0x4E 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
225 44224442 C65E: BD 8C C0 LDA $C08C,X 0xBA 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
226 44224446 C661: 10 FB BPL $C65E 0xBA 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
227 44224448 C663: 49 D5 EOR #$D5 0x6F 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
228 44224450 C665: D0 F7 BNE $C65E 0x6F 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
235 44224474 C65E: BD 8C C0 LDA $C08C,X 0xFD 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
236 44224478 C661: 10 FB BPL $C65E 0xFD 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
237 44224480 C663: 49 D5 EOR #$D5 0x28 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
238 44224482 C665: D0 F7 BNE $C65E 0x28 0x60 0x00 0x34 0xFE
DEBUG: 0 no LDA
245 44224506 C65E: BD 8C C0 LDA $C08C,X 0xE7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
246 44224510 C661: 10 FB BPL $C65E 0xE7 0x60 0x00 0xB4 0xFE
DEBUG: 0 no LDA
247 44224512 C663: 49 D5 EOR #$D5 0x32 0x60 0x00 0x34 0xFE