Disclaimer:
These files are provided copyright-free, credit-free, mention-free, and email-free.
Recognition is not requested.
You may freely merge it with your own work.

Special thanks to
- Duke Serkol and Con for thorough playtesting, advice
- MottZilla for valuable copier assistance

==============================================================

These are 65816 patches for Roto's original work.

Warning: Older SRAM files may not work with this new build.

1. Prevent main menu crashes
- Load blank state; create already taken slot

2. Load the magic shield
- Now correctly shows

3. Load the master/magic swords
- Sprites now fixed

4. Load the bombs bag
- Proper limit is restored

5. Skip a BIOS call
- Unnecessary, troublesome code

6. Loads the correct week when a game is started
- You will now not unexpectedly pass up weeks if the clock rolled over
- Also dynamically checks the in-game time and changes the week on-the-fly if the
  proper conditions are met.

7. Show each week's objectives
- Monitor your target goals each week

8. Monster in Level-8 now properly drawn
- Used to be a corrupted creature

9. Name entry screen
- You can now name your player at the menu

10. VBlank rules
- Now draws during NMI period only
(see folder 'copier' for code)

11. SRAM conform
- Battery-backed RAM now moved to standard HiROM space
(see folder 'copier' for code)

12. Joypad NMI timing
- Reads during the VBlank input period only
(see folder 'copier' for code)

13. Shop bug fix
- Prices became corrupted when you 'continue' in-game
(this fix glitches up the dialogues in the untranslated Japanese game)


Warning:
Activate your cheat codes at the menu before starting a game.
Problems caused by codes are not supported.

==============================================================

Notes:

7E:6DDC = life left

7E:7422 = bombs
7E:7423 = arrow
7E:742C = step-ladder
7E:7436 = gold
7E:7437 = gold
7E:7438 = keys
7E:7439 = triforce (bits set left to right)
7E:743A = sword
7E:743B = shield
7E:743C = bow

7E:74DC = bomb limit

7F:FFFF = minutes

C5:C7FB-C8A9 = original SRAM code = not used anymore by Roto

70:14EC = bombs limit

==============================================================

[Menu_crash.ips] = This fixes stack corruption when loading blank slots

; Blank slot code path

$CE:DA09 BF 00 00 70 LDA $700000,x[$70:2500] A:2500 X:2500 Y:0001 D:0000 DB:00 S:1FF4 P:envmxdizc HC:966 VC:227 00
$CE:DA0D C9 00 00    CMP #$0000              A:0000 X:2500 Y:0001 D:0000 DB:00 S:1FF4 P:envmxdiZc HC:1006 VC:227 00
$CE:DA10 D0 06       BNE $06    [$DA18]      A:0000 X:2500 Y:0001 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:1024 VC:227 00
$CE:DA12 E2 30       SEP #$30                A:0000 X:5000 Y:0002 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:988 VC:227 00
$CE:DA14 5C 55 E3 CE JMP $CEE355[$CE:E355]   A:0000 X:0000 Y:0002 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:1006 VC:227 00


*** change to ***


; LDA sets the zero flag

BF 00 00 70 	LDA $700000,x
D0 09       	BNE $09    [$DA18]

; Remove 7 bytes from the stack

68		PLA
68		PLA
68		PLA
E2 30		SEP #$30
68		PLA
82 3D 09 	BRL [$CE:E355]

--------------------------------------------------------------

[Menu_crash.ips] = This fixes stack corruption when creating already occupied slots

; Occupied slot path ($D646 path)

$CE:D642 AF 00 00 70 LDA $700000[$70:0000]   A:0000 X:0083 Y:0000 D:0000 DB:00 S:1FF7 P:envMXdiZC HC:274 VC:227 00
$CE:D646 D0 B8       BNE $B8    [$D600]      A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF7 P:envMXdizC HC:338 VC:227 00
$CE:D648 C2 30       REP #$30                A:0000 X:0083 Y:0000 D:0000 DB:00 S:1FF7 P:envMXdiZC HC:318 VC:227 00
$CE:D64A A9 00 00    LDA #$0000              A:0000 X:0083 Y:0000 D:0000 DB:00 S:1FF7 P:envmxdiZC HC:336 VC:227 00
$CE:D64D 85 08       STA $08    [$00:0008]   A:0000 X:0083 Y:0000 D:0000 DB:00 S:1FF7 P:envmxdiZC HC:354 VC:227 00


*** change to ***


AF 00 00 70 	LDA $700000
F0 03       	BEQ CreateSlot0
68		PLA
D0 B5       	BRA [$CE:D600]

CreateSlot0:
C2 30       	REP #$30
64 08		STZ $08

===================================================================

[Shield_load.ips] = Fixes the shield when loading a game


; Original code

$C5:E31B E2 30       SEP #$30                A:0BC5 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envmxdizC HC:882 VC:015 00
$C5:E31D A9 00       LDA #$00                A:0BC5 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:900 VC:015 00
$C5:E31F 8D 00 06    STA $0600  [$00:0600]   A:0B00 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:912 VC:015 00
$C5:E322 8D 02 06    STA $0602  [$00:0602]   A:0B00 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:938 VC:015 00
$C5:E325 8D 03 06    STA $0603  [$00:0603]   A:0B00 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:964 VC:015 00
$C5:E328 A9 FF       LDA #$FF                A:0B00 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:990 VC:015 00
$C5:E32A 8D 01 06    STA $0601  [$00:0601]   A:0BFF X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1002 VC:015 00
$C5:E32D A9 80       LDA #$80                A:0BFF X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1028 VC:015 00
$C5:E32F 8D 05 06    STA $0605  [$00:0605]   A:0B80 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1040 VC:015 00
$C5:E332 8D 08 06    STA $0608  [$00:0608]   A:0B80 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1066 VC:015 00
$C5:E335 A9 01       LDA #$01                A:0B80 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1092 VC:015 00
$C5:E337 8D 00 07    STA $0700  [$00:0700]   A:0B01 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1104 VC:015 00
$C5:E33A A9 80       LDA #$80                A:0B01 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1130 VC:015 00
$C5:E33C 8D 05 07    STA $0705  [$00:0705]   A:0B80 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1142 VC:015 00
$C5:E33F 8D 08 07    STA $0708  [$00:0708]   A:0B80 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1168 VC:015 00

; Default shield

$C5:E342 A9 15       LDA #$15                A:0B80 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:eNvMXdizC HC:1194 VC:015 00
$C5:E344 8D 80 06    STA $0680  [$00:0680]   A:0B15 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1206 VC:015 00

$C5:E347 A9 10       LDA #$10                A:0B15 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1232 VC:015 00
$C5:E349 8D 80 07    STA $0780  [$00:0780]   A:0B10 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1244 VC:015 00
$C5:E34C 80 70       BRA $70    [$E3BE]      A:0B10 X:0000 Y:0017 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1270 VC:015 00


*** change to ***


E2 30		SEP #$30

; Cut down on opcode sizes
0B		PHD
F4 00 06	PEA $0600
2B		PLD

; Display correct shield (0=normal, 1=magic)
A9 15		LDA #$15
18		CLC
6F 3B 74 7E 	ADC $7E743B
85 80		STA $80

; Initialize rest
64 00		STZ $00
64 02		STZ $02
64 03		STZ $03
A9 FF		LDA #$FF
85 01		STA $01
A9 80		LDA #$80
85 05		STA $05
85 08		STA $08

F4 00 07	PEA $0700
2B		PLD
85 05		STA $05
85 08		STA $08
A9 01		LDA #$01
85 00		STA $00
A9 10		LDA #$10
85 80		STA $80

; Done
2B		PLD
80 70		BRA [$E3BE]

===============================================================

[Bombs_load.ips] = Fixes the bomb limit


; Original code

$C5:E281 A9 08       LDA #$08                A:0018 X:00FC Y:0000 D:0000 DB:00 S:1FF4 P:envMXdizc HC:100 VC:106 00
$C5:E283 8F DC 74 7E STA $7E74DC[$7E:74DC]   A:0008 X:00FC Y:0000 D:0000 DB:00 S:1FF4 P:envMXdizc HC:112 VC:106 00


*** change to ***

; Remove default loading limit
EA x 6

================================================================

[Sword_load.ips]  = Fixes the sword when loading a game

Warning: This is pretty involved


$CE:E593 22 C4 E5 CE JSL $CEE5C4[$CE:E5C4]   A:0002 X:0083 Y:0002 D:0000 DB:00 S:1FFB P:eNvMXdizc HC:450 VC:227 00

$CE:E5C4 C2 30       REP #$30                A:0002 X:0083 Y:0002 D:0000 DB:00 S:1FF8 P:eNvMXdizc HC:498 VC:227 00
$CE:E5C6 22 00 DA CE JSL $CEDA00[$CE:DA00]   A:0002 X:0083 Y:0002 D:0000 DB:00 S:1FF8 P:eNvmxdizc HC:516 VC:227 00
$CE:E5CA A5 08       LDA $08    [$00:0008]   A:5000 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:eNvmxdizc HC:320 VC:228 00
$CE:E5CC 18          CLC                     A:5000 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:348 VC:228 00
$CE:E5CD 69 10 00    ADC #$0010              A:5000 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:360 VC:228 00
$CE:E5D0 85 00       STA $00    [$00:0000]   A:5010 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:378 VC:228 00
$CE:E5D2 A9 70 00    LDA #$0070              A:5010 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:406 VC:228 00
$CE:E5D5 85 02       STA $02    [$00:0002]   A:0070 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:424 VC:228 00
$CE:E5D7 A9 60 7E    LDA #$7E60              A:0070 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:452 VC:228 00
$CE:E5DA 85 04       STA $04    [$00:0004]   A:7E60 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:470 VC:228 00
$CE:E5DC C2 30       REP #$30                A:7E60 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:498 VC:228 00
$CE:E5DE A0 00 20    LDY #$2000              A:7E60 X:0000 Y:23FF D:0000 DB:00 S:1FF8 P:envmxdizc HC:516 VC:228 00
$CE:E5E1 E2 20       SEP #$20                A:7E60 X:0000 Y:2000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:534 VC:228 00
$CE:E5E3 B7 00       LDA [$00],y[$70:7010]   A:7E60 X:0000 Y:2000 D:0000 DB:00 S:1FF8 P:envMxdizc HC:552 VC:228 00
$CE:E5E5 97 03       STA [$03],y[$7E:8000]   A:7E00 X:0000 Y:2000 D:0000 DB:00 S:1FF8 P:envMxdiZc HC:596 VC:228 00
$CE:E5E7 88          DEY                     A:7E00 X:0000 Y:2000 D:0000 DB:00 S:1FF8 P:envMxdiZc HC:640 VC:228 00
$CE:E5E8 D0 F9       BNE $F9    [$E5E3]      A:7E00 X:0000 Y:1FFF D:0000 DB:00 S:1FF8 P:envMxdizc HC:652 VC:228 00
$CE:E5EA C2 30       REP #$30                A:7E00 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMxdiZc HC:026 VC:149 00
$CE:E5EC A5 08       LDA $08    [$00:0008]   A:7E00 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZc HC:044 VC:149 00
$CE:E5EE 18          CLC                     A:5000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:072 VC:149 00
$CE:E5EF 69 10 20    ADC #$2010              A:5000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:084 VC:149 00
$CE:E5F2 85 00       STA $00    [$00:0000]   A:7010 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:102 VC:149 00
$CE:E5F4 A9 70 F0    LDA #$F070              A:7010 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:130 VC:149 00
$CE:E5F7 85 02       STA $02    [$00:0002]   A:F070 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:eNvmxdizc HC:148 VC:149 00
$CE:E5F9 A9 FF 7F    LDA #$7FFF              A:F070 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:eNvmxdizc HC:176 VC:149 00
$CE:E5FC 85 04       STA $04    [$00:0004]   A:7FFF X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:194 VC:149 00
$CE:E5FE A0 0F 00    LDY #$000F              A:7FFF X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:222 VC:149 00
$CE:E601 E2 20       SEP #$20                A:7FFF X:0000 Y:000F D:0000 DB:00 S:1FF8 P:envmxdizc HC:240 VC:149 00
$CE:E603 B7 00       LDA [$00],y[$70:701F]   A:7FFF X:0000 Y:000F D:0000 DB:00 S:1FF8 P:envMxdizc HC:258 VC:149 00
$CE:E605 97 03       STA [$03],y[$7F:FFFF]   A:7F00 X:0000 Y:000F D:0000 DB:00 S:1FF8 P:envMxdiZc HC:302 VC:149 00
$CE:E607 88          DEY                     A:7F00 X:0000 Y:000F D:0000 DB:00 S:1FF8 P:envMxdiZc HC:346 VC:149 00
$CE:E608 D0 F9       BNE $F9    [$E603]      A:7F00 X:0000 Y:000E D:0000 DB:00 S:1FF8 P:envMxdizc HC:358 VC:149 00
$CE:E60A C2 30       REP #$30                A:7F00 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMxdiZc HC:654 VC:150 00
$CE:E60C A5 08       LDA $08    [$00:0008]   A:7F00 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZc HC:672 VC:150 00
$CE:E60E 85 06       STA $06    [$00:0006]   A:5000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:700 VC:150 00
$CE:E610 A9 70 00    LDA #$0070              A:5000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:728 VC:150 00
$CE:E613 85 08       STA $08    [$00:0008]   A:0070 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:746 VC:150 00

