「地形データ」の編集履歴(バックアップ)一覧はこちら

地形データ」(2008/11/01 (土) 16:32:14) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

** 圧縮形式 RAREWARE の SFC ソフトに使用されている圧縮形式です. 今のところ, ・スーパードンキーコング 2 ・スーパードンキーコング 3 ・KILLER INSTINCT などで確認しています. - ヘッダ部分 Byte[00] : - 未使用 - (前の圧縮データの終端のようです) Byte[01] : 8bit 出現率 No.1(?) Byte[02] : 8bit 出現率 No.2(?) Byte[03] : 8bit 出現率 多 Byte[04] : 8bit 出現率 多 Byte[05-06]: 16bit 出現率 No.1(?) Byte[07-26]: 16bit 出現率 No.2~No.17(?) Byte[27-] : 圧縮データ - 圧縮コード 全て 4bit 単位で処理されていて, 頻繁に 4bit ずれます. (4bitずれた時は別のプログラムで処理していますが, 内容は同じです) [0x_] : ROM から x バイトコピー, [00]の場合は伸張処理終了 [1xx] : xx を入力する. [2xxyy] : yyxx を入力する. [3xyy] : yy を (x+3) 回入力する. [4x] : Byte[01] ( 8bit) を (x+3) 回入力する. [5x] : Byte[02] ( 8bit) を (x+3) 回入力する. [6] : Byte[05] (16bit) を入力する. [7] : Byte[03] ( 8bit) を入力する. [8] : Byte[04] ( 8bit) を入力する. [9x] : (x+2) バイト前から 2 バイトコピー [Axyy] : {(x+3)+yy} バイト前から (x+3) バイトコピー [Bxyyz] : (yyz + 103h) バイト前から (x+3) バイトコピー [Cxyyzz] : yyzz(BigEndian) バイト前から (x+3) バイトコピー [D] : 1 バイト前から 1 バイトコピー [E] : 2 バイト前から 2 バイトコピー [Fx] : Byte[07+2x](16bit) を 書き込む ** ソース ;------------------------------------------------ ; 圧縮コード JMP 先 ;------------------------------------------------ $BB/8001 4C 2A 8E JMP $8E2A [$7F:8E2A] ; 圧縮コード[0x] $BB/8005 4C 96 8E JMP $8E96 [$7F:8E96] ; 圧縮コード[1x] $BB/8009 4C B4 8E JMP $8EB4 [$7F:8EB4] ; 圧縮コード[2x] $BB/800D 4C EB 8E JMP $8EEB [$7F:8EEB] ; 圧縮コード[3x] $BB/8011 4C 26 8F JMP $8F26 [$7F:8F26] ; 圧縮コード[4x] $BB/8015 4C 53 8F JMP $8F53 [$7F:8F53] ; 圧縮コード[5x] $BB/8019 4C 80 8F JMP $8F80 [$7F:8F80] ; 圧縮コード[6x] $BB/801D 4C 9C 8F JMP $8F9C [$7F:8F9C] ; 圧縮コード[7x] $BB/8021 4C AE 8F JMP $8FAE [$7F:8FAE] ; 圧縮コード[8x] $BB/8025 4C C0 8F JMP $8FC0 [$7F:8FC0] ; 圧縮コード[9x] $BB/8029 4C FF 8F JMP $8FFF [$7F:8FFF] ; 圧縮コード[Ax] $BB/802D 4C 62 90 JMP $9062 [$7F:9062] ; 圧縮コード[Bx] $BB/8031 4C C9 90 JMP $90C9 [$7F:90C9] ; 圧縮コード[Cx] $BB/8035 4C 38 91 JMP $9138 [$7F:9138] ; 圧縮コード[Dx] $BB/8039 4C 50 91 JMP $9150 [$7F:9150] ; 圧縮コード[Ex] $BB/803D 4C 76 91 JMP $9176 [$7F:9176] ; 圧縮コード[Fx] ;------------------------------------------------ ; サブ圧縮コード JMP 先 ;------------------------------------------------ $BB/8040 4C 6F 8E JMP $8E6F [$7F:8E6F] ; サブ圧縮コード[00] $BB/8044 4C AA 8E JMP $8EAA [$7F:8EAA] ; サブ圧縮コード[01] $BB/8048 4C DB 8E JMP $8EDB [$7F:8EDB] ; サブ圧縮コード[02] $BB/804C 4C 01 8F JMP $8F01 [$7F:8F01] ; サブ圧縮コード[03] $BB/8050 4C 3B 8F JMP $8F3B [$7F:8F3B] ; サブ圧縮コード[04] $BB/8054 4C 68 8F JMP $8F68 [$7F:8F68] ; サブ圧縮コード[05] $BB/8058 4C 8E 8F JMP $8F8E [$7F:8F8E] ; サブ圧縮コード[06] $BB/805C 4C A5 8F JMP $8FA5 [$7F:8FA5] ; サブ圧縮コード[07] $BB/8060 4C B7 8F JMP $8FB7 [$7F:8FB7] ; サブ圧縮コード[08] $BB/8064 4C DE 8F JMP $8FDE [$7F:8FDE] ; サブ圧縮コード[09] $BB/8068 4C 29 90 JMP $9029 [$7F:9029] ; サブ圧縮コード[0A] $BB/806C 4C 97 90 JMP $9097 [$7F:9097] ; サブ圧縮コード[0B] $BB/8070 4C F2 90 JMP $90F2 [$7F:90F2] ; サブ圧縮コード[0C] $BB/8074 4C 44 91 JMP $9144 [$7F:9144] ; サブ圧縮コード[0D] $BB/8078 4C 63 91 JMP $9163 [$7F:9163] ; サブ圧縮コード[0E] $BB/807C 4C 90 91 JMP $9190 [$7F:9190] ; サブ圧縮コード[0F] ;------------------------------------------------ ; 伸張処理開始 ;------------------------------------------------ $BB/8D91 85 38 STA $38 [$00:0038] ; $BB/8D93 A9 7F 00 LDA #$007F ; $BB/8D96 85 3A STA $3A [$00:003A] ; $BB/8D98 86 34 STX $34 [$00:0034] ; $BB/8D9A 84 36 STY $36 [$00:0036] ; $BB/8D9C 80 10 BRA $10 [$8DAE] ; ; $BB/8D9E 8A TXA ; $BB/8D9F BB TYX ; $BB/8DA0 85 34 STA $34 [$00:0034] ; $34 : 参照アドレス $BB/8DA2 86 36 STX $36 [$00:0036] ; $BB/8DA4 A9 00 00 LDA #$0000 ; $BB/8DA7 85 38 STA $38 [$00:0038] ; $BB/8DA9 A9 7F 00 LDA #$007F ; $BB/8DAC 85 3A STA $3A [$00:003A] ; $38 : 伸張先アドレス ; $BB/8DAE A9 FF FF LDA #$FFFF ; $BB/8DB1 85 32 STA $32 [$00:0032] ; $32 : #$FFFF $BB/8DB3 8B PHB ; $BB/8DB4 5A PHY ; $BB/8DB5 A9 00 21 LDA #$2100 ; $BB/8DB8 85 46 STA $46 [$00:0046] ; $BB/8DBA A9 7E 00 LDA #$007E ; $BB/8DBD 85 48 STA $48 [$00:0048] ; $46 : #$7E2100 $BB/8DBF 85 44 STA $44 [$00:0044] ; $BB/8DC1 A9 00 20 LDA #$2000 ; $BB/8DC4 85 42 STA $42 [$00:0042] ; $42 : #$7E2000 $BB/8DC6 22 AF 91 BB JSL $BB91AF[$BB:91AF] ; (伸張処理高速化用) $BB/8DCA A6 38 LDX $38 [$00:0038] ; $BB/8DCC A0 01 00 LDY #$0001 ; $BB/8DCF A9 01 80 LDA #$8001 ; $BB/8DD2 85 4E STA $4E [$00:004E] ; $4E : #$8001 $BB/8DD4 A9 40 80 LDA #$8040 ; $BB/8DD7 85 4A STA $4A [$00:004A] ; $4A : #$8040 $BB/8DD9 E2 20 SEP #$20 ; $BB/8DDB A5 3A LDA $3A [$00:003A] ; $BB/8DDD 48 PHA ; $BB/8DDE AB PLB ; $BB/8DDF B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x01] $BB/8DE1 85 52 STA $52 [$00:0052] ; $52 = Byte[0x01] $BB/8DE3 C8 INY ; $BB/8DE4 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x02] $BB/8DE6 85 53 STA $53 [$00:0053] ; $53 = Byte[0x02] $BB/8DE8 C8 INY ; $BB/8DE9 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x03] $BB/8DEB 85 56 STA $56 [$00:0056] ; $56 = Byte[0x03] $BB/8DED C8 INY ; $BB/8DEE B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x04] $BB/8DF0 85 57 STA $57 [$00:0057] ; $57 = Byte[0x04] $BB/8DF2 C8 INY ; $BB/8DF3 C2 20 REP #$20 ; $BB/8DF5 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x05-0x06] $BB/8DF7 85 54 STA $54 [$00:0054] ; $54 = Byte[0x05-0x06] $BB/8DF9 A0 27 00 LDY #$0027 ; $BB/8DFC 64 3C STZ $3C [$00:003C] ; $BB/8DFE 64 3E STZ $3E [$00:003E] ; $BB/8E00 E2 20 SEP #$20 ; ; $BB/8E02 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x27~] $BB/8E04 C8 INY ; $BB/8E05 85 46 STA $46 [$00:0046] ; $BB/8E07 29 F0 AND #$F0 ; $BB/8E09 4A LSR A ; $BB/8E0A 4A LSR A ; $BB/8E0B 85 4E STA $4E [$00:004E] ; $BB/8E0D D4 4E PEI $4E ; PUSH $4E $BB/8E0F 60 RTS ; JMP $4E+1 ;------------------------------------------------ ; サブ圧縮コードへのジャンプ : $46 依存 ;------------------------------------------------ $BB/8E10 A5 46 LDA $46 [$00:0046] ; $BB/8E12 29 0F AND #$0F ; $BB/8E14 0A ASL A ; $BB/8E15 0A ASL A ; $BB/8E16 69 3F ADC #$3F ; $BB/8E18 85 4A STA $4A [$00:004A] ; $BB/8E1A D4 4A PEI $4A ; PUSH $4A $BB/8E1C 60 RTS ; JMP $4A+1 ;------------------------------------------------ ; サブ圧縮コードへのジャンプ : $42 依存 ;------------------------------------------------ $BB/8E1D A5 42 LDA $42 [$00:0042] ; $BB/8E1F 29 0F AND #$0F ; $BB/8E21 0A ASL A ; $BB/8E22 0A ASL A ; $BB/8E23 69 3F ADC #$3F ; $BB/8E25 85 4A STA $4A [$00:004A] ; $BB/8E27 D4 4A PEI $4A ; PUSH $4A $BB/8E29 60 RTS ; JMP $4A+1 ;------------------------------------------------ ; 圧縮コード[0x] ; ROMから x バイトコピー, [00]の場合は伸張処理終了 ;------------------------------------------------ $BB/8E2A A5 46 LDA $46 [$00:0046] ; $BB/8E2C 29 0F AND #$0F ; $BB/8E2E F0 10 BEQ $10 [$8E40] ; $BB/8E30 85 3C STA $3C [$00:003C] ; ; $BB/8E32 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E34 C8 INY ; $BB/8E35 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8E38 E8 INX ; $BB/8E39 C6 3C DEC $3C [$00:003C] ; $BB/8E3B D0 F5 BNE $F5 [$8E32] ; $BB/8E3D 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; ;------------------------------------------------ $BB/8E40 C2 20 REP #$20 ; $BB/8E42 7A PLY ; $BB/8E43 AB PLB ; $BB/8E44 8A TXA ; $BB/8E45 38 SEC ; $BB/8E46 E5 38 SBC $38 [$00:0038] ; $BB/8E48 AA TAX ; $BB/8E49 A5 32 LDA $32 [$00:0032] ; $BB/8E4B 30 21 BMI $21 [$8E6E] ; $BB/8E4D A5 58 LDA $58 [$00:0058] ; $BB/8E4F 8D 16 21 STA $2116 [$7F:2116] ; $BB/8E52 A5 38 LDA $38 [$00:0038] ; $BB/8E54 8D 02 43 STA $4302 [$7F:4302] ; $BB/8E57 A5 3A LDA $3A [$00:003A] ; $BB/8E59 8D 04 43 STA $4304 [$7F:4304] ; $BB/8E5C 8E 05 43 STX $4305 [$7F:4305] ; $BB/8E5F A9 01 18 LDA #$1801 ; $BB/8E62 8D 00 43 STA $4300 [$7F:4300] ; $BB/8E65 E2 20 SEP #$20 ; $BB/8E67 A9 01 LDA #$01 ; $BB/8E69 8D 0B 42 STA $420B [$7F:420B] ; $BB/8E6C C2 20 REP #$20 ; ; $BB/8E6E 6B RTL ; ;------------------------------------------------ ; サブ圧縮コード[_0 xy y~ ~z] ; ROMから x バイトコピー(但し, 4bitずれている)した後, ; ; サブ圧縮コード[_z]を実行. [_0 0_]の形の場合は伸張処理終了. ;------------------------------------------------ $BB/8E6F B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E71 C8 INY ; $BB/8E72 85 42 STA $42 [$00:0042] ; $BB/8E74 85 46 STA $46 [$00:0046] ; $BB/8E76 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8E78 F0 C6 BEQ $C6 [$8E40] ; -> END ; $BB/8E7A 85 3C STA $3C [$00:003C] ; $BB/8E7C A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8E7E 85 3E STA $3E [$00:003E] ; $BB/8E80 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E82 C8 INY ; $BB/8E83 85 42 STA $42 [$00:0042] ; $BB/8E85 85 46 STA $46 [$00:0046] ; $BB/8E87 A5 3E LDA $3E [$00:003E] ; $BB/8E89 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8E8B 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8E8E E8 INX ; $BB/8E8F C6 3C DEC $3C [$00:003C] ; $BB/8E91 D0 E9 BNE $E9 [$8E7C] ; ; $BB/8E93 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; 圧縮コード[1x xy] ; xx を入力後, サブ圧縮コード[_y]を実行 ;------------------------------------------------ $BB/8E96 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8E98 85 3E STA $3E [$00:003E] ; $BB/8E9A B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E9C C8 INY ; $BB/8E9D 85 42 STA $42 [$00:0042] ; $BB/8E9F A5 3E LDA $3E [$00:003E] ; $BB/8EA1 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8EA3 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EA6 E8 INX ; $BB/8EA7 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; サブ圧縮コード[_1 xx] ; xx を 入力. ;------------------------------------------------ $BB/8EAA B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EAC C8 INY ; $BB/8EAD 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EB0 E8 INX ; $BB/8EB1 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[2x xy yz] ; xx yy を入力した後, サブ圧縮コード[_z]を実行. ;------------------------------------------------ $BB/8EB4 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8EB6 85 3E STA $3E [$00:003E] ; $BB/8EB8 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EBA C8 INY ; $BB/8EBB 85 42 STA $42 [$00:0042] ; $42 : 0* 系処理 $BB/8EBD 85 46 STA $46 [$00:0046] ; $46 : *0 系処理 $BB/8EBF A5 3E LDA $3E [$00:003E] ; $BB/8EC1 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8EC3 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EC6 E8 INX ; $BB/8EC7 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8EC9 85 3E STA $3E [$00:003E] ; $BB/8ECB B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8ECD C8 INY ; $BB/8ECE 85 42 STA $42 [$00:0042] ; $BB/8ED0 A5 3E LDA $3E [$00:003E] ; $BB/8ED2 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8ED4 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8ED7 E8 INX ; $BB/8ED8 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; サブ圧縮コード[_2] : ROMから 2 バイトコピー. ;------------------------------------------------ $BB/8EDB C2 20 REP #$20 ; $BB/8EDD B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EDF 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EE2 C8 INY ; $BB/8EE3 C8 INY ; $BB/8EE4 E8 INX ; $BB/8EE5 E8 INX ; $BB/8EE6 E2 20 SEP #$20 ; $BB/8EE8 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[3x yy] ; yy を (x+3) 回入力. ;------------------------------------------------ $BB/8EEB A5 46 LDA $46 [$00:0046] ; $BB/8EED 29 0F AND #$0F ; $BB/8EEF 69 03 ADC #$03 ; $BB/8EF1 85 3C STA $3C [$00:003C] ; $BB/8EF3 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EF5 C8 INY ; ; $BB/8EF6 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EF9 E8 INX ; $BB/8EFA C6 3C DEC $3C [$00:003C] ; $BB/8EFC D0 F8 BNE $F8 [$8EF6] ; $BB/8EFE 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_3 xy yz] ; yy を (x+3) 回入力後, サブ圧縮コード[_z]を実行. ;------------------------------------------------ $BB/8F01 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F03 C8 INY ; $BB/8F04 85 42 STA $42 [$00:0042] ; $BB/8F06 85 46 STA $46 [$00:0046] ; $BB/8F08 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F0A 69 03 ADC #$03 ; $BB/8F0C 85 3C STA $3C [$00:003C] ; $BB/8F0E A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8F10 85 3E STA $3E [$00:003E] ; $BB/8F12 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F14 C8 INY ; $BB/8F15 85 42 STA $42 [$00:0042] ; $BB/8F17 A5 3E LDA $3E [$00:003E] ; $BB/8F19 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F1B 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F1E E8 INX ; $BB/8F1F C6 3C DEC $3C [$00:003C] ; $BB/8F21 D0 F8 BNE $F8 [$8F1B] ; $BB/8F23 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[4x] : (x+3) 回 Byte[01] を入力. ;------------------------------------------------ $BB/8F26 A5 46 LDA $46 [$00:0046] ; $BB/8F28 29 0F AND #$0F ; $BB/8F2A 69 03 ADC #$03 ; $BB/8F2C 85 3C STA $3C [$00:003C] ; ; $BB/8F2E A5 52 LDA $52 [$00:0052] ; $52: Byte[01] $BB/8F30 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F33 E8 INX ; $BB/8F34 C6 3C DEC $3C [$00:003C] ; $BB/8F36 D0 F8 BNE $F8 [$8F30] ; $BB/8F38 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_4 xy] : (x+3) 回 Byte[01] を入力後, サブ圧縮コード[_y]を実行 ;------------------------------------------------ $BB/8F3B B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F3D C8 INY ; $BB/8F3E 85 42 STA $42 [$00:0042] ; $BB/8F40 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F42 69 03 ADC #$03 ; $BB/8F44 85 3C STA $3C [$00:003C] ; ; $BB/8F46 A5 52 LDA $52 [$00:0052] ; $BB/8F48 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F4B E8 INX ; $BB/8F4C C6 3C DEC $3C [$00:003C] ; $BB/8F4E D0 F8 BNE $F8 [$8F48] ; $BB/8F50 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[5x] ; (x+3) 回 Byte[02]を入力 ;------------------------------------------------ $BB/8F53 A5 46 LDA $46 [$00:0046] ; $BB/8F55 29 0F AND #$0F ; $BB/8F57 69 03 ADC #$03 ; $BB/8F59 85 3C STA $3C [$00:003C] ; $BB/8F5B A5 53 LDA $53 [$00:0053] ; ; $BB/8F5D 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F60 E8 INX ; $BB/8F61 C6 3C DEC $3C [$00:003C] ; $BB/8F63 D0 F8 BNE $F8 [$8F5D] ; $BB/8F65 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_5 xy] : (x+3) 回 Byte[02]を入力後, サブ圧縮コード[_y]を実行 ;------------------------------------------------ $BB/8F68 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F6A C8 INY ; $BB/8F6B 85 42 STA $42 [$00:0042] ; $BB/8F6D A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F6F 69 03 ADC #$03 ; $BB/8F71 85 3C STA $3C [$00:003C] ; $BB/8F73 A5 53 LDA $53 [$00:0053] ; $BB/8F75 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F78 E8 INX ; $BB/8F79 C6 3C DEC $3C [$00:003C] ; $BB/8F7B D0 F8 BNE $F8 [$8F75] ; $BB/8F7D 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[6x] ; Byte[05-06]を入力後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/8F80 C2 20 REP #$20 ; $BB/8F82 A5 54 LDA $54 [$00:0054] ; $54 : Byte[05-06] $BB/8F84 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F87 E8 INX ; $BB/8F88 E8 INX ; $BB/8F89 E2 20 SEP #$20 ; $BB/8F8B 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_6] ; Byte[05-06] を入力 ;------------------------------------------------ $BB/8F8E C2 20 REP #$20 ; $BB/8F90 A5 54 LDA $54 [$00:0054] ; $54 : Byte[05-06] $BB/8F92 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F95 E8 INX ; $BB/8F96 E8 INX ; $BB/8F97 E2 20 SEP #$20 ; $BB/8F99 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[7x] ; Byte[03]を入力後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/8F9C A5 56 LDA $56 [$00:0056] ; $56 : Byte[03] $BB/8F9E 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FA1 E8 INX ; $BB/8FA2 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_7] ; Byte[03]を入力 ;------------------------------------------------ $BB/8FA5 A5 56 LDA $56 [$00:0056] ; $56 : Byte[03] $BB/8FA7 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FAA E8 INX ; $BB/8FAB 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[8x] ; Byte[04]を入力後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/8FAE A5 57 LDA $57 [$00:0057] ; $57 : Byte[04] $BB/8FB0 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FB3 E8 INX ; $BB/8FB4 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_8] ; Byte[04]を入力 ;------------------------------------------------ $BB/8FB7 A5 57 LDA $57 [$00:0057] ; $57 : Byte[04] $BB/8FB9 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FBC E8 INX ; $BB/8FBD 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[9x] : (x+2)バイト前から 2 バイトコピー ;------------------------------------------------ $BB/8FC0 5A PHY ; $BB/8FC1 A5 46 LDA $46 [$00:0046] ; $BB/8FC3 29 0F AND #$0F ; $BB/8FC5 69 02 ADC #$02 ; $BB/8FC7 85 3E STA $3E [$00:003E] ; $BB/8FC9 C2 20 REP #$20 ; $BB/8FCB 8A TXA ; $BB/8FCC 38 SEC ; $BB/8FCD E5 3E SBC $3E [$00:003E] ; $BB/8FCF A8 TAY ; $BB/8FD0 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/8FD3 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FD6 E8 INX ; $BB/8FD7 E8 INX ; $BB/8FD8 E2 20 SEP #$20 ; $BB/8FDA 7A PLY ; $BB/8FDB 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_9 xy] : (x+2)バイト前から 2 バイトコピー後, サブ圧縮コード[_y]を実行. ;------------------------------------------------ $BB/8FDE B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8FE0 C8 INY ; $BB/8FE1 85 42 STA $42 [$00:0042] ; $BB/8FE3 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8FE5 69 02 ADC #$02 ; $BB/8FE7 85 3E STA $3E [$00:003E] ; $BB/8FE9 5A PHY ; $BB/8FEA C2 20 REP #$20 ; $BB/8FEC 8A TXA ; $BB/8FED 38 SEC ; $BB/8FEE E5 3E SBC $3E [$00:003E] ; $BB/8FF0 A8 TAY ; $BB/8FF1 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/8FF4 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FF7 E8 INX ; $BB/8FF8 E8 INX ; $BB/8FF9 E2 20 SEP #$20 ; $BB/8FFB 7A PLY ; $BB/8FFC 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[Ax yy] : {(x+3)+ yy}バイト前から (x+3) バイト参照 ;------------------------------------------------ $BB/8FFF A5 46 LDA $46 [$00:0046] ; $BB/9001 29 0F AND #$0F ; $BB/9003 69 03 ADC #$03 ; $BB/9005 85 3C STA $3C [$00:003C] ; $BB/9007 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9009 85 3E STA $3E [$00:003E] ; $BB/900B C8 INY ; $BB/900C 5A PHY ; $BB/900D C2 20 REP #$20 ; $BB/900F 8A TXA ; $BB/9010 38 SEC ; $BB/9011 E5 3C SBC $3C [$00:003C] ; $BB/9013 38 SEC ; $BB/9014 E5 3E SBC $3E [$00:003E] ; $BB/9016 A8 TAY ; $BB/9017 E2 20 SEP #$20 ; $BB/9019 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/901C C8 INY ; $BB/901D 9D 00 00 STA $0000,x[$7F:0000] ; $BB/9020 E8 INX ; $BB/9021 C6 3C DEC $3C [$00:003C] ; $BB/9023 D0 F4 BNE $F4 [$9019] ; $BB/9025 7A PLY ; $BB/9026 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_A xy yz] ; {(x+3)+ yy}バイト前から (x+3) バイトコピー後, ; ; サブ圧縮コード[_z]を実行 ;------------------------------------------------ $BB/9029 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/902B C8 INY ; $BB/902C 85 42 STA $42 [$00:0042] ; $BB/902E 85 46 STA $46 [$00:0046] ; $BB/9030 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/9032 69 03 ADC #$03 ; $BB/9034 85 3C STA $3C [$00:003C] ; $BB/9036 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/9038 85 3E STA $3E [$00:003E] ; $BB/903A B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/903C C8 INY ; $BB/903D 85 42 STA $42 [$00:0042] ; $BB/903F A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/9041 05 3E ORA $3E [$00:003E] ; $BB/9043 85 3E STA $3E [$00:003E] ; $BB/9045 5A PHY ; $BB/9046 C2 20 REP #$20 ; $BB/9048 8A TXA ; $BB/9049 38 SEC ; $BB/904A E5 3C SBC $3C [$00:003C] ; $BB/904C 38 SEC ; $BB/904D E5 3E SBC $3E [$00:003E] ; $BB/904F A8 TAY ; $BB/9050 E2 20 SEP #$20 ; $BB/9052 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/9055 C8 INY ; $BB/9056 9D 00 00 STA $0000,x[$7F:0000] ; $BB/9059 E8 INX ; $BB/905A C6 3C DEC $3C [$00:003C] ; $BB/905C D0 F4 BNE $F4 [$9052] ; $BB/905E 7A PLY ; $BB/905F 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[Bx yy zw] : (yyz + 103h)バイト前から (x+3) バイトコピーし, ; : サブ圧縮コード[_w]を実行. ;------------------------------------------------ $BB/9062 A5 46 LDA $46 [$00:0046] ; $BB/9064 29 0F AND #$0F ; $BB/9066 69 03 ADC #$03 ; $BB/9068 85 3C STA $3C [$00:003C] ; $BB/906A B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/906C C8 INY ; $BB/906D EB XBA ; $BB/906E B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9070 C8 INY ; $BB/9071 85 46 STA $46 [$00:0046] ; $BB/9073 C2 20 REP #$20 ; $BB/9075 4A LSR A ; $BB/9076 4A LSR A ; $BB/9077 4A LSR A ; $BB/9078 4A LSR A ; $BB/9079 18 CLC ; $BB/907A 69 03 01 ADC #$0103 ; $BB/907D 85 40 STA $40 [$00:0040] ; $BB/907F 5A PHY ; $BB/9080 8A TXA ; $BB/9081 38 SEC ; $BB/9082 E5 40 SBC $40 [$00:0040] ; $BB/9084 A8 TAY ; $BB/9085 E2 20 SEP #$20 ; $BB/9087 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/908A C8 INY ; $BB/908B 9D 00 00 STA $0000,x[$7F:0000] ; $BB/908E E8 INX ; $BB/908F C6 3C DEC $3C [$00:003C] ; $BB/9091 D0 F4 BNE $F4 [$9087] ; $BB/9093 7A PLY ; $BB/9094 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_B xy yz] : (yyz + 103h)バイト前から (x+3) バイトコピー. ;------------------------------------------------ $BB/9097 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9099 C8 INY ; $BB/909A 85 42 STA $42 [$00:0042] ; $BB/909C A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/909E 69 03 ADC #$03 ; $BB/90A0 85 3C STA $3C [$00:003C] ; $BB/90A2 A5 42 LDA $42 [$00:0042] ; $BB/90A4 29 0F AND #$0F ; $BB/90A6 EB XBA ; $BB/90A7 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/90A9 C8 INY ; $BB/90AA C2 20 REP #$20 ; $BB/90AC 69 03 01 ADC #$0103 ; $BB/90AF 85 40 STA $40 [$00:0040] ; $BB/90B1 5A PHY ; $BB/90B2 8A TXA ; $BB/90B3 38 SEC ; $BB/90B4 E5 40 SBC $40 [$00:0040] ; $BB/90B6 A8 TAY ; $BB/90B7 E2 20 SEP #$20 ; $BB/90B9 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/90BC C8 INY ; $BB/90BD 9D 00 00 STA $0000,x[$7F:0000] ; $BB/90C0 E8 INX ; $BB/90C1 C6 3C DEC $3C [$00:003C] ; $BB/90C3 D0 F4 BNE $F4 [$90B9] ; $BB/90C5 7A PLY ; $BB/90C6 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[Cx yy zz] : yyzz(ビッグエンディアン)バイト前から (x+3) バイトコピー ;------------------------------------------------ $BB/90C9 A5 46 LDA $46 [$00:0046] ; $BB/90CB 29 0F AND #$0F ; $BB/90CD 69 03 ADC #$03 ; $BB/90CF 85 3C STA $3C [$00:003C] ; $BB/90D1 C2 20 REP #$20 ; $BB/90D3 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/90D5 EB XBA ; $BB/90D6 85 40 STA $40 [$00:0040] ; $BB/90D8 C8 INY ; $BB/90D9 C8 INY ; $BB/90DA 5A PHY ; $BB/90DB 8A TXA ; $BB/90DC 38 SEC ; $BB/90DD E5 40 SBC $40 [$00:0040] ; $BB/90DF A8 TAY ; $BB/90E0 E2 20 SEP #$20 ; ; $BB/90E2 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/90E5 C8 INY ; $BB/90E6 9D 00 00 STA $0000,x[$7F:0000] ; $BB/90E9 E8 INX ; $BB/90EA C6 3C DEC $3C [$00:003C] ; $BB/90EC D0 F4 BNE $F4 [$90E2] ; $BB/90EE 7A PLY ; $BB/90EF 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_C xy yz zw] : yyzz(ビッグエンディアン)バイト前から (x+3) バイトコピー後, ; : サブ圧縮コード[_w]を実行. ;------------------------------------------------ $BB/90F2 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/90F4 C8 INY ; $BB/90F5 85 42 STA $42 [$00:0042] ; $BB/90F7 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/90F9 69 03 ADC #$03 ; $BB/90FB 85 3C STA $3C [$00:003C] ; $BB/90FD A5 42 LDA $42 [$00:0042] ; $BB/90FF EB XBA ; $BB/9100 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9102 C8 INY ; $BB/9103 C2 20 REP #$20 ; $BB/9105 0A ASL A ; $BB/9106 0A ASL A ; $BB/9107 0A ASL A ; $BB/9108 0A ASL A ; $BB/9109 85 40 STA $40 [$00:0040] ; $BB/910B 29 FF 00 AND #$00FF ; $BB/910E E2 20 SEP #$20 ; $BB/9110 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9112 C8 INY ; $BB/9113 5A PHY ; $BB/9114 85 42 STA $42 [$00:0042] ; $BB/9116 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/9118 C2 20 REP #$20 ; $BB/911A 29 0F 00 AND #$000F ; $BB/911D 05 40 ORA $40 [$00:0040] ; $BB/911F 85 40 STA $40 [$00:0040] ; $BB/9121 8A TXA ; $BB/9122 38 SEC ; $BB/9123 E5 40 SBC $40 [$00:0040] ; $BB/9125 A8 TAY ; $BB/9126 E2 20 SEP #$20 ; $BB/9128 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/912B C8 INY ; $BB/912C 9D 00 00 STA $0000,x[$7F:0000] ; $BB/912F E8 INX ; $BB/9130 C6 3C DEC $3C [$00:003C] ; $BB/9132 D0 F4 BNE $F4 [$9128] ; $BB/9134 7A PLY ; $BB/9135 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[Dx] ; 1 Byte 前から 1 Byte コピーした後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/9138 CA DEX ; $BB/9139 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/913C 9D 01 00 STA $0001,x[$7F:0001] ; $BB/913F E8 INX ; $BB/9140 E8 INX ; $BB/9141 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_D] ; 1 Byte 前から 1 Byte コピー ;------------------------------------------------ $BB/9144 CA DEX ; $BB/9145 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/9148 9D 01 00 STA $0001,x[$7F:0001] ; $BB/914B E8 INX ; $BB/914C E8 INX ; $BB/914D 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[Ex] ; 2 バイト 前から 2 バイトコピーした後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/9150 C2 20 REP #$20 ; $BB/9152 CA DEX ; $BB/9153 CA DEX ; $BB/9154 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/9157 9D 02 00 STA $0002,x[$7F:0002] ; $BB/915A E2 20 SEP #$20 ; $BB/915C E8 INX ; $BB/915D E8 INX ; $BB/915E E8 INX ; $BB/915F E8 INX ; $BB/9160 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_E] ; 2 バイト 前から 2 バイトコピー. ;------------------------------------------------ $BB/9163 C2 20 REP #$20 ; $BB/9165 CA DEX ; $BB/9166 CA DEX ; $BB/9167 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/916A 9D 02 00 STA $0002,x[$7F:0002] ; $BB/916D E2 20 SEP #$20 ; $BB/916F E8 INX ; $BB/9170 E8 INX ; $BB/9171 E8 INX ; $BB/9172 E8 INX ; $BB/9173 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[Fx] : Byte[07+2x] を書き込む ;------------------------------------------------ $BB/9176 5A PHY ; $BB/9177 A5 46 LDA $46 [$00:0046] ; $BB/9179 C2 20 REP #$20 ; $BB/917B 29 0F 00 AND #$000F ; $BB/917E 0A ASL A ; $BB/917F 69 07 00 ADC #$0007 ; $BB/9182 A8 TAY ; $BB/9183 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9185 9D 00 00 STA $0000,x[$7F:0000] ; $BB/9188 E2 20 SEP #$20 ; $BB/918A E8 INX ; $BB/918B E8 INX ; $BB/918C 7A PLY ; $BB/918D 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_F xy] : Byte[07+2x] を書き込んだ後, サブ圧縮コード[_y]を実行. ;------------------------------------------------ $BB/9190 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9192 C8 INY ; $BB/9193 85 46 STA $46 [$00:0046] ; $BB/9195 C2 20 REP #$20 ; $BB/9197 29 F0 00 AND #$00F0 ; $BB/919A 4A LSR A ; $BB/919B 4A LSR A ; $BB/919C 4A LSR A ; $BB/919D 5A PHY ; $BB/919E 69 07 00 ADC #$0007 ; $BB/91A1 A8 TAY ; $BB/91A2 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/91A4 9D 00 00 STA $0000,x[$7F:0000] ; $BB/91A7 E2 20 SEP #$20 ; $BB/91A9 E8 INX ; $BB/91AA E8 INX ; $BB/91AB 7A PLY ; $BB/91AC 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; 伸張処理高速化用 (4bit取得の高速化) ;------------------------------------------------ $BB/91AF A0 00 01 LDY #$0100 ; $BB/91B2 7B TDC ; $BB/91B3 AA TAX ; $BB/91B4 E2 20 SEP #$20 ; $BB/91B6 9F 00 21 7E STA $7E2100,x[$7E:2100] ; $BB/91BA 18 CLC ; $BB/91BB 69 10 ADC #$10 ; $BB/91BD 29 F0 AND #$F0 ; $BB/91BF E8 INX ; $BB/91C0 88 DEY ; $BB/91C1 D0 F3 BNE $F3 [$91B6] ; $BB/91C3 A0 00 01 LDY #$0100 ; $BB/91C6 A2 00 00 LDX #$0000 ; $BB/91C9 8A TXA ; $BB/91CA 4A LSR A ; $BB/91CB 4A LSR A ; $BB/91CC 4A LSR A ; $BB/91CD 4A LSR A ; $BB/91CE 9F 00 20 7E STA $7E2000,x[$7E:2000] ; $BB/91D2 E8 INX ; $BB/91D3 88 DEY ; $BB/91D4 D0 F3 BNE $F3 [$91C9] ; $BB/91D6 C2 20 REP #$20 ; $BB/91D8 6B RTL ; ;------------------------------------------------
** 圧縮形式 RAREWARE の SFC ソフトに使用されている圧縮形式です. 今のところ, ・スーパードンキーコング 2 ・スーパードンキーコング 3 ・KILLER INSTINCT などで確認しています. - ヘッダ部分 Byte[00] : - 未使用 - (前の圧縮データの終端のようです) Byte[01] : 8bit 出現率 No.1(?) Byte[02] : 8bit 出現率 No.2(?) Byte[03] : 8bit 出現率 多 Byte[04] : 8bit 出現率 多 Byte[05-06]: 16bit 出現率 No.1(?) Byte[07-26]: 16bit 出現率 No.2~No.17(?) Byte[27-] : 圧縮データ - 圧縮コード 全て 4bit 単位で処理されていて, 頻繁に 4bit ずれます. (4bitずれた時は別のプログラムで処理していますが, 内容は同じです) [0x_] : ROM から x バイトコピー, [00]の場合は伸張処理終了 [1xx] : xx を入力する. [2xxyy] : yyxx を入力する. [3xyy] : yy を (x+3) 回入力する. [4x] : Byte[01] ( 8bit) を (x+3) 回入力する. [5x] : Byte[02] ( 8bit) を (x+3) 回入力する. [6] : Byte[05] (16bit) を入力する. [7] : Byte[03] ( 8bit) を入力する. [8] : Byte[04] ( 8bit) を入力する. [9x] : (x+2) バイト前から 2 バイトコピー [Axyy] : {(x+3)+yy} バイト前から (x+3) バイトコピー [Bxyyz] : (yyz + 103h) バイト前から (x+3) バイトコピー [Cxyyzz] : yyzz(BigEndian) バイト前から (x+3) バイトコピー [D] : 1 バイト前から 1 バイトコピー [E] : 2 バイト前から 2 バイトコピー [Fx] : Byte[07+2x](16bit) を 書き込む ** ソース ;------------------------------------------------ ; 圧縮コード JMP 先 ;------------------------------------------------ $BB/8001 4C 2A 8E JMP $8E2A [$7F:8E2A] ; 圧縮コード[0x] $BB/8005 4C 96 8E JMP $8E96 [$7F:8E96] ; 圧縮コード[1x] $BB/8009 4C B4 8E JMP $8EB4 [$7F:8EB4] ; 圧縮コード[2x] $BB/800D 4C EB 8E JMP $8EEB [$7F:8EEB] ; 圧縮コード[3x] $BB/8011 4C 26 8F JMP $8F26 [$7F:8F26] ; 圧縮コード[4x] $BB/8015 4C 53 8F JMP $8F53 [$7F:8F53] ; 圧縮コード[5x] $BB/8019 4C 80 8F JMP $8F80 [$7F:8F80] ; 圧縮コード[6x] $BB/801D 4C 9C 8F JMP $8F9C [$7F:8F9C] ; 圧縮コード[7x] $BB/8021 4C AE 8F JMP $8FAE [$7F:8FAE] ; 圧縮コード[8x] $BB/8025 4C C0 8F JMP $8FC0 [$7F:8FC0] ; 圧縮コード[9x] $BB/8029 4C FF 8F JMP $8FFF [$7F:8FFF] ; 圧縮コード[Ax] $BB/802D 4C 62 90 JMP $9062 [$7F:9062] ; 圧縮コード[Bx] $BB/8031 4C C9 90 JMP $90C9 [$7F:90C9] ; 圧縮コード[Cx] $BB/8035 4C 38 91 JMP $9138 [$7F:9138] ; 圧縮コード[Dx] $BB/8039 4C 50 91 JMP $9150 [$7F:9150] ; 圧縮コード[Ex] $BB/803D 4C 76 91 JMP $9176 [$7F:9176] ; 圧縮コード[Fx] ;------------------------------------------------ ; サブ圧縮コード JMP 先 ;------------------------------------------------ $BB/8040 4C 6F 8E JMP $8E6F [$7F:8E6F] ; サブ圧縮コード[00] $BB/8044 4C AA 8E JMP $8EAA [$7F:8EAA] ; サブ圧縮コード[01] $BB/8048 4C DB 8E JMP $8EDB [$7F:8EDB] ; サブ圧縮コード[02] $BB/804C 4C 01 8F JMP $8F01 [$7F:8F01] ; サブ圧縮コード[03] $BB/8050 4C 3B 8F JMP $8F3B [$7F:8F3B] ; サブ圧縮コード[04] $BB/8054 4C 68 8F JMP $8F68 [$7F:8F68] ; サブ圧縮コード[05] $BB/8058 4C 8E 8F JMP $8F8E [$7F:8F8E] ; サブ圧縮コード[06] $BB/805C 4C A5 8F JMP $8FA5 [$7F:8FA5] ; サブ圧縮コード[07] $BB/8060 4C B7 8F JMP $8FB7 [$7F:8FB7] ; サブ圧縮コード[08] $BB/8064 4C DE 8F JMP $8FDE [$7F:8FDE] ; サブ圧縮コード[09] $BB/8068 4C 29 90 JMP $9029 [$7F:9029] ; サブ圧縮コード[0A] $BB/806C 4C 97 90 JMP $9097 [$7F:9097] ; サブ圧縮コード[0B] $BB/8070 4C F2 90 JMP $90F2 [$7F:90F2] ; サブ圧縮コード[0C] $BB/8074 4C 44 91 JMP $9144 [$7F:9144] ; サブ圧縮コード[0D] $BB/8078 4C 63 91 JMP $9163 [$7F:9163] ; サブ圧縮コード[0E] $BB/807C 4C 90 91 JMP $9190 [$7F:9190] ; サブ圧縮コード[0F] ;------------------------------------------------ ; 伸張処理開始 ;------------------------------------------------ $BB/8D91 85 38 STA $38 [$00:0038] ; $BB/8D93 A9 7F 00 LDA #$007F ; $BB/8D96 85 3A STA $3A [$00:003A] ; $BB/8D98 86 34 STX $34 [$00:0034] ; $BB/8D9A 84 36 STY $36 [$00:0036] ; $BB/8D9C 80 10 BRA $10 [$8DAE] ; ; $BB/8D9E 8A TXA ; $BB/8D9F BB TYX ; $BB/8DA0 85 34 STA $34 [$00:0034] ; $34 : 参照アドレス $BB/8DA2 86 36 STX $36 [$00:0036] ; $BB/8DA4 A9 00 00 LDA #$0000 ; $BB/8DA7 85 38 STA $38 [$00:0038] ; $BB/8DA9 A9 7F 00 LDA #$007F ; $BB/8DAC 85 3A STA $3A [$00:003A] ; $38 : 伸張先アドレス ; $BB/8DAE A9 FF FF LDA #$FFFF ; $BB/8DB1 85 32 STA $32 [$00:0032] ; $32 : #$FFFF $BB/8DB3 8B PHB ; $BB/8DB4 5A PHY ; $BB/8DB5 A9 00 21 LDA #$2100 ; $BB/8DB8 85 46 STA $46 [$00:0046] ; $BB/8DBA A9 7E 00 LDA #$007E ; $BB/8DBD 85 48 STA $48 [$00:0048] ; $46 : #$7E2100 $BB/8DBF 85 44 STA $44 [$00:0044] ; $BB/8DC1 A9 00 20 LDA #$2000 ; $BB/8DC4 85 42 STA $42 [$00:0042] ; $42 : #$7E2000 $BB/8DC6 22 AF 91 BB JSL $BB91AF[$BB:91AF] ; (伸張処理高速化用) $BB/8DCA A6 38 LDX $38 [$00:0038] ; $BB/8DCC A0 01 00 LDY #$0001 ; $BB/8DCF A9 01 80 LDA #$8001 ; $BB/8DD2 85 4E STA $4E [$00:004E] ; $4E : #$8001 $BB/8DD4 A9 40 80 LDA #$8040 ; $BB/8DD7 85 4A STA $4A [$00:004A] ; $4A : #$8040 $BB/8DD9 E2 20 SEP #$20 ; $BB/8DDB A5 3A LDA $3A [$00:003A] ; $BB/8DDD 48 PHA ; $BB/8DDE AB PLB ; $BB/8DDF B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x01] $BB/8DE1 85 52 STA $52 [$00:0052] ; $52 = Byte[0x01] $BB/8DE3 C8 INY ; $BB/8DE4 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x02] $BB/8DE6 85 53 STA $53 [$00:0053] ; $53 = Byte[0x02] $BB/8DE8 C8 INY ; $BB/8DE9 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x03] $BB/8DEB 85 56 STA $56 [$00:0056] ; $56 = Byte[0x03] $BB/8DED C8 INY ; $BB/8DEE B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x04] $BB/8DF0 85 57 STA $57 [$00:0057] ; $57 = Byte[0x04] $BB/8DF2 C8 INY ; $BB/8DF3 C2 20 REP #$20 ; $BB/8DF5 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x05-0x06] $BB/8DF7 85 54 STA $54 [$00:0054] ; $54 = Byte[0x05-0x06] $BB/8DF9 A0 27 00 LDY #$0027 ; $BB/8DFC 64 3C STZ $3C [$00:003C] ; $BB/8DFE 64 3E STZ $3E [$00:003E] ; $BB/8E00 E2 20 SEP #$20 ; ; $BB/8E02 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA : Byte[0x27~] $BB/8E04 C8 INY ; $BB/8E05 85 46 STA $46 [$00:0046] ; $BB/8E07 29 F0 AND #$F0 ; $BB/8E09 4A LSR A ; $BB/8E0A 4A LSR A ; $BB/8E0B 85 4E STA $4E [$00:004E] ; $BB/8E0D D4 4E PEI $4E ; PUSH $4E $BB/8E0F 60 RTS ; JMP $4E+1 ;------------------------------------------------ ; サブ圧縮コードへのジャンプ : $46 依存 ;------------------------------------------------ $BB/8E10 A5 46 LDA $46 [$00:0046] ; $BB/8E12 29 0F AND #$0F ; $BB/8E14 0A ASL A ; $BB/8E15 0A ASL A ; $BB/8E16 69 3F ADC #$3F ; $BB/8E18 85 4A STA $4A [$00:004A] ; $BB/8E1A D4 4A PEI $4A ; PUSH $4A $BB/8E1C 60 RTS ; JMP $4A+1 ;------------------------------------------------ ; サブ圧縮コードへのジャンプ : $42 依存 ;------------------------------------------------ $BB/8E1D A5 42 LDA $42 [$00:0042] ; $BB/8E1F 29 0F AND #$0F ; $BB/8E21 0A ASL A ; $BB/8E22 0A ASL A ; $BB/8E23 69 3F ADC #$3F ; $BB/8E25 85 4A STA $4A [$00:004A] ; $BB/8E27 D4 4A PEI $4A ; PUSH $4A $BB/8E29 60 RTS ; JMP $4A+1 ;------------------------------------------------ ; 圧縮コード[0x] ; ROMから x バイトコピー, [00]の場合は伸張処理終了 ;------------------------------------------------ $BB/8E2A A5 46 LDA $46 [$00:0046] ; $BB/8E2C 29 0F AND #$0F ; $BB/8E2E F0 10 BEQ $10 [$8E40] ; $BB/8E30 85 3C STA $3C [$00:003C] ; ; $BB/8E32 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E34 C8 INY ; $BB/8E35 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8E38 E8 INX ; $BB/8E39 C6 3C DEC $3C [$00:003C] ; $BB/8E3B D0 F5 BNE $F5 [$8E32] ; $BB/8E3D 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; ;------------------------------------------------ $BB/8E40 C2 20 REP #$20 ; $BB/8E42 7A PLY ; $BB/8E43 AB PLB ; $BB/8E44 8A TXA ; $BB/8E45 38 SEC ; $BB/8E46 E5 38 SBC $38 [$00:0038] ; $BB/8E48 AA TAX ; $BB/8E49 A5 32 LDA $32 [$00:0032] ; $BB/8E4B 30 21 BMI $21 [$8E6E] ; $BB/8E4D A5 58 LDA $58 [$00:0058] ; $BB/8E4F 8D 16 21 STA $2116 [$7F:2116] ; $BB/8E52 A5 38 LDA $38 [$00:0038] ; $BB/8E54 8D 02 43 STA $4302 [$7F:4302] ; $BB/8E57 A5 3A LDA $3A [$00:003A] ; $BB/8E59 8D 04 43 STA $4304 [$7F:4304] ; $BB/8E5C 8E 05 43 STX $4305 [$7F:4305] ; $BB/8E5F A9 01 18 LDA #$1801 ; $BB/8E62 8D 00 43 STA $4300 [$7F:4300] ; $BB/8E65 E2 20 SEP #$20 ; $BB/8E67 A9 01 LDA #$01 ; $BB/8E69 8D 0B 42 STA $420B [$7F:420B] ; $BB/8E6C C2 20 REP #$20 ; ; $BB/8E6E 6B RTL ; ;------------------------------------------------ ; サブ圧縮コード[_0 xy y~ ~z] ; ROMから x バイトコピー(但し, 4bitずれている)した後, ; ; サブ圧縮コード[_z]を実行. [_0 0_]の形の場合は伸張処理終了. ;------------------------------------------------ $BB/8E6F B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E71 C8 INY ; $BB/8E72 85 42 STA $42 [$00:0042] ; $BB/8E74 85 46 STA $46 [$00:0046] ; $BB/8E76 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8E78 F0 C6 BEQ $C6 [$8E40] ; -> END ; $BB/8E7A 85 3C STA $3C [$00:003C] ; $BB/8E7C A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8E7E 85 3E STA $3E [$00:003E] ; $BB/8E80 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E82 C8 INY ; $BB/8E83 85 42 STA $42 [$00:0042] ; $BB/8E85 85 46 STA $46 [$00:0046] ; $BB/8E87 A5 3E LDA $3E [$00:003E] ; $BB/8E89 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8E8B 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8E8E E8 INX ; $BB/8E8F C6 3C DEC $3C [$00:003C] ; $BB/8E91 D0 E9 BNE $E9 [$8E7C] ; ; $BB/8E93 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; 圧縮コード[1x xy] ; xx を入力後, サブ圧縮コード[_y]を実行 ;------------------------------------------------ $BB/8E96 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8E98 85 3E STA $3E [$00:003E] ; $BB/8E9A B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8E9C C8 INY ; $BB/8E9D 85 42 STA $42 [$00:0042] ; $BB/8E9F A5 3E LDA $3E [$00:003E] ; $BB/8EA1 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8EA3 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EA6 E8 INX ; $BB/8EA7 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; サブ圧縮コード[_1 xx] ; xx を 入力. ;------------------------------------------------ $BB/8EAA B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EAC C8 INY ; $BB/8EAD 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EB0 E8 INX ; $BB/8EB1 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[2x xy yz] ; xx yy を入力した後, サブ圧縮コード[_z]を実行. ;------------------------------------------------ $BB/8EB4 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8EB6 85 3E STA $3E [$00:003E] ; $BB/8EB8 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EBA C8 INY ; $BB/8EBB 85 42 STA $42 [$00:0042] ; $42 : 0* 系処理 $BB/8EBD 85 46 STA $46 [$00:0046] ; $46 : *0 系処理 $BB/8EBF A5 3E LDA $3E [$00:003E] ; $BB/8EC1 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8EC3 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EC6 E8 INX ; $BB/8EC7 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8EC9 85 3E STA $3E [$00:003E] ; $BB/8ECB B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8ECD C8 INY ; $BB/8ECE 85 42 STA $42 [$00:0042] ; $BB/8ED0 A5 3E LDA $3E [$00:003E] ; $BB/8ED2 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8ED4 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8ED7 E8 INX ; $BB/8ED8 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; サブ圧縮コード[_2] : ROMから 2 バイトコピー. ;------------------------------------------------ $BB/8EDB C2 20 REP #$20 ; $BB/8EDD B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EDF 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EE2 C8 INY ; $BB/8EE3 C8 INY ; $BB/8EE4 E8 INX ; $BB/8EE5 E8 INX ; $BB/8EE6 E2 20 SEP #$20 ; $BB/8EE8 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[3x yy] ; yy を (x+3) 回入力. ;------------------------------------------------ $BB/8EEB A5 46 LDA $46 [$00:0046] ; $BB/8EED 29 0F AND #$0F ; $BB/8EEF 69 03 ADC #$03 ; $BB/8EF1 85 3C STA $3C [$00:003C] ; $BB/8EF3 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8EF5 C8 INY ; ; $BB/8EF6 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8EF9 E8 INX ; $BB/8EFA C6 3C DEC $3C [$00:003C] ; $BB/8EFC D0 F8 BNE $F8 [$8EF6] ; $BB/8EFE 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_3 xy yz] ; yy を (x+3) 回入力後, サブ圧縮コード[_z]を実行. ;------------------------------------------------ $BB/8F01 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F03 C8 INY ; $BB/8F04 85 42 STA $42 [$00:0042] ; $BB/8F06 85 46 STA $46 [$00:0046] ; $BB/8F08 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F0A 69 03 ADC #$03 ; $BB/8F0C 85 3C STA $3C [$00:003C] ; $BB/8F0E A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/8F10 85 3E STA $3E [$00:003E] ; $BB/8F12 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F14 C8 INY ; $BB/8F15 85 42 STA $42 [$00:0042] ; $BB/8F17 A5 3E LDA $3E [$00:003E] ; $BB/8F19 07 42 ORA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F1B 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F1E E8 INX ; $BB/8F1F C6 3C DEC $3C [$00:003C] ; $BB/8F21 D0 F8 BNE $F8 [$8F1B] ; $BB/8F23 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[4x] : (x+3) 回 Byte[01] を入力. ;------------------------------------------------ $BB/8F26 A5 46 LDA $46 [$00:0046] ; $BB/8F28 29 0F AND #$0F ; $BB/8F2A 69 03 ADC #$03 ; $BB/8F2C 85 3C STA $3C [$00:003C] ; ; $BB/8F2E A5 52 LDA $52 [$00:0052] ; $52: Byte[01] $BB/8F30 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F33 E8 INX ; $BB/8F34 C6 3C DEC $3C [$00:003C] ; $BB/8F36 D0 F8 BNE $F8 [$8F30] ; $BB/8F38 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_4 xy] : (x+3) 回 Byte[01] を入力後, サブ圧縮コード[_y]を実行 ;------------------------------------------------ $BB/8F3B B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F3D C8 INY ; $BB/8F3E 85 42 STA $42 [$00:0042] ; $BB/8F40 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F42 69 03 ADC #$03 ; $BB/8F44 85 3C STA $3C [$00:003C] ; ; $BB/8F46 A5 52 LDA $52 [$00:0052] ; $BB/8F48 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F4B E8 INX ; $BB/8F4C C6 3C DEC $3C [$00:003C] ; $BB/8F4E D0 F8 BNE $F8 [$8F48] ; $BB/8F50 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[5x] ; (x+3) 回 Byte[02]を入力 ;------------------------------------------------ $BB/8F53 A5 46 LDA $46 [$00:0046] ; $BB/8F55 29 0F AND #$0F ; $BB/8F57 69 03 ADC #$03 ; $BB/8F59 85 3C STA $3C [$00:003C] ; $BB/8F5B A5 53 LDA $53 [$00:0053] ; ; $BB/8F5D 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F60 E8 INX ; $BB/8F61 C6 3C DEC $3C [$00:003C] ; $BB/8F63 D0 F8 BNE $F8 [$8F5D] ; $BB/8F65 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_5 xy] : (x+3) 回 Byte[02]を入力後, サブ圧縮コード[_y]を実行 ;------------------------------------------------ $BB/8F68 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8F6A C8 INY ; $BB/8F6B 85 42 STA $42 [$00:0042] ; $BB/8F6D A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8F6F 69 03 ADC #$03 ; $BB/8F71 85 3C STA $3C [$00:003C] ; $BB/8F73 A5 53 LDA $53 [$00:0053] ; $BB/8F75 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F78 E8 INX ; $BB/8F79 C6 3C DEC $3C [$00:003C] ; $BB/8F7B D0 F8 BNE $F8 [$8F75] ; $BB/8F7D 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[6x] ; Byte[05-06]を入力後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/8F80 C2 20 REP #$20 ; $BB/8F82 A5 54 LDA $54 [$00:0054] ; $54 : Byte[05-06] $BB/8F84 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F87 E8 INX ; $BB/8F88 E8 INX ; $BB/8F89 E2 20 SEP #$20 ; $BB/8F8B 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_6] ; Byte[05-06] を入力 ;------------------------------------------------ $BB/8F8E C2 20 REP #$20 ; $BB/8F90 A5 54 LDA $54 [$00:0054] ; $54 : Byte[05-06] $BB/8F92 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8F95 E8 INX ; $BB/8F96 E8 INX ; $BB/8F97 E2 20 SEP #$20 ; $BB/8F99 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[7x] ; Byte[03]を入力後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/8F9C A5 56 LDA $56 [$00:0056] ; $56 : Byte[03] $BB/8F9E 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FA1 E8 INX ; $BB/8FA2 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_7] ; Byte[03]を入力 ;------------------------------------------------ $BB/8FA5 A5 56 LDA $56 [$00:0056] ; $56 : Byte[03] $BB/8FA7 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FAA E8 INX ; $BB/8FAB 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[8x] ; Byte[04]を入力後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/8FAE A5 57 LDA $57 [$00:0057] ; $57 : Byte[04] $BB/8FB0 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FB3 E8 INX ; $BB/8FB4 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_8] ; Byte[04]を入力 ;------------------------------------------------ $BB/8FB7 A5 57 LDA $57 [$00:0057] ; $57 : Byte[04] $BB/8FB9 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FBC E8 INX ; $BB/8FBD 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[9x] : (x+2)バイト前から 2 バイトコピー ;------------------------------------------------ $BB/8FC0 5A PHY ; $BB/8FC1 A5 46 LDA $46 [$00:0046] ; $BB/8FC3 29 0F AND #$0F ; $BB/8FC5 69 02 ADC #$02 ; $BB/8FC7 85 3E STA $3E [$00:003E] ; $BB/8FC9 C2 20 REP #$20 ; $BB/8FCB 8A TXA ; $BB/8FCC 38 SEC ; $BB/8FCD E5 3E SBC $3E [$00:003E] ; $BB/8FCF A8 TAY ; $BB/8FD0 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/8FD3 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FD6 E8 INX ; $BB/8FD7 E8 INX ; $BB/8FD8 E2 20 SEP #$20 ; $BB/8FDA 7A PLY ; $BB/8FDB 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_9 xy] : (x+2)バイト前から 2 バイトコピー後, サブ圧縮コード[_y]を実行. ;------------------------------------------------ $BB/8FDE B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/8FE0 C8 INY ; $BB/8FE1 85 42 STA $42 [$00:0042] ; $BB/8FE3 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/8FE5 69 02 ADC #$02 ; $BB/8FE7 85 3E STA $3E [$00:003E] ; $BB/8FE9 5A PHY ; $BB/8FEA C2 20 REP #$20 ; $BB/8FEC 8A TXA ; $BB/8FED 38 SEC ; $BB/8FEE E5 3E SBC $3E [$00:003E] ; $BB/8FF0 A8 TAY ; $BB/8FF1 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/8FF4 9D 00 00 STA $0000,x[$7F:0000] ; $BB/8FF7 E8 INX ; $BB/8FF8 E8 INX ; $BB/8FF9 E2 20 SEP #$20 ; $BB/8FFB 7A PLY ; $BB/8FFC 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[Ax yy] : {(x+3)+ yy}バイト前から (x+3) バイト参照 ;------------------------------------------------ $BB/8FFF A5 46 LDA $46 [$00:0046] ; $BB/9001 29 0F AND #$0F ; $BB/9003 69 03 ADC #$03 ; $BB/9005 85 3C STA $3C [$00:003C] ; $BB/9007 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9009 85 3E STA $3E [$00:003E] ; $BB/900B C8 INY ; $BB/900C 5A PHY ; $BB/900D C2 20 REP #$20 ; $BB/900F 8A TXA ; $BB/9010 38 SEC ; $BB/9011 E5 3C SBC $3C [$00:003C] ; $BB/9013 38 SEC ; $BB/9014 E5 3E SBC $3E [$00:003E] ; $BB/9016 A8 TAY ; $BB/9017 E2 20 SEP #$20 ; $BB/9019 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/901C C8 INY ; $BB/901D 9D 00 00 STA $0000,x[$7F:0000] ; $BB/9020 E8 INX ; $BB/9021 C6 3C DEC $3C [$00:003C] ; $BB/9023 D0 F4 BNE $F4 [$9019] ; $BB/9025 7A PLY ; $BB/9026 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_A xy yz] ; {(x+3)+ yy}バイト前から (x+3) バイトコピー後, ; ; サブ圧縮コード[_z]を実行 ;------------------------------------------------ $BB/9029 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/902B C8 INY ; $BB/902C 85 42 STA $42 [$00:0042] ; $BB/902E 85 46 STA $46 [$00:0046] ; $BB/9030 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/9032 69 03 ADC #$03 ; $BB/9034 85 3C STA $3C [$00:003C] ; $BB/9036 A7 46 LDA [$46] [$7E:210F] ; [$46] = *0 ; * = $46 の下位 4bit $BB/9038 85 3E STA $3E [$00:003E] ; $BB/903A B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/903C C8 INY ; $BB/903D 85 42 STA $42 [$00:0042] ; $BB/903F A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/9041 05 3E ORA $3E [$00:003E] ; $BB/9043 85 3E STA $3E [$00:003E] ; $BB/9045 5A PHY ; $BB/9046 C2 20 REP #$20 ; $BB/9048 8A TXA ; $BB/9049 38 SEC ; $BB/904A E5 3C SBC $3C [$00:003C] ; $BB/904C 38 SEC ; $BB/904D E5 3E SBC $3E [$00:003E] ; $BB/904F A8 TAY ; $BB/9050 E2 20 SEP #$20 ; $BB/9052 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/9055 C8 INY ; $BB/9056 9D 00 00 STA $0000,x[$7F:0000] ; $BB/9059 E8 INX ; $BB/905A C6 3C DEC $3C [$00:003C] ; $BB/905C D0 F4 BNE $F4 [$9052] ; $BB/905E 7A PLY ; $BB/905F 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[Bx yy zw] : (yyz + 103h)バイト前から (x+3) バイトコピーし, ; : サブ圧縮コード[_w]を実行. ;------------------------------------------------ $BB/9062 A5 46 LDA $46 [$00:0046] ; $BB/9064 29 0F AND #$0F ; $BB/9066 69 03 ADC #$03 ; $BB/9068 85 3C STA $3C [$00:003C] ; $BB/906A B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/906C C8 INY ; $BB/906D EB XBA ; $BB/906E B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9070 C8 INY ; $BB/9071 85 46 STA $46 [$00:0046] ; $BB/9073 C2 20 REP #$20 ; $BB/9075 4A LSR A ; $BB/9076 4A LSR A ; $BB/9077 4A LSR A ; $BB/9078 4A LSR A ; $BB/9079 18 CLC ; $BB/907A 69 03 01 ADC #$0103 ; $BB/907D 85 40 STA $40 [$00:0040] ; $BB/907F 5A PHY ; $BB/9080 8A TXA ; $BB/9081 38 SEC ; $BB/9082 E5 40 SBC $40 [$00:0040] ; $BB/9084 A8 TAY ; $BB/9085 E2 20 SEP #$20 ; $BB/9087 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/908A C8 INY ; $BB/908B 9D 00 00 STA $0000,x[$7F:0000] ; $BB/908E E8 INX ; $BB/908F C6 3C DEC $3C [$00:003C] ; $BB/9091 D0 F4 BNE $F4 [$9087] ; $BB/9093 7A PLY ; $BB/9094 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_B xy yz] : (yyz + 103h)バイト前から (x+3) バイトコピー. ;------------------------------------------------ $BB/9097 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9099 C8 INY ; $BB/909A 85 42 STA $42 [$00:0042] ; $BB/909C A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/909E 69 03 ADC #$03 ; $BB/90A0 85 3C STA $3C [$00:003C] ; $BB/90A2 A5 42 LDA $42 [$00:0042] ; $BB/90A4 29 0F AND #$0F ; $BB/90A6 EB XBA ; $BB/90A7 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/90A9 C8 INY ; $BB/90AA C2 20 REP #$20 ; $BB/90AC 69 03 01 ADC #$0103 ; $BB/90AF 85 40 STA $40 [$00:0040] ; $BB/90B1 5A PHY ; $BB/90B2 8A TXA ; $BB/90B3 38 SEC ; $BB/90B4 E5 40 SBC $40 [$00:0040] ; $BB/90B6 A8 TAY ; $BB/90B7 E2 20 SEP #$20 ; $BB/90B9 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/90BC C8 INY ; $BB/90BD 9D 00 00 STA $0000,x[$7F:0000] ; $BB/90C0 E8 INX ; $BB/90C1 C6 3C DEC $3C [$00:003C] ; $BB/90C3 D0 F4 BNE $F4 [$90B9] ; $BB/90C5 7A PLY ; $BB/90C6 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[Cx yy zz] : yyzz(ビッグエンディアン)バイト前から (x+3) バイトコピー ;------------------------------------------------ $BB/90C9 A5 46 LDA $46 [$00:0046] ; $BB/90CB 29 0F AND #$0F ; $BB/90CD 69 03 ADC #$03 ; $BB/90CF 85 3C STA $3C [$00:003C] ; $BB/90D1 C2 20 REP #$20 ; $BB/90D3 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/90D5 EB XBA ; $BB/90D6 85 40 STA $40 [$00:0040] ; $BB/90D8 C8 INY ; $BB/90D9 C8 INY ; $BB/90DA 5A PHY ; $BB/90DB 8A TXA ; $BB/90DC 38 SEC ; $BB/90DD E5 40 SBC $40 [$00:0040] ; $BB/90DF A8 TAY ; $BB/90E0 E2 20 SEP #$20 ; ; $BB/90E2 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/90E5 C8 INY ; $BB/90E6 9D 00 00 STA $0000,x[$7F:0000] ; $BB/90E9 E8 INX ; $BB/90EA C6 3C DEC $3C [$00:003C] ; $BB/90EC D0 F4 BNE $F4 [$90E2] ; $BB/90EE 7A PLY ; $BB/90EF 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_C xy yz zw] : yyzz(ビッグエンディアン)バイト前から (x+3) バイトコピー後, ; : サブ圧縮コード[_w]を実行. ;------------------------------------------------ $BB/90F2 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/90F4 C8 INY ; $BB/90F5 85 42 STA $42 [$00:0042] ; $BB/90F7 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/90F9 69 03 ADC #$03 ; $BB/90FB 85 3C STA $3C [$00:003C] ; $BB/90FD A5 42 LDA $42 [$00:0042] ; $BB/90FF EB XBA ; $BB/9100 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9102 C8 INY ; $BB/9103 C2 20 REP #$20 ; $BB/9105 0A ASL A ; $BB/9106 0A ASL A ; $BB/9107 0A ASL A ; $BB/9108 0A ASL A ; $BB/9109 85 40 STA $40 [$00:0040] ; $BB/910B 29 FF 00 AND #$00FF ; $BB/910E E2 20 SEP #$20 ; $BB/9110 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9112 C8 INY ; $BB/9113 5A PHY ; $BB/9114 85 42 STA $42 [$00:0042] ; $BB/9116 A7 42 LDA [$42] [$7E:2000] ; [$42] = 0* ; * = $42 の上位 4bit $BB/9118 C2 20 REP #$20 ; $BB/911A 29 0F 00 AND #$000F ; $BB/911D 05 40 ORA $40 [$00:0040] ; $BB/911F 85 40 STA $40 [$00:0040] ; $BB/9121 8A TXA ; $BB/9122 38 SEC ; $BB/9123 E5 40 SBC $40 [$00:0040] ; $BB/9125 A8 TAY ; $BB/9126 E2 20 SEP #$20 ; $BB/9128 B9 00 00 LDA $0000,y[$7F:0029] ; $BB/912B C8 INY ; $BB/912C 9D 00 00 STA $0000,x[$7F:0000] ; $BB/912F E8 INX ; $BB/9130 C6 3C DEC $3C [$00:003C] ; $BB/9132 D0 F4 BNE $F4 [$9128] ; $BB/9134 7A PLY ; $BB/9135 4C 1D 8E JMP $8E1D [$7F:8E1D] ; サブ圧縮コードへのジャンプ / $42 依存 ;------------------------------------------------ ; 圧縮コード[Dx] ; 1 Byte 前から 1 Byte コピーした後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/9138 CA DEX ; $BB/9139 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/913C 9D 01 00 STA $0001,x[$7F:0001] ; $BB/913F E8 INX ; $BB/9140 E8 INX ; $BB/9141 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_D] ; 1 Byte 前から 1 Byte コピー ;------------------------------------------------ $BB/9144 CA DEX ; $BB/9145 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/9148 9D 01 00 STA $0001,x[$7F:0001] ; $BB/914B E8 INX ; $BB/914C E8 INX ; $BB/914D 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[Ex] ; 2 バイト 前から 2 バイトコピーした後, サブ圧縮コード[_x]を実行 ;------------------------------------------------ $BB/9150 C2 20 REP #$20 ; $BB/9152 CA DEX ; $BB/9153 CA DEX ; $BB/9154 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/9157 9D 02 00 STA $0002,x[$7F:0002] ; $BB/915A E2 20 SEP #$20 ; $BB/915C E8 INX ; $BB/915D E8 INX ; $BB/915E E8 INX ; $BB/915F E8 INX ; $BB/9160 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; サブ圧縮コード[_E] ; 2 バイト 前から 2 バイトコピー. ;------------------------------------------------ $BB/9163 C2 20 REP #$20 ; $BB/9165 CA DEX ; $BB/9166 CA DEX ; $BB/9167 BD 00 00 LDA $0000,x[$7F:0000] ; $BB/916A 9D 02 00 STA $0002,x[$7F:0002] ; $BB/916D E2 20 SEP #$20 ; $BB/916F E8 INX ; $BB/9170 E8 INX ; $BB/9171 E8 INX ; $BB/9172 E8 INX ; $BB/9173 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; 圧縮コード[Fx] : Byte[07+2x] を書き込む ;------------------------------------------------ $BB/9176 5A PHY ; $BB/9177 A5 46 LDA $46 [$00:0046] ; $BB/9179 C2 20 REP #$20 ; $BB/917B 29 0F 00 AND #$000F ; $BB/917E 0A ASL A ; $BB/917F 69 07 00 ADC #$0007 ; $BB/9182 A8 TAY ; $BB/9183 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9185 9D 00 00 STA $0000,x[$7F:0000] ; $BB/9188 E2 20 SEP #$20 ; $BB/918A E8 INX ; $BB/918B E8 INX ; $BB/918C 7A PLY ; $BB/918D 4C 02 8E JMP $8E02 [$7F:8E02] ; NEXT CODE ;------------------------------------------------ ; サブ圧縮コード[_F xy] : Byte[07+2x] を書き込んだ後, サブ圧縮コード[_y]を実行. ;------------------------------------------------ $BB/9190 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/9192 C8 INY ; $BB/9193 85 46 STA $46 [$00:0046] ; $BB/9195 C2 20 REP #$20 ; $BB/9197 29 F0 00 AND #$00F0 ; $BB/919A 4A LSR A ; $BB/919B 4A LSR A ; $BB/919C 4A LSR A ; $BB/919D 5A PHY ; $BB/919E 69 07 00 ADC #$0007 ; $BB/91A1 A8 TAY ; $BB/91A2 B7 34 LDA [$34],y[$ED:09EF] ; ROM_DATA $BB/91A4 9D 00 00 STA $0000,x[$7F:0000] ; $BB/91A7 E2 20 SEP #$20 ; $BB/91A9 E8 INX ; $BB/91AA E8 INX ; $BB/91AB 7A PLY ; $BB/91AC 4C 10 8E JMP $8E10 [$7F:8E10] ; サブ圧縮コードへのジャンプ / $46 依存 ;------------------------------------------------ ; 伸張処理高速化用 (4bit取得の高速化) ;------------------------------------------------ $BB/91AF A0 00 01 LDY #$0100 ; $BB/91B2 7B TDC ; $BB/91B3 AA TAX ; $BB/91B4 E2 20 SEP #$20 ; $BB/91B6 9F 00 21 7E STA $7E2100,x[$7E:2100] ; $BB/91BA 18 CLC ; $BB/91BB 69 10 ADC #$10 ; $BB/91BD 29 F0 AND #$F0 ; $BB/91BF E8 INX ; $BB/91C0 88 DEY ; $BB/91C1 D0 F3 BNE $F3 [$91B6] ; $BB/91C3 A0 00 01 LDY #$0100 ; $BB/91C6 A2 00 00 LDX #$0000 ; $BB/91C9 8A TXA ; $BB/91CA 4A LSR A ; $BB/91CB 4A LSR A ; $BB/91CC 4A LSR A ; $BB/91CD 4A LSR A ; $BB/91CE 9F 00 20 7E STA $7E2000,x[$7E:2000] ; $BB/91D2 E8 INX ; $BB/91D3 88 DEY ; $BB/91D4 D0 F3 BNE $F3 [$91C9] ; $BB/91D6 C2 20 REP #$20 ; $BB/91D8 6B RTL ; ;------------------------------------------------

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー