Merged in DR v1.4.1.6
This commit is contained in:
326
password.asm
326
password.asm
@@ -1,10 +1,7 @@
|
||||
!PASSWORD_CODE_POSITION = "$C8"
|
||||
!PASSWORD_SELECTION_POSITION = "$C9"
|
||||
|
||||
Module_Password:
|
||||
LDA $11
|
||||
LDA.b GameSubMode
|
||||
|
||||
JSL.l UseImplicitRegIndexedLongJumpTable
|
||||
JSL JumpTableLong
|
||||
|
||||
dl Password_BeginInit ; 0
|
||||
dl Password_EndInit ; 1
|
||||
@@ -13,36 +10,35 @@ Module_Password:
|
||||
dl Password_Return ; 4
|
||||
|
||||
Password_BeginInit:
|
||||
LDA.b #$80 : STA $0710 ;skip animated sprite updates in NMI
|
||||
LDA.b #$80 : STA.w SkipOAM ;skip animated sprite updates in NMI
|
||||
|
||||
JSL EnableForceBlank
|
||||
JSL Vram_EraseTilemaps_triforce
|
||||
;JSL Palette_SelectScreen
|
||||
|
||||
JSL LoadCustomHudPalette ; replace the 2bpp palettes, and trigger upload
|
||||
LDA.b #$07 : STA $14 ; have NMI load up the initial tilemap from Password_Tilemap
|
||||
LDA.b #$07 : STA.b NMISTRIPES ; have NMI load up the initial tilemap from Password_Tilemap
|
||||
|
||||
INC $11
|
||||
INC.b GameSubMode
|
||||
RTL
|
||||
|
||||
Password_EndInit:
|
||||
JSR LoadPasswordStripeTemplate
|
||||
JSR LoadPasswordStripeTemplate
|
||||
|
||||
;reset the variables used by this screen
|
||||
STZ !PASSWORD_CODE_POSITION
|
||||
STZ !PASSWORD_SELECTION_POSITION
|
||||
;reset the variables used by this screen
|
||||
STZ.b PasswordCodePosition
|
||||
STZ.b PasswordSelectPosition
|
||||
|
||||
JSL ValidatePassword : BNE +
|
||||
; zero out password if not valid
|
||||
LDX.b #$0F
|
||||
LDA.b #$00
|
||||
-
|
||||
STA.l PasswordSRAM, X
|
||||
DEX : BPL -
|
||||
JSL ValidatePassword : BNE +
|
||||
; zero out password if not valid
|
||||
LDX.b #$0F
|
||||
LDA.b #$00
|
||||
-
|
||||
STA.l PasswordSRAM, X
|
||||
DEX : BPL -
|
||||
+
|
||||
|
||||
LDA.b #$0F : STA $13
|
||||
INC $11
|
||||
LDA.b #$0F : STA.b INIDISPQ
|
||||
INC.b GameSubMode
|
||||
RTL
|
||||
|
||||
Password_Main:
|
||||
@@ -52,78 +48,78 @@ Password_Main:
|
||||
JSR PasswordEraseOldCursors
|
||||
|
||||
; handle joypad input
|
||||
LDA $F6 : AND.b #$10 : BEQ + ; R Button
|
||||
LDA.b Joy1B_New : AND.b #$10 : BEQ + ; R Button
|
||||
JSR PasswordMoveCursorRight
|
||||
+
|
||||
LDA $F6 : AND.b #$20 : BEQ + ; L Button
|
||||
LDA.b Joy1B_New : AND.b #$20 : BEQ + ; L Button
|
||||
JSR PasswordMoveCursorLeft
|
||||
+
|
||||
LDA $F4 : AND.b #$01 : BEQ + ; right
|
||||
LDA !PASSWORD_SELECTION_POSITION : INC A : CMP.b #$24 : !BLT ++
|
||||
LDA.b Joy1A_New : AND.b #$01 : BEQ + ; right
|
||||
LDA.b PasswordSelectPosition : INC A : CMP.b #$24 : !BLT ++
|
||||
!SUB.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
STA.b PasswordSelectPosition
|
||||
LDA.b #$20 : STA.w SFX3
|
||||
+
|
||||
LDA $F4 : AND.b #$02 : BEQ + ; left
|
||||
LDA !PASSWORD_SELECTION_POSITION : DEC A : BPL ++
|
||||
LDA.b Joy1A_New : AND.b #$02 : BEQ + ; left
|
||||
LDA.b PasswordSelectPosition : DEC A : BPL ++
|
||||
!ADD.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
STA.b PasswordSelectPosition
|
||||
LDA.b #$20 : STA.w SFX3
|
||||
+
|
||||
LDA $F4 : AND.b #$04 : BEQ + ; down
|
||||
LDA !PASSWORD_SELECTION_POSITION : !ADD.b #$09 : CMP.b #$24 : !BLT ++
|
||||
LDA.b Joy1A_New : AND.b #$04 : BEQ + ; down
|
||||
LDA.b PasswordSelectPosition : !ADD.b #$09 : CMP.b #$24 : !BLT ++
|
||||
!SUB.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
STA.b PasswordSelectPosition
|
||||
LDA.b #$20 : STA.w SFX3
|
||||
+
|
||||
LDA $F4 : AND.b #$08 : BEQ + ; up
|
||||
LDA !PASSWORD_SELECTION_POSITION : !SUB.b #$09 : BPL ++
|
||||
LDA.b Joy1A_New : AND.b #$08 : BEQ + ; up
|
||||
LDA.b PasswordSelectPosition : !SUB.b #$09 : BPL ++
|
||||
!ADD.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
STA.b PasswordSelectPosition
|
||||
LDA.b #$20 : STA.w SFX3
|
||||
+
|
||||
LDA $F4 : ORA $F6 : AND.b #$C0 : BEQ + ; face button
|
||||
LDX !PASSWORD_SELECTION_POSITION
|
||||
LDA.b Joy1A_New : ORA.b Joy1B_New : AND.b #$C0 : BEQ + ; face button
|
||||
LDX.b PasswordSelectPosition
|
||||
LDA.l .selectionValues, X : BPL ++
|
||||
CMP #$F0 : BNE +++
|
||||
INC $11
|
||||
CMP.b #$F0 : BNE +++
|
||||
INC.b GameSubMode
|
||||
BRA .endOfButtonChecks
|
||||
+++ : CMP #$F1 : BNE +++
|
||||
+++ : CMP.b #$F1 : BNE +++
|
||||
JSR PasswordMoveCursorLeft
|
||||
BRA +
|
||||
+++ : CMP #$F2 : BNE +++
|
||||
+++ : CMP.b #$F2 : BNE +++
|
||||
JSR PasswordMoveCursorRight
|
||||
BRA +
|
||||
+++ : CMP #$F3 : BNE +++
|
||||
INC $11 : INC $11 ; skip to return submodule
|
||||
LDA.b #$2C : STA $012E ;file screen selection sound
|
||||
+++ : CMP.b #$F3 : BNE +++
|
||||
INC.b GameSubMode : INC.b GameSubMode ; skip to return submodule
|
||||
LDA.b #$2C : STA.w SFX2 ;file screen selection sound
|
||||
BRA .endOfButtonChecks
|
||||
+++
|
||||
BRA +
|
||||
++
|
||||
LDX !PASSWORD_CODE_POSITION
|
||||
STA PasswordSRAM,X
|
||||
TXA : INC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION
|
||||
LDX.b PasswordCodePosition
|
||||
STA.l PasswordSRAM,X
|
||||
TXA : INC A : AND.b #$0F : STA.b PasswordCodePosition
|
||||
BNE ++
|
||||
STZ $012E
|
||||
INC $11
|
||||
STZ.w SFX2
|
||||
INC.b GameSubMode
|
||||
BRA .endOfButtonChecks
|
||||
++
|
||||
LDA.b #$2B : STA $012E
|
||||
LDA.b #$2B : STA.w SFX2
|
||||
+
|
||||
LDA $F4 : AND.b #$10 : BEQ + ; start
|
||||
INC $11
|
||||
LDA.b Joy1A_New : AND.b #$10 : BEQ + ; start
|
||||
INC.b GameSubMode
|
||||
+
|
||||
.endOfButtonChecks
|
||||
|
||||
JSR UpdatePasswordTiles
|
||||
|
||||
JSR PasswordSetNewCursors
|
||||
LDA.b #$01 : STA $14
|
||||
LDA.b #$01 : STA.b NMISTRIPES
|
||||
PLB
|
||||
RTL
|
||||
.selectionValues
|
||||
@@ -133,22 +129,22 @@ db $11, $12, $13, $14, $15, $16, $17, $18, $F2
|
||||
db $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $F3
|
||||
|
||||
Password_Check:
|
||||
JSL.l ValidatePassword : BNE .correct
|
||||
LDA.b #$3C : STA $012E ; error
|
||||
DEC $11
|
||||
JSL ValidatePassword : BNE .correct
|
||||
LDA.b #$3C : STA.w SFX2 ; error
|
||||
DEC.b GameSubMode
|
||||
RTL
|
||||
.correct
|
||||
LDA.b #$1B : STA $012F ; solved puzzle sound
|
||||
INC $11
|
||||
LDA.b #$1B : STA.w SFX3 ; solved puzzle sound
|
||||
INC.b GameSubMode
|
||||
RTL
|
||||
|
||||
Password_Return:
|
||||
LDA.b #$01 : STA $10 ; select screen
|
||||
LDA.b #$01 : STA $11 ; Skip the first submodule
|
||||
STZ $B0
|
||||
STZ $0B9D ; Reset file screen cursor pre-selection
|
||||
STZ $C8
|
||||
STZ $C9
|
||||
LDA.b #$01 : STA.b GameMode ; select screen
|
||||
LDA.b #$01 : STA.b GameSubMode ; Skip the first submodule
|
||||
STZ.b SubSubModule
|
||||
STZ.w SaveFileIndex
|
||||
STZ.b PasswordCodePosition
|
||||
STZ.b PasswordCodePosition+1
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -162,7 +158,7 @@ ValidatePassword:
|
||||
PHX : PHY
|
||||
|
||||
;check for incomplete password
|
||||
LDX #$0F
|
||||
LDX.b #$0F
|
||||
-
|
||||
LDA.l PasswordSRAM, X : BNE +
|
||||
JMP .incorrect
|
||||
@@ -174,45 +170,45 @@ ValidatePassword:
|
||||
; Clear out any existing encryption key
|
||||
LDX.b #$0E
|
||||
LDA.w #$0000
|
||||
- : STA.l !keyBase, X : DEX #2 : BPL -
|
||||
- : STA.l KeyBase, X : DEX #2 : BPL -
|
||||
|
||||
JSR PasswordToKey
|
||||
|
||||
|
||||
LDA.l StaticDecryptionKey+$0A : STA.l !keyBase+$0A
|
||||
LDA.l StaticDecryptionKey+$0C : STA.l !keyBase+$0C
|
||||
LDA.l StaticDecryptionKey+$0E : STA.l !keyBase+$0E
|
||||
LDA.l StaticDecryptionKey+$0A : STA.l KeyBase+$0A
|
||||
LDA.l StaticDecryptionKey+$0C : STA.l KeyBase+$0C
|
||||
LDA.l StaticDecryptionKey+$0E : STA.l KeyBase+$0E
|
||||
|
||||
LDA.l KnownEncryptedValue : STA.l !CryptoBuffer
|
||||
LDA.l KnownEncryptedValue+2 : STA.l !CryptoBuffer+2
|
||||
LDA.l KnownEncryptedValue+4 : STA.l !CryptoBuffer+4
|
||||
LDA.l KnownEncryptedValue+6 : STA.l !CryptoBuffer+6
|
||||
LDA.l KnownEncryptedValue : STA.l CryptoBuffer
|
||||
LDA.l KnownEncryptedValue+2 : STA.l CryptoBuffer+2
|
||||
LDA.l KnownEncryptedValue+4 : STA.l CryptoBuffer+4
|
||||
LDA.l KnownEncryptedValue+6 : STA.l CryptoBuffer+6
|
||||
|
||||
LDA.w #$0002 : STA $04 ;set block size
|
||||
LDA.w #$0002 : STA.b Scrap04 ;set block size
|
||||
|
||||
JSL.l XXTEA_Decode
|
||||
JSL XXTEA_Decode
|
||||
|
||||
SEP #$20 ; 8 bit accumulator
|
||||
|
||||
LDA !CryptoBuffer+0 : CMP #$31 : BNE .incorrect
|
||||
LDA !CryptoBuffer+1 : CMP #$41 : BNE .incorrect
|
||||
LDA !CryptoBuffer+2 : CMP #$59 : BNE .incorrect
|
||||
LDA !CryptoBuffer+3 : CMP #$26 : BNE .incorrect
|
||||
LDA !CryptoBuffer+4 : CMP #$53 : BNE .incorrect
|
||||
LDA !CryptoBuffer+5 : CMP #$58 : BNE .incorrect
|
||||
LDA !CryptoBuffer+6 : CMP #$97 : BNE .incorrect
|
||||
LDA !CryptoBuffer+7 : CMP #$93 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+0 : CMP.b #$31 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+1 : CMP.b #$41 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+2 : CMP.b #$59 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+3 : CMP.b #$26 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+4 : CMP.b #$53 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+5 : CMP.b #$58 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+6 : CMP.b #$97 : BNE .incorrect
|
||||
LDA.l CryptoBuffer+7 : CMP.b #$93 : BNE .incorrect
|
||||
|
||||
;trial decrypt the known plaintext, and verify if result is correct
|
||||
|
||||
.correct
|
||||
PLY : PLX
|
||||
|
||||
LDA #$01 : STA.l !ValidKeyLoaded
|
||||
LDA.b #$01 : STA.l ValidKeyLoaded
|
||||
RTL
|
||||
.incorrect
|
||||
PLY : PLX
|
||||
LDA #$00
|
||||
LDA.b #$00
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -223,75 +219,69 @@ PasswordToKey:
|
||||
; $00 input offset
|
||||
; $02 output offset
|
||||
; $04 shift amount
|
||||
LDA.w #$0000 : STA $00 : STA $02
|
||||
LDA.w #$000B : STA $04
|
||||
LDA.w #$0000 : STA.b Scrap00 : STA.b Scrap02
|
||||
LDA.w #$000B : STA.b Scrap04
|
||||
-
|
||||
LDX $00
|
||||
LDA PasswordSRAM, X : DEC : AND #$001F
|
||||
LDY $04
|
||||
LDX.b Scrap00
|
||||
LDA.l PasswordSRAM, X : DEC : AND.w #$001F
|
||||
LDY.b Scrap04
|
||||
-- : BEQ + : ASL : DEY : BRA -- : + ; Shift left by Y
|
||||
XBA
|
||||
LDX $02
|
||||
ORA !keyBase, X
|
||||
STA !keyBase, X
|
||||
LDX.b Scrap02
|
||||
ORA.l KeyBase, X
|
||||
STA.l KeyBase, X
|
||||
|
||||
LDA $04 : !SUB.w #$0005 : BPL +
|
||||
LDA.b Scrap04 : !SUB.w #$0005 : BPL +
|
||||
!ADD.w #$0008
|
||||
INC $02
|
||||
+ : STA $04
|
||||
INC.b Scrap02
|
||||
+ : STA.b Scrap04
|
||||
|
||||
LDA $00 : INC : STA $00 : CMP.w #$0010 : !BLT -
|
||||
LDA.b Scrap00 : INC : STA.b Scrap00 : CMP.w #$0010 : !BLT -
|
||||
RTS
|
||||
|
||||
LoadPasswordStripeTemplate:
|
||||
LDA $4300 : PHA : LDA $4301 : PHA : LDA $4302 : PHA ; preserve DMA parameters
|
||||
LDA $4303 : PHA : LDA $4304 : PHA : LDA $4305 : PHA ; preserve DMA parameters
|
||||
LDA $4306 : PHA ; preserve DMA parameters
|
||||
LDA.w DMAP0 : PHA : LDA.w BBAD0 : PHA : LDA.w A1T0L : PHA ; preserve DMA parameters
|
||||
LDA.w A1T0H : PHA : LDA.w A1B0 : PHA : LDA.w DAS0L : PHA ; preserve DMA parameters
|
||||
LDA.w DAS0H : PHA ; preserve DMA parameters
|
||||
|
||||
LDA.b #$00 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode
|
||||
LDA.b #$80 : STA.w BBAD0 ; set bus B destination to WRAM register
|
||||
|
||||
LDA.b #$00 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode
|
||||
LDA.b #$80 : STA $4301 ; set bus B destination to WRAM register
|
||||
LDA.b #$02 : STA.w WMADDL ; set WRAM register source address
|
||||
LDA.b #$10 : STA.w WMADDH
|
||||
LDA.b #$7E : STA.w WMADDB
|
||||
|
||||
LDA.b #$02 : STA $2181 ; set WRAM register source address
|
||||
LDA.b #$10 : STA $2182
|
||||
LDA.b #$7E : STA $2183
|
||||
|
||||
LDA.b #Password_StripeImageTemplate : STA $4302 ; set bus A source address
|
||||
LDA.b #Password_StripeImageTemplate>>8 : STA $4303 ; set bus A source address
|
||||
LDA.b #Password_StripeImageTemplate>>16 : STA $4304 ; set bus A source bank
|
||||
LDA.b #Password_StripeImageTemplate : STA.w A1T0L ; set bus A source address
|
||||
LDA.b #Password_StripeImageTemplate>>8 : STA.w A1T0H ; set bus A source address
|
||||
LDA.b #Password_StripeImageTemplate>>16 : STA.w A1B0 ; set bus A source bank
|
||||
|
||||
LDA.b #Password_StripeImageTemplate_end-Password_StripeImageTemplate
|
||||
STA $4305 ;
|
||||
STA.w DAS0L ;
|
||||
LDA.b #Password_StripeImageTemplate_end-Password_StripeImageTemplate>>8
|
||||
STA $4306 ; set transfer size
|
||||
STA.w DAS0H ; set transfer size
|
||||
|
||||
LDA #$01 : STA $420B ; begin DMA transfer
|
||||
LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer
|
||||
|
||||
PLA : STA $4306 : PLA : STA $4305 : PLA : STA $4304 ; restore DMA parameters
|
||||
PLA : STA $4303 : PLA : STA $4302 : PLA : STA $4301 ; restore DMA parameters
|
||||
PLA : STA $4300 ; restore DMA parameters
|
||||
PLA : STA.w DAS0H : PLA : STA.w DAS0L : PLA : STA.w A1B0 ; restore DMA parameters
|
||||
PLA : STA.w A1T0H : PLA : STA.w A1T0L : PLA : STA.w BBAD0 ; restore DMA parameters
|
||||
PLA : STA.w DMAP0 ; restore DMA parameters
|
||||
RTS
|
||||
|
||||
!PASSWORD_INPUT_START_X = $03
|
||||
!PASSWORD_INPUT_START_Y = $0D
|
||||
|
||||
!PASSWORD_DISPLAY_START_X = $04
|
||||
!PASSWORD_DISPLAY_START_Y = $04
|
||||
|
||||
PasswordEraseOldCursors:
|
||||
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
|
||||
;Code Cursor
|
||||
LDA !PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA.b PasswordCodePosition : AND.w #$00FF : ASL : TAX
|
||||
LDA.l .code_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_DISPLAY_START_Y+!PASSWORD_DISPLAY_START_X+$6000
|
||||
!ADD.w #$20*Scrap04+Scrap04+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA.l $1002+Password_StripeImageTemplate_CodeCursorErase-Password_StripeImageTemplate
|
||||
|
||||
;selection cursor
|
||||
LDA !PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA.b PasswordSelectPosition : AND.w #$00FF : ASL : TAX
|
||||
LDA.l .selection_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_INPUT_START_Y+!PASSWORD_INPUT_START_X+$6000
|
||||
!ADD.w #$20*Scrap0D+Scrap03+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA.l $1002+Password_StripeImageTemplate_SelectionCursorErase-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0020 : XBA
|
||||
@@ -315,16 +305,16 @@ RTS
|
||||
PasswordSetNewCursors:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
;Code Cursor
|
||||
LDA !PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA.b PasswordCodePosition : AND.w #$00FF : ASL : TAX
|
||||
LDA.l PasswordEraseOldCursors_code_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_DISPLAY_START_Y+!PASSWORD_DISPLAY_START_X+$6000
|
||||
!ADD.w #$20*Scrap04+Scrap04+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA.l $1002+Password_StripeImageTemplate_CodeCursorDraw-Password_StripeImageTemplate
|
||||
|
||||
;Selection cursor
|
||||
LDA !PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA.b PasswordSelectPosition : AND.w #$00FF : ASL : TAX
|
||||
LDA.l PasswordEraseOldCursors_selection_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_INPUT_START_Y+!PASSWORD_INPUT_START_X+$6000
|
||||
!ADD.w #$20*Scrap0D+Scrap03+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA.l $1002+Password_StripeImageTemplate_SelectionCursorDraw-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0020 : XBA
|
||||
@@ -342,16 +332,16 @@ UpdatePasswordTiles:
|
||||
LDX.w #$000F
|
||||
-
|
||||
LDA.l PasswordSRAM, X : AND.w #$00FF : TXY
|
||||
ASL #3 : STA $00
|
||||
TYA : ASL #4 : STA $03
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank, X
|
||||
LDX $03 : STA $1006, X
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank+$02, X
|
||||
LDX $03 : STA $1008, X
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank+$04, X
|
||||
LDX $03 : STA $100E, X
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank+$06, X
|
||||
LDX $03 : STA $1010, X
|
||||
ASL #3 : STA.b Scrap00
|
||||
TYA : ASL #4 : STA.b Scrap03
|
||||
LDX.b Scrap00 : LDA.l HashAlphabetTilesWithBlank, X
|
||||
LDX.b Scrap03 : STA.w $1006, X
|
||||
LDX.b Scrap00 : LDA.l HashAlphabetTilesWithBlank+$02, X
|
||||
LDX.b Scrap03 : STA.w $1008, X
|
||||
LDX.b Scrap00 : LDA.l HashAlphabetTilesWithBlank+$04, X
|
||||
LDX.b Scrap03 : STA.w $100E, X
|
||||
LDX.b Scrap00 : LDA.l HashAlphabetTilesWithBlank+$06, X
|
||||
LDX.b Scrap03 : STA.w $1010, X
|
||||
|
||||
TYX : DEX : BMI + : BRA -
|
||||
+
|
||||
@@ -360,13 +350,13 @@ RTS
|
||||
|
||||
PasswordMoveCursorRight:
|
||||
; return new code position
|
||||
LDA.b #$2B : STA $012E
|
||||
LDA !PASSWORD_CODE_POSITION : INC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION
|
||||
LDA.b #$2B : STA.w SFX2
|
||||
LDA.b PasswordCodePosition : INC A : AND.b #$0F : STA.b PasswordCodePosition
|
||||
RTS
|
||||
PasswordMoveCursorLeft:
|
||||
; return new code position
|
||||
LDA.b #$2B : STA $012E
|
||||
LDA !PASSWORD_CODE_POSITION : DEC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION
|
||||
LDA.b #$2B : STA.w SFX2
|
||||
LDA.b PasswordCodePosition : DEC A : AND.b #$0F : STA.b PasswordCodePosition
|
||||
RTS
|
||||
|
||||
macro dw_big_endian(value)
|
||||
@@ -380,7 +370,7 @@ endmacro
|
||||
|
||||
Password_Tilemap:
|
||||
;Add any graphics for background 0 here
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+0)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+0)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW ;BOW
|
||||
dw #$0200
|
||||
@@ -400,7 +390,7 @@ dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN ;PENDANT
|
||||
dw #$0200
|
||||
dw #$02AB|!FS_COLOR_BW, #$02AB|!FS_COLOR_BW ;placeholder upper half action button
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+1)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+1)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW ;BOW
|
||||
dw #$0200
|
||||
@@ -420,7 +410,7 @@ dw #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN ;PENDANT
|
||||
dw #$0200
|
||||
dw #$02AB|!FS_COLOR_BW, #$02AB|!FS_COLOR_BW ;placeholder lower half action button
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+3)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+3)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;BOMBOS
|
||||
dw #$0200
|
||||
@@ -440,7 +430,7 @@ dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW ;NET
|
||||
dw #$0200
|
||||
dw #$018A|!FS_COLOR_BW, #$0200 ; Left
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+4)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+4)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;BOMBOS
|
||||
dw #$0200
|
||||
@@ -460,7 +450,7 @@ dw #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW ;NET
|
||||
dw #$0200
|
||||
dw #$019A|!FS_COLOR_BW, #$0200 ; Left
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+6)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+6)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN ;BOOK
|
||||
dw #$0200
|
||||
@@ -480,7 +470,7 @@ dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN
|
||||
dw #$0200
|
||||
dw #$0200, #$018B|!FS_COLOR_BW ; Right
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+7)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+7)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN ;BOOK
|
||||
dw #$0200
|
||||
@@ -500,7 +490,7 @@ dw #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN ;GLOVES
|
||||
dw #$0200
|
||||
dw #$0200, #$019B|!FS_COLOR_BW ; Right
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+9)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+9)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE ;FLIPPERS
|
||||
dw #$0200
|
||||
@@ -520,7 +510,7 @@ dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW ;KEY
|
||||
dw #$0200
|
||||
dw #$0267|!FS_COLOR_BW|!FS_HFLIP, #$0267|!FS_COLOR_BW ;cancel
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+10)
|
||||
%Layer3_VRAM_Address(Scrap03,Scrap0D+10)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE ;FLIPPERS
|
||||
dw #$0200
|
||||
@@ -543,10 +533,10 @@ dw #$0267|!FS_COLOR_BW|!FS_HFLIP|!FS_VFLIP, #$0267|!FS_VFLIP|!FS_COLOR_BW ;cance
|
||||
dw $FFFF
|
||||
|
||||
macro PasswordDisplaySlot(x,y)
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X+<x>,!PASSWORD_DISPLAY_START_Y+<y>)
|
||||
%Layer3_VRAM_Address(Scrap04+<x>,Scrap04+<y>)
|
||||
%dw_big_endian(3)
|
||||
dw #$0186|!FS_COLOR_BW, #$0186|!FS_COLOR_BW
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X+<x>,!PASSWORD_DISPLAY_START_Y+1+<y>)
|
||||
%Layer3_VRAM_Address(Scrap04+<x>,Scrap04+1+<y>)
|
||||
%dw_big_endian(3)
|
||||
dw #$0196|!FS_COLOR_BW, #$0196|!FS_COLOR_BW
|
||||
endmacro
|
||||
@@ -569,37 +559,37 @@ Password_StripeImageTemplate:
|
||||
%PasswordDisplaySlot(18,3)
|
||||
%PasswordDisplaySlot(21,3)
|
||||
.CodeCursorErase ; a code cursor erase (position get be updated)
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X,!PASSWORD_DISPLAY_START_Y+2)
|
||||
%Layer3_VRAM_Address(Scrap04,Scrap04+2)
|
||||
%dw_big_endian(3)
|
||||
dw #$0200, #$0200
|
||||
.CodeCursorDraw ; Then comes a code cursor draw (will override the erase if same position)
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X,!PASSWORD_DISPLAY_START_Y+2)
|
||||
%Layer3_VRAM_Address(Scrap04,Scrap04+2)
|
||||
%dw_big_endian(3)
|
||||
dw #$0267|!FS_COLOR_BW|!FS_HFLIP|!FS_VFLIP, #$0267|!FS_VFLIP|!FS_COLOR_BW
|
||||
.SelectionCursorErase ; a selection cursor erase (position get be updated)
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y-1)
|
||||
%Layer3_VRAM_Address(Scrap03-1,Scrap0D-1)
|
||||
%dw_big_endian(7)
|
||||
dw #$0200, #$0200, #$0200, #$0200
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y)
|
||||
%Layer3_VRAM_Address(Scrap03-1,Scrap0D)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$0200, #$0200
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X+2,!PASSWORD_INPUT_START_Y)
|
||||
%Layer3_VRAM_Address(Scrap03+2,Scrap0D)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$0200, #$0200
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y+2)
|
||||
%Layer3_VRAM_Address(Scrap03-1,Scrap0D+2)
|
||||
%dw_big_endian(7)
|
||||
dw #$0200, #$0200, #$0200, #$0200
|
||||
.SelectionCursorDraw ; Then comes a selection cursor draw (will override the erase if same position)
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y-1)
|
||||
%Layer3_VRAM_Address(Scrap03-1,Scrap0D-1)
|
||||
%dw_big_endian(7)
|
||||
dw #$02BB|!FS_COLOR_GREEN, #$02BC|!FS_COLOR_GREEN, #$02BC|!FS_COLOR_GREEN|!FS_HFLIP, #$02BB|!FS_COLOR_GREEN|!FS_HFLIP
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y)
|
||||
%Layer3_VRAM_Address(Scrap03-1,Scrap0D)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$02BD|!FS_COLOR_GREEN, #$02BD|!FS_COLOR_GREEN|!FS_VFLIP
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X+2,!PASSWORD_INPUT_START_Y)
|
||||
%Layer3_VRAM_Address(Scrap03+2,Scrap0D)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$02BD|!FS_COLOR_GREEN|!FS_HFLIP, #$02BD|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y+2)
|
||||
%Layer3_VRAM_Address(Scrap03-1,Scrap0D+2)
|
||||
%dw_big_endian(7)
|
||||
dw #$02BB|!FS_COLOR_GREEN|!FS_VFLIP, #$02BC|!FS_COLOR_GREEN|!FS_VFLIP, #$02BC|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP, #$02BB|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP
|
||||
dw $FFFF
|
||||
|
||||
Reference in New Issue
Block a user