; Upload character to VRAM

$CE:E615 E2 30       SEP #$30                A:0070 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizc HC:774 VC:150 00
$CE:E617 A7 06       LDA [$06]  [$70:5000]   A:0070 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdizc HC:792 VC:150 00
$CE:E619 C9 01       CMP #$01                A:0002 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdizc HC:836 VC:150 00
$CE:E61B D0 0E       BNE $0E    [$E62B]      A:0002 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdizC HC:848 VC:150 00

; (boy)
$CE:E61D C2 30       REP #$30                A:0001 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdiZC HC:872 VC:150 00
$CE:E61F A9 00 00    LDA #$0000              A:0001 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:890 VC:150 00
$CE:E622 85 00       STA $00    [$00:0000]   A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:908 VC:150 00
$CE:E624 A9 C0 00    LDA #$00C0              A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:936 VC:150 00
$CE:E627 85 02       STA $02    [$00:0002]   A:00C0 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:954 VC:150 00
$CE:E629 80 10       BRA $10    [$E63B]      A:00C0 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:982 VC:150 00

$CE:E62B C9 02       CMP #$02                A:0002 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdizC HC:866 VC:150 00
$CE:E62D D0 0C       BNE $0C    [$E63B]      A:0002 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdiZC HC:878 VC:150 00

; Parameters to VBlank VRAM function
; $00-$02 = 3-byte source address
; $03-$04 = 2-byte transfer counter
; $05-$06 = 2-byte VRAM address

$CE:E62F C2 30       REP #$30                A:0002 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdiZC HC:890 VC:150 00
$CE:E631 A9 00 18    LDA #$1800              A:0002 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:908 VC:150 00
$CE:E634 85 00       STA $00    [$00:0000]   A:1800 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:926 VC:150 00
$CE:E636 A9 C4 00    LDA #$00C4              A:1800 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:954 VC:150 00
$CE:E639 85 02       STA $02    [$00:0002]   A:00C4 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:972 VC:150 00

$CE:E63B A9 00 08    LDA #$0800              A:00C4 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:1000 VC:150 00
$CE:E63E 85 03       STA $03    [$00:0003]   A:0800 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:1018 VC:150 00
$CE:E640 A9 00 00    LDA #$0000              A:0800 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdizC HC:1046 VC:150 00
$CE:E643 85 05       STA $05    [$00:0005]   A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:1064 VC:150 00
$CE:E645 22 00 E0 CE JSL $CEE000[$CE:E000]   A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:1092 VC:150 00
$CE:E649 6B          RTL                     A:0000 X:0000 Y:0800 D:0000 DB:00 S:1FF8 P:envmxdiZC HC:1276 VC:073 00


$CE:E000 08          PHP                     A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF5 P:envmxdiZC HC:1140 VC:150 00
$CE:E001 C2 30       REP #$30                A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:1160 VC:150 00

; Wait for VBlank

$CE:E003 AD 12 42    LDA $4212  [$00:4212]   A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:1178 VC:150 00
$CE:E006 29 80 00    AND #$0080              A:FF42 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:eNvmxdizC HC:1208 VC:150 00
$CE:E009 F0 F8       BEQ $F8    [$E003]      A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:1226 VC:150 00

; Manually pass in data

