A83: Ti-83 Plus Flash Access


[Prev][Next][Index][Thread]

A83: Ti-83 Plus Flash Access




I've been trying for a while to understand how the 83p Flash ROM works, I've
isolated this in base code , but It doesn't seem to work:

--/ This piece of code runs at RamCode(8100h) --/

FlashWrite:
 AND 1Fh
 OUT (06h), A

 BIT 7, H
 JR NZ, NoBitSet

 SET 1, (IY + 25h)
wFlashLp:
 BIT 1, (IY + 25h)
NoBitSet:
 PUSH HL
 JR NZ, SkipAdjust

 LD HL, 7FFFh
 OR A
 SBC HL, DE
 JR NC, SkipAdjust

 IN A, (06h)
 INC A
 CP 1Eh
 JR Z, NoOut
 OUT (06h), A
NoOut:
 LD DE, 4000h

SkipAdjust:
 POP HL

NotBitSet:

 IN A, (06h)
 PUSH AF
 LD A, 02h
 OUT (06h), A
 LD A, 0AAh
 LD (6AAAh), A
 LD A, 01h
 OUT (06h), A
 LD A, 55h
 LD (5555h), A
 LD A, 02h
 OUT (06h), A
 LD A, 0A0h
 LD (6AAAh), A
 POP AF
 OUT (06h), A
 LDI

 DEC DE
 DEC HL

RepeatChk:
 LD A, (DE)
 PUSH AF
 XOR (HL)
 AND 80h
 JR Z, NeXtByte

 POP AF
 BIT 5, A
 JR Z, RepeatChk

 LD A, (DE)
 XOR (HL)
 AND 80h
 JR NZ, FlashErr
 JR StackFlushed


NeXtByte:
 POP AF

StackFlushed:
 INC DE
 INC HL
 LD A, B
 OR C
 JR NZ, wFlashLp

 DEC DE
 LD A, 0F0h
 LD (DE), A
 INC DE

 LD A, 1Fh
 OUT (06h), A

 XOR A
 RET


FlashErr:
 LD A, 0F0h
 LD (DE), A
 LD A, 1Fh
 OUT (06h), A
 OR A
 RET
CodeSiz  EQU $ - FlashWrite

--/ /--

This can be used to invoke that code, where B is byte to write, DE offset in
flash page, A ROM page and C, number of bytes to write

 LD BC, 1F50h

 LD DE, 4000h
 LD A, 0Fh

fWriteLp:
 PUSH BC
 PUSH AF
 LD C, 01h
 LD IX, 8100h
 Invoke(8021h)
 POP AF
 POP BC
 DEC C
 JR NZ, fWriteLp


--/ /-


Solignac Julien
Alias x1Cygnus
x1cygnus@online.fr
http://x1cygnus.online.fr/