0 Members and 1 Guest are viewing this topic.
WriteFlashByte: push hl push af ld bc, ProgramRoutineEnd - ProgramFlashRoutine call AllocateExecutableMem ; Allocates executable RAM, accepts BC as size, outputs hl is pointer to free RAM ex hl, de push de ld hl, ProgramFlashRoutine ldir pop de pop af pop hl ex hl, de ld bc, WriteFlashRet push bc ;di ;halt jp (hl) WriteFlashRet: retProgramFlashRoutine:; a = value, hl = address; Flash program sequence; This is being done according to how the datasheet says it should be done.; The standard interrupt must not trigger during this sequence or the flash chip; will not get the write command.; At 6MHz, one clock cycle will be 167ns; At 15MHz, one clock cycle will be 67ns ex hl, de push af push hl di ; reset bus (not needed by the books) ;ld a, 0F0h ;ld (4000h), a ; First bus cycle---unlock ld a, 0AAh ld (4AAAh), a ; Second bus cycle---unlock ld a, 55h ld (4555h), a ; Third bus cycle---write command ld a, 0A0h ld (4AAAh), a ; Fourth bus cycle---program data pop hl pop af ld (hl), a; Wait for data to be good; "During the Embedded Program Algorithm, an attempt to read the devices will; produce the complement of the data last written to DQ7. Upon completion of the; Embedded Program Algorithm, an attempt to read the device will produce the; true data last written to DQ7"; "DQ5 will indicate if the program or erase time has exceeded the specified; limits (internal pulse count). If this occurs, reset the device with command; sequence."---Fujitsu documentationprogramWaitLoop: ld b, a ld a, 0FDh ; This checks for the CLEAR key. out (1), a ; If pressed, it aborts. in a, (1) cp 0BFh jr z, abortProgram xor (hl) bit 7, a ld a, b jr z, programDone bit 5, (hl) jr z, programWaitLoopabortProgram: ld a, 0F0h ld (4000h), a retprogramDone: ei retProgramRoutineEnd:
Thanks. Now I need to erase sectors and make the filesystem KFS compliant and the kernel will be done