$CE:E00B A4 05       LDY $05    [$00:0005]   A:0080 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdizC HC:066 VC:225 00
$CE:E00D 8C 16 21    STY $2116  [$00:2116]   A:0080 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:094 VC:225 00
$CE:E010 A0 00 00    LDY #$0000              A:0080 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:124 VC:225 00
$CE:E013 B7 00       LDA [$00],y[$C4:1800]   A:0080 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:142 VC:225 00
$CE:E015 8D 18 21    STA $2118  [$00:2118]   A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:190 VC:225 00
$CE:E018 C8          INY                     A:0000 X:0000 Y:0000 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:220 VC:225 00
$CE:E019 C8          INY                     A:0000 X:0000 Y:0001 D:0000 DB:00 S:1FF4 P:envmxdizC HC:232 VC:225 00
$CE:E01A C4 03       CPY $03    [$00:0003]   A:0000 X:0000 Y:0002 D:0000 DB:00 S:1FF4 P:envmxdizC HC:244 VC:225 00
$CE:E01C D0 F5       BNE $F5    [$E013]      A:0000 X:0000 Y:0002 D:0000 DB:00 S:1FF4 P:eNvmxdizc HC:272 VC:225 00
$CE:E01E 28          PLP                     A:0000 X:0000 Y:0800 D:0000 DB:00 S:1FF4 P:envmxdiZC HC:1208 VC:073 00
$CE:E01F 6B          RTL                     A:0000 X:0000 Y:0800 D:0000 DB:00 S:1FF5 P:envmxdiZC HC:1234 VC:073 00



*** $CE:E5C4-E649+ change to ***

C2 30       		REP #$30
22 00 DA CE		JSL $CEDA00
A5 08       		LDA $08
18          		CLC
69 10 00   		ADC #$0010
85 00       		STA $00
A9 70 00    		LDA #$0070
85 02       		STA $02
A9 60 7E   		LDA #$7E60
85 04      		STA $04

A0 FF 1F    		LDY #$1FFF
B7 00       		LDA [$00],y
97 03       		STA [$03],y
88          		DEY
88          		DEY
10 F8       		BPL $F8 <----- #############

A5 08       		LDA $08
69 10 20    		ADC #$2010
85 00       		STA $00
A9 70 F0    		LDA #$F070
85 02       		STA $02
A9 FF 7F    		LDA #$7FFF
85 04       		STA $04

A0 0E 00    		LDY #$000E
B7 00       		LDA [$00],y
97 03       		STA [$03],y
88          		DEY
D0 F9       		BNE $F9 <----- #############

A5 08       		LDA $08
85 06       		STA $06
A9 70 00    		LDA #$0070
85 08       		STA $08

; Upload character to VRAM
E2 30       		SEP #$30
A7 06       		LDA [$06]
3A			DEC A
C2 30			REP #$30
D0 07       		BNE $07 <----- #############

; boy data
64 00			STZ $00
A9 C0 00    		LDA #$00C0
80 08       		BRA $08 <----- #############

; girl data
A9 00 18    		LDA #$1800
85 00       		STA $00
A9 C4 00    		LDA #$00C4

; combine code paths here
85 02       		STA $02

; total sprite size
A9 00 08    		LDA #$0800
85 03       		STA $03
64 05			STZ $05

; Parameters to VBlank VRAM function
; $00-$02 = 3-byte source address
; $03-$04 = 2-byte transfer counter
; $05-$06 = 2-byte VRAM address
22 00 E0 CE		JSL $CEE000

####################################################

~25 bytes optimized

12000-1207F = master top
12200-1227F = master bottom

12080-120FF = magic top
12280-122FF = magic bottom

$CE:E7A5-E7FF = blank (?)

VRAM: 580 + 780

####################################################

; Now fix sword sprites ($CE:E630)

; Upload character to VRAM
E2 30       		SEP #$30

; Check for wood sword
7B			TDC
AF 3A 74 7E    		LDA $7E743A
C9 02			CMP #$02
C2 30			REP #$30
90 86			BCC [RTL] <----- ############

; Check for master sword
D0 05			BNE $05 <----- ############
A2 00 20		LDX #$2000
80 03       		BRA $03 <----- #############

; Magic sword
A2 80 20    		LDX #$2080

; Move to larger space
4C B1 E7		JMP $E7B1

~25 bytes

------------------------------------------------------

$CE:E7A5

[FUNCTION]

; Half of sprite size and VRAM spot
A9 80 00    		LDA #$0080
85 03       		STA $03
84 05       		STY $05

; Update half of sprite sword
22 00 E0 CE		JSL $CEE000
60			RTS


; Upper sprite offset
86 00       		STX $00

; Source bank (constant)
A9 C1 00		LDA #$00C1
85 02			STA $02

; Upper sprite VRAM ($580>>1)
A0 C0 02    		LDY #$02C0
20 A5 E7		JSR $E7A5

; Lower sprite offset + VRAM ($780>>1)
8A			TXA
18			CLC
69 00 02		ADC #$0200
85 00			STA $00
A0 C0 03    		LDY #$03C0
20 A5 E7		JSR $E7A5

; Done forcing a sprite update
6B			RTL

~39 bytes

===============================================================

[bios_remove.ips] = Removes a call to the BIOS at startup


; Note: This call is potentially dangerous as the BS-X support is no longer available.
;       It may hang on some emulators or systems.

$44:0055 22 08 5C 10 JSL $105C08[$10:5C08]   A:3000 X:0000 Y:0000 D:0000 DB:00 S:1FFB P:envmxdIzC HC:864 VC:033 00


*** $44:0055-0058 change to ***

EA x 4

================================================================

[load_week.ips] = Loads the correct week when starting a game


; Stored hours ==> Different results (week parameter)

