1
0

LCD decompile

This commit is contained in:
Aiden
2026-05-25 15:10:32 +10:00
parent 1d7f00e59c
commit cdfb811c28
15 changed files with 8836 additions and 19 deletions

View File

@@ -10,6 +10,7 @@
; - The register field is H'FE80-H'FFFF; names below come from appendix B.
; - @aa:8 short absolute operands use BR as the upper address byte.
; - SCI baud inference uses section 14.2.8 BRR formulas when SMR/BRR are known.
; - LCD inference treats E-clock H'F200/H'F201 accesses as status/control and data candidates.
; - Pass --clock-hz to convert SCI BRR settings into numeric baud rates.
; - Cycle counts use Appendix A tables A-7/A-8 for on-chip access with no external wait states.
@@ -223,6 +224,82 @@
; mem_F10E H'F10E program_or_external memory r=0 w=1 width=byte
; ... 206 more symbols omitted from listing header
; LCD/Text Scan
; search 'CONNECT': not literal, hits=0
; near: H'A025 'COMPLETED', H'8E79 'ON CONT1 OFF~X', H'8F55 'ON CONT2 OFF~X', H'94A9 'ON'
; LCD text regions
; region H'63D7-H'6758 count=15 'OPERATION', 'PAINT', 'OPERATION', 'IRIS/M.BLK'
; region H'67E0-H'6831 count=2 'TLCS Xg', 'AGC GAIN AE Xh'
; region H'6A4F-H'6C47 count=8 'AUTO FUNC XjO', 'A.IRIS MODE Xj', 'AI BACK.L~Xj', 'AUTO FUNC Xk='
; region H'6F84-H'6FC0 count=2 'OTHERS Xo', 'SHUTTER Xo'
; region H'7052-H'7477 count=15 'SET RCP', 'MASTER', 'OTHERS Xp', 'COPY TO SLAVES~Xp'
; region H'757A-H'7824 count=14 'BARS TYPE Xuz', 'SMPTE Xu', 'SPLIT Xu', 'FULLFIELD 75% Xu'
; region H'78B5-H'792F count=4 'OTHERS Xx', 'WHITE BLACK~Xx', 'COMM LINK ITEM-2Xx', 'FLARE Xy'
; region H'819C-H'87A9 count=28 'SHADING X', 'WHITE~X', 'SHADING AUTO SETX', 'BLACK~X'
; region H'883D-H'8959 count=7 'MATRIX X', 'STD FL~X', 'PRESET MATRIX X', 'H.SAT SPCL~X'
; region H'8A0C-H'8BAC count=7 'MATRIX X', 'ON SKIN OFF~X', 'SAT HUE X', 'MATRIX X'
; region H'8CB7-H'8CFD count=2 'FILTER X', '1 2 3 4 X'
; region H'8E57-H'8EA7 count=3 'LENS X', 'ON CONT1 OFF~X', 'FOCUS ZOOM X'
; ... 23 more LCD text regions
; LCD text candidates
; text H'41B0 len=35 medium '01020304050607080910111213141516X'
; text H'5B55 len=10 high '0123456789'
; text H'60F6 len=16 high '0123456789ABCDEF'
; text H'63D7 len=10 high 'OPERATION' xrefs=1
; text H'63F5 len=10 high 'PAINT' xrefs=1
; text H'6443 len=10 high 'OPERATION' xrefs=1
; text H'6461 len=10 high 'IRIS/M.BLK' xrefs=1
; text H'6490 len=10 high 'OPERATION' xrefs=1
; text H'64AE len=10 high 'LOCK' xrefs=1
; text H'652F len=19 high 'DYNA LATITUDE Xe/' xrefs=1
; text H'6551 len=18 medium 'HIGH LOW~XeP' xrefs=1
; text H'65C9 len=18 medium 'BLACK STR Xe' xrefs=1
; text H'6644 len=19 medium 'BLACK STR XfD' xrefs=1
; text H'6665 len=19 medium 'STRETCH LEVEL Xfe' xrefs=1
; text H'6683 len=18 high 'POINT1 POINT2Xf' xrefs=1
; text H'6706 len=18 medium 'BLACK STR Xg' xrefs=1
; text H'6727 len=19 medium "COMPRESS LEVEL Xg'" xrefs=1
; text H'6745 len=19 high 'POINT1 POINT2XgE' xrefs=1
; text H'67E0 len=18 medium 'TLCS Xg' xrefs=1
; text H'681F len=18 medium 'AGC GAIN AE Xh' xrefs=1
; text H'693B len=19 medium 'AUTO FUNC Xi;' xrefs=1
; text H'6A4F len=19 medium 'AUTO FUNC XjO' xrefs=1
; text H'6A8E len=18 medium 'A.IRIS MODE Xj' xrefs=1
; text H'6AAD len=17 medium 'AI BACK.L~Xj' xrefs=1
; text H'6B3D len=19 medium 'AUTO FUNC Xk=' xrefs=1
; text H'6B5E len=19 medium 'AUTO FOCUS Xk^' xrefs=1
; text H'6BEF len=18 medium 'DIAG Xk' xrefs=1
; text H'6C16 len=18 medium 'DIAG DATA Xl' xrefs=1
; text H'6C35 len=18 medium 'RESET REQ~Xl4' xrefs=1
; text H'6F84 len=18 medium 'OTHERS Xo' xrefs=1
; text H'6FAE len=18 medium 'SHUTTER Xo' xrefs=1
; text H'7052 len=14 medium 'SET RCP' xrefs=1
; text H'706F len=14 medium 'MASTER' xrefs=1
; text H'709F len=18 medium 'OTHERS Xp' xrefs=1
; text H'70C0 len=18 medium 'COPY TO SLAVES~Xp' xrefs=1
; text H'7144 len=19 medium 'CAM ID SET~XqD' xrefs=1
; text H'71C9 len=18 medium 'OTHERS Xq' xrefs=1
; text H'71F9 len=18 medium 'CAM ID IND Xq' xrefs=1
; text H'7213 len=18 medium 'TITLE IND Xr' xrefs=1
; text H'72A5 len=18 medium 'OTHERS Xr' xrefs=1
; text H'72C7 len=17 medium 'CAM BARS~Xr' xrefs=1
; text H'72E4 len=18 medium 'CLOCK IND Xr' xrefs=1
; text H'7369 len=19 medium 'OTHERS Xsi' xrefs=1
; text H'7393 len=18 high 'CENTER MARKER Xs' xrefs=1
; text H'7425 len=19 medium 'OTHERS Xt%' xrefs=1
; text H'7464 len=19 medium 'SAFETY ZONE Xtd' xrefs=1
; text H'757A len=19 medium 'BARS TYPE Xuz' xrefs=1
; text H'75A4 len=18 medium 'SMPTE Xu' xrefs=1
; ... 192 more LCD text candidates
; LCD Driver Candidates
; H'F200 lcd_status_control status/control register inferred from busy polling and command writes
; H'F201 lcd_data data register inferred from paired data reads/writes
; LCD routines
; routine H'3F40-H'3F74 lcd_wait_and_transfer lcd_command_or_address_write, lcd_data_read, lcd_data_write, lcd_status_read
; LCD busy loops
; loop H'3F4A->H'3F51 LCD busy-flag poll: read H'F200, test bit 7, branch until clear
; Timing Summary
; Straight-line blocks
; block H'1000-H'10CB vec_reset_1000 ins=42 cycles=371 unknown=0
@@ -2135,23 +2212,23 @@ loc_3F40:
3F46: 0C 06 00 48 ORC.W #H'0600, SR ; cycles=4
loc_3F4A:
3F4A: 15 F2 00 00 80 MOVFPE.B @H'F200, R0 ; refs mem_F200 in program_or_external; cycles=13
3F4F: A0 F7 BTST.B #7, R0 ; cycles=2
3F51: 26 F7 BNE loc_3F4A ; cycles=3/8 nt/t
3F4A: 15 F2 00 00 80 MOVFPE.B @H'F200, R0 ; LCD status read from E-clock H'F200; LCD busy-flag poll: read H'F200, test bit 7, branch until clear; refs mem_F200 in program_or_external; cycles=13
3F4F: A0 F7 BTST.B #7, R0 ; LCD busy-flag poll: read H'F200, test bit 7, branch until clear; cycles=2
3F51: 26 F7 BNE loc_3F4A ; LCD busy-flag poll: read H'F200, test bit 7, branch until clear; cycles=3/8 nt/t
3F53: AC F8 BTST.W #8, R4 ; cycles=3
3F55: 26 16 BNE loc_3F6D ; cycles=3/8 nt/t
3F57: AC F9 BTST.W #9, R4 ; cycles=3
3F59: 26 07 BNE loc_3F62 ; cycles=3/8 nt/t
3F5B: 15 F2 00 00 94 MOVTPE.B R4, @H'F200 ; refs mem_F200 in program_or_external; cycles=13
3F5B: 15 F2 00 00 94 MOVTPE.B R4, @H'F200 ; LCD command/address write to E-clock H'F200; refs mem_F200 in program_or_external; cycles=13
3F60: 20 10 BRA loc_3F72 ; cycles=7
loc_3F62:
3F62: 15 F2 01 00 94 MOVTPE.B R4, @H'F201 ; refs mem_F201 in program_or_external; cycles=13
3F62: 15 F2 01 00 94 MOVTPE.B R4, @H'F201 ; LCD data write to E-clock H'F201; refs mem_F201 in program_or_external; cycles=13
3F67: 1D FB 00 08 ADD:Q.W #1, @H'FB00 ; refs ram_FB00 in on_chip_ram; cycles=8
3F6B: 20 05 BRA loc_3F72 ; cycles=8
loc_3F6D:
3F6D: 15 F2 01 00 84 MOVFPE.B @H'F201, R4 ; refs mem_F201 in program_or_external; cycles=13
3F6D: 15 F2 01 00 84 MOVFPE.B @H'F201, R4 ; LCD data read from E-clock H'F201; refs mem_F201 in program_or_external; cycles=13
loc_3F72:
3F72: CF 88 LDC.W @R7+, SR ; cycles=7

