Forgot some ASM files
This commit is contained in:
parent
726d128fee
commit
a1b8e4d538
|
@ -0,0 +1,389 @@
|
|||
m2_formatting:
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// http://en.wikipedia.org/wiki/Double_dabble
|
||||
// int bin_to_bcd(int binary)
|
||||
// In:
|
||||
// r0: binary number
|
||||
// Out:
|
||||
// r0: BCD-coded number
|
||||
// r1: amount of digits used
|
||||
//==============================================================================
|
||||
|
||||
.bin_to_bcd:
|
||||
|
||||
push {r2-r7,lr}
|
||||
mov r2,r8
|
||||
mov r3,r9
|
||||
push {r2-r3}
|
||||
|
||||
lsl r0,r0,#5
|
||||
mov r1,#0
|
||||
mov r3,#27
|
||||
mov r4,#3
|
||||
lsl r4,r4,#8
|
||||
lsl r5,r4,#4
|
||||
lsl r6,r5,#4
|
||||
lsl r7,r6,#12
|
||||
mov r9,r7
|
||||
lsl r7,r6,#8
|
||||
mov r8,r7
|
||||
lsl r7,r6,#4
|
||||
|
||||
//--------------------------------
|
||||
-
|
||||
|
||||
// Ones
|
||||
lsl r2,r1,#28
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r1,#3
|
||||
+
|
||||
|
||||
// Tens
|
||||
lsl r2,r1,#24
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,#0x30
|
||||
+
|
||||
|
||||
// Hundreds
|
||||
lsl r2,r1,#20
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r1,r4
|
||||
+
|
||||
|
||||
// Thousands
|
||||
lsl r2,r1,#16
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r1,r5
|
||||
+
|
||||
|
||||
// Ten-thousands
|
||||
lsl r2,r1,#12
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r1,r6
|
||||
+
|
||||
|
||||
// Hundred-thousands
|
||||
lsl r2,r1,#8
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r1,r7
|
||||
+
|
||||
|
||||
// Millions
|
||||
lsl r2,r1,#4
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r8
|
||||
+
|
||||
|
||||
// Ten-millions
|
||||
lsr r2,r2,#28
|
||||
cmp r2,#5
|
||||
bcc +
|
||||
add r1,r9
|
||||
+
|
||||
|
||||
// Shift
|
||||
lsl r1,r1,#1
|
||||
tst r0,r0
|
||||
bpl +
|
||||
add r1,r1,#1
|
||||
+
|
||||
lsl r0,r0,#1
|
||||
sub r3,r3,#1
|
||||
bne -
|
||||
mov r0,r1
|
||||
|
||||
//--------------------------------
|
||||
// Check how many digits are used
|
||||
mov r3,#1
|
||||
-
|
||||
lsr r1,r1,#4
|
||||
beq +
|
||||
add r3,r3,#1
|
||||
b -
|
||||
+
|
||||
|
||||
//--------------------------------
|
||||
mov r1,r3
|
||||
pop {r2-r3}
|
||||
mov r8,r2
|
||||
mov r9,r3
|
||||
pop {r2-r7,pc}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// int bcd_to_bin(int bcd)
|
||||
// In:
|
||||
// r0: BCD-coded number
|
||||
// Out:
|
||||
// r0: binary number
|
||||
//==============================================================================
|
||||
|
||||
.bcd_to_bin:
|
||||
|
||||
push {r1-r4,lr}
|
||||
mov r1,#0
|
||||
mov r2,#10
|
||||
mov r3,#1
|
||||
|
||||
//--------------------------------
|
||||
// Ones
|
||||
lsl r4,r0,#28
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Tens
|
||||
lsl r4,r0,#24
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Hundreds
|
||||
lsl r4,r0,#20
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Thousands
|
||||
lsl r4,r0,#16
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Ten-thousands
|
||||
lsl r4,r0,#12
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Hundred-thousands
|
||||
lsl r4,r0,#8
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Millions
|
||||
lsl r4,r0,#4
|
||||
lsr r4,r4,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
mul r3,r2
|
||||
|
||||
// Ten-millions
|
||||
lsr r4,r0,#28
|
||||
mul r4,r3
|
||||
add r1,r1,r4
|
||||
|
||||
//--------------------------------
|
||||
mov r0,r1
|
||||
pop {r1-r4,pc}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// ushort format_cash(int amount, char* output, int digits)
|
||||
// In:
|
||||
// r0: amount
|
||||
// r1: output string
|
||||
// r2: digits
|
||||
// Out:
|
||||
// r0: = digits - (digits rendered) - 1
|
||||
//==============================================================================
|
||||
|
||||
.format_cash:
|
||||
print "m2formatting.format_cash: $", pc
|
||||
push {r1-r7,lr}
|
||||
mov r4,r1
|
||||
mov r6,r2
|
||||
|
||||
//--------------------------------
|
||||
// Figure out how many digits we need
|
||||
bl .bin_to_bcd
|
||||
mov r5,r1
|
||||
mov r7,r1
|
||||
|
||||
// The window is 56 pixels wide:
|
||||
// each digit uses 6 pixels, the $ sign uses 6, and the
|
||||
// double-zero uses 8
|
||||
mov r2,#42 // = 56 - 6 - 8
|
||||
lsl r3,r1,#2
|
||||
add r3,r3,r1
|
||||
add r1,r1,r3 // r1 *= 6
|
||||
sub r1,r2,r1 // r1 = 42 - r1
|
||||
|
||||
// Store the control code to the output
|
||||
mov r2,#0x5F
|
||||
strb r2,[r4,#0]
|
||||
mov r2,#0xFF
|
||||
strb r2,[r4,#1]
|
||||
strb r1,[r4,#2]
|
||||
|
||||
// Store the dollar sign
|
||||
mov r2,#0x54
|
||||
strb r2,[r4,#3]
|
||||
add r4,r4,#4
|
||||
|
||||
// Store the digits to the output
|
||||
mov r2,#8
|
||||
sub r2,r2,r5
|
||||
lsl r2,r2,#2
|
||||
lsl r0,r2 // Now the number is pushed to the left of the register
|
||||
|
||||
-
|
||||
lsr r1,r0,#28 // Get the left-most digit
|
||||
add r1,#0x60 // Integer-to-char
|
||||
strb r1,[r4,#0]
|
||||
add r4,r4,#1
|
||||
lsl r0,r0,#4
|
||||
sub r5,r5,#1
|
||||
bne -
|
||||
|
||||
// Store the double-zero sign
|
||||
mov r1,#0x56
|
||||
strb r1,[r4,#0]
|
||||
|
||||
// Store the end code
|
||||
mov r1,#0
|
||||
strb r1,[r4,#1]
|
||||
mov r1,#0xFF
|
||||
strb r1,[r4,#2]
|
||||
|
||||
//--------------------------------
|
||||
sub r5,r6,r7
|
||||
sub r0,r5,#1
|
||||
pop {r1-r7,pc}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// void status1(int x, int y, char* str)
|
||||
// In:
|
||||
// r2: x (pixel)
|
||||
// r3: y (pixel)
|
||||
// r1: str
|
||||
//==============================================================================
|
||||
|
||||
.status1:
|
||||
print "m2formatting.status1: $",pc
|
||||
push {r0-r2,lr}
|
||||
mov r0,r2
|
||||
mov r2,r1
|
||||
mov r1,r3
|
||||
bl m2_vwf.print_string
|
||||
pop {r0-r2,pc}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// void status_clear(WINDOW* window)
|
||||
// In:
|
||||
// r10: window address
|
||||
//==============================================================================
|
||||
|
||||
.status_clear:
|
||||
print "m2_formatting.status_clear: $",pc
|
||||
|
||||
push {r0-r4,lr}
|
||||
ldr r4,=#.status_clear_areas
|
||||
|
||||
//--------------------------------
|
||||
.status_clear_loop:
|
||||
ldrb r0,[r4,#0] // Top-left X
|
||||
cmp r0,#0xFF
|
||||
beq +
|
||||
ldrb r1,[r4,#1] // Top-left Y
|
||||
ldrb r2,[r4,#2] // Bottom-right X
|
||||
ldrb r3,[r4,#3] // Bottom-right Y
|
||||
|
||||
//--------------------------------
|
||||
-
|
||||
bl m2_vwf.erase_tile
|
||||
add r0,r0,#1
|
||||
cmp r0,r2
|
||||
bls -
|
||||
ldrb r0,[r4,#0]
|
||||
add r1,r1,#1
|
||||
cmp r1,r3
|
||||
bls -
|
||||
add r4,r4,#4
|
||||
b .status_clear_loop
|
||||
|
||||
//--------------------------------
|
||||
+
|
||||
pop {r0-r4,pc}
|
||||
|
||||
//--------------------------------
|
||||
.status_clear_areas:
|
||||
|
||||
db $05,$01,$06,$02 // Level
|
||||
db $0C,$07,$0E,$0A // Current HP and PP
|
||||
db $10,$07,$12,$0A // Max HP and PP
|
||||
db $0C,$0B,$12,$0C // Exp
|
||||
db $01,$0D,$07,$0E // Exp to next level
|
||||
db $01,$0F,$1C,$10 // PSI info
|
||||
db $19,$01,$1C,$0E // Stats
|
||||
db $FF,$FF
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// void status_redraw()
|
||||
// In:
|
||||
// r5: #0x3005230
|
||||
//==============================================================================
|
||||
|
||||
.status_redraw:
|
||||
push {r0-r7,lr}
|
||||
|
||||
//--------------------------------
|
||||
// Call the clobbered code to redraw the old (broken) window,
|
||||
// since we still need the borders
|
||||
bl $80BD7AC
|
||||
|
||||
//--------------------------------
|
||||
// Clear the text area
|
||||
ldr r0,[r5,#0x18] // Get the status window address
|
||||
mov r4,r0
|
||||
bl m2_vwf.clear_window
|
||||
|
||||
// Clear the map
|
||||
bl m2_vwf.clear_tilemap
|
||||
|
||||
//--------------------------------
|
||||
// (Copying the code at $80B8308)
|
||||
// Get the address of the status text
|
||||
ldr r0,=#0x8B17EE4
|
||||
ldr r1,=#0x8B17424
|
||||
mov r2,#0x11
|
||||
bl $80BE260
|
||||
|
||||
// Prepare the window for parsing
|
||||
mov r1,r0
|
||||
mov r0,r4
|
||||
mov r2,#0
|
||||
bl $80BE458
|
||||
|
||||
// I think this renders it
|
||||
mov r0,r4
|
||||
bl $80C8FFC
|
||||
|
||||
//--------------------------------
|
||||
pop {r0-r7,pc}
|
|
@ -0,0 +1,201 @@
|
|||
arch gba.thumb
|
||||
|
||||
//==============================================================================
|
||||
// Relocation hacks
|
||||
//==============================================================================
|
||||
|
||||
// Move the werird box font from 0xFCE6C
|
||||
org $80B3274; dd m2_font_relocate
|
||||
|
||||
// Ness mom test
|
||||
org $808F6B0; dd m2_nessmom
|
||||
|
||||
//==============================================================================
|
||||
// Font hacks
|
||||
//==============================================================================
|
||||
|
||||
org $8AFED84; incbin m2-mainfont1-empty.bin
|
||||
org $8B0F424; incbin m2-mainfont2-empty.bin
|
||||
org $8B13424; incbin m2-mainfont3-empty.bin
|
||||
|
||||
//==============================================================================
|
||||
// Control code hacks
|
||||
//==============================================================================
|
||||
|
||||
org $80CA2BC; bl m2_customcodes.check_main
|
||||
org $80C90A2; bl m2_customcodes.check_status
|
||||
|
||||
//==============================================================================
|
||||
// VWF hacks
|
||||
//==============================================================================
|
||||
|
||||
org $80C96F0; push {lr}; bl m2_vwf.print_string_relative; pop {pc}
|
||||
|
||||
// Main entry
|
||||
org $80CA448; push {lr}; bl m2_vwf.main; b $80CA46C
|
||||
|
||||
// Status entry
|
||||
org $80C9116; push {lr}; bl m2_vwf.status; b $80C9144
|
||||
|
||||
// Menu select entry
|
||||
org $80B7FC6; bl m2_vwf.print_string_relative
|
||||
|
||||
// Selection menu entry
|
||||
org $80C1CE0
|
||||
bl m2_customcodes.check_selection_menu
|
||||
b $80C1D10
|
||||
bl m2_vwf.selection_menu
|
||||
b $80C1D0A
|
||||
|
||||
org $80C1D18; bne $80C1CE6
|
||||
|
||||
// Disable coordinate incrementing
|
||||
org $80CA48E; nop // X
|
||||
|
||||
// Disable menu redrawing
|
||||
org $80B7E4E; nop; nop // Talk
|
||||
org $80B81FA; nop; nop // Check
|
||||
|
||||
// Save the current tilebase
|
||||
org $80BDA44; push {lr}; bl m2_vwf.save_tilebase
|
||||
|
||||
// Pixel-X resets
|
||||
org $80BE4E0; bl m2_vwf.x_reset0 // Menu window
|
||||
org $80BE45E; bl m2_vwf.x_reset3 // Cash window
|
||||
org $80C9854; bl m2_vwf.x_reset1
|
||||
org $80C9CBE; bl m2_vwf.x_reset2
|
||||
org $80C9D5C; bl m2_vwf.x_reset2
|
||||
org $80CA1FC; bl m2_vwf.x_reset2
|
||||
org $80CA270; bl m2_vwf.x_reset1
|
||||
org $80CA30A; bl m2_vwf.x_reset2
|
||||
org $80CA332; bl m2_vwf.x_reset1
|
||||
org $80C8F26; bl m2_vwf.x_reset4 // Newline after a menu selection
|
||||
|
||||
// Erase a tile
|
||||
org $80CA560; bl m2_vwf.erase_tile_short // short, one-liner windows
|
||||
org $80C8F2A; bl m2_vwf.erase_tile_main // main version
|
||||
|
||||
// Copy a tile upwards
|
||||
org $80CA60E; bl m2_vwf.copy_tile
|
||||
|
||||
// Re-draw the status screen after exiting the PSI sub-menu
|
||||
org $80BACFC; bl m2_formatting.status_redraw
|
||||
|
||||
//==============================================================================
|
||||
// Formatting hacks
|
||||
//==============================================================================
|
||||
|
||||
// Cash window
|
||||
org $80B785C; mov r0,#0xC // allocate 3 extra bytes for our positioning code
|
||||
org $80B8A08; bl m2_formatting.format_cash
|
||||
org $80B8A24; b $80B8A2E // skip the game's adding the $ and double-zero to the cash window
|
||||
|
||||
// Status window
|
||||
org $80CA78A; mov r0,#0x60 // integer-to-char change
|
||||
org $80CA7AC; mov r2,#0x69 // integer-to-char change
|
||||
org $80CA7EC; sub r1,#0xA0 // integer-to-char change
|
||||
|
||||
incsrc m2-status-initial.asm
|
||||
incsrc m2-status-switch.asm
|
||||
|
||||
// Make the PSI type window bigger
|
||||
org $80B7820; mov r1,#4 // X
|
||||
org $80B7824; mov r3,#6 // width
|
||||
|
||||
// Greek letters
|
||||
org $8B1B907; db $8B // alpha
|
||||
org $8B1B90A; db $8C // beta
|
||||
org $8B1B90D; db $8D // gamma
|
||||
org $8B1B910; db $8E // sigma
|
||||
org $8B1B913; db $8F // omega
|
||||
|
||||
// PSI stuff
|
||||
org $80C21E4; bl m2_vwf.print_string_relative
|
||||
org $80C21C4; bl m2_vwf.print_string_relative
|
||||
org $80C2258; bl m2_vwf.print_string_relative
|
||||
org $80C2270; bl m2_vwf.print_string_relative
|
||||
org $80C22AC; bl m2_vwf.print_string_relative
|
||||
org $80C22C4; bl m2_vwf.print_string_relative
|
||||
org $80C203E; mov r1,#0x12 // new entry length
|
||||
org $80C21B4; mov r1,#0x12
|
||||
org $80C224A; mov r1,#0x12
|
||||
org $80C229E; mov r1,#0x12
|
||||
|
||||
// PSI Rockin
|
||||
org $80C2192; mov r3,#8 // Y
|
||||
org $80C219E
|
||||
mov r2,#0x71
|
||||
bl m2_formatting.status1
|
||||
|
||||
//==============================================================================
|
||||
// Data files
|
||||
//==============================================================================
|
||||
|
||||
org $8B2C000
|
||||
|
||||
// Box font relocation
|
||||
m2_font_relocate:
|
||||
incbin m2-font-relocate.bin
|
||||
|
||||
// Co-ordinate table
|
||||
m2_coord_table:
|
||||
incbin m2-coord-table.bin
|
||||
|
||||
// EB fonts
|
||||
m2_font_table:
|
||||
dd m2_font_main
|
||||
dd m2_font_saturn
|
||||
|
||||
m2_font_main:
|
||||
incbin m2-font-main.bin
|
||||
|
||||
m2_font_saturn:
|
||||
incbin m2-font-saturn.bin
|
||||
|
||||
// EB font heights
|
||||
m2_height_table:
|
||||
db $02, $02, $01, $00 // last byte for alignment
|
||||
|
||||
// EB font widths
|
||||
m2_widths_table:
|
||||
dd m2_widths_main
|
||||
dd m2_widths_saturn
|
||||
|
||||
m2_widths_main:
|
||||
incbin m2-widths-main.bin
|
||||
|
||||
m2_widths_saturn:
|
||||
// tba
|
||||
|
||||
// Ness mom test
|
||||
m2_nessmom:
|
||||
print "m2-nessmom: $", pc
|
||||
incbin m2-nessmom.bin
|
||||
|
||||
// Misc text
|
||||
org $8B17EE4; incbin m2-misctext-offsets.bin
|
||||
org $8B40000; incbin m2-misctext.bin
|
||||
|
||||
// Menu choices
|
||||
org $8B19A64; incbin m2-menuchoices-offsets.bin
|
||||
org $8B41000; incbin m2-menuchoices.bin
|
||||
|
||||
// PSI names
|
||||
incsrc m2-psinames.asm
|
||||
org $8B42000; incbin m2-psinames.bin
|
||||
|
||||
//==============================================================================
|
||||
// Misc
|
||||
//==============================================================================
|
||||
|
||||
org $2027FC0
|
||||
m2_custom_wram:
|
||||
|
||||
//==============================================================================
|
||||
// Code files
|
||||
//==============================================================================
|
||||
|
||||
org $80FCE6C
|
||||
incsrc m2-vwf.asm
|
||||
incsrc m2-formatting.asm
|
||||
incsrc m2-customcodes.asm
|
Loading…
Reference in New Issue