$CC:0035 AD B3 00    LDA $00B3  [$00:00B3]   A:FF02 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizc HC:644 VC:240 00
$CC:0038 F0 16       BEQ $16    [$0050]      A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizc HC:676 VC:240 00
$CC:003A C9 01       CMP #$01                A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizc HC:692 VC:240 00
$CC:003C D0 03       BNE $03    [$0041]      A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizC HC:708 VC:240 00
$CC:003E 4C DF 00    JMP $00DF
$CC:0041 C9 02       CMP #$02                A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizC HC:730 VC:240 00
$CC:0043 D0 03       BNE $03    [$0048]      A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizC HC:746 VC:240 00
$CC:0045 4C 6E 01    JMP $016E
$CC:0048 C9 03       CMP #$03                A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdizC HC:768 VC:240 00
$CC:004A D0 03       BNE $03    [$004F]      A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdiZC HC:784 VC:240 00
$CC:004C 4C 1F 02    JMP $021F  [$00:021F]   A:FF03 X:0012 Y:000A D:0000 DB:00 S:1FFC P:envMXdiZC HC:800 VC:240 00


** change to = CC:0035 ***


; Calculate week based on triforce pieces
A2 00			LDX #$00
20 37 87		JSR $8737 (see below)
18			CLC
0A			ASL A
AA			TAX
7C 40 00		JMP ($0040),x

50 00 (week1)
DF 00 (week2)
6E 01 (week3)
1F 02 (week4)
EA x 7

================================================================

[weekly_objective.ips] = Shows each week's objectives


C4:4100 = 12 bytes
- 00 E0 C9 [inventory]
- 00 F0 C9 [dungeon]
- 00 B8 C1 [objective]
- 00 28 C6 [inventory-2]

C1:B800-C000 = objectives nametable ($800 bytes)
- Hard-coded data, replaced each week

Possible space (w/$200 header):
172128-175616 = 3488 = $0DA0
190720-196608 = 5888 = $1700
457216-459264 = 2048 = $0800

463360-467456 = 4096 = $1000
743936-745984 = 2048 = $0800


; Choose map type (inventory,dungeon,objective,...)
$CC:1670 A9 02       LDA #$02                A:36CC X:0000 Y:0029 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1266 VC:253 00
$CC:1672 8F 06 20 7E STA $7E2006[$7E:2006]   A:3602 X:0000 Y:0029 D:0000 DB:00 S:1FF4 P:envMXdizC HC:1278 VC:253 00


** change to = CC:1670 ***


A2 04			LDX #$04
20 4C 87		JSR $874C
EA			NOP


(pad space = CC:8737)

; Calculate week based on order of triforce pieces obtained
5A 			PHY
AF 39 74 7E		LDA $7E7439
A8			TAY

29 C0			AND #$C0
C9 C0			CMP #$C0 ; Week 2
D0 11			BNE $11
E8			INX

98			TYA
29 F0			AND #$F0
C9 F0			CMP #$F0 ; Week 3
D0 09			BNE $09
E8			INX

98			TYA
29 FC			AND #$FC
C9 FC			CMP #$FC ; Week 4
D0 01			BNE $01
E8			INX

7A			PLY
8A			TXA
60			RTS


20 37 87		JSR $8737
8F 06 20 7E		STA $7E2006
60			RTS


C4:4100
- 00 E0 C9 [inventory]
- 00 F0 C9 [dungeon]
- FF FF FF [empty]
- 00 28 C6 [full world dots]

- 00 10 C7 [week1]
- 00 18 C7 [week2]
- 00 B8 C1 [week3]
- 00 58 CB [week4]

================================================================

*** COMPLETELY REMOVED ***

[week_time.ips] = Keeps the same time during week changes -if- a time patch is installed


; Start new week
$CE:D000 08          PHP                     A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEB P:envMxdIzC HC:552 VC:233 00
$CE:D001 E2 30       SEP #$30                A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMxdIzC HC:574 VC:233 00
$CE:D003 AF 39 74 7E LDA $7E7439[$7E:7439]   A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:596 VC:233 00
$CE:D007 C9 C0       CMP #$C0                A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:eNvMXdIzC HC:636 VC:233 00
$CE:D009 D0 10       BNE $10    [$D01B]      A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:652 VC:233 00

(...)
A9 01		     LDA #$01
8F B3 00 00	     STA $0000B3
8F F9 FF 7F	     STA $7FFFF9
A9 00		     LDA #$00
8F FF FF 7F	     STA $7FFFFF

$CE:D01B AF 39 74 7E LDA $7E7439[$7E:7439]   A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:674 VC:233 00
$CE:D01F C9 F0       CMP #$F0                A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:eNvMXdIzC HC:714 VC:233 00
$CE:D021 D0 10       BNE $10    [$D033]      A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:730 VC:233 00
$CE:D033 AF 39 74 7E LDA $7E7439[$7E:7439]   A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:752 VC:233 00
$CE:D037 C9 FC       CMP #$FC                A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:eNvMXdIzC HC:792 VC:233 00
$CE:D039 D0 10       BNE $10    [$D04B]      A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIZC HC:808 VC:233 00
$CE:D03B A9 03       LDA #$03                A:02FC X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIZC HC:824 VC:233 00
$CE:D03D 8F B3 00 00 STA $0000B3[$00:00B3]   A:0203 X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:840 VC:233 00
$CE:D041 8F F9 FF 7F STA $7FFFF9[$7F:FFF9]   A:0203 X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:880 VC:233 00
$CE:D045 A9 00       LDA #$00                A:0203 X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIzC HC:920 VC:233 00
$CE:D047 8F FF FF 7F STA $7FFFFF[$7F:FFFF]   A:0200 X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIZC HC:936 VC:233 00
$CE:D04B 28          PLP                     A:0200 X:0018 Y:0000 D:1F00 DB:00 S:1FEA P:envMXdIZC HC:976 VC:233 00
$CE:D04C 6B          RTL                     A:0200 X:0018 Y:0000 D:1F00 DB:00 S:1FEB P:envMxdIzC HC:1004 VC:233 00