File diff suppressed because it is too large Load Diff

View File

@@ -2116,21 +2116,21 @@ void loc_3F40(void)
SR &= (uint16_t)(0x00FF); /* 3F42; ANDC.W #H'00FF, SR; cycles=4 */
SR |= (uint16_t)(0x0600); /* 3F46; ORC.W #H'0600, SR; cycles=4 */
do {
R0 = read_eclock(MEM8[0xF200]); /* 3F4A; MOVFPE.B @H'F200, R0; refs mem_F200; cycles=13 */
set_flags_btst(R0, 7); /* 3F4F; BTST.B #7, R0; cycles=2 */
} while (!Z); /* 3F51; BNE loc_3F4A; cycles=3/8 nt/t */
R0 = read_eclock(MEM8[0xF200]); /* 3F4A; MOVFPE.B @H'F200, R0; LCD status read from E-clock H'F200; LCD busy-flag poll: read H'F200, test bit 7, branch until clear; refs mem_F200; cycles=13 */
set_flags_btst(R0, 7); /* 3F4F; BTST.B #7, R0; LCD busy-flag poll: read H'F200, test bit 7, branch until clear; cycles=2 */
} while (!Z); /* 3F51; BNE loc_3F4A; LCD busy-flag poll: read H'F200, test bit 7, branch until clear; cycles=3/8 nt/t */
set_flags_btst(R4, 8); /* 3F53; BTST.W #8, R4; cycles=3 */
if (!Z) goto loc_3F6D; /* 3F55; BNE loc_3F6D; cycles=3/8 nt/t */
set_flags_btst(R4, 9); /* 3F57; BTST.W #9, R4; cycles=3 */
if (!Z) goto loc_3F62; /* 3F59; BNE loc_3F62; cycles=3/8 nt/t */
write_eclock(MEM8[0xF200], R4); /* 3F5B; MOVTPE.B R4, @H'F200; refs mem_F200; cycles=13 */
write_eclock(MEM8[0xF200], R4); /* 3F5B; MOVTPE.B R4, @H'F200; LCD command/address write to E-clock H'F200; refs mem_F200; cycles=13 */
goto loc_3F72; /* 3F60; BRA loc_3F72; cycles=7 */
loc_3F62:
write_eclock(MEM8[0xF201], R4); /* 3F62; MOVTPE.B R4, @H'F201; refs mem_F201; cycles=13 */
write_eclock(MEM8[0xF201], R4); /* 3F62; MOVTPE.B R4, @H'F201; LCD data write to E-clock H'F201; refs mem_F201; cycles=13 */
MEM16[0xFB00] += (uint16_t)(1); /* 3F67; ADD:Q.W #1, @H'FB00; refs ram_FB00; cycles=8 */
goto loc_3F72; /* 3F6B; BRA loc_3F72; cycles=8 */
loc_3F6D:
R4 = read_eclock(MEM8[0xF201]); /* 3F6D; MOVFPE.B @H'F201, R4; refs mem_F201; cycles=13 */
R4 = read_eclock(MEM8[0xF201]); /* 3F6D; MOVFPE.B @H'F201, R4; LCD data read from E-clock H'F201; refs mem_F201; cycles=13 */
loc_3F72:
SR = (uint16_t)(MEM16[R7++]); /* 3F72; LDC.W @R7+, SR; cycles=7 */
return; /* 3F74; RTS; cycles=12 */