84PCE:Ports:D000
From WikiTI
Contents
Synopsis
Port Number: D000
Memory-mapped Address: F80000
Function: LCD Interface
This appears to be an SPI controller that interfaces with the LCD. Non-extended commands from [1] appear to work, but there's plenty of unknown commands used by the boot code.
Port | Default | Bits | Information |
D000 F80000 |
0000F38C | Boot code writes 180B/09 before/after turning on/off the lcd. Bits 0-2 could be transfer size. | |
D004 F80004 |
0000182B | 007FFFFF | Boot code initializes to 02000B. |
D008 F80008 |
0002000B | 00000F8F | Boot code initializes to 010C. Bit 0 is set to transfer data. Bit 7 is set/reset for reading/writing. |
D00C F8000C |
000004F2 | Status bits. Boot code waits for bits 4-7 and 10 to be 0 before/after reading/writing. | |
D010 F80010 |
00002100 | Unknown | |
D014 F80014 |
00000008 | Unknown | |
D018 F80014 |
FIFO in/out. | ||
D01C F8001C |
0E0F0F1F | Constant, could be an ID or status. | |
D060 F80060 |
00012100 | Constant, could be an ID or status. | |
D064 F80064 |
0E0F0F1F | Constant, could be an ID or status. |
Example
Sending
ld a,036h ; Flips the lcd horizontally, vertically, and swaps the b and r components call spiCmd ld a,0C0h call spiParam ld a,002h ; Resetting the lcd on exit call spiCmd jp boot_InitializeHardware ; Input: A = parameter spiParam: scf ; First bit is set for data .db 030h ; jr nc,? ; skips over one byte ; Input: A = command spiCmd: or a,a ; First bit is clear for commands ld hl,0F80818h call spiWrite ld l,h ld (hl),001h spiWait: ld l,00Dh spiWait1: ld a,(hl) and a,0F0h jr nz,spiWait1 dec l spiWait2: bit 2,(hl) jr nz,spiWait2 ld l,h ld (hl),a ret spiWrite: ld b,3 spiWriteLoop: rla rla rla ld (hl),a ; send 3 bits djnz spiWriteLoop ret
Receiving
This does not appear to work, always returning 0 on the calcs I've tested, due to either a TI bug or hardware issue.
; Input: A = command ; Ouput: A = data spiRead: ld hl,0F80808 ld (hl),00Ch ld l,018h or a,a call spiWrite xor a,a ; not sure what this is for call spiWrite ld l,009h ld (hl),001h dec l ld (hl),081h call spiWait ld l,$18 ld a,(hl) ; dummy read ld a,(hl) ld a,(hl) xor a,a ld bc,00300h spiReadLoop: ld a,(hl) and a,3 add a,a add a,a add a,a or a,c ld c,a djnz spiReadLoop ret