** change to $CE:D000 **

08			PHP
E2 30			SEP #$30
DA			PHX

; Determine week status (be wary of DP)
A2 00			LDX #$00
22 50 87 CC		JSL $CC8750
8F B3 00 00		STA $0000B3

; Check for time bypass
AF 05 00 CC		LDA $CC0005
C9 EA			CMP #$EA
F0 0B			BEQ $0B

; Running against the clock
8A			TXA
8F F9 FF 7F 		STA $7FFFF9
A9 00       		LDA #$00
8F FF FF 7F 		STA $7FFFFF

; Time patch used (do nothing)

; Done
FA			PLX
28			PLP
6B			RTL

EA x 41

=================================================================

[corrupt_monster.ips] = Fixes the disfigured creature in the Level-8 dungeon


; Write out sprite tile (attr)

$C5:E06E C2 30       REP #$30                A:C040 X:000C Y:0000 D:0600 DB:00 S:1FF4 P:envMXdiZc HC:708 VC:020 00
$C5:E070 B7 17       LDA [$17],y[$CE:2907]   A:C040 X:000C Y:0000 D:0600 DB:00 S:1FF4 P:envmxdiZc HC:730 VC:020 00
$C5:E072 10 03       BPL $03    [$E077]      A:000A X:000C Y:0000 D:0600 DB:00 S:1FF4 P:envmxdizc HC:786 VC:020 00
$C5:E077 AE 86 05    LDX $0586  [$00:0586]   A:000A X:000C Y:0000 D:0600 DB:00 S:1FF4 P:envmxdizc HC:808 VC:020 00
$C5:E07A 9D 02 1C    STA $1C02,x[$00:1D02]   A:000A X:0100 Y:0000 D:0600 DB:00 S:1FF4 P:envmxdizc HC:848 VC:020 00
$C5:E07D A9 00 00    LDA #$0000              A:000A X:0100 Y:0000 D:0600 DB:00 S:1FF4 P:envmxdizc HC:888 VC:020 00
$C5:E080 E2 20       SEP #$20                A:0000 X:0100 Y:0000 D:0600 DB:00 S:1FF4 P:envmxdiZc HC:912 VC:020 00


Note: DP keeps fluctuating (target is DP=$0800)

[C5:DFD3] W16 = BBC9 [000817]
[C5:DFD8] W16 = CEBB [000818]

$C5:DFCF B7 6E       LDA [$6E],y[$CE:BC12]   A:0018 X:0018 Y:0019 D:0800 DB:00 S:1FF1 P:envmxdizc HC:1052 VC:069 00
$C5:DFD1 85 17       STA $17    [$00:0817]   A:BBC9 X:0018 Y:0019 D:0800 DB:00 S:1FF1 P:eNvmxdizc HC:1108 VC:069 00
$C5:DFD3 C8          INY                     A:BBC9 X:0018 Y:0019 D:0800 DB:00 S:1FF1 P:eNvmxdizc HC:1140 VC:069 00
$C5:DFD4 B7 6E       LDA [$6E],y[$CE:BC13]   A:BBC9 X:0018 Y:001A D:0800 DB:00 S:1FF1 P:envmxdizc HC:1154 VC:069 00
$C5:DFD6 85 18       STA $18    [$00:0818]   A:CEBB X:0018 Y:001A D:0800 DB:00 S:1FF1 P:eNvmxdizc HC:1210 VC:069 00
$C5:DFD8 C8          INY                     A:CEBB X:0018 Y:001A D:0800 DB:00 S:1FF1 P:eNvmxdizc HC:1242 VC:069 00
$C5:DFD9 C8          INY                     A:CEBB X:0018 Y:001B D:0800 DB:00 S:1FF1 P:envmxdizc HC:1256 VC:069 00
$C5:DFDA E2 20       SEP #$20                A:CEBB X:0018 Y:001C D:0800 DB:00 S:1FF1 P:envmxdizc HC:1270 VC:069 00
$C5:DFDC A5 19       LDA $19    [$00:0819]   A:CEBB X:0018 Y:001C D:0800 DB:00 S:1FF1 P:envMxdizc HC:1292 VC:069 00
$C5:DFDE 1A          INC A                   A:CECE X:0018 Y:001C D:0800 DB:00 S:1FF1 P:eNvMxdizc HC:1316 VC:069 00
$C5:DFDF D0 0C       BNE $0C    [$DFED]      A:CECF X:0018 Y:001C D:0800 DB:00 S:1FF1 P:eNvMxdizc HC:1330 VC:069 00


Replace CE:BBC1-BBE0 = corrupt gohma
with CE:BBE1-BC00 = normal dragon

==================================================================

[name_entry.ips] = Adds a name entry feature

$CE:D719 A5 0B       LDA $0B    [$00:000B]   A:6010 X:0004 Y:0083 D:0000 DB:00 S:1FF7 P:envMxdizC HC:140 VC:227 00
$CE:D71B A0 00 00    LDY #$0000              A:6001 X:0004 Y:0083 D:0000 DB:00 S:1FF7 P:envMxdizC HC:160 VC:227 00
$CE:D71E 97 08       STA [$08],y[$70:2500]   A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF7 P:envMxdiZC HC:178 VC:227 00
$CE:D720 80 04       BRA $04    [$D726]      A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF7 P:envMxdiZC HC:222 VC:227 00
$CE:D726 EA          NOP                     A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF7 P:envMxdiZC HC:240 VC:227 00
$CE:D727 EA          NOP                     A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF7 P:envMxdiZC HC:252 VC:227 00
$CE:D728 EA          NOP                     A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF7 P:envMxdiZC HC:264 VC:227 00
$CE:D729 28          PLP                     A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF7 P:envMxdiZC HC:276 VC:227 00
$CE:D72A 5C 00 D6 CE JMP $CED600[$CE:D600]   A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdiZC HC:302 VC:227 00


*** change to ***

$CE:D72A 5C 00 DB CE JMP $CEDB00[$CE:DB00]   A:6001 X:0004 Y:0000 D:0000 DB:00 S:1FF8 P:envMXdiZC HC:266 VC:227 00


$CE:DCBC-DDDB = Name entry table
$CE:DDDC-DDED = Register your name

; Note:
; Because the font is 2-bpp and BG#3 has top priority over everything,
; we can't do much about the blinking cursor

; Vars:
; $7E:6000-623F = BG#3 Table
; $7E:6300-631F = BG#3 Register
; $7E:1000      = Current character #
; $7E:1002      = Cursor X
; $7E:1004      = Cursor Y
; $7E:1006	= Font cursor
; $7E:1008	= Input buffer
; $7E:100A	= Cursor address
; $7E:100C	= De-bounce
; $7E:100E	= Name address
; $7E:1010-102F = Player's name

; VRAM:
; $41 = '-'
; $45 = (bend)
; $46 = '|'
; $10 = alphabet


; Start name entry
C2 30			REP #$30
8B			PHB
F4 7E 7E		PEA $7E7E
AB			PLB
AB			PLB

; Create BG#3 table (11 characters per row)
A9 BC DC		LDA #$DCBC
85 00			STA $00
A9 DC CE		LDA #$CEDC
85 01			STA $01

E2 20			SEP #$20
7B			TDC
AA			TAX
A8			TAY
B7 00 			LDA [$00],y
9D 00 60		STA $6000,x
9E 01 60		STZ $6001,x
E8			INX
E8			INX
C8			INY
C0 20 01		CPY #$0120
D0 F0			BNE $F0

; BG#3 corners
A9 40			LDA #$40
8D 35 60		STA $6035
A9 80			LDA #$80
8D 09 62		STA $6209
A9 C0			LDA #$C0
8D 35 62		STA $6235

; Create BG#3 title
C2 30			REP #$30
A9 DC DD		LDA #$DDDC
85 00			STA $00
A9 DD CE		LDA #$CEDD
85 01			STA $01
E2 20			SEP #$20

7B			TDC
AA			TAX
A8			TAY
B7 00 			LDA [$00],y
9D 00 63		STA $6300,x
9E 01 63		STZ $6301,x
9E 10 10		STZ $1010,x
9E 11 10		STZ $1011,x
E8			INX
E8			INX
C8			INY
C0 12 00		CPY #$0012
D0 EA			BNE $EA

; Parameters to VBlank VRAM function
; $00-$02 = 3-byte source address
; $03-$04 = 2-byte transfer counter
; $05-$06 = 2-byte VRAM address

; Draw table
AB 			PLB
C2 30			REP #$30
A9 00 60		LDA #$6000
85 00			STA $00
A9 7E 40		LDA #$407E
85 02			STA $02
A9 40 02		LDA #$0240
85 03			STA $03
A9 E0 79		LDA #$79E0
85 05			STA $05
22 00 E0 CE		JSL $CEE000

; Draw title
A9 00 63		LDA #$6300
85 00			STA $00
A9 7E 00		LDA #$007E
85 02			STA $02
A9 24 00		LDA #$0024
85 03			STA $03
A9 46 78		LDA #$7846
85 05			STA $05
22 00 E0 CE		JSL $CEE000

; Init
9C 00 10		STZ $1000
A9 0A 00		LDA #$000A
8D 02 10		STA $1002
A9 01 00		LDA #$0001
8D 04 10		STA $1004
9C 06 10		STZ $1006
9C 08 10		STZ $1008

; Init name cursor address
A5 08			LDA $08
C9 00 25		CMP #$2500
B0 05			BCS $05
A9 5C F1		LDA #$F15C	; Slot 0
80 0A			BRA $0A
D0 05			BNE $05
A9 1C F2		LDA #$F21C	; Slot 1
80 03			BRA $03
A9 DC F2		LDA #$F2DC	; Slot 2
8D 0E 10		STA $100E

; De-bounce pad first
AD 18 42		LDA $4218
D0 FB			BNE $FB

; Wait for VBlank to end
AD 12 42		LDA $4212
29 80 00		AND #$0080
F0 F8			BNE $F8

; Input handler
AD 08 10		LDA $1008
AA			TAX

; De-bounce buttons
AD 0C 10		LDA $100C
F0 08			BEQ $08
8A			TXA
29 00 00		AND #$0000
AA			TAX
9C 0C 10		STZ $100C

; A/X/R = Grab character
8A			TXA
29 D0 00		AND #$00D0
F0 0F			BEQ $0F
9B			TXY
AE 0A 10		LDX $100A
BF 00 60 7E		LDA $7E6000,x
AE 00 10		LDX $1000
9D 10 10		STA $1010,x
BB			TYX

; B/Y/L + A/X/R = Skip character
8A			TXA
29 F0 C0		AND #$C0F0
F0 11			BEQ $11
EE 00 10		INC $1000
EE 00 10		INC $1000
AD 00 10		LDA $1000
C9 10 00		CMP #$0010
90 03			BCC $03
9C 00 10		STZ $1000

; Up = Move cursor up
8A			TXA
29 00 08		AND #$0800
F0 0D			BEQ $0D
AD 04 10		LDA $1004
C9 02 00		CMP #$0002
90 02			BCC $02
3A			DEC A
3A			DEC A
8D 04 10		STA $1004

; Down = Move cursor down
8A			TXA
29 00 04		AND #$0400
F0 0D			BEQ $0D
AD 04 10		LDA $1004
C9 06 00		CMP #$0006
B0 02			BCS $02
1A			INC A
1A			INC A
8D 04 10		STA $1004

; Left = Move cursor left
8A			TXA
29 00 02		AND #$0200
F0 0F			BEQ $0F
AD 02 10		LDA $1002
C9 0B 00		CMP #$000B
90 04			BCC $04
3A			DEC A
3A			DEC A
3A			DEC A
3A			DEC A
8D 02 10		STA $1002

; Right = Move cursor right
8A			TXA
29 00 01		AND #$0100
F0 0F			BEQ $0F
AD 02 10		LDA $1002
C9 31 00		CMP #$0031
B0 04			BCS $04
1A			INC A
1A			INC A
1A			INC A
1A			INC A
8D 02 10		STA $1002

; Start/Select = Done
8A			TXA
29 00 30		AND #$3000
F0 17			BEQ $17

; Save name
7B			TDC
A8			TAY
A6 08			LDX $08
E8			INX
B9 10 10		LDA $1010,y
9F 00 00 70		STA $700000,x
C8			INY
C8			INY
C0 10 00		CPY #$0010
D0 F1			BNE $F1

; Done
E2 30			SEP #$30
5C 00 D6 CE 		JMP $CED600

; Update font/name cursor
AD 06 10		LDA $1006
F0 03			BEQ $03
7B			TDC
80 03			BRA $03
AE 0A 10		LDX $100A
BF 00 60 7E		LDA $7E6000,x
8D 06 10		STA $1006

; Read next input
4C B1 E8		JMP $E8B1 <-------------

(EDDA0)
(EEAB1)

-----------------------------------------------------------------

$CE:E8B1

; (Wait for VBlank to begin)

; Draw table
A9 00 60		LDA #$6000
85 00			STA $00
A9 7E 00		LDA #$007E
85 02			STA $02
A9 40 02		LDA #$0240
85 03			STA $03
A9 E0 79		LDA #$79E0
85 05			STA $05
22 00 E0 CE		JSL $CEE000

; Draw name (8 characters)
A9 10 10		LDA #$1010
85 00			STA $00
A9 10 00		LDA #$0010
85 03			STA $03
AD 0E 10		LDA $100E
4A			LSR A

85 05			STA $05
22 00 E0 CE		JSL $CEE000

; Draw font cursor
AD 04 10		LDA $1004
18			CLC
0A			ASL A
0A			ASL A
0A			ASL A
0A			ASL A
0A			ASL A
0A			ASL A
6D 02 10		ADC $1002
8D 0A 10		STA $100A
69 C0 F3		ADC #$F3C0
4A			LSR A
8D 16 21		STA $2116
AD 06 10		LDA $1006
8D 18 21		STA $2118

; Draw name cursor
AD 00 10		LDA $1000
18			CLC
6D 0E 10		ADC $100E
4A			LSR A
8D 16 21		STA $2116
AD 06 10		LDA $1006
8D 18 21		STA $2118

; Check for de-bouncing buttons
9C 0C 10		STZ $100C
AD 08 10		LDA $1008
29 FF FF		AND #$FFFF
F0 03			BEQ $03
EE 0C 10		INC $100C

; Reduce response time
9C 08 10		STZ $1008
A2 01 00		LDX #$0001
AD 12 42		LDA $4212
29 80 00    		AND #$0080
F0 F8       		BEQ $F8
AD 12 42		LDA $4212
29 80 00    		AND #$0080
D0 F8       		BNE $F8
AD 18 42		LDA $4218
0D 08 10		ORA $1008
8D 08 10		STA $1008
CA			DEX
D0 E7			BNE $E7

; Increase blink time
A2 01 00		LDX #$0001
AD 12 42		LDA $4212
29 80 00    		AND #$0080
F0 F8       		BEQ $F8
AD 12 42		LDA $4212
29 80 00    		AND #$0080
D0 F8       		BNE $F8
CA			DEX
D0 F0			BNE $F0

4C BE DB		JMP $DBBE

------------------------------------------------------------------

[shop_prices.ips]

; Code right before transferring to game again

$CE:E78F EA          NOP                     A:6501 X:0000 Y:0001 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:1082 VC:225 00
$CE:E790 EA          NOP                     A:6501 X:0000 Y:0001 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:1094 VC:225 00
$CE:E791 EA          NOP                     A:6501 X:0000 Y:0001 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:1106 VC:225 00
$CE:E792 EA          NOP                     A:6501 X:0000 Y:0001 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:1118 VC:225 00
$CE:E793 6B          RTL                     A:6501 X:0000 Y:0001 D:0000 DB:00 S:1FF4 P:envMXdiZC HC:1130 VC:225 00

(change to)
20 CC D0  JSR $D0CC
EA        NOP
6B        RTL

CE:D0CC

; Reload font table
; Relies on VBlank code in 'copier' folder
08          PHP
C2 30       REP #$30
A9 00 00    LDA #$0000
85 00       STA $00
A9 C7 00    LDA #$00C7
85 02       STA $02
A9 10 00    LDA #$0010
85 04       STA $04
A9 70 00    LDA #$0070
85 06       STA $06
22 00 E0 CE JSL $CEE000

; Clear BG#3 junk
A0 00 78    LDY #$7800
22 7D D0 CE JSL $CED07D

28          PLP
60          RTS


$CE:DAE2 22 00 E0 CE JSL $CEE000[$CE:E000]   A:0078 X:0001 Y:0005 D:0600 DB:00 S:1FEB P:envmxdizC HC:240 VC:024 00
(modify to CEE004)